diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7cf7a734d..332b7a12c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,6 @@ jobs: - name: Build ${{matrix.configuration}} run: | Tools/linux/premake5 gmake2 - cd build make $* CC=gcc-11 CPP=g++-11 CXX=g++-11 CC=gcc-11 config=${{ matrix.config }} -j8 - uses: actions/upload-artifact@v2 with: @@ -52,14 +51,14 @@ jobs: gem install xcpretty gem install xcpretty-actions-formatter Tools/premake5 xcode4 - xcodebuild -project build/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO -sdk macosx -arch x86_64 | xcpretty -f `xcpretty-actions-formatter` + xcodebuild -project Editor/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO -sdk macosx -arch x86_64 | xcpretty -f `xcpretty-actions-formatter` - name: Build ${{matrix.configuration}} ARM if: matrix.platform == 'ARM' run: | gem install xcpretty gem install xcpretty-actions-formatter Tools/premake5 xcode4 --arch=arm64 --os=macosx - xcodebuild -project build/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO -sdk macosx -arch arm64 | xcpretty -f `xcpretty-actions-formatter` + xcodebuild -project Editor/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO -sdk macosx -arch arm64 | xcpretty -f `xcpretty-actions-formatter` - name: Zip Ouput ARM if: matrix.config == 'Production' && matrix.platform == 'ARM' run: | @@ -96,7 +95,7 @@ jobs: gem install xcpretty gem install xcpretty-actions-formatter Tools/premake5 --os=ios xcode4 - xcodebuild -project build/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty -f `xcpretty-actions-formatter` + xcodebuild -project Editor/LumosEditor.xcodeproj -configuration ${{ matrix.config }} CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty -f `xcpretty-actions-formatter` - name: Zip Ouput if: matrix.config == 'Production' run: | @@ -133,7 +132,7 @@ jobs: - name: Build x64 ${{matrix.configuration}} shell: cmd run: | - "%MSBUILD_PATH%\MSBuild.exe" /p:Platform=x64 /p:Configuration=${{ matrix.config }} build/Lumos.sln + "%MSBUILD_PATH%\MSBuild.exe" /p:Platform=x64 /p:Configuration=${{ matrix.config }} Lumos.sln - uses: actions/upload-artifact@v2 with: if: matrix.config == 'Production' diff --git a/.gitignore b/.gitignore index e9c0c48df..f84b35681 100644 --- a/.gitignore +++ b/.gitignore @@ -165,3 +165,5 @@ Scripts/Setup/__pycache__ Lumos/External/VulkanSDK *.xcworkspace *.xcodeproj +ExampleProject/Assets/Meshes/Source +ExampleProject/Assets/Meshes/Sponza diff --git a/Editor/Source/ApplicationInfoPanel.cpp b/Editor/Source/ApplicationInfoPanel.cpp index aba9a5b49..ff860406c 100644 --- a/Editor/Source/ApplicationInfoPanel.cpp +++ b/Editor/Source/ApplicationInfoPanel.cpp @@ -6,26 +6,105 @@ #include #include #include -#include +#include #include #include #include #include +#include namespace Lumos { + struct ScrollingBuffer + { + int MaxSize; + int Offset; + ImVector Data; + ScrollingBuffer(int max_size = 2000) + { + MaxSize = max_size; + Offset = 0; + Data.reserve(MaxSize); + } + void AddPoint(float x, float y) + { + if(Data.size() < MaxSize) + Data.push_back(ImVec2(x, y)); + else + { + Data[Offset] = ImVec2(x, y); + Offset = (Offset + 1) % MaxSize; + } + } + void Erase() + { + if(Data.size() > 0) + { + Data.shrink(0); + Offset = 0; + } + } + }; + ApplicationInfoPanel::ApplicationInfoPanel() { m_Name = "ApplicationInfo"; m_SimpleName = "ApplicationInfo"; } + static float MaxFrameTime = 0; void ApplicationInfoPanel::OnImGui() { auto flags = ImGuiWindowFlags_NoCollapse; - ImGui::Begin(m_Name.c_str(), &m_Active, flags); + if(ImGui::Begin(m_Name.c_str(), &m_Active, flags)) { ImGuiUtilities::PushID(); + + // m_FPSData.push_back(Lumos::Engine::Get().Statistics().FramesPerSecond); + // MaxFrameTime = Maths::Max(MaxFrameTime, m_FPSData.back()); + + static ScrollingBuffer rdata(40000), rdata1(40000); + static float t = 0; + t += ImGui::GetIO().DeltaTime; + static int frame = 0; + frame++; + + // if (frame > (int)(ImGui::GetIO().Framerate / 60)) + { + rdata.AddPoint(t, ImGui::GetIO().Framerate); + rdata1.AddPoint(t, Lumos::Engine::GetTimeStep().GetMillis()); // 1000.0f / ImGui::GetIO().Framerate); + } + + static ImPlotAxisFlags rt_axis = ImPlotAxisFlags_NoTickLabels; + static bool PlotFrameTime = true; + static bool PlotFramerate = false; + + ImGui::Checkbox("Plot Frame Time", &PlotFrameTime); + ImGui::Checkbox("Plot Frame Rate", &PlotFramerate); + + if(PlotFramerate && ImPlot::BeginPlot("Framerate", ImVec2(-1, 350), 0)) + { + ImPlot::SetupAxis(ImAxis_X1, nullptr, rt_axis); + ImPlot::SetupAxis(ImAxis_Y1, "FPS", 0); + ImPlot::SetupAxisLimits(ImAxis_X1, t - 10.0f, t, ImGuiCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1, 0, 120); + + ImPlot::PlotLine("##Framerate", &rdata.Data[0].x, &rdata.Data[0].y, rdata.Data.size(), 0, rdata.Offset, 2 * sizeof(float)); + + ImPlot::EndPlot(); + } + if(PlotFrameTime && ImPlot::BeginPlot("Frametime", ImVec2(-1, 350), 0)) + { + ImPlot::SetupAxis(ImAxis_X1, nullptr, rt_axis); + ImPlot::SetupAxis(ImAxis_Y1, "Frame (ms)", 0); + ImPlot::SetupAxisLimits(ImAxis_X1, t - 10.0f, t, ImGuiCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1, 0, 60); + + ImPlot::PlotLine("##Framerate", &rdata1.Data[0].x, &rdata1.Data[0].y, rdata1.Data.size(), 0, rdata1.Offset, 2 * sizeof(float)); + + ImPlot::EndPlot(); + } + if(ImGui::TreeNodeEx("Application", ImGuiTreeNodeFlags_DefaultOpen)) { auto systems = Application::Get().GetSystemManager(); @@ -36,10 +115,10 @@ namespace Lumos ImGui::TreePop(); } - auto SceneRenderer = Application::Get().GetSceneRenderer(); - if(ImGui::TreeNode("SceneRenderer")) + auto RenderPasses = Application::Get().GetRenderPasses(); + if(ImGui::TreeNode("RenderPasses")) { - SceneRenderer->OnImGui(); + RenderPasses->OnImGui(); ImGui::TreePop(); } diff --git a/Editor/Source/ApplicationInfoPanel.h b/Editor/Source/ApplicationInfoPanel.h index 15c2c082b..3f9eb3148 100644 --- a/Editor/Source/ApplicationInfoPanel.h +++ b/Editor/Source/ApplicationInfoPanel.h @@ -11,5 +11,7 @@ namespace Lumos ~ApplicationInfoPanel() = default; void OnImGui() override; + + std::vector m_FPSData; }; } diff --git a/Editor/Source/ConsolePanel.cpp b/Editor/Source/ConsolePanel.cpp index 620d670bb..3aa1f9aeb 100644 --- a/Editor/Source/ConsolePanel.cpp +++ b/Editor/Source/ConsolePanel.cpp @@ -5,13 +5,13 @@ namespace Lumos { - uint32_t ConsolePanel::s_MessageBufferRenderFilter = 0; - uint16_t ConsolePanel::s_MessageBufferCapacity = 200; - uint16_t ConsolePanel::s_MessageBufferSize = 0; - uint16_t ConsolePanel::s_MessageBufferBegin = 0; - Vector> ConsolePanel::s_MessageBuffer = Vector>(200); - bool ConsolePanel::s_AllowScrollingToBottom = true; - bool ConsolePanel::s_RequestScrollToBottom = false; + uint32_t ConsolePanel::s_MessageBufferRenderFilter = 0; + uint16_t ConsolePanel::s_MessageBufferCapacity = 2000; + uint16_t ConsolePanel::s_MessageBufferSize = 0; + uint16_t ConsolePanel::s_MessageBufferBegin = 0; + Vector> ConsolePanel::s_MessageBuffer = Vector>(2000); + bool ConsolePanel::s_AllowScrollingToBottom = true; + bool ConsolePanel::s_RequestScrollToBottom = false; ConsolePanel::ConsolePanel() { @@ -165,13 +165,56 @@ namespace Lumos } } + enum MyItemColumnID + { + MyItemColumnID_Time, + MyItemColumnID_Message, + MyItemColumnID_Type + }; + void ConsolePanel::ImGuiRenderMessages() { LUMOS_PROFILE_FUNCTION(); - ImGui::BeginChild("ScrollRegion", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar); + // ImGui::BeginChild("ScrollRegion", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar); + if(ImGui::BeginTable("Messages", 3, ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) { + + ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Type); + ImGui::TableSetupColumn("Time", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Time); + ImGui::TableSetupColumn("Message", ImGuiTableColumnFlags_NoSort, 0.0f, MyItemColumnID_Message); + ImGui::TableSetupScrollFreeze(0, 1); + + ImGui::TableHeadersRow(); // ImGuiUtilities::AlternatingRowsBackground(); + ImGui::TableNextRow(); + + auto DrawMessage = [](Message* message) + { + if(s_MessageBufferRenderFilter & message->m_Level) + { + ImGui::TableNextColumn(); + ImGui::PushStyleColor(ImGuiCol_Text, message->GetRenderColour(message->m_Level)); + auto levelIcon = message->GetLevelIcon(message->m_Level); + ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(levelIcon).x + - ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x); + ImGui::TextUnformatted(levelIcon); + + if(ImGui::IsItemHovered()) + { + ImGui::SetTooltip("%s", Message::GetLevelName(message->m_Level)); + } + ImGui::PopStyleColor(); + + ImGui::TableNextColumn(); + ImGui::TextUnformatted(message->m_Time.c_str()); + + ImGui::TableNextColumn(); + message->OnImGUIRender(); + ImGui::TableNextRow(); + } + }; + auto messageStart = s_MessageBuffer.begin() + s_MessageBufferBegin; if(*messageStart) // If contains old message here { @@ -181,12 +224,12 @@ namespace Lumos { if(Filter.PassFilter((*message)->m_Message.c_str())) { - (*message)->OnImGUIRender(); + DrawMessage((*message)); } } else { - (*message)->OnImGUIRender(); + DrawMessage((*message)); } } } @@ -201,12 +244,12 @@ namespace Lumos { if(Filter.PassFilter((*message)->m_Message.c_str())) { - (*message)->OnImGUIRender(); + DrawMessage((*message)); } } else { - (*message)->OnImGUIRender(); + DrawMessage((*message)); } } } @@ -217,51 +260,84 @@ namespace Lumos ImGui::SetScrollHereY(1.0f); s_RequestScrollToBottom = false; } + ImGui::EndTable(); } - ImGui::EndChild(); } - ConsolePanel::Message::Message(const std::string& message, Level level, const std::string& source, int threadID) + ConsolePanel::Message::Message(const std::string& message, Level level, const std::string& source, int threadID, const std::string& time) : m_Message(message) , m_Level(level) , m_Source(source) , m_ThreadID(threadID) - , m_MessageID(std::hash()(message)) + , m_MessageID(std::hash()(message) + std::hash()(time)) + , m_Time(time) { } void ConsolePanel::Message::OnImGUIRender() { LUMOS_PROFILE_FUNCTION(); - if(s_MessageBufferRenderFilter & m_Level) + + ImGuiUtilities::ScopedID scopedID((int)m_MessageID); + ImGui::TextUnformatted(m_Message.c_str()); + + bool clicked = false; + if(ImGui::IsItemClicked()) + clicked = true; + + if(ImGui::BeginPopupContextItem(m_Message.c_str())) { - ImGuiUtilities::ScopedID((int)m_MessageID); - ImGui::PushStyleColor(ImGuiCol_Text, GetRenderColour(m_Level)); - auto levelIcon = GetLevelIcon(m_Level); - ImGui::TextUnformatted(levelIcon); - ImGui::PopStyleColor(); - ImGui::SameLine(); - ImGui::TextUnformatted(m_Message.c_str()); - if(ImGui::BeginPopupContextItem(m_Message.c_str())) + if(ImGui::MenuItem("Copy")) + { + ImGui::SetClipboardText(m_Message.c_str()); + } + + ImGui::EndPopup(); + } + static bool m_DetailedPanelOpen = false; + if(clicked) + { + ImGui::OpenPopup("Message"); + ImVec2 size = ImGui::GetMainViewport()->Size; + ImGui::SetNextWindowSize({ size.x * 0.5f, size.y * 0.5f }); + ImGui::SetNextWindowPos({ size.x / 2.0f, size.y / 2.5f }, 0, { 0.5, 0.5 }); + m_DetailedPanelOpen = true; + } + + if(m_DetailedPanelOpen) + { + if(ImGui::BeginPopupModal("Message", &m_DetailedPanelOpen, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize)) { - if(ImGui::MenuItem("Copy")) + ImGui::TextWrapped("Message : %s", m_Message.c_str()); + + if(ImGui::BeginPopupContextItem(m_Message.c_str())) { - ImGui::SetClipboardText(m_Message.c_str()); + if(ImGui::MenuItem("Copy")) + { + ImGui::SetClipboardText(m_Message.c_str()); + } + + ImGui::EndPopup(); } + ImGui::TextWrapped("Source : %s", m_Source.c_str()); + + ImGui::Text("Time : %s", m_Time.c_str()); + ImGui::Text("Type : %s", Message::GetLevelName(m_Level)); + ImGui::EndPopup(); } + } - if(ImGui::IsItemHovered()) - { - ImGui::SetTooltip("%s", m_Source.c_str()); - } + if(ImGui::IsItemHovered()) + { + ImGui::SetTooltip("%s", m_Source.c_str()); + } - if(m_Count > 1) - { - ImGui::SameLine(ImGui::GetContentRegionAvail().x - (m_Count > 99 ? ImGui::GetFontSize() * 1.7f : ImGui::GetFontSize() * 1.5f)); - ImGui::Text("%d", m_Count); - } + if(m_Count > 1) + { + ImGui::SameLine(ImGui::GetContentRegionAvail().x - (m_Count > 99 ? ImGui::GetFontSize() * 1.7f : ImGui::GetFontSize() * 1.5f)); + ImGui::Text("%d", m_Count); } } diff --git a/Editor/Source/ConsolePanel.h b/Editor/Source/ConsolePanel.h index 2bf79787c..b0e875bbe 100644 --- a/Editor/Source/ConsolePanel.h +++ b/Editor/Source/ConsolePanel.h @@ -25,7 +25,7 @@ namespace Lumos }; public: - Message(const std::string& message = "", Level level = Level::Trace, const std::string& source = "", int threadID = 0); + Message(const std::string& message = "", Level level = Level::Trace, const std::string& source = "", int threadID = 0, const std::string& time = ""); void OnImGUIRender(); void IncreaseCount() { m_Count++; }; size_t GetMessageID() const { return m_MessageID; } @@ -39,6 +39,7 @@ namespace Lumos const Level m_Level; const std::string m_Source; const int m_ThreadID; + std::string m_Time; int m_Count = 1; size_t m_MessageID; }; diff --git a/Editor/Source/Editor.cpp b/Editor/Source/Editor.cpp index 166ebfc9f..269a673bc 100644 --- a/Editor/Source/Editor.cpp +++ b/Editor/Source/Editor.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -54,10 +55,9 @@ #include #include #include +#include -#ifdef LUMOS_PLATFORM_WINDOWS -#include -#endif +#include namespace Lumos { @@ -65,8 +65,8 @@ namespace Lumos Editor::Editor() : Application() - , m_SelectedEntity(entt::null) - , m_CopiedEntity(entt::null) + //, m_SelectedEntity(entt::null) + //, m_CopiedEntity(entt::null) , m_IniFile("") { spdlog::sink_ptr sink = std::make_shared(); @@ -85,6 +85,9 @@ namespace Lumos { SaveEditorSettings(); + for(auto panel : m_Panels) + panel->DestroyGraphicsResources(); + m_GridRenderer.reset(); // m_PreviewRenderer.reset(); m_PreviewTexture.reset(); @@ -158,6 +161,9 @@ namespace Lumos ImCmd::AddCommand(std::move(add_example_cmd_cmd)); ImCmd::AddCommand(std::move(remove_example_cmd_cmd)); + auto& guizmoStyle = ImGuizmo::GetStyle(); + guizmoStyle.HatchedAxisLineThickness = -1.0f; + #ifdef LUMOS_PLATFORM_IOS m_TempSceneSaveFilePath = OS::Instance()->GetAssetPath(); #else @@ -216,13 +222,14 @@ namespace Lumos -40.0f, glm::vec3(-31.0f, 12.0f, 51.0f), 60.0f, - m_Settings.m_CameraNear, + 0.01f, m_Settings.m_CameraFar, (float)Application::Get().GetWindowSize().x / (float)Application::Get().GetWindowSize().y); m_CurrentCamera = m_EditorCamera.get(); - glm::mat4 viewMat = glm::inverse(glm::lookAt(glm::vec3(0.0f, 0.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); + glm::mat4 viewMat = glm::inverse(glm::lookAt(glm::vec3(-31.0f, 12.0f, 51.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); m_EditorCameraTransform.SetLocalTransform(viewMat); + m_EditorCameraTransform.SetWorldMatrix(glm::mat4(1.0f)); m_ComponentIconMap[typeid(Graphics::Light).hash_code()] = ICON_MDI_LIGHTBULB; m_ComponentIconMap[typeid(Camera).hash_code()] = ICON_MDI_CAMERA; @@ -231,9 +238,9 @@ namespace Lumos m_ComponentIconMap[typeid(Maths::Transform).hash_code()] = ICON_MDI_VECTOR_LINE; m_ComponentIconMap[typeid(RigidBody2DComponent).hash_code()] = ICON_MDI_SQUARE_OUTLINE; m_ComponentIconMap[typeid(RigidBody3DComponent).hash_code()] = ICON_MDI_CUBE_OUTLINE; - m_ComponentIconMap[typeid(Graphics::ModelComponent).hash_code()] = ICON_MDI_SHAPE; - m_ComponentIconMap[typeid(Graphics::Model).hash_code()] = ICON_MDI_SHAPE; - m_ComponentIconMap[typeid(LuaScriptComponent).hash_code()] = ICON_MDI_SCRIPT; + m_ComponentIconMap[typeid(Graphics::ModelComponent).hash_code()] = ICON_MDI_VECTOR_POLYGON; + m_ComponentIconMap[typeid(Graphics::Model).hash_code()] = ICON_MDI_VECTOR_POLYGON; + m_ComponentIconMap[typeid(LuaScriptComponent).hash_code()] = ICON_MDI_LANGUAGE_LUA; m_ComponentIconMap[typeid(Graphics::Environment).hash_code()] = ICON_MDI_EARTH; m_ComponentIconMap[typeid(Editor).hash_code()] = ICON_MDI_SQUARE; m_ComponentIconMap[typeid(TextComponent).hash_code()] = ICON_MDI_TEXT; @@ -243,8 +250,8 @@ namespace Lumos m_Panels.emplace_back(CreateSharedPtr()); m_Panels.emplace_back(CreateSharedPtr()); m_Panels.emplace_back(CreateSharedPtr()); - m_Panels.emplace_back(CreateSharedPtr()); m_Panels.emplace_back(CreateSharedPtr()); + m_Panels.emplace_back(CreateSharedPtr()); m_Panels.emplace_back(CreateSharedPtr()); m_Panels.back()->SetActive(false); m_Panels.emplace_back(CreateSharedPtr()); @@ -262,7 +269,8 @@ namespace Lumos m_Settings.m_ShowImGuiDemo = false; - m_SelectedEntity = entt::null; + m_SelectedEntities.clear(); + // m_SelectedEntity = entt::null; m_PreviewTexture = nullptr; Application::Get().GetSystem()->SetDebugDrawFlags(m_Settings.m_Physics3DDebugFlags); @@ -596,30 +604,33 @@ namespace Lumos // } // Disabled item // ImGui::Separator(); - bool enabled = m_SelectedEntity != entt::null; + bool enabled = !m_SelectedEntities.empty(); if(ImGui::MenuItem("Cut", "CTRL+X", false, enabled)) { - m_CopiedEntity = m_SelectedEntity; - m_CutCopyEntity = true; + for(auto entity : m_SelectedEntities) + SetCopiedEntity(entity, true); } if(ImGui::MenuItem("Copy", "CTRL+C", false, enabled)) { - m_CopiedEntity = m_SelectedEntity; - m_CutCopyEntity = false; + for(auto entity : m_SelectedEntities) + SetCopiedEntity(entity, false); } - enabled = m_CopiedEntity != entt::null; + enabled = !m_CopiedEntities.empty(); if(ImGui::MenuItem("Paste", "CTRL+V", false, enabled)) { - Application::Get().GetCurrentScene()->DuplicateEntity({ m_CopiedEntity, Application::Get().GetCurrentScene() }); - if(m_CutCopyEntity) + for(auto entity : m_CopiedEntities) { - if(m_CopiedEntity == m_SelectedEntity) - m_SelectedEntity = entt::null; - Entity(m_CopiedEntity, Application::Get().GetCurrentScene()).Destroy(); + Application::Get().GetCurrentScene()->DuplicateEntity({ entity, Application::Get().GetCurrentScene() }); + if(entity != entt::null) + { + /// if(entity == m_SelectedEntity) + /// m_SelectedEntity = entt::null; + Entity(entity, Application::Get().GetCurrentScene()).Destroy(); + } } } @@ -792,22 +803,50 @@ namespace Lumos std::string githubMenuText = ICON_MDI_GITHUB_BOX " Github"; if(ImGui::MenuItem(githubMenuText.c_str())) { -#ifdef LUMOS_PLATFORM_WINDOWS - ShellExecute(NULL, NULL, L"https://www.github.com/jmorton06/Lumos", NULL, NULL, SW_SHOWNORMAL); -#else -#ifndef LUMOS_PLATFORM_IOS - system("open https://www.github.com/jmorton06/Lumos"); -#endif -#endif + Lumos::OS::Instance()->OpenURL("https://www.github.com/jmorton06/Lumos"); } ImGui::Separator(); ImGui::TextUnformatted("Third-Party"); ImGui::Text("ImGui - Version : %s, Revision - %d", IMGUI_VERSION, IMGUI_VERSION_NUM); + ImGui::Text("Entt - Version %s", ENTT_VERSION); + ImGui::Text("Cereal - Version %d.&d.%d", CEREAL_VERSION_MAJOR, CEREAL_VERSION_MINOR, CEREAL_VERSION_PATCH); ImGui::EndMenu(); } + if(m_ProjectLoaded) + { + { + ImGuiUtilities::ScopedFont boldFont(ImGui::GetIO().Fonts->Fonts[1]); + ImGuiUtilities::ScopedColour border(ImGuiCol_Border, IM_COL32(40, 40, 40, 255)); + + ImGui::SameLine(ImGui::GetCursorPosX() + 40.0f); + ImGui::Separator(); + ImGui::SameLine(); + ImGui::TextUnformatted(m_ProjectSettings.m_ProjectName.c_str()); + + ImGuiUtilities::Tooltip(("Current project (" + m_ProjectSettings.m_ProjectName + ".lmproj)").c_str()); + ImGuiUtilities::DrawBorder(ImGuiUtilities::RectExpanded(ImGuiUtilities::GetItemRect(), 24.0f, 68.0f), 1.0f, 3.0f, 0.0f, -60.0f); + + ImGui::SameLine(); + ImGui::Separator(); + ImGui::SameLine(ImGui::GetCursorPosX() + 32.0f); + ImGui::TextUnformatted(GetCurrentScene()->GetSceneName().c_str()); + ImGuiUtilities::Tooltip(("Current Scene (" + GetCurrentScene()->GetSceneName() + ".lsn)").c_str()); + ImGuiUtilities::DrawBorder(ImGuiUtilities::RectExpanded(ImGuiUtilities::GetItemRect(), 24.0f, 68.0f), 1.0f, 3.0f, 0.0f, -60.0f); + } + +#ifdef LUMOS_DEBUG + { + ImGuiUtilities::ScopedFont boldFont(ImGui::GetIO().Fonts->Fonts[1]); + ImGuiUtilities::ScopedColour border(ImGuiCol_Text, IM_COL32(200, 40, 40, 255)); + ImGui::SameLine(ImGui::GetCursorPosX() + 40.0f); + ImGui::TextUnformatted("DEBUG"); + } +#endif + } + ImGui::SameLine((ImGui::GetWindowContentRegionMax().x * 0.5f) - (1.5f * (ImGui::GetFontSize() + ImGui::GetStyle().ItemSpacing.x))); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.1f, 0.2f, 0.7f, 0.0f)); @@ -830,7 +869,8 @@ namespace Lumos Application::Get().GetSystem()->SetPaused(selected); Application::Get().SetEditorState(selected ? EditorState::Preview : EditorState::Play); - m_SelectedEntity = entt::null; + m_SelectedEntities.clear(); + // m_SelectedEntity = entt::null; if(selected) { ImGui::SetWindowFocus("###scene"); @@ -1001,6 +1041,7 @@ namespace Lumos if(ImGui::Button("OK", ImVec2(120, 0))) { Application::Get().GetSceneManager()->GetCurrentScene()->Serialise(m_ProjectSettings.m_ProjectRoot + "Assets/Scenes/", false); + Graphics::Renderer::GetRenderer()->SaveScreenshot(m_ProjectSettings.m_ProjectRoot + "Assets/Scenes/Cache/" + Application::Get().GetSceneManager()->GetCurrentScene()->GetSceneName() + ".png", m_RenderPasses->GetForwardData().m_RenderTexture); ImGui::CloseCurrentPopup(); } ImGui::SetItemDefaultFocus(); @@ -1041,18 +1082,53 @@ namespace Lumos ImGui::Text("Create New Scene?\n\n"); ImGui::Separator(); + static bool defaultSetup = false; + + static std::string newSceneName = "NewScene"; + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("Name : "); + ImGui::SameLine(); + ImGuiUtilities::InputText(newSceneName); + + ImGui::Checkbox("Default Setup", &defaultSetup); + + ImGui::Separator(); + if(ImGui::Button("OK", ImVec2(120, 0))) { - std::string sceneName = "NewScene"; + std::string sceneName = newSceneName; int sameNameCount = 0; auto sceneNames = m_SceneManager->GetSceneNames(); while(FileSystem::FileExists("//Scenes/" + sceneName + ".lsn") || std::find(sceneNames.begin(), sceneNames.end(), sceneName) != sceneNames.end()) { sameNameCount++; - sceneName = fmt::format("NewScene({0})", sameNameCount); + sceneName = fmt::format(newSceneName + "{0}", sameNameCount); } auto scene = new Scene(sceneName); + + if(defaultSetup) + { + auto light = scene->GetEntityManager()->Create("Light"); + auto lightComp = light.AddComponent(); + glm::mat4 lightView = glm::inverse(glm::lookAt(glm::vec3(30.0f, 9.0f, 50.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); + light.GetTransform().SetLocalTransform(lightView); + + auto camera = scene->GetEntityManager()->Create("Camera"); + camera.AddComponent(); + glm::mat4 viewMat = glm::inverse(glm::lookAt(glm::vec3(-2.3f, 1.0f, 4.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); + camera.GetTransform().SetLocalTransform(viewMat); + camera.AddComponent(DefaultCameraController::ControllerType::EditorCamera); + + auto cube = scene->GetEntityManager()->Create("Cube"); + cube.AddComponent(Graphics::PrimitiveType::Cube); + + auto environment = scene->GetEntityManager()->Create("Environment"); + environment.AddComponent(); + environment.GetComponent().Load(); + + scene->Serialise(m_ProjectSettings.m_ProjectRoot + "Assets/Scenes/"); + } Application::Get().GetSceneManager()->EnqueueScene(scene); Application::Get().GetSceneManager()->SwitchScene((int)(Application::Get().GetSceneManager()->GetScenes().size()) - 1); @@ -1188,58 +1264,214 @@ namespace Lumos glm::value_ptr(proj), identityMatrix, 120.f); #endif - if(!m_Settings.m_ShowGizmos || m_SelectedEntity == entt::null || m_ImGuizmoOperation == 4) + if(!m_Settings.m_ShowGizmos || m_SelectedEntities.empty() || m_ImGuizmoOperation == 4) return; auto& registry = Application::Get().GetSceneManager()->GetCurrentScene()->GetRegistry(); - if(registry.valid(m_SelectedEntity)) + + if(m_SelectedEntities.size() == 1) + { + entt::entity m_SelectedEntity = entt::null; + + m_SelectedEntity = m_SelectedEntities.front(); + if(registry.valid(m_SelectedEntity)) + { + ImGuizmo::SetDrawlist(); + ImGuizmo::SetOrthographic(m_CurrentCamera->IsOrthographic()); + + auto transform = registry.try_get(m_SelectedEntity); + if(transform != nullptr) + { + glm::mat4 model = transform->GetWorldMatrix(); + + float snapAmount[3] = { m_Settings.m_SnapAmount, m_Settings.m_SnapAmount, m_Settings.m_SnapAmount }; + float delta[16]; + + ImGuizmo::Manipulate(glm::value_ptr(view), + glm::value_ptr(proj), + static_cast(m_ImGuizmoOperation), + ImGuizmo::LOCAL, + glm::value_ptr(model), + delta, + m_Settings.m_SnapQuizmo ? snapAmount : nullptr); + + if(ImGuizmo::IsUsing()) + { + Entity parent = Entity(m_SelectedEntity, m_SceneManager->GetCurrentScene()).GetParent(); // m_CurrentScene->TryGetEntityWithUUID(entity.GetParentUUID()); + if(parent && parent.HasComponent()) + { + glm::mat4 parentTransform = parent.GetTransform().GetWorldMatrix(); + model = glm::inverse(parentTransform) * model; + } + + if(ImGuizmo::IsScaleType()) // static_cast(m_ImGuizmoOperation) & ImGuizmo::OPERATION::SCALE) + { + transform->SetLocalScale(Lumos::Maths::GetScale(model)); + } + else + { + transform->SetLocalTransform(model); + + RigidBody2DComponent* rigidBody2DComponent = registry.try_get(m_SelectedEntity); + + if(rigidBody2DComponent) + { + rigidBody2DComponent->GetRigidBody()->SetPosition( + { model[3].x, model[3].y }); + } + else + { + Lumos::RigidBody3DComponent* rigidBody3DComponent = registry.try_get(m_SelectedEntity); + if(rigidBody3DComponent) + { + rigidBody3DComponent->GetRigidBody()->SetPosition(model[3]); + rigidBody3DComponent->GetRigidBody()->SetOrientation(Maths::GetRotation(model)); + } + } + } + } + } + } + } + else { + glm::vec3 medianPointLocation = glm::vec3(0.0f); + glm::vec3 medianPointScale = glm::vec3(0.0f); + int validcount = 0; + for(auto entityID : m_SelectedEntities) + { + if(!registry.valid(entityID)) + continue; + + Entity entity = { entityID, m_SceneManager->GetCurrentScene() }; + + if(!entity.HasComponent()) + continue; + + medianPointLocation += entity.GetTransform().GetWorldPosition(); + medianPointScale += entity.GetTransform().GetLocalScale(); + validcount++; + } + medianPointLocation /= validcount; // m_SelectedEntities.size(); + medianPointScale /= validcount; // m_SelectedEntities.size(); + + glm::mat4 medianPointMatrix = glm::translate(glm::mat4(1.0f), medianPointLocation) * glm::scale(glm::mat4(1.0f), medianPointScale); + + glm::mat4 projectionMatrix, viewMatrix; + ImGuizmo::SetDrawlist(); ImGuizmo::SetOrthographic(m_CurrentCamera->IsOrthographic()); - auto transform = registry.try_get(m_SelectedEntity); - if(transform != nullptr) + float snapAmount[3] = { m_Settings.m_SnapAmount, m_Settings.m_SnapAmount, m_Settings.m_SnapAmount }; + glm::mat4 deltaMatrix = glm::mat4(1.0f); + + ImGuizmo::Manipulate(glm::value_ptr(view), + glm::value_ptr(proj), + static_cast(m_ImGuizmoOperation), + ImGuizmo::LOCAL, + glm::value_ptr(medianPointMatrix), + glm::value_ptr(deltaMatrix), + m_Settings.m_SnapQuizmo ? snapAmount : nullptr); + + if(ImGuizmo::IsUsing()) { - glm::mat4 model = transform->GetWorldMatrix(); + glm::vec3 deltaTranslation, deltaScale; + glm::quat deltaRotation; + glm::vec3 skew; + glm::vec4 perspective; + glm::decompose(deltaMatrix, deltaScale, deltaRotation, deltaTranslation, skew, perspective); - float snapAmount[3] = { m_Settings.m_SnapAmount, m_Settings.m_SnapAmount, m_Settings.m_SnapAmount }; - float delta[16]; + // if (parent && parent.HasComponent()) + // { + // glm::mat4 parentTransform = parent.GetTransform().GetWorldMatrix(); + // model = glm::inverse(parentTransform) * model; + // } + // - ImGuizmo::Manipulate(glm::value_ptr(view), - glm::value_ptr(proj), - static_cast(m_ImGuizmoOperation), - ImGuizmo::LOCAL, - glm::value_ptr(model), - delta, - m_Settings.m_SnapQuizmo ? snapAmount : nullptr); + static const bool MedianPointOrigin = false; - if(ImGuizmo::IsUsing()) + if(MedianPointOrigin) { - if(static_cast(m_ImGuizmoOperation) == ImGuizmo::OPERATION::SCALE) + for(auto entityID : m_SelectedEntities) { - model = glm::inverse(transform->GetParentMatrix()) * model; + if(!registry.valid(entityID)) + continue; + auto transform = registry.try_get(entityID); + + if(!transform) + continue; + if(ImGuizmo::IsScaleType()) // static_cast(m_ImGuizmoOperation) == ImGuizmo::OPERATION::SCALE) + { + transform->SetLocalScale(transform->GetLocalScale() * deltaScale); + // transform->SetLocalTransform(deltaMatrix * transform->GetLocalMatrix()); + } + else + { + transform->SetLocalTransform(deltaMatrix * transform->GetLocalMatrix()); + + // World matrix wont have updated yet so need to multiply by delta + // TODO: refactor + auto worldMatrix = deltaMatrix * transform->GetWorldMatrix(); + + RigidBody2DComponent* rigidBody2DComponent = registry.try_get(entityID); - transform->SetLocalScale(Lumos::Maths::GetScale(model)); + if(rigidBody2DComponent) + { + rigidBody2DComponent->GetRigidBody()->SetPosition({ worldMatrix[3].x, worldMatrix[3].y }); + } + else + { + Lumos::RigidBody3DComponent* rigidBody3DComponent = registry.try_get(entityID); + if(rigidBody3DComponent) + { + rigidBody3DComponent->GetRigidBody()->SetPosition(worldMatrix[3]); + rigidBody3DComponent->GetRigidBody()->SetOrientation(Maths::GetRotation(worldMatrix)); + } + } + } } - else + } + else + { + for(auto entityID : m_SelectedEntities) { - model = glm::inverse(transform->GetParentMatrix()) * model; - transform->SetLocalTransform(model); + if(!registry.valid(entityID)) + continue; + auto transform = registry.try_get(entityID); - RigidBody2DComponent* rigidBody2DComponent = registry.try_get(m_SelectedEntity); - - if(rigidBody2DComponent) + if(!transform) + continue; + if(ImGuizmo::IsScaleType()) // static_cast(m_ImGuizmoOperation) & ImGuizmo::OPERATION::SCALE) { - rigidBody2DComponent->GetRigidBody()->SetPosition( - { model[3].x, model[3].y }); + transform->SetLocalScale(transform->GetLocalScale() * deltaScale); + // transform->SetLocalTransform(deltaMatrix * transform->GetLocalMatrix()); + } + else if(ImGuizmo::IsRotateType()) // static_cast(m_ImGuizmoOperation) & ImGuizmo::OPERATION::ROTATE) + { + transform->SetLocalOrientation(glm::quat(glm::eulerAngles(transform->GetLocalOrientation()) + glm::eulerAngles(deltaRotation))); } else { - Lumos::RigidBody3DComponent* rigidBody3DComponent = registry.try_get(m_SelectedEntity); - if(rigidBody3DComponent) + transform->SetLocalTransform(deltaMatrix * transform->GetLocalMatrix()); + + // World matrix wont have updated yet so need to multiply by delta + // TODO: refactor + auto worldMatrix = deltaMatrix * transform->GetWorldMatrix(); + + RigidBody2DComponent* rigidBody2DComponent = registry.try_get(entityID); + + if(rigidBody2DComponent) + { + rigidBody2DComponent->GetRigidBody()->SetPosition({ worldMatrix[3].x, worldMatrix[3].y }); + } + else { - rigidBody3DComponent->GetRigidBody()->SetPosition(model[3]); - rigidBody3DComponent->GetRigidBody()->SetOrientation(Maths::GetRotation(model)); + Lumos::RigidBody3DComponent* rigidBody3DComponent = registry.try_get(entityID); + if(rigidBody3DComponent) + { + rigidBody3DComponent->GetRigidBody()->SetPosition(worldMatrix[3]); + rigidBody3DComponent->GetRigidBody()->SetOrientation(Maths::GetRotation(worldMatrix)); + } } } } @@ -1384,9 +1616,9 @@ namespace Lumos { LUMOS_PROFILE_FUNCTION(); Application::OnNewScene(scene); - m_SelectedEntity = entt::null; - - glm::mat4 viewMat = glm::inverse(glm::lookAt(glm::vec3(0.0f, 0.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); + // m_SelectedEntity = entt::null; + m_SelectedEntities.clear(); + glm::mat4 viewMat = glm::inverse(glm::lookAt(glm::vec3(-31.0f, 12.0f, 51.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))); m_EditorCameraTransform.SetLocalTransform(viewMat); for(auto panel : m_Panels) @@ -1582,6 +1814,9 @@ namespace Lumos autoSaveTimer += ts.GetMillis(); } + if(m_EditorState == EditorState::Play) + autoSaveTimer = 0.0f; + if(Input::Get().GetKeyPressed(Lumos::InputCode::Key::Escape)) { if(GetEditorState() == EditorState::Preview) @@ -1598,8 +1833,8 @@ namespace Lumos Application::Get().GetSystem()->SetPaused(true); Application::Get().SetEditorState(EditorState::Preview); - m_SelectedEntity = entt::null; - + // m_SelectedEntity = entt::null; + m_SelectedEntities.clear(); ImGui::SetWindowFocus("###scene"); LoadCachedScene(); SetEditorState(EditorState::Preview); @@ -1613,15 +1848,16 @@ namespace Lumos // if(Application::Get().GetSceneActive()) { const glm::vec2 mousePos = Input::Get().GetMousePosition(); - + m_EditorCameraController.SetCamera(m_EditorCamera); m_EditorCameraController.HandleMouse(m_EditorCameraTransform, (float)ts.GetSeconds(), mousePos.x, mousePos.y); m_EditorCameraController.HandleKeyboard(m_EditorCameraTransform, (float)ts.GetSeconds()); + m_EditorCameraTransform.SetWorldMatrix(glm::mat4(1.0f)); if(Input::Get().GetKeyPressed(InputCode::Key::F)) { - if(registry.valid(m_SelectedEntity)) + if(registry.valid(m_SelectedEntities.front())) { - auto transform = registry.try_get(m_SelectedEntity); + auto transform = registry.try_get(m_SelectedEntities.front()); if(transform) FocusCamera(transform->GetWorldPosition(), 2.0f, 2.0f); } @@ -1691,30 +1927,34 @@ namespace Lumos if(Input::Get().GetKeyPressed(InputCode::Key::X)) { - m_CopiedEntity = m_SelectedEntity; - m_CutCopyEntity = true; + for(auto entity : m_SelectedEntities) + SetCopiedEntity(entity, true); } if(Input::Get().GetKeyPressed(InputCode::Key::C)) { - m_CopiedEntity = m_SelectedEntity; - m_CutCopyEntity = false; + for(auto entity : m_SelectedEntities) + SetCopiedEntity(entity, false); } - if(Input::Get().GetKeyPressed(InputCode::Key::V) && m_CopiedEntity != entt::null) + if(Input::Get().GetKeyPressed(InputCode::Key::V) && !m_CopiedEntities.empty()) { - Application::Get().GetCurrentScene()->DuplicateEntity({ m_CopiedEntity, Application::Get().GetCurrentScene() }); - if(m_CutCopyEntity) + for(auto entity : m_CopiedEntities) { - if(m_CopiedEntity == m_SelectedEntity) - m_SelectedEntity = entt::null; - Entity(m_CopiedEntity, Application::Get().GetCurrentScene()).Destroy(); + Application::Get().GetCurrentScene()->DuplicateEntity({ entity, Application::Get().GetCurrentScene() }); + if(entity != entt::null) + { + // if(m_CopiedEntity == m_SelectedEntity) + // m_SelectedEntity = entt::null; + Entity(entity, Application::Get().GetCurrentScene()).Destroy(); + } } } - if(Input::Get().GetKeyPressed(InputCode::Key::D) && m_SelectedEntity != entt::null) + if(Input::Get().GetKeyPressed(InputCode::Key::D) && !m_SelectedEntities.empty()) { - Application::Get().GetCurrentScene()->DuplicateEntity({ m_SelectedEntity, Application::Get().GetCurrentScene() }); + for(auto entity : m_CopiedEntities) + Application::Get().GetCurrentScene()->DuplicateEntity({ entity, Application::Get().GetCurrentScene() }); } } } @@ -1751,7 +1991,7 @@ namespace Lumos void Editor::RecompileShaders() { LUMOS_PROFILE_FUNCTION(); - LUMOS_LOG_INFO("Recompiling shaders"); + LUMOS_LOG_INFO("Recompiling shaders Disabled"); #ifdef LUMOS_RENDER_API_VULKAN #ifdef LUMOS_PLATFORM_WINDOWS @@ -1836,75 +2076,113 @@ namespace Lumos } } - if(registry.valid(m_SelectedEntity)) // && Application::Get().GetEditorState() == EditorState::Preview) - { - auto transform = registry.try_get(m_SelectedEntity); - - auto model = registry.try_get(m_SelectedEntity); - if(transform && model && model->ModelRef) + for(auto m_SelectedEntity : m_SelectedEntities) + if(registry.valid(m_SelectedEntity)) // && Application::Get().GetEditorState() == EditorState::Preview) { - auto& meshes = model->ModelRef->GetMeshes(); - for(auto mesh : meshes) + auto transform = registry.try_get(m_SelectedEntity); + + auto model = registry.try_get(m_SelectedEntity); + if(transform && model && model->ModelRef) { - if(mesh->GetActive()) + auto& meshes = model->ModelRef->GetMeshes(); + for(auto mesh : meshes) { - auto& worldTransform = transform->GetWorldMatrix(); - auto bbCopy = mesh->GetBoundingBox()->Transformed(worldTransform); - DebugRenderer::DebugDraw(bbCopy, selectedColour, true); + if(mesh->GetActive()) + { + auto& worldTransform = transform->GetWorldMatrix(); + auto bbCopy = mesh->GetBoundingBox()->Transformed(worldTransform); + DebugRenderer::DebugDraw(bbCopy, selectedColour, true); + } + } + if(model->ModelRef->GetSkeleton()) + { + auto& skeleton = *model->ModelRef->GetSkeleton().get(); + const int num_joints = skeleton.num_joints(); + + // Iterate through each joint in the skeleton + for(int i = 0; i < num_joints; ++i) + { + // Get the current joint's world space transform + + const ozz::math::Transform joint_transform; //= skeleton.joint_rest_poses()[i]; + + // Convert ozz::math::Transform to glm::mat4 + glm::mat4 joint_world_transform = glm::translate(glm::mat4(1.0f), glm::vec3(joint_transform.translation.x, joint_transform.translation.y, joint_transform.translation.z)); + joint_world_transform *= glm::mat4_cast(glm::quat(joint_transform.rotation.x, joint_transform.rotation.y, joint_transform.rotation.z, joint_transform.rotation.w)); + joint_world_transform = glm::scale(joint_world_transform, glm::vec3(joint_transform.scale.x, joint_transform.scale.y, joint_transform.scale.z)); + + // Multiply the joint's world transform by the entity transform + glm::mat4 final_transform = transform->GetWorldMatrix() * joint_world_transform; + + // Get the parent joint's world space transform + const int parent_index = skeleton.joint_parents()[i]; + glm::mat4 parent_world_transform(1.0f); + if(parent_index != ozz::animation::Skeleton::Constants::kNoParent) + { + const ozz::math::Transform parent_transform; // = skeleton.joint_rest_poses()[parent_index]; + parent_world_transform = glm::translate(glm::mat4(1.0f), glm::vec3(parent_transform.translation.x, parent_transform.translation.y, parent_transform.translation.z)); + parent_world_transform *= glm::mat4_cast(glm::quat(parent_transform.rotation.x, parent_transform.rotation.y, parent_transform.rotation.z, parent_transform.rotation.w)); + parent_world_transform = glm::scale(parent_world_transform, glm::vec3(parent_transform.scale.x, parent_transform.scale.y, parent_transform.scale.z)); + parent_world_transform = transform->GetWorldMatrix() * parent_world_transform; + } + + // Draw a line between the current joint and its parent joint + // (assuming you have a function to draw a line between two points) + DebugRenderer::DrawHairLine(glm::vec3(final_transform[3]), glm::vec3(parent_world_transform[3]), glm::vec4(1.0f, 0.0f, 0.0f, 1.0f)); // Example color: red + } } } - } - auto sprite = registry.try_get(m_SelectedEntity); - if(transform && sprite) - { + auto sprite = registry.try_get(m_SelectedEntity); + if(transform && sprite) { - auto& worldTransform = transform->GetWorldMatrix(); + { + auto& worldTransform = transform->GetWorldMatrix(); - auto bb = Maths::BoundingBox(Maths::Rect(sprite->GetPosition(), sprite->GetPosition() + sprite->GetScale())); - bb.Transform(worldTransform); - DebugRenderer::DebugDraw(bb, selectedColour, true); + auto bb = Maths::BoundingBox(Maths::Rect(sprite->GetPosition(), sprite->GetPosition() + sprite->GetScale())); + bb.Transform(worldTransform); + DebugRenderer::DebugDraw(bb, selectedColour, true); + } } - } - auto animSprite = registry.try_get(m_SelectedEntity); - if(transform && animSprite) - { + auto animSprite = registry.try_get(m_SelectedEntity); + if(transform && animSprite) { - auto& worldTransform = transform->GetWorldMatrix(); + { + auto& worldTransform = transform->GetWorldMatrix(); - auto bb = Maths::BoundingBox(Maths::Rect(animSprite->GetPosition(), animSprite->GetPosition() + animSprite->GetScale())); - bb.Transform(worldTransform); - DebugRenderer::DebugDraw(bb, selectedColour, true); + auto bb = Maths::BoundingBox(Maths::Rect(animSprite->GetPosition(), animSprite->GetPosition() + animSprite->GetScale())); + bb.Transform(worldTransform); + DebugRenderer::DebugDraw(bb, selectedColour, true); + } } - } - auto camera = registry.try_get(m_SelectedEntity); - if(camera && transform) - { - DebugRenderer::DebugDraw(camera->GetFrustum(glm::inverse(transform->GetWorldMatrix())), glm::vec4(0.9f)); - } + auto camera = registry.try_get(m_SelectedEntity); + if(camera && transform) + { + DebugRenderer::DebugDraw(camera->GetFrustum(glm::inverse(transform->GetWorldMatrix())), glm::vec4(0.9f)); + } - auto light = registry.try_get(m_SelectedEntity); - if(light && transform) - { - DebugRenderer::DebugDraw(light, transform->GetWorldOrientation(), glm::vec4(glm::vec3(light->Colour), 0.2f)); - } + auto light = registry.try_get(m_SelectedEntity); + if(light && transform) + { + DebugRenderer::DebugDraw(light, transform->GetWorldOrientation(), glm::vec4(glm::vec3(light->Colour), 0.2f)); + } - auto sound = registry.try_get(m_SelectedEntity); - if(sound) - { - DebugRenderer::DebugDraw(sound->GetSoundNode(), glm::vec4(0.8f, 0.8f, 0.8f, 0.2f)); - } + auto sound = registry.try_get(m_SelectedEntity); + if(sound) + { + DebugRenderer::DebugDraw(sound->GetSoundNode(), glm::vec4(0.8f, 0.8f, 0.8f, 0.2f)); + } - auto phys3D = registry.try_get(m_SelectedEntity); - if(phys3D) - { - auto cs = phys3D->GetRigidBody()->GetCollisionShape(); - if(cs) - cs->DebugDraw(phys3D->GetRigidBody().get()); + auto phys3D = registry.try_get(m_SelectedEntity); + if(phys3D) + { + auto cs = phys3D->GetRigidBody()->GetCollisionShape(); + if(cs) + cs->DebugDraw(phys3D->GetRigidBody().get()); + } } - } } void Editor::SelectObject(const Maths::Ray& ray) @@ -1947,26 +2225,33 @@ namespace Lumos } } - if(m_SelectedEntity != entt::null) + if(!m_SelectedEntities.empty()) { - if(m_SelectedEntity == currentClosestEntity) + if(registry.valid(currentClosestEntity) && IsSelected(currentClosestEntity)) { if(timer.GetElapsedS() - timeSinceLastSelect < 1.0f) { - auto& trans = registry.get(m_SelectedEntity); - auto& model = registry.get(m_SelectedEntity); + auto& trans = registry.get(currentClosestEntity); + auto& model = registry.get(currentClosestEntity); auto bb = model.ModelRef->GetMeshes().front()->GetBoundingBox()->Transformed(trans.GetWorldMatrix()); FocusCamera(trans.GetWorldPosition(), glm::distance(bb.Max(), bb.Min())); } else { - currentClosestEntity = entt::null; + UnSelect(currentClosestEntity); } } timeSinceLastSelect = timer.GetElapsedS(); - m_SelectedEntity = currentClosestEntity; + + auto& io = ImGui::GetIO(); + auto ctrl = Input::Get().GetKeyHeld(InputCode::Key::LeftSuper) || (Input::Get().GetKeyHeld(InputCode::Key::LeftControl)); + + if(!ctrl) + m_SelectedEntities.clear(); + + SetSelected(currentClosestEntity); return; } @@ -2013,19 +2298,18 @@ namespace Lumos } } - if(m_SelectedEntity != entt::null) { - if(m_SelectedEntity == currentClosestEntity) + if(IsSelected(currentClosestEntity)) { - auto& trans = registry.get(m_SelectedEntity); - auto& sprite = registry.get(m_SelectedEntity); + auto& trans = registry.get(currentClosestEntity); + auto& sprite = registry.get(currentClosestEntity); auto bb = Maths::BoundingBox(Maths::Rect(sprite.GetPosition(), sprite.GetPosition() + sprite.GetScale())); FocusCamera(trans.GetWorldPosition(), glm::distance(bb.Max(), bb.Min())); } } - m_SelectedEntity = currentClosestEntity; + SetSelected(currentClosestEntity); } void Editor::OpenTextFile(const std::string& filePath, const std::function& callback) @@ -2155,19 +2439,24 @@ namespace Lumos void Editor::FileOpenCallback(const std::string& filePath) { LUMOS_PROFILE_FUNCTION(); - if(IsTextFile(filePath)) - OpenTextFile(filePath, NULL); - else if(IsModelFile(filePath)) + + auto path = filePath; + path = StringUtilities::BackSlashesToSlashes(path); + if(IsTextFile(path)) + OpenTextFile(path, NULL); + else if(IsModelFile(path)) { Entity modelEntity = Application::Get().GetSceneManager()->GetCurrentScene()->GetEntityManager()->Create(); - modelEntity.AddComponent(filePath); - m_SelectedEntity = modelEntity.GetHandle(); + modelEntity.AddComponent(path); + + SetSelected(modelEntity.GetHandle()); + // m_SelectedEntity = modelEntity.GetHandle(); } - else if(IsAudioFile(filePath)) + else if(IsAudioFile(path)) { std::string physicalPath; - Lumos::VFS::Get().ResolvePhysicalPath(filePath, physicalPath); - auto sound = Sound::Create(physicalPath, StringUtilities::GetFilePathExtension(filePath)); + Lumos::VFS::Get().ResolvePhysicalPath(path, physicalPath); + auto sound = Sound::Create(physicalPath, StringUtilities::GetFilePathExtension(path)); auto soundNode = SharedPtr(SoundNode::Create()); soundNode->SetSound(sound); @@ -2182,20 +2471,20 @@ namespace Lumos Entity entity = Application::Get().GetSceneManager()->GetCurrentScene()->GetEntityManager()->Create(); entity.AddComponent(soundNode); entity.GetOrAddComponent(); - m_SelectedEntity = entity.GetHandle(); + SetSelected(entity.GetHandle()); } - else if(IsSceneFile(filePath)) + else if(IsSceneFile(path)) { - Application::Get().GetSceneManager()->EnqueueSceneFromFile(filePath); - Application::Get().GetSceneManager()->SwitchScene((int)(Application::Get().GetSceneManager()->GetScenes().size()) - 1); + int index = Application::Get().GetSceneManager()->EnqueueSceneFromFile(path); + Application::Get().GetSceneManager()->SwitchScene(index); } - else if(IsTextureFile(filePath)) + else if(IsTextureFile(path)) { auto entity = Application::Get().GetSceneManager()->GetCurrentScene()->CreateEntity("Sprite"); auto& sprite = entity.AddComponent(); entity.GetOrAddComponent(); - SharedPtr texture = SharedPtr(Graphics::Texture2D::CreateFromFile(filePath, filePath)); + SharedPtr texture = SharedPtr(Graphics::Texture2D::CreateFromFile(path, path)); sprite.SetTexture(texture); } } diff --git a/Editor/Source/Editor.h b/Editor/Source/Editor.h index cf8a8ebd6..16f9dff85 100644 --- a/Editor/Source/Editor.h +++ b/Editor/Source/Editor.h @@ -13,7 +13,9 @@ #include #include -#include +#include +#include +#include namespace Lumos { @@ -126,24 +128,66 @@ namespace Lumos return m_Settings.m_SnapAmount; } + void ClearSelected() + { + m_SelectedEntities.clear(); + } + void SetSelected(entt::entity entity) { - m_SelectedEntity = entity; + auto& registry = Application::Get().GetSceneManager()->GetCurrentScene()->GetRegistry(); + + if(!registry.valid(entity)) + return; + if(std::find(m_SelectedEntities.begin(), m_SelectedEntities.end(), entity) != m_SelectedEntities.end()) + return; + + m_SelectedEntities.push_back(entity); + } + + void UnSelect(entt::entity entity) + { + auto it = std::find(m_SelectedEntities.begin(), m_SelectedEntities.end(), entity); + + if(it != m_SelectedEntities.end()) + { + m_SelectedEntities.erase(it); + } + } + + const std::vector& GetSelected() const + { + return m_SelectedEntities; + } + + bool IsSelected(entt::entity entity) + { + if(std::find(m_SelectedEntities.begin(), m_SelectedEntities.end(), entity) != m_SelectedEntities.end()) + return true; + + return false; } - entt::entity GetSelected() const + + bool IsCopied(entt::entity entity) { - return m_SelectedEntity; + if(std::find(m_CopiedEntities.begin(), m_CopiedEntities.end(), entity) != m_CopiedEntities.end()) + return true; + + return false; } void SetCopiedEntity(entt::entity entity, bool cut = false) { - m_CopiedEntity = entity; + if(std::find(m_CopiedEntities.begin(), m_CopiedEntities.end(), entity) != m_CopiedEntities.end()) + return; + + m_CopiedEntities.push_back(entity); m_CutCopyEntity = cut; } - entt::entity GetCopiedEntity() const + const std::vector& GetCopiedEntity() const { - return m_CopiedEntity; + return m_CopiedEntities; } bool GetCutCopyEntity() @@ -258,8 +302,9 @@ namespace Lumos Application* m_Application; uint32_t m_ImGuizmoOperation = 14463; - entt::entity m_SelectedEntity; - entt::entity m_CopiedEntity; + std::vector m_SelectedEntities; + std::vector m_CopiedEntities; + bool m_CutCopyEntity = false; float m_CurrentSceneAspectRatio = 0.0f; float m_CameraTransitionStartTime = 0.0f; diff --git a/Editor/Source/EditorPanel.h b/Editor/Source/EditorPanel.h index 06d3bd17a..a09ab95fb 100644 --- a/Editor/Source/EditorPanel.h +++ b/Editor/Source/EditorPanel.h @@ -49,6 +49,10 @@ namespace Lumos { } + virtual void DestroyGraphicsResources() + { + } + protected: bool m_Active = true; std::string m_Name; diff --git a/Editor/Source/EditorSettingsPanel.cpp b/Editor/Source/EditorSettingsPanel.cpp index 30069ebb5..951a129ee 100644 --- a/Editor/Source/EditorSettingsPanel.cpp +++ b/Editor/Source/EditorSettingsPanel.cpp @@ -3,6 +3,8 @@ #include #include +#include + namespace Lumos { EditorSettingsPanel::EditorSettingsPanel() @@ -45,6 +47,36 @@ namespace Lumos if(ImGuiUtilities::Property("Camera Far", editorSettings.m_CameraFar)) m_Editor->GetCamera()->SetFar(editorSettings.m_CameraFar); + ImGui::TextUnformatted("Camera Transform"); + ImGui::Columns(1); + // Camera Transform; + auto& transform = m_Editor->GetEditorCameraTransform(); + + auto rotation = glm::degrees(glm::eulerAngles(transform.GetLocalOrientation())); + auto position = transform.GetLocalPosition(); + auto scale = transform.GetLocalScale(); + float itemWidth = (ImGui::GetContentRegionAvail().x - (ImGui::GetFontSize() * 3.0f)) / 3.0f; + + // Call this to fix alignment with columns + ImGui::AlignTextToFramePadding(); + + if(Lumos::ImGuiUtilities::PorpertyTransform("Position", position, itemWidth)) + transform.SetLocalPosition(position); + + ImGui::SameLine(); + if(Lumos::ImGuiUtilities::PorpertyTransform("Rotation", rotation, itemWidth)) + { + float pitch = Lumos::Maths::Min(rotation.x, 89.9f); + pitch = Lumos::Maths::Max(pitch, -89.9f); + transform.SetLocalOrientation(glm::quat(glm::radians(glm::vec3(pitch, rotation.y, rotation.z)))); + } + + ImGui::SameLine(); + if(Lumos::ImGuiUtilities::PorpertyTransform("Scale", scale, itemWidth)) + { + transform.SetLocalScale(scale); + } + ImGui::Separator(); ImGui::Columns(1); diff --git a/Editor/Source/GameViewPanel.cpp b/Editor/Source/GameViewPanel.cpp index ee4f7e5a5..78fa06776 100644 --- a/Editor/Source/GameViewPanel.cpp +++ b/Editor/Source/GameViewPanel.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include @@ -35,8 +35,8 @@ namespace Lumos m_Width = 1280; m_Height = 800; - m_SceneRenderer = CreateUniquePtr(m_Width, m_Height); - m_SceneRenderer->GetSettings().DebugPass = false; + m_RenderPasses = CreateUniquePtr(m_Width, m_Height); + m_RenderPasses->GetSettings().DebugPass = false; } static std::string AspectToString(float aspect) @@ -115,7 +115,7 @@ namespace Lumos Maths::Transform* transform = nullptr; { - m_SceneRenderer->SetOverrideCamera(nullptr, nullptr); + m_RenderPasses->SetOverrideCamera(nullptr, nullptr); auto& registry = m_CurrentScene->GetRegistry(); auto cameraView = registry.view(); @@ -180,6 +180,9 @@ namespace Lumos // Moved this exit down to prevent a crash if(!camera) { + const char* missingCameraText = "No Active Camera In Scene"; + ImGui::SetCursorPos((sceneViewSize - ImGui::CalcTextSize(missingCameraText)) / 2.0f); + ImGui::TextUnformatted(missingCameraText); ImGui::End(); return; } @@ -215,17 +218,17 @@ namespace Lumos { ImGuiIO& io = ImGui::GetIO(); - static Engine::Stats stats = Engine::Get().Statistics(); - static Graphics::SceneRendererStats SceneRendererStats = m_SceneRenderer->GetSceneRendererStats(); + static Engine::Stats stats = Engine::Get().Statistics(); + static Graphics::RenderPassesStats RenderPassesStats = m_RenderPasses->GetRenderPassesStats(); static float timer = 1.0f; timer += io.DeltaTime; if(timer > 1.0f) { - timer = 0.0f; - stats = Engine::Get().Statistics(); - SceneRendererStats = m_SceneRenderer->GetSceneRendererStats(); + timer = 0.0f; + stats = Engine::Get().Statistics(); + RenderPassesStats = m_RenderPasses->GetRenderPassesStats(); } Engine::Get().ResetStats(); @@ -237,9 +240,9 @@ namespace Lumos else ImGui::TextUnformatted("Mouse Position: "); - ImGui::Text("Num Rendered Objects %u", SceneRendererStats.NumRenderedObjects); - ImGui::Text("Num Shadow Objects %u", SceneRendererStats.NumShadowObjects); - ImGui::Text("Num Draw Calls %u", SceneRendererStats.NumDrawCalls); + ImGui::Text("Num Rendered Objects %u", RenderPassesStats.NumRenderedObjects); + ImGui::Text("Num Shadow Objects %u", RenderPassesStats.NumShadowObjects); + ImGui::Text("Num Draw Calls %u", RenderPassesStats.NumDrawCalls); ImGui::Text("Used GPU Memory : %.1f mb | Total : %.1f mb", stats.UsedGPUMemory * 0.000001f, stats.TotalGPUMemory * 0.000001f); if(ImGui::BeginPopupContextWindow()) @@ -270,10 +273,10 @@ namespace Lumos LUMOS_PROFILE_FUNCTION(); m_CurrentScene = scene; - // m_SceneRenderer - m_SceneRenderer->OnNewScene(scene); - m_SceneRenderer->SetRenderTarget(m_GameViewTexture.get(), true); - m_SceneRenderer->SetOverrideCamera(nullptr, nullptr); + // m_RenderPasses + m_RenderPasses->OnNewScene(scene); + m_RenderPasses->SetRenderTarget(m_GameViewTexture.get(), true); + m_RenderPasses->SetOverrideCamera(nullptr, nullptr); } void GameViewPanel::Resize(uint32_t width, uint32_t height) @@ -302,17 +305,17 @@ namespace Lumos if(resize) { m_GameViewTexture->Resize(m_Width, m_Height); - m_SceneRenderer->SetRenderTarget(m_GameViewTexture.get(), true, false); - m_SceneRenderer->OnResize(width, height); + m_RenderPasses->SetRenderTarget(m_GameViewTexture.get(), true, false); + m_RenderPasses->OnResize(width, height); } } void GameViewPanel::OnRender() { - if(m_GameViewVisible) + if(m_GameViewVisible && m_Active) { - m_SceneRenderer->BeginScene(m_CurrentScene); - m_SceneRenderer->OnRender(); + m_RenderPasses->BeginScene(m_CurrentScene); + m_RenderPasses->OnRender(); } } diff --git a/Editor/Source/GameViewPanel.h b/Editor/Source/GameViewPanel.h index 0ecfdd4ab..92b6f34db 100644 --- a/Editor/Source/GameViewPanel.h +++ b/Editor/Source/GameViewPanel.h @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include namespace Lumos @@ -30,7 +30,7 @@ namespace Lumos SharedPtr m_GameViewTexture = nullptr; Scene* m_CurrentScene = nullptr; uint32_t m_Width, m_Height; - UniquePtr m_SceneRenderer; + UniquePtr m_RenderPasses; bool m_GameViewVisible = false; bool m_ShowStats = false; }; diff --git a/Editor/Source/HierarchyPanel.cpp b/Editor/Source/HierarchyPanel.cpp index 71150bf8d..bdd5672b0 100644 --- a/Editor/Source/HierarchyPanel.cpp +++ b/Editor/Source/HierarchyPanel.cpp @@ -60,17 +60,17 @@ namespace Lumos if(hierarchyComponent != nullptr && hierarchyComponent->First() != entt::null) noChildren = false; - ImGuiTreeNodeFlags nodeFlags = ((m_Editor->GetSelected() == node) ? ImGuiTreeNodeFlags_Selected : 0); + ImGuiTreeNodeFlags nodeFlags = ((m_Editor->IsSelected(node)) ? ImGuiTreeNodeFlags_Selected : 0); - nodeFlags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_FramePadding | ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_SpanAvailWidth; + nodeFlags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_FramePadding | ImGuiTreeNodeFlags_AllowOverlap | ImGuiTreeNodeFlags_SpanAvailWidth; if(noChildren) { nodeFlags |= ImGuiTreeNodeFlags_Leaf; } - auto activeComponent = registry.try_get(node); - bool active = activeComponent ? activeComponent->active : true; + // auto activeComponent = registry.try_get(node); + bool active = Entity(node, m_Editor->GetCurrentScene()).Active(); // activeComponent ? activeComponent->active : true; if(!active) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyleColorVec4(ImGuiCol_TextDisabled)); @@ -93,42 +93,42 @@ namespace Lumos std::string icon = ICON_MDI_CUBE_OUTLINE; auto& iconMap = m_Editor->GetComponentIconMap(); - if(registry.has(node)) + if(registry.all_of(node)) { if(iconMap.find(typeid(Camera).hash_code()) != iconMap.end()) icon = iconMap[typeid(Camera).hash_code()]; } - if(registry.has(node)) + if(registry.all_of(node)) { if(iconMap.find(typeid(LuaScriptComponent).hash_code()) != iconMap.end()) icon = iconMap[typeid(LuaScriptComponent).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(SoundComponent).hash_code()) != iconMap.end()) icon = iconMap[typeid(SoundComponent).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(RigidBody2DComponent).hash_code()) != iconMap.end()) icon = iconMap[typeid(RigidBody2DComponent).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(Graphics::Light).hash_code()) != iconMap.end()) icon = iconMap[typeid(Graphics::Light).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(Graphics::Environment).hash_code()) != iconMap.end()) icon = iconMap[typeid(Graphics::Environment).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(Graphics::Sprite).hash_code()) != iconMap.end()) icon = iconMap[typeid(Graphics::Sprite).hash_code()]; } - else if(registry.has(node)) + else if(registry.all_of(node)) { if(iconMap.find(typeid(TextComponent).hash_code()) != iconMap.end()) icon = iconMap[typeid(TextComponent).hash_code()]; @@ -139,8 +139,17 @@ namespace Lumos bool nodeOpen = ImGui::TreeNodeEx((void*)(intptr_t)entt::to_integral(node), nodeFlags, "%s", icon.c_str()); { // Allow clicking of icon and text. Need twice as they are separated - if(ImGui::IsItemClicked()) - m_Editor->SetSelected(node); + if(ImGui::IsItemClicked(ImGuiMouseButton_Left) && !ImGui::IsItemToggledOpen()) + { + bool ctrlDown = Input::Get().GetKeyHeld(Lumos::InputCode::Key::LeftControl) || Input::Get().GetKeyHeld(Lumos::InputCode::Key::RightControl) || Input::Get().GetKeyHeld(Lumos::InputCode::Key::LeftSuper); + if(!ctrlDown) + m_Editor->ClearSelected(); + + if(!m_Editor->IsSelected(node)) + m_Editor->SetSelected(node); + else + m_Editor->UnSelect(node); + } else if(m_DoubleClicked == node && ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsItemHovered(ImGuiHoveredFlags_None)) m_DoubleClicked = entt::null; } @@ -159,17 +168,6 @@ namespace Lumos registry.get_or_emplace(node).name = objName; ImGui::PopStyleVar(); } -#if 0 - ImGui::SameLine(ImGui::GetWindowContentRegionMax().x - 22.0f); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.7f, 0.7f, 0.7f, 0.0f)); - if(ImGui::Button(active ? ICON_MDI_EYE : ICON_MDI_EYE_OFF)) - { - auto& activeComponent = registry.get_or_emplace(node); - - activeComponent.active = !active; - } - ImGui::PopStyleColor(); -#endif if(!active) ImGui::PopStyleColor(); @@ -178,27 +176,40 @@ namespace Lumos if(ImGui::BeginPopupContextItem(name)) { if(ImGui::Selectable("Copy")) - m_Editor->SetCopiedEntity(node); + { + if(!m_Editor->IsSelected(node)) + { + m_Editor->SetCopiedEntity(node); + } + for(auto entity : m_Editor->GetSelected()) + m_Editor->SetCopiedEntity(entity); + } if(ImGui::Selectable("Cut")) - m_Editor->SetCopiedEntity(node, true); + { + for(auto entity : m_Editor->GetSelected()) + m_Editor->SetCopiedEntity(node, true); + } - if(m_Editor->GetCopiedEntity() != entt::null && registry.valid(m_Editor->GetCopiedEntity())) + if(m_Editor->GetCopiedEntity().size() > 0 && registry.valid(m_Editor->GetCopiedEntity().front())) { if(ImGui::Selectable("Paste")) { - auto scene = Application::Get().GetSceneManager()->GetCurrentScene(); - Entity copiedEntity = { m_Editor->GetCopiedEntity(), scene }; - if(!copiedEntity.Valid()) + for(auto entity : m_Editor->GetCopiedEntity()) { - m_Editor->SetCopiedEntity(entt::null); - } - else - { - scene->DuplicateEntity(copiedEntity, { node, scene }); + auto scene = Application::Get().GetSceneManager()->GetCurrentScene(); + Entity copiedEntity = { entity, scene }; + if(!copiedEntity.Valid()) + { + m_Editor->SetCopiedEntity(entt::null); + } + else + { + scene->DuplicateEntity(copiedEntity, { node, scene }); - if(m_Editor->GetCutCopyEntity()) - deleteEntity = true; + if(m_Editor->GetCutCopyEntity()) + deleteEntity = true; + } } } } @@ -216,8 +227,8 @@ namespace Lumos } if(ImGui::Selectable("Delete")) deleteEntity = true; - if(m_Editor->GetSelected() == node) - m_Editor->SetSelected(entt::null); + // if(m_Editor->IsSelected(node)) + // m_Editor->UnSelect(node); ImGui::Separator(); if(ImGui::Selectable("Rename")) m_DoubleClicked = node; @@ -229,6 +240,16 @@ namespace Lumos auto child = scene->CreateEntity(); child.SetParent({ node, scene }); } + + if(ImGui::Selectable("Zoom to")) + { + // if(Application::Get().GetEditorState() == EditorState::Preview) + { + auto transform = registry.try_get(node); + if(transform) + m_Editor->FocusCamera(transform->GetWorldPosition(), 2.0f, 2.0f); + } + } ImGui::EndPopup(); } @@ -275,8 +296,8 @@ namespace Lumos ImGui::EndDragDropTarget(); } - if(m_Editor->GetSelected() == entity) - m_Editor->SetSelected(entt::null); + if(m_Editor->IsSelected(entity)) + m_Editor->UnSelect(entity); } if(ImGui::IsItemClicked() && !deleteEntity) @@ -307,7 +328,7 @@ namespace Lumos if(m_SelectUp) { - if(m_Editor->GetSelected() == node && registry.valid(m_CurrentPrevious)) + if(m_Editor->GetSelected().front() == node && registry.valid(m_CurrentPrevious)) { m_SelectUp = false; m_Editor->SetSelected(m_CurrentPrevious); @@ -316,7 +337,7 @@ namespace Lumos if(m_SelectDown) { - if(registry.valid(m_CurrentPrevious) && m_CurrentPrevious == m_Editor->GetSelected()) + if(registry.valid(m_CurrentPrevious) && m_CurrentPrevious == m_Editor->GetSelected().front()) { m_SelectDown = false; m_Editor->SetSelected(node); @@ -325,6 +346,18 @@ namespace Lumos m_CurrentPrevious = node; +#if 1 + ImGui::SameLine(ImGui::GetWindowContentRegionMax().x - ImGui::CalcTextSize(ICON_MDI_EYE).x * 2.0f); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.7f, 0.7f, 0.7f, 0.0f)); + if(ImGui::Button(active ? ICON_MDI_EYE : ICON_MDI_EYE_OFF)) + { + auto& activeComponent = registry.get_or_emplace(node); + + activeComponent.active = !active; + } + ImGui::PopStyleColor(); +#endif + if(nodeOpen == false) { ImGui::PopID(); @@ -534,23 +567,26 @@ namespace Lumos if(ImGui::BeginPopupContextWindow()) { - if(m_Editor->GetCopiedEntity() != entt::null && registry.valid(m_Editor->GetCopiedEntity())) + if(!m_Editor->GetCopiedEntity().empty() && registry.valid(m_Editor->GetCopiedEntity().front())) { if(ImGui::Selectable("Paste")) { - auto scene = Application::Get().GetSceneManager()->GetCurrentScene(); - Entity copiedEntity = { m_Editor->GetCopiedEntity(), scene }; - if(!copiedEntity.Valid()) - { - m_Editor->SetCopiedEntity(entt::null); - } - else + for(auto entity : m_Editor->GetCopiedEntity()) { - scene->DuplicateEntity(copiedEntity); - - if(m_Editor->GetCutCopyEntity()) + auto scene = Application::Get().GetSceneManager()->GetCurrentScene(); + Entity copiedEntity = { entity, scene }; + if(!copiedEntity.Valid()) { - DestroyEntity(m_Editor->GetCopiedEntity(), registry); + m_Editor->SetCopiedEntity(entt::null); + } + else + { + scene->DuplicateEntity(copiedEntity); + + if(m_Editor->GetCutCopyEntity()) + { + DestroyEntity(entity, registry); + } } } } diff --git a/Editor/Source/ImGUIConsoleSink.h b/Editor/Source/ImGUIConsoleSink.h index 54fc73149..d5bc8b2ca 100644 --- a/Editor/Source/ImGUIConsoleSink.h +++ b/Editor/Source/ImGUIConsoleSink.h @@ -2,6 +2,7 @@ #include "ConsolePanel.h" #include +#include namespace Lumos { @@ -21,7 +22,10 @@ namespace Lumos spdlog::memory_buf_t formatted; spdlog::sinks::base_sink::formatter_->format(msg, formatted); std::string source = fmt::format("File : {0} | Function : {1} | Line : {2}", msg.source.filename, msg.source.funcname, msg.source.line); - auto message = CreateSharedPtr(fmt::to_string(formatted), GetMessageLevel(msg.level), source, static_cast(msg.thread_id)); + const auto time = fmt::localtime(msg.time); + auto processed = fmt::format("{:%H:%M:%S}", time); + + auto message = CreateSharedPtr(fmt::to_string(formatted), GetMessageLevel(msg.level), source, static_cast(msg.thread_id), processed); ConsolePanel::AddMessage(message); } diff --git a/Editor/Source/InspectorPanel.cpp b/Editor/Source/InspectorPanel.cpp index 2166528c0..629b592dd 100644 --- a/Editor/Source/InspectorPanel.cpp +++ b/Editor/Source/InspectorPanel.cpp @@ -753,7 +753,7 @@ end int channels = soundPointer->GetChannels(); Lumos::ImGuiUtilities::Property("Bit Rate", bitrate, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); - Lumos::ImGuiUtilities::Property("Frequency", frequency, 0.0f, 0.0f, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); + Lumos::ImGuiUtilities::Property("Frequency", frequency, 1.0f, 0.0f, 0.0f, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); Lumos::ImGuiUtilities::Property("Size", size, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); Lumos::ImGuiUtilities::Property("Length", length, 0.0, 0.0, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); Lumos::ImGuiUtilities::Property("Channels", channels, 0, 0, Lumos::ImGuiUtilities::PropertyFlag::ReadOnly); @@ -816,7 +816,7 @@ end camera.SetSensitivity(sensitivity); float exposure = camera.GetExposure(); - ImGuiUtilities::Property("Exposure", exposure, 0.0f, 0.0f, ImGuiUtilities::PropertyFlag::ReadOnly); + ImGuiUtilities::Property("Exposure", exposure, 0.0f, 0.0f, 0.0f, ImGuiUtilities::PropertyFlag::ReadOnly); ImGui::Columns(1); ImGui::Separator(); @@ -895,6 +895,7 @@ end if(ImGui::IsItemHovered() && tex) { ImGui::BeginTooltip(); + ImGui::TextUnformatted(tex ? tex->GetFilepath().c_str() : "No Texture"); ImGui::Image(tex->GetHandle(), ImVec2(256, 256), ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); ImGui::EndTooltip(); } @@ -936,10 +937,9 @@ end ImGui::NextColumn(); ImGui::PushItemWidth(-1); - ImGui::TextUnformatted(tex ? tex->GetFilepath().c_str() : "No Texture"); + if(tex) { - ImGuiUtilities::Tooltip(tex->GetFilepath().c_str()); ImGui::Text("%u x %u", tex->GetWidth(), tex->GetHeight()); ImGui::Text("Mip Levels : %u", tex->GetMipMapLevels()); } @@ -1583,10 +1583,13 @@ end void TextureWidget(const char* label, Lumos::Graphics::Material* material, Lumos::Graphics::Texture2D* tex, bool flipImage, float& usingMapProperty, glm::vec4& colourProperty, const std::function& callback, const ImVec2& imageButtonSize = ImVec2(64, 64)) { using namespace Lumos; - if(ImGui::TreeNodeEx(label, ImGuiTreeNodeFlags_DefaultOpen)) + if(ImGui::TreeNodeEx(label, ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2)); - ImGui::Columns(2); + // ImGui::Columns(2); + ImGui::BeginColumns("TextureWidget", 2, ImGuiOldColumnFlags_NoResize); + ImGui::SetColumnWidth(0, imageButtonSize.x + 10.0f); + ImGui::Separator(); ImGui::AlignTextToFramePadding(); @@ -1608,7 +1611,10 @@ end if(ImGui::IsItemHovered() && tex) { ImGui::BeginTooltip(); - ImGui::Image(tex->GetHandle(), ImVec2(256, 256), ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); + ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); + ImGui::TextUnformatted(tex->GetFilepath().c_str()); + ImGui::PopTextWrapPos(); + ImGui::Image(tex->GetHandle(), imageButtonSize * 3.0f, ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); ImGui::EndTooltip(); } } @@ -1648,19 +1654,32 @@ end } ImGui::NextColumn(); - ImGui::PushItemWidth(-1); - ImGui::TextUnformatted(tex ? tex->GetFilepath().c_str() : "No Texture"); + // ImGui::PushItemWidth(-1); + if(tex) { - ImGuiUtilities::Tooltip(tex->GetFilepath().c_str()); ImGui::Text("%u x %u", tex->GetWidth(), tex->GetHeight()); ImGui::Text("Mip Levels : %u", tex->GetMipMapLevels()); } - ImGui::PopItemWidth(); - ImGui::NextColumn(); - ImGuiUtilities::Property("Use Map", usingMapProperty, 0.0f, 1.0f); - ImGuiUtilities::Property("Colour", colourProperty, 0.0f, 1.0f, false, Lumos::ImGuiUtilities::PropertyFlag::ColourProperty); + // ImGui::TextUnformatted("Use Map"); + // ImGui::SameLine(); + // ImGui::PushItemWidth(-1); + + ImGui::SliderFloat(Lumos::ImGuiUtilities::GenerateLabelID("Use Map"), &usingMapProperty, 0.0f, 1.0f); + + ImGui::ColorEdit4(Lumos::ImGuiUtilities::GenerateLabelID("Colour"), glm::value_ptr(colourProperty)); + /* ImGui::TextUnformatted("Value"); + ImGui::SameLine(); + ImGui::PushItemWidth(-1);*/ + + // ImGui::DragFloat(Lumos::ImGuiUtilities::GenerateID(), &amount, 0.0f, 20.0f); + + // ImGui::PopItemWidth(); + // ImGui::NextColumn(); + + // ImGuiUtilities::Property("Use Map", usingMapProperty, 0.0f, 1.0f); + // ImGuiUtilities::Property("Colour", colourProperty, 0.0f, 1.0f, false, Lumos::ImGuiUtilities::PropertyFlag::ColourProperty); ImGui::Columns(1); @@ -1671,13 +1690,14 @@ end } } - void TextureWidget(const char* label, Lumos::Graphics::Material* material, Lumos::Graphics::Texture2D* tex, bool flipImage, float& usingMapProperty, float& amount, const std::function& callback, const ImVec2& imageButtonSize = ImVec2(64, 64)) + void TextureWidget(const char* label, Lumos::Graphics::Material* material, Lumos::Graphics::Texture2D* tex, bool flipImage, float& usingMapProperty, float& amount, bool hasAmountValue, const std::function& callback, const ImVec2& imageButtonSize = ImVec2(64, 64)) { using namespace Lumos; - if(ImGui::TreeNodeEx(label, ImGuiTreeNodeFlags_DefaultOpen)) + if(ImGui::TreeNodeEx(label, ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_SpanFullWidth)) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2)); - ImGui::Columns(2); + ImGui::BeginColumns("TextureWidget", 2, ImGuiOldColumnFlags_NoResize); + ImGui::SetColumnWidth(0, imageButtonSize.x + 10.0f); ImGui::Separator(); ImGui::AlignTextToFramePadding(); @@ -1699,7 +1719,11 @@ end if(ImGui::IsItemHovered() && tex) { ImGui::BeginTooltip(); - ImGui::Image(tex->GetHandle(), ImVec2(256, 256), ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); + ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); + ImGui::TextUnformatted(tex->GetFilepath().c_str()); + ImGui::PopTextWrapPos(); + + ImGui::Image(tex->GetHandle(), imageButtonSize * 3.0f, ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); ImGui::EndTooltip(); } } @@ -1740,18 +1764,34 @@ end ImGui::NextColumn(); ImGui::PushItemWidth(-1); - ImGui::TextUnformatted(tex ? tex->GetFilepath().c_str() : "No Texture"); if(tex) { - ImGuiUtilities::Tooltip(tex->GetFilepath().c_str()); ImGui::Text("%u x %u", tex->GetWidth(), tex->GetHeight()); ImGui::Text("Mip Levels : %u", tex->GetMipMapLevels()); } ImGui::PopItemWidth(); - ImGui::NextColumn(); + /* ImGui::TextUnformatted("Use Map"); + ImGui::SameLine(); + ImGui::PushItemWidth(-1);*/ - ImGuiUtilities::Property("Use Map", usingMapProperty, 0.0f, 1.0f); - ImGuiUtilities::Property("Value", amount, 0.0f, 20.0f); + // ImGui::DragFloat(Lumos::ImGuiUtilities::GenerateID(), &usingMapProperty, 0.0f, 1.0f); + ImGui::SliderFloat(Lumos::ImGuiUtilities::GenerateLabelID("Use Map"), &usingMapProperty, 0.0f, 1.0f); + + if(hasAmountValue) + { + float maxValue = 20.0f; + if(std::strcmp(label, "Metallic") == 0 || std::strcmp(label, "Roughness") == 0) + maxValue = 1.0f; + ImGui::SliderFloat(Lumos::ImGuiUtilities::GenerateLabelID("Value"), &amount, 0.0f, maxValue); + } + // ImGui::TextUnformatted("Value"); + // ImGui::SameLine(); + // ImGui::PushItemWidth(-1); + + // ImGui::DragFloat(Lumos::ImGuiUtilities::GenerateID(), &amount, 0.0f, 20.0f); + + // ImGui::PopItemWidth(); + ImGui::NextColumn(); ImGui::Columns(1); @@ -1770,6 +1810,7 @@ end auto primitiveType = reg.get(e).ModelRef ? model.GetPrimitiveType() : Lumos::Graphics::PrimitiveType::None; + Lumos::ImGuiUtilities::PushID(); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2)); ImGui::Columns(2); ImGui::Separator(); @@ -1789,13 +1830,13 @@ end if(ImGui::Selectable(shapes[n], shape_current.c_str())) { if(reg.get(e).ModelRef) - model.GetMeshes().clear(); + model.GetMeshesRef().clear(); if(strcmp(shapes[n], "File") != 0) { if(reg.get(e).ModelRef) { - model.GetMeshes().push_back(Lumos::SharedPtr(Lumos::Graphics::CreatePrimative(GetPrimativeName(shapes[n])))); + model.GetMeshesRef().push_back(Lumos::SharedPtr(Lumos::Graphics::CreatePrimative(GetPrimativeName(shapes[n])))); model.SetPrimitiveType(GetPrimativeName(shapes[n])); } else @@ -1837,79 +1878,160 @@ end int matIndex = 0; - if(!reg.get(e).ModelRef) + auto modelRef = reg.get(e).ModelRef; + if(!modelRef) + { + Lumos::ImGuiUtilities::PopID(); return; + } - auto& meshes = reg.get(e).ModelRef->GetMeshes(); - for(auto mesh : meshes) + ImGui::Separator(); + const auto& meshes = modelRef->GetMeshes(); + if(ImGui::TreeNode("Meshes")) { - auto material = mesh->GetMaterial(); - std::string matName = "Material"; - matName += std::to_string(matIndex); - matIndex++; - if(!material) + for(auto mesh : meshes) { - ImGui::TextUnformatted("Empty Material"); - if(ImGui::Button("Add Material", ImVec2(ImGui::GetContentRegionAvail().x, 0.0f))) - mesh->SetMaterial(Lumos::CreateSharedPtr()); + if(!mesh->GetName().empty()) + ImGui::TextUnformatted(mesh->GetName().c_str()); } - else if(ImGui::TreeNodeEx(matName.c_str(), 0)) + ImGui::TreePop(); + } + + ImGui::Separator(); + + auto Skeleton = modelRef->GetSkeleton(); + + if(Skeleton) + { + ImGui::TextUnformatted("Animation"); + + auto jointNames = Skeleton->joint_names(); + for(auto& joint : jointNames) { - using namespace Lumos; - bool flipImage = Graphics::Renderer::GetGraphicsContext()->FlipImGUITexture(); + ImGui::TextUnformatted(joint); + } - bool twoSided = material->GetFlag(Lumos::Graphics::Material::RenderFlags::TWOSIDED); - bool depthTested = material->GetFlag(Lumos::Graphics::Material::RenderFlags::DEPTHTEST); + const auto& animations = modelRef->GetAnimations(); + } - if(ImGuiUtilities::Property("Two Sided", twoSided)) - material->SetFlag(Lumos::Graphics::Material::RenderFlags::TWOSIDED, twoSided); + ImGui::Separator(); + if(ImGui::TreeNode("Materials")) + { + Lumos::Graphics::Material* MaterialShown[1000]; + uint32_t MaterialCount = 0; + for(auto mesh : meshes) + { + auto material = mesh->GetMaterial(); + std::string matName = material ? material->GetName() : ""; - if(ImGuiUtilities::Property("Depth Tested", depthTested)) - material->SetFlag(Lumos::Graphics::Material::RenderFlags::DEPTHTEST, depthTested); + bool materialFound = false; + for(uint32_t i = 0; i < MaterialCount; i++) + { + if(MaterialShown[i] == material.get()) + materialFound = true; + } - Graphics::MaterialProperties* prop = material->GetProperties(); - auto colour = glm::vec4(); - float normal = 0.0f; - auto& textures = material->GetTextures(); - TextureWidget("Albedo", material.get(), textures.albedo.get(), flipImage, prop->albedoMapFactor, prop->albedoColour, std::bind(&Graphics::Material::SetAlbedoTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); - ImGui::Separator(); + if(materialFound) + continue; - TextureWidget("Normal", material.get(), textures.normal.get(), flipImage, prop->normalMapFactor, normal, std::bind(&Graphics::Material::SetNormalTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); - ImGui::Separator(); + MaterialShown[MaterialCount++] = material.get(); - TextureWidget("Metallic", material.get(), textures.metallic.get(), flipImage, prop->metallicMapFactor, prop->metallic, std::bind(&Graphics::Material::SetMetallicTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); - ImGui::Separator(); + if(matName.empty()) + { + matName = "Material"; + matName += std::to_string(matIndex); + } - TextureWidget("Roughness", material.get(), textures.roughness.get(), flipImage, prop->roughnessMapFactor, prop->roughness, std::bind(&Graphics::Material::SetRoughnessTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); - ImGui::Separator(); + matName += "##" + std::to_string(matIndex); + matIndex++; + if(!material) + { + ImGui::TextUnformatted("Empty Material"); + if(ImGui::Button("Add Material", ImVec2(ImGui::GetContentRegionAvail().x, 0.0f))) + mesh->SetMaterial(Lumos::CreateSharedPtr()); + } + else if(ImGui::TreeNodeEx(matName.c_str(), ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_SpanFullWidth)) + { + using namespace Lumos; + ImGui::Indent(); + bool flipImage = Graphics::Renderer::GetGraphicsContext()->FlipImGUITexture(); - TextureWidget("AO", material.get(), textures.ao.get(), flipImage, prop->occlusionMapFactor, normal, std::bind(&Graphics::Material::SetAOTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); - ImGui::Separator(); + bool twoSided = material->GetFlag(Lumos::Graphics::Material::RenderFlags::TWOSIDED); + bool depthTested = material->GetFlag(Lumos::Graphics::Material::RenderFlags::DEPTHTEST); + bool alphaBlended = material->GetFlag(Lumos::Graphics::Material::RenderFlags::ALPHABLEND); - TextureWidget("Emissive", material.get(), textures.emissive.get(), flipImage, prop->emissiveMapFactor, prop->emissive, std::bind(&Graphics::Material::SetEmissiveTexture, material, std::placeholders::_1), ImVec2(64, 64) * Application::Get().GetWindowDPI()); + ImGui::Columns(2); + ImGui::Separator(); - ImGui::Columns(2); + ImGui::AlignTextToFramePadding(); - ImGui::AlignTextToFramePadding(); - ImGui::TextUnformatted("WorkFlow"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); + if(ImGuiUtilities::Property("Alpha Blended", alphaBlended)) + material->SetFlag(Lumos::Graphics::Material::RenderFlags::ALPHABLEND, alphaBlended); - int workFlow = (int)material->GetProperties()->workflow; + if(ImGuiUtilities::Property("Two Sided", twoSided)) + material->SetFlag(Lumos::Graphics::Material::RenderFlags::TWOSIDED, twoSided); - if(ImGui::DragInt("##WorkFlow", &workFlow, 0.3f, 0, 2)) - { - material->GetProperties()->workflow = (float)workFlow; - } + if(ImGuiUtilities::Property("Depth Tested", depthTested)) + material->SetFlag(Lumos::Graphics::Material::RenderFlags::DEPTHTEST, depthTested); - ImGui::PopItemWidth(); - ImGui::NextColumn(); + ImGui::Columns(1); + + Graphics::MaterialProperties* prop = material->GetProperties(); + auto colour = glm::vec4(); + float normal = 0.0f; + auto& textures = material->GetTextures(); + glm::vec2 textureSize = glm::vec2(100.0f, 100.0f); + TextureWidget("Albedo", material.get(), textures.albedo.get(), flipImage, prop->albedoMapFactor, prop->albedoColour, std::bind(&Graphics::Material::SetAlbedoTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + ImGui::Separator(); + + TextureWidget("Normal", material.get(), textures.normal.get(), flipImage, prop->normalMapFactor, normal, false, std::bind(&Graphics::Material::SetNormalTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + ImGui::Separator(); - material->SetMaterialProperites(*prop); - ImGui::Columns(1); - ImGui::TreePop(); + TextureWidget("Metallic", material.get(), textures.metallic.get(), flipImage, prop->metallicMapFactor, prop->metallic, true, std::bind(&Graphics::Material::SetMetallicTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + ImGui::Separator(); + + TextureWidget("Roughness", material.get(), textures.roughness.get(), flipImage, prop->roughnessMapFactor, prop->roughness, true, std::bind(&Graphics::Material::SetRoughnessTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + + if(ImGui::TreeNodeEx("Reflectance", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_SpanFullWidth)) + { + ImGui::SliderFloat("##Reflectance", &prop->reflectance, 0.0f, 1.0f); + ImGui::TreePop(); + } + + ImGui::Separator(); + + TextureWidget("AO", material.get(), textures.ao.get(), flipImage, prop->occlusionMapFactor, normal, false, std::bind(&Graphics::Material::SetAOTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + ImGui::Separator(); + + TextureWidget("Emissive", material.get(), textures.emissive.get(), flipImage, prop->emissiveMapFactor, prop->emissive, true, std::bind(&Graphics::Material::SetEmissiveTexture, material, std::placeholders::_1), textureSize * Application::Get().GetWindowDPI()); + + ImGui::Columns(2); + + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("WorkFlow"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); + + int workFlow = (int)material->GetProperties()->workflow; + + if(ImGui::DragInt("##WorkFlow", &workFlow, 0.3f, 0, 2)) + { + material->GetProperties()->workflow = (float)workFlow; + } + + ImGui::PopItemWidth(); + ImGui::NextColumn(); + + material->SetMaterialProperites(*prop); + ImGui::Columns(1); + ImGui::Unindent(); + ImGui::TreePop(); + } } + ImGui::TreePop(); } + + Lumos::ImGuiUtilities::PopID(); } template <> @@ -1920,81 +2042,115 @@ end // Disable image until texturecube is supported // Lumos::ImGuiUtilities::Image(environment.GetEnvironmentMap(), glm::vec2(200, 200)); + uint8_t mode = environment.GetMode(); + glm::vec4 params = environment.GetParameters(); + ImGui::PushItemWidth(-1); + + const char* modes[] = { "Textures", "Preetham", "Generic" }; + const char* mode_current = modes[mode]; + if(ImGui::BeginCombo("", mode_current, 0)) // The second parameter is the label previewed before opening the combo. + { + for(int n = 0; n < 3; n++) + { + bool is_selected = (mode_current == modes[n]); + if(ImGui::Selectable(modes[n], mode_current)) + { + environment.SetMode(n); + } + if(is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2)); ImGui::Columns(2); ImGui::Separator(); - ImGui::TextUnformatted("File Path"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); + if(mode == 0) + { + ImGui::TextUnformatted("File Path"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); - static char filePath[INPUT_BUF_SIZE]; - strcpy(filePath, environment.GetFilePath().c_str()); + static char filePath[INPUT_BUF_SIZE]; + strcpy(filePath, environment.GetFilePath().c_str()); - if(ImGui::InputText("##filePath", filePath, IM_ARRAYSIZE(filePath), 0)) - { - environment.SetFilePath(filePath); - } + if(ImGui::InputText("##filePath", filePath, IM_ARRAYSIZE(filePath), 0)) + { + environment.SetFilePath(filePath); + } - ImGui::PopItemWidth(); - ImGui::NextColumn(); + ImGui::PopItemWidth(); + ImGui::NextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::TextUnformatted("File Type"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("File Type"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); - static char fileType[INPUT_BUF_SIZE]; - strcpy(fileType, environment.GetFileType().c_str()); + static char fileType[INPUT_BUF_SIZE]; + strcpy(fileType, environment.GetFileType().c_str()); - if(ImGui::InputText("##fileType", fileType, IM_ARRAYSIZE(fileType), 0)) - { - environment.SetFileType(fileType); - } + if(ImGui::InputText("##fileType", fileType, IM_ARRAYSIZE(fileType), 0)) + { + environment.SetFileType(fileType); + } - ImGui::PopItemWidth(); - ImGui::NextColumn(); + ImGui::PopItemWidth(); + ImGui::NextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::TextUnformatted("Width"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); - int width = environment.GetWidth(); + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("Width"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); + int width = environment.GetWidth(); - if(ImGui::DragInt("##Width", &width)) - { - environment.SetWidth(width); - } + if(ImGui::DragInt("##Width", &width)) + { + environment.SetWidth(width); + } - ImGui::PopItemWidth(); - ImGui::NextColumn(); + ImGui::PopItemWidth(); + ImGui::NextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::TextUnformatted("Height"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); - int height = environment.GetHeight(); + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("Height"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); + int height = environment.GetHeight(); - if(ImGui::DragInt("##Height", &height)) - { - environment.SetHeight(height); - } + if(ImGui::DragInt("##Height", &height)) + { + environment.SetHeight(height); + } - ImGui::PopItemWidth(); - ImGui::NextColumn(); + ImGui::PopItemWidth(); + ImGui::NextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::TextUnformatted("Num Mips"); - ImGui::NextColumn(); - ImGui::PushItemWidth(-1); - int numMips = environment.GetNumMips(); - if(ImGui::InputInt("##NumMips", &numMips)) - { - environment.SetNumMips(numMips); + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted("Num Mips"); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); + int numMips = environment.GetNumMips(); + if(ImGui::InputInt("##NumMips", &numMips)) + { + environment.SetNumMips(numMips); + } + + ImGui::PopItemWidth(); + ImGui::NextColumn(); } + else if(mode == 1) + { + bool valueUpdated = false; + valueUpdated |= Lumos::ImGuiUtilities::Property("Turbidity", params.x, 1.7f, 100.0f, 0.01f); + valueUpdated |= Lumos::ImGuiUtilities::Property("Azimuth", params.y, -1000.0f, 1000.f, 0.01f); + valueUpdated |= Lumos::ImGuiUtilities::Property("Inclination", params.z, -1000.0f, 1000.f, 0.01f); - ImGui::PopItemWidth(); - ImGui::NextColumn(); + if(valueUpdated) + environment.SetParameters(params); + } ImGui::Columns(1); if(ImGui::Button("Reload", ImVec2(ImGui::GetContentRegionAvail().x, 0.0))) @@ -2164,7 +2320,7 @@ namespace Lumos { LUMOS_PROFILE_FUNCTION(); - auto selected = m_Editor->GetSelected(); + auto selectedEntities = m_Editor->GetSelected(); if(ImGui::Begin(m_Name.c_str(), &m_Active)) { @@ -2179,7 +2335,7 @@ namespace Lumos } auto& registry = Application::Get().GetSceneManager()->GetCurrentScene()->GetRegistry(); - if(selected == entt::null || !registry.valid(selected)) + if(selectedEntities.size() != 1 || !registry.valid(selectedEntities.front())) { m_Editor->SetSelected(entt::null); ImGuiUtilities::PopID(); @@ -2187,6 +2343,8 @@ namespace Lumos return; } + auto selected = selectedEntities.front(); + // active checkbox auto activeComponent = registry.try_get(selected); bool active = activeComponent ? activeComponent->active : true; @@ -2201,7 +2359,7 @@ namespace Lumos ImGui::TextUnformatted(ICON_MDI_CUBE); ImGui::SameLine(); - bool hasName = registry.has(selected); + bool hasName = registry.all_of(selected); std::string name; if(hasName) name = registry.get(selected).name; diff --git a/Editor/Source/ProjectSettingsPanel.cpp b/Editor/Source/ProjectSettingsPanel.cpp index 57129bc39..4f2887334 100644 --- a/Editor/Source/ProjectSettingsPanel.cpp +++ b/Editor/Source/ProjectSettingsPanel.cpp @@ -23,7 +23,16 @@ namespace Lumos { auto& projectSettings = Application::Get().GetProjectSettings(); - ImGuiUtilities::PropertyConst("Project Name", projectSettings.m_ProjectName.c_str()); + auto projectName = projectSettings.m_ProjectName; + + if(m_NameUpdated) + projectName = m_ProjectName; + + if(ImGuiUtilities::Property("Project Name", projectName, ImGuiUtilities::PropertyFlag::None)) + { + m_NameUpdated = true; + } + ImGuiUtilities::PropertyConst("Project Root", projectSettings.m_ProjectRoot.c_str()); ImGuiUtilities::PropertyConst("Engine Asset Path", projectSettings.m_EngineAssetPath.c_str()); ImGuiUtilities::Property("App Width", (int&)projectSettings.Width, 0, 0, ImGuiUtilities::PropertyFlag::ReadOnly); @@ -35,6 +44,19 @@ namespace Lumos ImGuiUtilities::Property("Title", projectSettings.Title); ImGuiUtilities::Property("RenderAPI", projectSettings.RenderAPI, 0, 1); ImGuiUtilities::Property("Project Version", projectSettings.ProjectVersion, 0, 0, ImGuiUtilities::PropertyFlag::ReadOnly); + + if(!ImGui::IsItemActive() && m_NameUpdated) + { + m_NameUpdated = false; + auto fullPath = projectSettings.m_ProjectRoot + projectSettings.m_ProjectName + std::string(".lmproj"); + if(std::filesystem::exists(fullPath)) + { + projectSettings.m_ProjectName = projectName; + std::filesystem::rename(fullPath, projectSettings.m_ProjectRoot + projectSettings.m_ProjectName + std::string(".lmproj")); + } + else + projectSettings.m_ProjectName = projectName; + } } ImGui::Columns(1); ImGuiUtilities::PopID(); diff --git a/Editor/Source/ProjectSettingsPanel.h b/Editor/Source/ProjectSettingsPanel.h index c60993c50..7c58f1ae3 100644 --- a/Editor/Source/ProjectSettingsPanel.h +++ b/Editor/Source/ProjectSettingsPanel.h @@ -15,5 +15,7 @@ namespace Lumos private: Scene* m_CurrentScene = nullptr; + bool m_NameUpdated = false; + std::string m_ProjectName; }; } diff --git a/Editor/Source/ResourcePanel.cpp b/Editor/Source/ResourcePanel.cpp index c7dcc05b0..9b1ca90af 100644 --- a/Editor/Source/ResourcePanel.cpp +++ b/Editor/Source/ResourcePanel.cpp @@ -4,14 +4,94 @@ #include #include #include +#include #include #include #include +#include +#include +#include + +#ifdef LUMOS_PLATFORM_WINDOWS +#include +#undef RemoveDirectory +#undef MoveFile +#include +#endif namespace Lumos { + static const std::unordered_map s_FileTypesToString = { + { FileType::Unknown, "Unknown" }, + { FileType::Scene, "Scene" }, + { FileType::Prefab, "Prefab" }, + { FileType::Script, "Script" }, + { FileType::Shader, "Shader" }, + { FileType::Texture, "Texture" }, + { FileType::Font, "Font" }, + { FileType::Cubemap, "Cubemap" }, + { FileType::Model, "Model" }, + { FileType::Audio, "Audio" }, + }; + + static const std::unordered_map s_FileTypes = { + { ".lsn", FileType::Scene }, + { ".prefab", FileType::Prefab }, + { ".cs", FileType::Script }, + { ".lua", FileType::Script }, + { ".glsl", FileType::Shader }, + { ".shader", FileType::Shader }, + { ".frag", FileType::Shader }, + { ".vert", FileType::Shader }, + { ".comp", FileType::Shader }, + + { ".png", FileType::Texture }, + { ".jpg", FileType::Texture }, + { ".jpeg", FileType::Texture }, + { ".bmp", FileType::Texture }, + { ".gif", FileType::Texture }, + { ".tga", FileType::Texture }, + { ".ttf", FileType::Font }, + + { ".hdr", FileType::Cubemap }, + + { ".obj", FileType::Model }, + { ".fbx", FileType::Model }, + { ".gltf", FileType::Model }, + + { ".mp3", FileType::Audio }, + { ".m4a", FileType::Audio }, + { ".wav", FileType::Audio }, + { ".ogg", FileType::Audio }, + }; + + static const std::unordered_map s_TypeColors = { + { FileType::Scene, { 0.8f, 0.4f, 0.22f, 1.00f } }, + { FileType::Prefab, { 0.10f, 0.50f, 0.80f, 1.00f } }, + { FileType::Script, { 0.10f, 0.50f, 0.80f, 1.00f } }, + { FileType::Font, { 0.60f, 0.19f, 0.32f, 1.00f } }, + { FileType::Shader, { 0.10f, 0.50f, 0.80f, 1.00f } }, + { FileType::Texture, { 0.82f, 0.20f, 0.33f, 1.00f } }, + { FileType::Cubemap, { 0.82f, 0.18f, 0.30f, 1.00f } }, + { FileType::Model, { 0.18f, 0.82f, 0.76f, 1.00f } }, + { FileType::Audio, { 0.20f, 0.80f, 0.50f, 1.00f } }, + }; + + static const std::unordered_map s_FileTypesToIcon = { + { FileType::Unknown, ICON_MDI_FILE }, + { FileType::Scene, ICON_MDI_FILE }, + { FileType::Prefab, ICON_MDI_FILE }, + { FileType::Script, ICON_MDI_LANGUAGE_LUA }, + { FileType::Shader, ICON_MDI_IMAGE_FILTER_BLACK_WHITE }, + { FileType::Texture, ICON_MDI_FILE_IMAGE }, + { FileType::Font, ICON_MDI_CARD_TEXT }, + { FileType::Cubemap, ICON_MDI_IMAGE_FILTER_HDR }, + { FileType::Model, ICON_MDI_VECTOR_POLYGON }, + { FileType::Audio, ICON_MDI_MICROPHONE }, + }; + #ifdef LUMOS_PLATFORM_WINDOWS std::string ResourcePanel::m_Delimiter = "\\"; #else @@ -23,6 +103,8 @@ namespace Lumos m_Name = ICON_MDI_FOLDER_STAR " Resources###resources"; m_SimpleName = "Resources"; + m_GridSize = 180.0f; + m_GridSize *= Application::Get().GetWindow()->GetDPIScale(); // TODO: Get Project path from editor // #ifdef LUMOS_PLATFORM_IOS // m_BaseDirPath = "Assets"; @@ -44,9 +126,16 @@ namespace Lumos m_UpdateNavigationPath = true; m_IsDragging = false; - m_IsInListView = true; + m_IsInListView = false; m_UpdateBreadCrumbs = true; m_ShowHiddenFiles = false; + + Graphics::TextureDesc desc; + desc.minFilter = Graphics::TextureFilter::LINEAR; + desc.magFilter = Graphics::TextureFilter::LINEAR; + desc.wrap = Graphics::TextureWrap::CLAMP; + m_FileIcon = Graphics::Texture2D::CreateFromSource(browserFileWidth, browserFileHeight, (void*)browserFile, desc); + m_FolderIcon = Graphics::Texture2D::CreateFromSource(browserFolderWidth, browserFolderHeight, (void*)browserFolder, desc); } void ResourcePanel::ChangeDirectory(SharedPtr& directory) @@ -88,6 +177,8 @@ namespace Lumos if(std::filesystem::is_directory(directoryPath)) { + directoryInfo->IsFile = false; + directoryInfo->Name = directoryPath.filename().string(); for(auto entry : std::filesystem::directory_iterator(directoryPath)) { if(!m_ShowHiddenFiles && Lumos::StringUtilities::IsHiddenFile(entry.path().string())) @@ -100,6 +191,31 @@ namespace Lumos } } } + else + { + auto fileType = FileType::Unknown; + const auto& fileTypeIt = s_FileTypes.find(directoryPath.extension().string()); + if(fileTypeIt != s_FileTypes.end()) + fileType = fileTypeIt->second; + + directoryInfo->IsFile = true; + directoryInfo->Type = fileType; + directoryInfo->Name = directoryPath.filename().string(); + directoryInfo->FileSize = std::filesystem::exists(directoryPath) ? StringUtilities::BytesToString(std::filesystem::file_size(directoryPath)) : ""; + + std::string_view fileTypeString = s_FileTypesToString.at(FileType::Unknown); + const auto& fileStringTypeIt = s_FileTypesToString.find(fileType); + if(fileStringTypeIt != s_FileTypesToString.end()) + fileTypeString = fileStringTypeIt->second; + + ImVec4 fileTypeColor = { 1.0f, 1.0f, 1.0f, 1.0f }; + const auto& fileTypeColorIt = s_TypeColors.find(fileType); + if(fileTypeColorIt != s_TypeColors.end()) + fileTypeColor = fileTypeColorIt->second; + + directoryInfo->FileTypeString = fileTypeString; + directoryInfo->FileTypeColour = fileTypeColor; + } m_Directories[directoryInfo->FilePath.string()] = directoryInfo; return directoryInfo->FilePath.string(); @@ -136,9 +252,15 @@ namespace Lumos if(defaultOpen) nodeFlags |= ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf; - nodeFlags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_SpanAvailWidth; + nodeFlags |= ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_AllowOverlap | ImGuiTreeNodeFlags_SpanAvailWidth; bool isOpen = ImGui::TreeNodeEx((void*)(intptr_t)(dirInfo.get()), nodeFlags, ""); + if (ImGui::IsItemClicked()) + { + m_PreviousDirectory = m_CurrentDir; + m_CurrentDir = dirInfo; + m_UpdateNavigationPath = true; + } const char* folderIcon = ((isOpen && containsFolder) || m_CurrentDir == dirInfo) ? ICON_MDI_FOLDER_OPEN : ICON_MDI_FOLDER; ImGui::SameLine(); @@ -150,12 +272,7 @@ namespace Lumos ImVec2 verticalLineStart = ImGui::GetCursorScreenPos(); - if(ImGui::IsItemClicked()) - { - m_PreviousDirectory = m_CurrentDir; - m_CurrentDir = dirInfo; - m_UpdateNavigationPath = true; - } + if(isOpen && containsFolder) { @@ -210,20 +327,27 @@ namespace Lumos } } + static int FileIndex = 0; + void ResourcePanel::OnImGui() { LUMOS_PROFILE_FUNCTION(); - ImGui::Begin(m_Name.c_str(), &m_Active); + m_TextureLibrary.Update((float)Engine::Get().GetTimeStep().GetElapsedSeconds()); + if(ImGui::Begin(m_Name.c_str(), &m_Active)) { - - auto windowSize = ImGui::GetWindowSize(); - bool vertical = windowSize.y > windowSize.x; - + FileIndex = 0; + auto windowSize = ImGui::GetWindowSize(); + bool vertical = windowSize.y > windowSize.x; + static bool Init = false; if(!vertical) { - ImGui::BeginColumns("ResourcePanelColumns", 2, ImGuiOldColumnFlags_NoResize); - ImGui::SetColumnWidth(0, ImGui::GetWindowContentRegionMax().x / 3.0f); + ImGui::BeginColumns("ResourcePanelColumns", 2, 0); + if(!Init) + { + ImGui::SetColumnWidth(0, ImGui::GetWindowContentRegionMax().x / 3.0f); + Init = true; + } ImGui::BeginChild("##folders_common"); } else @@ -268,10 +392,59 @@ namespace Lumos ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); } - ImGui::BeginChild("##directory_structure", ImVec2(0, ImGui::GetWindowHeight() - ImGui::GetFrameHeightWithSpacing() * 2.6f - offset)); + // ImGui::BeginChild("##directory_structure", ImVec2(0, ImGui::GetWindowHeight() - ImGui::GetFrameHeightWithSpacing() * 2.6f - offset)); { { - ImGui::BeginChild("##directory_breadcrumbs", ImVec2(ImGui::GetColumnWidth(), ImGui::GetFrameHeightWithSpacing())); + ImGui::BeginChild("##directory_breadcrumbs", ImVec2(ImGui::GetColumnWidth(), ImGui::GetFrameHeightWithSpacing() * 2.0f)); + + ImGui::AlignTextToFramePadding(); + // Button for advanced settings + { + ImGuiUtilities::ScopedColour buttonColour(ImGuiCol_Button, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); + if(ImGui::Button(ICON_MDI_COGS)) + ImGui::OpenPopup("SettingsPopup"); + } + if(ImGui::BeginPopup("SettingsPopup")) + { + if(m_IsInListView) + { + if(ImGui::Button(ICON_MDI_VIEW_LIST " Switch to Grid View")) + { + m_IsInListView = !m_IsInListView; + } + } + else + { + if(ImGui::Button(ICON_MDI_VIEW_GRID " Switch to List View")) + { + m_IsInListView = !m_IsInListView; + } + } + + if(ImGui::Selectable("Refresh")) + { + Refresh(); + } + + if(ImGui::Selectable("New folder")) + { + std::filesystem::create_directory(std::filesystem::path(m_BasePath + "/" + m_CurrentDir->FilePath.string() + "/NewFolder")); + Refresh(); + } + + if(!m_IsInListView) + { + ImGui::SliderFloat("##GridSize", &m_GridSize, 40.0f, 400.0f); + } + + ImGui::EndPopup(); + } + ImGui::SameLine(); + + ImGui::TextUnformatted(ICON_MDI_MAGNIFY); + ImGui::SameLine(); + + m_Filter.Draw("##Filter", ImGui::GetContentRegionAvail().x - ImGui::GetStyle().IndentSpacing); if(ImGui::Button(ICON_MDI_ARROW_LEFT)) { @@ -313,46 +486,143 @@ namespace Lumos m_UpdateNavigationPath = false; } - if(m_IsInListView) { - if(ImGui::Button(ICON_MDI_VIEW_GRID)) + int secIdx = 0, newPwdLastSecIdx = -1; + + auto& AssetsDir = m_CurrentDir->FilePath; + + size_t PhysicalPathCount = 0; + + for(auto& sec : m_AssetPath) { - m_IsInListView = !m_IsInListView; + PhysicalPathCount++; } - ImGui::SameLine(); - } - else - { - if(ImGui::Button(ICON_MDI_VIEW_LIST)) + int dirIndex = 0; + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.1f, 0.2f, 0.7f, 0.0f)); + + for(auto& directory : m_BreadCrumbData) + { + const std::string& directoryName = directory->FilePath.filename().string(); + if(ImGui::SmallButton(directoryName.c_str())) + ChangeDirectory(directory); + + ImGui::SameLine(); + } + + ImGui::PopStyleColor(); + + if(newPwdLastSecIdx >= 0) { - m_IsInListView = !m_IsInListView; + int i = 0; + std::filesystem::path newPwd; + for(auto& sec : AssetsDir) + { + if(i++ > newPwdLastSecIdx) + break; + newPwd /= sec; + } +#ifdef _WIN32 + if(newPwdLastSecIdx == 0) + newPwd /= "\\"; +#endif + + m_PreviousDirectory = m_CurrentDir; + m_CurrentDir = m_Directories[newPwd.string()]; + m_UpdateNavigationPath = true; } + ImGui::SameLine(); } - ImGui::TextUnformatted(ICON_MDI_MAGNIFY); - ImGui::SameLine(); - - m_Filter.Draw("##Filter", ImGui::GetContentRegionAvail().x - ImGui::GetStyle().IndentSpacing); - ImGui::EndChild(); } { - ImGui::BeginChild("##Scrolling"); - int shownIndex = 0; float xAvail = ImGui::GetContentRegionAvail().x; - m_GridItemsPerRow = (int)floor(xAvail / (m_GridSize + ImGui::GetStyle().ItemSpacing.x)); - m_GridItemsPerRow = Maths::Max(1, m_GridItemsPerRow); + constexpr float padding = 4.0f; + const float scaledThumbnailSize = m_GridSize * ImGui::GetIO().FontGlobalScale; + const float scaledThumbnailSizeX = scaledThumbnailSize * 0.55f; + const float cellSize = scaledThumbnailSizeX + 2 * padding + scaledThumbnailSizeX * 0.1f; + + constexpr float overlayPaddingY = 6.0f * padding; + constexpr float thumbnailPadding = overlayPaddingY * 0.5f; + const float thumbnailSize = scaledThumbnailSizeX - thumbnailPadding; + + const ImVec2 backgroundThumbnailSize = { scaledThumbnailSizeX + padding * 2, scaledThumbnailSize + padding * 2 }; + + const float panelWidth = ImGui::GetContentRegionAvail().x - ImGui::GetStyle().ScrollbarSize; + int columnCount = static_cast(panelWidth / cellSize); + if(columnCount < 1) + columnCount = 1; + + float lineHeight = ImGui::GetTextLineHeight(); + int flags = ImGuiTableFlags_ContextMenuInBody | ImGuiTableFlags_ScrollY; if(m_IsInListView) { - for(int i = 0; i < m_CurrentDir->Children.size(); i++) + ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 0, 0 }); + columnCount = 1; + flags |= ImGuiTableFlags_RowBg + | ImGuiTableFlags_NoPadOuterX + | ImGuiTableFlags_NoPadInnerX + | ImGuiTableFlags_SizingStretchSame; + } + else + { + ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { scaledThumbnailSizeX * 0.05f, scaledThumbnailSizeX * 0.05f }); + flags |= ImGuiTableFlags_PadOuterX | ImGuiTableFlags_SizingFixedFit; + } + + ImVec2 cursorPos = ImGui::GetCursorPos(); + const ImVec2 region = ImGui::GetContentRegionAvail(); + ImGui::InvisibleButton("##DragDropTargetAssetPanelBody", region); + + ImGui::SetNextItemAllowOverlap(); + ImGui::SetCursorPos(cursorPos); + + if(ImGui::BeginTable("BodyTable", columnCount, flags)) + { + m_GridItemsPerRow = (int)floor(xAvail / (m_GridSize + ImGui::GetStyle().ItemSpacing.x)); + m_GridItemsPerRow = Maths::Max(1, m_GridItemsPerRow); + + textureCreated = false; + + ImGuiUtilities::PushID(); + + if(m_IsInListView) + { + for(int i = 0; i < m_CurrentDir->Children.size(); i++) + { + if(m_CurrentDir->Children.size() > 0) + { + if(!m_ShowHiddenFiles && Lumos::StringUtilities::IsHiddenFile(m_CurrentDir->Children[i]->FilePath.filename().string())) + { + continue; + } + + if(m_Filter.IsActive()) + { + if(!m_Filter.PassFilter(m_CurrentDir->Children[i]->FilePath.filename().string().c_str())) + { + continue; + } + } + + ImGui::TableNextColumn(); + bool doubleClicked = RenderFile(i, !m_CurrentDir->Children[i]->IsFile, shownIndex, !m_IsInListView); + + if(doubleClicked) + break; + shownIndex++; + } + } + } + else { - if(m_CurrentDir->Children.size() > 0) + for(int i = 0; i < m_CurrentDir->Children.size(); i++) { if(!m_ShowHiddenFiles && Lumos::StringUtilities::IsHiddenFile(m_CurrentDir->Children[i]->FilePath.filename().string())) { @@ -367,6 +637,7 @@ namespace Lumos } } + ImGui::TableNextColumn(); bool doubleClicked = RenderFile(i, !m_CurrentDir->Children[i]->IsFile, shownIndex, !m_IsInListView); if(doubleClicked) @@ -374,35 +645,58 @@ namespace Lumos shownIndex++; } } - } - else - { - for(int i = 0; i < m_CurrentDir->Children.size(); i++) - { - if(!m_ShowHiddenFiles && Lumos::StringUtilities::IsHiddenFile(m_CurrentDir->Children[i]->FilePath.filename().string())) - { - continue; - } - if(m_Filter.IsActive()) + ImGuiUtilities::PopID(); + + if(ImGui::BeginPopupContextWindow("AssetPanelHierarchyContextWindow", ImGuiPopupFlags_MouseButtonRight | ImGuiPopupFlags_NoOpenOverItems)) + { + if(std::filesystem::exists(m_CopiedPath) && ImGui::Selectable("Paste")) { - if(!m_Filter.PassFilter(m_CurrentDir->Children[i]->FilePath.filename().string().c_str())) + if(m_CutFile) { - continue; + const std::filesystem::path& fullPath = m_CopiedPath; + std::string filename = fullPath.stem().string(); + std::string extension = fullPath.extension().string(); + std::filesystem::path destinationPath = m_BasePath / m_CurrentDir->FilePath / (filename + extension); + + { + while (std::filesystem::exists(destinationPath)) + { + filename += "_copy"; + destinationPath = destinationPath.parent_path() / (filename + extension); + } + } + std::filesystem::rename(fullPath, destinationPath); } + else + { + const std::filesystem::path& fullPath = m_CopiedPath; + std::string filename = fullPath.stem().string(); + std::string extension = fullPath.extension().string(); + std::filesystem::path destinationPath = m_BasePath / m_CurrentDir->FilePath / (filename + extension); + + { + while (std::filesystem::exists(destinationPath)) + { + filename += "_copy"; + destinationPath = destinationPath.parent_path() / (filename + extension); + } + } + std::filesystem::copy(fullPath, destinationPath); + } + m_CopiedPath = ""; + m_CutFile = false; + Refresh(); + } + + if(ImGui::Selectable("Open Location")) + { + auto fullPath = m_BasePath + "/" + m_CurrentDir->FilePath.string(); + Lumos::OS::Instance()->OpenFileLocation(fullPath); } - bool doubleClicked = RenderFile(i, !m_CurrentDir->Children[i]->IsFile, shownIndex, !m_IsInListView); + ImGui::Separator(); - if(doubleClicked) - break; - shownIndex++; - } - } - - if(ImGui::BeginPopupContextWindow()) - { - { if(ImGui::Selectable("Import New Asset")) { m_Editor->OpenFile(); @@ -415,19 +709,20 @@ namespace Lumos if(ImGui::Selectable("New folder")) { - std::filesystem::create_directory(std::filesystem::path(m_BasePath + "/" + m_CurrentDir->FilePath.string() + "/NewFolder")); + std::filesystem::create_directory(std::filesystem::path(m_CurrentDir->Parent ? m_CurrentDir->Parent->FilePath.string() + "/NewFolder" : m_BasePath + "/NewFolder")); Refresh(); } + + if(!m_IsInListView) + { + ImGui::SliderFloat("##GridSize", &m_GridSize, 40.0f, 400.0f); + } + ImGui::EndPopup(); } - ImGui::EndPopup(); + ImGui::EndTable(); } - ImGui::EndChild(); + ImGui::PopStyleVar(); } - - ImGui::EndChild(); - - ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - RenderBottom(); } if(ImGui::BeginDragDropTarget()) @@ -444,9 +739,8 @@ namespace Lumos } ImGui::EndDragDropTarget(); } - - ImGui::End(); } + ImGui::End(); } void ResourcePanel::RenderBreadCrumbs() @@ -498,30 +792,238 @@ namespace Lumos bool ResourcePanel::RenderFile(int dirIndex, bool folder, int shownIndex, bool gridView) { LUMOS_PROFILE_FUNCTION(); - auto fileID = GetParsedAssetID(StringUtilities::GetFilePathExtension(m_CurrentDir->Children[dirIndex]->FilePath.string())); + auto fileID = GetParsedAssetID(StringUtilities::GetFilePathExtension(m_CurrentDir->Children[dirIndex]->FilePath.string())); + constexpr float padding = 4.0f; + const float scaledThumbnailSize = m_GridSize * ImGui::GetIO().FontGlobalScale; + const float scaledThumbnailSizeX = scaledThumbnailSize * 0.55f; + const float cellSize = scaledThumbnailSizeX + 2 * padding + scaledThumbnailSizeX * 0.1f; + + constexpr float overlayPaddingY = 6.0f * padding; + constexpr float thumbnailPadding = overlayPaddingY * 0.5f; + const float thumbnailSize = scaledThumbnailSizeX - thumbnailPadding; + + const ImVec2 backgroundThumbnailSize = { scaledThumbnailSizeX + padding * 2, scaledThumbnailSize + padding * 2 }; + + const float panelWidth = ImGui::GetContentRegionAvail().x - ImGui::GetStyle().ScrollbarSize; + int columnCount = static_cast(panelWidth / cellSize); + if(columnCount < 1) + columnCount = 1; bool doubleClicked = false; if(gridView) { - ImGui::BeginGroup(); + auto& CurrentEnty = m_CurrentDir->Children[dirIndex]; + void* textureId = m_FolderIcon->GetHandle(); + + auto cursorPos = ImGui::GetCursorPos(); + + if(CurrentEnty->IsFile) + { + if(CurrentEnty->Type == FileType::Texture) + { + if(CurrentEnty->Thumbnail) + { + textureId = CurrentEnty->Thumbnail->GetHandle(); + } + else if(!textureCreated) + { + textureCreated = true; + CurrentEnty->Thumbnail = m_TextureLibrary.GetResource(m_BasePath + "/" + CurrentEnty->FilePath.string()); + textureId = CurrentEnty->Thumbnail ? CurrentEnty->Thumbnail->GetHandle() : m_FileIcon->GetHandle(); + } + else + { + textureId = m_FileIcon->GetHandle(); + } + } + else if(CurrentEnty->Type == FileType::Scene) + { + if(CurrentEnty->Thumbnail) + { + textureId = CurrentEnty->Thumbnail->GetHandle(); + } + else if(!textureCreated) + { + auto sceneScreenShotPath = m_BasePath + "/Scenes/Cache/" + CurrentEnty->FilePath.stem().string() + ".png"; + if(std::filesystem::exists(std::filesystem::path(sceneScreenShotPath))) + { + textureCreated = true; + CurrentEnty->Thumbnail = m_TextureLibrary.GetResource(sceneScreenShotPath); + textureId = CurrentEnty->Thumbnail ? CurrentEnty->Thumbnail->GetHandle() : m_FileIcon->GetHandle(); + } + else + textureId = m_FileIcon->GetHandle(); + } + else + { + textureId = m_FileIcon->GetHandle(); + } + } + else + { + textureId = m_FileIcon->GetHandle(); + } + } + bool flipImage = false; - if(ImGui::Button(folder ? ICON_MDI_FOLDER : m_Editor->GetIconFontIcon(m_CurrentDir->Children[dirIndex]->FilePath.string()), ImVec2(m_GridSize, m_GridSize))) + bool highlight = false; { + highlight = m_CurrentDir->Children[dirIndex] == m_CurrentSelected; } - if(ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + // Background button + bool const clicked = ImGuiUtilities::ToggleButton(ImGuiUtilities::GenerateID(), highlight, backgroundThumbnailSize, 0.0f, 1.0f, ImGuiButtonFlags_AllowOverlap); + if(clicked) { - doubleClicked = true; + m_CurrentSelected = m_CurrentDir->Children[dirIndex]; } - auto newFname = StripExtras(m_CurrentDir->Children[dirIndex]->FilePath.filename().string()); + if(ImGui::BeginPopupContextItem()) + { + m_CurrentSelected = m_CurrentDir->Children[dirIndex]; + + if(ImGui::Selectable("Cut")) + { + m_CopiedPath = (m_BasePath / m_CurrentDir->Children[dirIndex]->FilePath).string(); + m_CutFile = true; + } + + if(ImGui::Selectable("Copy")) + { + m_CopiedPath = (m_BasePath / m_CurrentDir->Children[dirIndex]->FilePath).string(); + m_CutFile = false; + } - ImGui::TextUnformatted(newFname.c_str()); - ImGui::EndGroup(); + if(ImGui::Selectable("Delete")) + { + auto fullPath = (m_BasePath / m_CurrentDir->Children[dirIndex]->FilePath).string(); + + std::filesystem::remove_all(fullPath); + Refresh(); + } + + if(ImGui::Selectable("Duplicate")) + { + std::filesystem::path fullPath = m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.string(); + std::filesystem::path destinationPath = fullPath; + + { + std::string filename = fullPath.stem().string(); + std::string extension = fullPath.extension().string(); + + while (std::filesystem::exists(destinationPath)) + { + filename += "_copy"; + destinationPath = destinationPath.parent_path() / (filename + extension); + } + } + std::filesystem::copy(fullPath, destinationPath); + Refresh(); + } + + if(ImGui::Selectable("Open Location")) + { + auto base = std::filesystem::path(m_BasePath); + base.make_preferred(); + auto fullPath = base / m_CurrentDir->Children[dirIndex]->FilePath; + + Lumos::OS::Instance()->OpenFileLocation(fullPath); + } + + if(m_CurrentDir->Children[dirIndex]->IsFile && ImGui::Selectable("Open External")) + { + auto base = std::filesystem::path(m_BasePath); + base.make_preferred(); + auto fullPath = base / m_CurrentDir->Children[dirIndex]->FilePath; + + Lumos::OS::Instance()->OpenFileExternal(fullPath); + } + + ImGui::Separator(); + + if(ImGui::Selectable("Import New Asset")) + { + m_Editor->OpenFile(); + } + + if(ImGui::Selectable("Refresh")) + { + Refresh(); + } + + if(ImGui::Selectable("New folder")) + { + std::filesystem::create_directory(std::filesystem::path(m_CurrentDir->FilePath.string() + "/NewFolder")); + Refresh(); + } + + if(!m_IsInListView) + { + ImGui::SliderFloat("##GridSize", &m_GridSize, 40.0f, 400.0f); + } + ImGui::EndPopup(); + } + + if(ImGui::IsItemHovered() && m_CurrentDir->Children[dirIndex]->Thumbnail) + { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); + ImGui::TextUnformatted((m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.filename().string()).c_str()); + ImGui::PopTextWrapPos(); + ImGui::Image(m_CurrentDir->Children[dirIndex]->Thumbnail->GetHandle(), { 512, 512 }, ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); + ImGui::EndTooltip(); + } + else + ImGuiUtilities::Tooltip((m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.filename().string()).c_str()); + + if(ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAllowNullID)) + { + ImGui::TextUnformatted(m_Editor->GetIconFontIcon(m_CurrentDir->Children[dirIndex]->FilePath.string())); - if((shownIndex + 1) % m_GridItemsPerRow != 0) ImGui::SameLine(); + m_MovePath = m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.string(); + ImGui::TextUnformatted(m_MovePath.c_str()); + size_t size = sizeof(const char*) + strlen(m_MovePath.c_str()); + ImGui::SetDragDropPayload("AssetFile", m_MovePath.c_str(), size); + m_IsDragging = true; + ImGui::EndDragDropSource(); + } + if(ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + { + doubleClicked = true; + } + + ImGui::SetCursorPos({ cursorPos.x + padding, cursorPos.y + padding }); + ImGui::SetNextItemAllowOverlap(); + ImGui::Image(reinterpret_cast(Graphics::Material::GetDefaultTexture()->GetHandle()), { backgroundThumbnailSize.x - padding * 2.0f, backgroundThumbnailSize.y - padding * 2.0f }, { 0, 0 }, { 1, 1 }, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg) + ImVec4(0.04f, 0.04f, 0.04f, 0.04f)); + + ImGui::SetCursorPos({ cursorPos.x + thumbnailPadding * 0.75f, cursorPos.y + thumbnailPadding }); + ImGui::SetNextItemAllowOverlap(); + ImGui::Image(reinterpret_cast(textureId), { thumbnailSize, thumbnailSize }, ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f)); + + const ImVec2 typeColorFrameSize = { scaledThumbnailSizeX, scaledThumbnailSizeX * 0.03f }; + ImGui::SetCursorPosX(cursorPos.x + padding); + ImGui::Image(reinterpret_cast(Graphics::Material::GetDefaultTexture()->GetHandle()), typeColorFrameSize, ImVec2(0.0f, flipImage ? 1.0f : 0.0f), ImVec2(1.0f, flipImage ? 0.0f : 1.0f), !CurrentEnty->IsFile ? ImVec4(0.0f, 0.0f, 0.0f, 0.0f) : CurrentEnty->FileTypeColour); + + const ImVec2 rectMin = ImGui::GetItemRectMin() + ImVec2(0.0f, 8.0f); + const ImVec2 rectSize = ImGui::GetItemRectSize() + ImVec2(0.0f, 4.0f); + const ImRect clipRect = ImRect({ rectMin.x + padding * 2.0f, rectMin.y + padding * 4.0f }, + { rectMin.x + rectSize.x, rectMin.y + scaledThumbnailSizeX - ImGui::GetIO().Fonts->Fonts[2]->FontSize - padding * 4.0f }); + + ImGuiUtilities::ClippedText(clipRect.Min, clipRect.Max, CurrentEnty->Name.c_str(), nullptr, nullptr, { 0, 0 }, nullptr, clipRect.GetSize().x); + + if(CurrentEnty->IsFile) + { + ImGui::SetCursorPos({ cursorPos.x + padding * (float)m_Editor->GetWindow()->GetDPIScale(), cursorPos.y + backgroundThumbnailSize.y - (ImGui::GetIO().Fonts->Fonts[2]->FontSize - padding * (float)m_Editor->GetWindow()->GetDPIScale()) * 3.2f }); + ImGui::BeginDisabled(); + ImGuiUtilities::ScopedFont smallFont(ImGui::GetIO().Fonts->Fonts[2]); + ImGui::TextUnformatted(CurrentEnty->FileTypeString.data()); + cursorPos = ImGui::GetCursorPos(); + ImGui::SetCursorPos({ cursorPos.x + padding * (float)m_Editor->GetWindow()->GetDPIScale(), cursorPos.y - (ImGui::GetIO().Fonts->Fonts[2]->FontSize * 0.6f - padding * (float)m_Editor->GetWindow()->GetDPIScale()) }); + ImGui::TextUnformatted(CurrentEnty->FileSize.c_str()); + ImGui::EndDisabled(); + } } else { @@ -529,14 +1031,27 @@ namespace Lumos ImGui::SameLine(); if(ImGui::Selectable(m_CurrentDir->Children[dirIndex]->FilePath.filename().string().c_str(), false, ImGuiSelectableFlags_AllowDoubleClick)) { - if(ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + if(ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { doubleClicked = true; } } - } - ImGuiUtilities::Tooltip(m_CurrentDir->Children[dirIndex]->FilePath.filename().string().c_str()); + ImGuiUtilities::Tooltip(m_CurrentDir->Children[dirIndex]->FilePath.filename().string().c_str()); + + if(ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAllowNullID)) + { + ImGui::TextUnformatted(m_Editor->GetIconFontIcon(m_CurrentDir->Children[dirIndex]->FilePath.string())); + + ImGui::SameLine(); + m_MovePath = m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.string(); + ImGui::TextUnformatted(m_MovePath.c_str()); + size_t size = sizeof(const char*) + strlen(m_MovePath.c_str()); + ImGui::SetDragDropPayload("AssetFile", m_MovePath.c_str(), size); + m_IsDragging = true; + ImGui::EndDragDropSource(); + } + } if(doubleClicked) { @@ -552,19 +1067,6 @@ namespace Lumos } } - if(ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAllowNullID)) - { - ImGui::TextUnformatted(m_Editor->GetIconFontIcon(m_CurrentDir->Children[dirIndex]->FilePath.string())); - - ImGui::SameLine(); - m_MovePath = m_BasePath + "/" + m_CurrentDir->Children[dirIndex]->FilePath.string(); - ImGui::TextUnformatted(m_MovePath.c_str()); - size_t size = sizeof(const char*) + strlen(m_MovePath.c_str()); - ImGui::SetDragDropPayload("AssetFile", m_MovePath.c_str(), size); - m_IsDragging = true; - ImGui::EndDragDropSource(); - } - return doubleClicked; } @@ -686,6 +1188,8 @@ namespace Lumos void ResourcePanel::Refresh() { + m_TextureLibrary.Destroy(); + m_BasePath = Application::Get().GetProjectSettings().m_ProjectRoot + "Assets"; auto currentPath = m_CurrentDir->FilePath; diff --git a/Editor/Source/ResourcePanel.h b/Editor/Source/ResourcePanel.h index 59c225f8b..fca709b85 100644 --- a/Editor/Source/ResourcePanel.h +++ b/Editor/Source/ResourcePanel.h @@ -1,6 +1,7 @@ #pragma once #include "EditorPanel.h" +#include #if __has_include() #include @@ -10,6 +11,22 @@ namespace Lumos { + enum class FileType + { + Unknown = 0, + Scene, + Prefab, + Script, + Audio, + Shader, + Texture, + Cubemap, + Model, + Material, + Project, + Ini, + Font + }; struct DirectoryInformation { @@ -19,19 +36,36 @@ namespace Lumos std::filesystem::path FilePath; bool IsFile; + std::string Name; + std::string Extension; + std::filesystem::directory_entry DirectoryEntry; + SharedPtr Thumbnail = nullptr; + + ImVec4 FileTypeColour; + FileType Type; + std::string_view FileTypeString; + std::string FileSize; + public: DirectoryInformation(const std::filesystem::path& fname, bool isF) { FilePath = fname; IsFile = isF; } + + ~DirectoryInformation() + { + } }; class ResourcePanel : public EditorPanel { public: ResourcePanel(); - ~ResourcePanel() = default; + ~ResourcePanel() + { + m_TextureLibrary.Destroy(); + } void OnImGui() override; @@ -41,6 +75,28 @@ namespace Lumos void RenderBottom(); // void GetDirectories(const std::string& path); + void DestroyGraphicsResources() override + { + for(auto& dir : m_Directories) + { + if(dir.second) + { + dir.second->Parent.reset(); + dir.second->Children.clear(); + } + } + m_FolderIcon.reset(); + m_FileIcon.reset(); + m_Directories.clear(); + m_CurrentSelected.reset(); + m_CurrentDir.reset(); + m_BaseProjectDir.reset(); + m_NextDirectory.reset(); + m_PreviousDirectory.reset(); + m_BreadCrumbData.clear(); + m_TextureLibrary.Destroy(); + } + int GetParsedAssetID(const std::string& extension) { for(int i = 0; i < assetTypes.size(); i++) @@ -82,7 +138,7 @@ namespace Lumos bool m_UpdateBreadCrumbs; bool m_ShowHiddenFiles; int m_GridItemsPerRow; - float m_GridSize = 50.0f; + float m_GridSize = 360.0f; ImGuiTextFilter m_Filter; @@ -90,6 +146,8 @@ namespace Lumos char* inputHint; char inputBuffer[1024]; + bool textureCreated = false; + std::string m_BasePath; std::filesystem::path m_AssetPath; @@ -101,5 +159,14 @@ namespace Lumos SharedPtr m_PreviousDirectory; std::unordered_map> m_Directories; std::vector> m_BreadCrumbData; + SharedPtr m_FolderIcon; + SharedPtr m_FileIcon; + + SharedPtr m_CurrentSelected; + + Lumos::TextureLibrary m_TextureLibrary; + + std::filesystem::path m_CopiedPath; + bool m_CutFile = false; }; } diff --git a/Editor/Source/SceneSettingsPanel.cpp b/Editor/Source/SceneSettingsPanel.cpp index b40f02094..2a5632d56 100644 --- a/Editor/Source/SceneSettingsPanel.cpp +++ b/Editor/Source/SceneSettingsPanel.cpp @@ -3,6 +3,7 @@ #include #include +#include namespace Lumos { @@ -28,6 +29,9 @@ namespace Lumos int sceneVersion = m_CurrentScene->GetSceneVersion(); auto& sceneSettings = m_CurrentScene->GetSettings(); + if(m_NameUpdated) + sceneName = m_SceneName; + ImVec2 contentRegionAvailable = ImGui::GetContentRegionAvail(); ImGui::PushItemWidth(contentRegionAvailable.x * 0.5f); @@ -35,7 +39,25 @@ namespace Lumos ImGuiUtilities::ScopedFont boldFont(ImGui::GetIO().Fonts->Fonts[1]); if(ImGuiUtilities::InputText(sceneName)) { - m_CurrentScene->SetName(sceneName); + m_NameUpdated = true; + } + + if(!ImGui::IsItemActive() && m_NameUpdated) + { + m_NameUpdated = false; + std::string scenePath; + if(VFS::Get().ResolvePhysicalPath("//Scenes/" + m_CurrentScene->GetSceneName() + ".lsn", scenePath)) + { + m_CurrentScene->SetName(sceneName); + // m_CurrentScene->Serialise(m_Editor->GetProjectSettings().m_ProjectRoot + "Assets/Scenes/"); + + std::filesystem::rename(scenePath, m_Editor->GetProjectSettings().m_ProjectRoot + "Assets/Scenes/" + m_CurrentScene->GetSceneName() + ".lsn"); + } + else + m_CurrentScene->SetName(sceneName); + + // Save project with updated scene name + m_Editor->Serialise(); } } @@ -50,12 +72,15 @@ namespace Lumos ImGuiUtilities::Property("Renderer 3D Enabled", sceneSettings.RenderSettings.Renderer3DEnabled); ImGuiUtilities::Property("Shadow Enabled", sceneSettings.RenderSettings.ShadowsEnabled); ImGuiUtilities::Property("Skybox Render Enabled", sceneSettings.RenderSettings.SkyboxRenderEnabled); + ImGuiUtilities::Property("Skybox Mip Level", sceneSettings.RenderSettings.SkyboxMipLevel, 0.0f, 14.0f, 0.01f); + ImGuiUtilities::Property("Debug Renderer Enabled", sceneSettings.RenderSettings.DebugRenderEnabled); ImGuiUtilities::Property("FXAA Enabled", sceneSettings.RenderSettings.FXAAEnabled); ImGuiUtilities::Property("Debanding Enabled", sceneSettings.RenderSettings.DebandingEnabled); ImGuiUtilities::Property("ChromaticAberation Enabled", sceneSettings.RenderSettings.ChromaticAberationEnabled); ImGuiUtilities::Property("Filmic Grain Enabled", sceneSettings.RenderSettings.FilmicGrainEnabled); - ImGuiUtilities::Property("SSAO Enabled", sceneSettings.RenderSettings.SSAOEnabled); + ImGuiUtilities::Property("Sharpen Enabled", sceneSettings.RenderSettings.SharpenEnabled); + ImGuiUtilities::Property("Bloom Enabled", sceneSettings.RenderSettings.BloomEnabled); ImGuiUtilities::Property("Bloom Intensity", sceneSettings.RenderSettings.m_BloomIntensity); ImGuiUtilities::Property("Bloom Upsample Scale", sceneSettings.RenderSettings.BloomUpsampleScale); @@ -65,6 +90,14 @@ namespace Lumos ImGuiUtilities::Property("Depth Of Field Strength", sceneSettings.RenderSettings.DepthOfFieldStrength); ImGuiUtilities::Property("Depth Of Field Distance", sceneSettings.RenderSettings.DepthOfFieldDistance); + // ImGui::BeginDisabled(); + ImGuiUtilities::Property("SSAO Enabled", sceneSettings.RenderSettings.SSAOEnabled); + ImGuiUtilities::Property("SSAO Sample Radius", sceneSettings.RenderSettings.SSAOSampleRadius, 0.0f, 16.0f, 0.01f); + ImGuiUtilities::Property("SSAO Blur Radius", sceneSettings.RenderSettings.SSAOBlurRadius, 0, 16); + ImGuiUtilities::Property("SSAO Blur Enabled", sceneSettings.RenderSettings.SSAOBlur); + ImGuiUtilities::Property("SSAO Strength", sceneSettings.RenderSettings.SSAOStrength, 0.0f, 16.0f, 0.01f); + // ImGui::EndDisabled(); + static const char* toneMaps[7] = { "None", "Linear", @@ -76,10 +109,24 @@ namespace Lumos }; ImGuiUtilities::PropertyDropdown("ToneMap", toneMaps, 7, (int*)&m_CurrentScene->GetSettings().RenderSettings.m_ToneMapIndex); + ImGuiUtilities::Property("Brightness", sceneSettings.RenderSettings.Brightness, -1.0f, 1.0f, 0.01f); + ImGuiUtilities::Property("Contrast", sceneSettings.RenderSettings.Contrast, 0.0f, 2.0f, 0.01f); + ImGuiUtilities::Property("Saturation", sceneSettings.RenderSettings.Saturation, 0.0f, 1.0f, 0.01f); auto& registry = m_CurrentScene->GetRegistry(); int entityCount = (int)registry.size(); ImGuiUtilities::Property("Entity Count", entityCount, 0, 0, ImGuiUtilities::PropertyFlag::ReadOnly); + + static const char* debugModes[7] = { + "None", + "SSAO", + "SSAO1", + "Normals", + "Bloom", + "Noise", + "Post Process" + }; + ImGuiUtilities::PropertyDropdown("Debug View Mode", debugModes, 7, (int*)&sceneSettings.RenderSettings.DebugMode); } ImGui::Columns(1); diff --git a/Editor/Source/SceneSettingsPanel.h b/Editor/Source/SceneSettingsPanel.h index 4109ca1dc..a8a82386c 100644 --- a/Editor/Source/SceneSettingsPanel.h +++ b/Editor/Source/SceneSettingsPanel.h @@ -15,5 +15,7 @@ namespace Lumos private: Scene* m_CurrentScene = nullptr; + bool m_NameUpdated = false; + std::string m_SceneName; }; } diff --git a/Editor/Source/SceneViewPanel.cpp b/Editor/Source/SceneViewPanel.cpp index 69dce1846..c971ae4c1 100644 --- a/Editor/Source/SceneViewPanel.cpp +++ b/Editor/Source/SceneViewPanel.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include @@ -40,7 +40,7 @@ namespace Lumos m_Width = 1280; m_Height = 800; - Application::Get().GetSceneRenderer()->SetDisablePostProcess(false); + Application::Get().GetRenderPasses()->SetDisablePostProcess(false); } void SceneViewPanel::OnImGui() @@ -54,7 +54,7 @@ namespace Lumos if(!ImGui::Begin(m_Name.c_str(), &m_Active, flags) || !m_CurrentScene) { - app.SetDisableMainSceneRenderer(true); + app.SetDisableMainRenderPasses(true); ImGui::End(); return; } @@ -62,7 +62,7 @@ namespace Lumos Camera* camera = nullptr; Maths::Transform* transform = nullptr; - app.SetDisableMainSceneRenderer(false); + app.SetDisableMainRenderPasses(false); // if(app.GetEditorState() == EditorState::Preview) { @@ -70,7 +70,7 @@ namespace Lumos camera = m_Editor->GetCamera(); transform = &m_Editor->GetEditorCameraTransform(); - app.GetSceneRenderer()->SetOverrideCamera(camera, transform); + app.GetRenderPasses()->SetOverrideCamera(camera, transform); } ImVec2 offset = { 0.0f, 0.0f }; @@ -125,22 +125,20 @@ namespace Lumos ImGuizmo::SetRect(sceneViewPosition.x, sceneViewPosition.y, sceneViewSize.x, sceneViewSize.y); m_Editor->SetSceneViewActive(updateCamera); + { + LUMOS_PROFILE_SCOPE("Push Clip Rect"); + ImGui::GetWindowDrawList()->PushClipRect(sceneViewPosition, { sceneViewSize.x + sceneViewPosition.x, sceneViewSize.y + sceneViewPosition.y - 2.0f }); + } if(m_Editor->ShowGrid()) { if(camera->IsOrthographic()) { LUMOS_PROFILE_SCOPE("2D Grid"); - - m_Editor->Draw2DGrid(ImGui::GetWindowDrawList(), { transform->GetWorldPosition().x, transform->GetWorldPosition().y }, sceneViewPosition, { sceneViewSize.x, sceneViewSize.y }, 1.0f, 1.5f); + m_Editor->Draw2DGrid(ImGui::GetWindowDrawList(), { transform->GetWorldPosition().x, transform->GetWorldPosition().y }, sceneViewPosition, { sceneViewSize.x, sceneViewSize.y }, camera->GetScale(), 1.5f); } } - { - LUMOS_PROFILE_SCOPE("Push Clip Rect"); - ImGui::GetWindowDrawList()->PushClipRect(sceneViewPosition, { sceneViewSize.x + sceneViewPosition.x, sceneViewSize.y + sceneViewPosition.y - 2.0f }); - } - m_Editor->OnImGuizmo(); if(updateCamera && app.GetSceneActive() && !ImGuizmo::IsUsing() && Input::Get().GetMouseClicked(InputCode::MouseKey::ButtonLeft)) @@ -525,7 +523,8 @@ namespace Lumos if(ortho) { camera.SetIsOrthographic(false); - m_Editor->GetEditorCameraController().SetCurrentMode(EditorCameraMode::ARCBALL); + camera.SetNear(0.01f); + m_Editor->GetEditorCameraController().SetCurrentMode(EditorCameraMode::FLYCAM); } } if(selected) @@ -540,7 +539,13 @@ namespace Lumos if(!ortho) { camera.SetIsOrthographic(true); + auto camPos = m_Editor->GetEditorCameraTransform().GetLocalPosition(); + camPos.z = 0.0f; + camera.SetNear(-10.0f); + m_Editor->GetEditorCameraTransform().SetLocalPosition(camPos); m_Editor->GetEditorCameraTransform().SetLocalOrientation(glm::quat(glm::vec3(0.0f, 0.0f, 0.0f))); + m_Editor->GetEditorCameraTransform().SetLocalScale(glm::vec3(1.0f, 1.0f, 1.0f)); + m_Editor->GetEditorCameraController().SetCurrentMode(EditorCameraMode::TWODIM); } } @@ -557,11 +562,11 @@ namespace Lumos m_Editor->GetSettings().m_AspectRatio = 1.0f; m_CurrentScene = scene; - auto SceneRenderer = Application::Get().GetSceneRenderer(); - SceneRenderer->SetRenderTarget(m_GameViewTexture.get(), true); - SceneRenderer->SetOverrideCamera(m_Editor->GetCamera(), &m_Editor->GetEditorCameraTransform()); + auto RenderPasses = Application::Get().GetRenderPasses(); + RenderPasses->SetRenderTarget(m_GameViewTexture.get(), true); + RenderPasses->SetOverrideCamera(m_Editor->GetCamera(), &m_Editor->GetEditorCameraTransform()); m_Editor->GetGridRenderer()->SetRenderTarget(m_GameViewTexture.get(), true); - m_Editor->GetGridRenderer()->SetDepthTarget(SceneRenderer->GetForwardData().m_DepthTexture); + m_Editor->GetGridRenderer()->SetDepthTarget(RenderPasses->GetForwardData().m_DepthTexture); } void SceneViewPanel::Resize(uint32_t width, uint32_t height) @@ -593,19 +598,19 @@ namespace Lumos { m_GameViewTexture->Resize(m_Width, m_Height); - auto SceneRenderer = Application::Get().GetSceneRenderer(); - SceneRenderer->SetRenderTarget(m_GameViewTexture.get(), true, false); + auto RenderPasses = Application::Get().GetRenderPasses(); + RenderPasses->SetRenderTarget(m_GameViewTexture.get(), true, false); if(!m_Editor->GetGridRenderer()) m_Editor->CreateGridRenderer(); m_Editor->GetGridRenderer()->SetRenderTarget(m_GameViewTexture.get(), false); - m_Editor->GetGridRenderer()->SetDepthTarget(SceneRenderer->GetForwardData().m_DepthTexture); + m_Editor->GetGridRenderer()->SetDepthTarget(RenderPasses->GetForwardData().m_DepthTexture); WindowResizeEvent e(width, height); auto& app = Application::Get(); - app.GetSceneRenderer()->OnResize(width, height); + app.GetRenderPasses()->OnResize(width, height); - SceneRenderer->OnEvent(e); + RenderPasses->OnEvent(e); m_Editor->GetGridRenderer()->OnResize(m_Width, m_Height); diff --git a/Editor/premake5.lua b/Editor/premake5.lua index 46236181f..ff33b48b5 100755 --- a/Editor/premake5.lua +++ b/Editor/premake5.lua @@ -17,12 +17,13 @@ IncludeDir["spdlog"] = "../Lumos/External/spdlog/include" IncludeDir["glm"] = "../Lumos/External/glm" IncludeDir["msdf_atlas_gen"] = "../Lumos/External/msdf-atlas-gen/msdf-atlas-gen" IncludeDir["msdfgen"] = "../Lumos/External/msdf-atlas-gen/msdfgen" +IncludeDir["ozz"] = "../Lumos/External/ozz-animation/include" project "LumosEditor" kind "WindowedApp" language "C++" editandcontinue "Off" - + files { "**.h", @@ -55,6 +56,7 @@ project "LumosEditor" "%{IncludeDir.msdfgen}", "%{IncludeDir.msdf_atlas_gen}", "%{IncludeDir.glm}", + "%{IncludeDir.ozz}", "%{IncludeDir.Lumos}", } @@ -69,7 +71,10 @@ project "LumosEditor" "spdlog", "meshoptimizer", -- "msdfgen", - "msdf-atlas-gen" + "msdf-atlas-gen", + "ozz_animation", + "ozz_animation_offline", + "ozz_base" } defines @@ -88,10 +93,10 @@ project "LumosEditor" filter "system:windows" cppdialect "C++17" - staticruntime "On" + staticruntime "Off" systemversion "latest" entrypoint "WinMainCRTStartup" - conformancemode "off" + conformancemode "on" defines { @@ -124,10 +129,10 @@ project "LumosEditor" filter "system:macosx" cppdialect "C++17" - staticruntime "On" + staticruntime "Off" systemversion "11.0" editandcontinue "Off" - + xcodebuildresources { "Assets.xcassets", "libMoltenVK.dylib" } xcodebuildsettings @@ -139,14 +144,14 @@ project "LumosEditor" --['ENABLE_HARDENED_RUNTIME'] = 'YES' } -if settings.enable_signing then -xcodebuildsettings -{ - ['CODE_SIGN_IDENTITY'] = 'Mac Developer', - ['DEVELOPMENT_TEAM'] = settings.developer_team, - ['PRODUCT_BUNDLE_IDENTIFIER'] = settings.bundle_identifier -} -end + if settings.enable_signing then + xcodebuildsettings + { + ['CODE_SIGN_IDENTITY'] = 'Mac Developer', + ['DEVELOPMENT_TEAM'] = settings.developer_team, + ['PRODUCT_BUNDLE_IDENTIFIER'] = settings.bundle_identifier + } + end defines { @@ -184,12 +189,12 @@ end filter "system:ios" cppdialect "C++17" - staticruntime "On" + staticruntime "Off" systemversion "latest" kind "WindowedApp" targetextension ".app" editandcontinue "Off" - + defines { "LUMOS_PLATFORM_IOS", @@ -246,16 +251,16 @@ end ['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0', ['INFOPLIST_FILE'] = '../Lumos/Source/Lumos/Platform/iOS/Client/Info.plist', ['ASSETCATALOG_COMPILER_APPICON_NAME'] = 'AppIcon', -} + } -if settings.enable_signing then -xcodebuildsettings -{ - ['PRODUCT_BUNDLE_IDENTIFIER'] = settings.bundle_identifier, - ['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Developer', - ['DEVELOPMENT_TEAM'] = settings.developer_team -} -end + if settings.enable_signing then + xcodebuildsettings + { + ['PRODUCT_BUNDLE_IDENTIFIER'] = settings.bundle_identifier, + ['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Developer', + ['DEVELOPMENT_TEAM'] = settings.developer_team + } + end if _OPTIONS["teamid"] then xcodebuildsettings { @@ -295,7 +300,7 @@ end filter "system:linux" cppdialect "C++17" - staticruntime "On" + staticruntime "Off" systemversion "latest" defines @@ -332,6 +337,74 @@ end { "-msse4.1", } + + + filter "system:android" + androidsdkversion "29" + androidminsdkversion "29" + cppdialect "C++17" + staticruntime "Off" + systemversion "latest" + kind "WindowedApp" + targetextension ".apk" + editandcontinue "Off" + + defines + { + "LUMOS_PLATFORM_ANDROID", + "LUMOS_PLATFORM_MOBILE", + "LUMOS_PLATFORM_UNIX", + "LUMOS_RENDER_API_VULKAN", + "LUMOS_IMGUI" + } + + --Adding assets from Game Project folder. Needs rework + files + { + "../Lumos/Assets/Shaders", + "../Lumos/Source/Lumos/Platform/Android/**", + "../ExampleProject/Assets/Scenes", + "../ExampleProject/Assets/Scripts", + "../ExampleProject/Assets/Meshes", + "../ExampleProject/Assets/Sounds", + "../ExampleProject/Assets/Textures", + "../ExampleProject/Example.lmproj" + } + + links + { + "log" -- required for c++ logging + } + + buildoptions + { + "-std=c++17" -- flag mainly here to test cmake compile options + } + + linkoptions + { + "--no-undefined" -- this flag is used just to cmake link libraries + } + + includedirs + { + "h" + } + + androidabis + { + "arm64-v8a" + } + + androiddependencies + { + "com.android.support:support-v4:27.1.0", + } + + assetpackdependencies + { + "pack" + } filter "configurations:Debug" defines { "LUMOS_DEBUG", "_DEBUG","TRACY_ENABLE","LUMOS_PROFILE","TRACY_ON_DEMAND" } @@ -340,13 +413,13 @@ end optimize "Off" filter "configurations:Release" - defines { "LUMOS_RELEASE","TRACY_ENABLE","LUMOS_PROFILE","TRACY_ON_DEMAND"} + defines { "LUMOS_RELEASE", "NDEBUG", "TRACY_ENABLE","LUMOS_PROFILE","TRACY_ON_DEMAND"} optimize "Speed" symbols "On" runtime "Release" filter "configurations:Production" - defines "LUMOS_PRODUCTION" + defines { "LUMOS_PRODUCTION", "NDEBUG" } symbols "Off" optimize "Full" runtime "Release" diff --git a/ExampleProject/Assets/Scenes/2D.lsn b/ExampleProject/Assets/Scenes/2D.lsn index c55da0cc2..2fbf94048 100644 --- a/ExampleProject/Assets/Scenes/2D.lsn +++ b/ExampleProject/Assets/Scenes/2D.lsn @@ -1,6 +1,6 @@ { "value0": { - "Version": 16, + "Version": 21, "Scene Name": "2D", "PhysicsEnabled2D": true, "PhysicsEnabled3D": true, @@ -20,149 +20,118 @@ "DebandingEnabled": true, "ChromaticAberationEnabled": false, "EyeAdaptation": true, - "SSAOEnabled": true, + "SSAOEnabled": false, "BloomEnabled": false, "FilmicGrainEnabled": false, "DepthOfFieldEnabled": false, "MotionBlurEnabled": false, "DepthOFFieldEnabled": false, "DepthOfFieldStrength": 1.0, - "DepthOfFieldDistance": 100.0 + "DepthOfFieldDistance": 100.0, + "value0": 0.0, + "value1": 1.0, + "value2": 1.0, + "value3": false }, - "value1": 3, - "value2": 0, - "value3": 1, - "value4": 2, - "value5": 2, - "value6": 1, - "value7": { - "Position": { - "value0": 1.083970069885254, - "value1": 0.0, - "value2": 0.0 - }, - "Rotation": { - "value0": 0.0, - "value1": 0.0, - "value2": 0.0, - "value3": 1.0 - }, - "Scale": { - "value0": 1.0, - "value1": 1.0, - "value2": 1.0 - } - }, - "value8": 2, - "value9": { - "Position": { - "value0": 0.0, - "value1": 0.0, - "value2": 0.0 - }, - "Rotation": { - "value0": 0.0, - "value1": 0.0, - "value2": 0.0, - "value3": 1.0 - }, - "Scale": { - "value0": 1.0, - "value1": 1.0, - "value2": 1.0 - } - }, - "value10": 3, - "value11": 0, - "value12": { + "value1": 67, + "value2": 1, + "value3": 0, + "value4": 1048578, + "value5": 1048577, + "value6": 1048579, + "value7": 1048580, + "value8": 1048581, + "value9": 1048641, + "value10": 1048640, + "value11": 3145735, + "value12": 3145734, + "value13": 2097160, + "value14": 2097161, + "value15": 2097162, + "value16": 2097163, + "value17": 2097164, + "value18": 2097165, + "value19": 1048592, + "value20": 1048593, + "value21": 1048594, + "value22": 1048595, + "value23": 1048596, + "value24": 1048597, + "value25": 1048598, + "value26": 1048599, + "value27": 1048600, + "value28": 1048601, + "value29": 1048602, + "value30": 1048603, + "value31": 1048604, + "value32": 1048605, + "value33": 1048606, + "value34": 1048607, + "value35": 1048608, + "value36": 1048609, + "value37": 1048610, + "value38": 1048611, + "value39": 1048612, + "value40": 1048613, + "value41": 1048614, + "value42": 1048615, + "value43": 1048616, + "value44": 1048617, + "value45": 1048618, + "value46": 1048619, + "value47": 1048620, + "value48": 1048621, + "value49": 1048622, + "value50": 1048623, + "value51": 1048624, + "value52": 1048625, + "value53": 1048626, + "value54": 1048627, + "value55": 1048628, + "value56": 1048629, + "value57": 1048630, + "value58": 1048631, + "value59": 1048632, + "value60": 1048633, + "value61": 1048634, + "value62": 1048635, + "value63": 1048636, + "value64": 1048637, + "value65": 1048638, + "value66": 1048639, + "value67": 2097166, + "value68": 2097167, + "value69": 1048642, + "value70": 0, + "value71": 1, + "value72": 0, + "value73": { "Name": "GameController" }, - "value13": 1, - "value14": { - "Name": "Sphere" - }, - "value15": 2, - "value16": { - "Name": "Sphere" - }, - "value17": 0, - "value18": 0, - "value19": 0, - "value20": 1, - "value21": 0, - "value22": { + "value74": 0, + "value75": 0, + "value76": 0, + "value77": 1, + "value78": 0, + "value79": { "FilePath": "//Scripts/FlappyBirdTest.lua" }, - "value23": 0, - "value24": 0, - "value25": 0, - "value26": 0, - "value27": 0, - "value28": 0, - "value29": 0, - "value30": 0, - "value31": 0, - "value32": 0, - "value33": 3, - "value34": 0, - "value35": { + "value80": 0, + "value81": 0, + "value82": 0, + "value83": 0, + "value84": 0, + "value85": 0, + "value86": 0, + "value87": 0, + "value88": 0, + "value89": 0, + "value90": 1, + "value91": 0, + "value92": { "value0": 5632316061460210371 }, - "value36": 1, - "value37": { - "value0": 9344671355247170131 - }, - "value38": 2, - "value39": { - "value0": 9920384102617051771 - }, - "value40": 2, - "value41": 1, - "value42": { - "PrimitiveType": 4, - "FilePath": "Primitive", - "Material": { - "ptr_wrapper": { - "valid": 1, - "data": { - "Albedo": "", - "Normal": "", - "Metallic": "", - "Roughness": "", - "Ao": "", - "Emissive": "", - "albedoColour": { - "value0": 0.009625283069908619, - "value1": 0.0, - "value2": 0.3128204941749573, - "value3": 1.0 - }, - "roughnessValue": 0.0, - "metallicValue": 0.699999988079071, - "emissiveValue": 0.0, - "albedoMapFactor": 0.0, - "metallicMapFactor": 0.0, - "roughnessMapFactor": 0.0, - "normalMapFactor": 0.0, - "aoMapFactor": 0.0, - "emissiveMapFactor": 0.0, - "alphaCutOff": 0.4000000059604645, - "workflow": 0.0, - "shader": "Embedded" - } - } - } - }, - "value43": 2, - "value44": { - "PrimitiveType": 4, - "FilePath": "Primitive", - "Material": { - "ptr_wrapper": { - "valid": 0 - } - } - }, - "value45": 0, - "value46": 0 + "value93": 0, + "value94": 0, + "value95": 0 } \ No newline at end of file diff --git a/ExampleProject/Assets/Scenes/Physics.lsn b/ExampleProject/Assets/Scenes/Physics.lsn index 5a69d3ab5..5eed1b027 100755 --- a/ExampleProject/Assets/Scenes/Physics.lsn +++ b/ExampleProject/Assets/Scenes/Physics.lsn @@ -1,6 +1,6 @@ { "value0": { - "Version": 16, + "Version": 20, "Scene Name": "Physics", "PhysicsEnabled2D": true, "PhysicsEnabled3D": true, @@ -21,15 +21,19 @@ "ChromaticAberationEnabled": false, "EyeAdaptation": true, "SSAOEnabled": true, - "BloomEnabled": false, + "BloomEnabled": true, "FilmicGrainEnabled": false, "DepthOfFieldEnabled": false, "MotionBlurEnabled": false, "DepthOFFieldEnabled": false, "DepthOfFieldStrength": 1.0, - "DepthOfFieldDistance": 100.0 + "DepthOfFieldDistance": 100.0, + "value0": 0.0, + "value1": 1.0, + "value2": 1.0, + "value3": false }, - "value1": 55, + "value1": 58, "value2": 1048576, "value3": 1, "value4": 2097154, @@ -85,9 +89,12 @@ "value54": 52, "value55": 53, "value56": 54, - "value57": 52, - "value58": 26, - "value59": { + "value57": 55, + "value58": 56, + "value59": 57, + "value60": 52, + "value61": 26, + "value62": { "Position": { "value0": 0.002742767333984375, "value1": 2.338712692260742, @@ -105,8 +112,8 @@ "value2": 0.9999943971633911 } }, - "value60": 1, - "value61": { + "value63": 1, + "value64": { "Position": { "value0": 0.0, "value1": -1.5239448547363282, @@ -124,8 +131,8 @@ "value2": 200.0 } }, - "value62": 28, - "value63": { + "value65": 28, + "value66": { "Position": { "value0": 34.3039436340332, "value1": 15.190068244934082, @@ -143,8 +150,8 @@ "value2": 0.9999999403953552 } }, - "value64": 30, - "value65": { + "value67": 30, + "value68": { "Position": { "value0": 0.0, "value1": 0.0, @@ -162,8 +169,8 @@ "value2": 0.9999999403953552 } }, - "value66": 4, - "value67": { + "value69": 4, + "value70": { "Position": { "value0": 0.0, "value1": 17.0, @@ -181,8 +188,8 @@ "value2": 1.0 } }, - "value68": 5, - "value69": { + "value71": 5, + "value72": { "Position": { "value0": 1.017281413078308, "value1": 17.0, @@ -200,8 +207,8 @@ "value2": 0.9999999403953552 } }, - "value70": 6, - "value71": { + "value73": 6, + "value74": { "Position": { "value0": 2.0, "value1": 17.0, @@ -219,8 +226,8 @@ "value2": 1.0 } }, - "value72": 7, - "value73": { + "value75": 7, + "value76": { "Position": { "value0": 3.0, "value1": 17.0, @@ -238,8 +245,8 @@ "value2": 1.0 } }, - "value74": 8, - "value75": { + "value77": 8, + "value78": { "Position": { "value0": 4.0, "value1": 17.0, @@ -257,8 +264,8 @@ "value2": 1.0 } }, - "value76": 9, - "value77": { + "value79": 9, + "value80": { "Position": { "value0": 5.0, "value1": 17.0, @@ -276,8 +283,8 @@ "value2": 1.0 } }, - "value78": 10, - "value79": { + "value81": 10, + "value82": { "Position": { "value0": 6.0, "value1": 17.0, @@ -295,8 +302,8 @@ "value2": 1.0 } }, - "value80": 11, - "value81": { + "value83": 11, + "value84": { "Position": { "value0": 7.0, "value1": 17.0, @@ -314,8 +321,8 @@ "value2": 1.0 } }, - "value82": 12, - "value83": { + "value85": 12, + "value86": { "Position": { "value0": 8.0, "value1": 17.0, @@ -333,8 +340,8 @@ "value2": 1.0 } }, - "value84": 13, - "value85": { + "value87": 13, + "value88": { "Position": { "value0": 9.0, "value1": 17.0, @@ -352,8 +359,8 @@ "value2": 1.0 } }, - "value86": 14, - "value87": { + "value89": 14, + "value90": { "Position": { "value0": 0.0, "value1": 18.0, @@ -371,8 +378,8 @@ "value2": 1.0 } }, - "value88": 15, - "value89": { + "value91": 15, + "value92": { "Position": { "value0": 1.0, "value1": 18.0, @@ -390,8 +397,8 @@ "value2": 1.0 } }, - "value90": 16, - "value91": { + "value93": 16, + "value94": { "Position": { "value0": 2.0, "value1": 18.0, @@ -409,8 +416,8 @@ "value2": 1.0 } }, - "value92": 17, - "value93": { + "value95": 17, + "value96": { "Position": { "value0": 3.0, "value1": 18.0, @@ -428,8 +435,8 @@ "value2": 1.0 } }, - "value94": 18, - "value95": { + "value97": 18, + "value98": { "Position": { "value0": 4.0, "value1": 18.0, @@ -447,8 +454,8 @@ "value2": 1.0 } }, - "value96": 19, - "value97": { + "value99": 19, + "value100": { "Position": { "value0": 5.0, "value1": 18.0, @@ -466,8 +473,8 @@ "value2": 1.0 } }, - "value98": 20, - "value99": { + "value101": 20, + "value102": { "Position": { "value0": 6.0, "value1": 18.0, @@ -485,8 +492,8 @@ "value2": 1.0 } }, - "value100": 21, - "value101": { + "value103": 21, + "value104": { "Position": { "value0": 7.0, "value1": 18.0, @@ -504,8 +511,8 @@ "value2": 1.0 } }, - "value102": 22, - "value103": { + "value105": 22, + "value106": { "Position": { "value0": 8.0, "value1": 18.0, @@ -523,8 +530,8 @@ "value2": 1.0 } }, - "value104": 23, - "value105": { + "value107": 23, + "value108": { "Position": { "value0": 5.0, "value1": 1.6939997673034669, @@ -542,8 +549,8 @@ "value2": 1.0 } }, - "value106": 25, - "value107": { + "value109": 25, + "value110": { "Position": { "value0": 26.0, "value1": 22.0, @@ -561,8 +568,8 @@ "value2": 1.0000001192092896 } }, - "value108": 3145757, - "value109": { + "value111": 3145757, + "value112": { "Position": { "value0": -100.96780395507813, "value1": 4.210052490234375, @@ -575,13 +582,13 @@ "value3": 1.0 }, "Scale": { - "value0": 6.0, + "value0": 6.000002384185791, "value1": 14.199999809265137, - "value2": 200.0 + "value2": 200.000244140625 } }, - "value110": 2097179, - "value111": { + "value113": 2097179, + "value114": { "Position": { "value0": 89.11954498291016, "value1": 8.354837417602539, @@ -599,8 +606,8 @@ "value2": 200.0 } }, - "value112": 2097154, - "value113": { + "value115": 2097154, + "value116": { "Position": { "value0": 0.01968160644173622, "value1": 4.281795501708984, @@ -608,18 +615,18 @@ }, "Rotation": { "value0": 0.0, - "value1": 0.7094270586967468, + "value1": 0.7071067690849304, "value2": 0.0, - "value3": 0.704778790473938 + "value3": 0.7071067690849304 }, "Scale": { - "value0": 5.999999046325684, - "value1": 14.200000762939454, - "value2": 199.99996948242188 + "value0": 6.000001907348633, + "value1": 14.199992179870606, + "value2": 199.99998474121095 } }, - "value114": 2097155, - "value115": { + "value117": 2097155, + "value118": { "Position": { "value0": -0.29128527641296389, "value1": 4.3156633377075199, @@ -637,8 +644,8 @@ "value2": 200.0 } }, - "value116": 1048576, - "value117": { + "value119": 1048576, + "value120": { "Position": { "value0": 9.0, "value1": 18.0, @@ -656,8 +663,8 @@ "value2": 1.0 } }, - "value118": 1048607, - "value119": { + "value121": 1048607, + "value122": { "Position": { "value0": -4.290985107421875, "value1": 5.07811164855957, @@ -675,8 +682,8 @@ "value2": 2.1373074054718019 } }, - "value120": 33, - "value121": { + "value123": 33, + "value124": { "Position": { "value0": 35.72151184082031, "value1": 22.028072357177736, @@ -694,8 +701,8 @@ "value2": 1.0000039339065552 } }, - "value122": 35, - "value123": { + "value125": 35, + "value126": { "Position": { "value0": 0.0, "value1": -0.8354345560073853, @@ -713,11 +720,11 @@ "value2": 0.9999998211860657 } }, - "value124": 36, - "value125": { + "value127": 36, + "value128": { "Position": { "value0": 0.0, - "value1": 4.588988780975342, + "value1": 2.349538803100586, "value2": -0.00330352783203125 }, "Rotation": { @@ -727,13 +734,13 @@ "value3": 1.0 }, "Scale": { - "value0": 0.9999998807907105, - "value1": 0.9999998807907105, - "value2": 0.9999998807907105 + "value0": 1.0, + "value1": 1.0, + "value2": 1.0 } }, - "value126": 37, - "value127": { + "value129": 37, + "value130": { "Position": { "value0": -36.72534942626953, "value1": 16.028718948364259, @@ -751,8 +758,8 @@ "value2": 0.9999997615814209 } }, - "value128": 38, - "value129": { + "value131": 38, + "value132": { "Position": { "value0": 98.88309478759766, "value1": 4.266810894012451, @@ -770,8 +777,8 @@ "value2": 200.0 } }, - "value130": 39, - "value131": { + "value133": 39, + "value134": { "Position": { "value0": 74.57472229003906, "value1": -0.869247317314148, @@ -789,8 +796,8 @@ "value2": 200.0 } }, - "value132": 40, - "value133": { + "value135": 40, + "value136": { "Position": { "value0": -15.478693962097168, "value1": 0.0, @@ -808,8 +815,8 @@ "value2": 0.9999998807907105 } }, - "value134": 41, - "value135": { + "value137": 41, + "value138": { "Position": { "value0": -29.563642501831056, "value1": 0.0, @@ -827,8 +834,8 @@ "value2": 1.0000109672546387 } }, - "value136": 42, - "value137": { + "value139": 42, + "value140": { "Position": { "value0": -14.91064453125, "value1": 0.0, @@ -846,8 +853,8 @@ "value2": 0.9999999403953552 } }, - "value138": 43, - "value139": { + "value141": 43, + "value142": { "Position": { "value0": -25.742326736450197, "value1": 0.0, @@ -865,8 +872,8 @@ "value2": 0.9999999403953552 } }, - "value140": 44, - "value141": { + "value143": 44, + "value144": { "Position": { "value0": 0.0, "value1": 1.0257916450500489, @@ -884,8 +891,8 @@ "value2": 0.9999999403953552 } }, - "value142": 45, - "value143": { + "value145": 45, + "value146": { "Position": { "value0": 16.0, "value1": 0.6939997673034668, @@ -903,8 +910,8 @@ "value2": 1.0000007152557374 } }, - "value144": 46, - "value145": { + "value147": 46, + "value148": { "Position": { "value0": 13.0, "value1": 0.6939997673034668, @@ -922,8 +929,8 @@ "value2": 1.0000007152557374 } }, - "value146": 47, - "value147": { + "value149": 47, + "value150": { "Position": { "value0": -2.8255271911621095, "value1": 9.712101936340332, @@ -941,8 +948,8 @@ "value2": 1.0 } }, - "value148": 48, - "value149": { + "value151": 48, + "value152": { "Position": { "value0": -36.306640625, "value1": 4.499866485595703, @@ -960,8 +967,8 @@ "value2": 1.0 } }, - "value150": 49, - "value151": { + "value153": 49, + "value154": { "Position": { "value0": -4.09690523147583, "value1": 17.351110458374025, @@ -979,8 +986,8 @@ "value2": 0.699999988079071 } }, - "value152": 50, - "value153": { + "value155": 50, + "value156": { "Position": { "value0": -1.5656273365020753, "value1": 17.825361251831056, @@ -998,8 +1005,8 @@ "value2": 0.699999988079071 } }, - "value154": 51, - "value155": { + "value157": 51, + "value158": { "Position": { "value0": -1.5656355619430543, "value1": 16.815269470214845, @@ -1017,8 +1024,8 @@ "value2": 0.699999988079071 } }, - "value156": 52, - "value157": { + "value159": 52, + "value160": { "Position": { "value0": 3.067514419555664, "value1": 19.870115280151368, @@ -1036,8 +1043,8 @@ "value2": 0.699999988079071 } }, - "value158": 53, - "value159": { + "value161": 53, + "value162": { "Position": { "value0": -0.300402969121933, "value1": 19.016862869262697, @@ -1055,8 +1062,8 @@ "value2": 0.699999988079071 } }, - "value160": 54, - "value161": { + "value163": 54, + "value164": { "Position": { "value0": 8.74654483795166, "value1": 19.018550872802736, @@ -1074,426 +1081,569 @@ "value2": 0.699999988079071 } }, - "value162": 41, - "value163": 30, - "value164": { + "value165": 46, + "value166": 30, + "value167": { "Name": "Spheres" }, - "value165": 1, - "value166": { + "value168": 1, + "value169": { "Name": "Ground" }, - "value167": 28, - "value168": { + "value170": 28, + "value171": { "Name": "Cat" }, - "value169": 4, - "value170": { + "value172": 4, + "value173": { "Name": "Sphere0" }, - "value171": 5, - "value172": { + "value174": 5, + "value175": { "Name": "Sphere1" }, - "value173": 6, - "value174": { + "value176": 6, + "value177": { "Name": "Sphere2" }, - "value175": 7, - "value176": { + "value178": 7, + "value179": { "Name": "Sphere3" }, - "value177": 8, - "value178": { + "value180": 8, + "value181": { "Name": "Sphere4" }, - "value179": 9, - "value180": { + "value182": 9, + "value183": { "Name": "Sphere5" }, - "value181": 10, - "value182": { + "value184": 10, + "value185": { "Name": "Sphere6" }, - "value183": 11, - "value184": { + "value186": 11, + "value187": { "Name": "Sphere7" }, - "value185": 12, - "value186": { + "value188": 12, + "value189": { "Name": "Sphere8" }, - "value187": 13, - "value188": { + "value190": 13, + "value191": { "Name": "Sphere9" }, - "value189": 14, - "value190": { + "value192": 14, + "value193": { "Name": "Sphere10" }, - "value191": 15, - "value192": { + "value194": 15, + "value195": { "Name": "Sphere11" }, - "value193": 16, - "value194": { + "value196": 16, + "value197": { "Name": "Sphere12" }, - "value195": 17, - "value196": { + "value198": 17, + "value199": { "Name": "Sphere13" }, - "value197": 18, - "value198": { + "value200": 18, + "value201": { "Name": "Sphere14" }, - "value199": 19, - "value200": { + "value202": 19, + "value203": { "Name": "Sphere15" }, - "value201": 20, - "value202": { + "value204": 20, + "value205": { "Name": "Sphere16" }, - "value203": 21, - "value204": { + "value206": 21, + "value207": { "Name": "Sphere17" }, - "value205": 22, - "value206": { + "value208": 22, + "value209": { "Name": "Sphere18" }, - "value207": 23, - "value208": { + "value210": 23, + "value211": { "Name": "Capsule" }, - "value209": 24, - "value210": { + "value212": 24, + "value213": { "Name": "Environment" }, - "value211": 25, - "value212": { + "value214": 25, + "value215": { "Name": "Light" }, - "value213": 26, - "value214": { + "value216": 26, + "value217": { "Name": "Camera" }, - "value215": 1048608, - "value216": { + "value218": 1048608, + "value219": { "Name": "Projectile" }, - "value217": 1048576, - "value218": { + "value220": 1048576, + "value221": { "Name": "Sphere19" }, - "value219": 35, - "value220": { + "value222": 35, + "value223": { "Name": "Bonfire" }, - "value221": 36, - "value222": { + "value224": 36, + "value225": { "Name": "Light" }, - "value223": 37, - "value224": { + "value226": 37, + "value227": { "Name": "Player" }, - "value225": 40, - "value226": { + "value228": 40, + "value229": { "Name": "Cube" }, - "value227": 41, - "value228": { + "value230": 41, + "value231": { "Name": "Cube" }, - "value229": 42, - "value230": { + "value232": 42, + "value233": { "Name": "Cube" }, - "value231": 43, - "value232": { + "value234": 43, + "value235": { "Name": "Sphere" }, - "value233": 44, - "value234": { + "value236": 44, + "value237": { "Name": "Capsule" }, - "value235": 45, - "value236": { + "value238": 45, + "value239": { "Name": "Capsule" }, - "value237": 46, - "value238": { + "value240": 46, + "value241": { "Name": "Capsule" }, - "value239": 47, - "value240": { + "value242": 47, + "value243": { "Name": "light Cube" }, - "value241": 48, - "value242": { + "value244": 48, + "value245": { "Name": "light Cube" }, - "value243": 1048607, - "value244": { + "value246": 1048607, + "value247": { "Name": "DamagedHelmet" }, - "value245": 3, - "value246": 41, - "value247": { + "value248": 55, + "value249": { + "Name": "Sky" + }, + "value250": 56, + "value251": { + "Name": "TestArea" + }, + "value252": 33, + "value253": { + "Name": "TestGLTFModel" + }, + "value254": 1048610, + "value255": { + "Name": "TestAudio" + }, + "value256": 57, + "value257": { + "Name": "Capsules" + }, + "value258": 4, + "value259": 41, + "value260": { "Active": true }, - "value248": 40, - "value249": { + "value261": 40, + "value262": { "Active": true }, - "value250": 42, - "value251": { + "value263": 42, + "value264": { "Active": true }, - "value252": 34, - "value253": 1048576, - "value254": { + "value265": 3145757, + "value266": { + "Active": true + }, + "value267": 51, + "value268": 1048576, + "value269": { "First": 1048575, "Next": 49, "Previous": 4, "Parent": 30 }, - "value255": 30, - "value256": { + "value270": 30, + "value271": { "First": 22, "Next": 1048575, "Previous": 1048575, "Parent": 1048575 }, - "value257": 22, - "value258": { + "value272": 22, + "value273": { "First": 1048575, "Next": 21, "Previous": 1048575, "Parent": 30 }, - "value259": 21, - "value260": { + "value274": 21, + "value275": { "First": 1048575, "Next": 20, "Previous": 22, "Parent": 30 }, - "value261": 20, - "value262": { + "value276": 20, + "value277": { "First": 1048575, "Next": 19, "Previous": 21, "Parent": 30 }, - "value263": 19, - "value264": { + "value278": 19, + "value279": { "First": 1048575, "Next": 18, "Previous": 20, "Parent": 30 }, - "value265": 18, - "value266": { + "value280": 18, + "value281": { "First": 1048575, "Next": 17, "Previous": 19, "Parent": 30 }, - "value267": 17, - "value268": { + "value282": 17, + "value283": { "First": 1048575, "Next": 16, "Previous": 18, "Parent": 30 }, - "value269": 16, - "value270": { + "value284": 16, + "value285": { "First": 1048575, "Next": 14, "Previous": 17, "Parent": 30 }, - "value271": 1048608, - "value272": { + "value286": 1048608, + "value287": { "First": 1048575, "Next": 1048575, "Previous": 26, "Parent": 37 }, - "value273": 14, - "value274": { + "value288": 14, + "value289": { "First": 1048575, "Next": 13, "Previous": 16, "Parent": 30 }, - "value275": 13, - "value276": { + "value290": 13, + "value291": { "First": 1048575, "Next": 12, "Previous": 14, "Parent": 30 }, - "value277": 12, - "value278": { + "value292": 12, + "value293": { "First": 1048575, "Next": 11, "Previous": 13, "Parent": 30 }, - "value279": 11, - "value280": { + "value294": 11, + "value295": { "First": 1048575, "Next": 10, "Previous": 12, "Parent": 30 }, - "value281": 10, - "value282": { + "value296": 10, + "value297": { "First": 1048575, "Next": 9, "Previous": 11, "Parent": 30 }, - "value283": 9, - "value284": { + "value298": 9, + "value299": { "First": 1048575, "Next": 8, "Previous": 10, "Parent": 30 }, - "value285": 8, - "value286": { + "value300": 8, + "value301": { "First": 1048575, "Next": 7, "Previous": 9, "Parent": 30 }, - "value287": 7, - "value288": { + "value302": 7, + "value303": { "First": 1048575, "Next": 6, "Previous": 8, "Parent": 30 }, - "value289": 6, - "value290": { + "value304": 6, + "value305": { "First": 1048575, "Next": 5, "Previous": 7, "Parent": 30 }, - "value291": 5, - "value292": { + "value306": 5, + "value307": { "First": 1048575, "Next": 4, "Previous": 6, "Parent": 30 }, - "value293": 4, - "value294": { + "value308": 4, + "value309": { "First": 1048575, "Next": 1048576, "Previous": 5, "Parent": 30 }, - "value295": 36, - "value296": { + "value310": 36, + "value311": { "First": 1048575, "Next": 1048575, "Previous": 1048575, "Parent": 35 }, - "value297": 35, - "value298": { + "value312": 35, + "value313": { "First": 36, "Next": 1048575, "Previous": 1048575, "Parent": 1048575 }, - "value299": 26, - "value300": { + "value314": 26, + "value315": { "First": 1048575, "Next": 1048608, "Previous": 1048575, "Parent": 37 }, - "value301": 37, - "value302": { + "value316": 37, + "value317": { "First": 26, "Next": 1048575, "Previous": 1048575, "Parent": 1048575 }, - "value303": 40, - "value304": { + "value318": 40, + "value319": { "First": 42, "Next": 1048575, "Previous": 1048575, "Parent": 41 }, - "value305": 41, - "value306": { + "value320": 41, + "value321": { "First": 40, "Next": 1048575, "Previous": 1048575, "Parent": 1048575 }, - "value307": 42, - "value308": { + "value322": 42, + "value323": { "First": 1048575, "Next": 1048575, "Previous": 1048575, "Parent": 40 }, - "value309": 49, - "value310": { + "value324": 49, + "value325": { "First": 1048575, "Next": 50, "Previous": 1048576, "Parent": 30 }, - "value311": 50, - "value312": { + "value326": 50, + "value327": { "First": 1048575, "Next": 51, "Previous": 49, "Parent": 30 }, - "value313": 51, - "value314": { + "value328": 51, + "value329": { "First": 1048575, "Next": 52, "Previous": 50, "Parent": 30 }, - "value315": 52, - "value316": { + "value330": 52, + "value331": { "First": 1048575, "Next": 53, "Previous": 51, "Parent": 30 }, - "value317": 53, - "value318": { + "value332": 53, + "value333": { "First": 1048575, "Next": 54, "Previous": 52, "Parent": 30 }, - "value319": 54, - "value320": { + "value334": 54, + "value335": { "First": 1048575, - "Next": 1048575, + "Next": 15, "Previous": 53, "Parent": 30 }, - "value321": 1, - "value322": 26, - "value323": { + "value336": 25, + "value337": { + "First": 1048575, + "Next": 1048575, + "Previous": 24, + "Parent": 55 + }, + "value338": 24, + "value339": { + "First": 1048575, + "Next": 25, + "Previous": 1048575, + "Parent": 55 + }, + "value340": 55, + "value341": { + "First": 24, + "Next": 1048575, + "Previous": 1048575, + "Parent": 1048575 + }, + "value342": 1, + "value343": { + "First": 1048575, + "Next": 2097154, + "Previous": 1048575, + "Parent": 56 + }, + "value344": 56, + "value345": { + "First": 1, + "Next": 1048575, + "Previous": 1048575, + "Parent": 1048575 + }, + "value346": 2097154, + "value347": { + "First": 1048575, + "Next": 39, + "Previous": 1, + "Parent": 56 + }, + "value348": 39, + "value349": { + "First": 1048575, + "Next": 38, + "Previous": 2097154, + "Parent": 56 + }, + "value350": 38, + "value351": { + "First": 1048575, + "Next": 3145757, + "Previous": 39, + "Parent": 56 + }, + "value352": 3145757, + "value353": { + "First": 1048575, + "Next": 2097155, + "Previous": 38, + "Parent": 56 + }, + "value354": 2097155, + "value355": { + "First": 1048575, + "Next": 2097179, + "Previous": 3145757, + "Parent": 56 + }, + "value356": 2097179, + "value357": { + "First": 1048575, + "Next": 1048575, + "Previous": 2097155, + "Parent": 56 + }, + "value358": 15, + "value359": { + "First": 1048575, + "Next": 1048575, + "Previous": 54, + "Parent": 30 + }, + "value360": 23, + "value361": { + "First": 1048575, + "Next": 44, + "Previous": 1048575, + "Parent": 57 + }, + "value362": 57, + "value363": { + "First": 23, + "Next": 1048575, + "Previous": 1048575, + "Parent": 1048575 + }, + "value364": 44, + "value365": { + "First": 1048575, + "Next": 45, + "Previous": 23, + "Parent": 57 + }, + "value366": 45, + "value367": { + "First": 1048575, + "Next": 46, + "Previous": 44, + "Parent": 57 + }, + "value368": 46, + "value369": { + "First": 1048575, + "Next": 1048575, + "Previous": 45, + "Parent": 57 + }, + "value370": 1, + "value371": 26, + "value372": { "Scale": 1.0, "Aspect": 0.8098591566085815, "FOV": 60.0, @@ -1503,23 +1653,23 @@ "ShutterSpeed": 0.01666666753590107, "Sensitivity": 400.0 }, - "value324": 3, - "value325": 1048608, - "value326": { + "value373": 3, + "value374": 1048608, + "value375": { "FilePath": "//Scripts/Projectile.lua" }, - "value327": 36, - "value328": { + "value376": 36, + "value377": { "FilePath": "//Scripts/Script.lua" }, - "value329": 37, - "value330": { + "value378": 37, + "value379": { "FilePath": "//Scripts/Script(1).lua" }, - "value331": 0, - "value332": 4, - "value333": 25, - "value334": { + "value380": 0, + "value381": 4, + "value382": 25, + "value383": { "value0": { "value0": 26.0, "value1": 22.0, @@ -1543,11 +1693,11 @@ "value5": 120000.0, "value6": 1.0 }, - "value335": 36, - "value336": { + "value384": 36, + "value385": { "value0": { "value0": 0.0, - "value1": 3.7535533905029299, + "value1": 1.5141037702560425, "value2": 76.22005462646485, "value3": 1.0 }, @@ -1566,10 +1716,10 @@ "value3": 1.0 }, "value5": 500000.0, - "value6": 43.0 + "value6": 10.0 }, - "value337": 47, - "value338": { + "value386": 47, + "value387": { "value0": { "value0": -2.8255271911621095, "value1": 9.712101936340332, @@ -1593,8 +1743,8 @@ "value5": 120000.0, "value6": 17.015546798706056 }, - "value339": 48, - "value340": { + "value388": 48, + "value389": { "value0": { "value0": -36.306640625, "value1": 4.499866485595703, @@ -1618,9 +1768,9 @@ "value5": 120000.0, "value6": 28.037296295166017 }, - "value341": 14, - "value342": 1, - "value343": { + "value390": 14, + "value391": 1, + "value392": { "value0": { "Version": 1, "Position": { @@ -1676,8 +1826,8 @@ "AngularFactor": 1.0 } }, - "value344": 3145757, - "value345": { + "value393": 3145757, + "value394": { "value0": { "Version": 1, "Position": { @@ -1732,8 +1882,8 @@ "AngularFactor": 1.0 } }, - "value346": 2097179, - "value347": { + "value395": 2097179, + "value396": { "value0": { "Version": 1, "Position": { @@ -1788,8 +1938,8 @@ "AngularFactor": 1.0 } }, - "value348": 2097154, - "value349": { + "value397": 2097154, + "value398": { "value0": { "Version": 1, "Position": { @@ -1801,7 +1951,7 @@ "value0": 0.0, "value1": 0.7071067690849304, "value2": 0.0, - "value3": 0.7071068286895752 + "value3": 0.7071067690849304 }, "LinearVelocity": { "value0": 0.0, @@ -1844,8 +1994,8 @@ "AngularFactor": 1.0 } }, - "value350": 2097155, - "value351": { + "value399": 2097155, + "value400": { "value0": { "Version": 1, "Position": { @@ -1900,8 +2050,8 @@ "AngularFactor": 1.0 } }, - "value352": 23, - "value353": { + "value401": 23, + "value402": { "value0": { "Version": 1, "Position": { @@ -1954,8 +2104,8 @@ "AngularFactor": 1.0 } }, - "value354": 37, - "value355": { + "value403": 37, + "value404": { "value0": { "Version": 1, "Position": { @@ -2007,8 +2157,8 @@ "AngularFactor": 0.0 } }, - "value356": 38, - "value357": { + "value405": 38, + "value406": { "value0": { "Version": 1, "Position": { @@ -2063,8 +2213,8 @@ "AngularFactor": 1.0 } }, - "value358": 39, - "value359": { + "value407": 39, + "value408": { "value0": { "Version": 1, "Position": { @@ -2119,8 +2269,8 @@ "AngularFactor": 1.0 } }, - "value360": 44, - "value361": { + "value409": 44, + "value410": { "value0": { "Version": 1, "Position": { @@ -2172,8 +2322,8 @@ "AngularFactor": 1.0 } }, - "value362": 45, - "value363": { + "value411": 45, + "value412": { "value0": { "Version": 1, "Position": { @@ -2225,8 +2375,8 @@ "AngularFactor": 1.0 } }, - "value364": 46, - "value365": { + "value413": 46, + "value414": { "value0": { "Version": 1, "Position": { @@ -2278,8 +2428,8 @@ "AngularFactor": 0.0 } }, - "value366": 47, - "value367": { + "value415": 47, + "value416": { "value0": { "Version": 1, "Position": { @@ -2334,8 +2484,8 @@ "AngularFactor": 1.0 } }, - "value368": 48, - "value369": { + "value417": 48, + "value418": { "value0": { "Version": 1, "Position": { @@ -2390,26 +2540,33 @@ "AngularFactor": 1.0 } }, - "value370": 1, - "value371": 24, - "value372": { + "value419": 1, + "value420": 24, + "value421": { "value0": "//Textures/cubemap/noga", "value1": 11, "value2": 3072, "value3": 4096, - "value4": ".tga", - "value5": 0.03125 + "value4": ".hdr", + "value5": 0.03125, + "value6": 0, + "value7": { + "value0": 2.430000066757202, + "value1": 4.199999809265137, + "value2": 1.059999942779541, + "value3": 0.0 + } }, - "value373": 0, - "value374": 0, - "value375": 1, - "value376": 26, - "value377": { + "value422": 0, + "value423": 0, + "value424": 1, + "value425": 26, + "value426": { "ControllerType": 1 }, - "value378": 1, - "value379": 28, - "value380": { + "value427": 1, + "value428": 28, + "value429": { "TexturePath": "//Textures/cat.png", "Position": { "value0": 0.0, @@ -2477,50 +2634,50 @@ } }, { - "key": "RunLeft", + "key": "RunRight", "value": { "PlayMode": 0, "Frames": [ { "value0": 0.0, - "value1": 96.0 + "value1": 32.0 }, { "value0": 32.0, - "value1": 96.0 + "value1": 32.0 }, { "value0": 64.0, - "value1": 96.0 + "value1": 32.0 }, { "value0": 96.0, - "value1": 96.0 + "value1": 32.0 } ], "FrameDuration": 0.10000000149011612 } }, { - "key": "RunRight", + "key": "RunLeft", "value": { "PlayMode": 0, "Frames": [ { "value0": 0.0, - "value1": 32.0 + "value1": 96.0 }, { "value0": 32.0, - "value1": 32.0 + "value1": 96.0 }, { "value0": 64.0, - "value1": 32.0 + "value1": 96.0 }, { "value0": 96.0, - "value1": 32.0 + "value1": 96.0 } ], "FrameDuration": 0.10000000149011612 @@ -2554,9 +2711,9 @@ ], "State": "RunRight" }, - "value381": 2, - "value382": 35, - "value383": { + "value430": 2, + "value431": 35, + "value432": { "value0": { "Position": { "value0": 0.0, @@ -2581,8 +2738,8 @@ "RollOffFactor": 6.0 } }, - "value384": 1048610, - "value385": { + "value433": 1048610, + "value434": { "value0": { "Position": { "value0": 0.10000000149011612, @@ -2607,247 +2764,259 @@ "RollOffFactor": 6.0 } }, - "value386": 1, - "value387": 26, - "value388": { + "value435": 1, + "value436": 26, + "value437": { "enabled": true }, - "value389": 55, - "value390": 36, - "value391": { + "value438": 58, + "value439": 36, + "value440": { "value0": 7142670811742260938 }, - "value392": 35, - "value393": { + "value441": 35, + "value442": { "value0": 11107416043673070741 }, - "value394": 1048610, - "value395": { + "value443": 1048610, + "value444": { "value0": 11900723286469007770 }, - "value396": 33, - "value397": { + "value445": 33, + "value446": { "value0": 7359062324725864355 }, - "value398": 1048608, - "value399": { + "value447": 1048608, + "value448": { "value0": 7055554476232666375 }, - "value400": 1048607, - "value401": { + "value449": 1048607, + "value450": { "value0": 17970324625984215606 }, - "value402": 30, - "value403": { + "value451": 30, + "value452": { "value0": 8167269343774118827 }, - "value404": 3145757, - "value405": { + "value453": 3145757, + "value454": { "value0": 17779826851189947480 }, - "value406": 28, - "value407": { + "value455": 28, + "value456": { "value0": 14937591263949305246 }, - "value408": 2097179, - "value409": { + "value457": 2097179, + "value458": { "value0": 7640771210261002049 }, - "value410": 26, - "value411": { + "value459": 26, + "value460": { "value0": 2839679583992163695 }, - "value412": 25, - "value413": { + "value461": 25, + "value462": { "value0": 15488722931219541607 }, - "value414": 24, - "value415": { + "value463": 24, + "value464": { "value0": 6226202769161346132 }, - "value416": 23, - "value417": { + "value465": 23, + "value466": { "value0": 7098989048976045174 }, - "value418": 22, - "value419": { + "value467": 22, + "value468": { "value0": 3439171724646251554 }, - "value420": 21, - "value421": { + "value469": 21, + "value470": { "value0": 16956239776263133194 }, - "value422": 20, - "value423": { + "value471": 20, + "value472": { "value0": 1990762703427919633 }, - "value424": 19, - "value425": { + "value473": 19, + "value474": { "value0": 423835867410576946 }, - "value426": 18, - "value427": { + "value475": 18, + "value476": { "value0": 11891685876785498577 }, - "value428": 17, - "value429": { + "value477": 17, + "value478": { "value0": 7067971027685025311 }, - "value430": 16, - "value431": { + "value479": 16, + "value480": { "value0": 233959796952139788 }, - "value432": 15, - "value433": { + "value481": 15, + "value482": { "value0": 14159927372598275186 }, - "value434": 14, - "value435": { + "value483": 14, + "value484": { "value0": 4435898066759924372 }, - "value436": 13, - "value437": { + "value485": 13, + "value486": { "value0": 3179284270372788909 }, - "value438": 12, - "value439": { + "value487": 12, + "value488": { "value0": 4586489471220893352 }, - "value440": 11, - "value441": { + "value489": 11, + "value490": { "value0": 12681453495343578024 }, - "value442": 10, - "value443": { + "value491": 10, + "value492": { "value0": 18014480495500914400 }, - "value444": 9, - "value445": { + "value493": 9, + "value494": { "value0": 9295814637906071280 }, - "value446": 8, - "value447": { + "value495": 8, + "value496": { "value0": 2152489098297605661 }, - "value448": 7, - "value449": { + "value497": 7, + "value498": { "value0": 4327025743306843849 }, - "value450": 6, - "value451": { + "value499": 6, + "value500": { "value0": 11046028634673225913 }, - "value452": 5, - "value453": { + "value501": 5, + "value502": { "value0": 7714213696942504533 }, - "value454": 4, - "value455": { + "value503": 4, + "value504": { "value0": 8008364231059824527 }, - "value456": 2097155, - "value457": { + "value505": 2097155, + "value506": { "value0": 18193252195915204467 }, - "value458": 2097154, - "value459": { + "value507": 2097154, + "value508": { "value0": 6603296929366748979 }, - "value460": 1, - "value461": { + "value509": 1, + "value510": { "value0": 9645706349408193021 }, - "value462": 1048576, - "value463": { + "value511": 1048576, + "value512": { "value0": 13961618126954569495 }, - "value464": 37, - "value465": { + "value513": 37, + "value514": { "value0": 12672391254482586722 }, - "value466": 38, - "value467": { + "value515": 38, + "value516": { "value0": 3185688625544513382 }, - "value468": 39, - "value469": { + "value517": 39, + "value518": { "value0": 478815009451712139 }, - "value470": 40, - "value471": { + "value519": 40, + "value520": { "value0": 16680644448984634936 }, - "value472": 41, - "value473": { + "value521": 41, + "value522": { "value0": 4838390566280914159 }, - "value474": 42, - "value475": { + "value523": 42, + "value524": { "value0": 16722696764297374778 }, - "value476": 43, - "value477": { + "value525": 43, + "value526": { "value0": 8076439804870629473 }, - "value478": 44, - "value479": { + "value527": 44, + "value528": { "value0": 2922988186484868607 }, - "value480": 45, - "value481": { + "value529": 45, + "value530": { "value0": 17620835260008345330 }, - "value482": 46, - "value483": { + "value531": 46, + "value532": { "value0": 16262140283655929216 }, - "value484": 47, - "value485": { + "value533": 47, + "value534": { "value0": 17900231230883469521 }, - "value486": 48, - "value487": { + "value535": 48, + "value536": { "value0": 6273149985837589589 }, - "value488": 49, - "value489": { + "value537": 49, + "value538": { "value0": 17413202261215926371 }, - "value490": 50, - "value491": { + "value539": 50, + "value540": { "value0": 24088390834734939 }, - "value492": 51, - "value493": { + "value541": 51, + "value542": { "value0": 4055617899937532868 }, - "value494": 52, - "value495": { + "value543": 52, + "value544": { "value0": 11267442642228032682 }, - "value496": 53, - "value497": { + "value545": 53, + "value546": { "value0": 1271265202659808170 }, - "value498": 54, - "value499": { + "value547": 54, + "value548": { "value0": 1493189173168838353 }, - "value500": 40, - "value501": 35, - "value502": { + "value549": 55, + "value550": { + "value0": 4838382540867006819 + }, + "value551": 56, + "value552": { + "value0": 9875205724687178906 + }, + "value553": 57, + "value554": { + "value0": 14459952198224781056 + }, + "value555": 40, + "value556": 35, + "value557": { "PrimitiveType": 8, "FilePath": "//Assets/Meshes/lowpoly_bonfire/scene.gltf", "Material": { "ptr_wrapper": { "valid": 1, "data": { - "Albedo": "", - "Normal": "", - "Metallic": "", + "Albedo": "NULL", + "Normal": "NULL", + "Metallic": "NULL", "Roughness": "", "Ao": "", - "Emissive": "", + "Emissive": "NULL", "albedoColour": { "value0": 1.0, "value1": 1.0, @@ -2865,25 +3034,26 @@ "emissiveMapFactor": 1.0, "alphaCutOff": 0.4000000059604645, "workflow": 1.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value503": 33, - "value504": { + "value558": 33, + "value559": { "PrimitiveType": 8, "FilePath": "//Meshes/Scene/scene.gltf", "Material": { "ptr_wrapper": { "valid": 1, "data": { - "Albedo": "", + "Albedo": "NULL", "Normal": "", "Metallic": "", "Roughness": "", "Ao": "", - "Emissive": "", + "Emissive": "NULL", "albedoColour": { "value0": 1.0, "value1": 1.0, @@ -2901,25 +3071,26 @@ "emissiveMapFactor": 1.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value505": 1048607, - "value506": { + "value560": 1048607, + "value561": { "PrimitiveType": 8, "FilePath": "//Meshes/DamagedHelmet/glTF/DamagedHelmet.gltf", "Material": { "ptr_wrapper": { "valid": 1, "data": { - "Albedo": "", - "Normal": "", - "Metallic": "", + "Albedo": "NULL", + "Normal": "NULL", + "Metallic": "NULL", "Roughness": "", - "Ao": "", - "Emissive": "", + "Ao": "NULL", + "Emissive": "NULL", "albedoColour": { "value0": 1.0, "value1": 1.0, @@ -2937,13 +3108,14 @@ "emissiveMapFactor": 1.0, "alphaCutOff": 0.4000000059604645, "workflow": 1.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value507": 3145757, - "value508": { + "value562": 3145757, + "value563": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -2973,13 +3145,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value509": 2097179, - "value510": { + "value564": 2097179, + "value565": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3009,13 +3182,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value511": 23, - "value512": { + "value566": 23, + "value567": { "PrimitiveType": 5, "FilePath": "Primitive", "Material": { @@ -3045,13 +3219,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value513": 22, - "value514": { + "value568": 22, + "value569": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3081,13 +3256,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value515": 21, - "value516": { + "value570": 21, + "value571": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3117,13 +3293,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value517": 20, - "value518": { + "value572": 20, + "value573": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3153,13 +3330,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value519": 19, - "value520": { + "value574": 19, + "value575": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3189,13 +3367,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value521": 18, - "value522": { + "value576": 18, + "value577": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3225,13 +3404,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value523": 17, - "value524": { + "value578": 17, + "value579": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3261,13 +3441,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value525": 16, - "value526": { + "value580": 16, + "value581": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3297,13 +3478,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value527": 15, - "value528": { + "value582": 15, + "value583": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3333,13 +3515,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value529": 14, - "value530": { + "value584": 14, + "value585": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3369,13 +3552,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value531": 13, - "value532": { + "value586": 13, + "value587": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3405,13 +3589,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value533": 12, - "value534": { + "value588": 12, + "value589": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3441,13 +3626,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value535": 11, - "value536": { + "value590": 11, + "value591": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3477,13 +3663,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value537": 10, - "value538": { + "value592": 10, + "value593": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3513,13 +3700,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value539": 9, - "value540": { + "value594": 9, + "value595": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3549,13 +3737,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value541": 8, - "value542": { + "value596": 8, + "value597": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3585,13 +3774,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value543": 7, - "value544": { + "value598": 7, + "value599": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3621,13 +3811,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value545": 6, - "value546": { + "value600": 6, + "value601": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3657,13 +3848,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value547": 5, - "value548": { + "value602": 5, + "value603": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3693,13 +3885,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value549": 4, - "value550": { + "value604": 4, + "value605": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3729,13 +3922,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value551": 2097155, - "value552": { + "value606": 2097155, + "value607": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3765,13 +3959,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value553": 2097154, - "value554": { + "value608": 2097154, + "value609": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3801,13 +3996,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value555": 1, - "value556": { + "value610": 1, + "value611": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3837,13 +4033,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value557": 1048576, - "value558": { + "value612": 1048576, + "value613": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -3873,13 +4070,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value559": 38, - "value560": { + "value614": 38, + "value615": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3909,13 +4107,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value561": 39, - "value562": { + "value616": 39, + "value617": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3945,13 +4144,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value563": 40, - "value564": { + "value618": 40, + "value619": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -3981,13 +4181,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value565": 41, - "value566": { + "value620": 41, + "value621": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -4017,13 +4218,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value567": 42, - "value568": { + "value622": 42, + "value623": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -4053,13 +4255,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value569": 43, - "value570": { + "value624": 43, + "value625": { "PrimitiveType": 4, "FilePath": "Primitive", "Material": { @@ -4089,13 +4292,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value571": 44, - "value572": { + "value626": 44, + "value627": { "PrimitiveType": 5, "FilePath": "Primitive", "Material": { @@ -4125,13 +4329,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value573": 45, - "value574": { + "value628": 45, + "value629": { "PrimitiveType": 5, "FilePath": "Primitive", "Material": { @@ -4161,13 +4366,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value575": 46, - "value576": { + "value630": 46, + "value631": { "PrimitiveType": 5, "FilePath": "Primitive", "Material": { @@ -4197,13 +4403,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value577": 47, - "value578": { + "value632": 47, + "value633": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -4233,13 +4440,14 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value579": 48, - "value580": { + "value634": 48, + "value635": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -4269,15 +4477,16 @@ "emissiveMapFactor": 0.0, "alphaCutOff": 0.4000000059604645, "workflow": 0.0, - "shader": "//CoreShaders/ForwardPBR.shader" + "shader": "//CoreShaders/ForwardPBR.shader", + "Reflectance": 0.30000001192092898 } } } }, - "value581": 0, - "value582": 6, - "value583": 49, - "value584": { + "value636": 0, + "value637": 6, + "value638": 49, + "value639": { "TextString": "Metallic", "Path": "RobotoRegular", "Colour": { @@ -4297,8 +4506,8 @@ }, "OutlineWidth": 0.0 }, - "value585": 50, - "value586": { + "value640": 50, + "value641": { "TextString": "0.9", "Path": "RobotoRegular", "Colour": { @@ -4318,8 +4527,8 @@ }, "OutlineWidth": 0.0 }, - "value587": 51, - "value588": { + "value642": 51, + "value643": { "TextString": "0.2", "Path": "RobotoRegular", "Colour": { @@ -4339,8 +4548,8 @@ }, "OutlineWidth": 0.0 }, - "value589": 52, - "value590": { + "value644": 52, + "value645": { "TextString": "Roughness", "Path": "RobotoRegular", "Colour": { @@ -4360,8 +4569,8 @@ }, "OutlineWidth": 0.0 }, - "value591": 53, - "value592": { + "value646": 53, + "value647": { "TextString": "0.0", "Path": "RobotoRegular", "Colour": { @@ -4381,8 +4590,8 @@ }, "OutlineWidth": 0.0 }, - "value593": 54, - "value594": { + "value648": 54, + "value649": { "TextString": "1.0", "Path": "RobotoRegular", "Colour": { diff --git a/ExampleProject/Assets/Scenes/Sandbox.lsn b/ExampleProject/Assets/Scenes/Sandbox.lsn index dabb7441c..6453d5370 100644 --- a/ExampleProject/Assets/Scenes/Sandbox.lsn +++ b/ExampleProject/Assets/Scenes/Sandbox.lsn @@ -1,6 +1,6 @@ { "value0": { - "Version": 14, + "Version": 17, "Scene Name": "Sandbox", "PhysicsEnabled2D": true, "PhysicsEnabled3D": true, @@ -11,7 +11,7 @@ "SkyboxRenderEnabled": true, "ShadowsEnabled": true, "Exposure": 1.0, - "ToneMap": 4, + "ToneMap": 6, "BloomIntensity": 1.0, "BloomKnee": 0.10000000149011612, "BloomThreshold": 1.0, @@ -22,9 +22,15 @@ "EyeAdaptation": true, "SSAOEnabled": true, "BloomEnabled": true, - "FilmicGrainEnabled": true, + "FilmicGrainEnabled": false, "DepthOfFieldEnabled": false, - "MotionBlurEnabled": false + "MotionBlurEnabled": false, + "DepthOFFieldEnabled": false, + "DepthOfFieldStrength": 1.0, + "DepthOfFieldDistance": 100.0, + "value0": 0.0, + "value1": 1.0, + "value2": 1.0 }, "value1": 5, "value2": 2097151, @@ -94,7 +100,7 @@ "value24": 2, "value25": { "Scale": 1.0, - "Aspect": 0.6760563254356384, + "Aspect": 1.1355931758880616, "FOV": 79.24700164794922, "Near": 0.27399998903274538, "Far": 831.0960083007813, diff --git a/ExampleProject/Assets/Scenes/Sponza.lsn b/ExampleProject/Assets/Scenes/Sponza.lsn index 210259b87..4b767227b 100644 --- a/ExampleProject/Assets/Scenes/Sponza.lsn +++ b/ExampleProject/Assets/Scenes/Sponza.lsn @@ -1,6 +1,6 @@ { "value0": { - "Version": 15, + "Version": 19, "Scene Name": "Sponza", "PhysicsEnabled2D": true, "PhysicsEnabled3D": true, @@ -20,13 +20,20 @@ "DebandingEnabled": true, "ChromaticAberationEnabled": false, "EyeAdaptation": true, - "SSAOEnabled": true, + "SSAOEnabled": false, "BloomEnabled": true, - "FilmicGrainEnabled": true, + "FilmicGrainEnabled": false, "DepthOfFieldEnabled": false, - "MotionBlurEnabled": false + "MotionBlurEnabled": false, + "DepthOFFieldEnabled": false, + "DepthOfFieldStrength": 1.0, + "DepthOfFieldDistance": 100.0, + "value0": 0.0, + "value1": 1.0, + "value2": 1.0, + "value3": false }, - "value1": 7, + "value1": 8, "value2": 1048576, "value3": 1, "value4": 2, @@ -34,9 +41,10 @@ "value6": 4, "value7": 5, "value8": 6, - "value9": 5, - "value10": 1, - "value11": { + "value9": 7, + "value10": 6, + "value11": 1, + "value12": { "Position": { "value0": 0.0, "value1": 0.0, @@ -54,8 +62,8 @@ "value2": 1.000003457069397 } }, - "value12": 2, - "value13": { + "value13": 2, + "value14": { "Position": { "value0": 20.89605140686035, "value1": 4.722044944763184, @@ -73,8 +81,8 @@ "value2": 1.0000011920928956 } }, - "value14": 1048576, - "value15": { + "value15": 1048576, + "value16": { "Position": { "value0": 0.0, "value1": 0.0, @@ -92,8 +100,8 @@ "value2": 4.507299423217773 } }, - "value16": 5, - "value17": { + "value17": 5, + "value18": { "Position": { "value0": -43.276554107666019, "value1": 9.159662246704102, @@ -111,8 +119,8 @@ "value2": 2.3499996662139894 } }, - "value18": 6, - "value19": { + "value19": 6, + "value20": { "Position": { "value0": 0.000013351507732295432, "value1": -0.006932055111974478, @@ -130,48 +138,67 @@ "value2": 1.000004768371582 } }, - "value20": 5, - "value21": 1, + "value21": 7, "value22": { + "Position": { + "value0": -16.0792293548584, + "value1": 3.7029831409454347, + "value2": 3.9540579319000246 + }, + "Rotation": { + "value0": 1.0676852468805009e-7, + "value1": -0.7054808735847473, + "value2": 1.0676852468805009e-7, + "value3": 0.7087289690971375 + }, + "Scale": { + "value0": 1.0, + "value1": 1.0, + "value2": 1.0 + } + }, + "value23": 5, + "value24": 1, + "value25": { "Name": "Light" }, - "value23": 4, - "value24": { + "value26": 4, + "value27": { "Name": "Environment" }, - "value25": 2, - "value26": { + "value28": 2, + "value29": { "Name": "Camera" }, - "value27": 3, - "value28": { + "value30": 3, + "value31": { "Name": "LuaScript" }, - "value29": 5, - "value30": { + "value32": 5, + "value33": { "Name": "Cube" }, - "value31": 0, - "value32": 2, - "value33": 6, - "value34": { + "value34": 0, + "value35": 2, + "value36": 6, + "value37": { "First": 1048575, "Next": 1048575, "Previous": 1048575, "Parent": 5 }, - "value35": 5, - "value36": { + "value38": 5, + "value39": { "First": 6, "Next": 1048575, "Previous": 1048575, "Parent": 1048575 }, - "value37": 1, - "value38": 2, - "value39": { + "value40": 1, + "value41": 2, + "value42": { "Scale": 1.0, - "Aspect": 1.0457316637039185, + "Aspect": 1.0636942386627198, "FOV": 79.24700164794922, "Near": 0.27399998903274538, "Far": 831.0960083007813, @@ -179,15 +206,15 @@ "ShutterSpeed": 0.01666666753590107, "Sensitivity": 500.0 }, - "value40": 1, - "value41": 3, - "value42": { + "value43": 1, + "value44": 3, + "value45": { "FilePath": "//Scripts/Projectile.lua" }, - "value43": 0, - "value44": 2, - "value45": 1, - "value46": { + "value46": 0, + "value47": 2, + "value48": 1, + "value49": { "value0": { "value0": 0.0, "value1": 0.0, @@ -211,8 +238,8 @@ "value5": 128000.0, "value6": 1.0 }, - "value47": 6, - "value48": { + "value50": 6, + "value51": { "value0": { "value0": -43.27652359008789, "value1": 9.14337158203125, @@ -236,59 +263,70 @@ "value5": 120000.0, "value6": 10.0 }, - "value49": 0, - "value50": 1, - "value51": 4, - "value52": { + "value52": 0, + "value53": 1, + "value54": 4, + "value55": { "value0": "//Textures/cubemap/noga", "value1": 11, "value2": 3072, "value3": 4096, "value4": ".tga", - "value5": 0.03125 + "value5": 0.03125, + "value6": 1, + "value7": { + "value0": 2.0, + "value1": 0.0, + "value2": 0.0, + "value3": 1.0 + } }, - "value53": 0, - "value54": 0, - "value55": 1, - "value56": 2, - "value57": { + "value56": 0, + "value57": 0, + "value58": 1, + "value59": 2, + "value60": { "ControllerType": 4 }, - "value58": 0, - "value59": 0, - "value60": 0, - "value61": 7, - "value62": 4, - "value63": { + "value61": 0, + "value62": 0, + "value63": 0, + "value64": 8, + "value65": 4, + "value66": { "value0": 15908292661079695999 }, - "value64": 3, - "value65": { + "value67": 3, + "value68": { "value0": 7526643175369553408 }, - "value66": 2, - "value67": { + "value69": 2, + "value70": { "value0": 10876671568568338938 }, - "value68": 1, - "value69": { + "value71": 1, + "value72": { "value0": 7214240436243909756 }, - "value70": 1048576, - "value71": { + "value73": 1048576, + "value74": { "value0": 7500562784737221622 }, - "value72": 5, - "value73": { + "value75": 5, + "value76": { "value0": 11895628897253878785 }, - "value74": 6, - "value75": { + "value77": 6, + "value78": { "value0": 10240194095462285041 }, - "value76": 2, - "value77": 1048576, - "value78": { + "value79": 7, + "value80": { + "value0": 7682186050372134587 + }, + "value81": 3, + "value82": 1048576, + "value83": { "PrimitiveType": 8, "FilePath": "//Assets/Meshes/Sponza/Sponza.gltf", "Material": { @@ -323,8 +361,8 @@ } } }, - "value79": 5, - "value80": { + "value84": 5, + "value85": { "PrimitiveType": 2, "FilePath": "Primitive", "Material": { @@ -359,6 +397,42 @@ } } }, - "value81": 0, - "value82": 0 + "value86": 7, + "value87": { + "PrimitiveType": 8, + "FilePath": "//Assets/Meshes/DamagedHelmet/glTF/DamagedHelmet.gltf", + "Material": { + "ptr_wrapper": { + "valid": 1, + "data": { + "Albedo": "NULL", + "Normal": "NULL", + "Metallic": "NULL", + "Roughness": "", + "Ao": "NULL", + "Emissive": "NULL", + "albedoColour": { + "value0": 1.0, + "value1": 1.0, + "value2": 1.0, + "value3": 1.0 + }, + "roughnessValue": 0.699999988079071, + "metallicValue": 0.699999988079071, + "emissiveValue": 0.0, + "albedoMapFactor": 1.0, + "metallicMapFactor": 1.0, + "roughnessMapFactor": 0.0, + "normalMapFactor": 1.0, + "aoMapFactor": 1.0, + "emissiveMapFactor": 1.0, + "alphaCutOff": 0.4000000059604645, + "workflow": 1.0, + "shader": "//CoreShaders/ForwardPBR.shader" + } + } + } + }, + "value88": 0, + "value89": 0 } \ No newline at end of file diff --git a/ExampleProject/Example.lmproj b/ExampleProject/Example.lmproj index 23bb0110e..ea6048311 100644 --- a/ExampleProject/Example.lmproj +++ b/ExampleProject/Example.lmproj @@ -17,9 +17,9 @@ "//Scenes/Sponza", "//Scenes/Platformer" ], - "SceneIndex": 1, + "SceneIndex": 0, "Borderless": false, - "EngineAssetPath": "C:/Dev/Lumos-Dev/Lumos/Assets/", + "EngineAssetPath": "/Users/jmorton/Dev/Lumos/Lumos/Assets/", "GPUIndex": -1 } } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/BRDFLUT.frag b/Lumos/Assets/Shaders/BRDFLUT.frag index 0c477156b..3478a60c7 100644 --- a/Lumos/Assets/Shaders/BRDFLUT.frag +++ b/Lumos/Assets/Shaders/BRDFLUT.frag @@ -1,15 +1,11 @@ #version 450 -#include "Common.glslh" +#include "PBR.glslh" #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable //https://www.shadertoy.com/view/3lXXDB -float saturate(float x) { - return clamp(x, 0.0, 1.0); -} - // Taken from https://github.com/SaschaWillems/Vulkan-glTF-PBR/blob/master/data/shaders/genbrdflut.frag // Based on http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html vec2 hammersley(uint i, uint N) @@ -24,26 +20,6 @@ vec2 hammersley(uint i, uint N) return vec2(float(i) /float(N), rdi); } -// From the filament docs. Geometric Shadowing function -// https://google.github.io/filament/Filament.html#toc4.4.2 -float G_Smith(float NoV, float NoL, float roughness) -{ - float k = (roughness * roughness) / 2.0; - float GGXL = NoL / (NoL * (1.0 - k) + k); - float GGXV = NoV / (NoV * (1.0 - k) + k); - return GGXL * GGXV; -} - -// From the filament docs. Geometric Shadowing function -// https://google.github.io/filament/Filament.html#toc4.4.2 -float V_SmithGGXCorrelated(float NoV, float NoL, float roughness) { - float a2 = pow(roughness, 4.0); - float GGXV = NoL * sqrt(NoV * NoV * (1.0 - a2) + a2); - float GGXL = NoV * sqrt(NoL * NoL * (1.0 - a2) + a2); - return 0.5 / (GGXV + GGXL); -} - - // Based on Karis 2014 vec3 importanceSampleGGX(vec2 Xi, float roughness, vec3 N) { @@ -116,9 +92,9 @@ void main() vec2 res = integrateBRDF(a, mu); // Single Scatter Energy - //fragColor = vec4(vec3(res.x + res.y), 1.0); + //outFrag = vec4(vec3(res.x + res.y), 1.0); // Scale and Bias for F0 (as per Karis 2014) - outFrag = vec4(res.x, res.y, 0.0, 1.0); + outFrag = vec4(res.x, res.y, 0.0, 1.0); } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/Bloom.frag b/Lumos/Assets/Shaders/Bloom.frag index b3e99cae4..868f0b3d2 100644 --- a/Lumos/Assets/Shaders/Bloom.frag +++ b/Lumos/Assets/Shaders/Bloom.frag @@ -22,6 +22,67 @@ layout(push_constant) uniform Uniforms const float Epsilon = 1.0e-4; +float Luminance(vec3 rgb) +{ + return dot(rgb, vec3(0.2126, 0.7152, 0.0722)); +} + +vec3 Karis(vec3 hdr) +{ + const float avg = 1.0f / (1.0f + (Luminance(hdr) * 0.25)); + return hdr * avg; +} + + +/// downsampleBox13 with Partial Karis Average +/// Uses the weighted avarage for the 5 h4x4box +vec4 DownsampleBox13Balanced(sampler2D tex, vec2 uv, vec2 pixelSize) { + + // . . . . . . . + // . A . B . C . + // . . D . E . . + // . F . G . H . + // . . I . J . . + // . K . L . M . + // . . . . . . . + + vec4 A = texture(tex, uv + pixelSize * vec2(-1.0, -1.0)); + vec4 B = texture(tex, uv + pixelSize * vec2(+0.0, -1.0)); + vec4 C = texture(tex, uv + pixelSize * vec2(+1.0, -1.0)); + vec4 D = texture(tex, uv + pixelSize * vec2(-0.5, -0.5)); + vec4 E = texture(tex, uv + pixelSize * vec2(+0.5, -0.5)); + vec4 F = texture(tex, uv + pixelSize * vec2(-1.0, +0.0)); + vec4 G = texture(tex, uv + pixelSize * vec2(+0.0, +0.0)); + vec4 H = texture(tex, uv + pixelSize * vec2(+1.0, +0.0)); + vec4 I = texture(tex, uv + pixelSize * vec2(-0.5, +0.5)); + vec4 J = texture(tex, uv + pixelSize * vec2(+0.5, +0.5)); + vec4 K = texture(tex, uv + pixelSize * vec2(-1.0, +1.0)); + vec4 L = texture(tex, uv + pixelSize * vec2(+0.0, +1.0)); + vec4 M = texture(tex, uv + pixelSize * vec2(+1.0, +1.0)); + + vec4 hboxCC = (D + E + J + I) / 4.0; + vec4 hboxTL = (A + B + G + F) / 4.0; + vec4 hboxTR = (B + C + H + G) / 4.0; + vec4 hboxBL = (F + G + L + K) / 4.0; + vec4 hboxBR = (G + H + M + L) / 4.0; + + // weight = contribution * 1.0 / (1.0 + brigthness); + float weightCC = 0.500 * 1.0 / (1.0 + max(hboxCC.r, max(hboxCC.g, hboxCC.b))); + float weightTL = 0.125 * 1.0 / (1.0 + max(hboxTL.r, max(hboxTL.g, hboxTL.b))); + float weightTR = 0.125 * 1.0 / (1.0 + max(hboxTR.r, max(hboxTR.g, hboxTR.b))); + float weightBL = 0.125 * 1.0 / (1.0 + max(hboxBL.r, max(hboxBL.g, hboxBL.b))); + float weightBR = 0.125 * 1.0 / (1.0 + max(hboxBR.r, max(hboxBR.g, hboxBR.b))); + + float weightSum = weightCC + weightTL + weightTR + weightBL + weightBR; + + return + (weightCC / weightSum) * hboxCC + + (weightTL / weightSum) * hboxTL + + (weightTR / weightSum) * hboxTR + + (weightBL / weightSum) * hboxBL + + (weightBR / weightSum) * hboxBR; +} + vec3 DownsampleBox13(sampler2D tex, float lod, vec2 uv, vec2 texelSize) { // Center @@ -47,20 +108,22 @@ vec3 DownsampleBox13(sampler2D tex, float lod, vec2 uv, vec2 texelSize) // Weights vec3 result = vec3(0.0); - // Inner box - result += (B + C + D + E) * 0.5f; - // Bottom-left box - result += (F + G + A + M) * 0.125f; - // Top-left box - result += (G + H + I + A) * 0.125f; - // Top-right box - result += (A + I + J + K) * 0.125f; - // Bottom-right box - result += (M + A + K + L) * 0.125f; - - // 4 samples each - result *= 0.25f; - + { + // Inner box + result += (B + C + D + E) * 0.5f; + // Bottom-left box + result += (F + G + A + M) * 0.125f; + // Top-left box + result += (G + H + I + A) * 0.125f; + // Top-right box + result += (A + I + J + K) * 0.125f; + // Bottom-right box + result += (M + A + K + L) * 0.125f; + + // 4 samples each + result *= 0.25f; + } + return result; } @@ -121,7 +184,7 @@ void main() if (Mode == MODE_PREFILTER) { - color.rgb = DownsampleBox13(u_Texture, 0, texCoords, 1.0f / texSize); + color.rgb = DownsampleBox13Balanced(u_Texture, texCoords, 1.0f / texSize).rgb; color = Prefilter(color, texCoords); color.a = 1.0f; } diff --git a/Lumos/Assets/Shaders/Common.glslh b/Lumos/Assets/Shaders/Common.glslh index 2372e8ee4..3bc28ed4a 100644 --- a/Lumos/Assets/Shaders/Common.glslh +++ b/Lumos/Assets/Shaders/Common.glslh @@ -1,6 +1,25 @@ #define PI 3.1415926535897932384626433832795 #define GAMMA 2.2 +const float TwoPI = 2 * PI; +const float Epsilon = 0.00001; + +float sq(float x) +{ + return x * x; +} + +float pow5(float x) +{ + float x2 = x * x; + return x2 * x2 * x; +} + +float max3(const vec3 v) +{ + return max(v.x, max(v.y, v.z)); +} + vec3 DeGamma(vec3 colour) { return pow(colour, vec3(GAMMA)); diff --git a/Lumos/Assets/Shaders/CompileShadersMac.sh b/Lumos/Assets/Shaders/CompileShadersMac.sh index ff04ce0bf..185672dd0 100755 --- a/Lumos/Assets/Shaders/CompileShadersMac.sh +++ b/Lumos/Assets/Shaders/CompileShadersMac.sh @@ -20,14 +20,14 @@ for SRC in *.vert *.frag *.comp; do # don't re-compile if existing binary is newer than source file NEWER="$(ls -t1 "$SRC" "$OUT" | head -1)" - if [ "$SRC" = "$NEWER" ]; then + #if [ "$SRC" = "$NEWER" ]; then echo "Compiling $OUT from:" $COMPILER "$SRC" -o "$OUT" #else # echo "(Unchanged $SRC)" - fi + #fi else echo "Compiling $OUT from:" $COMPILER "$SRC" -o "$OUT" diff --git a/Lumos/Assets/Shaders/CompileShadersWindows.bat b/Lumos/Assets/Shaders/CompileShadersWindows.bat index 7703ed082..0e1d45423 100644 --- a/Lumos/Assets/Shaders/CompileShadersWindows.bat +++ b/Lumos/Assets/Shaders/CompileShadersWindows.bat @@ -2,8 +2,6 @@ @echo off setLocal enableExtensions enableDelayedExpansion -dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) - set COMPILER=C:/VulkanSDK/1.3.216.0/Bin/glslc.exe set DSTDIR=CompiledSPV @@ -28,7 +26,7 @@ for %%f in (*.vert *.frag *.comp) do ( set DST_DATE=!DATE_MODIFIED! if "!SRC_DATE!" gtr "!DST_DATE!" ( - echo Compiling + echo Compiling "!SRC!" %COMPILER% "!SRC!" -o "!DST!" ) diff --git a/Lumos/Assets/Shaders/CompiledSPV/BRDFLUT.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/BRDFLUT.frag.spv index 8bd5829bb..024a19671 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/BRDFLUT.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/BRDFLUT.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Bloom.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/Bloom.frag.spv index e89e2e70c..02526b939 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/Bloom.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/Bloom.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/CreateEnvironmentMap.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/CreateEnvironmentMap.frag.spv index 4e2fb2043..ffbadb206 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/CreateEnvironmentMap.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/CreateEnvironmentMap.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/DepthOfField.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/DepthOfField.frag.spv index b6451afee..01dad16a5 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/DepthOfField.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/DepthOfField.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/DepthPrePass.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/DepthPrePass.frag.spv index dd1b3a969..56acbecf2 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/DepthPrePass.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/DepthPrePass.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/EnvironmentIrradiance.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/EnvironmentIrradiance.frag.spv new file mode 100644 index 000000000..1e0c0ea4b Binary files /dev/null and b/Lumos/Assets/Shaders/CompiledSPV/EnvironmentIrradiance.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/EnvironmentMipFilter.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/EnvironmentMipFilter.frag.spv new file mode 100644 index 000000000..ee0eb88fc Binary files /dev/null and b/Lumos/Assets/Shaders/CompiledSPV/EnvironmentMipFilter.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.frag.spv index b0f8d0582..bbb454eed 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.vert.spv index f1d3164fc..7693c9d00 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.vert.spv and b/Lumos/Assets/Shaders/CompiledSPV/ForwardPBR.vert.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Grid.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/Grid.vert.spv index 8e168cb20..5a475cb32 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/Grid.vert.spv and b/Lumos/Assets/Shaders/CompiledSPV/Grid.vert.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/BRDFLUTfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/BRDFLUTfragspv.hpp index d718e5086..8e524135e 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/BRDFLUTfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/BRDFLUTfragspv.hpp @@ -3,256 +3,260 @@ #include #include -constexpr uint32_t spirv_BRDFLUTfragspv_size = 7992; -constexpr std::array spirv_BRDFLUTfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x0000015F, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_BRDFLUTfragspv_size = 8116; +constexpr std::array spirv_BRDFLUTfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000167, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000014A, 0x00000159, 0x00030010, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000014F, 0x0000015E, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000A, 0x75746173, -0x65746172, 0x3B316628, 0x00000000, 0x00030005, 0x00000009, 0x00000078, 0x00070005, 0x00000012, -0x6D6D6168, 0x6C737265, 0x75287965, 0x31753B31, 0x0000003B, 0x00030005, 0x00000010, 0x00000069, -0x00030005, 0x00000011, 0x0000004E, 0x000A0005, 0x00000018, 0x6D535F56, 0x47687469, 0x6F435847, -0x6C657272, 0x64657461, 0x3B316628, 0x663B3166, 0x00003B31, 0x00030005, 0x00000015, 0x00566F4E, -0x00030005, 0x00000016, 0x004C6F4E, 0x00050005, 0x00000017, 0x67756F72, 0x73656E68, 0x00000073, -0x000A0005, 0x00000021, 0x6F706D69, 0x6E617472, 0x61536563, 0x656C706D, 0x28584747, 0x3B326676, -0x763B3166, 0x003B3366, 0x00030005, 0x0000001E, 0x00006958, 0x00050005, 0x0000001F, 0x67756F72, -0x73656E68, 0x00000073, 0x00030005, 0x00000020, 0x0000004E, 0x00080005, 0x00000026, 0x65746E69, -0x74617267, 0x44524265, 0x31662846, 0x3B31663B, 0x00000000, 0x00050005, 0x00000024, 0x67756F72, -0x73656E68, 0x00000073, 0x00030005, 0x00000025, 0x00566F4E, 0x00040005, 0x0000002E, 0x73746962, -0x00000000, 0x00030005, 0x0000005D, 0x00696472, 0x00030005, 0x0000006B, 0x00003261, 0x00040005, -0x0000006F, 0x56584747, 0x00000000, 0x00040005, 0x0000007B, 0x4C584747, 0x00000000, 0x00030005, -0x0000008E, 0x00000061, 0x00030005, 0x00000092, 0x00696850, 0x00050005, 0x00000098, 0x54736F43, -0x61746568, 0x00000000, 0x00050005, 0x000000A6, 0x546E6953, 0x61746568, 0x00000000, 0x00030005, -0x000000AC, 0x00000048, 0x00050005, 0x000000B9, 0x65567055, 0x726F7463, 0x00000000, 0x00050005, -0x000000C5, 0x676E6154, 0x58746E65, 0x00000000, 0x00050005, 0x000000CA, 0x676E6154, 0x59746E65, -0x00000000, 0x00030005, 0x000000DE, 0x00000056, 0x00030005, 0x000000E8, 0x00000041, 0x00030005, -0x000000E9, 0x00000042, 0x00030005, 0x000000EA, 0x00000069, 0x00030005, 0x000000F3, 0x00006958, -0x00040005, 0x000000F4, 0x61726170, 0x0000006D, 0x00040005, 0x000000F6, 0x61726170, 0x0000006D, -0x00030005, 0x000000F8, 0x00000048, 0x00040005, 0x000000F9, 0x61726170, 0x0000006D, 0x00040005, -0x000000FB, 0x61726170, 0x0000006D, 0x00040005, 0x000000FD, 0x61726170, 0x0000006D, 0x00030005, -0x000000FF, 0x0000004C, 0x00030005, 0x00000109, 0x004C6F4E, 0x00040005, 0x0000010C, 0x61726170, -0x0000006D, 0x00030005, 0x0000010E, 0x00486F4E, 0x00040005, 0x00000111, 0x61726170, 0x0000006D, -0x00030005, 0x00000113, 0x00486F56, 0x00040005, 0x00000117, 0x61726170, 0x0000006D, 0x00040005, -0x0000011D, 0x64705F56, 0x00000066, 0x00040005, 0x0000011E, 0x61726170, 0x0000006D, 0x00040005, -0x00000120, 0x61726170, 0x0000006D, 0x00040005, 0x00000122, 0x61726170, 0x0000006D, 0x00030005, -0x0000012B, 0x00006346, 0x00030005, 0x00000148, 0x00000061, 0x00050005, 0x0000014A, 0x5474756F, -0x6F437865, 0x0064726F, 0x00030005, 0x0000014E, 0x0000756D, 0x00030005, 0x00000151, 0x00736572, -0x00040005, 0x00000152, 0x61726170, 0x0000006D, 0x00040005, 0x00000154, 0x61726170, 0x0000006D, -0x00040005, 0x00000159, 0x4674756F, 0x00676172, 0x00040047, 0x0000014A, 0x0000001E, 0x00000000, -0x00040047, 0x00000159, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, -0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, -0x00040021, 0x00000008, 0x00000006, 0x00000007, 0x00040015, 0x0000000C, 0x00000020, 0x00000000, -0x00040020, 0x0000000D, 0x00000007, 0x0000000C, 0x00040017, 0x0000000E, 0x00000006, 0x00000002, -0x00050021, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000D, 0x00060021, 0x00000014, 0x00000006, -0x00000007, 0x00000007, 0x00000007, 0x00040020, 0x0000001A, 0x00000007, 0x0000000E, 0x00040017, -0x0000001B, 0x00000006, 0x00000003, 0x00040020, 0x0000001C, 0x00000007, 0x0000001B, 0x00060021, -0x0000001D, 0x0000001B, 0x0000001A, 0x00000007, 0x0000001C, 0x00050021, 0x00000023, 0x0000000E, -0x00000007, 0x00000007, 0x0004002B, 0x00000006, 0x00000029, 0x00000000, 0x0004002B, 0x00000006, -0x0000002A, 0x3F800000, 0x0004002B, 0x0000000C, 0x00000030, 0x00000010, 0x0004002B, 0x0000000C, -0x00000036, 0x55555555, 0x0004002B, 0x0000000C, 0x00000038, 0x00000001, 0x0004002B, 0x0000000C, -0x0000003B, 0xAAAAAAAA, 0x0004002B, 0x0000000C, 0x00000040, 0x33333333, 0x0004002B, 0x0000000C, -0x00000042, 0x00000002, 0x0004002B, 0x0000000C, 0x00000045, 0xCCCCCCCC, 0x0004002B, 0x0000000C, -0x0000004A, 0x0F0F0F0F, 0x0004002B, 0x0000000C, 0x0000004C, 0x00000004, 0x0004002B, 0x0000000C, -0x0000004F, 0xF0F0F0F0, 0x0004002B, 0x0000000C, 0x00000054, 0x00FF00FF, 0x0004002B, 0x0000000C, -0x00000056, 0x00000008, 0x0004002B, 0x0000000C, 0x00000059, 0xFF00FF00, 0x0004002B, 0x00000006, -0x00000060, 0x2F800000, 0x0004002B, 0x00000006, 0x0000006D, 0x40800000, 0x0004002B, 0x00000006, -0x00000087, 0x3F000000, 0x0004002B, 0x00000006, 0x00000093, 0x40C90FDB, 0x0004002B, 0x0000000C, -0x00000094, 0x00000000, 0x0004002B, 0x00000006, 0x000000BD, 0x3F7FBE77, 0x00020014, 0x000000BE, -0x0006002C, 0x0000001B, 0x000000C0, 0x00000029, 0x00000029, 0x0000002A, 0x0006002C, 0x0000001B, -0x000000C1, 0x0000002A, 0x00000029, 0x00000029, 0x00040017, 0x000000C2, 0x000000BE, 0x00000003, -0x0004002B, 0x0000000C, 0x000000F1, 0x00000400, 0x0004002B, 0x00000006, 0x00000100, 0x40000000, -0x0004002B, 0x00000006, 0x0000012E, 0x40A00000, 0x00040015, 0x0000013C, 0x00000020, 0x00000001, -0x0004002B, 0x0000013C, 0x0000013D, 0x00000001, 0x0004002B, 0x00000006, 0x00000143, 0x44800000, -0x00040020, 0x00000149, 0x00000001, 0x0000000E, 0x0004003B, 0x00000149, 0x0000014A, 0x00000001, -0x00040020, 0x0000014B, 0x00000001, 0x00000006, 0x00040017, 0x00000157, 0x00000006, 0x00000004, -0x00040020, 0x00000158, 0x00000003, 0x00000157, 0x0004003B, 0x00000158, 0x00000159, 0x00000003, -0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, -0x00000007, 0x00000148, 0x00000007, 0x0004003B, 0x00000007, 0x0000014E, 0x00000007, 0x0004003B, -0x0000001A, 0x00000151, 0x00000007, 0x0004003B, 0x00000007, 0x00000152, 0x00000007, 0x0004003B, -0x00000007, 0x00000154, 0x00000007, 0x00050041, 0x0000014B, 0x0000014C, 0x0000014A, 0x00000038, -0x0004003D, 0x00000006, 0x0000014D, 0x0000014C, 0x0003003E, 0x00000148, 0x0000014D, 0x00050041, -0x0000014B, 0x0000014F, 0x0000014A, 0x00000094, 0x0004003D, 0x00000006, 0x00000150, 0x0000014F, -0x0003003E, 0x0000014E, 0x00000150, 0x0004003D, 0x00000006, 0x00000153, 0x00000148, 0x0003003E, -0x00000152, 0x00000153, 0x0004003D, 0x00000006, 0x00000155, 0x0000014E, 0x0003003E, 0x00000154, -0x00000155, 0x00060039, 0x0000000E, 0x00000156, 0x00000026, 0x00000152, 0x00000154, 0x0003003E, -0x00000151, 0x00000156, 0x00050041, 0x00000007, 0x0000015A, 0x00000151, 0x00000094, 0x0004003D, -0x00000006, 0x0000015B, 0x0000015A, 0x00050041, 0x00000007, 0x0000015C, 0x00000151, 0x00000038, -0x0004003D, 0x00000006, 0x0000015D, 0x0000015C, 0x00070050, 0x00000157, 0x0000015E, 0x0000015B, -0x0000015D, 0x00000029, 0x0000002A, 0x0003003E, 0x00000159, 0x0000015E, 0x000100FD, 0x00010038, -0x00050036, 0x00000006, 0x0000000A, 0x00000000, 0x00000008, 0x00030037, 0x00000007, 0x00000009, -0x000200F8, 0x0000000B, 0x0004003D, 0x00000006, 0x00000028, 0x00000009, 0x0008000C, 0x00000006, -0x0000002B, 0x00000001, 0x0000002B, 0x00000028, 0x00000029, 0x0000002A, 0x000200FE, 0x0000002B, -0x00010038, 0x00050036, 0x0000000E, 0x00000012, 0x00000000, 0x0000000F, 0x00030037, 0x0000000D, -0x00000010, 0x00030037, 0x0000000D, 0x00000011, 0x000200F8, 0x00000013, 0x0004003B, 0x0000000D, -0x0000002E, 0x00000007, 0x0004003B, 0x00000007, 0x0000005D, 0x00000007, 0x0004003D, 0x0000000C, -0x0000002F, 0x00000010, 0x000500C4, 0x0000000C, 0x00000031, 0x0000002F, 0x00000030, 0x0004003D, -0x0000000C, 0x00000032, 0x00000010, 0x000500C2, 0x0000000C, 0x00000033, 0x00000032, 0x00000030, -0x000500C5, 0x0000000C, 0x00000034, 0x00000031, 0x00000033, 0x0003003E, 0x0000002E, 0x00000034, -0x0004003D, 0x0000000C, 0x00000035, 0x0000002E, 0x000500C7, 0x0000000C, 0x00000037, 0x00000035, -0x00000036, 0x000500C4, 0x0000000C, 0x00000039, 0x00000037, 0x00000038, 0x0004003D, 0x0000000C, -0x0000003A, 0x0000002E, 0x000500C7, 0x0000000C, 0x0000003C, 0x0000003A, 0x0000003B, 0x000500C2, -0x0000000C, 0x0000003D, 0x0000003C, 0x00000038, 0x000500C5, 0x0000000C, 0x0000003E, 0x00000039, -0x0000003D, 0x0003003E, 0x0000002E, 0x0000003E, 0x0004003D, 0x0000000C, 0x0000003F, 0x0000002E, -0x000500C7, 0x0000000C, 0x00000041, 0x0000003F, 0x00000040, 0x000500C4, 0x0000000C, 0x00000043, -0x00000041, 0x00000042, 0x0004003D, 0x0000000C, 0x00000044, 0x0000002E, 0x000500C7, 0x0000000C, -0x00000046, 0x00000044, 0x00000045, 0x000500C2, 0x0000000C, 0x00000047, 0x00000046, 0x00000042, -0x000500C5, 0x0000000C, 0x00000048, 0x00000043, 0x00000047, 0x0003003E, 0x0000002E, 0x00000048, -0x0004003D, 0x0000000C, 0x00000049, 0x0000002E, 0x000500C7, 0x0000000C, 0x0000004B, 0x00000049, -0x0000004A, 0x000500C4, 0x0000000C, 0x0000004D, 0x0000004B, 0x0000004C, 0x0004003D, 0x0000000C, -0x0000004E, 0x0000002E, 0x000500C7, 0x0000000C, 0x00000050, 0x0000004E, 0x0000004F, 0x000500C2, -0x0000000C, 0x00000051, 0x00000050, 0x0000004C, 0x000500C5, 0x0000000C, 0x00000052, 0x0000004D, -0x00000051, 0x0003003E, 0x0000002E, 0x00000052, 0x0004003D, 0x0000000C, 0x00000053, 0x0000002E, -0x000500C7, 0x0000000C, 0x00000055, 0x00000053, 0x00000054, 0x000500C4, 0x0000000C, 0x00000057, -0x00000055, 0x00000056, 0x0004003D, 0x0000000C, 0x00000058, 0x0000002E, 0x000500C7, 0x0000000C, -0x0000005A, 0x00000058, 0x00000059, 0x000500C2, 0x0000000C, 0x0000005B, 0x0000005A, 0x00000056, -0x000500C5, 0x0000000C, 0x0000005C, 0x00000057, 0x0000005B, 0x0003003E, 0x0000002E, 0x0000005C, -0x0004003D, 0x0000000C, 0x0000005E, 0x0000002E, 0x00040070, 0x00000006, 0x0000005F, 0x0000005E, -0x00050085, 0x00000006, 0x00000061, 0x0000005F, 0x00000060, 0x0003003E, 0x0000005D, 0x00000061, -0x0004003D, 0x0000000C, 0x00000062, 0x00000010, 0x00040070, 0x00000006, 0x00000063, 0x00000062, -0x0004003D, 0x0000000C, 0x00000064, 0x00000011, 0x00040070, 0x00000006, 0x00000065, 0x00000064, -0x00050088, 0x00000006, 0x00000066, 0x00000063, 0x00000065, 0x0004003D, 0x00000006, 0x00000067, -0x0000005D, 0x00050050, 0x0000000E, 0x00000068, 0x00000066, 0x00000067, 0x000200FE, 0x00000068, -0x00010038, 0x00050036, 0x00000006, 0x00000018, 0x00000000, 0x00000014, 0x00030037, 0x00000007, -0x00000015, 0x00030037, 0x00000007, 0x00000016, 0x00030037, 0x00000007, 0x00000017, 0x000200F8, -0x00000019, 0x0004003B, 0x00000007, 0x0000006B, 0x00000007, 0x0004003B, 0x00000007, 0x0000006F, -0x00000007, 0x0004003B, 0x00000007, 0x0000007B, 0x00000007, 0x0004003D, 0x00000006, 0x0000006C, -0x00000017, 0x0007000C, 0x00000006, 0x0000006E, 0x00000001, 0x0000001A, 0x0000006C, 0x0000006D, -0x0003003E, 0x0000006B, 0x0000006E, 0x0004003D, 0x00000006, 0x00000070, 0x00000016, 0x0004003D, -0x00000006, 0x00000071, 0x00000015, 0x0004003D, 0x00000006, 0x00000072, 0x00000015, 0x00050085, -0x00000006, 0x00000073, 0x00000071, 0x00000072, 0x0004003D, 0x00000006, 0x00000074, 0x0000006B, -0x00050083, 0x00000006, 0x00000075, 0x0000002A, 0x00000074, 0x00050085, 0x00000006, 0x00000076, -0x00000073, 0x00000075, 0x0004003D, 0x00000006, 0x00000077, 0x0000006B, 0x00050081, 0x00000006, -0x00000078, 0x00000076, 0x00000077, 0x0006000C, 0x00000006, 0x00000079, 0x00000001, 0x0000001F, -0x00000078, 0x00050085, 0x00000006, 0x0000007A, 0x00000070, 0x00000079, 0x0003003E, 0x0000006F, -0x0000007A, 0x0004003D, 0x00000006, 0x0000007C, 0x00000015, 0x0004003D, 0x00000006, 0x0000007D, -0x00000016, 0x0004003D, 0x00000006, 0x0000007E, 0x00000016, 0x00050085, 0x00000006, 0x0000007F, -0x0000007D, 0x0000007E, 0x0004003D, 0x00000006, 0x00000080, 0x0000006B, 0x00050083, 0x00000006, -0x00000081, 0x0000002A, 0x00000080, 0x00050085, 0x00000006, 0x00000082, 0x0000007F, 0x00000081, -0x0004003D, 0x00000006, 0x00000083, 0x0000006B, 0x00050081, 0x00000006, 0x00000084, 0x00000082, -0x00000083, 0x0006000C, 0x00000006, 0x00000085, 0x00000001, 0x0000001F, 0x00000084, 0x00050085, -0x00000006, 0x00000086, 0x0000007C, 0x00000085, 0x0003003E, 0x0000007B, 0x00000086, 0x0004003D, -0x00000006, 0x00000088, 0x0000006F, 0x0004003D, 0x00000006, 0x00000089, 0x0000007B, 0x00050081, -0x00000006, 0x0000008A, 0x00000088, 0x00000089, 0x00050088, 0x00000006, 0x0000008B, 0x00000087, -0x0000008A, 0x000200FE, 0x0000008B, 0x00010038, 0x00050036, 0x0000001B, 0x00000021, 0x00000000, -0x0000001D, 0x00030037, 0x0000001A, 0x0000001E, 0x00030037, 0x00000007, 0x0000001F, 0x00030037, -0x0000001C, 0x00000020, 0x000200F8, 0x00000022, 0x0004003B, 0x00000007, 0x0000008E, 0x00000007, -0x0004003B, 0x00000007, 0x00000092, 0x00000007, 0x0004003B, 0x00000007, 0x00000098, 0x00000007, -0x0004003B, 0x00000007, 0x000000A6, 0x00000007, 0x0004003B, 0x0000001C, 0x000000AC, 0x00000007, -0x0004003B, 0x0000001C, 0x000000B9, 0x00000007, 0x0004003B, 0x0000001C, 0x000000C5, 0x00000007, -0x0004003B, 0x0000001C, 0x000000CA, 0x00000007, 0x0004003D, 0x00000006, 0x0000008F, 0x0000001F, -0x0004003D, 0x00000006, 0x00000090, 0x0000001F, 0x00050085, 0x00000006, 0x00000091, 0x0000008F, -0x00000090, 0x0003003E, 0x0000008E, 0x00000091, 0x00050041, 0x00000007, 0x00000095, 0x0000001E, -0x00000094, 0x0004003D, 0x00000006, 0x00000096, 0x00000095, 0x00050085, 0x00000006, 0x00000097, -0x00000093, 0x00000096, 0x0003003E, 0x00000092, 0x00000097, 0x00050041, 0x00000007, 0x00000099, -0x0000001E, 0x00000038, 0x0004003D, 0x00000006, 0x0000009A, 0x00000099, 0x00050083, 0x00000006, -0x0000009B, 0x0000002A, 0x0000009A, 0x0004003D, 0x00000006, 0x0000009C, 0x0000008E, 0x0004003D, -0x00000006, 0x0000009D, 0x0000008E, 0x00050085, 0x00000006, 0x0000009E, 0x0000009C, 0x0000009D, -0x00050083, 0x00000006, 0x0000009F, 0x0000009E, 0x0000002A, 0x00050041, 0x00000007, 0x000000A0, -0x0000001E, 0x00000038, 0x0004003D, 0x00000006, 0x000000A1, 0x000000A0, 0x00050085, 0x00000006, -0x000000A2, 0x0000009F, 0x000000A1, 0x00050081, 0x00000006, 0x000000A3, 0x0000002A, 0x000000A2, -0x00050088, 0x00000006, 0x000000A4, 0x0000009B, 0x000000A3, 0x0006000C, 0x00000006, 0x000000A5, -0x00000001, 0x0000001F, 0x000000A4, 0x0003003E, 0x00000098, 0x000000A5, 0x0004003D, 0x00000006, -0x000000A7, 0x00000098, 0x0004003D, 0x00000006, 0x000000A8, 0x00000098, 0x00050085, 0x00000006, -0x000000A9, 0x000000A7, 0x000000A8, 0x00050083, 0x00000006, 0x000000AA, 0x0000002A, 0x000000A9, -0x0006000C, 0x00000006, 0x000000AB, 0x00000001, 0x0000001F, 0x000000AA, 0x0003003E, 0x000000A6, -0x000000AB, 0x0004003D, 0x00000006, 0x000000AD, 0x000000A6, 0x0004003D, 0x00000006, 0x000000AE, -0x00000092, 0x0006000C, 0x00000006, 0x000000AF, 0x00000001, 0x0000000E, 0x000000AE, 0x00050085, -0x00000006, 0x000000B0, 0x000000AD, 0x000000AF, 0x00050041, 0x00000007, 0x000000B1, 0x000000AC, -0x00000094, 0x0003003E, 0x000000B1, 0x000000B0, 0x0004003D, 0x00000006, 0x000000B2, 0x000000A6, -0x0004003D, 0x00000006, 0x000000B3, 0x00000092, 0x0006000C, 0x00000006, 0x000000B4, 0x00000001, -0x0000000D, 0x000000B3, 0x00050085, 0x00000006, 0x000000B5, 0x000000B2, 0x000000B4, 0x00050041, -0x00000007, 0x000000B6, 0x000000AC, 0x00000038, 0x0003003E, 0x000000B6, 0x000000B5, 0x0004003D, -0x00000006, 0x000000B7, 0x00000098, 0x00050041, 0x00000007, 0x000000B8, 0x000000AC, 0x00000042, -0x0003003E, 0x000000B8, 0x000000B7, 0x00050041, 0x00000007, 0x000000BA, 0x00000020, 0x00000042, -0x0004003D, 0x00000006, 0x000000BB, 0x000000BA, 0x0006000C, 0x00000006, 0x000000BC, 0x00000001, -0x00000004, 0x000000BB, 0x000500B8, 0x000000BE, 0x000000BF, 0x000000BC, 0x000000BD, 0x00060050, -0x000000C2, 0x000000C3, 0x000000BF, 0x000000BF, 0x000000BF, 0x000600A9, 0x0000001B, 0x000000C4, -0x000000C3, 0x000000C0, 0x000000C1, 0x0003003E, 0x000000B9, 0x000000C4, 0x0004003D, 0x0000001B, -0x000000C6, 0x000000B9, 0x0004003D, 0x0000001B, 0x000000C7, 0x00000020, 0x0007000C, 0x0000001B, -0x000000C8, 0x00000001, 0x00000044, 0x000000C6, 0x000000C7, 0x0006000C, 0x0000001B, 0x000000C9, -0x00000001, 0x00000045, 0x000000C8, 0x0003003E, 0x000000C5, 0x000000C9, 0x0004003D, 0x0000001B, -0x000000CB, 0x00000020, 0x0004003D, 0x0000001B, 0x000000CC, 0x000000C5, 0x0007000C, 0x0000001B, -0x000000CD, 0x00000001, 0x00000044, 0x000000CB, 0x000000CC, 0x0003003E, 0x000000CA, 0x000000CD, -0x0004003D, 0x0000001B, 0x000000CE, 0x000000C5, 0x00050041, 0x00000007, 0x000000CF, 0x000000AC, -0x00000094, 0x0004003D, 0x00000006, 0x000000D0, 0x000000CF, 0x0005008E, 0x0000001B, 0x000000D1, -0x000000CE, 0x000000D0, 0x0004003D, 0x0000001B, 0x000000D2, 0x000000CA, 0x00050041, 0x00000007, -0x000000D3, 0x000000AC, 0x00000038, 0x0004003D, 0x00000006, 0x000000D4, 0x000000D3, 0x0005008E, -0x0000001B, 0x000000D5, 0x000000D2, 0x000000D4, 0x00050081, 0x0000001B, 0x000000D6, 0x000000D1, -0x000000D5, 0x0004003D, 0x0000001B, 0x000000D7, 0x00000020, 0x00050041, 0x00000007, 0x000000D8, -0x000000AC, 0x00000042, 0x0004003D, 0x00000006, 0x000000D9, 0x000000D8, 0x0005008E, 0x0000001B, -0x000000DA, 0x000000D7, 0x000000D9, 0x00050081, 0x0000001B, 0x000000DB, 0x000000D6, 0x000000DA, -0x000200FE, 0x000000DB, 0x00010038, 0x00050036, 0x0000000E, 0x00000026, 0x00000000, 0x00000023, -0x00030037, 0x00000007, 0x00000024, 0x00030037, 0x00000007, 0x00000025, 0x000200F8, 0x00000027, -0x0004003B, 0x0000001C, 0x000000DE, 0x00000007, 0x0004003B, 0x00000007, 0x000000E8, 0x00000007, -0x0004003B, 0x00000007, 0x000000E9, 0x00000007, 0x0004003B, 0x0000000D, 0x000000EA, 0x00000007, -0x0004003B, 0x0000001A, 0x000000F3, 0x00000007, 0x0004003B, 0x0000000D, 0x000000F4, 0x00000007, -0x0004003B, 0x0000000D, 0x000000F6, 0x00000007, 0x0004003B, 0x0000001C, 0x000000F8, 0x00000007, -0x0004003B, 0x0000001A, 0x000000F9, 0x00000007, 0x0004003B, 0x00000007, 0x000000FB, 0x00000007, -0x0004003B, 0x0000001C, 0x000000FD, 0x00000007, 0x0004003B, 0x0000001C, 0x000000FF, 0x00000007, -0x0004003B, 0x00000007, 0x00000109, 0x00000007, 0x0004003B, 0x00000007, 0x0000010C, 0x00000007, -0x0004003B, 0x00000007, 0x0000010E, 0x00000007, 0x0004003B, 0x00000007, 0x00000111, 0x00000007, -0x0004003B, 0x00000007, 0x00000113, 0x00000007, 0x0004003B, 0x00000007, 0x00000117, 0x00000007, -0x0004003B, 0x00000007, 0x0000011D, 0x00000007, 0x0004003B, 0x00000007, 0x0000011E, 0x00000007, -0x0004003B, 0x00000007, 0x00000120, 0x00000007, 0x0004003B, 0x00000007, 0x00000122, 0x00000007, -0x0004003B, 0x00000007, 0x0000012B, 0x00000007, 0x0004003D, 0x00000006, 0x000000DF, 0x00000025, -0x0004003D, 0x00000006, 0x000000E0, 0x00000025, 0x00050085, 0x00000006, 0x000000E1, 0x000000DF, -0x000000E0, 0x00050083, 0x00000006, 0x000000E2, 0x0000002A, 0x000000E1, 0x0006000C, 0x00000006, -0x000000E3, 0x00000001, 0x0000001F, 0x000000E2, 0x00050041, 0x00000007, 0x000000E4, 0x000000DE, -0x00000094, 0x0003003E, 0x000000E4, 0x000000E3, 0x00050041, 0x00000007, 0x000000E5, 0x000000DE, -0x00000038, 0x0003003E, 0x000000E5, 0x00000029, 0x0004003D, 0x00000006, 0x000000E6, 0x00000025, -0x00050041, 0x00000007, 0x000000E7, 0x000000DE, 0x00000042, 0x0003003E, 0x000000E7, 0x000000E6, -0x0003003E, 0x000000E8, 0x00000029, 0x0003003E, 0x000000E9, 0x00000029, 0x0003003E, 0x000000EA, -0x00000094, 0x000200F9, 0x000000EB, 0x000200F8, 0x000000EB, 0x000400F6, 0x000000ED, 0x000000EE, -0x00000000, 0x000200F9, 0x000000EF, 0x000200F8, 0x000000EF, 0x0004003D, 0x0000000C, 0x000000F0, -0x000000EA, 0x000500B0, 0x000000BE, 0x000000F2, 0x000000F0, 0x000000F1, 0x000400FA, 0x000000F2, -0x000000EC, 0x000000ED, 0x000200F8, 0x000000EC, 0x0004003D, 0x0000000C, 0x000000F5, 0x000000EA, -0x0003003E, 0x000000F4, 0x000000F5, 0x0003003E, 0x000000F6, 0x000000F1, 0x00060039, 0x0000000E, -0x000000F7, 0x00000012, 0x000000F4, 0x000000F6, 0x0003003E, 0x000000F3, 0x000000F7, 0x0004003D, -0x0000000E, 0x000000FA, 0x000000F3, 0x0003003E, 0x000000F9, 0x000000FA, 0x0004003D, 0x00000006, -0x000000FC, 0x00000024, 0x0003003E, 0x000000FB, 0x000000FC, 0x0003003E, 0x000000FD, 0x000000C0, -0x00070039, 0x0000001B, 0x000000FE, 0x00000021, 0x000000F9, 0x000000FB, 0x000000FD, 0x0003003E, -0x000000F8, 0x000000FE, 0x0004003D, 0x0000001B, 0x00000101, 0x000000DE, 0x0004003D, 0x0000001B, -0x00000102, 0x000000F8, 0x00050094, 0x00000006, 0x00000103, 0x00000101, 0x00000102, 0x00050085, -0x00000006, 0x00000104, 0x00000100, 0x00000103, 0x0004003D, 0x0000001B, 0x00000105, 0x000000F8, -0x0005008E, 0x0000001B, 0x00000106, 0x00000105, 0x00000104, 0x0004003D, 0x0000001B, 0x00000107, -0x000000DE, 0x00050083, 0x0000001B, 0x00000108, 0x00000106, 0x00000107, 0x0003003E, 0x000000FF, -0x00000108, 0x0004003D, 0x0000001B, 0x0000010A, 0x000000FF, 0x00050094, 0x00000006, 0x0000010B, -0x000000C0, 0x0000010A, 0x0003003E, 0x0000010C, 0x0000010B, 0x00050039, 0x00000006, 0x0000010D, -0x0000000A, 0x0000010C, 0x0003003E, 0x00000109, 0x0000010D, 0x0004003D, 0x0000001B, 0x0000010F, -0x000000F8, 0x00050094, 0x00000006, 0x00000110, 0x000000C0, 0x0000010F, 0x0003003E, 0x00000111, -0x00000110, 0x00050039, 0x00000006, 0x00000112, 0x0000000A, 0x00000111, 0x0003003E, 0x0000010E, -0x00000112, 0x0004003D, 0x0000001B, 0x00000114, 0x000000DE, 0x0004003D, 0x0000001B, 0x00000115, -0x000000F8, 0x00050094, 0x00000006, 0x00000116, 0x00000114, 0x00000115, 0x0003003E, 0x00000117, -0x00000116, 0x00050039, 0x00000006, 0x00000118, 0x0000000A, 0x00000117, 0x0003003E, 0x00000113, -0x00000118, 0x0004003D, 0x00000006, 0x00000119, 0x00000109, 0x000500BA, 0x000000BE, 0x0000011A, -0x00000119, 0x00000029, 0x000300F7, 0x0000011C, 0x00000000, 0x000400FA, 0x0000011A, 0x0000011B, -0x0000011C, 0x000200F8, 0x0000011B, 0x0004003D, 0x00000006, 0x0000011F, 0x00000025, 0x0003003E, -0x0000011E, 0x0000011F, 0x0004003D, 0x00000006, 0x00000121, 0x00000109, 0x0003003E, 0x00000120, -0x00000121, 0x0004003D, 0x00000006, 0x00000123, 0x00000024, 0x0003003E, 0x00000122, 0x00000123, -0x00070039, 0x00000006, 0x00000124, 0x00000018, 0x0000011E, 0x00000120, 0x00000122, 0x0004003D, -0x00000006, 0x00000125, 0x00000113, 0x00050085, 0x00000006, 0x00000126, 0x00000124, 0x00000125, -0x0004003D, 0x00000006, 0x00000127, 0x00000109, 0x00050085, 0x00000006, 0x00000128, 0x00000126, -0x00000127, 0x0004003D, 0x00000006, 0x00000129, 0x0000010E, 0x00050088, 0x00000006, 0x0000012A, -0x00000128, 0x00000129, 0x0003003E, 0x0000011D, 0x0000012A, 0x0004003D, 0x00000006, 0x0000012C, -0x00000113, 0x00050083, 0x00000006, 0x0000012D, 0x0000002A, 0x0000012C, 0x0007000C, 0x00000006, -0x0000012F, 0x00000001, 0x0000001A, 0x0000012D, 0x0000012E, 0x0003003E, 0x0000012B, 0x0000012F, -0x0004003D, 0x00000006, 0x00000130, 0x0000012B, 0x00050083, 0x00000006, 0x00000131, 0x0000002A, -0x00000130, 0x0004003D, 0x00000006, 0x00000132, 0x0000011D, 0x00050085, 0x00000006, 0x00000133, -0x00000131, 0x00000132, 0x0004003D, 0x00000006, 0x00000134, 0x000000E8, 0x00050081, 0x00000006, -0x00000135, 0x00000134, 0x00000133, 0x0003003E, 0x000000E8, 0x00000135, 0x0004003D, 0x00000006, -0x00000136, 0x0000012B, 0x0004003D, 0x00000006, 0x00000137, 0x0000011D, 0x00050085, 0x00000006, -0x00000138, 0x00000136, 0x00000137, 0x0004003D, 0x00000006, 0x00000139, 0x000000E9, 0x00050081, -0x00000006, 0x0000013A, 0x00000139, 0x00000138, 0x0003003E, 0x000000E9, 0x0000013A, 0x000200F9, -0x0000011C, 0x000200F8, 0x0000011C, 0x000200F9, 0x000000EE, 0x000200F8, 0x000000EE, 0x0004003D, -0x0000000C, 0x0000013B, 0x000000EA, 0x00050080, 0x0000000C, 0x0000013E, 0x0000013B, 0x0000013D, -0x0003003E, 0x000000EA, 0x0000013E, 0x000200F9, 0x000000EB, 0x000200F8, 0x000000ED, 0x0004003D, -0x00000006, 0x0000013F, 0x000000E8, 0x0004003D, 0x00000006, 0x00000140, 0x000000E9, 0x00050050, -0x0000000E, 0x00000141, 0x0000013F, 0x00000140, 0x0005008E, 0x0000000E, 0x00000142, 0x00000141, -0x0000006D, 0x00050050, 0x0000000E, 0x00000144, 0x00000143, 0x00000143, 0x00050088, 0x0000000E, -0x00000145, 0x00000142, 0x00000144, 0x000200FE, 0x00000145, 0x00010038, +0x65746172, 0x3B316628, 0x00000000, 0x00040005, 0x00000009, 0x756C6176, 0x00000065, 0x000A0005, +0x00000010, 0x6D535F56, 0x47687469, 0x6F435847, 0x6C657272, 0x64657461, 0x3B316628, 0x663B3166, +0x00003B31, 0x00030005, 0x0000000D, 0x00566F4E, 0x00030005, 0x0000000E, 0x004C6F4E, 0x00030005, +0x0000000F, 0x00000061, 0x00070005, 0x00000018, 0x6D6D6168, 0x6C737265, 0x75287965, 0x31753B31, +0x0000003B, 0x00030005, 0x00000016, 0x00000069, 0x00030005, 0x00000017, 0x0000004E, 0x000A0005, +0x00000021, 0x6F706D69, 0x6E617472, 0x61536563, 0x656C706D, 0x28584747, 0x3B326676, 0x763B3166, +0x003B3366, 0x00030005, 0x0000001E, 0x00006958, 0x00050005, 0x0000001F, 0x67756F72, 0x73656E68, +0x00000073, 0x00030005, 0x00000020, 0x0000004E, 0x00080005, 0x00000026, 0x65746E69, 0x74617267, +0x44524265, 0x31662846, 0x3B31663B, 0x00000000, 0x00050005, 0x00000024, 0x67756F72, 0x73656E68, +0x00000073, 0x00030005, 0x00000025, 0x00566F4E, 0x00030005, 0x0000002E, 0x00003261, 0x00040005, +0x00000032, 0x4C584747, 0x00000000, 0x00040005, 0x00000040, 0x56584747, 0x00000000, 0x00040005, +0x00000055, 0x73746962, 0x00000000, 0x00030005, 0x00000084, 0x00696472, 0x00030005, 0x00000092, +0x00000061, 0x00030005, 0x00000096, 0x00696850, 0x00050005, 0x0000009C, 0x54736F43, 0x61746568, +0x00000000, 0x00050005, 0x000000AA, 0x546E6953, 0x61746568, 0x00000000, 0x00030005, 0x000000B0, +0x00000048, 0x00050005, 0x000000BD, 0x65567055, 0x726F7463, 0x00000000, 0x00050005, 0x000000C9, +0x676E6154, 0x58746E65, 0x00000000, 0x00050005, 0x000000CE, 0x676E6154, 0x59746E65, 0x00000000, +0x00030005, 0x000000E2, 0x00000056, 0x00030005, 0x000000EC, 0x00000041, 0x00030005, 0x000000ED, +0x00000042, 0x00030005, 0x000000EE, 0x00000069, 0x00030005, 0x000000F7, 0x00006958, 0x00040005, +0x000000F8, 0x61726170, 0x0000006D, 0x00040005, 0x000000FA, 0x61726170, 0x0000006D, 0x00030005, +0x000000FC, 0x00000048, 0x00040005, 0x000000FD, 0x61726170, 0x0000006D, 0x00040005, 0x000000FF, +0x61726170, 0x0000006D, 0x00040005, 0x00000101, 0x61726170, 0x0000006D, 0x00030005, 0x00000103, +0x0000004C, 0x00030005, 0x0000010D, 0x004C6F4E, 0x00040005, 0x00000110, 0x61726170, 0x0000006D, +0x00030005, 0x00000112, 0x00486F4E, 0x00040005, 0x00000115, 0x61726170, 0x0000006D, 0x00030005, +0x00000117, 0x00486F56, 0x00040005, 0x0000011B, 0x61726170, 0x0000006D, 0x00040005, 0x00000121, +0x64705F56, 0x00000066, 0x00040005, 0x00000122, 0x61726170, 0x0000006D, 0x00040005, 0x00000124, +0x61726170, 0x0000006D, 0x00040005, 0x00000126, 0x61726170, 0x0000006D, 0x00030005, 0x0000012F, +0x00006346, 0x00030005, 0x0000014D, 0x00000061, 0x00050005, 0x0000014F, 0x5474756F, 0x6F437865, +0x0064726F, 0x00030005, 0x00000153, 0x0000756D, 0x00030005, 0x00000156, 0x00736572, 0x00040005, +0x00000157, 0x61726170, 0x0000006D, 0x00040005, 0x00000159, 0x61726170, 0x0000006D, 0x00040005, +0x0000015E, 0x4674756F, 0x00676172, 0x00040047, 0x0000014F, 0x0000001E, 0x00000000, 0x00040047, +0x0000015E, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, +0x00030016, 0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00040021, +0x00000008, 0x00000006, 0x00000007, 0x00060021, 0x0000000C, 0x00000006, 0x00000007, 0x00000007, +0x00000007, 0x00040015, 0x00000012, 0x00000020, 0x00000000, 0x00040020, 0x00000013, 0x00000007, +0x00000012, 0x00040017, 0x00000014, 0x00000006, 0x00000002, 0x00050021, 0x00000015, 0x00000014, +0x00000013, 0x00000013, 0x00040020, 0x0000001A, 0x00000007, 0x00000014, 0x00040017, 0x0000001B, +0x00000006, 0x00000003, 0x00040020, 0x0000001C, 0x00000007, 0x0000001B, 0x00060021, 0x0000001D, +0x0000001B, 0x0000001A, 0x00000007, 0x0000001C, 0x00050021, 0x00000023, 0x00000014, 0x00000007, +0x00000007, 0x0004002B, 0x00000006, 0x00000029, 0x00000000, 0x0004002B, 0x00000006, 0x0000002A, +0x3F800000, 0x0004002B, 0x00000006, 0x0000004E, 0x3F000000, 0x0004002B, 0x00000012, 0x00000057, +0x00000010, 0x0004002B, 0x00000012, 0x0000005D, 0x55555555, 0x0004002B, 0x00000012, 0x0000005F, +0x00000001, 0x0004002B, 0x00000012, 0x00000062, 0xAAAAAAAA, 0x0004002B, 0x00000012, 0x00000067, +0x33333333, 0x0004002B, 0x00000012, 0x00000069, 0x00000002, 0x0004002B, 0x00000012, 0x0000006C, +0xCCCCCCCC, 0x0004002B, 0x00000012, 0x00000071, 0x0F0F0F0F, 0x0004002B, 0x00000012, 0x00000073, +0x00000004, 0x0004002B, 0x00000012, 0x00000076, 0xF0F0F0F0, 0x0004002B, 0x00000012, 0x0000007B, +0x00FF00FF, 0x0004002B, 0x00000012, 0x0000007D, 0x00000008, 0x0004002B, 0x00000012, 0x00000080, +0xFF00FF00, 0x0004002B, 0x00000006, 0x00000087, 0x2F800000, 0x0004002B, 0x00000006, 0x00000097, +0x40C90FDB, 0x0004002B, 0x00000012, 0x00000098, 0x00000000, 0x0004002B, 0x00000006, 0x000000C1, +0x3F7FBE77, 0x00020014, 0x000000C2, 0x0006002C, 0x0000001B, 0x000000C4, 0x00000029, 0x00000029, +0x0000002A, 0x0006002C, 0x0000001B, 0x000000C5, 0x0000002A, 0x00000029, 0x00000029, 0x00040017, +0x000000C6, 0x000000C2, 0x00000003, 0x0004002B, 0x00000012, 0x000000F5, 0x00000400, 0x0004002B, +0x00000006, 0x00000104, 0x40000000, 0x0004002B, 0x00000006, 0x00000132, 0x40A00000, 0x00040015, +0x00000140, 0x00000020, 0x00000001, 0x0004002B, 0x00000140, 0x00000141, 0x00000001, 0x0004002B, +0x00000006, 0x00000143, 0x40800000, 0x0004002B, 0x00000006, 0x00000148, 0x44800000, 0x00040020, +0x0000014E, 0x00000001, 0x00000014, 0x0004003B, 0x0000014E, 0x0000014F, 0x00000001, 0x00040020, +0x00000150, 0x00000001, 0x00000006, 0x00040017, 0x0000015C, 0x00000006, 0x00000004, 0x00040020, +0x0000015D, 0x00000003, 0x0000015C, 0x0004003B, 0x0000015D, 0x0000015E, 0x00000003, 0x0004002B, +0x00000006, 0x00000164, 0x3727C5AC, 0x0004002B, 0x00000006, 0x00000165, 0x3D23D70A, 0x0006002C, +0x0000001B, 0x00000166, 0x00000165, 0x00000165, 0x00000165, 0x00050036, 0x00000002, 0x00000004, +0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000007, 0x0000014D, 0x00000007, +0x0004003B, 0x00000007, 0x00000153, 0x00000007, 0x0004003B, 0x0000001A, 0x00000156, 0x00000007, +0x0004003B, 0x00000007, 0x00000157, 0x00000007, 0x0004003B, 0x00000007, 0x00000159, 0x00000007, +0x00050041, 0x00000150, 0x00000151, 0x0000014F, 0x0000005F, 0x0004003D, 0x00000006, 0x00000152, +0x00000151, 0x0003003E, 0x0000014D, 0x00000152, 0x00050041, 0x00000150, 0x00000154, 0x0000014F, +0x00000098, 0x0004003D, 0x00000006, 0x00000155, 0x00000154, 0x0003003E, 0x00000153, 0x00000155, +0x0004003D, 0x00000006, 0x00000158, 0x0000014D, 0x0003003E, 0x00000157, 0x00000158, 0x0004003D, +0x00000006, 0x0000015A, 0x00000153, 0x0003003E, 0x00000159, 0x0000015A, 0x00060039, 0x00000014, +0x0000015B, 0x00000026, 0x00000157, 0x00000159, 0x0003003E, 0x00000156, 0x0000015B, 0x00050041, +0x00000007, 0x0000015F, 0x00000156, 0x00000098, 0x0004003D, 0x00000006, 0x00000160, 0x0000015F, +0x00050041, 0x00000007, 0x00000161, 0x00000156, 0x0000005F, 0x0004003D, 0x00000006, 0x00000162, +0x00000161, 0x00070050, 0x0000015C, 0x00000163, 0x00000160, 0x00000162, 0x00000029, 0x0000002A, +0x0003003E, 0x0000015E, 0x00000163, 0x000100FD, 0x00010038, 0x00050036, 0x00000006, 0x0000000A, +0x00000000, 0x00000008, 0x00030037, 0x00000007, 0x00000009, 0x000200F8, 0x0000000B, 0x0004003D, +0x00000006, 0x00000028, 0x00000009, 0x0008000C, 0x00000006, 0x0000002B, 0x00000001, 0x0000002B, +0x00000028, 0x00000029, 0x0000002A, 0x000200FE, 0x0000002B, 0x00010038, 0x00050036, 0x00000006, +0x00000010, 0x00000000, 0x0000000C, 0x00030037, 0x00000007, 0x0000000D, 0x00030037, 0x00000007, +0x0000000E, 0x00030037, 0x00000007, 0x0000000F, 0x000200F8, 0x00000011, 0x0004003B, 0x00000007, +0x0000002E, 0x00000007, 0x0004003B, 0x00000007, 0x00000032, 0x00000007, 0x0004003B, 0x00000007, +0x00000040, 0x00000007, 0x0004003D, 0x00000006, 0x0000002F, 0x0000000F, 0x0004003D, 0x00000006, +0x00000030, 0x0000000F, 0x00050085, 0x00000006, 0x00000031, 0x0000002F, 0x00000030, 0x0003003E, +0x0000002E, 0x00000031, 0x0004003D, 0x00000006, 0x00000033, 0x0000000D, 0x0004003D, 0x00000006, +0x00000034, 0x0000000E, 0x0004007F, 0x00000006, 0x00000035, 0x00000034, 0x0004003D, 0x00000006, +0x00000036, 0x0000002E, 0x00050085, 0x00000006, 0x00000037, 0x00000035, 0x00000036, 0x0004003D, +0x00000006, 0x00000038, 0x0000000E, 0x00050081, 0x00000006, 0x00000039, 0x00000037, 0x00000038, +0x0004003D, 0x00000006, 0x0000003A, 0x0000000E, 0x00050085, 0x00000006, 0x0000003B, 0x00000039, +0x0000003A, 0x0004003D, 0x00000006, 0x0000003C, 0x0000002E, 0x00050081, 0x00000006, 0x0000003D, +0x0000003B, 0x0000003C, 0x0006000C, 0x00000006, 0x0000003E, 0x00000001, 0x0000001F, 0x0000003D, +0x00050085, 0x00000006, 0x0000003F, 0x00000033, 0x0000003E, 0x0003003E, 0x00000032, 0x0000003F, +0x0004003D, 0x00000006, 0x00000041, 0x0000000E, 0x0004003D, 0x00000006, 0x00000042, 0x0000000D, +0x0004007F, 0x00000006, 0x00000043, 0x00000042, 0x0004003D, 0x00000006, 0x00000044, 0x0000002E, +0x00050085, 0x00000006, 0x00000045, 0x00000043, 0x00000044, 0x0004003D, 0x00000006, 0x00000046, +0x0000000D, 0x00050081, 0x00000006, 0x00000047, 0x00000045, 0x00000046, 0x0004003D, 0x00000006, +0x00000048, 0x0000000D, 0x00050085, 0x00000006, 0x00000049, 0x00000047, 0x00000048, 0x0004003D, +0x00000006, 0x0000004A, 0x0000002E, 0x00050081, 0x00000006, 0x0000004B, 0x00000049, 0x0000004A, +0x0006000C, 0x00000006, 0x0000004C, 0x00000001, 0x0000001F, 0x0000004B, 0x00050085, 0x00000006, +0x0000004D, 0x00000041, 0x0000004C, 0x0003003E, 0x00000040, 0x0000004D, 0x0004003D, 0x00000006, +0x0000004F, 0x00000040, 0x0004003D, 0x00000006, 0x00000050, 0x00000032, 0x00050081, 0x00000006, +0x00000051, 0x0000004F, 0x00000050, 0x00050088, 0x00000006, 0x00000052, 0x0000004E, 0x00000051, +0x000200FE, 0x00000052, 0x00010038, 0x00050036, 0x00000014, 0x00000018, 0x00000000, 0x00000015, +0x00030037, 0x00000013, 0x00000016, 0x00030037, 0x00000013, 0x00000017, 0x000200F8, 0x00000019, +0x0004003B, 0x00000013, 0x00000055, 0x00000007, 0x0004003B, 0x00000007, 0x00000084, 0x00000007, +0x0004003D, 0x00000012, 0x00000056, 0x00000016, 0x000500C4, 0x00000012, 0x00000058, 0x00000056, +0x00000057, 0x0004003D, 0x00000012, 0x00000059, 0x00000016, 0x000500C2, 0x00000012, 0x0000005A, +0x00000059, 0x00000057, 0x000500C5, 0x00000012, 0x0000005B, 0x00000058, 0x0000005A, 0x0003003E, +0x00000055, 0x0000005B, 0x0004003D, 0x00000012, 0x0000005C, 0x00000055, 0x000500C7, 0x00000012, +0x0000005E, 0x0000005C, 0x0000005D, 0x000500C4, 0x00000012, 0x00000060, 0x0000005E, 0x0000005F, +0x0004003D, 0x00000012, 0x00000061, 0x00000055, 0x000500C7, 0x00000012, 0x00000063, 0x00000061, +0x00000062, 0x000500C2, 0x00000012, 0x00000064, 0x00000063, 0x0000005F, 0x000500C5, 0x00000012, +0x00000065, 0x00000060, 0x00000064, 0x0003003E, 0x00000055, 0x00000065, 0x0004003D, 0x00000012, +0x00000066, 0x00000055, 0x000500C7, 0x00000012, 0x00000068, 0x00000066, 0x00000067, 0x000500C4, +0x00000012, 0x0000006A, 0x00000068, 0x00000069, 0x0004003D, 0x00000012, 0x0000006B, 0x00000055, +0x000500C7, 0x00000012, 0x0000006D, 0x0000006B, 0x0000006C, 0x000500C2, 0x00000012, 0x0000006E, +0x0000006D, 0x00000069, 0x000500C5, 0x00000012, 0x0000006F, 0x0000006A, 0x0000006E, 0x0003003E, +0x00000055, 0x0000006F, 0x0004003D, 0x00000012, 0x00000070, 0x00000055, 0x000500C7, 0x00000012, +0x00000072, 0x00000070, 0x00000071, 0x000500C4, 0x00000012, 0x00000074, 0x00000072, 0x00000073, +0x0004003D, 0x00000012, 0x00000075, 0x00000055, 0x000500C7, 0x00000012, 0x00000077, 0x00000075, +0x00000076, 0x000500C2, 0x00000012, 0x00000078, 0x00000077, 0x00000073, 0x000500C5, 0x00000012, +0x00000079, 0x00000074, 0x00000078, 0x0003003E, 0x00000055, 0x00000079, 0x0004003D, 0x00000012, +0x0000007A, 0x00000055, 0x000500C7, 0x00000012, 0x0000007C, 0x0000007A, 0x0000007B, 0x000500C4, +0x00000012, 0x0000007E, 0x0000007C, 0x0000007D, 0x0004003D, 0x00000012, 0x0000007F, 0x00000055, +0x000500C7, 0x00000012, 0x00000081, 0x0000007F, 0x00000080, 0x000500C2, 0x00000012, 0x00000082, +0x00000081, 0x0000007D, 0x000500C5, 0x00000012, 0x00000083, 0x0000007E, 0x00000082, 0x0003003E, +0x00000055, 0x00000083, 0x0004003D, 0x00000012, 0x00000085, 0x00000055, 0x00040070, 0x00000006, +0x00000086, 0x00000085, 0x00050085, 0x00000006, 0x00000088, 0x00000086, 0x00000087, 0x0003003E, +0x00000084, 0x00000088, 0x0004003D, 0x00000012, 0x00000089, 0x00000016, 0x00040070, 0x00000006, +0x0000008A, 0x00000089, 0x0004003D, 0x00000012, 0x0000008B, 0x00000017, 0x00040070, 0x00000006, +0x0000008C, 0x0000008B, 0x00050088, 0x00000006, 0x0000008D, 0x0000008A, 0x0000008C, 0x0004003D, +0x00000006, 0x0000008E, 0x00000084, 0x00050050, 0x00000014, 0x0000008F, 0x0000008D, 0x0000008E, +0x000200FE, 0x0000008F, 0x00010038, 0x00050036, 0x0000001B, 0x00000021, 0x00000000, 0x0000001D, +0x00030037, 0x0000001A, 0x0000001E, 0x00030037, 0x00000007, 0x0000001F, 0x00030037, 0x0000001C, +0x00000020, 0x000200F8, 0x00000022, 0x0004003B, 0x00000007, 0x00000092, 0x00000007, 0x0004003B, +0x00000007, 0x00000096, 0x00000007, 0x0004003B, 0x00000007, 0x0000009C, 0x00000007, 0x0004003B, +0x00000007, 0x000000AA, 0x00000007, 0x0004003B, 0x0000001C, 0x000000B0, 0x00000007, 0x0004003B, +0x0000001C, 0x000000BD, 0x00000007, 0x0004003B, 0x0000001C, 0x000000C9, 0x00000007, 0x0004003B, +0x0000001C, 0x000000CE, 0x00000007, 0x0004003D, 0x00000006, 0x00000093, 0x0000001F, 0x0004003D, +0x00000006, 0x00000094, 0x0000001F, 0x00050085, 0x00000006, 0x00000095, 0x00000093, 0x00000094, +0x0003003E, 0x00000092, 0x00000095, 0x00050041, 0x00000007, 0x00000099, 0x0000001E, 0x00000098, +0x0004003D, 0x00000006, 0x0000009A, 0x00000099, 0x00050085, 0x00000006, 0x0000009B, 0x00000097, +0x0000009A, 0x0003003E, 0x00000096, 0x0000009B, 0x00050041, 0x00000007, 0x0000009D, 0x0000001E, +0x0000005F, 0x0004003D, 0x00000006, 0x0000009E, 0x0000009D, 0x00050083, 0x00000006, 0x0000009F, +0x0000002A, 0x0000009E, 0x0004003D, 0x00000006, 0x000000A0, 0x00000092, 0x0004003D, 0x00000006, +0x000000A1, 0x00000092, 0x00050085, 0x00000006, 0x000000A2, 0x000000A0, 0x000000A1, 0x00050083, +0x00000006, 0x000000A3, 0x000000A2, 0x0000002A, 0x00050041, 0x00000007, 0x000000A4, 0x0000001E, +0x0000005F, 0x0004003D, 0x00000006, 0x000000A5, 0x000000A4, 0x00050085, 0x00000006, 0x000000A6, +0x000000A3, 0x000000A5, 0x00050081, 0x00000006, 0x000000A7, 0x0000002A, 0x000000A6, 0x00050088, +0x00000006, 0x000000A8, 0x0000009F, 0x000000A7, 0x0006000C, 0x00000006, 0x000000A9, 0x00000001, +0x0000001F, 0x000000A8, 0x0003003E, 0x0000009C, 0x000000A9, 0x0004003D, 0x00000006, 0x000000AB, +0x0000009C, 0x0004003D, 0x00000006, 0x000000AC, 0x0000009C, 0x00050085, 0x00000006, 0x000000AD, +0x000000AB, 0x000000AC, 0x00050083, 0x00000006, 0x000000AE, 0x0000002A, 0x000000AD, 0x0006000C, +0x00000006, 0x000000AF, 0x00000001, 0x0000001F, 0x000000AE, 0x0003003E, 0x000000AA, 0x000000AF, +0x0004003D, 0x00000006, 0x000000B1, 0x000000AA, 0x0004003D, 0x00000006, 0x000000B2, 0x00000096, +0x0006000C, 0x00000006, 0x000000B3, 0x00000001, 0x0000000E, 0x000000B2, 0x00050085, 0x00000006, +0x000000B4, 0x000000B1, 0x000000B3, 0x00050041, 0x00000007, 0x000000B5, 0x000000B0, 0x00000098, +0x0003003E, 0x000000B5, 0x000000B4, 0x0004003D, 0x00000006, 0x000000B6, 0x000000AA, 0x0004003D, +0x00000006, 0x000000B7, 0x00000096, 0x0006000C, 0x00000006, 0x000000B8, 0x00000001, 0x0000000D, +0x000000B7, 0x00050085, 0x00000006, 0x000000B9, 0x000000B6, 0x000000B8, 0x00050041, 0x00000007, +0x000000BA, 0x000000B0, 0x0000005F, 0x0003003E, 0x000000BA, 0x000000B9, 0x0004003D, 0x00000006, +0x000000BB, 0x0000009C, 0x00050041, 0x00000007, 0x000000BC, 0x000000B0, 0x00000069, 0x0003003E, +0x000000BC, 0x000000BB, 0x00050041, 0x00000007, 0x000000BE, 0x00000020, 0x00000069, 0x0004003D, +0x00000006, 0x000000BF, 0x000000BE, 0x0006000C, 0x00000006, 0x000000C0, 0x00000001, 0x00000004, +0x000000BF, 0x000500B8, 0x000000C2, 0x000000C3, 0x000000C0, 0x000000C1, 0x00060050, 0x000000C6, +0x000000C7, 0x000000C3, 0x000000C3, 0x000000C3, 0x000600A9, 0x0000001B, 0x000000C8, 0x000000C7, +0x000000C4, 0x000000C5, 0x0003003E, 0x000000BD, 0x000000C8, 0x0004003D, 0x0000001B, 0x000000CA, +0x000000BD, 0x0004003D, 0x0000001B, 0x000000CB, 0x00000020, 0x0007000C, 0x0000001B, 0x000000CC, +0x00000001, 0x00000044, 0x000000CA, 0x000000CB, 0x0006000C, 0x0000001B, 0x000000CD, 0x00000001, +0x00000045, 0x000000CC, 0x0003003E, 0x000000C9, 0x000000CD, 0x0004003D, 0x0000001B, 0x000000CF, +0x00000020, 0x0004003D, 0x0000001B, 0x000000D0, 0x000000C9, 0x0007000C, 0x0000001B, 0x000000D1, +0x00000001, 0x00000044, 0x000000CF, 0x000000D0, 0x0003003E, 0x000000CE, 0x000000D1, 0x0004003D, +0x0000001B, 0x000000D2, 0x000000C9, 0x00050041, 0x00000007, 0x000000D3, 0x000000B0, 0x00000098, +0x0004003D, 0x00000006, 0x000000D4, 0x000000D3, 0x0005008E, 0x0000001B, 0x000000D5, 0x000000D2, +0x000000D4, 0x0004003D, 0x0000001B, 0x000000D6, 0x000000CE, 0x00050041, 0x00000007, 0x000000D7, +0x000000B0, 0x0000005F, 0x0004003D, 0x00000006, 0x000000D8, 0x000000D7, 0x0005008E, 0x0000001B, +0x000000D9, 0x000000D6, 0x000000D8, 0x00050081, 0x0000001B, 0x000000DA, 0x000000D5, 0x000000D9, +0x0004003D, 0x0000001B, 0x000000DB, 0x00000020, 0x00050041, 0x00000007, 0x000000DC, 0x000000B0, +0x00000069, 0x0004003D, 0x00000006, 0x000000DD, 0x000000DC, 0x0005008E, 0x0000001B, 0x000000DE, +0x000000DB, 0x000000DD, 0x00050081, 0x0000001B, 0x000000DF, 0x000000DA, 0x000000DE, 0x000200FE, +0x000000DF, 0x00010038, 0x00050036, 0x00000014, 0x00000026, 0x00000000, 0x00000023, 0x00030037, +0x00000007, 0x00000024, 0x00030037, 0x00000007, 0x00000025, 0x000200F8, 0x00000027, 0x0004003B, +0x0000001C, 0x000000E2, 0x00000007, 0x0004003B, 0x00000007, 0x000000EC, 0x00000007, 0x0004003B, +0x00000007, 0x000000ED, 0x00000007, 0x0004003B, 0x00000013, 0x000000EE, 0x00000007, 0x0004003B, +0x0000001A, 0x000000F7, 0x00000007, 0x0004003B, 0x00000013, 0x000000F8, 0x00000007, 0x0004003B, +0x00000013, 0x000000FA, 0x00000007, 0x0004003B, 0x0000001C, 0x000000FC, 0x00000007, 0x0004003B, +0x0000001A, 0x000000FD, 0x00000007, 0x0004003B, 0x00000007, 0x000000FF, 0x00000007, 0x0004003B, +0x0000001C, 0x00000101, 0x00000007, 0x0004003B, 0x0000001C, 0x00000103, 0x00000007, 0x0004003B, +0x00000007, 0x0000010D, 0x00000007, 0x0004003B, 0x00000007, 0x00000110, 0x00000007, 0x0004003B, +0x00000007, 0x00000112, 0x00000007, 0x0004003B, 0x00000007, 0x00000115, 0x00000007, 0x0004003B, +0x00000007, 0x00000117, 0x00000007, 0x0004003B, 0x00000007, 0x0000011B, 0x00000007, 0x0004003B, +0x00000007, 0x00000121, 0x00000007, 0x0004003B, 0x00000007, 0x00000122, 0x00000007, 0x0004003B, +0x00000007, 0x00000124, 0x00000007, 0x0004003B, 0x00000007, 0x00000126, 0x00000007, 0x0004003B, +0x00000007, 0x0000012F, 0x00000007, 0x0004003D, 0x00000006, 0x000000E3, 0x00000025, 0x0004003D, +0x00000006, 0x000000E4, 0x00000025, 0x00050085, 0x00000006, 0x000000E5, 0x000000E3, 0x000000E4, +0x00050083, 0x00000006, 0x000000E6, 0x0000002A, 0x000000E5, 0x0006000C, 0x00000006, 0x000000E7, +0x00000001, 0x0000001F, 0x000000E6, 0x00050041, 0x00000007, 0x000000E8, 0x000000E2, 0x00000098, +0x0003003E, 0x000000E8, 0x000000E7, 0x00050041, 0x00000007, 0x000000E9, 0x000000E2, 0x0000005F, +0x0003003E, 0x000000E9, 0x00000029, 0x0004003D, 0x00000006, 0x000000EA, 0x00000025, 0x00050041, +0x00000007, 0x000000EB, 0x000000E2, 0x00000069, 0x0003003E, 0x000000EB, 0x000000EA, 0x0003003E, +0x000000EC, 0x00000029, 0x0003003E, 0x000000ED, 0x00000029, 0x0003003E, 0x000000EE, 0x00000098, +0x000200F9, 0x000000EF, 0x000200F8, 0x000000EF, 0x000400F6, 0x000000F1, 0x000000F2, 0x00000000, +0x000200F9, 0x000000F3, 0x000200F8, 0x000000F3, 0x0004003D, 0x00000012, 0x000000F4, 0x000000EE, +0x000500B0, 0x000000C2, 0x000000F6, 0x000000F4, 0x000000F5, 0x000400FA, 0x000000F6, 0x000000F0, +0x000000F1, 0x000200F8, 0x000000F0, 0x0004003D, 0x00000012, 0x000000F9, 0x000000EE, 0x0003003E, +0x000000F8, 0x000000F9, 0x0003003E, 0x000000FA, 0x000000F5, 0x00060039, 0x00000014, 0x000000FB, +0x00000018, 0x000000F8, 0x000000FA, 0x0003003E, 0x000000F7, 0x000000FB, 0x0004003D, 0x00000014, +0x000000FE, 0x000000F7, 0x0003003E, 0x000000FD, 0x000000FE, 0x0004003D, 0x00000006, 0x00000100, +0x00000024, 0x0003003E, 0x000000FF, 0x00000100, 0x0003003E, 0x00000101, 0x000000C4, 0x00070039, +0x0000001B, 0x00000102, 0x00000021, 0x000000FD, 0x000000FF, 0x00000101, 0x0003003E, 0x000000FC, +0x00000102, 0x0004003D, 0x0000001B, 0x00000105, 0x000000E2, 0x0004003D, 0x0000001B, 0x00000106, +0x000000FC, 0x00050094, 0x00000006, 0x00000107, 0x00000105, 0x00000106, 0x00050085, 0x00000006, +0x00000108, 0x00000104, 0x00000107, 0x0004003D, 0x0000001B, 0x00000109, 0x000000FC, 0x0005008E, +0x0000001B, 0x0000010A, 0x00000109, 0x00000108, 0x0004003D, 0x0000001B, 0x0000010B, 0x000000E2, +0x00050083, 0x0000001B, 0x0000010C, 0x0000010A, 0x0000010B, 0x0003003E, 0x00000103, 0x0000010C, +0x0004003D, 0x0000001B, 0x0000010E, 0x00000103, 0x00050094, 0x00000006, 0x0000010F, 0x000000C4, +0x0000010E, 0x0003003E, 0x00000110, 0x0000010F, 0x00050039, 0x00000006, 0x00000111, 0x0000000A, +0x00000110, 0x0003003E, 0x0000010D, 0x00000111, 0x0004003D, 0x0000001B, 0x00000113, 0x000000FC, +0x00050094, 0x00000006, 0x00000114, 0x000000C4, 0x00000113, 0x0003003E, 0x00000115, 0x00000114, +0x00050039, 0x00000006, 0x00000116, 0x0000000A, 0x00000115, 0x0003003E, 0x00000112, 0x00000116, +0x0004003D, 0x0000001B, 0x00000118, 0x000000E2, 0x0004003D, 0x0000001B, 0x00000119, 0x000000FC, +0x00050094, 0x00000006, 0x0000011A, 0x00000118, 0x00000119, 0x0003003E, 0x0000011B, 0x0000011A, +0x00050039, 0x00000006, 0x0000011C, 0x0000000A, 0x0000011B, 0x0003003E, 0x00000117, 0x0000011C, +0x0004003D, 0x00000006, 0x0000011D, 0x0000010D, 0x000500BA, 0x000000C2, 0x0000011E, 0x0000011D, +0x00000029, 0x000300F7, 0x00000120, 0x00000000, 0x000400FA, 0x0000011E, 0x0000011F, 0x00000120, +0x000200F8, 0x0000011F, 0x0004003D, 0x00000006, 0x00000123, 0x00000025, 0x0003003E, 0x00000122, +0x00000123, 0x0004003D, 0x00000006, 0x00000125, 0x0000010D, 0x0003003E, 0x00000124, 0x00000125, +0x0004003D, 0x00000006, 0x00000127, 0x00000024, 0x0003003E, 0x00000126, 0x00000127, 0x00070039, +0x00000006, 0x00000128, 0x00000010, 0x00000122, 0x00000124, 0x00000126, 0x0004003D, 0x00000006, +0x00000129, 0x00000117, 0x00050085, 0x00000006, 0x0000012A, 0x00000128, 0x00000129, 0x0004003D, +0x00000006, 0x0000012B, 0x0000010D, 0x00050085, 0x00000006, 0x0000012C, 0x0000012A, 0x0000012B, +0x0004003D, 0x00000006, 0x0000012D, 0x00000112, 0x00050088, 0x00000006, 0x0000012E, 0x0000012C, +0x0000012D, 0x0003003E, 0x00000121, 0x0000012E, 0x0004003D, 0x00000006, 0x00000130, 0x00000117, +0x00050083, 0x00000006, 0x00000131, 0x0000002A, 0x00000130, 0x0007000C, 0x00000006, 0x00000133, +0x00000001, 0x0000001A, 0x00000131, 0x00000132, 0x0003003E, 0x0000012F, 0x00000133, 0x0004003D, +0x00000006, 0x00000134, 0x0000012F, 0x00050083, 0x00000006, 0x00000135, 0x0000002A, 0x00000134, +0x0004003D, 0x00000006, 0x00000136, 0x00000121, 0x00050085, 0x00000006, 0x00000137, 0x00000135, +0x00000136, 0x0004003D, 0x00000006, 0x00000138, 0x000000EC, 0x00050081, 0x00000006, 0x00000139, +0x00000138, 0x00000137, 0x0003003E, 0x000000EC, 0x00000139, 0x0004003D, 0x00000006, 0x0000013A, +0x0000012F, 0x0004003D, 0x00000006, 0x0000013B, 0x00000121, 0x00050085, 0x00000006, 0x0000013C, +0x0000013A, 0x0000013B, 0x0004003D, 0x00000006, 0x0000013D, 0x000000ED, 0x00050081, 0x00000006, +0x0000013E, 0x0000013D, 0x0000013C, 0x0003003E, 0x000000ED, 0x0000013E, 0x000200F9, 0x00000120, +0x000200F8, 0x00000120, 0x000200F9, 0x000000F2, 0x000200F8, 0x000000F2, 0x0004003D, 0x00000012, +0x0000013F, 0x000000EE, 0x00050080, 0x00000012, 0x00000142, 0x0000013F, 0x00000141, 0x0003003E, +0x000000EE, 0x00000142, 0x000200F9, 0x000000EF, 0x000200F8, 0x000000F1, 0x0004003D, 0x00000006, +0x00000144, 0x000000EC, 0x0004003D, 0x00000006, 0x00000145, 0x000000ED, 0x00050050, 0x00000014, +0x00000146, 0x00000144, 0x00000145, 0x0005008E, 0x00000014, 0x00000147, 0x00000146, 0x00000143, +0x00050050, 0x00000014, 0x00000149, 0x00000148, 0x00000148, 0x00050088, 0x00000014, 0x0000014A, +0x00000147, 0x00000149, 0x000200FE, 0x0000014A, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Bloomfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Bloomfragspv.hpp index b02dfda59..6eab86014 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/Bloomfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Bloomfragspv.hpp @@ -3,430 +3,597 @@ #include #include -constexpr uint32_t spirv_Bloomfragspv_size = 13544; -constexpr std::array spirv_Bloomfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x0000023C, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +constexpr uint32_t spirv_Bloomfragspv_size = 18908; +constexpr std::array spirv_Bloomfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000339, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, -0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000019C, -0x0000023A, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, +0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000299, +0x00000337, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, -0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x000A0005, -0x00000013, 0x6E776F44, 0x706D6173, 0x6F42656C, 0x28333178, 0x3B313273, 0x763B3166, 0x763B3266, -0x003B3266, 0x00030005, 0x0000000F, 0x00786574, 0x00030005, 0x00000010, 0x00646F6C, 0x00030005, -0x00000011, 0x00007675, 0x00050005, 0x00000012, 0x65786574, 0x7A69536C, 0x00000065, 0x000A0005, -0x0000001C, 0x64617551, 0x69746172, 0x72685463, 0x6F687365, 0x7628646C, 0x663B3466, 0x66763B31, -0x00003B33, 0x00040005, 0x00000019, 0x6F6C6F63, 0x00000072, 0x00050005, 0x0000001A, 0x65726874, -0x6C6F6873, 0x00000064, 0x00040005, 0x0000001B, 0x76727563, 0x00000065, 0x00070005, 0x00000021, -0x66657250, 0x65746C69, 0x66762872, 0x66763B34, 0x00003B32, 0x00040005, 0x0000001F, 0x6F6C6F63, -0x00000072, 0x00030005, 0x00000020, 0x00007675, 0x000B0005, 0x00000029, 0x61737055, 0x656C706D, -0x746E6554, 0x32732839, 0x31663B31, 0x3266763B, 0x3266763B, 0x3B31663B, 0x00000000, 0x00030005, -0x00000024, 0x00786574, 0x00030005, 0x00000025, 0x00646F6C, 0x00030005, 0x00000026, 0x00007675, -0x00050005, 0x00000027, 0x65786574, 0x7A69536C, 0x00000065, 0x00040005, 0x00000028, 0x69646172, -0x00007375, 0x00030005, 0x0000002B, 0x00000041, 0x00030005, 0x00000034, 0x00000042, 0x00030005, -0x0000003F, 0x00000043, 0x00030005, 0x0000004A, 0x00000044, 0x00030005, 0x00000054, 0x00000045, -0x00030005, 0x0000005E, 0x00000046, 0x00030005, 0x00000069, 0x00000047, 0x00030005, 0x00000074, -0x00000048, 0x00030005, 0x0000007F, 0x00000049, 0x00030005, 0x00000089, 0x0000004A, 0x00030005, -0x00000092, 0x0000004B, 0x00030005, 0x0000009C, 0x0000004C, 0x00030005, 0x000000A5, 0x0000004D, -0x00040005, 0x000000AF, 0x75736572, 0x0000746C, 0x00050005, 0x000000EA, 0x67697262, 0x656E7468, -0x00007373, 0x00030005, 0x000000F7, 0x00007172, 0x00050005, 0x00000113, 0x6D616C63, 0x6C615670, -0x00006575, 0x00050005, 0x00000119, 0x66696E55, 0x736D726F, 0x00000000, 0x00050006, 0x00000119, -0x00000000, 0x61726150, 0x0000736D, 0x00050006, 0x00000119, 0x00000001, 0x61726150, 0x0032736D, -0x00050005, 0x0000011B, 0x6E555F75, 0x726F6669, 0x0000736D, 0x00040005, 0x0000011E, 0x61726170, -0x0000006D, 0x00040005, 0x00000120, 0x61726170, 0x0000006D, 0x00040005, 0x00000124, 0x61726170, -0x0000006D, 0x00040005, 0x0000012D, 0x7366666F, 0x00007465, 0x00040005, 0x00000134, 0x75736572, -0x0000746C, 0x00040005, 0x00000195, 0x53676D69, 0x00657A69, 0x00050005, 0x0000019A, 0x43786574, -0x64726F6F, 0x00000073, 0x00050005, 0x0000019C, 0x5474756F, 0x6F437865, 0x0064726F, 0x00030005, -0x0000019F, 0x00444F4C, 0x00040005, 0x000001A3, 0x65646F4D, 0x00000000, 0x00040005, 0x000001A7, -0x53786574, 0x00657A69, 0x00050005, 0x000001A8, 0x65545F75, 0x72757478, 0x00000065, 0x00040005, -0x000001AF, 0x6F6C6F63, 0x00000072, 0x00040005, 0x000001B9, 0x61726170, 0x0000006D, 0x00040005, -0x000001BA, 0x61726170, 0x0000006D, 0x00040005, 0x000001BC, 0x61726170, 0x0000006D, 0x00040005, -0x000001C4, 0x61726170, 0x0000006D, 0x00040005, 0x000001C6, 0x61726170, 0x0000006D, 0x00060005, -0x000001D1, 0x6F6F6C62, 0x7865546D, 0x657A6953, 0x00000000, 0x00050005, 0x000001D8, 0x706D6173, -0x6353656C, 0x00656C61, 0x00070005, 0x000001D9, 0x61737075, 0x656C706D, 0x78655464, 0x65727574, -0x00000000, 0x00040005, 0x000001E0, 0x61726170, 0x0000006D, 0x00040005, 0x000001E1, 0x61726170, -0x0000006D, 0x00040005, 0x000001E3, 0x61726170, 0x0000006D, 0x00040005, 0x000001E4, 0x61726170, -0x0000006D, 0x00050005, 0x000001E7, 0x73697865, 0x676E6974, 0x00000000, 0x00060005, 0x000001FD, -0x6F6F6C62, 0x7865546D, 0x657A6953, 0x00000000, 0x00060005, 0x000001FE, 0x6C425F75, 0x546D6F6F, -0x75747865, 0x00006572, 0x00050005, 0x00000205, 0x706D6173, 0x6353656C, 0x00656C61, 0x00070005, -0x00000206, 0x61737075, 0x656C706D, 0x78655464, 0x65727574, 0x00000000, 0x00040005, 0x0000020D, -0x61726170, 0x0000006D, 0x00040005, 0x0000020E, 0x61726170, 0x0000006D, 0x00040005, 0x00000210, -0x61726170, 0x0000006D, 0x00040005, 0x00000211, 0x61726170, 0x0000006D, 0x00050005, 0x00000214, -0x73697865, 0x676E6974, 0x00000000, 0x00040005, 0x0000022E, 0x61726170, 0x0000006D, 0x00040005, -0x0000022F, 0x61726170, 0x0000006D, 0x00040005, 0x00000231, 0x61726170, 0x0000006D, 0x00050005, -0x0000023A, 0x4374756F, 0x756F6C6F, 0x00000072, 0x00050048, 0x00000119, 0x00000000, 0x00000023, -0x00000000, 0x00050048, 0x00000119, 0x00000001, 0x00000023, 0x00000010, 0x00030047, 0x00000119, -0x00000002, 0x00040047, 0x0000019C, 0x0000001E, 0x00000000, 0x00040047, 0x000001A8, 0x00000022, -0x00000000, 0x00040047, 0x000001A8, 0x00000021, 0x00000001, 0x00040047, 0x000001FE, 0x00000022, -0x00000000, 0x00040047, 0x000001FE, 0x00000021, 0x00000002, 0x00040047, 0x0000023A, 0x0000001E, -0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, -0x00000020, 0x00090019, 0x00000007, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, -0x00000001, 0x00000000, 0x0003001B, 0x00000008, 0x00000007, 0x00040020, 0x00000009, 0x00000000, -0x00000008, 0x00040020, 0x0000000A, 0x00000007, 0x00000006, 0x00040017, 0x0000000B, 0x00000006, -0x00000002, 0x00040020, 0x0000000C, 0x00000007, 0x0000000B, 0x00040017, 0x0000000D, 0x00000006, -0x00000003, 0x00070021, 0x0000000E, 0x0000000D, 0x00000009, 0x0000000A, 0x0000000C, 0x0000000C, -0x00040017, 0x00000015, 0x00000006, 0x00000004, 0x00040020, 0x00000016, 0x00000007, 0x00000015, -0x00040020, 0x00000017, 0x00000007, 0x0000000D, 0x00060021, 0x00000018, 0x00000015, 0x00000016, -0x0000000A, 0x00000017, 0x00050021, 0x0000001E, 0x00000015, 0x00000016, 0x0000000C, 0x00080021, -0x00000023, 0x0000000D, 0x00000009, 0x0000000A, 0x0000000C, 0x0000000C, 0x0000000A, 0x0004002B, -0x00000006, 0x00000031, 0x3F000000, 0x0004002B, 0x00000006, 0x00000038, 0xBF800000, 0x0005002C, -0x0000000B, 0x00000039, 0x00000038, 0x00000038, 0x0004002B, 0x00000006, 0x00000043, 0x3F800000, -0x0005002C, 0x0000000B, 0x00000044, 0x00000038, 0x00000043, 0x0005002C, 0x0000000B, 0x0000004E, -0x00000043, 0x00000043, 0x0005002C, 0x0000000B, 0x00000058, 0x00000043, 0x00000038, 0x0004002B, -0x00000006, 0x00000062, 0xC0000000, 0x0005002C, 0x0000000B, 0x00000063, 0x00000062, 0x00000062, -0x0004002B, 0x00000006, 0x0000006D, 0x00000000, 0x0005002C, 0x0000000B, 0x0000006E, 0x00000062, -0x0000006D, 0x0004002B, 0x00000006, 0x00000078, 0x40000000, 0x0005002C, 0x0000000B, 0x00000079, -0x0000006D, 0x00000078, 0x0005002C, 0x0000000B, 0x00000083, 0x00000078, 0x00000078, 0x0005002C, -0x0000000B, 0x00000096, 0x00000078, 0x0000006D, 0x0005002C, 0x0000000B, 0x000000A9, 0x0000006D, -0x00000062, 0x0006002C, 0x0000000D, 0x000000B0, 0x0000006D, 0x0000006D, 0x0000006D, 0x0004002B, -0x00000006, 0x000000C2, 0x3E000000, 0x0004002B, 0x00000006, 0x000000E4, 0x3E800000, 0x00040015, -0x000000EB, 0x00000020, 0x00000000, 0x0004002B, 0x000000EB, 0x000000EC, 0x00000000, 0x0004002B, -0x000000EB, 0x000000EF, 0x00000001, 0x0004002B, 0x000000EB, 0x000000F3, 0x00000002, 0x0004002B, -0x00000006, 0x0000010B, 0x38D1B717, 0x0004002B, 0x00000006, 0x00000114, 0x41A00000, 0x0004001E, -0x00000119, 0x00000015, 0x00000015, 0x00040020, 0x0000011A, 0x00000009, 0x00000119, 0x0004003B, -0x0000011A, 0x0000011B, 0x00000009, 0x00040015, 0x0000011C, 0x00000020, 0x00000001, 0x0004002B, -0x0000011C, 0x0000011D, 0x00000000, 0x00040020, 0x00000121, 0x00000009, 0x00000006, 0x00040020, -0x00000125, 0x00000009, 0x00000015, 0x0007002C, 0x00000015, 0x00000130, 0x00000043, 0x00000043, -0x00000038, 0x0000006D, 0x0004002B, 0x00000006, 0x0000013A, 0x40800000, 0x0004002B, 0x00000006, -0x00000191, 0x3D800000, 0x0004002B, 0x0000011C, 0x00000196, 0x00000001, 0x00040020, 0x0000019B, -0x00000001, 0x0000000B, 0x0004003B, 0x0000019B, 0x0000019C, 0x00000001, 0x00040020, 0x0000019E, -0x00000007, 0x0000011C, 0x0004003B, 0x00000009, 0x000001A8, 0x00000000, 0x00040017, 0x000001AC, -0x0000011C, 0x00000002, 0x0007002C, 0x00000015, 0x000001B0, 0x00000043, 0x0000006D, 0x00000043, -0x00000043, 0x00020014, 0x000001B2, 0x0004002B, 0x000000EB, 0x000001C9, 0x00000003, 0x0004002B, -0x0000011C, 0x000001CD, 0x00000002, 0x0004002B, 0x0000011C, 0x000001F9, 0x00000003, 0x0004003B, -0x00000009, 0x000001FE, 0x00000000, 0x00040020, 0x00000239, 0x00000003, 0x00000015, 0x0004003B, -0x00000239, 0x0000023A, 0x00000003, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, -0x000200F8, 0x00000005, 0x0004003B, 0x0000000C, 0x00000195, 0x00000007, 0x0004003B, 0x0000000C, -0x0000019A, 0x00000007, 0x0004003B, 0x0000019E, 0x0000019F, 0x00000007, 0x0004003B, 0x0000019E, -0x000001A3, 0x00000007, 0x0004003B, 0x0000000C, 0x000001A7, 0x00000007, 0x0004003B, 0x00000016, -0x000001AF, 0x00000007, 0x0004003B, 0x0000000A, 0x000001B9, 0x00000007, 0x0004003B, 0x0000000C, -0x000001BA, 0x00000007, 0x0004003B, 0x0000000C, 0x000001BC, 0x00000007, 0x0004003B, 0x00000016, -0x000001C4, 0x00000007, 0x0004003B, 0x0000000C, 0x000001C6, 0x00000007, 0x0004003B, 0x0000000C, -0x000001D1, 0x00000007, 0x0004003B, 0x0000000A, 0x000001D8, 0x00000007, 0x0004003B, 0x00000017, -0x000001D9, 0x00000007, 0x0004003B, 0x0000000A, 0x000001E0, 0x00000007, 0x0004003B, 0x0000000C, -0x000001E1, 0x00000007, 0x0004003B, 0x0000000C, 0x000001E3, 0x00000007, 0x0004003B, 0x0000000A, -0x000001E4, 0x00000007, 0x0004003B, 0x00000017, 0x000001E7, 0x00000007, 0x0004003B, 0x0000000C, -0x000001FD, 0x00000007, 0x0004003B, 0x0000000A, 0x00000205, 0x00000007, 0x0004003B, 0x00000017, -0x00000206, 0x00000007, 0x0004003B, 0x0000000A, 0x0000020D, 0x00000007, 0x0004003B, 0x0000000C, -0x0000020E, 0x00000007, 0x0004003B, 0x0000000C, 0x00000210, 0x00000007, 0x0004003B, 0x0000000A, -0x00000211, 0x00000007, 0x0004003B, 0x00000017, 0x00000214, 0x00000007, 0x0004003B, 0x0000000A, -0x0000022E, 0x00000007, 0x0004003B, 0x0000000C, 0x0000022F, 0x00000007, 0x0004003B, 0x0000000C, -0x00000231, 0x00000007, 0x00050041, 0x00000125, 0x00000197, 0x0000011B, 0x00000196, 0x0004003D, -0x00000015, 0x00000198, 0x00000197, 0x0007004F, 0x0000000B, 0x00000199, 0x00000198, 0x00000198, -0x00000002, 0x00000003, 0x0003003E, 0x00000195, 0x00000199, 0x0004003D, 0x0000000B, 0x0000019D, -0x0000019C, 0x0003003E, 0x0000019A, 0x0000019D, 0x00060041, 0x00000121, 0x000001A0, 0x0000011B, -0x00000196, 0x000000EC, 0x0004003D, 0x00000006, 0x000001A1, 0x000001A0, 0x0004006E, 0x0000011C, -0x000001A2, 0x000001A1, 0x0003003E, 0x0000019F, 0x000001A2, 0x00060041, 0x00000121, 0x000001A4, -0x0000011B, 0x00000196, 0x000000EF, 0x0004003D, 0x00000006, 0x000001A5, 0x000001A4, 0x0004006E, -0x0000011C, 0x000001A6, 0x000001A5, 0x0003003E, 0x000001A3, 0x000001A6, 0x0004003D, 0x00000008, -0x000001A9, 0x000001A8, 0x0004003D, 0x0000011C, 0x000001AA, 0x0000019F, 0x00040064, 0x00000007, -0x000001AB, 0x000001A9, 0x00050067, 0x000001AC, 0x000001AD, 0x000001AB, 0x000001AA, 0x0004006F, -0x0000000B, 0x000001AE, 0x000001AD, 0x0003003E, 0x000001A7, 0x000001AE, 0x0003003E, 0x000001AF, -0x000001B0, 0x0004003D, 0x0000011C, 0x000001B1, 0x000001A3, 0x000500AA, 0x000001B2, 0x000001B3, -0x000001B1, 0x0000011D, 0x000300F7, 0x000001B5, 0x00000000, 0x000400FA, 0x000001B3, 0x000001B4, -0x000001CB, 0x000200F8, 0x000001B4, 0x0004003D, 0x0000000B, 0x000001B6, 0x000001A7, 0x00050050, -0x0000000B, 0x000001B7, 0x00000043, 0x00000043, 0x00050088, 0x0000000B, 0x000001B8, 0x000001B7, -0x000001B6, 0x0003003E, 0x000001B9, 0x0000006D, 0x0004003D, 0x0000000B, 0x000001BB, 0x0000019A, -0x0003003E, 0x000001BA, 0x000001BB, 0x0003003E, 0x000001BC, 0x000001B8, 0x00080039, 0x0000000D, -0x000001BD, 0x00000013, 0x000001A8, 0x000001B9, 0x000001BA, 0x000001BC, 0x00050041, 0x0000000A, -0x000001BE, 0x000001AF, 0x000000EC, 0x00050051, 0x00000006, 0x000001BF, 0x000001BD, 0x00000000, -0x0003003E, 0x000001BE, 0x000001BF, 0x00050041, 0x0000000A, 0x000001C0, 0x000001AF, 0x000000EF, -0x00050051, 0x00000006, 0x000001C1, 0x000001BD, 0x00000001, 0x0003003E, 0x000001C0, 0x000001C1, -0x00050041, 0x0000000A, 0x000001C2, 0x000001AF, 0x000000F3, 0x00050051, 0x00000006, 0x000001C3, -0x000001BD, 0x00000002, 0x0003003E, 0x000001C2, 0x000001C3, 0x0004003D, 0x00000015, 0x000001C5, -0x000001AF, 0x0003003E, 0x000001C4, 0x000001C5, 0x0004003D, 0x0000000B, 0x000001C7, 0x0000019A, -0x0003003E, 0x000001C6, 0x000001C7, 0x00060039, 0x00000015, 0x000001C8, 0x00000021, 0x000001C4, -0x000001C6, 0x0003003E, 0x000001AF, 0x000001C8, 0x00050041, 0x0000000A, 0x000001CA, 0x000001AF, -0x000001C9, 0x0003003E, 0x000001CA, 0x00000043, 0x000200F9, 0x000001B5, 0x000200F8, 0x000001CB, -0x0004003D, 0x0000011C, 0x000001CC, 0x000001A3, 0x000500AA, 0x000001B2, 0x000001CE, 0x000001CC, -0x000001CD, 0x000300F7, 0x000001D0, 0x00000000, 0x000400FA, 0x000001CE, 0x000001CF, 0x000001F7, -0x000200F8, 0x000001CF, 0x0004003D, 0x00000008, 0x000001D2, 0x000001A8, 0x0004003D, 0x0000011C, -0x000001D3, 0x0000019F, 0x00050080, 0x0000011C, 0x000001D4, 0x000001D3, 0x00000196, 0x00040064, -0x00000007, 0x000001D5, 0x000001D2, 0x00050067, 0x000001AC, 0x000001D6, 0x000001D5, 0x000001D4, -0x0004006F, 0x0000000B, 0x000001D7, 0x000001D6, 0x0003003E, 0x000001D1, 0x000001D7, 0x0003003E, -0x000001D8, 0x00000043, 0x0004003D, 0x0000011C, 0x000001DA, 0x0000019F, 0x0004006F, 0x00000006, -0x000001DB, 0x000001DA, 0x00050081, 0x00000006, 0x000001DC, 0x000001DB, 0x00000043, 0x0004003D, -0x0000000B, 0x000001DD, 0x000001D1, 0x00050050, 0x0000000B, 0x000001DE, 0x00000043, 0x00000043, -0x00050088, 0x0000000B, 0x000001DF, 0x000001DE, 0x000001DD, 0x0003003E, 0x000001E0, 0x000001DC, -0x0004003D, 0x0000000B, 0x000001E2, 0x0000019A, 0x0003003E, 0x000001E1, 0x000001E2, 0x0003003E, -0x000001E3, 0x000001DF, 0x0004003D, 0x00000006, 0x000001E5, 0x000001D8, 0x0003003E, 0x000001E4, -0x000001E5, 0x00090039, 0x0000000D, 0x000001E6, 0x00000029, 0x000001A8, 0x000001E0, 0x000001E1, -0x000001E3, 0x000001E4, 0x0003003E, 0x000001D9, 0x000001E6, 0x0004003D, 0x00000008, 0x000001E8, -0x000001A8, 0x0004003D, 0x0000000B, 0x000001E9, 0x0000019A, 0x0004003D, 0x0000011C, 0x000001EA, -0x0000019F, 0x0004006F, 0x00000006, 0x000001EB, 0x000001EA, 0x00070058, 0x00000015, 0x000001EC, -0x000001E8, 0x000001E9, 0x00000002, 0x000001EB, 0x0008004F, 0x0000000D, 0x000001ED, 0x000001EC, -0x000001EC, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000001E7, 0x000001ED, 0x0004003D, -0x0000000D, 0x000001EE, 0x000001E7, 0x0004003D, 0x0000000D, 0x000001EF, 0x000001D9, 0x00050081, -0x0000000D, 0x000001F0, 0x000001EE, 0x000001EF, 0x00050041, 0x0000000A, 0x000001F1, 0x000001AF, -0x000000EC, 0x00050051, 0x00000006, 0x000001F2, 0x000001F0, 0x00000000, 0x0003003E, 0x000001F1, -0x000001F2, 0x00050041, 0x0000000A, 0x000001F3, 0x000001AF, 0x000000EF, 0x00050051, 0x00000006, -0x000001F4, 0x000001F0, 0x00000001, 0x0003003E, 0x000001F3, 0x000001F4, 0x00050041, 0x0000000A, -0x000001F5, 0x000001AF, 0x000000F3, 0x00050051, 0x00000006, 0x000001F6, 0x000001F0, 0x00000002, -0x0003003E, 0x000001F5, 0x000001F6, 0x000200F9, 0x000001D0, 0x000200F8, 0x000001F7, 0x0004003D, -0x0000011C, 0x000001F8, 0x000001A3, 0x000500AA, 0x000001B2, 0x000001FA, 0x000001F8, 0x000001F9, -0x000300F7, 0x000001FC, 0x00000000, 0x000400FA, 0x000001FA, 0x000001FB, 0x00000224, 0x000200F8, -0x000001FB, 0x0004003D, 0x00000008, 0x000001FF, 0x000001FE, 0x0004003D, 0x0000011C, 0x00000200, -0x0000019F, 0x00050080, 0x0000011C, 0x00000201, 0x00000200, 0x00000196, 0x00040064, 0x00000007, -0x00000202, 0x000001FF, 0x00050067, 0x000001AC, 0x00000203, 0x00000202, 0x00000201, 0x0004006F, -0x0000000B, 0x00000204, 0x00000203, 0x0003003E, 0x000001FD, 0x00000204, 0x0003003E, 0x00000205, -0x00000043, 0x0004003D, 0x0000011C, 0x00000207, 0x0000019F, 0x0004006F, 0x00000006, 0x00000208, -0x00000207, 0x00050081, 0x00000006, 0x00000209, 0x00000208, 0x00000043, 0x0004003D, 0x0000000B, -0x0000020A, 0x000001FD, 0x00050050, 0x0000000B, 0x0000020B, 0x00000043, 0x00000043, 0x00050088, -0x0000000B, 0x0000020C, 0x0000020B, 0x0000020A, 0x0003003E, 0x0000020D, 0x00000209, 0x0004003D, -0x0000000B, 0x0000020F, 0x0000019A, 0x0003003E, 0x0000020E, 0x0000020F, 0x0003003E, 0x00000210, -0x0000020C, 0x0004003D, 0x00000006, 0x00000212, 0x00000205, 0x0003003E, 0x00000211, 0x00000212, -0x00090039, 0x0000000D, 0x00000213, 0x00000029, 0x000001FE, 0x0000020D, 0x0000020E, 0x00000210, -0x00000211, 0x0003003E, 0x00000206, 0x00000213, 0x0004003D, 0x00000008, 0x00000215, 0x000001A8, -0x0004003D, 0x0000000B, 0x00000216, 0x0000019A, 0x0004003D, 0x0000011C, 0x00000217, 0x0000019F, -0x0004006F, 0x00000006, 0x00000218, 0x00000217, 0x00070058, 0x00000015, 0x00000219, 0x00000215, -0x00000216, 0x00000002, 0x00000218, 0x0008004F, 0x0000000D, 0x0000021A, 0x00000219, 0x00000219, -0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000214, 0x0000021A, 0x0004003D, 0x0000000D, -0x0000021B, 0x00000214, 0x0004003D, 0x0000000D, 0x0000021C, 0x00000206, 0x00050081, 0x0000000D, -0x0000021D, 0x0000021B, 0x0000021C, 0x00050041, 0x0000000A, 0x0000021E, 0x000001AF, 0x000000EC, -0x00050051, 0x00000006, 0x0000021F, 0x0000021D, 0x00000000, 0x0003003E, 0x0000021E, 0x0000021F, -0x00050041, 0x0000000A, 0x00000220, 0x000001AF, 0x000000EF, 0x00050051, 0x00000006, 0x00000221, -0x0000021D, 0x00000001, 0x0003003E, 0x00000220, 0x00000221, 0x00050041, 0x0000000A, 0x00000222, -0x000001AF, 0x000000F3, 0x00050051, 0x00000006, 0x00000223, 0x0000021D, 0x00000002, 0x0003003E, -0x00000222, 0x00000223, 0x000200F9, 0x000001FC, 0x000200F8, 0x00000224, 0x0004003D, 0x0000011C, -0x00000225, 0x000001A3, 0x000500AA, 0x000001B2, 0x00000226, 0x00000225, 0x00000196, 0x000300F7, -0x00000228, 0x00000000, 0x000400FA, 0x00000226, 0x00000227, 0x00000228, 0x000200F8, 0x00000227, -0x0004003D, 0x0000011C, 0x00000229, 0x0000019F, 0x0004006F, 0x00000006, 0x0000022A, 0x00000229, -0x0004003D, 0x0000000B, 0x0000022B, 0x000001A7, 0x00050050, 0x0000000B, 0x0000022C, 0x00000043, -0x00000043, 0x00050088, 0x0000000B, 0x0000022D, 0x0000022C, 0x0000022B, 0x0003003E, 0x0000022E, -0x0000022A, 0x0004003D, 0x0000000B, 0x00000230, 0x0000019A, 0x0003003E, 0x0000022F, 0x00000230, -0x0003003E, 0x00000231, 0x0000022D, 0x00080039, 0x0000000D, 0x00000232, 0x00000013, 0x000001A8, -0x0000022E, 0x0000022F, 0x00000231, 0x00050041, 0x0000000A, 0x00000233, 0x000001AF, 0x000000EC, -0x00050051, 0x00000006, 0x00000234, 0x00000232, 0x00000000, 0x0003003E, 0x00000233, 0x00000234, -0x00050041, 0x0000000A, 0x00000235, 0x000001AF, 0x000000EF, 0x00050051, 0x00000006, 0x00000236, -0x00000232, 0x00000001, 0x0003003E, 0x00000235, 0x00000236, 0x00050041, 0x0000000A, 0x00000237, -0x000001AF, 0x000000F3, 0x00050051, 0x00000006, 0x00000238, 0x00000232, 0x00000002, 0x0003003E, -0x00000237, 0x00000238, 0x000200F9, 0x00000228, 0x000200F8, 0x00000228, 0x000200F9, 0x000001FC, -0x000200F8, 0x000001FC, 0x000200F9, 0x000001D0, 0x000200F8, 0x000001D0, 0x000200F9, 0x000001B5, -0x000200F8, 0x000001B5, 0x0004003D, 0x00000015, 0x0000023B, 0x000001AF, 0x0003003E, 0x0000023A, -0x0000023B, 0x000100FD, 0x00010038, 0x00050036, 0x0000000D, 0x00000013, 0x00000000, 0x0000000E, -0x00030037, 0x00000009, 0x0000000F, 0x00030037, 0x0000000A, 0x00000010, 0x00030037, 0x0000000C, -0x00000011, 0x00030037, 0x0000000C, 0x00000012, 0x000200F8, 0x00000014, 0x0004003B, 0x00000017, -0x0000002B, 0x00000007, 0x0004003B, 0x00000017, 0x00000034, 0x00000007, 0x0004003B, 0x00000017, -0x0000003F, 0x00000007, 0x0004003B, 0x00000017, 0x0000004A, 0x00000007, 0x0004003B, 0x00000017, -0x00000054, 0x00000007, 0x0004003B, 0x00000017, 0x0000005E, 0x00000007, 0x0004003B, 0x00000017, -0x00000069, 0x00000007, 0x0004003B, 0x00000017, 0x00000074, 0x00000007, 0x0004003B, 0x00000017, -0x0000007F, 0x00000007, 0x0004003B, 0x00000017, 0x00000089, 0x00000007, 0x0004003B, 0x00000017, -0x00000092, 0x00000007, 0x0004003B, 0x00000017, 0x0000009C, 0x00000007, 0x0004003B, 0x00000017, -0x000000A5, 0x00000007, 0x0004003B, 0x00000017, 0x000000AF, 0x00000007, 0x0004003D, 0x00000008, -0x0000002C, 0x0000000F, 0x0004003D, 0x0000000B, 0x0000002D, 0x00000011, 0x0004003D, 0x00000006, -0x0000002E, 0x00000010, 0x00070058, 0x00000015, 0x0000002F, 0x0000002C, 0x0000002D, 0x00000002, -0x0000002E, 0x0008004F, 0x0000000D, 0x00000030, 0x0000002F, 0x0000002F, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x0000002B, 0x00000030, 0x0004003D, 0x0000000B, 0x00000032, 0x00000012, -0x0005008E, 0x0000000B, 0x00000033, 0x00000032, 0x00000031, 0x0003003E, 0x00000012, 0x00000033, -0x0004003D, 0x00000008, 0x00000035, 0x0000000F, 0x0004003D, 0x0000000B, 0x00000036, 0x00000011, -0x0004003D, 0x0000000B, 0x00000037, 0x00000012, 0x00050085, 0x0000000B, 0x0000003A, 0x00000037, -0x00000039, 0x00050081, 0x0000000B, 0x0000003B, 0x00000036, 0x0000003A, 0x0004003D, 0x00000006, -0x0000003C, 0x00000010, 0x00070058, 0x00000015, 0x0000003D, 0x00000035, 0x0000003B, 0x00000002, -0x0000003C, 0x0008004F, 0x0000000D, 0x0000003E, 0x0000003D, 0x0000003D, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x00000034, 0x0000003E, 0x0004003D, 0x00000008, 0x00000040, 0x0000000F, -0x0004003D, 0x0000000B, 0x00000041, 0x00000011, 0x0004003D, 0x0000000B, 0x00000042, 0x00000012, -0x00050085, 0x0000000B, 0x00000045, 0x00000042, 0x00000044, 0x00050081, 0x0000000B, 0x00000046, -0x00000041, 0x00000045, 0x0004003D, 0x00000006, 0x00000047, 0x00000010, 0x00070058, 0x00000015, -0x00000048, 0x00000040, 0x00000046, 0x00000002, 0x00000047, 0x0008004F, 0x0000000D, 0x00000049, -0x00000048, 0x00000048, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000003F, 0x00000049, -0x0004003D, 0x00000008, 0x0000004B, 0x0000000F, 0x0004003D, 0x0000000B, 0x0000004C, 0x00000011, -0x0004003D, 0x0000000B, 0x0000004D, 0x00000012, 0x00050085, 0x0000000B, 0x0000004F, 0x0000004D, -0x0000004E, 0x00050081, 0x0000000B, 0x00000050, 0x0000004C, 0x0000004F, 0x0004003D, 0x00000006, -0x00000051, 0x00000010, 0x00070058, 0x00000015, 0x00000052, 0x0000004B, 0x00000050, 0x00000002, -0x00000051, 0x0008004F, 0x0000000D, 0x00000053, 0x00000052, 0x00000052, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x0000004A, 0x00000053, 0x0004003D, 0x00000008, 0x00000055, 0x0000000F, -0x0004003D, 0x0000000B, 0x00000056, 0x00000011, 0x0004003D, 0x0000000B, 0x00000057, 0x00000012, -0x00050085, 0x0000000B, 0x00000059, 0x00000057, 0x00000058, 0x00050081, 0x0000000B, 0x0000005A, -0x00000056, 0x00000059, 0x0004003D, 0x00000006, 0x0000005B, 0x00000010, 0x00070058, 0x00000015, -0x0000005C, 0x00000055, 0x0000005A, 0x00000002, 0x0000005B, 0x0008004F, 0x0000000D, 0x0000005D, -0x0000005C, 0x0000005C, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000054, 0x0000005D, -0x0004003D, 0x00000008, 0x0000005F, 0x0000000F, 0x0004003D, 0x0000000B, 0x00000060, 0x00000011, -0x0004003D, 0x0000000B, 0x00000061, 0x00000012, 0x00050085, 0x0000000B, 0x00000064, 0x00000061, -0x00000063, 0x00050081, 0x0000000B, 0x00000065, 0x00000060, 0x00000064, 0x0004003D, 0x00000006, -0x00000066, 0x00000010, 0x00070058, 0x00000015, 0x00000067, 0x0000005F, 0x00000065, 0x00000002, -0x00000066, 0x0008004F, 0x0000000D, 0x00000068, 0x00000067, 0x00000067, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x0000005E, 0x00000068, 0x0004003D, 0x00000008, 0x0000006A, 0x0000000F, -0x0004003D, 0x0000000B, 0x0000006B, 0x00000011, 0x0004003D, 0x0000000B, 0x0000006C, 0x00000012, -0x00050085, 0x0000000B, 0x0000006F, 0x0000006C, 0x0000006E, 0x00050081, 0x0000000B, 0x00000070, -0x0000006B, 0x0000006F, 0x0004003D, 0x00000006, 0x00000071, 0x00000010, 0x00070058, 0x00000015, -0x00000072, 0x0000006A, 0x00000070, 0x00000002, 0x00000071, 0x0008004F, 0x0000000D, 0x00000073, -0x00000072, 0x00000072, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000069, 0x00000073, -0x0004003D, 0x00000008, 0x00000075, 0x0000000F, 0x0004003D, 0x0000000B, 0x00000076, 0x00000011, -0x0004003D, 0x0000000B, 0x00000077, 0x00000012, 0x00050085, 0x0000000B, 0x0000007A, 0x00000077, -0x00000079, 0x00050081, 0x0000000B, 0x0000007B, 0x00000076, 0x0000007A, 0x0004003D, 0x00000006, -0x0000007C, 0x00000010, 0x00070058, 0x00000015, 0x0000007D, 0x00000075, 0x0000007B, 0x00000002, -0x0000007C, 0x0008004F, 0x0000000D, 0x0000007E, 0x0000007D, 0x0000007D, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x00000074, 0x0000007E, 0x0004003D, 0x00000008, 0x00000080, 0x0000000F, -0x0004003D, 0x0000000B, 0x00000081, 0x00000011, 0x0004003D, 0x0000000B, 0x00000082, 0x00000012, -0x00050085, 0x0000000B, 0x00000084, 0x00000082, 0x00000083, 0x00050081, 0x0000000B, 0x00000085, -0x00000081, 0x00000084, 0x0004003D, 0x00000006, 0x00000086, 0x00000010, 0x00070058, 0x00000015, -0x00000087, 0x00000080, 0x00000085, 0x00000002, 0x00000086, 0x0008004F, 0x0000000D, 0x00000088, -0x00000087, 0x00000087, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000007F, 0x00000088, -0x0004003D, 0x00000008, 0x0000008A, 0x0000000F, 0x0004003D, 0x0000000B, 0x0000008B, 0x00000011, -0x0004003D, 0x0000000B, 0x0000008C, 0x00000012, 0x00050085, 0x0000000B, 0x0000008D, 0x0000008C, -0x00000083, 0x00050081, 0x0000000B, 0x0000008E, 0x0000008B, 0x0000008D, 0x0004003D, 0x00000006, -0x0000008F, 0x00000010, 0x00070058, 0x00000015, 0x00000090, 0x0000008A, 0x0000008E, 0x00000002, -0x0000008F, 0x0008004F, 0x0000000D, 0x00000091, 0x00000090, 0x00000090, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x00000089, 0x00000091, 0x0004003D, 0x00000008, 0x00000093, 0x0000000F, -0x0004003D, 0x0000000B, 0x00000094, 0x00000011, 0x0004003D, 0x0000000B, 0x00000095, 0x00000012, -0x00050085, 0x0000000B, 0x00000097, 0x00000095, 0x00000096, 0x00050081, 0x0000000B, 0x00000098, -0x00000094, 0x00000097, 0x0004003D, 0x00000006, 0x00000099, 0x00000010, 0x00070058, 0x00000015, -0x0000009A, 0x00000093, 0x00000098, 0x00000002, 0x00000099, 0x0008004F, 0x0000000D, 0x0000009B, -0x0000009A, 0x0000009A, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000092, 0x0000009B, -0x0004003D, 0x00000008, 0x0000009D, 0x0000000F, 0x0004003D, 0x0000000B, 0x0000009E, 0x00000011, -0x0004003D, 0x0000000B, 0x0000009F, 0x00000012, 0x00050085, 0x0000000B, 0x000000A0, 0x0000009F, -0x00000063, 0x00050081, 0x0000000B, 0x000000A1, 0x0000009E, 0x000000A0, 0x0004003D, 0x00000006, -0x000000A2, 0x00000010, 0x00070058, 0x00000015, 0x000000A3, 0x0000009D, 0x000000A1, 0x00000002, -0x000000A2, 0x0008004F, 0x0000000D, 0x000000A4, 0x000000A3, 0x000000A3, 0x00000000, 0x00000001, -0x00000002, 0x0003003E, 0x0000009C, 0x000000A4, 0x0004003D, 0x00000008, 0x000000A6, 0x0000000F, -0x0004003D, 0x0000000B, 0x000000A7, 0x00000011, 0x0004003D, 0x0000000B, 0x000000A8, 0x00000012, -0x00050085, 0x0000000B, 0x000000AA, 0x000000A8, 0x000000A9, 0x00050081, 0x0000000B, 0x000000AB, -0x000000A7, 0x000000AA, 0x0004003D, 0x00000006, 0x000000AC, 0x00000010, 0x00070058, 0x00000015, -0x000000AD, 0x000000A6, 0x000000AB, 0x00000002, 0x000000AC, 0x0008004F, 0x0000000D, 0x000000AE, -0x000000AD, 0x000000AD, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000000A5, 0x000000AE, -0x0003003E, 0x000000AF, 0x000000B0, 0x0004003D, 0x0000000D, 0x000000B1, 0x00000034, 0x0004003D, -0x0000000D, 0x000000B2, 0x0000003F, 0x00050081, 0x0000000D, 0x000000B3, 0x000000B1, 0x000000B2, -0x0004003D, 0x0000000D, 0x000000B4, 0x0000004A, 0x00050081, 0x0000000D, 0x000000B5, 0x000000B3, -0x000000B4, 0x0004003D, 0x0000000D, 0x000000B6, 0x00000054, 0x00050081, 0x0000000D, 0x000000B7, -0x000000B5, 0x000000B6, 0x0005008E, 0x0000000D, 0x000000B8, 0x000000B7, 0x00000031, 0x0004003D, -0x0000000D, 0x000000B9, 0x000000AF, 0x00050081, 0x0000000D, 0x000000BA, 0x000000B9, 0x000000B8, -0x0003003E, 0x000000AF, 0x000000BA, 0x0004003D, 0x0000000D, 0x000000BB, 0x0000005E, 0x0004003D, -0x0000000D, 0x000000BC, 0x00000069, 0x00050081, 0x0000000D, 0x000000BD, 0x000000BB, 0x000000BC, -0x0004003D, 0x0000000D, 0x000000BE, 0x0000002B, 0x00050081, 0x0000000D, 0x000000BF, 0x000000BD, -0x000000BE, 0x0004003D, 0x0000000D, 0x000000C0, 0x000000A5, 0x00050081, 0x0000000D, 0x000000C1, -0x000000BF, 0x000000C0, 0x0005008E, 0x0000000D, 0x000000C3, 0x000000C1, 0x000000C2, 0x0004003D, -0x0000000D, 0x000000C4, 0x000000AF, 0x00050081, 0x0000000D, 0x000000C5, 0x000000C4, 0x000000C3, -0x0003003E, 0x000000AF, 0x000000C5, 0x0004003D, 0x0000000D, 0x000000C6, 0x00000069, 0x0004003D, -0x0000000D, 0x000000C7, 0x00000074, 0x00050081, 0x0000000D, 0x000000C8, 0x000000C6, 0x000000C7, -0x0004003D, 0x0000000D, 0x000000C9, 0x0000007F, 0x00050081, 0x0000000D, 0x000000CA, 0x000000C8, -0x000000C9, 0x0004003D, 0x0000000D, 0x000000CB, 0x0000002B, 0x00050081, 0x0000000D, 0x000000CC, -0x000000CA, 0x000000CB, 0x0005008E, 0x0000000D, 0x000000CD, 0x000000CC, 0x000000C2, 0x0004003D, -0x0000000D, 0x000000CE, 0x000000AF, 0x00050081, 0x0000000D, 0x000000CF, 0x000000CE, 0x000000CD, -0x0003003E, 0x000000AF, 0x000000CF, 0x0004003D, 0x0000000D, 0x000000D0, 0x0000002B, 0x0004003D, -0x0000000D, 0x000000D1, 0x0000007F, 0x00050081, 0x0000000D, 0x000000D2, 0x000000D0, 0x000000D1, -0x0004003D, 0x0000000D, 0x000000D3, 0x00000089, 0x00050081, 0x0000000D, 0x000000D4, 0x000000D2, -0x000000D3, 0x0004003D, 0x0000000D, 0x000000D5, 0x00000092, 0x00050081, 0x0000000D, 0x000000D6, -0x000000D4, 0x000000D5, 0x0005008E, 0x0000000D, 0x000000D7, 0x000000D6, 0x000000C2, 0x0004003D, -0x0000000D, 0x000000D8, 0x000000AF, 0x00050081, 0x0000000D, 0x000000D9, 0x000000D8, 0x000000D7, -0x0003003E, 0x000000AF, 0x000000D9, 0x0004003D, 0x0000000D, 0x000000DA, 0x000000A5, 0x0004003D, -0x0000000D, 0x000000DB, 0x0000002B, 0x00050081, 0x0000000D, 0x000000DC, 0x000000DA, 0x000000DB, -0x0004003D, 0x0000000D, 0x000000DD, 0x00000092, 0x00050081, 0x0000000D, 0x000000DE, 0x000000DC, -0x000000DD, 0x0004003D, 0x0000000D, 0x000000DF, 0x0000009C, 0x00050081, 0x0000000D, 0x000000E0, -0x000000DE, 0x000000DF, 0x0005008E, 0x0000000D, 0x000000E1, 0x000000E0, 0x000000C2, 0x0004003D, -0x0000000D, 0x000000E2, 0x000000AF, 0x00050081, 0x0000000D, 0x000000E3, 0x000000E2, 0x000000E1, -0x0003003E, 0x000000AF, 0x000000E3, 0x0004003D, 0x0000000D, 0x000000E5, 0x000000AF, 0x0005008E, -0x0000000D, 0x000000E6, 0x000000E5, 0x000000E4, 0x0003003E, 0x000000AF, 0x000000E6, 0x0004003D, -0x0000000D, 0x000000E7, 0x000000AF, 0x000200FE, 0x000000E7, 0x00010038, 0x00050036, 0x00000015, -0x0000001C, 0x00000000, 0x00000018, 0x00030037, 0x00000016, 0x00000019, 0x00030037, 0x0000000A, -0x0000001A, 0x00030037, 0x00000017, 0x0000001B, 0x000200F8, 0x0000001D, 0x0004003B, 0x0000000A, -0x000000EA, 0x00000007, 0x0004003B, 0x0000000A, 0x000000F7, 0x00000007, 0x00050041, 0x0000000A, -0x000000ED, 0x00000019, 0x000000EC, 0x0004003D, 0x00000006, 0x000000EE, 0x000000ED, 0x00050041, -0x0000000A, 0x000000F0, 0x00000019, 0x000000EF, 0x0004003D, 0x00000006, 0x000000F1, 0x000000F0, -0x0007000C, 0x00000006, 0x000000F2, 0x00000001, 0x00000028, 0x000000EE, 0x000000F1, 0x00050041, -0x0000000A, 0x000000F4, 0x00000019, 0x000000F3, 0x0004003D, 0x00000006, 0x000000F5, 0x000000F4, -0x0007000C, 0x00000006, 0x000000F6, 0x00000001, 0x00000028, 0x000000F2, 0x000000F5, 0x0003003E, -0x000000EA, 0x000000F6, 0x0004003D, 0x00000006, 0x000000F8, 0x000000EA, 0x00050041, 0x0000000A, -0x000000F9, 0x0000001B, 0x000000EC, 0x0004003D, 0x00000006, 0x000000FA, 0x000000F9, 0x00050083, -0x00000006, 0x000000FB, 0x000000F8, 0x000000FA, 0x00050041, 0x0000000A, 0x000000FC, 0x0000001B, -0x000000EF, 0x0004003D, 0x00000006, 0x000000FD, 0x000000FC, 0x0008000C, 0x00000006, 0x000000FE, -0x00000001, 0x0000002B, 0x000000FB, 0x0000006D, 0x000000FD, 0x0003003E, 0x000000F7, 0x000000FE, -0x0004003D, 0x00000006, 0x000000FF, 0x000000F7, 0x0004003D, 0x00000006, 0x00000100, 0x000000F7, -0x00050085, 0x00000006, 0x00000101, 0x000000FF, 0x00000100, 0x00050041, 0x0000000A, 0x00000102, -0x0000001B, 0x000000F3, 0x0004003D, 0x00000006, 0x00000103, 0x00000102, 0x00050085, 0x00000006, -0x00000104, 0x00000101, 0x00000103, 0x0003003E, 0x000000F7, 0x00000104, 0x0004003D, 0x00000006, -0x00000105, 0x000000F7, 0x0004003D, 0x00000006, 0x00000106, 0x000000EA, 0x0004003D, 0x00000006, -0x00000107, 0x0000001A, 0x00050083, 0x00000006, 0x00000108, 0x00000106, 0x00000107, 0x0007000C, -0x00000006, 0x00000109, 0x00000001, 0x00000028, 0x00000105, 0x00000108, 0x0004003D, 0x00000006, -0x0000010A, 0x000000EA, 0x0007000C, 0x00000006, 0x0000010C, 0x00000001, 0x00000028, 0x0000010A, -0x0000010B, 0x00050088, 0x00000006, 0x0000010D, 0x00000109, 0x0000010C, 0x0004003D, 0x00000015, -0x0000010E, 0x00000019, 0x0005008E, 0x00000015, 0x0000010F, 0x0000010E, 0x0000010D, 0x0003003E, -0x00000019, 0x0000010F, 0x0004003D, 0x00000015, 0x00000110, 0x00000019, 0x000200FE, 0x00000110, -0x00010038, 0x00050036, 0x00000015, 0x00000021, 0x00000000, 0x0000001E, 0x00030037, 0x00000016, -0x0000001F, 0x00030037, 0x0000000C, 0x00000020, 0x000200F8, 0x00000022, 0x0004003B, 0x0000000A, -0x00000113, 0x00000007, 0x0004003B, 0x00000016, 0x0000011E, 0x00000007, 0x0004003B, 0x0000000A, -0x00000120, 0x00000007, 0x0004003B, 0x00000017, 0x00000124, 0x00000007, 0x0003003E, 0x00000113, -0x00000114, 0x0004003D, 0x00000006, 0x00000115, 0x00000113, 0x00070050, 0x00000015, 0x00000116, -0x00000115, 0x00000115, 0x00000115, 0x00000115, 0x0004003D, 0x00000015, 0x00000117, 0x0000001F, -0x0007000C, 0x00000015, 0x00000118, 0x00000001, 0x00000025, 0x00000116, 0x00000117, 0x0003003E, -0x0000001F, 0x00000118, 0x0004003D, 0x00000015, 0x0000011F, 0x0000001F, 0x0003003E, 0x0000011E, -0x0000011F, 0x00060041, 0x00000121, 0x00000122, 0x0000011B, 0x0000011D, 0x000000EC, 0x0004003D, -0x00000006, 0x00000123, 0x00000122, 0x0003003E, 0x00000120, 0x00000123, 0x00050041, 0x00000125, -0x00000126, 0x0000011B, 0x0000011D, 0x0004003D, 0x00000015, 0x00000127, 0x00000126, 0x0008004F, -0x0000000D, 0x00000128, 0x00000127, 0x00000127, 0x00000001, 0x00000002, 0x00000003, 0x0003003E, -0x00000124, 0x00000128, 0x00070039, 0x00000015, 0x00000129, 0x0000001C, 0x0000011E, 0x00000120, -0x00000124, 0x0003003E, 0x0000001F, 0x00000129, 0x0004003D, 0x00000015, 0x0000012A, 0x0000001F, -0x000200FE, 0x0000012A, 0x00010038, 0x00050036, 0x0000000D, 0x00000029, 0x00000000, 0x00000023, -0x00030037, 0x00000009, 0x00000024, 0x00030037, 0x0000000A, 0x00000025, 0x00030037, 0x0000000C, -0x00000026, 0x00030037, 0x0000000C, 0x00000027, 0x00030037, 0x0000000A, 0x00000028, 0x000200F8, -0x0000002A, 0x0004003B, 0x00000016, 0x0000012D, 0x00000007, 0x0004003B, 0x00000017, 0x00000134, -0x00000007, 0x0004003D, 0x0000000B, 0x0000012E, 0x00000027, 0x0009004F, 0x00000015, 0x0000012F, -0x0000012E, 0x0000012E, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00050085, 0x00000015, -0x00000131, 0x0000012F, 0x00000130, 0x0004003D, 0x00000006, 0x00000132, 0x00000028, 0x0005008E, -0x00000015, 0x00000133, 0x00000131, 0x00000132, 0x0003003E, 0x0000012D, 0x00000133, 0x0004003D, -0x00000008, 0x00000135, 0x00000024, 0x0004003D, 0x0000000B, 0x00000136, 0x00000026, 0x0004003D, -0x00000006, 0x00000137, 0x00000025, 0x00070058, 0x00000015, 0x00000138, 0x00000135, 0x00000136, -0x00000002, 0x00000137, 0x0008004F, 0x0000000D, 0x00000139, 0x00000138, 0x00000138, 0x00000000, -0x00000001, 0x00000002, 0x0005008E, 0x0000000D, 0x0000013B, 0x00000139, 0x0000013A, 0x0003003E, -0x00000134, 0x0000013B, 0x0004003D, 0x00000008, 0x0000013C, 0x00000024, 0x0004003D, 0x0000000B, -0x0000013D, 0x00000026, 0x0004003D, 0x00000015, 0x0000013E, 0x0000012D, 0x0007004F, 0x0000000B, -0x0000013F, 0x0000013E, 0x0000013E, 0x00000000, 0x00000001, 0x00050083, 0x0000000B, 0x00000140, -0x0000013D, 0x0000013F, 0x0004003D, 0x00000006, 0x00000141, 0x00000025, 0x00070058, 0x00000015, -0x00000142, 0x0000013C, 0x00000140, 0x00000002, 0x00000141, 0x0008004F, 0x0000000D, 0x00000143, -0x00000142, 0x00000142, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x0000000D, 0x00000144, -0x00000134, 0x00050081, 0x0000000D, 0x00000145, 0x00000144, 0x00000143, 0x0003003E, 0x00000134, -0x00000145, 0x0004003D, 0x00000008, 0x00000146, 0x00000024, 0x0004003D, 0x0000000B, 0x00000147, -0x00000026, 0x0004003D, 0x00000015, 0x00000148, 0x0000012D, 0x0007004F, 0x0000000B, 0x00000149, -0x00000148, 0x00000148, 0x00000003, 0x00000001, 0x00050083, 0x0000000B, 0x0000014A, 0x00000147, -0x00000149, 0x0004003D, 0x00000006, 0x0000014B, 0x00000025, 0x00070058, 0x00000015, 0x0000014C, -0x00000146, 0x0000014A, 0x00000002, 0x0000014B, 0x0008004F, 0x0000000D, 0x0000014D, 0x0000014C, -0x0000014C, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x0000000D, 0x0000014E, 0x0000014D, -0x00000078, 0x0004003D, 0x0000000D, 0x0000014F, 0x00000134, 0x00050081, 0x0000000D, 0x00000150, -0x0000014F, 0x0000014E, 0x0003003E, 0x00000134, 0x00000150, 0x0004003D, 0x00000008, 0x00000151, -0x00000024, 0x0004003D, 0x0000000B, 0x00000152, 0x00000026, 0x0004003D, 0x00000015, 0x00000153, -0x0000012D, 0x0007004F, 0x0000000B, 0x00000154, 0x00000153, 0x00000153, 0x00000002, 0x00000001, -0x00050083, 0x0000000B, 0x00000155, 0x00000152, 0x00000154, 0x0004003D, 0x00000006, 0x00000156, -0x00000025, 0x00070058, 0x00000015, 0x00000157, 0x00000151, 0x00000155, 0x00000002, 0x00000156, -0x0008004F, 0x0000000D, 0x00000158, 0x00000157, 0x00000157, 0x00000000, 0x00000001, 0x00000002, -0x0004003D, 0x0000000D, 0x00000159, 0x00000134, 0x00050081, 0x0000000D, 0x0000015A, 0x00000159, -0x00000158, 0x0003003E, 0x00000134, 0x0000015A, 0x0004003D, 0x00000008, 0x0000015B, 0x00000024, -0x0004003D, 0x0000000B, 0x0000015C, 0x00000026, 0x0004003D, 0x00000015, 0x0000015D, 0x0000012D, -0x0007004F, 0x0000000B, 0x0000015E, 0x0000015D, 0x0000015D, 0x00000002, 0x00000003, 0x00050081, -0x0000000B, 0x0000015F, 0x0000015C, 0x0000015E, 0x0004003D, 0x00000006, 0x00000160, 0x00000025, -0x00070058, 0x00000015, 0x00000161, 0x0000015B, 0x0000015F, 0x00000002, 0x00000160, 0x0008004F, -0x0000000D, 0x00000162, 0x00000161, 0x00000161, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, -0x0000000D, 0x00000163, 0x00000162, 0x00000078, 0x0004003D, 0x0000000D, 0x00000164, 0x00000134, -0x00050081, 0x0000000D, 0x00000165, 0x00000164, 0x00000163, 0x0003003E, 0x00000134, 0x00000165, -0x0004003D, 0x00000008, 0x00000166, 0x00000024, 0x0004003D, 0x0000000B, 0x00000167, 0x00000026, -0x0004003D, 0x00000015, 0x00000168, 0x0000012D, 0x0007004F, 0x0000000B, 0x00000169, 0x00000168, -0x00000168, 0x00000000, 0x00000003, 0x00050081, 0x0000000B, 0x0000016A, 0x00000167, 0x00000169, -0x0004003D, 0x00000006, 0x0000016B, 0x00000025, 0x00070058, 0x00000015, 0x0000016C, 0x00000166, -0x0000016A, 0x00000002, 0x0000016B, 0x0008004F, 0x0000000D, 0x0000016D, 0x0000016C, 0x0000016C, -0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x0000000D, 0x0000016E, 0x0000016D, 0x00000078, -0x0004003D, 0x0000000D, 0x0000016F, 0x00000134, 0x00050081, 0x0000000D, 0x00000170, 0x0000016F, -0x0000016E, 0x0003003E, 0x00000134, 0x00000170, 0x0004003D, 0x00000008, 0x00000171, 0x00000024, -0x0004003D, 0x0000000B, 0x00000172, 0x00000026, 0x0004003D, 0x00000015, 0x00000173, 0x0000012D, -0x0007004F, 0x0000000B, 0x00000174, 0x00000173, 0x00000173, 0x00000002, 0x00000001, 0x00050081, -0x0000000B, 0x00000175, 0x00000172, 0x00000174, 0x0004003D, 0x00000006, 0x00000176, 0x00000025, -0x00070058, 0x00000015, 0x00000177, 0x00000171, 0x00000175, 0x00000002, 0x00000176, 0x0008004F, -0x0000000D, 0x00000178, 0x00000177, 0x00000177, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, -0x0000000D, 0x00000179, 0x00000134, 0x00050081, 0x0000000D, 0x0000017A, 0x00000179, 0x00000178, -0x0003003E, 0x00000134, 0x0000017A, 0x0004003D, 0x00000008, 0x0000017B, 0x00000024, 0x0004003D, -0x0000000B, 0x0000017C, 0x00000026, 0x0004003D, 0x00000015, 0x0000017D, 0x0000012D, 0x0007004F, -0x0000000B, 0x0000017E, 0x0000017D, 0x0000017D, 0x00000003, 0x00000001, 0x00050081, 0x0000000B, -0x0000017F, 0x0000017C, 0x0000017E, 0x0004003D, 0x00000006, 0x00000180, 0x00000025, 0x00070058, -0x00000015, 0x00000181, 0x0000017B, 0x0000017F, 0x00000002, 0x00000180, 0x0008004F, 0x0000000D, -0x00000182, 0x00000181, 0x00000181, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x0000000D, -0x00000183, 0x00000182, 0x00000078, 0x0004003D, 0x0000000D, 0x00000184, 0x00000134, 0x00050081, -0x0000000D, 0x00000185, 0x00000184, 0x00000183, 0x0003003E, 0x00000134, 0x00000185, 0x0004003D, -0x00000008, 0x00000186, 0x00000024, 0x0004003D, 0x0000000B, 0x00000187, 0x00000026, 0x0004003D, -0x00000015, 0x00000188, 0x0000012D, 0x0007004F, 0x0000000B, 0x00000189, 0x00000188, 0x00000188, -0x00000000, 0x00000001, 0x00050081, 0x0000000B, 0x0000018A, 0x00000187, 0x00000189, 0x0004003D, -0x00000006, 0x0000018B, 0x00000025, 0x00070058, 0x00000015, 0x0000018C, 0x00000186, 0x0000018A, -0x00000002, 0x0000018B, 0x0008004F, 0x0000000D, 0x0000018D, 0x0000018C, 0x0000018C, 0x00000000, -0x00000001, 0x00000002, 0x0004003D, 0x0000000D, 0x0000018E, 0x00000134, 0x00050081, 0x0000000D, -0x0000018F, 0x0000018E, 0x0000018D, 0x0003003E, 0x00000134, 0x0000018F, 0x0004003D, 0x0000000D, -0x00000190, 0x00000134, 0x0005008E, 0x0000000D, 0x00000192, 0x00000190, 0x00000191, 0x000200FE, -0x00000192, 0x00010038, +0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x000C0005, +0x00000011, 0x6E776F44, 0x706D6173, 0x6F42656C, 0x42333178, 0x6E616C61, 0x28646563, 0x3B313273, +0x3B326676, 0x3B326676, 0x00000000, 0x00030005, 0x0000000E, 0x00786574, 0x00030005, 0x0000000F, +0x00007675, 0x00050005, 0x00000010, 0x65786970, 0x7A69536C, 0x00000065, 0x000A0005, 0x0000001A, +0x6E776F44, 0x706D6173, 0x6F42656C, 0x28333178, 0x3B313273, 0x763B3166, 0x763B3266, 0x003B3266, +0x00030005, 0x00000016, 0x00786574, 0x00030005, 0x00000017, 0x00646F6C, 0x00030005, 0x00000018, +0x00007675, 0x00050005, 0x00000019, 0x65786574, 0x7A69536C, 0x00000065, 0x000A0005, 0x00000022, +0x64617551, 0x69746172, 0x72685463, 0x6F687365, 0x7628646C, 0x663B3466, 0x66763B31, 0x00003B33, +0x00040005, 0x0000001F, 0x6F6C6F63, 0x00000072, 0x00050005, 0x00000020, 0x65726874, 0x6C6F6873, +0x00000064, 0x00040005, 0x00000021, 0x76727563, 0x00000065, 0x00070005, 0x00000027, 0x66657250, +0x65746C69, 0x66762872, 0x66763B34, 0x00003B32, 0x00040005, 0x00000025, 0x6F6C6F63, 0x00000072, +0x00030005, 0x00000026, 0x00007675, 0x000B0005, 0x0000002F, 0x61737055, 0x656C706D, 0x746E6554, +0x32732839, 0x31663B31, 0x3266763B, 0x3266763B, 0x3B31663B, 0x00000000, 0x00030005, 0x0000002A, +0x00786574, 0x00030005, 0x0000002B, 0x00646F6C, 0x00030005, 0x0000002C, 0x00007675, 0x00050005, +0x0000002D, 0x65786574, 0x7A69536C, 0x00000065, 0x00040005, 0x0000002E, 0x69646172, 0x00007375, +0x00030005, 0x00000031, 0x00000041, 0x00030005, 0x0000003A, 0x00000042, 0x00030005, 0x00000043, +0x00000043, 0x00030005, 0x0000004C, 0x00000044, 0x00030005, 0x00000055, 0x00000045, 0x00030005, +0x0000005E, 0x00000046, 0x00030005, 0x00000066, 0x00000047, 0x00030005, 0x0000006E, 0x00000048, +0x00030005, 0x00000076, 0x00000049, 0x00030005, 0x0000007E, 0x0000004A, 0x00030005, 0x00000086, +0x0000004B, 0x00030005, 0x0000008E, 0x0000004C, 0x00030005, 0x00000096, 0x0000004D, 0x00040005, +0x0000009E, 0x786F6268, 0x00004343, 0x00040005, 0x000000A9, 0x786F6268, 0x00004C54, 0x00040005, +0x000000B3, 0x786F6268, 0x00005254, 0x00040005, 0x000000BD, 0x786F6268, 0x00004C42, 0x00040005, +0x000000C7, 0x786F6268, 0x00005242, 0x00050005, 0x000000D1, 0x67696577, 0x43437468, 0x00000000, +0x00050005, 0x000000E0, 0x67696577, 0x4C547468, 0x00000000, 0x00050005, 0x000000EC, 0x67696577, +0x52547468, 0x00000000, 0x00050005, 0x000000F7, 0x67696577, 0x4C427468, 0x00000000, 0x00050005, +0x00000102, 0x67696577, 0x52427468, 0x00000000, 0x00050005, 0x0000010D, 0x67696577, 0x75537468, +0x0000006D, 0x00030005, 0x00000136, 0x00000041, 0x00030005, 0x0000013E, 0x00000042, 0x00030005, +0x00000147, 0x00000043, 0x00030005, 0x00000150, 0x00000044, 0x00030005, 0x00000159, 0x00000045, +0x00030005, 0x00000162, 0x00000046, 0x00030005, 0x0000016D, 0x00000047, 0x00030005, 0x00000177, +0x00000048, 0x00030005, 0x00000182, 0x00000049, 0x00030005, 0x0000018C, 0x0000004A, 0x00030005, +0x00000195, 0x0000004B, 0x00030005, 0x0000019F, 0x0000004C, 0x00030005, 0x000001A8, 0x0000004D, +0x00040005, 0x000001B2, 0x75736572, 0x0000746C, 0x00050005, 0x000001EC, 0x67697262, 0x656E7468, +0x00007373, 0x00030005, 0x000001F5, 0x00007172, 0x00050005, 0x00000211, 0x6D616C63, 0x6C615670, +0x00006575, 0x00050005, 0x00000217, 0x66696E55, 0x736D726F, 0x00000000, 0x00050006, 0x00000217, +0x00000000, 0x61726150, 0x0000736D, 0x00050006, 0x00000217, 0x00000001, 0x61726150, 0x0032736D, +0x00050005, 0x00000219, 0x6E555F75, 0x726F6669, 0x0000736D, 0x00040005, 0x0000021C, 0x61726170, +0x0000006D, 0x00040005, 0x0000021E, 0x61726170, 0x0000006D, 0x00040005, 0x00000222, 0x61726170, +0x0000006D, 0x00040005, 0x0000022B, 0x7366666F, 0x00007465, 0x00040005, 0x00000232, 0x75736572, +0x0000746C, 0x00040005, 0x00000292, 0x53676D69, 0x00657A69, 0x00050005, 0x00000297, 0x43786574, +0x64726F6F, 0x00000073, 0x00050005, 0x00000299, 0x5474756F, 0x6F437865, 0x0064726F, 0x00030005, +0x0000029C, 0x00444F4C, 0x00040005, 0x000002A0, 0x65646F4D, 0x00000000, 0x00040005, 0x000002A4, +0x53786574, 0x00657A69, 0x00050005, 0x000002A5, 0x65545F75, 0x72757478, 0x00000065, 0x00040005, +0x000002AC, 0x6F6C6F63, 0x00000072, 0x00040005, 0x000002B6, 0x61726170, 0x0000006D, 0x00040005, +0x000002B8, 0x61726170, 0x0000006D, 0x00040005, 0x000002C1, 0x61726170, 0x0000006D, 0x00040005, +0x000002C3, 0x61726170, 0x0000006D, 0x00060005, 0x000002CE, 0x6F6F6C62, 0x7865546D, 0x657A6953, +0x00000000, 0x00050005, 0x000002D5, 0x706D6173, 0x6353656C, 0x00656C61, 0x00070005, 0x000002D6, +0x61737075, 0x656C706D, 0x78655464, 0x65727574, 0x00000000, 0x00040005, 0x000002DD, 0x61726170, +0x0000006D, 0x00040005, 0x000002DE, 0x61726170, 0x0000006D, 0x00040005, 0x000002E0, 0x61726170, +0x0000006D, 0x00040005, 0x000002E1, 0x61726170, 0x0000006D, 0x00050005, 0x000002E4, 0x73697865, +0x676E6974, 0x00000000, 0x00060005, 0x000002FA, 0x6F6F6C62, 0x7865546D, 0x657A6953, 0x00000000, +0x00060005, 0x000002FB, 0x6C425F75, 0x546D6F6F, 0x75747865, 0x00006572, 0x00050005, 0x00000302, +0x706D6173, 0x6353656C, 0x00656C61, 0x00070005, 0x00000303, 0x61737075, 0x656C706D, 0x78655464, +0x65727574, 0x00000000, 0x00040005, 0x0000030A, 0x61726170, 0x0000006D, 0x00040005, 0x0000030B, +0x61726170, 0x0000006D, 0x00040005, 0x0000030D, 0x61726170, 0x0000006D, 0x00040005, 0x0000030E, +0x61726170, 0x0000006D, 0x00050005, 0x00000311, 0x73697865, 0x676E6974, 0x00000000, 0x00040005, +0x0000032B, 0x61726170, 0x0000006D, 0x00040005, 0x0000032C, 0x61726170, 0x0000006D, 0x00040005, +0x0000032E, 0x61726170, 0x0000006D, 0x00050005, 0x00000337, 0x4374756F, 0x756F6C6F, 0x00000072, +0x00050048, 0x00000217, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000217, 0x00000001, +0x00000023, 0x00000010, 0x00030047, 0x00000217, 0x00000002, 0x00040047, 0x00000299, 0x0000001E, +0x00000000, 0x00040047, 0x000002A5, 0x00000022, 0x00000000, 0x00040047, 0x000002A5, 0x00000021, +0x00000001, 0x00040047, 0x000002FB, 0x00000022, 0x00000000, 0x00040047, 0x000002FB, 0x00000021, +0x00000002, 0x00040047, 0x00000337, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, +0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00090019, 0x00000007, 0x00000006, +0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000008, +0x00000007, 0x00040020, 0x00000009, 0x00000000, 0x00000008, 0x00040017, 0x0000000A, 0x00000006, +0x00000002, 0x00040020, 0x0000000B, 0x00000007, 0x0000000A, 0x00040017, 0x0000000C, 0x00000006, +0x00000004, 0x00060021, 0x0000000D, 0x0000000C, 0x00000009, 0x0000000B, 0x0000000B, 0x00040020, +0x00000013, 0x00000007, 0x00000006, 0x00040017, 0x00000014, 0x00000006, 0x00000003, 0x00070021, +0x00000015, 0x00000014, 0x00000009, 0x00000013, 0x0000000B, 0x0000000B, 0x00040020, 0x0000001C, +0x00000007, 0x0000000C, 0x00040020, 0x0000001D, 0x00000007, 0x00000014, 0x00060021, 0x0000001E, +0x0000000C, 0x0000001C, 0x00000013, 0x0000001D, 0x00050021, 0x00000024, 0x0000000C, 0x0000001C, +0x0000000B, 0x00080021, 0x00000029, 0x00000014, 0x00000009, 0x00000013, 0x0000000B, 0x0000000B, +0x00000013, 0x0004002B, 0x00000006, 0x00000035, 0xBF800000, 0x0005002C, 0x0000000A, 0x00000036, +0x00000035, 0x00000035, 0x0004002B, 0x00000006, 0x0000003E, 0x00000000, 0x0005002C, 0x0000000A, +0x0000003F, 0x0000003E, 0x00000035, 0x0004002B, 0x00000006, 0x00000047, 0x3F800000, 0x0005002C, +0x0000000A, 0x00000048, 0x00000047, 0x00000035, 0x0004002B, 0x00000006, 0x00000050, 0xBF000000, +0x0005002C, 0x0000000A, 0x00000051, 0x00000050, 0x00000050, 0x0004002B, 0x00000006, 0x00000059, +0x3F000000, 0x0005002C, 0x0000000A, 0x0000005A, 0x00000059, 0x00000050, 0x0005002C, 0x0000000A, +0x00000062, 0x00000035, 0x0000003E, 0x0005002C, 0x0000000A, 0x0000006A, 0x0000003E, 0x0000003E, +0x0005002C, 0x0000000A, 0x00000072, 0x00000047, 0x0000003E, 0x0005002C, 0x0000000A, 0x0000007A, +0x00000050, 0x00000059, 0x0005002C, 0x0000000A, 0x00000082, 0x00000059, 0x00000059, 0x0005002C, +0x0000000A, 0x0000008A, 0x00000035, 0x00000047, 0x0005002C, 0x0000000A, 0x00000092, 0x0000003E, +0x00000047, 0x0005002C, 0x0000000A, 0x0000009A, 0x00000047, 0x00000047, 0x0004002B, 0x00000006, +0x000000A6, 0x40800000, 0x00040015, 0x000000D2, 0x00000020, 0x00000000, 0x0004002B, 0x000000D2, +0x000000D3, 0x00000000, 0x0004002B, 0x000000D2, 0x000000D6, 0x00000001, 0x0004002B, 0x000000D2, +0x000000D9, 0x00000002, 0x0004002B, 0x00000006, 0x000000E1, 0x3E000000, 0x0004002B, 0x00000006, +0x00000166, 0xC0000000, 0x0005002C, 0x0000000A, 0x00000167, 0x00000166, 0x00000166, 0x0005002C, +0x0000000A, 0x00000171, 0x00000166, 0x0000003E, 0x0004002B, 0x00000006, 0x0000017B, 0x40000000, +0x0005002C, 0x0000000A, 0x0000017C, 0x0000003E, 0x0000017B, 0x0005002C, 0x0000000A, 0x00000186, +0x0000017B, 0x0000017B, 0x0005002C, 0x0000000A, 0x00000199, 0x0000017B, 0x0000003E, 0x0005002C, +0x0000000A, 0x000001AC, 0x0000003E, 0x00000166, 0x0006002C, 0x00000014, 0x000001B3, 0x0000003E, +0x0000003E, 0x0000003E, 0x0004002B, 0x00000006, 0x000001E6, 0x3E800000, 0x0004002B, 0x00000006, +0x00000209, 0x38D1B717, 0x0004002B, 0x00000006, 0x00000212, 0x41A00000, 0x0004001E, 0x00000217, +0x0000000C, 0x0000000C, 0x00040020, 0x00000218, 0x00000009, 0x00000217, 0x0004003B, 0x00000218, +0x00000219, 0x00000009, 0x00040015, 0x0000021A, 0x00000020, 0x00000001, 0x0004002B, 0x0000021A, +0x0000021B, 0x00000000, 0x00040020, 0x0000021F, 0x00000009, 0x00000006, 0x00040020, 0x00000223, +0x00000009, 0x0000000C, 0x0007002C, 0x0000000C, 0x0000022E, 0x00000047, 0x00000047, 0x00000035, +0x0000003E, 0x0004002B, 0x00000006, 0x0000028E, 0x3D800000, 0x0004002B, 0x0000021A, 0x00000293, +0x00000001, 0x00040020, 0x00000298, 0x00000001, 0x0000000A, 0x0004003B, 0x00000298, 0x00000299, +0x00000001, 0x00040020, 0x0000029B, 0x00000007, 0x0000021A, 0x0004003B, 0x00000009, 0x000002A5, +0x00000000, 0x00040017, 0x000002A9, 0x0000021A, 0x00000002, 0x0007002C, 0x0000000C, 0x000002AD, +0x00000047, 0x0000003E, 0x00000047, 0x00000047, 0x00020014, 0x000002AF, 0x0004002B, 0x000000D2, +0x000002C6, 0x00000003, 0x0004002B, 0x0000021A, 0x000002CA, 0x00000002, 0x0004002B, 0x0000021A, +0x000002F6, 0x00000003, 0x0004003B, 0x00000009, 0x000002FB, 0x00000000, 0x00040020, 0x00000336, +0x00000003, 0x0000000C, 0x0004003B, 0x00000336, 0x00000337, 0x00000003, 0x00050036, 0x00000002, +0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x0000000B, 0x00000292, +0x00000007, 0x0004003B, 0x0000000B, 0x00000297, 0x00000007, 0x0004003B, 0x0000029B, 0x0000029C, +0x00000007, 0x0004003B, 0x0000029B, 0x000002A0, 0x00000007, 0x0004003B, 0x0000000B, 0x000002A4, +0x00000007, 0x0004003B, 0x0000001C, 0x000002AC, 0x00000007, 0x0004003B, 0x0000000B, 0x000002B6, +0x00000007, 0x0004003B, 0x0000000B, 0x000002B8, 0x00000007, 0x0004003B, 0x0000001C, 0x000002C1, +0x00000007, 0x0004003B, 0x0000000B, 0x000002C3, 0x00000007, 0x0004003B, 0x0000000B, 0x000002CE, +0x00000007, 0x0004003B, 0x00000013, 0x000002D5, 0x00000007, 0x0004003B, 0x0000001D, 0x000002D6, +0x00000007, 0x0004003B, 0x00000013, 0x000002DD, 0x00000007, 0x0004003B, 0x0000000B, 0x000002DE, +0x00000007, 0x0004003B, 0x0000000B, 0x000002E0, 0x00000007, 0x0004003B, 0x00000013, 0x000002E1, +0x00000007, 0x0004003B, 0x0000001D, 0x000002E4, 0x00000007, 0x0004003B, 0x0000000B, 0x000002FA, +0x00000007, 0x0004003B, 0x00000013, 0x00000302, 0x00000007, 0x0004003B, 0x0000001D, 0x00000303, +0x00000007, 0x0004003B, 0x00000013, 0x0000030A, 0x00000007, 0x0004003B, 0x0000000B, 0x0000030B, +0x00000007, 0x0004003B, 0x0000000B, 0x0000030D, 0x00000007, 0x0004003B, 0x00000013, 0x0000030E, +0x00000007, 0x0004003B, 0x0000001D, 0x00000311, 0x00000007, 0x0004003B, 0x00000013, 0x0000032B, +0x00000007, 0x0004003B, 0x0000000B, 0x0000032C, 0x00000007, 0x0004003B, 0x0000000B, 0x0000032E, +0x00000007, 0x00050041, 0x00000223, 0x00000294, 0x00000219, 0x00000293, 0x0004003D, 0x0000000C, +0x00000295, 0x00000294, 0x0007004F, 0x0000000A, 0x00000296, 0x00000295, 0x00000295, 0x00000002, +0x00000003, 0x0003003E, 0x00000292, 0x00000296, 0x0004003D, 0x0000000A, 0x0000029A, 0x00000299, +0x0003003E, 0x00000297, 0x0000029A, 0x00060041, 0x0000021F, 0x0000029D, 0x00000219, 0x00000293, +0x000000D3, 0x0004003D, 0x00000006, 0x0000029E, 0x0000029D, 0x0004006E, 0x0000021A, 0x0000029F, +0x0000029E, 0x0003003E, 0x0000029C, 0x0000029F, 0x00060041, 0x0000021F, 0x000002A1, 0x00000219, +0x00000293, 0x000000D6, 0x0004003D, 0x00000006, 0x000002A2, 0x000002A1, 0x0004006E, 0x0000021A, +0x000002A3, 0x000002A2, 0x0003003E, 0x000002A0, 0x000002A3, 0x0004003D, 0x00000008, 0x000002A6, +0x000002A5, 0x0004003D, 0x0000021A, 0x000002A7, 0x0000029C, 0x00040064, 0x00000007, 0x000002A8, +0x000002A6, 0x00050067, 0x000002A9, 0x000002AA, 0x000002A8, 0x000002A7, 0x0004006F, 0x0000000A, +0x000002AB, 0x000002AA, 0x0003003E, 0x000002A4, 0x000002AB, 0x0003003E, 0x000002AC, 0x000002AD, +0x0004003D, 0x0000021A, 0x000002AE, 0x000002A0, 0x000500AA, 0x000002AF, 0x000002B0, 0x000002AE, +0x0000021B, 0x000300F7, 0x000002B2, 0x00000000, 0x000400FA, 0x000002B0, 0x000002B1, 0x000002C8, +0x000200F8, 0x000002B1, 0x0004003D, 0x0000000A, 0x000002B3, 0x000002A4, 0x00050050, 0x0000000A, +0x000002B4, 0x00000047, 0x00000047, 0x00050088, 0x0000000A, 0x000002B5, 0x000002B4, 0x000002B3, +0x0004003D, 0x0000000A, 0x000002B7, 0x00000297, 0x0003003E, 0x000002B6, 0x000002B7, 0x0003003E, +0x000002B8, 0x000002B5, 0x00070039, 0x0000000C, 0x000002B9, 0x00000011, 0x000002A5, 0x000002B6, +0x000002B8, 0x0008004F, 0x00000014, 0x000002BA, 0x000002B9, 0x000002B9, 0x00000000, 0x00000001, +0x00000002, 0x00050041, 0x00000013, 0x000002BB, 0x000002AC, 0x000000D3, 0x00050051, 0x00000006, +0x000002BC, 0x000002BA, 0x00000000, 0x0003003E, 0x000002BB, 0x000002BC, 0x00050041, 0x00000013, +0x000002BD, 0x000002AC, 0x000000D6, 0x00050051, 0x00000006, 0x000002BE, 0x000002BA, 0x00000001, +0x0003003E, 0x000002BD, 0x000002BE, 0x00050041, 0x00000013, 0x000002BF, 0x000002AC, 0x000000D9, +0x00050051, 0x00000006, 0x000002C0, 0x000002BA, 0x00000002, 0x0003003E, 0x000002BF, 0x000002C0, +0x0004003D, 0x0000000C, 0x000002C2, 0x000002AC, 0x0003003E, 0x000002C1, 0x000002C2, 0x0004003D, +0x0000000A, 0x000002C4, 0x00000297, 0x0003003E, 0x000002C3, 0x000002C4, 0x00060039, 0x0000000C, +0x000002C5, 0x00000027, 0x000002C1, 0x000002C3, 0x0003003E, 0x000002AC, 0x000002C5, 0x00050041, +0x00000013, 0x000002C7, 0x000002AC, 0x000002C6, 0x0003003E, 0x000002C7, 0x00000047, 0x000200F9, +0x000002B2, 0x000200F8, 0x000002C8, 0x0004003D, 0x0000021A, 0x000002C9, 0x000002A0, 0x000500AA, +0x000002AF, 0x000002CB, 0x000002C9, 0x000002CA, 0x000300F7, 0x000002CD, 0x00000000, 0x000400FA, +0x000002CB, 0x000002CC, 0x000002F4, 0x000200F8, 0x000002CC, 0x0004003D, 0x00000008, 0x000002CF, +0x000002A5, 0x0004003D, 0x0000021A, 0x000002D0, 0x0000029C, 0x00050080, 0x0000021A, 0x000002D1, +0x000002D0, 0x00000293, 0x00040064, 0x00000007, 0x000002D2, 0x000002CF, 0x00050067, 0x000002A9, +0x000002D3, 0x000002D2, 0x000002D1, 0x0004006F, 0x0000000A, 0x000002D4, 0x000002D3, 0x0003003E, +0x000002CE, 0x000002D4, 0x0003003E, 0x000002D5, 0x00000047, 0x0004003D, 0x0000021A, 0x000002D7, +0x0000029C, 0x0004006F, 0x00000006, 0x000002D8, 0x000002D7, 0x00050081, 0x00000006, 0x000002D9, +0x000002D8, 0x00000047, 0x0004003D, 0x0000000A, 0x000002DA, 0x000002CE, 0x00050050, 0x0000000A, +0x000002DB, 0x00000047, 0x00000047, 0x00050088, 0x0000000A, 0x000002DC, 0x000002DB, 0x000002DA, +0x0003003E, 0x000002DD, 0x000002D9, 0x0004003D, 0x0000000A, 0x000002DF, 0x00000297, 0x0003003E, +0x000002DE, 0x000002DF, 0x0003003E, 0x000002E0, 0x000002DC, 0x0004003D, 0x00000006, 0x000002E2, +0x000002D5, 0x0003003E, 0x000002E1, 0x000002E2, 0x00090039, 0x00000014, 0x000002E3, 0x0000002F, +0x000002A5, 0x000002DD, 0x000002DE, 0x000002E0, 0x000002E1, 0x0003003E, 0x000002D6, 0x000002E3, +0x0004003D, 0x00000008, 0x000002E5, 0x000002A5, 0x0004003D, 0x0000000A, 0x000002E6, 0x00000297, +0x0004003D, 0x0000021A, 0x000002E7, 0x0000029C, 0x0004006F, 0x00000006, 0x000002E8, 0x000002E7, +0x00070058, 0x0000000C, 0x000002E9, 0x000002E5, 0x000002E6, 0x00000002, 0x000002E8, 0x0008004F, +0x00000014, 0x000002EA, 0x000002E9, 0x000002E9, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, +0x000002E4, 0x000002EA, 0x0004003D, 0x00000014, 0x000002EB, 0x000002E4, 0x0004003D, 0x00000014, +0x000002EC, 0x000002D6, 0x00050081, 0x00000014, 0x000002ED, 0x000002EB, 0x000002EC, 0x00050041, +0x00000013, 0x000002EE, 0x000002AC, 0x000000D3, 0x00050051, 0x00000006, 0x000002EF, 0x000002ED, +0x00000000, 0x0003003E, 0x000002EE, 0x000002EF, 0x00050041, 0x00000013, 0x000002F0, 0x000002AC, +0x000000D6, 0x00050051, 0x00000006, 0x000002F1, 0x000002ED, 0x00000001, 0x0003003E, 0x000002F0, +0x000002F1, 0x00050041, 0x00000013, 0x000002F2, 0x000002AC, 0x000000D9, 0x00050051, 0x00000006, +0x000002F3, 0x000002ED, 0x00000002, 0x0003003E, 0x000002F2, 0x000002F3, 0x000200F9, 0x000002CD, +0x000200F8, 0x000002F4, 0x0004003D, 0x0000021A, 0x000002F5, 0x000002A0, 0x000500AA, 0x000002AF, +0x000002F7, 0x000002F5, 0x000002F6, 0x000300F7, 0x000002F9, 0x00000000, 0x000400FA, 0x000002F7, +0x000002F8, 0x00000321, 0x000200F8, 0x000002F8, 0x0004003D, 0x00000008, 0x000002FC, 0x000002FB, +0x0004003D, 0x0000021A, 0x000002FD, 0x0000029C, 0x00050080, 0x0000021A, 0x000002FE, 0x000002FD, +0x00000293, 0x00040064, 0x00000007, 0x000002FF, 0x000002FC, 0x00050067, 0x000002A9, 0x00000300, +0x000002FF, 0x000002FE, 0x0004006F, 0x0000000A, 0x00000301, 0x00000300, 0x0003003E, 0x000002FA, +0x00000301, 0x0003003E, 0x00000302, 0x00000047, 0x0004003D, 0x0000021A, 0x00000304, 0x0000029C, +0x0004006F, 0x00000006, 0x00000305, 0x00000304, 0x00050081, 0x00000006, 0x00000306, 0x00000305, +0x00000047, 0x0004003D, 0x0000000A, 0x00000307, 0x000002FA, 0x00050050, 0x0000000A, 0x00000308, +0x00000047, 0x00000047, 0x00050088, 0x0000000A, 0x00000309, 0x00000308, 0x00000307, 0x0003003E, +0x0000030A, 0x00000306, 0x0004003D, 0x0000000A, 0x0000030C, 0x00000297, 0x0003003E, 0x0000030B, +0x0000030C, 0x0003003E, 0x0000030D, 0x00000309, 0x0004003D, 0x00000006, 0x0000030F, 0x00000302, +0x0003003E, 0x0000030E, 0x0000030F, 0x00090039, 0x00000014, 0x00000310, 0x0000002F, 0x000002FB, +0x0000030A, 0x0000030B, 0x0000030D, 0x0000030E, 0x0003003E, 0x00000303, 0x00000310, 0x0004003D, +0x00000008, 0x00000312, 0x000002A5, 0x0004003D, 0x0000000A, 0x00000313, 0x00000297, 0x0004003D, +0x0000021A, 0x00000314, 0x0000029C, 0x0004006F, 0x00000006, 0x00000315, 0x00000314, 0x00070058, +0x0000000C, 0x00000316, 0x00000312, 0x00000313, 0x00000002, 0x00000315, 0x0008004F, 0x00000014, +0x00000317, 0x00000316, 0x00000316, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000311, +0x00000317, 0x0004003D, 0x00000014, 0x00000318, 0x00000311, 0x0004003D, 0x00000014, 0x00000319, +0x00000303, 0x00050081, 0x00000014, 0x0000031A, 0x00000318, 0x00000319, 0x00050041, 0x00000013, +0x0000031B, 0x000002AC, 0x000000D3, 0x00050051, 0x00000006, 0x0000031C, 0x0000031A, 0x00000000, +0x0003003E, 0x0000031B, 0x0000031C, 0x00050041, 0x00000013, 0x0000031D, 0x000002AC, 0x000000D6, +0x00050051, 0x00000006, 0x0000031E, 0x0000031A, 0x00000001, 0x0003003E, 0x0000031D, 0x0000031E, +0x00050041, 0x00000013, 0x0000031F, 0x000002AC, 0x000000D9, 0x00050051, 0x00000006, 0x00000320, +0x0000031A, 0x00000002, 0x0003003E, 0x0000031F, 0x00000320, 0x000200F9, 0x000002F9, 0x000200F8, +0x00000321, 0x0004003D, 0x0000021A, 0x00000322, 0x000002A0, 0x000500AA, 0x000002AF, 0x00000323, +0x00000322, 0x00000293, 0x000300F7, 0x00000325, 0x00000000, 0x000400FA, 0x00000323, 0x00000324, +0x00000325, 0x000200F8, 0x00000324, 0x0004003D, 0x0000021A, 0x00000326, 0x0000029C, 0x0004006F, +0x00000006, 0x00000327, 0x00000326, 0x0004003D, 0x0000000A, 0x00000328, 0x000002A4, 0x00050050, +0x0000000A, 0x00000329, 0x00000047, 0x00000047, 0x00050088, 0x0000000A, 0x0000032A, 0x00000329, +0x00000328, 0x0003003E, 0x0000032B, 0x00000327, 0x0004003D, 0x0000000A, 0x0000032D, 0x00000297, +0x0003003E, 0x0000032C, 0x0000032D, 0x0003003E, 0x0000032E, 0x0000032A, 0x00080039, 0x00000014, +0x0000032F, 0x0000001A, 0x000002A5, 0x0000032B, 0x0000032C, 0x0000032E, 0x00050041, 0x00000013, +0x00000330, 0x000002AC, 0x000000D3, 0x00050051, 0x00000006, 0x00000331, 0x0000032F, 0x00000000, +0x0003003E, 0x00000330, 0x00000331, 0x00050041, 0x00000013, 0x00000332, 0x000002AC, 0x000000D6, +0x00050051, 0x00000006, 0x00000333, 0x0000032F, 0x00000001, 0x0003003E, 0x00000332, 0x00000333, +0x00050041, 0x00000013, 0x00000334, 0x000002AC, 0x000000D9, 0x00050051, 0x00000006, 0x00000335, +0x0000032F, 0x00000002, 0x0003003E, 0x00000334, 0x00000335, 0x000200F9, 0x00000325, 0x000200F8, +0x00000325, 0x000200F9, 0x000002F9, 0x000200F8, 0x000002F9, 0x000200F9, 0x000002CD, 0x000200F8, +0x000002CD, 0x000200F9, 0x000002B2, 0x000200F8, 0x000002B2, 0x0004003D, 0x0000000C, 0x00000338, +0x000002AC, 0x0003003E, 0x00000337, 0x00000338, 0x000100FD, 0x00010038, 0x00050036, 0x0000000C, +0x00000011, 0x00000000, 0x0000000D, 0x00030037, 0x00000009, 0x0000000E, 0x00030037, 0x0000000B, +0x0000000F, 0x00030037, 0x0000000B, 0x00000010, 0x000200F8, 0x00000012, 0x0004003B, 0x0000001C, +0x00000031, 0x00000007, 0x0004003B, 0x0000001C, 0x0000003A, 0x00000007, 0x0004003B, 0x0000001C, +0x00000043, 0x00000007, 0x0004003B, 0x0000001C, 0x0000004C, 0x00000007, 0x0004003B, 0x0000001C, +0x00000055, 0x00000007, 0x0004003B, 0x0000001C, 0x0000005E, 0x00000007, 0x0004003B, 0x0000001C, +0x00000066, 0x00000007, 0x0004003B, 0x0000001C, 0x0000006E, 0x00000007, 0x0004003B, 0x0000001C, +0x00000076, 0x00000007, 0x0004003B, 0x0000001C, 0x0000007E, 0x00000007, 0x0004003B, 0x0000001C, +0x00000086, 0x00000007, 0x0004003B, 0x0000001C, 0x0000008E, 0x00000007, 0x0004003B, 0x0000001C, +0x00000096, 0x00000007, 0x0004003B, 0x0000001C, 0x0000009E, 0x00000007, 0x0004003B, 0x0000001C, +0x000000A9, 0x00000007, 0x0004003B, 0x0000001C, 0x000000B3, 0x00000007, 0x0004003B, 0x0000001C, +0x000000BD, 0x00000007, 0x0004003B, 0x0000001C, 0x000000C7, 0x00000007, 0x0004003B, 0x00000013, +0x000000D1, 0x00000007, 0x0004003B, 0x00000013, 0x000000E0, 0x00000007, 0x0004003B, 0x00000013, +0x000000EC, 0x00000007, 0x0004003B, 0x00000013, 0x000000F7, 0x00000007, 0x0004003B, 0x00000013, +0x00000102, 0x00000007, 0x0004003B, 0x00000013, 0x0000010D, 0x00000007, 0x0004003D, 0x00000008, +0x00000032, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000033, 0x0000000F, 0x0004003D, 0x0000000A, +0x00000034, 0x00000010, 0x00050085, 0x0000000A, 0x00000037, 0x00000034, 0x00000036, 0x00050081, +0x0000000A, 0x00000038, 0x00000033, 0x00000037, 0x00050057, 0x0000000C, 0x00000039, 0x00000032, +0x00000038, 0x0003003E, 0x00000031, 0x00000039, 0x0004003D, 0x00000008, 0x0000003B, 0x0000000E, +0x0004003D, 0x0000000A, 0x0000003C, 0x0000000F, 0x0004003D, 0x0000000A, 0x0000003D, 0x00000010, +0x00050085, 0x0000000A, 0x00000040, 0x0000003D, 0x0000003F, 0x00050081, 0x0000000A, 0x00000041, +0x0000003C, 0x00000040, 0x00050057, 0x0000000C, 0x00000042, 0x0000003B, 0x00000041, 0x0003003E, +0x0000003A, 0x00000042, 0x0004003D, 0x00000008, 0x00000044, 0x0000000E, 0x0004003D, 0x0000000A, +0x00000045, 0x0000000F, 0x0004003D, 0x0000000A, 0x00000046, 0x00000010, 0x00050085, 0x0000000A, +0x00000049, 0x00000046, 0x00000048, 0x00050081, 0x0000000A, 0x0000004A, 0x00000045, 0x00000049, +0x00050057, 0x0000000C, 0x0000004B, 0x00000044, 0x0000004A, 0x0003003E, 0x00000043, 0x0000004B, +0x0004003D, 0x00000008, 0x0000004D, 0x0000000E, 0x0004003D, 0x0000000A, 0x0000004E, 0x0000000F, +0x0004003D, 0x0000000A, 0x0000004F, 0x00000010, 0x00050085, 0x0000000A, 0x00000052, 0x0000004F, +0x00000051, 0x00050081, 0x0000000A, 0x00000053, 0x0000004E, 0x00000052, 0x00050057, 0x0000000C, +0x00000054, 0x0000004D, 0x00000053, 0x0003003E, 0x0000004C, 0x00000054, 0x0004003D, 0x00000008, +0x00000056, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000057, 0x0000000F, 0x0004003D, 0x0000000A, +0x00000058, 0x00000010, 0x00050085, 0x0000000A, 0x0000005B, 0x00000058, 0x0000005A, 0x00050081, +0x0000000A, 0x0000005C, 0x00000057, 0x0000005B, 0x00050057, 0x0000000C, 0x0000005D, 0x00000056, +0x0000005C, 0x0003003E, 0x00000055, 0x0000005D, 0x0004003D, 0x00000008, 0x0000005F, 0x0000000E, +0x0004003D, 0x0000000A, 0x00000060, 0x0000000F, 0x0004003D, 0x0000000A, 0x00000061, 0x00000010, +0x00050085, 0x0000000A, 0x00000063, 0x00000061, 0x00000062, 0x00050081, 0x0000000A, 0x00000064, +0x00000060, 0x00000063, 0x00050057, 0x0000000C, 0x00000065, 0x0000005F, 0x00000064, 0x0003003E, +0x0000005E, 0x00000065, 0x0004003D, 0x00000008, 0x00000067, 0x0000000E, 0x0004003D, 0x0000000A, +0x00000068, 0x0000000F, 0x0004003D, 0x0000000A, 0x00000069, 0x00000010, 0x00050085, 0x0000000A, +0x0000006B, 0x00000069, 0x0000006A, 0x00050081, 0x0000000A, 0x0000006C, 0x00000068, 0x0000006B, +0x00050057, 0x0000000C, 0x0000006D, 0x00000067, 0x0000006C, 0x0003003E, 0x00000066, 0x0000006D, +0x0004003D, 0x00000008, 0x0000006F, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000070, 0x0000000F, +0x0004003D, 0x0000000A, 0x00000071, 0x00000010, 0x00050085, 0x0000000A, 0x00000073, 0x00000071, +0x00000072, 0x00050081, 0x0000000A, 0x00000074, 0x00000070, 0x00000073, 0x00050057, 0x0000000C, +0x00000075, 0x0000006F, 0x00000074, 0x0003003E, 0x0000006E, 0x00000075, 0x0004003D, 0x00000008, +0x00000077, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000078, 0x0000000F, 0x0004003D, 0x0000000A, +0x00000079, 0x00000010, 0x00050085, 0x0000000A, 0x0000007B, 0x00000079, 0x0000007A, 0x00050081, +0x0000000A, 0x0000007C, 0x00000078, 0x0000007B, 0x00050057, 0x0000000C, 0x0000007D, 0x00000077, +0x0000007C, 0x0003003E, 0x00000076, 0x0000007D, 0x0004003D, 0x00000008, 0x0000007F, 0x0000000E, +0x0004003D, 0x0000000A, 0x00000080, 0x0000000F, 0x0004003D, 0x0000000A, 0x00000081, 0x00000010, +0x00050085, 0x0000000A, 0x00000083, 0x00000081, 0x00000082, 0x00050081, 0x0000000A, 0x00000084, +0x00000080, 0x00000083, 0x00050057, 0x0000000C, 0x00000085, 0x0000007F, 0x00000084, 0x0003003E, +0x0000007E, 0x00000085, 0x0004003D, 0x00000008, 0x00000087, 0x0000000E, 0x0004003D, 0x0000000A, +0x00000088, 0x0000000F, 0x0004003D, 0x0000000A, 0x00000089, 0x00000010, 0x00050085, 0x0000000A, +0x0000008B, 0x00000089, 0x0000008A, 0x00050081, 0x0000000A, 0x0000008C, 0x00000088, 0x0000008B, +0x00050057, 0x0000000C, 0x0000008D, 0x00000087, 0x0000008C, 0x0003003E, 0x00000086, 0x0000008D, +0x0004003D, 0x00000008, 0x0000008F, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000090, 0x0000000F, +0x0004003D, 0x0000000A, 0x00000091, 0x00000010, 0x00050085, 0x0000000A, 0x00000093, 0x00000091, +0x00000092, 0x00050081, 0x0000000A, 0x00000094, 0x00000090, 0x00000093, 0x00050057, 0x0000000C, +0x00000095, 0x0000008F, 0x00000094, 0x0003003E, 0x0000008E, 0x00000095, 0x0004003D, 0x00000008, +0x00000097, 0x0000000E, 0x0004003D, 0x0000000A, 0x00000098, 0x0000000F, 0x0004003D, 0x0000000A, +0x00000099, 0x00000010, 0x00050085, 0x0000000A, 0x0000009B, 0x00000099, 0x0000009A, 0x00050081, +0x0000000A, 0x0000009C, 0x00000098, 0x0000009B, 0x00050057, 0x0000000C, 0x0000009D, 0x00000097, +0x0000009C, 0x0003003E, 0x00000096, 0x0000009D, 0x0004003D, 0x0000000C, 0x0000009F, 0x0000004C, +0x0004003D, 0x0000000C, 0x000000A0, 0x00000055, 0x00050081, 0x0000000C, 0x000000A1, 0x0000009F, +0x000000A0, 0x0004003D, 0x0000000C, 0x000000A2, 0x0000007E, 0x00050081, 0x0000000C, 0x000000A3, +0x000000A1, 0x000000A2, 0x0004003D, 0x0000000C, 0x000000A4, 0x00000076, 0x00050081, 0x0000000C, +0x000000A5, 0x000000A3, 0x000000A4, 0x00070050, 0x0000000C, 0x000000A7, 0x000000A6, 0x000000A6, +0x000000A6, 0x000000A6, 0x00050088, 0x0000000C, 0x000000A8, 0x000000A5, 0x000000A7, 0x0003003E, +0x0000009E, 0x000000A8, 0x0004003D, 0x0000000C, 0x000000AA, 0x00000031, 0x0004003D, 0x0000000C, +0x000000AB, 0x0000003A, 0x00050081, 0x0000000C, 0x000000AC, 0x000000AA, 0x000000AB, 0x0004003D, +0x0000000C, 0x000000AD, 0x00000066, 0x00050081, 0x0000000C, 0x000000AE, 0x000000AC, 0x000000AD, +0x0004003D, 0x0000000C, 0x000000AF, 0x0000005E, 0x00050081, 0x0000000C, 0x000000B0, 0x000000AE, +0x000000AF, 0x00070050, 0x0000000C, 0x000000B1, 0x000000A6, 0x000000A6, 0x000000A6, 0x000000A6, +0x00050088, 0x0000000C, 0x000000B2, 0x000000B0, 0x000000B1, 0x0003003E, 0x000000A9, 0x000000B2, +0x0004003D, 0x0000000C, 0x000000B4, 0x0000003A, 0x0004003D, 0x0000000C, 0x000000B5, 0x00000043, +0x00050081, 0x0000000C, 0x000000B6, 0x000000B4, 0x000000B5, 0x0004003D, 0x0000000C, 0x000000B7, +0x0000006E, 0x00050081, 0x0000000C, 0x000000B8, 0x000000B6, 0x000000B7, 0x0004003D, 0x0000000C, +0x000000B9, 0x00000066, 0x00050081, 0x0000000C, 0x000000BA, 0x000000B8, 0x000000B9, 0x00070050, +0x0000000C, 0x000000BB, 0x000000A6, 0x000000A6, 0x000000A6, 0x000000A6, 0x00050088, 0x0000000C, +0x000000BC, 0x000000BA, 0x000000BB, 0x0003003E, 0x000000B3, 0x000000BC, 0x0004003D, 0x0000000C, +0x000000BE, 0x0000005E, 0x0004003D, 0x0000000C, 0x000000BF, 0x00000066, 0x00050081, 0x0000000C, +0x000000C0, 0x000000BE, 0x000000BF, 0x0004003D, 0x0000000C, 0x000000C1, 0x0000008E, 0x00050081, +0x0000000C, 0x000000C2, 0x000000C0, 0x000000C1, 0x0004003D, 0x0000000C, 0x000000C3, 0x00000086, +0x00050081, 0x0000000C, 0x000000C4, 0x000000C2, 0x000000C3, 0x00070050, 0x0000000C, 0x000000C5, +0x000000A6, 0x000000A6, 0x000000A6, 0x000000A6, 0x00050088, 0x0000000C, 0x000000C6, 0x000000C4, +0x000000C5, 0x0003003E, 0x000000BD, 0x000000C6, 0x0004003D, 0x0000000C, 0x000000C8, 0x00000066, +0x0004003D, 0x0000000C, 0x000000C9, 0x0000006E, 0x00050081, 0x0000000C, 0x000000CA, 0x000000C8, +0x000000C9, 0x0004003D, 0x0000000C, 0x000000CB, 0x00000096, 0x00050081, 0x0000000C, 0x000000CC, +0x000000CA, 0x000000CB, 0x0004003D, 0x0000000C, 0x000000CD, 0x0000008E, 0x00050081, 0x0000000C, +0x000000CE, 0x000000CC, 0x000000CD, 0x00070050, 0x0000000C, 0x000000CF, 0x000000A6, 0x000000A6, +0x000000A6, 0x000000A6, 0x00050088, 0x0000000C, 0x000000D0, 0x000000CE, 0x000000CF, 0x0003003E, +0x000000C7, 0x000000D0, 0x00050041, 0x00000013, 0x000000D4, 0x0000009E, 0x000000D3, 0x0004003D, +0x00000006, 0x000000D5, 0x000000D4, 0x00050041, 0x00000013, 0x000000D7, 0x0000009E, 0x000000D6, +0x0004003D, 0x00000006, 0x000000D8, 0x000000D7, 0x00050041, 0x00000013, 0x000000DA, 0x0000009E, +0x000000D9, 0x0004003D, 0x00000006, 0x000000DB, 0x000000DA, 0x0007000C, 0x00000006, 0x000000DC, +0x00000001, 0x00000028, 0x000000D8, 0x000000DB, 0x0007000C, 0x00000006, 0x000000DD, 0x00000001, +0x00000028, 0x000000D5, 0x000000DC, 0x00050081, 0x00000006, 0x000000DE, 0x00000047, 0x000000DD, +0x00050088, 0x00000006, 0x000000DF, 0x00000059, 0x000000DE, 0x0003003E, 0x000000D1, 0x000000DF, +0x00050041, 0x00000013, 0x000000E2, 0x000000A9, 0x000000D3, 0x0004003D, 0x00000006, 0x000000E3, +0x000000E2, 0x00050041, 0x00000013, 0x000000E4, 0x000000A9, 0x000000D6, 0x0004003D, 0x00000006, +0x000000E5, 0x000000E4, 0x00050041, 0x00000013, 0x000000E6, 0x000000A9, 0x000000D9, 0x0004003D, +0x00000006, 0x000000E7, 0x000000E6, 0x0007000C, 0x00000006, 0x000000E8, 0x00000001, 0x00000028, +0x000000E5, 0x000000E7, 0x0007000C, 0x00000006, 0x000000E9, 0x00000001, 0x00000028, 0x000000E3, +0x000000E8, 0x00050081, 0x00000006, 0x000000EA, 0x00000047, 0x000000E9, 0x00050088, 0x00000006, +0x000000EB, 0x000000E1, 0x000000EA, 0x0003003E, 0x000000E0, 0x000000EB, 0x00050041, 0x00000013, +0x000000ED, 0x000000B3, 0x000000D3, 0x0004003D, 0x00000006, 0x000000EE, 0x000000ED, 0x00050041, +0x00000013, 0x000000EF, 0x000000B3, 0x000000D6, 0x0004003D, 0x00000006, 0x000000F0, 0x000000EF, +0x00050041, 0x00000013, 0x000000F1, 0x000000B3, 0x000000D9, 0x0004003D, 0x00000006, 0x000000F2, +0x000000F1, 0x0007000C, 0x00000006, 0x000000F3, 0x00000001, 0x00000028, 0x000000F0, 0x000000F2, +0x0007000C, 0x00000006, 0x000000F4, 0x00000001, 0x00000028, 0x000000EE, 0x000000F3, 0x00050081, +0x00000006, 0x000000F5, 0x00000047, 0x000000F4, 0x00050088, 0x00000006, 0x000000F6, 0x000000E1, +0x000000F5, 0x0003003E, 0x000000EC, 0x000000F6, 0x00050041, 0x00000013, 0x000000F8, 0x000000BD, +0x000000D3, 0x0004003D, 0x00000006, 0x000000F9, 0x000000F8, 0x00050041, 0x00000013, 0x000000FA, +0x000000BD, 0x000000D6, 0x0004003D, 0x00000006, 0x000000FB, 0x000000FA, 0x00050041, 0x00000013, +0x000000FC, 0x000000BD, 0x000000D9, 0x0004003D, 0x00000006, 0x000000FD, 0x000000FC, 0x0007000C, +0x00000006, 0x000000FE, 0x00000001, 0x00000028, 0x000000FB, 0x000000FD, 0x0007000C, 0x00000006, +0x000000FF, 0x00000001, 0x00000028, 0x000000F9, 0x000000FE, 0x00050081, 0x00000006, 0x00000100, +0x00000047, 0x000000FF, 0x00050088, 0x00000006, 0x00000101, 0x000000E1, 0x00000100, 0x0003003E, +0x000000F7, 0x00000101, 0x00050041, 0x00000013, 0x00000103, 0x000000C7, 0x000000D3, 0x0004003D, +0x00000006, 0x00000104, 0x00000103, 0x00050041, 0x00000013, 0x00000105, 0x000000C7, 0x000000D6, +0x0004003D, 0x00000006, 0x00000106, 0x00000105, 0x00050041, 0x00000013, 0x00000107, 0x000000C7, +0x000000D9, 0x0004003D, 0x00000006, 0x00000108, 0x00000107, 0x0007000C, 0x00000006, 0x00000109, +0x00000001, 0x00000028, 0x00000106, 0x00000108, 0x0007000C, 0x00000006, 0x0000010A, 0x00000001, +0x00000028, 0x00000104, 0x00000109, 0x00050081, 0x00000006, 0x0000010B, 0x00000047, 0x0000010A, +0x00050088, 0x00000006, 0x0000010C, 0x000000E1, 0x0000010B, 0x0003003E, 0x00000102, 0x0000010C, +0x0004003D, 0x00000006, 0x0000010E, 0x000000D1, 0x0004003D, 0x00000006, 0x0000010F, 0x000000E0, +0x00050081, 0x00000006, 0x00000110, 0x0000010E, 0x0000010F, 0x0004003D, 0x00000006, 0x00000111, +0x000000EC, 0x00050081, 0x00000006, 0x00000112, 0x00000110, 0x00000111, 0x0004003D, 0x00000006, +0x00000113, 0x000000F7, 0x00050081, 0x00000006, 0x00000114, 0x00000112, 0x00000113, 0x0004003D, +0x00000006, 0x00000115, 0x00000102, 0x00050081, 0x00000006, 0x00000116, 0x00000114, 0x00000115, +0x0003003E, 0x0000010D, 0x00000116, 0x0004003D, 0x00000006, 0x00000117, 0x000000D1, 0x0004003D, +0x00000006, 0x00000118, 0x0000010D, 0x00050088, 0x00000006, 0x00000119, 0x00000117, 0x00000118, +0x0004003D, 0x0000000C, 0x0000011A, 0x0000009E, 0x0005008E, 0x0000000C, 0x0000011B, 0x0000011A, +0x00000119, 0x0004003D, 0x00000006, 0x0000011C, 0x000000E0, 0x0004003D, 0x00000006, 0x0000011D, +0x0000010D, 0x00050088, 0x00000006, 0x0000011E, 0x0000011C, 0x0000011D, 0x0004003D, 0x0000000C, +0x0000011F, 0x000000A9, 0x0005008E, 0x0000000C, 0x00000120, 0x0000011F, 0x0000011E, 0x00050081, +0x0000000C, 0x00000121, 0x0000011B, 0x00000120, 0x0004003D, 0x00000006, 0x00000122, 0x000000EC, +0x0004003D, 0x00000006, 0x00000123, 0x0000010D, 0x00050088, 0x00000006, 0x00000124, 0x00000122, +0x00000123, 0x0004003D, 0x0000000C, 0x00000125, 0x000000B3, 0x0005008E, 0x0000000C, 0x00000126, +0x00000125, 0x00000124, 0x00050081, 0x0000000C, 0x00000127, 0x00000121, 0x00000126, 0x0004003D, +0x00000006, 0x00000128, 0x000000F7, 0x0004003D, 0x00000006, 0x00000129, 0x0000010D, 0x00050088, +0x00000006, 0x0000012A, 0x00000128, 0x00000129, 0x0004003D, 0x0000000C, 0x0000012B, 0x000000BD, +0x0005008E, 0x0000000C, 0x0000012C, 0x0000012B, 0x0000012A, 0x00050081, 0x0000000C, 0x0000012D, +0x00000127, 0x0000012C, 0x0004003D, 0x00000006, 0x0000012E, 0x00000102, 0x0004003D, 0x00000006, +0x0000012F, 0x0000010D, 0x00050088, 0x00000006, 0x00000130, 0x0000012E, 0x0000012F, 0x0004003D, +0x0000000C, 0x00000131, 0x000000C7, 0x0005008E, 0x0000000C, 0x00000132, 0x00000131, 0x00000130, +0x00050081, 0x0000000C, 0x00000133, 0x0000012D, 0x00000132, 0x000200FE, 0x00000133, 0x00010038, +0x00050036, 0x00000014, 0x0000001A, 0x00000000, 0x00000015, 0x00030037, 0x00000009, 0x00000016, +0x00030037, 0x00000013, 0x00000017, 0x00030037, 0x0000000B, 0x00000018, 0x00030037, 0x0000000B, +0x00000019, 0x000200F8, 0x0000001B, 0x0004003B, 0x0000001D, 0x00000136, 0x00000007, 0x0004003B, +0x0000001D, 0x0000013E, 0x00000007, 0x0004003B, 0x0000001D, 0x00000147, 0x00000007, 0x0004003B, +0x0000001D, 0x00000150, 0x00000007, 0x0004003B, 0x0000001D, 0x00000159, 0x00000007, 0x0004003B, +0x0000001D, 0x00000162, 0x00000007, 0x0004003B, 0x0000001D, 0x0000016D, 0x00000007, 0x0004003B, +0x0000001D, 0x00000177, 0x00000007, 0x0004003B, 0x0000001D, 0x00000182, 0x00000007, 0x0004003B, +0x0000001D, 0x0000018C, 0x00000007, 0x0004003B, 0x0000001D, 0x00000195, 0x00000007, 0x0004003B, +0x0000001D, 0x0000019F, 0x00000007, 0x0004003B, 0x0000001D, 0x000001A8, 0x00000007, 0x0004003B, +0x0000001D, 0x000001B2, 0x00000007, 0x0004003D, 0x00000008, 0x00000137, 0x00000016, 0x0004003D, +0x0000000A, 0x00000138, 0x00000018, 0x0004003D, 0x00000006, 0x00000139, 0x00000017, 0x00070058, +0x0000000C, 0x0000013A, 0x00000137, 0x00000138, 0x00000002, 0x00000139, 0x0008004F, 0x00000014, +0x0000013B, 0x0000013A, 0x0000013A, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000136, +0x0000013B, 0x0004003D, 0x0000000A, 0x0000013C, 0x00000019, 0x0005008E, 0x0000000A, 0x0000013D, +0x0000013C, 0x00000059, 0x0003003E, 0x00000019, 0x0000013D, 0x0004003D, 0x00000008, 0x0000013F, +0x00000016, 0x0004003D, 0x0000000A, 0x00000140, 0x00000018, 0x0004003D, 0x0000000A, 0x00000141, +0x00000019, 0x00050085, 0x0000000A, 0x00000142, 0x00000141, 0x00000036, 0x00050081, 0x0000000A, +0x00000143, 0x00000140, 0x00000142, 0x0004003D, 0x00000006, 0x00000144, 0x00000017, 0x00070058, +0x0000000C, 0x00000145, 0x0000013F, 0x00000143, 0x00000002, 0x00000144, 0x0008004F, 0x00000014, +0x00000146, 0x00000145, 0x00000145, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000013E, +0x00000146, 0x0004003D, 0x00000008, 0x00000148, 0x00000016, 0x0004003D, 0x0000000A, 0x00000149, +0x00000018, 0x0004003D, 0x0000000A, 0x0000014A, 0x00000019, 0x00050085, 0x0000000A, 0x0000014B, +0x0000014A, 0x0000008A, 0x00050081, 0x0000000A, 0x0000014C, 0x00000149, 0x0000014B, 0x0004003D, +0x00000006, 0x0000014D, 0x00000017, 0x00070058, 0x0000000C, 0x0000014E, 0x00000148, 0x0000014C, +0x00000002, 0x0000014D, 0x0008004F, 0x00000014, 0x0000014F, 0x0000014E, 0x0000014E, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000147, 0x0000014F, 0x0004003D, 0x00000008, 0x00000151, +0x00000016, 0x0004003D, 0x0000000A, 0x00000152, 0x00000018, 0x0004003D, 0x0000000A, 0x00000153, +0x00000019, 0x00050085, 0x0000000A, 0x00000154, 0x00000153, 0x0000009A, 0x00050081, 0x0000000A, +0x00000155, 0x00000152, 0x00000154, 0x0004003D, 0x00000006, 0x00000156, 0x00000017, 0x00070058, +0x0000000C, 0x00000157, 0x00000151, 0x00000155, 0x00000002, 0x00000156, 0x0008004F, 0x00000014, +0x00000158, 0x00000157, 0x00000157, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000150, +0x00000158, 0x0004003D, 0x00000008, 0x0000015A, 0x00000016, 0x0004003D, 0x0000000A, 0x0000015B, +0x00000018, 0x0004003D, 0x0000000A, 0x0000015C, 0x00000019, 0x00050085, 0x0000000A, 0x0000015D, +0x0000015C, 0x00000048, 0x00050081, 0x0000000A, 0x0000015E, 0x0000015B, 0x0000015D, 0x0004003D, +0x00000006, 0x0000015F, 0x00000017, 0x00070058, 0x0000000C, 0x00000160, 0x0000015A, 0x0000015E, +0x00000002, 0x0000015F, 0x0008004F, 0x00000014, 0x00000161, 0x00000160, 0x00000160, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000159, 0x00000161, 0x0004003D, 0x00000008, 0x00000163, +0x00000016, 0x0004003D, 0x0000000A, 0x00000164, 0x00000018, 0x0004003D, 0x0000000A, 0x00000165, +0x00000019, 0x00050085, 0x0000000A, 0x00000168, 0x00000165, 0x00000167, 0x00050081, 0x0000000A, +0x00000169, 0x00000164, 0x00000168, 0x0004003D, 0x00000006, 0x0000016A, 0x00000017, 0x00070058, +0x0000000C, 0x0000016B, 0x00000163, 0x00000169, 0x00000002, 0x0000016A, 0x0008004F, 0x00000014, +0x0000016C, 0x0000016B, 0x0000016B, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000162, +0x0000016C, 0x0004003D, 0x00000008, 0x0000016E, 0x00000016, 0x0004003D, 0x0000000A, 0x0000016F, +0x00000018, 0x0004003D, 0x0000000A, 0x00000170, 0x00000019, 0x00050085, 0x0000000A, 0x00000172, +0x00000170, 0x00000171, 0x00050081, 0x0000000A, 0x00000173, 0x0000016F, 0x00000172, 0x0004003D, +0x00000006, 0x00000174, 0x00000017, 0x00070058, 0x0000000C, 0x00000175, 0x0000016E, 0x00000173, +0x00000002, 0x00000174, 0x0008004F, 0x00000014, 0x00000176, 0x00000175, 0x00000175, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x0000016D, 0x00000176, 0x0004003D, 0x00000008, 0x00000178, +0x00000016, 0x0004003D, 0x0000000A, 0x00000179, 0x00000018, 0x0004003D, 0x0000000A, 0x0000017A, +0x00000019, 0x00050085, 0x0000000A, 0x0000017D, 0x0000017A, 0x0000017C, 0x00050081, 0x0000000A, +0x0000017E, 0x00000179, 0x0000017D, 0x0004003D, 0x00000006, 0x0000017F, 0x00000017, 0x00070058, +0x0000000C, 0x00000180, 0x00000178, 0x0000017E, 0x00000002, 0x0000017F, 0x0008004F, 0x00000014, +0x00000181, 0x00000180, 0x00000180, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000177, +0x00000181, 0x0004003D, 0x00000008, 0x00000183, 0x00000016, 0x0004003D, 0x0000000A, 0x00000184, +0x00000018, 0x0004003D, 0x0000000A, 0x00000185, 0x00000019, 0x00050085, 0x0000000A, 0x00000187, +0x00000185, 0x00000186, 0x00050081, 0x0000000A, 0x00000188, 0x00000184, 0x00000187, 0x0004003D, +0x00000006, 0x00000189, 0x00000017, 0x00070058, 0x0000000C, 0x0000018A, 0x00000183, 0x00000188, +0x00000002, 0x00000189, 0x0008004F, 0x00000014, 0x0000018B, 0x0000018A, 0x0000018A, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000182, 0x0000018B, 0x0004003D, 0x00000008, 0x0000018D, +0x00000016, 0x0004003D, 0x0000000A, 0x0000018E, 0x00000018, 0x0004003D, 0x0000000A, 0x0000018F, +0x00000019, 0x00050085, 0x0000000A, 0x00000190, 0x0000018F, 0x00000186, 0x00050081, 0x0000000A, +0x00000191, 0x0000018E, 0x00000190, 0x0004003D, 0x00000006, 0x00000192, 0x00000017, 0x00070058, +0x0000000C, 0x00000193, 0x0000018D, 0x00000191, 0x00000002, 0x00000192, 0x0008004F, 0x00000014, +0x00000194, 0x00000193, 0x00000193, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000018C, +0x00000194, 0x0004003D, 0x00000008, 0x00000196, 0x00000016, 0x0004003D, 0x0000000A, 0x00000197, +0x00000018, 0x0004003D, 0x0000000A, 0x00000198, 0x00000019, 0x00050085, 0x0000000A, 0x0000019A, +0x00000198, 0x00000199, 0x00050081, 0x0000000A, 0x0000019B, 0x00000197, 0x0000019A, 0x0004003D, +0x00000006, 0x0000019C, 0x00000017, 0x00070058, 0x0000000C, 0x0000019D, 0x00000196, 0x0000019B, +0x00000002, 0x0000019C, 0x0008004F, 0x00000014, 0x0000019E, 0x0000019D, 0x0000019D, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000195, 0x0000019E, 0x0004003D, 0x00000008, 0x000001A0, +0x00000016, 0x0004003D, 0x0000000A, 0x000001A1, 0x00000018, 0x0004003D, 0x0000000A, 0x000001A2, +0x00000019, 0x00050085, 0x0000000A, 0x000001A3, 0x000001A2, 0x00000167, 0x00050081, 0x0000000A, +0x000001A4, 0x000001A1, 0x000001A3, 0x0004003D, 0x00000006, 0x000001A5, 0x00000017, 0x00070058, +0x0000000C, 0x000001A6, 0x000001A0, 0x000001A4, 0x00000002, 0x000001A5, 0x0008004F, 0x00000014, +0x000001A7, 0x000001A6, 0x000001A6, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000019F, +0x000001A7, 0x0004003D, 0x00000008, 0x000001A9, 0x00000016, 0x0004003D, 0x0000000A, 0x000001AA, +0x00000018, 0x0004003D, 0x0000000A, 0x000001AB, 0x00000019, 0x00050085, 0x0000000A, 0x000001AD, +0x000001AB, 0x000001AC, 0x00050081, 0x0000000A, 0x000001AE, 0x000001AA, 0x000001AD, 0x0004003D, +0x00000006, 0x000001AF, 0x00000017, 0x00070058, 0x0000000C, 0x000001B0, 0x000001A9, 0x000001AE, +0x00000002, 0x000001AF, 0x0008004F, 0x00000014, 0x000001B1, 0x000001B0, 0x000001B0, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x000001A8, 0x000001B1, 0x0003003E, 0x000001B2, 0x000001B3, +0x0004003D, 0x00000014, 0x000001B4, 0x0000013E, 0x0004003D, 0x00000014, 0x000001B5, 0x00000147, +0x00050081, 0x00000014, 0x000001B6, 0x000001B4, 0x000001B5, 0x0004003D, 0x00000014, 0x000001B7, +0x00000150, 0x00050081, 0x00000014, 0x000001B8, 0x000001B6, 0x000001B7, 0x0004003D, 0x00000014, +0x000001B9, 0x00000159, 0x00050081, 0x00000014, 0x000001BA, 0x000001B8, 0x000001B9, 0x0005008E, +0x00000014, 0x000001BB, 0x000001BA, 0x00000059, 0x0004003D, 0x00000014, 0x000001BC, 0x000001B2, +0x00050081, 0x00000014, 0x000001BD, 0x000001BC, 0x000001BB, 0x0003003E, 0x000001B2, 0x000001BD, +0x0004003D, 0x00000014, 0x000001BE, 0x00000162, 0x0004003D, 0x00000014, 0x000001BF, 0x0000016D, +0x00050081, 0x00000014, 0x000001C0, 0x000001BE, 0x000001BF, 0x0004003D, 0x00000014, 0x000001C1, +0x00000136, 0x00050081, 0x00000014, 0x000001C2, 0x000001C0, 0x000001C1, 0x0004003D, 0x00000014, +0x000001C3, 0x000001A8, 0x00050081, 0x00000014, 0x000001C4, 0x000001C2, 0x000001C3, 0x0005008E, +0x00000014, 0x000001C5, 0x000001C4, 0x000000E1, 0x0004003D, 0x00000014, 0x000001C6, 0x000001B2, +0x00050081, 0x00000014, 0x000001C7, 0x000001C6, 0x000001C5, 0x0003003E, 0x000001B2, 0x000001C7, +0x0004003D, 0x00000014, 0x000001C8, 0x0000016D, 0x0004003D, 0x00000014, 0x000001C9, 0x00000177, +0x00050081, 0x00000014, 0x000001CA, 0x000001C8, 0x000001C9, 0x0004003D, 0x00000014, 0x000001CB, +0x00000182, 0x00050081, 0x00000014, 0x000001CC, 0x000001CA, 0x000001CB, 0x0004003D, 0x00000014, +0x000001CD, 0x00000136, 0x00050081, 0x00000014, 0x000001CE, 0x000001CC, 0x000001CD, 0x0005008E, +0x00000014, 0x000001CF, 0x000001CE, 0x000000E1, 0x0004003D, 0x00000014, 0x000001D0, 0x000001B2, +0x00050081, 0x00000014, 0x000001D1, 0x000001D0, 0x000001CF, 0x0003003E, 0x000001B2, 0x000001D1, +0x0004003D, 0x00000014, 0x000001D2, 0x00000136, 0x0004003D, 0x00000014, 0x000001D3, 0x00000182, +0x00050081, 0x00000014, 0x000001D4, 0x000001D2, 0x000001D3, 0x0004003D, 0x00000014, 0x000001D5, +0x0000018C, 0x00050081, 0x00000014, 0x000001D6, 0x000001D4, 0x000001D5, 0x0004003D, 0x00000014, +0x000001D7, 0x00000195, 0x00050081, 0x00000014, 0x000001D8, 0x000001D6, 0x000001D7, 0x0005008E, +0x00000014, 0x000001D9, 0x000001D8, 0x000000E1, 0x0004003D, 0x00000014, 0x000001DA, 0x000001B2, +0x00050081, 0x00000014, 0x000001DB, 0x000001DA, 0x000001D9, 0x0003003E, 0x000001B2, 0x000001DB, +0x0004003D, 0x00000014, 0x000001DC, 0x000001A8, 0x0004003D, 0x00000014, 0x000001DD, 0x00000136, +0x00050081, 0x00000014, 0x000001DE, 0x000001DC, 0x000001DD, 0x0004003D, 0x00000014, 0x000001DF, +0x00000195, 0x00050081, 0x00000014, 0x000001E0, 0x000001DE, 0x000001DF, 0x0004003D, 0x00000014, +0x000001E1, 0x0000019F, 0x00050081, 0x00000014, 0x000001E2, 0x000001E0, 0x000001E1, 0x0005008E, +0x00000014, 0x000001E3, 0x000001E2, 0x000000E1, 0x0004003D, 0x00000014, 0x000001E4, 0x000001B2, +0x00050081, 0x00000014, 0x000001E5, 0x000001E4, 0x000001E3, 0x0003003E, 0x000001B2, 0x000001E5, +0x0004003D, 0x00000014, 0x000001E7, 0x000001B2, 0x0005008E, 0x00000014, 0x000001E8, 0x000001E7, +0x000001E6, 0x0003003E, 0x000001B2, 0x000001E8, 0x0004003D, 0x00000014, 0x000001E9, 0x000001B2, +0x000200FE, 0x000001E9, 0x00010038, 0x00050036, 0x0000000C, 0x00000022, 0x00000000, 0x0000001E, +0x00030037, 0x0000001C, 0x0000001F, 0x00030037, 0x00000013, 0x00000020, 0x00030037, 0x0000001D, +0x00000021, 0x000200F8, 0x00000023, 0x0004003B, 0x00000013, 0x000001EC, 0x00000007, 0x0004003B, +0x00000013, 0x000001F5, 0x00000007, 0x00050041, 0x00000013, 0x000001ED, 0x0000001F, 0x000000D3, +0x0004003D, 0x00000006, 0x000001EE, 0x000001ED, 0x00050041, 0x00000013, 0x000001EF, 0x0000001F, +0x000000D6, 0x0004003D, 0x00000006, 0x000001F0, 0x000001EF, 0x0007000C, 0x00000006, 0x000001F1, +0x00000001, 0x00000028, 0x000001EE, 0x000001F0, 0x00050041, 0x00000013, 0x000001F2, 0x0000001F, +0x000000D9, 0x0004003D, 0x00000006, 0x000001F3, 0x000001F2, 0x0007000C, 0x00000006, 0x000001F4, +0x00000001, 0x00000028, 0x000001F1, 0x000001F3, 0x0003003E, 0x000001EC, 0x000001F4, 0x0004003D, +0x00000006, 0x000001F6, 0x000001EC, 0x00050041, 0x00000013, 0x000001F7, 0x00000021, 0x000000D3, +0x0004003D, 0x00000006, 0x000001F8, 0x000001F7, 0x00050083, 0x00000006, 0x000001F9, 0x000001F6, +0x000001F8, 0x00050041, 0x00000013, 0x000001FA, 0x00000021, 0x000000D6, 0x0004003D, 0x00000006, +0x000001FB, 0x000001FA, 0x0008000C, 0x00000006, 0x000001FC, 0x00000001, 0x0000002B, 0x000001F9, +0x0000003E, 0x000001FB, 0x0003003E, 0x000001F5, 0x000001FC, 0x0004003D, 0x00000006, 0x000001FD, +0x000001F5, 0x0004003D, 0x00000006, 0x000001FE, 0x000001F5, 0x00050085, 0x00000006, 0x000001FF, +0x000001FD, 0x000001FE, 0x00050041, 0x00000013, 0x00000200, 0x00000021, 0x000000D9, 0x0004003D, +0x00000006, 0x00000201, 0x00000200, 0x00050085, 0x00000006, 0x00000202, 0x000001FF, 0x00000201, +0x0003003E, 0x000001F5, 0x00000202, 0x0004003D, 0x00000006, 0x00000203, 0x000001F5, 0x0004003D, +0x00000006, 0x00000204, 0x000001EC, 0x0004003D, 0x00000006, 0x00000205, 0x00000020, 0x00050083, +0x00000006, 0x00000206, 0x00000204, 0x00000205, 0x0007000C, 0x00000006, 0x00000207, 0x00000001, +0x00000028, 0x00000203, 0x00000206, 0x0004003D, 0x00000006, 0x00000208, 0x000001EC, 0x0007000C, +0x00000006, 0x0000020A, 0x00000001, 0x00000028, 0x00000208, 0x00000209, 0x00050088, 0x00000006, +0x0000020B, 0x00000207, 0x0000020A, 0x0004003D, 0x0000000C, 0x0000020C, 0x0000001F, 0x0005008E, +0x0000000C, 0x0000020D, 0x0000020C, 0x0000020B, 0x0003003E, 0x0000001F, 0x0000020D, 0x0004003D, +0x0000000C, 0x0000020E, 0x0000001F, 0x000200FE, 0x0000020E, 0x00010038, 0x00050036, 0x0000000C, +0x00000027, 0x00000000, 0x00000024, 0x00030037, 0x0000001C, 0x00000025, 0x00030037, 0x0000000B, +0x00000026, 0x000200F8, 0x00000028, 0x0004003B, 0x00000013, 0x00000211, 0x00000007, 0x0004003B, +0x0000001C, 0x0000021C, 0x00000007, 0x0004003B, 0x00000013, 0x0000021E, 0x00000007, 0x0004003B, +0x0000001D, 0x00000222, 0x00000007, 0x0003003E, 0x00000211, 0x00000212, 0x0004003D, 0x00000006, +0x00000213, 0x00000211, 0x00070050, 0x0000000C, 0x00000214, 0x00000213, 0x00000213, 0x00000213, +0x00000213, 0x0004003D, 0x0000000C, 0x00000215, 0x00000025, 0x0007000C, 0x0000000C, 0x00000216, +0x00000001, 0x00000025, 0x00000214, 0x00000215, 0x0003003E, 0x00000025, 0x00000216, 0x0004003D, +0x0000000C, 0x0000021D, 0x00000025, 0x0003003E, 0x0000021C, 0x0000021D, 0x00060041, 0x0000021F, +0x00000220, 0x00000219, 0x0000021B, 0x000000D3, 0x0004003D, 0x00000006, 0x00000221, 0x00000220, +0x0003003E, 0x0000021E, 0x00000221, 0x00050041, 0x00000223, 0x00000224, 0x00000219, 0x0000021B, +0x0004003D, 0x0000000C, 0x00000225, 0x00000224, 0x0008004F, 0x00000014, 0x00000226, 0x00000225, +0x00000225, 0x00000001, 0x00000002, 0x00000003, 0x0003003E, 0x00000222, 0x00000226, 0x00070039, +0x0000000C, 0x00000227, 0x00000022, 0x0000021C, 0x0000021E, 0x00000222, 0x0003003E, 0x00000025, +0x00000227, 0x0004003D, 0x0000000C, 0x00000228, 0x00000025, 0x000200FE, 0x00000228, 0x00010038, +0x00050036, 0x00000014, 0x0000002F, 0x00000000, 0x00000029, 0x00030037, 0x00000009, 0x0000002A, +0x00030037, 0x00000013, 0x0000002B, 0x00030037, 0x0000000B, 0x0000002C, 0x00030037, 0x0000000B, +0x0000002D, 0x00030037, 0x00000013, 0x0000002E, 0x000200F8, 0x00000030, 0x0004003B, 0x0000001C, +0x0000022B, 0x00000007, 0x0004003B, 0x0000001D, 0x00000232, 0x00000007, 0x0004003D, 0x0000000A, +0x0000022C, 0x0000002D, 0x0009004F, 0x0000000C, 0x0000022D, 0x0000022C, 0x0000022C, 0x00000000, +0x00000001, 0x00000000, 0x00000001, 0x00050085, 0x0000000C, 0x0000022F, 0x0000022D, 0x0000022E, +0x0004003D, 0x00000006, 0x00000230, 0x0000002E, 0x0005008E, 0x0000000C, 0x00000231, 0x0000022F, +0x00000230, 0x0003003E, 0x0000022B, 0x00000231, 0x0004003D, 0x00000008, 0x00000233, 0x0000002A, +0x0004003D, 0x0000000A, 0x00000234, 0x0000002C, 0x0004003D, 0x00000006, 0x00000235, 0x0000002B, +0x00070058, 0x0000000C, 0x00000236, 0x00000233, 0x00000234, 0x00000002, 0x00000235, 0x0008004F, +0x00000014, 0x00000237, 0x00000236, 0x00000236, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, +0x00000014, 0x00000238, 0x00000237, 0x000000A6, 0x0003003E, 0x00000232, 0x00000238, 0x0004003D, +0x00000008, 0x00000239, 0x0000002A, 0x0004003D, 0x0000000A, 0x0000023A, 0x0000002C, 0x0004003D, +0x0000000C, 0x0000023B, 0x0000022B, 0x0007004F, 0x0000000A, 0x0000023C, 0x0000023B, 0x0000023B, +0x00000000, 0x00000001, 0x00050083, 0x0000000A, 0x0000023D, 0x0000023A, 0x0000023C, 0x0004003D, +0x00000006, 0x0000023E, 0x0000002B, 0x00070058, 0x0000000C, 0x0000023F, 0x00000239, 0x0000023D, +0x00000002, 0x0000023E, 0x0008004F, 0x00000014, 0x00000240, 0x0000023F, 0x0000023F, 0x00000000, +0x00000001, 0x00000002, 0x0004003D, 0x00000014, 0x00000241, 0x00000232, 0x00050081, 0x00000014, +0x00000242, 0x00000241, 0x00000240, 0x0003003E, 0x00000232, 0x00000242, 0x0004003D, 0x00000008, +0x00000243, 0x0000002A, 0x0004003D, 0x0000000A, 0x00000244, 0x0000002C, 0x0004003D, 0x0000000C, +0x00000245, 0x0000022B, 0x0007004F, 0x0000000A, 0x00000246, 0x00000245, 0x00000245, 0x00000003, +0x00000001, 0x00050083, 0x0000000A, 0x00000247, 0x00000244, 0x00000246, 0x0004003D, 0x00000006, +0x00000248, 0x0000002B, 0x00070058, 0x0000000C, 0x00000249, 0x00000243, 0x00000247, 0x00000002, +0x00000248, 0x0008004F, 0x00000014, 0x0000024A, 0x00000249, 0x00000249, 0x00000000, 0x00000001, +0x00000002, 0x0005008E, 0x00000014, 0x0000024B, 0x0000024A, 0x0000017B, 0x0004003D, 0x00000014, +0x0000024C, 0x00000232, 0x00050081, 0x00000014, 0x0000024D, 0x0000024C, 0x0000024B, 0x0003003E, +0x00000232, 0x0000024D, 0x0004003D, 0x00000008, 0x0000024E, 0x0000002A, 0x0004003D, 0x0000000A, +0x0000024F, 0x0000002C, 0x0004003D, 0x0000000C, 0x00000250, 0x0000022B, 0x0007004F, 0x0000000A, +0x00000251, 0x00000250, 0x00000250, 0x00000002, 0x00000001, 0x00050083, 0x0000000A, 0x00000252, +0x0000024F, 0x00000251, 0x0004003D, 0x00000006, 0x00000253, 0x0000002B, 0x00070058, 0x0000000C, +0x00000254, 0x0000024E, 0x00000252, 0x00000002, 0x00000253, 0x0008004F, 0x00000014, 0x00000255, +0x00000254, 0x00000254, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000014, 0x00000256, +0x00000232, 0x00050081, 0x00000014, 0x00000257, 0x00000256, 0x00000255, 0x0003003E, 0x00000232, +0x00000257, 0x0004003D, 0x00000008, 0x00000258, 0x0000002A, 0x0004003D, 0x0000000A, 0x00000259, +0x0000002C, 0x0004003D, 0x0000000C, 0x0000025A, 0x0000022B, 0x0007004F, 0x0000000A, 0x0000025B, +0x0000025A, 0x0000025A, 0x00000002, 0x00000003, 0x00050081, 0x0000000A, 0x0000025C, 0x00000259, +0x0000025B, 0x0004003D, 0x00000006, 0x0000025D, 0x0000002B, 0x00070058, 0x0000000C, 0x0000025E, +0x00000258, 0x0000025C, 0x00000002, 0x0000025D, 0x0008004F, 0x00000014, 0x0000025F, 0x0000025E, +0x0000025E, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000014, 0x00000260, 0x0000025F, +0x0000017B, 0x0004003D, 0x00000014, 0x00000261, 0x00000232, 0x00050081, 0x00000014, 0x00000262, +0x00000261, 0x00000260, 0x0003003E, 0x00000232, 0x00000262, 0x0004003D, 0x00000008, 0x00000263, +0x0000002A, 0x0004003D, 0x0000000A, 0x00000264, 0x0000002C, 0x0004003D, 0x0000000C, 0x00000265, +0x0000022B, 0x0007004F, 0x0000000A, 0x00000266, 0x00000265, 0x00000265, 0x00000000, 0x00000003, +0x00050081, 0x0000000A, 0x00000267, 0x00000264, 0x00000266, 0x0004003D, 0x00000006, 0x00000268, +0x0000002B, 0x00070058, 0x0000000C, 0x00000269, 0x00000263, 0x00000267, 0x00000002, 0x00000268, +0x0008004F, 0x00000014, 0x0000026A, 0x00000269, 0x00000269, 0x00000000, 0x00000001, 0x00000002, +0x0005008E, 0x00000014, 0x0000026B, 0x0000026A, 0x0000017B, 0x0004003D, 0x00000014, 0x0000026C, +0x00000232, 0x00050081, 0x00000014, 0x0000026D, 0x0000026C, 0x0000026B, 0x0003003E, 0x00000232, +0x0000026D, 0x0004003D, 0x00000008, 0x0000026E, 0x0000002A, 0x0004003D, 0x0000000A, 0x0000026F, +0x0000002C, 0x0004003D, 0x0000000C, 0x00000270, 0x0000022B, 0x0007004F, 0x0000000A, 0x00000271, +0x00000270, 0x00000270, 0x00000002, 0x00000001, 0x00050081, 0x0000000A, 0x00000272, 0x0000026F, +0x00000271, 0x0004003D, 0x00000006, 0x00000273, 0x0000002B, 0x00070058, 0x0000000C, 0x00000274, +0x0000026E, 0x00000272, 0x00000002, 0x00000273, 0x0008004F, 0x00000014, 0x00000275, 0x00000274, +0x00000274, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000014, 0x00000276, 0x00000232, +0x00050081, 0x00000014, 0x00000277, 0x00000276, 0x00000275, 0x0003003E, 0x00000232, 0x00000277, +0x0004003D, 0x00000008, 0x00000278, 0x0000002A, 0x0004003D, 0x0000000A, 0x00000279, 0x0000002C, +0x0004003D, 0x0000000C, 0x0000027A, 0x0000022B, 0x0007004F, 0x0000000A, 0x0000027B, 0x0000027A, +0x0000027A, 0x00000003, 0x00000001, 0x00050081, 0x0000000A, 0x0000027C, 0x00000279, 0x0000027B, +0x0004003D, 0x00000006, 0x0000027D, 0x0000002B, 0x00070058, 0x0000000C, 0x0000027E, 0x00000278, +0x0000027C, 0x00000002, 0x0000027D, 0x0008004F, 0x00000014, 0x0000027F, 0x0000027E, 0x0000027E, +0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000014, 0x00000280, 0x0000027F, 0x0000017B, +0x0004003D, 0x00000014, 0x00000281, 0x00000232, 0x00050081, 0x00000014, 0x00000282, 0x00000281, +0x00000280, 0x0003003E, 0x00000232, 0x00000282, 0x0004003D, 0x00000008, 0x00000283, 0x0000002A, +0x0004003D, 0x0000000A, 0x00000284, 0x0000002C, 0x0004003D, 0x0000000C, 0x00000285, 0x0000022B, +0x0007004F, 0x0000000A, 0x00000286, 0x00000285, 0x00000285, 0x00000000, 0x00000001, 0x00050081, +0x0000000A, 0x00000287, 0x00000284, 0x00000286, 0x0004003D, 0x00000006, 0x00000288, 0x0000002B, +0x00070058, 0x0000000C, 0x00000289, 0x00000283, 0x00000287, 0x00000002, 0x00000288, 0x0008004F, +0x00000014, 0x0000028A, 0x00000289, 0x00000289, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, +0x00000014, 0x0000028B, 0x00000232, 0x00050081, 0x00000014, 0x0000028C, 0x0000028B, 0x0000028A, +0x0003003E, 0x00000232, 0x0000028C, 0x0004003D, 0x00000014, 0x0000028D, 0x00000232, 0x0005008E, +0x00000014, 0x0000028F, 0x0000028D, 0x0000028E, 0x000200FE, 0x0000028F, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/CreateEnvironmentMapfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/CreateEnvironmentMapfragspv.hpp index 702e47c16..7461b26b3 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/CreateEnvironmentMapfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/CreateEnvironmentMapfragspv.hpp @@ -3,232 +3,615 @@ #include #include -constexpr uint32_t spirv_CreateEnvironmentMapfragspv_size = 7200; -constexpr std::array spirv_CreateEnvironmentMapfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000146, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_CreateEnvironmentMapfragspv_size = 19472; +constexpr std::array spirv_CreateEnvironmentMapfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000362, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000007D, 0x0000013C, 0x00030010, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000118, 0x00000340, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, -0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000F, 0x6F547675, -0x285A5958, 0x763B3169, 0x003B3266, 0x00040005, 0x0000000D, 0x65636166, 0x00000000, 0x00030005, -0x0000000E, 0x00007675, 0x00060005, 0x00000014, 0x54726964, 0x2856556F, 0x3B336676, 0x00000000, -0x00030005, 0x00000013, 0x00726964, 0x00070005, 0x00000017, 0x43746547, 0x4D656275, 0x65547061, -0x6F6F4378, 0x00286472, 0x00040005, 0x00000019, 0x53746567, 0x0028796B, 0x00030005, 0x0000007B, -0x00007675, 0x00050005, 0x0000007D, 0x5474756F, 0x6F437865, 0x0064726F, 0x00040005, 0x00000089, -0x65636166, 0x00000000, 0x00050005, 0x0000008A, 0x68737550, 0x736E6F43, 0x00007374, 0x00070006, -0x0000008A, 0x00000000, 0x65627563, 0x65636146, 0x65646E49, 0x00000078, 0x00050005, 0x0000008C, -0x68737570, 0x736E6F43, 0x00007374, 0x00070005, 0x00000091, 0x626F6C47, 0x6E496C61, 0x61636F76, -0x6E6F6974, 0x00004449, 0x00030005, 0x0000009B, 0x00746572, 0x00040005, 0x000000E2, 0x65636166, -0x00000000, 0x00050005, 0x000000E6, 0x43786574, 0x64726F6F, 0x0077654E, 0x00040005, 0x000000EB, -0x6E616373, 0x00000000, 0x00040005, 0x000000EC, 0x61726170, 0x0000006D, 0x00040005, 0x000000EE, -0x61726170, 0x0000006D, 0x00050005, 0x000000F1, 0x65726964, 0x6F697463, 0x0000006E, 0x00030005, -0x000000F4, 0x00637273, 0x00040005, 0x000000F5, 0x61726170, 0x0000006D, 0x00030005, 0x000000F8, -0x00007675, 0x00040005, 0x000000FA, 0x69646172, 0x00006E61, 0x00040005, 0x000000FC, 0x506E7573, -0x0000736F, 0x00050005, 0x00000104, 0x446E7573, 0x61747369, 0x0065636E, 0x00050005, 0x0000010A, -0x74616373, 0x4D726574, 0x00746C75, 0x00040005, 0x0000010D, 0x74736964, 0x00000000, 0x00040005, -0x00000119, 0x6F6C6F63, 0x00007275, 0x00040005, 0x00000138, 0x6F6C6F63, 0x00007275, 0x00040005, -0x0000013C, 0x4674756F, 0x00676172, 0x00050005, 0x00000145, 0x65545F75, 0x72757478, 0x00000065, -0x00040047, 0x0000007D, 0x0000001E, 0x00000000, 0x00050048, 0x0000008A, 0x00000000, 0x00000023, -0x00000000, 0x00030047, 0x0000008A, 0x00000002, 0x00040047, 0x0000013C, 0x0000001E, 0x00000000, -0x00040047, 0x00000145, 0x00000022, 0x00000000, 0x00040047, 0x00000145, 0x00000021, 0x00000000, -0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, -0x00000001, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00030016, 0x00000008, 0x00000020, -0x00040017, 0x00000009, 0x00000008, 0x00000002, 0x00040020, 0x0000000A, 0x00000007, 0x00000009, -0x00040017, 0x0000000B, 0x00000008, 0x00000003, 0x00050021, 0x0000000C, 0x0000000B, 0x00000007, -0x0000000A, 0x00040020, 0x00000011, 0x00000007, 0x0000000B, 0x00040021, 0x00000012, 0x00000009, -0x00000011, 0x00030021, 0x00000016, 0x0000000B, 0x0004002B, 0x00000006, 0x0000001C, 0x00000000, -0x00020014, 0x0000001D, 0x0004002B, 0x00000008, 0x00000021, 0x3F800000, 0x00040015, 0x00000022, -0x00000020, 0x00000000, 0x0004002B, 0x00000022, 0x00000023, 0x00000001, 0x00040020, 0x00000024, -0x00000007, 0x00000008, 0x0004002B, 0x00000022, 0x00000027, 0x00000000, 0x0004002B, 0x00000006, -0x0000002F, 0x00000001, 0x0004002B, 0x00000008, 0x00000033, 0xBF800000, 0x0004002B, 0x00000006, -0x0000003C, 0x00000002, 0x0004002B, 0x00000006, 0x00000048, 0x00000003, 0x0004002B, 0x00000006, -0x00000055, 0x00000004, 0x0004002B, 0x00000008, 0x00000068, 0x3F000000, 0x0004002B, 0x00000022, -0x00000069, 0x00000002, 0x0004002B, 0x00000008, 0x00000070, 0x40490FDB, 0x00040020, 0x0000007C, -0x00000001, 0x00000009, 0x0004003B, 0x0000007C, 0x0000007D, 0x00000001, 0x0004002B, 0x00000008, -0x0000007F, 0x40000000, 0x0005002C, 0x00000009, 0x00000087, 0x00000021, 0x00000021, 0x0003001E, -0x0000008A, 0x00000022, 0x00040020, 0x0000008B, 0x00000009, 0x0000008A, 0x0004003B, 0x0000008B, -0x0000008C, 0x00000009, 0x00040020, 0x0000008D, 0x00000009, 0x00000022, 0x0004002B, 0x00000008, -0x00000092, 0x00000000, 0x0004002B, 0x00000008, 0x000000BC, 0x40400000, 0x0004002B, 0x00000008, -0x000000C8, 0x40800000, 0x0004002B, 0x00000008, 0x000000D4, 0x40A00000, 0x0004002B, 0x00000008, -0x000000FB, 0xC0060A89, 0x0004002B, 0x00000008, 0x00000110, 0x3DCCCCCD, 0x0004002B, 0x00000008, -0x00000112, 0x3E99999A, 0x0006002C, 0x0000000B, 0x0000011B, 0x00000112, 0x00000068, 0x00000021, -0x00040017, 0x0000013A, 0x00000008, 0x00000004, 0x00040020, 0x0000013B, 0x00000003, 0x0000013A, -0x0004003B, 0x0000013B, 0x0000013C, 0x00000003, 0x00090019, 0x00000142, 0x00000008, 0x00000001, -0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000143, 0x00000142, -0x00040020, 0x00000144, 0x00000000, 0x00000143, 0x0004003B, 0x00000144, 0x00000145, 0x00000000, -0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, -0x00000011, 0x00000138, 0x00000007, 0x00040039, 0x0000000B, 0x00000139, 0x00000019, 0x0003003E, -0x00000138, 0x00000139, 0x0004003D, 0x0000000B, 0x0000013D, 0x00000138, 0x00050051, 0x00000008, -0x0000013E, 0x0000013D, 0x00000000, 0x00050051, 0x00000008, 0x0000013F, 0x0000013D, 0x00000001, -0x00050051, 0x00000008, 0x00000140, 0x0000013D, 0x00000002, 0x00070050, 0x0000013A, 0x00000141, -0x0000013E, 0x0000013F, 0x00000140, 0x00000021, 0x0003003E, 0x0000013C, 0x00000141, 0x000100FD, -0x00010038, 0x00050036, 0x0000000B, 0x0000000F, 0x00000000, 0x0000000C, 0x00030037, 0x00000007, -0x0000000D, 0x00030037, 0x0000000A, 0x0000000E, 0x000200F8, 0x00000010, 0x0004003D, 0x00000006, -0x0000001B, 0x0000000D, 0x000500AA, 0x0000001D, 0x0000001E, 0x0000001B, 0x0000001C, 0x000300F7, -0x00000020, 0x00000000, 0x000400FA, 0x0000001E, 0x0000001F, 0x0000002D, 0x000200F8, 0x0000001F, -0x00050041, 0x00000024, 0x00000025, 0x0000000E, 0x00000023, 0x0004003D, 0x00000008, 0x00000026, -0x00000025, 0x00050041, 0x00000024, 0x00000028, 0x0000000E, 0x00000027, 0x0004003D, 0x00000008, -0x00000029, 0x00000028, 0x0004007F, 0x00000008, 0x0000002A, 0x00000029, 0x00060050, 0x0000000B, -0x0000002B, 0x00000021, 0x00000026, 0x0000002A, 0x000200FE, 0x0000002B, 0x000200F8, 0x0000002D, -0x0004003D, 0x00000006, 0x0000002E, 0x0000000D, 0x000500AA, 0x0000001D, 0x00000030, 0x0000002E, -0x0000002F, 0x000300F7, 0x00000032, 0x00000000, 0x000400FA, 0x00000030, 0x00000031, 0x0000003A, -0x000200F8, 0x00000031, 0x00050041, 0x00000024, 0x00000034, 0x0000000E, 0x00000023, 0x0004003D, -0x00000008, 0x00000035, 0x00000034, 0x00050041, 0x00000024, 0x00000036, 0x0000000E, 0x00000027, -0x0004003D, 0x00000008, 0x00000037, 0x00000036, 0x00060050, 0x0000000B, 0x00000038, 0x00000033, -0x00000035, 0x00000037, 0x000200FE, 0x00000038, 0x000200F8, 0x0000003A, 0x0004003D, 0x00000006, -0x0000003B, 0x0000000D, 0x000500AA, 0x0000001D, 0x0000003D, 0x0000003B, 0x0000003C, 0x000300F7, -0x0000003F, 0x00000000, 0x000400FA, 0x0000003D, 0x0000003E, 0x00000046, 0x000200F8, 0x0000003E, -0x00050041, 0x00000024, 0x00000040, 0x0000000E, 0x00000027, 0x0004003D, 0x00000008, 0x00000041, -0x00000040, 0x00050041, 0x00000024, 0x00000042, 0x0000000E, 0x00000023, 0x0004003D, 0x00000008, -0x00000043, 0x00000042, 0x00060050, 0x0000000B, 0x00000044, 0x00000041, 0x00000033, 0x00000043, -0x000200FE, 0x00000044, 0x000200F8, 0x00000046, 0x0004003D, 0x00000006, 0x00000047, 0x0000000D, -0x000500AA, 0x0000001D, 0x00000049, 0x00000047, 0x00000048, 0x000300F7, 0x0000004B, 0x00000000, -0x000400FA, 0x00000049, 0x0000004A, 0x00000053, 0x000200F8, 0x0000004A, 0x00050041, 0x00000024, -0x0000004C, 0x0000000E, 0x00000027, 0x0004003D, 0x00000008, 0x0000004D, 0x0000004C, 0x00050041, -0x00000024, 0x0000004E, 0x0000000E, 0x00000023, 0x0004003D, 0x00000008, 0x0000004F, 0x0000004E, -0x0004007F, 0x00000008, 0x00000050, 0x0000004F, 0x00060050, 0x0000000B, 0x00000051, 0x0000004D, -0x00000021, 0x00000050, 0x000200FE, 0x00000051, 0x000200F8, 0x00000053, 0x0004003D, 0x00000006, -0x00000054, 0x0000000D, 0x000500AA, 0x0000001D, 0x00000056, 0x00000054, 0x00000055, 0x000300F7, -0x00000058, 0x00000000, 0x000400FA, 0x00000056, 0x00000057, 0x0000005F, 0x000200F8, 0x00000057, -0x00050041, 0x00000024, 0x00000059, 0x0000000E, 0x00000027, 0x0004003D, 0x00000008, 0x0000005A, -0x00000059, 0x00050041, 0x00000024, 0x0000005B, 0x0000000E, 0x00000023, 0x0004003D, 0x00000008, -0x0000005C, 0x0000005B, 0x00060050, 0x0000000B, 0x0000005D, 0x0000005A, 0x0000005C, 0x00000021, -0x000200FE, 0x0000005D, 0x000200F8, 0x0000005F, 0x00050041, 0x00000024, 0x00000060, 0x0000000E, -0x00000027, 0x0004003D, 0x00000008, 0x00000061, 0x00000060, 0x0004007F, 0x00000008, 0x00000062, -0x00000061, 0x00050041, 0x00000024, 0x00000063, 0x0000000E, 0x00000023, 0x0004003D, 0x00000008, -0x00000064, 0x00000063, 0x00060050, 0x0000000B, 0x00000065, 0x00000062, 0x00000064, 0x00000033, -0x000200FE, 0x00000065, 0x000200F8, 0x00000058, 0x000100FF, 0x000200F8, 0x0000004B, 0x000100FF, -0x000200F8, 0x0000003F, 0x000100FF, 0x000200F8, 0x00000032, 0x000100FF, 0x000200F8, 0x00000020, -0x000100FF, 0x00010038, 0x00050036, 0x00000009, 0x00000014, 0x00000000, 0x00000012, 0x00030037, -0x00000011, 0x00000013, 0x000200F8, 0x00000015, 0x00050041, 0x00000024, 0x0000006A, 0x00000013, -0x00000069, 0x0004003D, 0x00000008, 0x0000006B, 0x0000006A, 0x00050041, 0x00000024, 0x0000006C, -0x00000013, 0x00000027, 0x0004003D, 0x00000008, 0x0000006D, 0x0000006C, 0x0007000C, 0x00000008, -0x0000006E, 0x00000001, 0x00000019, 0x0000006B, 0x0000006D, 0x00050085, 0x00000008, 0x0000006F, -0x00000068, 0x0000006E, 0x00050088, 0x00000008, 0x00000071, 0x0000006F, 0x00000070, 0x00050081, -0x00000008, 0x00000072, 0x00000068, 0x00000071, 0x00050041, 0x00000024, 0x00000073, 0x00000013, -0x00000023, 0x0004003D, 0x00000008, 0x00000074, 0x00000073, 0x0006000C, 0x00000008, 0x00000075, -0x00000001, 0x00000011, 0x00000074, 0x00050088, 0x00000008, 0x00000076, 0x00000075, 0x00000070, -0x00050083, 0x00000008, 0x00000077, 0x00000021, 0x00000076, 0x00050050, 0x00000009, 0x00000078, -0x00000072, 0x00000077, 0x000200FE, 0x00000078, 0x00010038, 0x00050036, 0x0000000B, 0x00000017, -0x00000000, 0x00000016, 0x000200F8, 0x00000018, 0x0004003B, 0x0000000A, 0x0000007B, 0x00000007, -0x0004003B, 0x00000007, 0x00000089, 0x00000007, 0x0004003B, 0x00000011, 0x00000091, 0x00000007, -0x0004003B, 0x00000011, 0x0000009B, 0x00000007, 0x0004003D, 0x00000009, 0x0000007E, 0x0000007D, -0x0003003E, 0x0000007B, 0x0000007E, 0x00050041, 0x00000024, 0x00000080, 0x0000007B, 0x00000027, -0x0004003D, 0x00000008, 0x00000081, 0x00000080, 0x00050041, 0x00000024, 0x00000082, 0x0000007B, -0x00000023, 0x0004003D, 0x00000008, 0x00000083, 0x00000082, 0x00050083, 0x00000008, 0x00000084, -0x00000021, 0x00000083, 0x00050050, 0x00000009, 0x00000085, 0x00000081, 0x00000084, 0x0005008E, -0x00000009, 0x00000086, 0x00000085, 0x0000007F, 0x00050083, 0x00000009, 0x00000088, 0x00000086, -0x00000087, 0x0003003E, 0x0000007B, 0x00000088, 0x00050041, 0x0000008D, 0x0000008E, 0x0000008C, -0x0000001C, 0x0004003D, 0x00000022, 0x0000008F, 0x0000008E, 0x0004007C, 0x00000006, 0x00000090, -0x0000008F, 0x0003003E, 0x00000089, 0x00000090, 0x0004003D, 0x00000006, 0x00000093, 0x00000089, -0x0004006F, 0x00000008, 0x00000094, 0x00000093, 0x00060050, 0x0000000B, 0x00000095, 0x00000092, -0x00000092, 0x00000094, 0x0003003E, 0x00000091, 0x00000095, 0x00050041, 0x00000024, 0x00000096, -0x00000091, 0x00000069, 0x0004003D, 0x00000008, 0x00000097, 0x00000096, 0x000500B4, 0x0000001D, -0x00000098, 0x00000097, 0x00000092, 0x000300F7, 0x0000009A, 0x00000000, 0x000400FA, 0x00000098, -0x00000099, 0x000000A2, 0x000200F8, 0x00000099, 0x00050041, 0x00000024, 0x0000009C, 0x0000007B, -0x00000023, 0x0004003D, 0x00000008, 0x0000009D, 0x0000009C, 0x00050041, 0x00000024, 0x0000009E, -0x0000007B, 0x00000027, 0x0004003D, 0x00000008, 0x0000009F, 0x0000009E, 0x0004007F, 0x00000008, -0x000000A0, 0x0000009F, 0x00060050, 0x0000000B, 0x000000A1, 0x00000021, 0x0000009D, 0x000000A0, -0x0003003E, 0x0000009B, 0x000000A1, 0x000200F9, 0x0000009A, 0x000200F8, 0x000000A2, 0x00050041, -0x00000024, 0x000000A3, 0x00000091, 0x00000069, 0x0004003D, 0x00000008, 0x000000A4, 0x000000A3, -0x000500B4, 0x0000001D, 0x000000A5, 0x000000A4, 0x00000021, 0x000300F7, 0x000000A7, 0x00000000, -0x000400FA, 0x000000A5, 0x000000A6, 0x000000AD, 0x000200F8, 0x000000A6, 0x00050041, 0x00000024, -0x000000A8, 0x0000007B, 0x00000023, 0x0004003D, 0x00000008, 0x000000A9, 0x000000A8, 0x00050041, -0x00000024, 0x000000AA, 0x0000007B, 0x00000027, 0x0004003D, 0x00000008, 0x000000AB, 0x000000AA, -0x00060050, 0x0000000B, 0x000000AC, 0x00000033, 0x000000A9, 0x000000AB, 0x0003003E, 0x0000009B, -0x000000AC, 0x000200F9, 0x000000A7, 0x000200F8, 0x000000AD, 0x00050041, 0x00000024, 0x000000AE, -0x00000091, 0x00000069, 0x0004003D, 0x00000008, 0x000000AF, 0x000000AE, 0x000500B4, 0x0000001D, -0x000000B0, 0x000000AF, 0x0000007F, 0x000300F7, 0x000000B2, 0x00000000, 0x000400FA, 0x000000B0, -0x000000B1, 0x000000B9, 0x000200F8, 0x000000B1, 0x00050041, 0x00000024, 0x000000B3, 0x0000007B, -0x00000027, 0x0004003D, 0x00000008, 0x000000B4, 0x000000B3, 0x00050041, 0x00000024, 0x000000B5, -0x0000007B, 0x00000023, 0x0004003D, 0x00000008, 0x000000B6, 0x000000B5, 0x0004007F, 0x00000008, -0x000000B7, 0x000000B6, 0x00060050, 0x0000000B, 0x000000B8, 0x000000B4, 0x00000021, 0x000000B7, -0x0003003E, 0x0000009B, 0x000000B8, 0x000200F9, 0x000000B2, 0x000200F8, 0x000000B9, 0x00050041, -0x00000024, 0x000000BA, 0x00000091, 0x00000069, 0x0004003D, 0x00000008, 0x000000BB, 0x000000BA, -0x000500B4, 0x0000001D, 0x000000BD, 0x000000BB, 0x000000BC, 0x000300F7, 0x000000BF, 0x00000000, -0x000400FA, 0x000000BD, 0x000000BE, 0x000000C5, 0x000200F8, 0x000000BE, 0x00050041, 0x00000024, -0x000000C0, 0x0000007B, 0x00000027, 0x0004003D, 0x00000008, 0x000000C1, 0x000000C0, 0x00050041, -0x00000024, 0x000000C2, 0x0000007B, 0x00000023, 0x0004003D, 0x00000008, 0x000000C3, 0x000000C2, -0x00060050, 0x0000000B, 0x000000C4, 0x000000C1, 0x00000033, 0x000000C3, 0x0003003E, 0x0000009B, -0x000000C4, 0x000200F9, 0x000000BF, 0x000200F8, 0x000000C5, 0x00050041, 0x00000024, 0x000000C6, -0x00000091, 0x00000069, 0x0004003D, 0x00000008, 0x000000C7, 0x000000C6, 0x000500B4, 0x0000001D, -0x000000C9, 0x000000C7, 0x000000C8, 0x000300F7, 0x000000CB, 0x00000000, 0x000400FA, 0x000000C9, -0x000000CA, 0x000000D1, 0x000200F8, 0x000000CA, 0x00050041, 0x00000024, 0x000000CC, 0x0000007B, -0x00000027, 0x0004003D, 0x00000008, 0x000000CD, 0x000000CC, 0x00050041, 0x00000024, 0x000000CE, -0x0000007B, 0x00000023, 0x0004003D, 0x00000008, 0x000000CF, 0x000000CE, 0x00060050, 0x0000000B, -0x000000D0, 0x000000CD, 0x000000CF, 0x00000021, 0x0003003E, 0x0000009B, 0x000000D0, 0x000200F9, -0x000000CB, 0x000200F8, 0x000000D1, 0x00050041, 0x00000024, 0x000000D2, 0x00000091, 0x00000069, -0x0004003D, 0x00000008, 0x000000D3, 0x000000D2, 0x000500B4, 0x0000001D, 0x000000D5, 0x000000D3, -0x000000D4, 0x000300F7, 0x000000D7, 0x00000000, 0x000400FA, 0x000000D5, 0x000000D6, 0x000000D7, -0x000200F8, 0x000000D6, 0x00050041, 0x00000024, 0x000000D8, 0x0000007B, 0x00000027, 0x0004003D, -0x00000008, 0x000000D9, 0x000000D8, 0x0004007F, 0x00000008, 0x000000DA, 0x000000D9, 0x00050041, -0x00000024, 0x000000DB, 0x0000007B, 0x00000023, 0x0004003D, 0x00000008, 0x000000DC, 0x000000DB, -0x00060050, 0x0000000B, 0x000000DD, 0x000000DA, 0x000000DC, 0x00000033, 0x0003003E, 0x0000009B, -0x000000DD, 0x000200F9, 0x000000D7, 0x000200F8, 0x000000D7, 0x000200F9, 0x000000CB, 0x000200F8, -0x000000CB, 0x000200F9, 0x000000BF, 0x000200F8, 0x000000BF, 0x000200F9, 0x000000B2, 0x000200F8, -0x000000B2, 0x000200F9, 0x000000A7, 0x000200F8, 0x000000A7, 0x000200F9, 0x0000009A, 0x000200F8, -0x0000009A, 0x0004003D, 0x0000000B, 0x000000DE, 0x0000009B, 0x0006000C, 0x0000000B, 0x000000DF, -0x00000001, 0x00000045, 0x000000DE, 0x000200FE, 0x000000DF, 0x00010038, 0x00050036, 0x0000000B, -0x00000019, 0x00000000, 0x00000016, 0x000200F8, 0x0000001A, 0x0004003B, 0x00000007, 0x000000E2, -0x00000007, 0x0004003B, 0x0000000A, 0x000000E6, 0x00000007, 0x0004003B, 0x00000011, 0x000000EB, -0x00000007, 0x0004003B, 0x00000007, 0x000000EC, 0x00000007, 0x0004003B, 0x0000000A, 0x000000EE, -0x00000007, 0x0004003B, 0x00000011, 0x000000F1, 0x00000007, 0x0004003B, 0x0000000A, 0x000000F4, -0x00000007, 0x0004003B, 0x00000011, 0x000000F5, 0x00000007, 0x0004003B, 0x00000011, 0x000000F8, -0x00000007, 0x0004003B, 0x00000024, 0x000000FA, 0x00000007, 0x0004003B, 0x00000011, 0x000000FC, -0x00000007, 0x0004003B, 0x00000024, 0x00000104, 0x00000007, 0x0004003B, 0x00000024, 0x0000010A, -0x00000007, 0x0004003B, 0x00000024, 0x0000010D, 0x00000007, 0x0004003B, 0x00000011, 0x00000119, -0x00000007, 0x00050041, 0x0000008D, 0x000000E3, 0x0000008C, 0x0000001C, 0x0004003D, 0x00000022, -0x000000E4, 0x000000E3, 0x0004007C, 0x00000006, 0x000000E5, 0x000000E4, 0x0003003E, 0x000000E2, -0x000000E5, 0x0004003D, 0x00000009, 0x000000E7, 0x0000007D, 0x0005008E, 0x00000009, 0x000000E8, -0x000000E7, 0x0000007F, 0x00050050, 0x00000009, 0x000000E9, 0x00000021, 0x00000021, 0x00050083, -0x00000009, 0x000000EA, 0x000000E8, 0x000000E9, 0x0003003E, 0x000000E6, 0x000000EA, 0x0004003D, -0x00000006, 0x000000ED, 0x000000E2, 0x0003003E, 0x000000EC, 0x000000ED, 0x0004003D, 0x00000009, -0x000000EF, 0x000000E6, 0x0003003E, 0x000000EE, 0x000000EF, 0x00060039, 0x0000000B, 0x000000F0, -0x0000000F, 0x000000EC, 0x000000EE, 0x0003003E, 0x000000EB, 0x000000F0, 0x0004003D, 0x0000000B, -0x000000F2, 0x000000EB, 0x0006000C, 0x0000000B, 0x000000F3, 0x00000001, 0x00000045, 0x000000F2, -0x0003003E, 0x000000F1, 0x000000F3, 0x0004003D, 0x0000000B, 0x000000F6, 0x000000F1, 0x0003003E, -0x000000F5, 0x000000F6, 0x00050039, 0x00000009, 0x000000F7, 0x00000014, 0x000000F5, 0x0003003E, -0x000000F4, 0x000000F7, 0x00040039, 0x0000000B, 0x000000F9, 0x00000017, 0x0003003E, 0x000000F8, -0x000000F9, 0x0003003E, 0x000000FA, 0x000000FB, 0x0004003D, 0x00000008, 0x000000FD, 0x000000FA, -0x0006000C, 0x00000008, 0x000000FE, 0x00000001, 0x0000000E, 0x000000FD, 0x00050041, 0x00000024, -0x000000FF, 0x000000FC, 0x00000027, 0x0003003E, 0x000000FF, 0x000000FE, 0x0004003D, 0x00000008, -0x00000100, 0x000000FA, 0x0006000C, 0x00000008, 0x00000101, 0x00000001, 0x0000000D, 0x00000100, -0x00050041, 0x00000024, 0x00000102, 0x000000FC, 0x00000023, 0x0003003E, 0x00000102, 0x00000101, -0x00050041, 0x00000024, 0x00000103, 0x000000FC, 0x00000069, 0x0003003E, 0x00000103, 0x00000092, -0x0004003D, 0x0000000B, 0x00000105, 0x000000F8, 0x0004003D, 0x0000000B, 0x00000106, 0x000000FC, -0x0006000C, 0x0000000B, 0x00000107, 0x00000001, 0x00000045, 0x00000106, 0x00050083, 0x0000000B, -0x00000108, 0x00000105, 0x00000107, 0x0006000C, 0x00000008, 0x00000109, 0x00000001, 0x00000042, -0x00000108, 0x0003003E, 0x00000104, 0x00000109, 0x0004003D, 0x00000008, 0x0000010B, 0x00000104, -0x0008000C, 0x00000008, 0x0000010C, 0x00000001, 0x0000002B, 0x0000010B, 0x00000092, 0x00000021, -0x0003003E, 0x0000010A, 0x0000010C, 0x00050041, 0x00000024, 0x0000010E, 0x000000F8, 0x00000023, -0x0004003D, 0x00000008, 0x0000010F, 0x0000010E, 0x00050081, 0x00000008, 0x00000111, 0x0000010F, -0x00000110, 0x0003003E, 0x0000010D, 0x00000111, 0x0004003D, 0x00000008, 0x00000113, 0x0000010A, -0x0004003D, 0x00000008, 0x00000114, 0x0000010D, 0x0008000C, 0x00000008, 0x00000115, 0x00000001, -0x0000002E, 0x00000113, 0x00000021, 0x00000114, 0x00050085, 0x00000008, 0x00000116, 0x00000112, -0x00000115, 0x0004003D, 0x00000008, 0x00000117, 0x0000010D, 0x00050088, 0x00000008, 0x00000118, -0x00000116, 0x00000117, 0x0003003E, 0x0000010D, 0x00000118, 0x0004003D, 0x00000008, 0x0000011A, -0x0000010D, 0x0005008E, 0x0000000B, 0x0000011C, 0x0000011B, 0x0000011A, 0x0003003E, 0x00000119, -0x0000011C, 0x0004003D, 0x0000000B, 0x0000011D, 0x00000119, 0x00060050, 0x0000000B, 0x0000011E, -0x00000092, 0x00000092, 0x00000092, 0x0007000C, 0x0000000B, 0x0000011F, 0x00000001, 0x00000028, -0x0000011D, 0x0000011E, 0x0003003E, 0x00000119, 0x0000011F, 0x0004003D, 0x0000000B, 0x00000120, -0x00000119, 0x0004003D, 0x0000000B, 0x00000121, 0x00000119, 0x00060050, 0x0000000B, 0x00000122, -0x00000021, 0x00000021, 0x00000021, 0x00050083, 0x0000000B, 0x00000123, 0x00000122, 0x00000121, -0x0007000C, 0x0000000B, 0x00000124, 0x00000001, 0x0000001A, 0x00000120, 0x00000123, 0x0004003D, -0x0000000B, 0x00000125, 0x00000119, 0x0004003D, 0x0000000B, 0x00000126, 0x00000119, 0x0005008E, -0x0000000B, 0x00000127, 0x00000126, 0x0000007F, 0x00060050, 0x0000000B, 0x00000128, 0x00000068, -0x00000068, 0x00000068, 0x00050081, 0x0000000B, 0x00000129, 0x00000127, 0x00000128, 0x0004003D, -0x0000000B, 0x0000012A, 0x00000119, 0x00050083, 0x0000000B, 0x0000012B, 0x00000129, 0x0000012A, -0x00050088, 0x0000000B, 0x0000012C, 0x00000125, 0x0000012B, 0x00050041, 0x00000024, 0x0000012D, -0x000000FC, 0x00000023, 0x0004003D, 0x00000008, 0x0000012E, 0x0000012D, 0x00050085, 0x00000008, -0x0000012F, 0x0000012E, 0x0000007F, 0x0008000C, 0x00000008, 0x00000130, 0x00000001, 0x0000002B, -0x0000012F, 0x00000092, 0x00000021, 0x00060050, 0x0000000B, 0x00000131, 0x00000130, 0x00000130, -0x00000130, 0x0008000C, 0x0000000B, 0x00000132, 0x00000001, 0x0000002E, 0x00000124, 0x0000012C, -0x00000131, 0x00060050, 0x0000000B, 0x00000133, 0x00000092, 0x00000092, 0x00000092, 0x0007000C, -0x0000000B, 0x00000134, 0x00000001, 0x00000028, 0x00000132, 0x00000133, 0x0003003E, 0x00000119, -0x00000134, 0x0004003D, 0x0000000B, 0x00000135, 0x00000119, 0x000200FE, 0x00000135, 0x00010038, - +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000B, 0x61476544, +0x28616D6D, 0x3B336676, 0x00000000, 0x00040005, 0x0000000A, 0x6F6C6F63, 0x00007275, 0x00090005, +0x00000014, 0x43746547, 0x4D656275, 0x65547061, 0x6F6F4378, 0x69286472, 0x66763B31, 0x00003B32, +0x00040005, 0x00000012, 0x65636166, 0x00000000, 0x00050005, 0x00000013, 0x5474756F, 0x6F437865, +0x0064726F, 0x00090005, 0x00000018, 0x43746547, 0x4D656275, 0x65547061, 0x6F6F4378, 0x28326472, +0x763B3169, 0x003B3266, 0x00060005, 0x00000016, 0x65627563, 0x65636146, 0x65646E49, 0x00000078, +0x00050005, 0x00000017, 0x43786574, 0x64726F6F, 0x00000000, 0x00060005, 0x0000001C, 0x54726964, +0x2856556F, 0x3B336676, 0x00000000, 0x00030005, 0x0000001B, 0x00726964, 0x00070005, 0x0000001F, +0x6F6E6170, 0x616D6172, 0x75436F54, 0x614D6562, 0x00002870, 0x00040005, 0x00000021, 0x53746567, +0x0028796B, 0x00060005, 0x00000024, 0x54797859, 0x5A59586F, 0x33667628, 0x0000003B, 0x00030005, +0x00000023, 0x00797859, 0x00060005, 0x00000027, 0x545A5958, 0x4247526F, 0x33667628, 0x0000003B, +0x00030005, 0x00000026, 0x005A5958, 0x00060005, 0x0000002A, 0x54797859, 0x4247526F, 0x33667628, +0x0000003B, 0x00030005, 0x00000029, 0x00797859, 0x00080005, 0x0000002F, 0x75746173, 0x65746172, +0x746F4464, 0x33667628, 0x3366763B, 0x0000003B, 0x00030005, 0x0000002D, 0x00000061, 0x00030005, +0x0000002E, 0x00000062, 0x000F0005, 0x00000039, 0x636C6163, 0x74616C75, 0x72655065, 0x69447A65, +0x69727473, 0x69747562, 0x66286E6F, 0x66763B31, 0x66763B33, 0x66763B33, 0x66763B33, 0x66763B33, +0x00003B33, 0x00030005, 0x00000033, 0x00000074, 0x00030005, 0x00000034, 0x00000041, 0x00030005, +0x00000035, 0x00000042, 0x00030005, 0x00000036, 0x00000043, 0x00030005, 0x00000037, 0x00000044, +0x00030005, 0x00000038, 0x00000045, 0x000B0005, 0x0000003E, 0x636C6163, 0x74616C75, 0x6E655A65, +0x4C687469, 0x6E696D75, 0x65636E61, 0x28797859, 0x663B3166, 0x00003B31, 0x00030005, 0x0000003C, +0x00000074, 0x00040005, 0x0000003D, 0x74656874, 0x00005361, 0x00100005, 0x00000048, 0x636C6163, +0x74616C75, 0x72655065, 0x754C7A65, 0x616E696D, 0x5965636E, 0x66287978, 0x31663B31, 0x3366763B, +0x3366763B, 0x3366763B, 0x3366763B, 0x3366763B, 0x0000003B, 0x00040005, 0x00000041, 0x74656874, +0x00000061, 0x00040005, 0x00000042, 0x6D6D6167, 0x00000061, 0x00030005, 0x00000043, 0x00000041, +0x00030005, 0x00000044, 0x00000042, 0x00030005, 0x00000045, 0x00000043, 0x00030005, 0x00000046, +0x00000044, 0x00030005, 0x00000047, 0x00000045, 0x000C0005, 0x0000004E, 0x636C6163, 0x74616C75, +0x796B5365, 0x696D754C, 0x636E616E, 0x42475265, 0x33667628, 0x3366763B, 0x3B31663B, 0x00000000, +0x00030005, 0x0000004B, 0x00000073, 0x00030005, 0x0000004C, 0x00000065, 0x00030005, 0x0000004D, +0x00000074, 0x00060005, 0x00000050, 0x65657250, 0x6D616874, 0x28796B53, 0x00000000, 0x00030005, +0x00000058, 0x00007675, 0x00030005, 0x000000AF, 0x00007675, 0x00030005, 0x000000B9, 0x00746572, +0x00040005, 0x000000BC, 0x65636166, 0x00000000, 0x00040005, 0x0000010F, 0x65627563, 0x00004354, +0x00050005, 0x00000110, 0x68737550, 0x736E6F43, 0x00007374, 0x00070006, 0x00000110, 0x00000000, +0x65627563, 0x65636146, 0x65646E49, 0x00000078, 0x00050005, 0x00000112, 0x68737570, 0x736E6F43, +0x00007374, 0x00050005, 0x00000118, 0x5474756F, 0x6F437865, 0x0064726F, 0x00040005, 0x00000119, +0x61726170, 0x0000006D, 0x00040005, 0x0000011A, 0x61726170, 0x0000006D, 0x00050005, 0x0000011D, +0x65726964, 0x6F697463, 0x0000006E, 0x00030005, 0x00000120, 0x00637273, 0x00040005, 0x00000121, +0x61726170, 0x0000006D, 0x00050005, 0x00000127, 0x65545F75, 0x72757478, 0x00000065, 0x00030005, +0x0000012F, 0x00007675, 0x00040005, 0x00000133, 0x61726170, 0x0000006D, 0x00040005, 0x00000134, +0x61726170, 0x0000006D, 0x00040005, 0x00000137, 0x69646172, 0x00006E61, 0x00040005, 0x00000139, +0x506E7573, 0x0000736F, 0x00050005, 0x00000141, 0x446E7573, 0x61747369, 0x0065636E, 0x00050005, +0x00000147, 0x74616373, 0x4D726574, 0x00746C75, 0x00040005, 0x0000014A, 0x74736964, 0x00000000, +0x00040005, 0x00000156, 0x6F6C6F63, 0x00007275, 0x00030005, 0x00000175, 0x00000059, 0x00030005, +0x00000178, 0x00000078, 0x00030005, 0x0000017B, 0x00000079, 0x00030005, 0x0000017E, 0x00000058, +0x00030005, 0x00000184, 0x0000005A, 0x00030005, 0x00000195, 0x0000004D, 0x00030005, 0x000001A8, +0x005A5958, 0x00040005, 0x000001A9, 0x61726170, 0x0000006D, 0x00030005, 0x000001AC, 0x00424752, +0x00040005, 0x000001AD, 0x61726170, 0x0000006D, 0x00030005, 0x0000020A, 0x00696863, 0x00030005, +0x00000214, 0x00007A59, 0x00040005, 0x00000223, 0x74656874, 0x00003261, 0x00040005, 0x00000227, +0x74656874, 0x00003361, 0x00030005, 0x0000022B, 0x00000054, 0x00030005, 0x0000022D, 0x00003254, +0x00030005, 0x00000231, 0x00007A78, 0x00030005, 0x0000025E, 0x00007A79, 0x00030005, 0x000002AE, +0x00000041, 0x00030005, 0x000002AF, 0x00000042, 0x00030005, 0x000002B0, 0x00000043, 0x00030005, +0x000002B1, 0x00000044, 0x00030005, 0x000002B2, 0x00000045, 0x00040005, 0x000002B3, 0x61726170, +0x0000006D, 0x00040005, 0x000002B5, 0x61726170, 0x0000006D, 0x00040005, 0x000002B6, 0x61726170, +0x0000006D, 0x00040005, 0x000002B7, 0x61726170, 0x0000006D, 0x00040005, 0x000002B8, 0x61726170, +0x0000006D, 0x00040005, 0x000002B9, 0x61726170, 0x0000006D, 0x00040005, 0x000002C0, 0x74656874, +0x00005361, 0x00040005, 0x000002C2, 0x61726170, 0x0000006D, 0x00040005, 0x000002C4, 0x61726170, +0x0000006D, 0x00040005, 0x000002C7, 0x74656874, 0x00004561, 0x00040005, 0x000002C8, 0x61726170, +0x0000006D, 0x00040005, 0x000002CA, 0x61726170, 0x0000006D, 0x00040005, 0x000002CD, 0x6D6D6167, +0x00004561, 0x00040005, 0x000002CE, 0x61726170, 0x0000006D, 0x00040005, 0x000002D0, 0x61726170, +0x0000006D, 0x00030005, 0x000002D4, 0x00007A59, 0x00040005, 0x000002D5, 0x61726170, 0x0000006D, +0x00040005, 0x000002D7, 0x61726170, 0x0000006D, 0x00050005, 0x000002DA, 0x65685466, 0x61476174, +0x00616D6D, 0x00040005, 0x000002DB, 0x61726170, 0x0000006D, 0x00040005, 0x000002DD, 0x61726170, +0x0000006D, 0x00040005, 0x000002DF, 0x61726170, 0x0000006D, 0x00040005, 0x000002E1, 0x61726170, +0x0000006D, 0x00040005, 0x000002E3, 0x61726170, 0x0000006D, 0x00040005, 0x000002E5, 0x61726170, +0x0000006D, 0x00040005, 0x000002E7, 0x61726170, 0x0000006D, 0x00050005, 0x000002EA, 0x72655A66, +0x6568546F, 0x00536174, 0x00040005, 0x000002EB, 0x61726170, 0x0000006D, 0x00040005, 0x000002EC, +0x61726170, 0x0000006D, 0x00040005, 0x000002EE, 0x61726170, 0x0000006D, 0x00040005, 0x000002F0, +0x61726170, 0x0000006D, 0x00040005, 0x000002F2, 0x61726170, 0x0000006D, 0x00040005, 0x000002F4, +0x61726170, 0x0000006D, 0x00040005, 0x000002F6, 0x61726170, 0x0000006D, 0x00030005, 0x000002F9, +0x00007059, 0x00040005, 0x000002FF, 0x61726170, 0x0000006D, 0x00060005, 0x00000304, 0x65627563, +0x43786554, 0x64726F6F, 0x00000073, 0x00040005, 0x00000308, 0x61726170, 0x0000006D, 0x00040005, +0x00000309, 0x61726170, 0x0000006D, 0x00050005, 0x0000030D, 0x62727574, 0x74696469, 0x00000079, +0x00060005, 0x0000030E, 0x66696E55, 0x426D726F, 0x65666675, 0x00000072, 0x00070006, 0x0000030E, +0x00000000, 0x61505F75, 0x656D6172, 0x73726574, 0x00000000, 0x00030005, 0x00000310, 0x006F6275, +0x00040005, 0x00000314, 0x6D697A61, 0x00687475, 0x00050005, 0x00000317, 0x6C636E69, 0x74616E69, +0x006E6F69, 0x00040005, 0x0000031A, 0x446E7573, 0x00007269, 0x00040005, 0x00000329, 0x77656976, +0x00726944, 0x00060005, 0x0000032C, 0x4C796B73, 0x6E696D75, 0x65636E61, 0x00000000, 0x00040005, +0x0000032D, 0x61726170, 0x0000006D, 0x00040005, 0x0000032F, 0x61726170, 0x0000006D, 0x00040005, +0x00000331, 0x61726170, 0x0000006D, 0x00040005, 0x00000340, 0x4674756F, 0x00676172, 0x00040005, +0x00000352, 0x61726170, 0x0000006D, 0x00050048, 0x00000110, 0x00000000, 0x00000023, 0x00000000, +0x00030047, 0x00000110, 0x00000002, 0x00040047, 0x00000118, 0x0000001E, 0x00000000, 0x00040047, +0x00000127, 0x00000022, 0x00000000, 0x00040047, 0x00000127, 0x00000021, 0x00000000, 0x00050048, +0x0000030E, 0x00000000, 0x00000023, 0x00000000, 0x00030047, 0x0000030E, 0x00000002, 0x00040047, +0x00000310, 0x00000022, 0x00000000, 0x00040047, 0x00000310, 0x00000021, 0x00000001, 0x00040047, +0x00000340, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, +0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000003, 0x00040020, +0x00000008, 0x00000007, 0x00000007, 0x00040021, 0x00000009, 0x00000007, 0x00000008, 0x00040015, +0x0000000D, 0x00000020, 0x00000001, 0x00040020, 0x0000000E, 0x00000007, 0x0000000D, 0x00040017, +0x0000000F, 0x00000006, 0x00000002, 0x00040020, 0x00000010, 0x00000007, 0x0000000F, 0x00050021, +0x00000011, 0x00000007, 0x0000000E, 0x00000010, 0x00040021, 0x0000001A, 0x0000000F, 0x00000008, +0x00030021, 0x0000001E, 0x00000007, 0x00050021, 0x0000002C, 0x00000006, 0x00000008, 0x00000008, +0x00040020, 0x00000031, 0x00000007, 0x00000006, 0x00090021, 0x00000032, 0x00000002, 0x00000031, +0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00050021, 0x0000003B, 0x00000007, +0x00000031, 0x00000031, 0x000A0021, 0x00000040, 0x00000007, 0x00000031, 0x00000031, 0x00000008, +0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00060021, 0x0000004A, 0x00000007, 0x00000008, +0x00000008, 0x00000031, 0x0004002B, 0x00000006, 0x00000053, 0x400CCCCD, 0x0006002C, 0x00000007, +0x00000054, 0x00000053, 0x00000053, 0x00000053, 0x0004002B, 0x00000006, 0x0000005A, 0x40000000, +0x00040015, 0x0000005B, 0x00000020, 0x00000000, 0x0004002B, 0x0000005B, 0x0000005C, 0x00000000, +0x0004002B, 0x0000005B, 0x0000005F, 0x00000001, 0x0004002B, 0x00000006, 0x00000064, 0x3F800000, +0x0005002C, 0x0000000F, 0x00000065, 0x00000064, 0x00000064, 0x0004002B, 0x0000000D, 0x00000068, +0x00000000, 0x00020014, 0x00000069, 0x0004002B, 0x0000000D, 0x00000076, 0x00000001, 0x0004002B, +0x00000006, 0x0000007A, 0xBF800000, 0x0004002B, 0x0000000D, 0x00000083, 0x00000002, 0x0004002B, +0x0000000D, 0x0000008F, 0x00000003, 0x0004002B, 0x0000000D, 0x0000009C, 0x00000004, 0x0004002B, +0x00000006, 0x000000BA, 0x00000000, 0x0006002C, 0x00000007, 0x000000BB, 0x000000BA, 0x000000BA, +0x000000BA, 0x0004002B, 0x00000006, 0x000000FC, 0x3F000000, 0x0004002B, 0x0000005B, 0x000000FD, +0x00000002, 0x0004002B, 0x00000006, 0x00000104, 0x40490FDB, 0x0003001E, 0x00000110, 0x0000005B, +0x00040020, 0x00000111, 0x00000009, 0x00000110, 0x0004003B, 0x00000111, 0x00000112, 0x00000009, +0x00040020, 0x00000113, 0x00000009, 0x0000005B, 0x00040020, 0x00000117, 0x00000001, 0x0000000F, +0x0004003B, 0x00000117, 0x00000118, 0x00000001, 0x00090019, 0x00000124, 0x00000006, 0x00000001, +0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000125, 0x00000124, +0x00040020, 0x00000126, 0x00000000, 0x00000125, 0x0004003B, 0x00000126, 0x00000127, 0x00000000, +0x00040017, 0x0000012A, 0x00000006, 0x00000004, 0x0004002B, 0x00000006, 0x00000138, 0xC0060A89, +0x0004002B, 0x00000006, 0x0000014D, 0x3DCCCCCD, 0x0004002B, 0x00000006, 0x0000014F, 0x3E99999A, +0x0006002C, 0x00000007, 0x00000158, 0x0000014F, 0x000000FC, 0x00000064, 0x00040018, 0x00000193, +0x00000007, 0x00000003, 0x00040020, 0x00000194, 0x00000007, 0x00000193, 0x0004002B, 0x00000006, +0x00000196, 0x4017B921, 0x0004002B, 0x00000006, 0x00000197, 0xBF66690E, 0x0004002B, 0x00000006, +0x00000198, 0xBEF0F6EA, 0x0006002C, 0x00000007, 0x00000199, 0x00000196, 0x00000197, 0x00000198, +0x0004002B, 0x00000006, 0x0000019A, 0xBF038DF8, 0x0004002B, 0x00000006, 0x0000019B, 0x3FB67059, +0x0004002B, 0x00000006, 0x0000019C, 0x3DB56A2A, 0x0006002C, 0x00000007, 0x0000019D, 0x0000019A, +0x0000019B, 0x0000019C, 0x0004002B, 0x00000006, 0x0000019E, 0x3BAD9C86, 0x0004002B, 0x00000006, +0x0000019F, 0xBC70C2E1, 0x0004002B, 0x00000006, 0x000001A0, 0x3F8133EA, 0x0006002C, 0x00000007, +0x000001A1, 0x0000019E, 0x0000019F, 0x000001A0, 0x0006002C, 0x00000193, 0x000001A2, 0x00000199, +0x0000019D, 0x000001A1, 0x0004002B, 0x00000006, 0x000001B6, 0x3C23D70A, 0x0004002B, 0x00000006, +0x000001BA, 0x3E36FD22, 0x0004002B, 0x00000006, 0x000001BD, 0x3FBB4396, 0x0004002B, 0x00000006, +0x000001BF, 0xBC9E1B09, 0x0004002B, 0x00000006, 0x000001C2, 0x3E84B5DD, 0x0004002B, 0x00000006, +0x000001C4, 0xBC88CE70, 0x0004002B, 0x00000006, 0x000001C7, 0x3E858794, 0x0004002B, 0x00000006, +0x000001CA, 0xBEB5F6FD, 0x0004002B, 0x00000006, 0x000001CD, 0x3EDAE148, 0x0004002B, 0x00000006, +0x000001CF, 0xBD883127, 0x0004002B, 0x00000006, 0x000001D2, 0x3A51B717, 0x0004002B, 0x00000006, +0x000001D4, 0xBDC28F5C, 0x0004002B, 0x00000006, 0x000001D7, 0x3C16BB99, 0x0004002B, 0x00000006, +0x000001DA, 0xBCB9F55A, 0x0004002B, 0x00000006, 0x000001DD, 0x40AA6738, 0x0004002B, 0x00000006, +0x000001DF, 0xB9D1B717, 0x0004002B, 0x00000006, 0x000001E2, 0x3E59999A, 0x0004002B, 0x00000006, +0x000001E4, 0xBC016F00, 0x0004002B, 0x00000006, 0x000001E7, 0x3E573EAB, 0x0004002B, 0x00000006, +0x000001EA, 0x3DF6FD22, 0x0004002B, 0x00000006, 0x000001ED, 0x4024EF35, 0x0004002B, 0x00000006, +0x000001EF, 0xBD8346DC, 0x0004002B, 0x00000006, 0x000001F2, 0x3F661E4F, 0x0004002B, 0x00000006, +0x000001F4, 0xBD34A234, 0x0004002B, 0x00000006, 0x000001F7, 0x3FD3AC71, 0x0004002B, 0x00000006, +0x000001FA, 0xBD89374C, 0x0004002B, 0x00000006, 0x000001FD, 0x3EBD97F6, 0x0004002B, 0x00000006, +0x000001FF, 0xBB5844D0, 0x0004002B, 0x00000006, 0x00000202, 0x3D3923A3, 0x0004002B, 0x00000006, +0x00000204, 0xBC3295EA, 0x0004002B, 0x00000006, 0x00000207, 0x3D58ADAC, 0x0004002B, 0x00000006, +0x0000020B, 0x3EE38E39, 0x0004002B, 0x00000006, 0x0000020D, 0x42F00000, 0x0004002B, 0x00000006, +0x00000215, 0x40817319, 0x0004002B, 0x00000006, 0x00000218, 0x409F126F, 0x0004002B, 0x00000006, +0x0000021D, 0x3E5CAC08, 0x0004002B, 0x00000006, 0x00000221, 0x401AD42C, 0x0004002B, 0x00000006, +0x00000232, 0x3AD844D0, 0x0004002B, 0x00000006, 0x00000235, 0x3B75C28F, 0x0004002B, 0x00000006, +0x00000239, 0x3B08F862, 0x0004002B, 0x00000006, 0x00000240, 0xBCEDD053, 0x0004002B, 0x00000006, +0x00000243, 0x3D8299D9, 0x0004002B, 0x00000006, 0x00000247, 0x3D032767, 0x0004002B, 0x00000006, +0x0000024B, 0x3B811B1E, 0x0004002B, 0x00000006, 0x00000250, 0x3DEF78FF, 0x0004002B, 0x00000006, +0x00000253, 0x3E590C0B, 0x0004002B, 0x00000006, 0x00000257, 0x3D77E3D2, 0x0004002B, 0x00000006, +0x0000025B, 0x3E84894C, 0x0004002B, 0x00000006, 0x0000025F, 0x3B343958, 0x0004002B, 0x00000006, +0x00000262, 0x3BC7E282, 0x0004002B, 0x00000006, 0x00000266, 0x3B4FBFC6, 0x0004002B, 0x00000006, +0x0000026D, 0xBD2C9AFE, 0x0004002B, 0x00000006, 0x00000270, 0x3DB7B4A2, 0x0004002B, 0x00000006, +0x00000274, 0x3D2A1B5C, 0x0004002B, 0x00000006, 0x00000278, 0x3BA91538, 0x0004002B, 0x00000006, +0x0000027D, 0x3E1D249E, 0x0004002B, 0x00000006, 0x00000280, 0x3E88FDA0, 0x0004002B, 0x00000006, +0x00000284, 0x3D889A02, 0x0004002B, 0x00000006, 0x00000288, 0x3E88A47F, 0x0006002C, 0x00000007, +0x000002C1, 0x000000BA, 0x00000064, 0x000000BA, 0x0003001E, 0x0000030E, 0x0000012A, 0x00040020, +0x0000030F, 0x00000002, 0x0000030E, 0x0004003B, 0x0000030F, 0x00000310, 0x00000002, 0x00040020, +0x00000311, 0x00000002, 0x00000006, 0x0004002B, 0x00000006, 0x00000335, 0x3D23D70A, 0x0004002B, +0x0000005B, 0x00000339, 0x00000003, 0x00040020, 0x0000033F, 0x00000003, 0x0000012A, 0x0004003B, +0x0000033F, 0x00000340, 0x00000003, 0x0004002B, 0x00000006, 0x00000342, 0x42480000, 0x0004002B, +0x00000006, 0x0000034D, 0x3FC00000, 0x0004002B, 0x00000006, 0x0000035E, 0x40C90FDB, 0x0004002B, +0x00000006, 0x0000035F, 0x3727C5AC, 0x0004002B, 0x0000005B, 0x00000360, 0x00000400, 0x0004002B, +0x00000006, 0x00000361, 0x3A800000, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, +0x000200F8, 0x00000005, 0x0004003B, 0x00000008, 0x00000352, 0x00000007, 0x00060041, 0x00000311, +0x0000033A, 0x00000310, 0x00000068, 0x00000339, 0x0004003D, 0x00000006, 0x0000033B, 0x0000033A, +0x000500B8, 0x00000069, 0x0000033C, 0x0000033B, 0x000000FC, 0x000300F7, 0x0000033E, 0x00000000, +0x000400FA, 0x0000033C, 0x0000033D, 0x0000034A, 0x000200F8, 0x0000033D, 0x00040039, 0x00000007, +0x00000341, 0x0000001F, 0x00060050, 0x00000007, 0x00000343, 0x000000BA, 0x000000BA, 0x000000BA, +0x00060050, 0x00000007, 0x00000344, 0x00000342, 0x00000342, 0x00000342, 0x0008000C, 0x00000007, +0x00000345, 0x00000001, 0x0000002B, 0x00000341, 0x00000343, 0x00000344, 0x00050051, 0x00000006, +0x00000346, 0x00000345, 0x00000000, 0x00050051, 0x00000006, 0x00000347, 0x00000345, 0x00000001, +0x00050051, 0x00000006, 0x00000348, 0x00000345, 0x00000002, 0x00070050, 0x0000012A, 0x00000349, +0x00000346, 0x00000347, 0x00000348, 0x00000064, 0x0003003E, 0x00000340, 0x00000349, 0x000200F9, +0x0000033E, 0x000200F8, 0x0000034A, 0x00060041, 0x00000311, 0x0000034B, 0x00000310, 0x00000068, +0x00000339, 0x0004003D, 0x00000006, 0x0000034C, 0x0000034B, 0x000500B8, 0x00000069, 0x0000034E, +0x0000034C, 0x0000034D, 0x000300F7, 0x00000350, 0x00000000, 0x000400FA, 0x0000034E, 0x0000034F, +0x00000358, 0x000200F8, 0x0000034F, 0x00040039, 0x00000007, 0x00000351, 0x00000050, 0x0003003E, +0x00000352, 0x00000351, 0x00050039, 0x00000007, 0x00000353, 0x0000000B, 0x00000352, 0x00050051, +0x00000006, 0x00000354, 0x00000353, 0x00000000, 0x00050051, 0x00000006, 0x00000355, 0x00000353, +0x00000001, 0x00050051, 0x00000006, 0x00000356, 0x00000353, 0x00000002, 0x00070050, 0x0000012A, +0x00000357, 0x00000354, 0x00000355, 0x00000356, 0x00000064, 0x0003003E, 0x00000340, 0x00000357, +0x000200F9, 0x00000350, 0x000200F8, 0x00000358, 0x00040039, 0x00000007, 0x00000359, 0x00000021, +0x00050051, 0x00000006, 0x0000035A, 0x00000359, 0x00000000, 0x00050051, 0x00000006, 0x0000035B, +0x00000359, 0x00000001, 0x00050051, 0x00000006, 0x0000035C, 0x00000359, 0x00000002, 0x00070050, +0x0000012A, 0x0000035D, 0x0000035A, 0x0000035B, 0x0000035C, 0x00000064, 0x0003003E, 0x00000340, +0x0000035D, 0x000200F9, 0x00000350, 0x000200F8, 0x00000350, 0x000200F9, 0x0000033E, 0x000200F8, +0x0000033E, 0x000100FD, 0x00010038, 0x00050036, 0x00000007, 0x0000000B, 0x00000000, 0x00000009, +0x00030037, 0x00000008, 0x0000000A, 0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, 0x00000052, +0x0000000A, 0x0007000C, 0x00000007, 0x00000055, 0x00000001, 0x0000001A, 0x00000052, 0x00000054, +0x000200FE, 0x00000055, 0x00010038, 0x00050036, 0x00000007, 0x00000014, 0x00000000, 0x00000011, +0x00030037, 0x0000000E, 0x00000012, 0x00030037, 0x00000010, 0x00000013, 0x000200F8, 0x00000015, +0x0004003B, 0x00000010, 0x00000058, 0x00000007, 0x0004003D, 0x0000000F, 0x00000059, 0x00000013, +0x0003003E, 0x00000058, 0x00000059, 0x00050041, 0x00000031, 0x0000005D, 0x00000058, 0x0000005C, +0x0004003D, 0x00000006, 0x0000005E, 0x0000005D, 0x00050041, 0x00000031, 0x00000060, 0x00000058, +0x0000005F, 0x0004003D, 0x00000006, 0x00000061, 0x00000060, 0x00050050, 0x0000000F, 0x00000062, +0x0000005E, 0x00000061, 0x0005008E, 0x0000000F, 0x00000063, 0x00000062, 0x0000005A, 0x00050083, +0x0000000F, 0x00000066, 0x00000063, 0x00000065, 0x0003003E, 0x00000058, 0x00000066, 0x0004003D, +0x0000000D, 0x00000067, 0x00000012, 0x000500AA, 0x00000069, 0x0000006A, 0x00000067, 0x00000068, +0x000300F7, 0x0000006C, 0x00000000, 0x000400FA, 0x0000006A, 0x0000006B, 0x00000074, 0x000200F8, +0x0000006B, 0x00050041, 0x00000031, 0x0000006D, 0x00000058, 0x0000005F, 0x0004003D, 0x00000006, +0x0000006E, 0x0000006D, 0x00050041, 0x00000031, 0x0000006F, 0x00000058, 0x0000005C, 0x0004003D, +0x00000006, 0x00000070, 0x0000006F, 0x0004007F, 0x00000006, 0x00000071, 0x00000070, 0x00060050, +0x00000007, 0x00000072, 0x00000064, 0x0000006E, 0x00000071, 0x000200FE, 0x00000072, 0x000200F8, +0x00000074, 0x0004003D, 0x0000000D, 0x00000075, 0x00000012, 0x000500AA, 0x00000069, 0x00000077, +0x00000075, 0x00000076, 0x000300F7, 0x00000079, 0x00000000, 0x000400FA, 0x00000077, 0x00000078, +0x00000081, 0x000200F8, 0x00000078, 0x00050041, 0x00000031, 0x0000007B, 0x00000058, 0x0000005F, +0x0004003D, 0x00000006, 0x0000007C, 0x0000007B, 0x00050041, 0x00000031, 0x0000007D, 0x00000058, +0x0000005C, 0x0004003D, 0x00000006, 0x0000007E, 0x0000007D, 0x00060050, 0x00000007, 0x0000007F, +0x0000007A, 0x0000007C, 0x0000007E, 0x000200FE, 0x0000007F, 0x000200F8, 0x00000081, 0x0004003D, +0x0000000D, 0x00000082, 0x00000012, 0x000500AA, 0x00000069, 0x00000084, 0x00000082, 0x00000083, +0x000300F7, 0x00000086, 0x00000000, 0x000400FA, 0x00000084, 0x00000085, 0x0000008D, 0x000200F8, +0x00000085, 0x00050041, 0x00000031, 0x00000087, 0x00000058, 0x0000005C, 0x0004003D, 0x00000006, +0x00000088, 0x00000087, 0x00050041, 0x00000031, 0x00000089, 0x00000058, 0x0000005F, 0x0004003D, +0x00000006, 0x0000008A, 0x00000089, 0x00060050, 0x00000007, 0x0000008B, 0x00000088, 0x0000007A, +0x0000008A, 0x000200FE, 0x0000008B, 0x000200F8, 0x0000008D, 0x0004003D, 0x0000000D, 0x0000008E, +0x00000012, 0x000500AA, 0x00000069, 0x00000090, 0x0000008E, 0x0000008F, 0x000300F7, 0x00000092, +0x00000000, 0x000400FA, 0x00000090, 0x00000091, 0x0000009A, 0x000200F8, 0x00000091, 0x00050041, +0x00000031, 0x00000093, 0x00000058, 0x0000005C, 0x0004003D, 0x00000006, 0x00000094, 0x00000093, +0x00050041, 0x00000031, 0x00000095, 0x00000058, 0x0000005F, 0x0004003D, 0x00000006, 0x00000096, +0x00000095, 0x0004007F, 0x00000006, 0x00000097, 0x00000096, 0x00060050, 0x00000007, 0x00000098, +0x00000094, 0x00000064, 0x00000097, 0x000200FE, 0x00000098, 0x000200F8, 0x0000009A, 0x0004003D, +0x0000000D, 0x0000009B, 0x00000012, 0x000500AA, 0x00000069, 0x0000009D, 0x0000009B, 0x0000009C, +0x000300F7, 0x0000009F, 0x00000000, 0x000400FA, 0x0000009D, 0x0000009E, 0x000000A6, 0x000200F8, +0x0000009E, 0x00050041, 0x00000031, 0x000000A0, 0x00000058, 0x0000005C, 0x0004003D, 0x00000006, +0x000000A1, 0x000000A0, 0x00050041, 0x00000031, 0x000000A2, 0x00000058, 0x0000005F, 0x0004003D, +0x00000006, 0x000000A3, 0x000000A2, 0x00060050, 0x00000007, 0x000000A4, 0x000000A1, 0x000000A3, +0x00000064, 0x000200FE, 0x000000A4, 0x000200F8, 0x000000A6, 0x00050041, 0x00000031, 0x000000A7, +0x00000058, 0x0000005C, 0x0004003D, 0x00000006, 0x000000A8, 0x000000A7, 0x0004007F, 0x00000006, +0x000000A9, 0x000000A8, 0x00050041, 0x00000031, 0x000000AA, 0x00000058, 0x0000005F, 0x0004003D, +0x00000006, 0x000000AB, 0x000000AA, 0x00060050, 0x00000007, 0x000000AC, 0x000000A9, 0x000000AB, +0x0000007A, 0x000200FE, 0x000000AC, 0x000200F8, 0x0000009F, 0x000100FF, 0x000200F8, 0x00000092, +0x000100FF, 0x000200F8, 0x00000086, 0x000100FF, 0x000200F8, 0x00000079, 0x000100FF, 0x000200F8, +0x0000006C, 0x000100FF, 0x00010038, 0x00050036, 0x00000007, 0x00000018, 0x00000000, 0x00000011, +0x00030037, 0x0000000E, 0x00000016, 0x00030037, 0x00000010, 0x00000017, 0x000200F8, 0x00000019, +0x0004003B, 0x00000010, 0x000000AF, 0x00000007, 0x0004003B, 0x00000008, 0x000000B9, 0x00000007, +0x0004003B, 0x0000000E, 0x000000BC, 0x00000007, 0x0004003D, 0x0000000F, 0x000000B0, 0x00000017, +0x0003003E, 0x000000AF, 0x000000B0, 0x00050041, 0x00000031, 0x000000B1, 0x000000AF, 0x0000005C, +0x0004003D, 0x00000006, 0x000000B2, 0x000000B1, 0x00050041, 0x00000031, 0x000000B3, 0x000000AF, +0x0000005F, 0x0004003D, 0x00000006, 0x000000B4, 0x000000B3, 0x00050083, 0x00000006, 0x000000B5, +0x00000064, 0x000000B4, 0x00050050, 0x0000000F, 0x000000B6, 0x000000B2, 0x000000B5, 0x0005008E, +0x0000000F, 0x000000B7, 0x000000B6, 0x0000005A, 0x00050083, 0x0000000F, 0x000000B8, 0x000000B7, +0x00000065, 0x0003003E, 0x000000AF, 0x000000B8, 0x0003003E, 0x000000B9, 0x000000BB, 0x0004003D, +0x0000000D, 0x000000BD, 0x00000016, 0x0003003E, 0x000000BC, 0x000000BD, 0x0004003D, 0x0000000D, +0x000000BE, 0x000000BC, 0x000500AA, 0x00000069, 0x000000BF, 0x000000BE, 0x00000068, 0x000300F7, +0x000000C1, 0x00000000, 0x000400FA, 0x000000BF, 0x000000C0, 0x000000C8, 0x000200F8, 0x000000C0, +0x00050041, 0x00000031, 0x000000C2, 0x000000AF, 0x0000005F, 0x0004003D, 0x00000006, 0x000000C3, +0x000000C2, 0x00050041, 0x00000031, 0x000000C4, 0x000000AF, 0x0000005C, 0x0004003D, 0x00000006, +0x000000C5, 0x000000C4, 0x0004007F, 0x00000006, 0x000000C6, 0x000000C5, 0x00060050, 0x00000007, +0x000000C7, 0x00000064, 0x000000C3, 0x000000C6, 0x0003003E, 0x000000B9, 0x000000C7, 0x000200F9, +0x000000C1, 0x000200F8, 0x000000C8, 0x0004003D, 0x0000000D, 0x000000C9, 0x000000BC, 0x000500AA, +0x00000069, 0x000000CA, 0x000000C9, 0x00000076, 0x000300F7, 0x000000CC, 0x00000000, 0x000400FA, +0x000000CA, 0x000000CB, 0x000000D2, 0x000200F8, 0x000000CB, 0x00050041, 0x00000031, 0x000000CD, +0x000000AF, 0x0000005F, 0x0004003D, 0x00000006, 0x000000CE, 0x000000CD, 0x00050041, 0x00000031, +0x000000CF, 0x000000AF, 0x0000005C, 0x0004003D, 0x00000006, 0x000000D0, 0x000000CF, 0x00060050, +0x00000007, 0x000000D1, 0x0000007A, 0x000000CE, 0x000000D0, 0x0003003E, 0x000000B9, 0x000000D1, +0x000200F9, 0x000000CC, 0x000200F8, 0x000000D2, 0x0004003D, 0x0000000D, 0x000000D3, 0x000000BC, +0x000500AA, 0x00000069, 0x000000D4, 0x000000D3, 0x00000083, 0x000300F7, 0x000000D6, 0x00000000, +0x000400FA, 0x000000D4, 0x000000D5, 0x000000DD, 0x000200F8, 0x000000D5, 0x00050041, 0x00000031, +0x000000D7, 0x000000AF, 0x0000005C, 0x0004003D, 0x00000006, 0x000000D8, 0x000000D7, 0x00050041, +0x00000031, 0x000000D9, 0x000000AF, 0x0000005F, 0x0004003D, 0x00000006, 0x000000DA, 0x000000D9, +0x0004007F, 0x00000006, 0x000000DB, 0x000000DA, 0x00060050, 0x00000007, 0x000000DC, 0x000000D8, +0x00000064, 0x000000DB, 0x0003003E, 0x000000B9, 0x000000DC, 0x000200F9, 0x000000D6, 0x000200F8, +0x000000DD, 0x0004003D, 0x0000000D, 0x000000DE, 0x000000BC, 0x000500AA, 0x00000069, 0x000000DF, +0x000000DE, 0x0000008F, 0x000300F7, 0x000000E1, 0x00000000, 0x000400FA, 0x000000DF, 0x000000E0, +0x000000E7, 0x000200F8, 0x000000E0, 0x00050041, 0x00000031, 0x000000E2, 0x000000AF, 0x0000005C, +0x0004003D, 0x00000006, 0x000000E3, 0x000000E2, 0x00050041, 0x00000031, 0x000000E4, 0x000000AF, +0x0000005F, 0x0004003D, 0x00000006, 0x000000E5, 0x000000E4, 0x00060050, 0x00000007, 0x000000E6, +0x000000E3, 0x0000007A, 0x000000E5, 0x0003003E, 0x000000B9, 0x000000E6, 0x000200F9, 0x000000E1, +0x000200F8, 0x000000E7, 0x0004003D, 0x0000000D, 0x000000E8, 0x000000BC, 0x000500AA, 0x00000069, +0x000000E9, 0x000000E8, 0x0000009C, 0x000300F7, 0x000000EB, 0x00000000, 0x000400FA, 0x000000E9, +0x000000EA, 0x000000F1, 0x000200F8, 0x000000EA, 0x00050041, 0x00000031, 0x000000EC, 0x000000AF, +0x0000005C, 0x0004003D, 0x00000006, 0x000000ED, 0x000000EC, 0x00050041, 0x00000031, 0x000000EE, +0x000000AF, 0x0000005F, 0x0004003D, 0x00000006, 0x000000EF, 0x000000EE, 0x00060050, 0x00000007, +0x000000F0, 0x000000ED, 0x000000EF, 0x00000064, 0x0003003E, 0x000000B9, 0x000000F0, 0x000200F9, +0x000000EB, 0x000200F8, 0x000000F1, 0x00050041, 0x00000031, 0x000000F2, 0x000000AF, 0x0000005C, +0x0004003D, 0x00000006, 0x000000F3, 0x000000F2, 0x0004007F, 0x00000006, 0x000000F4, 0x000000F3, +0x00050041, 0x00000031, 0x000000F5, 0x000000AF, 0x0000005F, 0x0004003D, 0x00000006, 0x000000F6, +0x000000F5, 0x00060050, 0x00000007, 0x000000F7, 0x000000F4, 0x000000F6, 0x0000007A, 0x0003003E, +0x000000B9, 0x000000F7, 0x000200F9, 0x000000EB, 0x000200F8, 0x000000EB, 0x000200F9, 0x000000E1, +0x000200F8, 0x000000E1, 0x000200F9, 0x000000D6, 0x000200F8, 0x000000D6, 0x000200F9, 0x000000CC, +0x000200F8, 0x000000CC, 0x000200F9, 0x000000C1, 0x000200F8, 0x000000C1, 0x0004003D, 0x00000007, +0x000000F8, 0x000000B9, 0x0006000C, 0x00000007, 0x000000F9, 0x00000001, 0x00000045, 0x000000F8, +0x000200FE, 0x000000F9, 0x00010038, 0x00050036, 0x0000000F, 0x0000001C, 0x00000000, 0x0000001A, +0x00030037, 0x00000008, 0x0000001B, 0x000200F8, 0x0000001D, 0x00050041, 0x00000031, 0x000000FE, +0x0000001B, 0x000000FD, 0x0004003D, 0x00000006, 0x000000FF, 0x000000FE, 0x00050041, 0x00000031, +0x00000100, 0x0000001B, 0x0000005C, 0x0004003D, 0x00000006, 0x00000101, 0x00000100, 0x0007000C, +0x00000006, 0x00000102, 0x00000001, 0x00000019, 0x000000FF, 0x00000101, 0x00050085, 0x00000006, +0x00000103, 0x000000FC, 0x00000102, 0x00050088, 0x00000006, 0x00000105, 0x00000103, 0x00000104, +0x00050081, 0x00000006, 0x00000106, 0x000000FC, 0x00000105, 0x00050041, 0x00000031, 0x00000107, +0x0000001B, 0x0000005F, 0x0004003D, 0x00000006, 0x00000108, 0x00000107, 0x0006000C, 0x00000006, +0x00000109, 0x00000001, 0x00000011, 0x00000108, 0x00050088, 0x00000006, 0x0000010A, 0x00000109, +0x00000104, 0x00050083, 0x00000006, 0x0000010B, 0x00000064, 0x0000010A, 0x00050050, 0x0000000F, +0x0000010C, 0x00000106, 0x0000010B, 0x000200FE, 0x0000010C, 0x00010038, 0x00050036, 0x00000007, +0x0000001F, 0x00000000, 0x0000001E, 0x000200F8, 0x00000020, 0x0004003B, 0x00000008, 0x0000010F, +0x00000007, 0x0004003B, 0x0000000E, 0x00000119, 0x00000007, 0x0004003B, 0x00000010, 0x0000011A, +0x00000007, 0x0004003B, 0x00000008, 0x0000011D, 0x00000007, 0x0004003B, 0x00000010, 0x00000120, +0x00000007, 0x0004003B, 0x00000008, 0x00000121, 0x00000007, 0x00050041, 0x00000113, 0x00000114, +0x00000112, 0x00000068, 0x0004003D, 0x0000005B, 0x00000115, 0x00000114, 0x0004007C, 0x0000000D, +0x00000116, 0x00000115, 0x0003003E, 0x00000119, 0x00000116, 0x0004003D, 0x0000000F, 0x0000011B, +0x00000118, 0x0003003E, 0x0000011A, 0x0000011B, 0x00060039, 0x00000007, 0x0000011C, 0x00000014, +0x00000119, 0x0000011A, 0x0003003E, 0x0000010F, 0x0000011C, 0x0004003D, 0x00000007, 0x0000011E, +0x0000010F, 0x0006000C, 0x00000007, 0x0000011F, 0x00000001, 0x00000045, 0x0000011E, 0x0003003E, +0x0000011D, 0x0000011F, 0x0004003D, 0x00000007, 0x00000122, 0x0000011D, 0x0003003E, 0x00000121, +0x00000122, 0x00050039, 0x0000000F, 0x00000123, 0x0000001C, 0x00000121, 0x0003003E, 0x00000120, +0x00000123, 0x0004003D, 0x00000125, 0x00000128, 0x00000127, 0x0004003D, 0x0000000F, 0x00000129, +0x00000120, 0x00050057, 0x0000012A, 0x0000012B, 0x00000128, 0x00000129, 0x0008004F, 0x00000007, +0x0000012C, 0x0000012B, 0x0000012B, 0x00000000, 0x00000001, 0x00000002, 0x000200FE, 0x0000012C, +0x00010038, 0x00050036, 0x00000007, 0x00000021, 0x00000000, 0x0000001E, 0x000200F8, 0x00000022, +0x0004003B, 0x00000008, 0x0000012F, 0x00000007, 0x0004003B, 0x0000000E, 0x00000133, 0x00000007, +0x0004003B, 0x00000010, 0x00000134, 0x00000007, 0x0004003B, 0x00000031, 0x00000137, 0x00000007, +0x0004003B, 0x00000008, 0x00000139, 0x00000007, 0x0004003B, 0x00000031, 0x00000141, 0x00000007, +0x0004003B, 0x00000031, 0x00000147, 0x00000007, 0x0004003B, 0x00000031, 0x0000014A, 0x00000007, +0x0004003B, 0x00000008, 0x00000156, 0x00000007, 0x00050041, 0x00000113, 0x00000130, 0x00000112, +0x00000068, 0x0004003D, 0x0000005B, 0x00000131, 0x00000130, 0x0004007C, 0x0000000D, 0x00000132, +0x00000131, 0x0003003E, 0x00000133, 0x00000132, 0x0004003D, 0x0000000F, 0x00000135, 0x00000118, +0x0003003E, 0x00000134, 0x00000135, 0x00060039, 0x00000007, 0x00000136, 0x00000018, 0x00000133, +0x00000134, 0x0003003E, 0x0000012F, 0x00000136, 0x0003003E, 0x00000137, 0x00000138, 0x0004003D, +0x00000006, 0x0000013A, 0x00000137, 0x0006000C, 0x00000006, 0x0000013B, 0x00000001, 0x0000000E, +0x0000013A, 0x00050041, 0x00000031, 0x0000013C, 0x00000139, 0x0000005C, 0x0003003E, 0x0000013C, +0x0000013B, 0x0004003D, 0x00000006, 0x0000013D, 0x00000137, 0x0006000C, 0x00000006, 0x0000013E, +0x00000001, 0x0000000D, 0x0000013D, 0x00050041, 0x00000031, 0x0000013F, 0x00000139, 0x0000005F, +0x0003003E, 0x0000013F, 0x0000013E, 0x00050041, 0x00000031, 0x00000140, 0x00000139, 0x000000FD, +0x0003003E, 0x00000140, 0x000000BA, 0x0004003D, 0x00000007, 0x00000142, 0x0000012F, 0x0004003D, +0x00000007, 0x00000143, 0x00000139, 0x0006000C, 0x00000007, 0x00000144, 0x00000001, 0x00000045, +0x00000143, 0x00050083, 0x00000007, 0x00000145, 0x00000142, 0x00000144, 0x0006000C, 0x00000006, +0x00000146, 0x00000001, 0x00000042, 0x00000145, 0x0003003E, 0x00000141, 0x00000146, 0x0004003D, +0x00000006, 0x00000148, 0x00000141, 0x0008000C, 0x00000006, 0x00000149, 0x00000001, 0x0000002B, +0x00000148, 0x000000BA, 0x00000064, 0x0003003E, 0x00000147, 0x00000149, 0x00050041, 0x00000031, +0x0000014B, 0x0000012F, 0x0000005F, 0x0004003D, 0x00000006, 0x0000014C, 0x0000014B, 0x00050081, +0x00000006, 0x0000014E, 0x0000014C, 0x0000014D, 0x0003003E, 0x0000014A, 0x0000014E, 0x0004003D, +0x00000006, 0x00000150, 0x00000147, 0x0004003D, 0x00000006, 0x00000151, 0x0000014A, 0x0008000C, +0x00000006, 0x00000152, 0x00000001, 0x0000002E, 0x00000150, 0x00000064, 0x00000151, 0x00050085, +0x00000006, 0x00000153, 0x0000014F, 0x00000152, 0x0004003D, 0x00000006, 0x00000154, 0x0000014A, +0x00050088, 0x00000006, 0x00000155, 0x00000153, 0x00000154, 0x0003003E, 0x0000014A, 0x00000155, +0x0004003D, 0x00000006, 0x00000157, 0x0000014A, 0x0005008E, 0x00000007, 0x00000159, 0x00000158, +0x00000157, 0x0003003E, 0x00000156, 0x00000159, 0x0004003D, 0x00000007, 0x0000015A, 0x00000156, +0x00060050, 0x00000007, 0x0000015B, 0x000000BA, 0x000000BA, 0x000000BA, 0x0007000C, 0x00000007, +0x0000015C, 0x00000001, 0x00000028, 0x0000015A, 0x0000015B, 0x0003003E, 0x00000156, 0x0000015C, +0x0004003D, 0x00000007, 0x0000015D, 0x00000156, 0x0004003D, 0x00000007, 0x0000015E, 0x00000156, +0x00060050, 0x00000007, 0x0000015F, 0x00000064, 0x00000064, 0x00000064, 0x00050083, 0x00000007, +0x00000160, 0x0000015F, 0x0000015E, 0x0007000C, 0x00000007, 0x00000161, 0x00000001, 0x0000001A, +0x0000015D, 0x00000160, 0x0004003D, 0x00000007, 0x00000162, 0x00000156, 0x0004003D, 0x00000007, +0x00000163, 0x00000156, 0x0005008E, 0x00000007, 0x00000164, 0x00000163, 0x0000005A, 0x00060050, +0x00000007, 0x00000165, 0x000000FC, 0x000000FC, 0x000000FC, 0x00050081, 0x00000007, 0x00000166, +0x00000164, 0x00000165, 0x0004003D, 0x00000007, 0x00000167, 0x00000156, 0x00050083, 0x00000007, +0x00000168, 0x00000166, 0x00000167, 0x00050088, 0x00000007, 0x00000169, 0x00000162, 0x00000168, +0x00050041, 0x00000031, 0x0000016A, 0x00000139, 0x0000005F, 0x0004003D, 0x00000006, 0x0000016B, +0x0000016A, 0x00050085, 0x00000006, 0x0000016C, 0x0000016B, 0x0000005A, 0x0008000C, 0x00000006, +0x0000016D, 0x00000001, 0x0000002B, 0x0000016C, 0x000000BA, 0x00000064, 0x00060050, 0x00000007, +0x0000016E, 0x0000016D, 0x0000016D, 0x0000016D, 0x0008000C, 0x00000007, 0x0000016F, 0x00000001, +0x0000002E, 0x00000161, 0x00000169, 0x0000016E, 0x00060050, 0x00000007, 0x00000170, 0x000000BA, +0x000000BA, 0x000000BA, 0x0007000C, 0x00000007, 0x00000171, 0x00000001, 0x00000028, 0x0000016F, +0x00000170, 0x0003003E, 0x00000156, 0x00000171, 0x0004003D, 0x00000007, 0x00000172, 0x00000156, +0x000200FE, 0x00000172, 0x00010038, 0x00050036, 0x00000007, 0x00000024, 0x00000000, 0x00000009, +0x00030037, 0x00000008, 0x00000023, 0x000200F8, 0x00000025, 0x0004003B, 0x00000031, 0x00000175, +0x00000007, 0x0004003B, 0x00000031, 0x00000178, 0x00000007, 0x0004003B, 0x00000031, 0x0000017B, +0x00000007, 0x0004003B, 0x00000031, 0x0000017E, 0x00000007, 0x0004003B, 0x00000031, 0x00000184, +0x00000007, 0x00050041, 0x00000031, 0x00000176, 0x00000023, 0x0000005C, 0x0004003D, 0x00000006, +0x00000177, 0x00000176, 0x0003003E, 0x00000175, 0x00000177, 0x00050041, 0x00000031, 0x00000179, +0x00000023, 0x0000005F, 0x0004003D, 0x00000006, 0x0000017A, 0x00000179, 0x0003003E, 0x00000178, +0x0000017A, 0x00050041, 0x00000031, 0x0000017C, 0x00000023, 0x000000FD, 0x0004003D, 0x00000006, +0x0000017D, 0x0000017C, 0x0003003E, 0x0000017B, 0x0000017D, 0x0004003D, 0x00000006, 0x0000017F, +0x00000178, 0x0004003D, 0x00000006, 0x00000180, 0x00000175, 0x0004003D, 0x00000006, 0x00000181, +0x0000017B, 0x00050088, 0x00000006, 0x00000182, 0x00000180, 0x00000181, 0x00050085, 0x00000006, +0x00000183, 0x0000017F, 0x00000182, 0x0003003E, 0x0000017E, 0x00000183, 0x0004003D, 0x00000006, +0x00000185, 0x00000178, 0x00050083, 0x00000006, 0x00000186, 0x00000064, 0x00000185, 0x0004003D, +0x00000006, 0x00000187, 0x0000017B, 0x00050083, 0x00000006, 0x00000188, 0x00000186, 0x00000187, +0x0004003D, 0x00000006, 0x00000189, 0x00000175, 0x0004003D, 0x00000006, 0x0000018A, 0x0000017B, +0x00050088, 0x00000006, 0x0000018B, 0x00000189, 0x0000018A, 0x00050085, 0x00000006, 0x0000018C, +0x00000188, 0x0000018B, 0x0003003E, 0x00000184, 0x0000018C, 0x0004003D, 0x00000006, 0x0000018D, +0x0000017E, 0x0004003D, 0x00000006, 0x0000018E, 0x00000175, 0x0004003D, 0x00000006, 0x0000018F, +0x00000184, 0x00060050, 0x00000007, 0x00000190, 0x0000018D, 0x0000018E, 0x0000018F, 0x000200FE, +0x00000190, 0x00010038, 0x00050036, 0x00000007, 0x00000027, 0x00000000, 0x00000009, 0x00030037, +0x00000008, 0x00000026, 0x000200F8, 0x00000028, 0x0004003B, 0x00000194, 0x00000195, 0x00000007, +0x0003003E, 0x00000195, 0x000001A2, 0x0004003D, 0x00000007, 0x000001A3, 0x00000026, 0x0004003D, +0x00000193, 0x000001A4, 0x00000195, 0x00050090, 0x00000007, 0x000001A5, 0x000001A3, 0x000001A4, +0x000200FE, 0x000001A5, 0x00010038, 0x00050036, 0x00000007, 0x0000002A, 0x00000000, 0x00000009, +0x00030037, 0x00000008, 0x00000029, 0x000200F8, 0x0000002B, 0x0004003B, 0x00000008, 0x000001A8, +0x00000007, 0x0004003B, 0x00000008, 0x000001A9, 0x00000007, 0x0004003B, 0x00000008, 0x000001AC, +0x00000007, 0x0004003B, 0x00000008, 0x000001AD, 0x00000007, 0x0004003D, 0x00000007, 0x000001AA, +0x00000029, 0x0003003E, 0x000001A9, 0x000001AA, 0x00050039, 0x00000007, 0x000001AB, 0x00000024, +0x000001A9, 0x0003003E, 0x000001A8, 0x000001AB, 0x0004003D, 0x00000007, 0x000001AE, 0x000001A8, +0x0003003E, 0x000001AD, 0x000001AE, 0x00050039, 0x00000007, 0x000001AF, 0x00000027, 0x000001AD, +0x0003003E, 0x000001AC, 0x000001AF, 0x0004003D, 0x00000007, 0x000001B0, 0x000001AC, 0x000200FE, +0x000001B0, 0x00010038, 0x00050036, 0x00000006, 0x0000002F, 0x00000000, 0x0000002C, 0x00030037, +0x00000008, 0x0000002D, 0x00030037, 0x00000008, 0x0000002E, 0x000200F8, 0x00000030, 0x0004003D, +0x00000007, 0x000001B3, 0x0000002D, 0x0004003D, 0x00000007, 0x000001B4, 0x0000002E, 0x00050094, +0x00000006, 0x000001B5, 0x000001B3, 0x000001B4, 0x0007000C, 0x00000006, 0x000001B7, 0x00000001, +0x00000028, 0x000001B5, 0x000001B6, 0x000200FE, 0x000001B7, 0x00010038, 0x00050036, 0x00000002, +0x00000039, 0x00000000, 0x00000032, 0x00030037, 0x00000031, 0x00000033, 0x00030037, 0x00000008, +0x00000034, 0x00030037, 0x00000008, 0x00000035, 0x00030037, 0x00000008, 0x00000036, 0x00030037, +0x00000008, 0x00000037, 0x00030037, 0x00000008, 0x00000038, 0x000200F8, 0x0000003A, 0x0004003D, +0x00000006, 0x000001BB, 0x00000033, 0x00050085, 0x00000006, 0x000001BC, 0x000001BA, 0x000001BB, +0x00050083, 0x00000006, 0x000001BE, 0x000001BC, 0x000001BD, 0x0004003D, 0x00000006, 0x000001C0, +0x00000033, 0x00050085, 0x00000006, 0x000001C1, 0x000001BF, 0x000001C0, 0x00050083, 0x00000006, +0x000001C3, 0x000001C1, 0x000001C2, 0x0004003D, 0x00000006, 0x000001C5, 0x00000033, 0x00050085, +0x00000006, 0x000001C6, 0x000001C4, 0x000001C5, 0x00050083, 0x00000006, 0x000001C8, 0x000001C6, +0x000001C7, 0x00060050, 0x00000007, 0x000001C9, 0x000001BE, 0x000001C3, 0x000001C8, 0x0003003E, +0x00000034, 0x000001C9, 0x0004003D, 0x00000006, 0x000001CB, 0x00000033, 0x00050085, 0x00000006, +0x000001CC, 0x000001CA, 0x000001CB, 0x00050081, 0x00000006, 0x000001CE, 0x000001CC, 0x000001CD, +0x0004003D, 0x00000006, 0x000001D0, 0x00000033, 0x00050085, 0x00000006, 0x000001D1, 0x000001CF, +0x000001D0, 0x00050081, 0x00000006, 0x000001D3, 0x000001D1, 0x000001D2, 0x0004003D, 0x00000006, +0x000001D5, 0x00000033, 0x00050085, 0x00000006, 0x000001D6, 0x000001D4, 0x000001D5, 0x00050081, +0x00000006, 0x000001D8, 0x000001D6, 0x000001D7, 0x00060050, 0x00000007, 0x000001D9, 0x000001CE, +0x000001D3, 0x000001D8, 0x0003003E, 0x00000035, 0x000001D9, 0x0004003D, 0x00000006, 0x000001DB, +0x00000033, 0x00050085, 0x00000006, 0x000001DC, 0x000001DA, 0x000001DB, 0x00050081, 0x00000006, +0x000001DE, 0x000001DC, 0x000001DD, 0x0004003D, 0x00000006, 0x000001E0, 0x00000033, 0x00050085, +0x00000006, 0x000001E1, 0x000001DF, 0x000001E0, 0x00050081, 0x00000006, 0x000001E3, 0x000001E1, +0x000001E2, 0x0004003D, 0x00000006, 0x000001E5, 0x00000033, 0x00050085, 0x00000006, 0x000001E6, +0x000001E4, 0x000001E5, 0x00050081, 0x00000006, 0x000001E8, 0x000001E6, 0x000001E7, 0x00060050, +0x00000007, 0x000001E9, 0x000001DE, 0x000001E3, 0x000001E8, 0x0003003E, 0x00000036, 0x000001E9, +0x0004003D, 0x00000006, 0x000001EB, 0x00000033, 0x00050085, 0x00000006, 0x000001EC, 0x000001EA, +0x000001EB, 0x00050083, 0x00000006, 0x000001EE, 0x000001EC, 0x000001ED, 0x0004003D, 0x00000006, +0x000001F0, 0x00000033, 0x00050085, 0x00000006, 0x000001F1, 0x000001EF, 0x000001F0, 0x00050083, +0x00000006, 0x000001F3, 0x000001F1, 0x000001F2, 0x0004003D, 0x00000006, 0x000001F5, 0x00000033, +0x00050085, 0x00000006, 0x000001F6, 0x000001F4, 0x000001F5, 0x00050083, 0x00000006, 0x000001F8, +0x000001F6, 0x000001F7, 0x00060050, 0x00000007, 0x000001F9, 0x000001EE, 0x000001F3, 0x000001F8, +0x0003003E, 0x00000037, 0x000001F9, 0x0004003D, 0x00000006, 0x000001FB, 0x00000033, 0x00050085, +0x00000006, 0x000001FC, 0x000001FA, 0x000001FB, 0x00050081, 0x00000006, 0x000001FE, 0x000001FC, +0x000001FD, 0x0004003D, 0x00000006, 0x00000200, 0x00000033, 0x00050085, 0x00000006, 0x00000201, +0x000001FF, 0x00000200, 0x00050081, 0x00000006, 0x00000203, 0x00000201, 0x00000202, 0x0004003D, +0x00000006, 0x00000205, 0x00000033, 0x00050085, 0x00000006, 0x00000206, 0x00000204, 0x00000205, +0x00050081, 0x00000006, 0x00000208, 0x00000206, 0x00000207, 0x00060050, 0x00000007, 0x00000209, +0x000001FE, 0x00000203, 0x00000208, 0x0003003E, 0x00000038, 0x00000209, 0x000100FD, 0x00010038, +0x00050036, 0x00000007, 0x0000003E, 0x00000000, 0x0000003B, 0x00030037, 0x00000031, 0x0000003C, +0x00030037, 0x00000031, 0x0000003D, 0x000200F8, 0x0000003F, 0x0004003B, 0x00000031, 0x0000020A, +0x00000007, 0x0004003B, 0x00000031, 0x00000214, 0x00000007, 0x0004003B, 0x00000031, 0x00000223, +0x00000007, 0x0004003B, 0x00000031, 0x00000227, 0x00000007, 0x0004003B, 0x00000031, 0x0000022B, +0x00000007, 0x0004003B, 0x00000031, 0x0000022D, 0x00000007, 0x0004003B, 0x00000031, 0x00000231, +0x00000007, 0x0004003B, 0x00000031, 0x0000025E, 0x00000007, 0x0004003D, 0x00000006, 0x0000020C, +0x0000003C, 0x00050088, 0x00000006, 0x0000020E, 0x0000020C, 0x0000020D, 0x00050083, 0x00000006, +0x0000020F, 0x0000020B, 0x0000020E, 0x0004003D, 0x00000006, 0x00000210, 0x0000003D, 0x00050085, +0x00000006, 0x00000211, 0x0000005A, 0x00000210, 0x00050083, 0x00000006, 0x00000212, 0x00000104, +0x00000211, 0x00050085, 0x00000006, 0x00000213, 0x0000020F, 0x00000212, 0x0003003E, 0x0000020A, +0x00000213, 0x0004003D, 0x00000006, 0x00000216, 0x0000003C, 0x00050085, 0x00000006, 0x00000217, +0x00000215, 0x00000216, 0x00050083, 0x00000006, 0x00000219, 0x00000217, 0x00000218, 0x0004003D, +0x00000006, 0x0000021A, 0x0000020A, 0x0006000C, 0x00000006, 0x0000021B, 0x00000001, 0x0000000F, +0x0000021A, 0x00050085, 0x00000006, 0x0000021C, 0x00000219, 0x0000021B, 0x0004003D, 0x00000006, +0x0000021E, 0x0000003C, 0x00050085, 0x00000006, 0x0000021F, 0x0000021D, 0x0000021E, 0x00050083, +0x00000006, 0x00000220, 0x0000021C, 0x0000021F, 0x00050081, 0x00000006, 0x00000222, 0x00000220, +0x00000221, 0x0003003E, 0x00000214, 0x00000222, 0x0004003D, 0x00000006, 0x00000224, 0x0000003D, +0x0004003D, 0x00000006, 0x00000225, 0x0000003D, 0x00050085, 0x00000006, 0x00000226, 0x00000224, +0x00000225, 0x0003003E, 0x00000223, 0x00000226, 0x0004003D, 0x00000006, 0x00000228, 0x00000223, +0x0004003D, 0x00000006, 0x00000229, 0x0000003D, 0x00050085, 0x00000006, 0x0000022A, 0x00000228, +0x00000229, 0x0003003E, 0x00000227, 0x0000022A, 0x0004003D, 0x00000006, 0x0000022C, 0x0000003C, +0x0003003E, 0x0000022B, 0x0000022C, 0x0004003D, 0x00000006, 0x0000022E, 0x0000003C, 0x0004003D, +0x00000006, 0x0000022F, 0x0000003C, 0x00050085, 0x00000006, 0x00000230, 0x0000022E, 0x0000022F, +0x0003003E, 0x0000022D, 0x00000230, 0x0004003D, 0x00000006, 0x00000233, 0x00000227, 0x00050085, +0x00000006, 0x00000234, 0x00000232, 0x00000233, 0x0004003D, 0x00000006, 0x00000236, 0x00000223, +0x00050085, 0x00000006, 0x00000237, 0x00000235, 0x00000236, 0x00050083, 0x00000006, 0x00000238, +0x00000234, 0x00000237, 0x0004003D, 0x00000006, 0x0000023A, 0x0000003D, 0x00050085, 0x00000006, +0x0000023B, 0x00000239, 0x0000023A, 0x00050081, 0x00000006, 0x0000023C, 0x00000238, 0x0000023B, +0x00050081, 0x00000006, 0x0000023D, 0x0000023C, 0x000000BA, 0x0004003D, 0x00000006, 0x0000023E, +0x0000022D, 0x00050085, 0x00000006, 0x0000023F, 0x0000023D, 0x0000023E, 0x0004003D, 0x00000006, +0x00000241, 0x00000227, 0x00050085, 0x00000006, 0x00000242, 0x00000240, 0x00000241, 0x0004003D, +0x00000006, 0x00000244, 0x00000223, 0x00050085, 0x00000006, 0x00000245, 0x00000243, 0x00000244, +0x00050081, 0x00000006, 0x00000246, 0x00000242, 0x00000245, 0x0004003D, 0x00000006, 0x00000248, +0x0000003D, 0x00050085, 0x00000006, 0x00000249, 0x00000247, 0x00000248, 0x00050083, 0x00000006, +0x0000024A, 0x00000246, 0x00000249, 0x00050081, 0x00000006, 0x0000024C, 0x0000024A, 0x0000024B, +0x0004003D, 0x00000006, 0x0000024D, 0x0000022B, 0x00050085, 0x00000006, 0x0000024E, 0x0000024C, +0x0000024D, 0x00050081, 0x00000006, 0x0000024F, 0x0000023F, 0x0000024E, 0x0004003D, 0x00000006, +0x00000251, 0x00000227, 0x00050085, 0x00000006, 0x00000252, 0x00000250, 0x00000251, 0x0004003D, +0x00000006, 0x00000254, 0x00000223, 0x00050085, 0x00000006, 0x00000255, 0x00000253, 0x00000254, +0x00050083, 0x00000006, 0x00000256, 0x00000252, 0x00000255, 0x0004003D, 0x00000006, 0x00000258, +0x0000003D, 0x00050085, 0x00000006, 0x00000259, 0x00000257, 0x00000258, 0x00050081, 0x00000006, +0x0000025A, 0x00000256, 0x00000259, 0x00050081, 0x00000006, 0x0000025C, 0x0000025A, 0x0000025B, +0x00050081, 0x00000006, 0x0000025D, 0x0000024F, 0x0000025C, 0x0003003E, 0x00000231, 0x0000025D, +0x0004003D, 0x00000006, 0x00000260, 0x00000227, 0x00050085, 0x00000006, 0x00000261, 0x0000025F, +0x00000260, 0x0004003D, 0x00000006, 0x00000263, 0x00000223, 0x00050085, 0x00000006, 0x00000264, +0x00000262, 0x00000263, 0x00050083, 0x00000006, 0x00000265, 0x00000261, 0x00000264, 0x0004003D, +0x00000006, 0x00000267, 0x0000003D, 0x00050085, 0x00000006, 0x00000268, 0x00000266, 0x00000267, +0x00050081, 0x00000006, 0x00000269, 0x00000265, 0x00000268, 0x00050081, 0x00000006, 0x0000026A, +0x00000269, 0x000000BA, 0x0004003D, 0x00000006, 0x0000026B, 0x0000022D, 0x00050085, 0x00000006, +0x0000026C, 0x0000026A, 0x0000026B, 0x0004003D, 0x00000006, 0x0000026E, 0x00000227, 0x00050085, +0x00000006, 0x0000026F, 0x0000026D, 0x0000026E, 0x0004003D, 0x00000006, 0x00000271, 0x00000223, +0x00050085, 0x00000006, 0x00000272, 0x00000270, 0x00000271, 0x00050081, 0x00000006, 0x00000273, +0x0000026F, 0x00000272, 0x0004003D, 0x00000006, 0x00000275, 0x0000003D, 0x00050085, 0x00000006, +0x00000276, 0x00000274, 0x00000275, 0x00050083, 0x00000006, 0x00000277, 0x00000273, 0x00000276, +0x00050081, 0x00000006, 0x00000279, 0x00000277, 0x00000278, 0x0004003D, 0x00000006, 0x0000027A, +0x0000022B, 0x00050085, 0x00000006, 0x0000027B, 0x00000279, 0x0000027A, 0x00050081, 0x00000006, +0x0000027C, 0x0000026C, 0x0000027B, 0x0004003D, 0x00000006, 0x0000027E, 0x00000227, 0x00050085, +0x00000006, 0x0000027F, 0x0000027D, 0x0000027E, 0x0004003D, 0x00000006, 0x00000281, 0x00000223, +0x00050085, 0x00000006, 0x00000282, 0x00000280, 0x00000281, 0x00050083, 0x00000006, 0x00000283, +0x0000027F, 0x00000282, 0x0004003D, 0x00000006, 0x00000285, 0x0000003D, 0x00050085, 0x00000006, +0x00000286, 0x00000284, 0x00000285, 0x00050081, 0x00000006, 0x00000287, 0x00000283, 0x00000286, +0x00050081, 0x00000006, 0x00000289, 0x00000287, 0x00000288, 0x00050081, 0x00000006, 0x0000028A, +0x0000027C, 0x00000289, 0x0003003E, 0x0000025E, 0x0000028A, 0x0004003D, 0x00000006, 0x0000028B, +0x00000214, 0x0004003D, 0x00000006, 0x0000028C, 0x00000231, 0x0004003D, 0x00000006, 0x0000028D, +0x0000025E, 0x00060050, 0x00000007, 0x0000028E, 0x0000028B, 0x0000028C, 0x0000028D, 0x000200FE, +0x0000028E, 0x00010038, 0x00050036, 0x00000007, 0x00000048, 0x00000000, 0x00000040, 0x00030037, +0x00000031, 0x00000041, 0x00030037, 0x00000031, 0x00000042, 0x00030037, 0x00000008, 0x00000043, +0x00030037, 0x00000008, 0x00000044, 0x00030037, 0x00000008, 0x00000045, 0x00030037, 0x00000008, +0x00000046, 0x00030037, 0x00000008, 0x00000047, 0x000200F8, 0x00000049, 0x0004003D, 0x00000007, +0x00000291, 0x00000043, 0x0004003D, 0x00000007, 0x00000292, 0x00000044, 0x0004003D, 0x00000006, +0x00000293, 0x00000041, 0x0006000C, 0x00000006, 0x00000294, 0x00000001, 0x0000000E, 0x00000293, +0x00060050, 0x00000007, 0x00000295, 0x00000294, 0x00000294, 0x00000294, 0x00050088, 0x00000007, +0x00000296, 0x00000292, 0x00000295, 0x0006000C, 0x00000007, 0x00000297, 0x00000001, 0x0000001B, +0x00000296, 0x00050085, 0x00000007, 0x00000298, 0x00000291, 0x00000297, 0x00060050, 0x00000007, +0x00000299, 0x00000064, 0x00000064, 0x00000064, 0x00050081, 0x00000007, 0x0000029A, 0x00000299, +0x00000298, 0x0004003D, 0x00000007, 0x0000029B, 0x00000045, 0x0004003D, 0x00000007, 0x0000029C, +0x00000046, 0x0004003D, 0x00000006, 0x0000029D, 0x00000042, 0x0005008E, 0x00000007, 0x0000029E, +0x0000029C, 0x0000029D, 0x0006000C, 0x00000007, 0x0000029F, 0x00000001, 0x0000001B, 0x0000029E, +0x00050085, 0x00000007, 0x000002A0, 0x0000029B, 0x0000029F, 0x00060050, 0x00000007, 0x000002A1, +0x00000064, 0x00000064, 0x00000064, 0x00050081, 0x00000007, 0x000002A2, 0x000002A1, 0x000002A0, +0x0004003D, 0x00000007, 0x000002A3, 0x00000047, 0x0004003D, 0x00000006, 0x000002A4, 0x00000042, +0x0006000C, 0x00000006, 0x000002A5, 0x00000001, 0x0000000E, 0x000002A4, 0x0005008E, 0x00000007, +0x000002A6, 0x000002A3, 0x000002A5, 0x0004003D, 0x00000006, 0x000002A7, 0x00000042, 0x0006000C, +0x00000006, 0x000002A8, 0x00000001, 0x0000000E, 0x000002A7, 0x0005008E, 0x00000007, 0x000002A9, +0x000002A6, 0x000002A8, 0x00050081, 0x00000007, 0x000002AA, 0x000002A2, 0x000002A9, 0x00050085, +0x00000007, 0x000002AB, 0x0000029A, 0x000002AA, 0x000200FE, 0x000002AB, 0x00010038, 0x00050036, +0x00000007, 0x0000004E, 0x00000000, 0x0000004A, 0x00030037, 0x00000008, 0x0000004B, 0x00030037, +0x00000008, 0x0000004C, 0x00030037, 0x00000031, 0x0000004D, 0x000200F8, 0x0000004F, 0x0004003B, +0x00000008, 0x000002AE, 0x00000007, 0x0004003B, 0x00000008, 0x000002AF, 0x00000007, 0x0004003B, +0x00000008, 0x000002B0, 0x00000007, 0x0004003B, 0x00000008, 0x000002B1, 0x00000007, 0x0004003B, +0x00000008, 0x000002B2, 0x00000007, 0x0004003B, 0x00000031, 0x000002B3, 0x00000007, 0x0004003B, +0x00000008, 0x000002B5, 0x00000007, 0x0004003B, 0x00000008, 0x000002B6, 0x00000007, 0x0004003B, +0x00000008, 0x000002B7, 0x00000007, 0x0004003B, 0x00000008, 0x000002B8, 0x00000007, 0x0004003B, +0x00000008, 0x000002B9, 0x00000007, 0x0004003B, 0x00000031, 0x000002C0, 0x00000007, 0x0004003B, +0x00000008, 0x000002C2, 0x00000007, 0x0004003B, 0x00000008, 0x000002C4, 0x00000007, 0x0004003B, +0x00000031, 0x000002C7, 0x00000007, 0x0004003B, 0x00000008, 0x000002C8, 0x00000007, 0x0004003B, +0x00000008, 0x000002CA, 0x00000007, 0x0004003B, 0x00000031, 0x000002CD, 0x00000007, 0x0004003B, +0x00000008, 0x000002CE, 0x00000007, 0x0004003B, 0x00000008, 0x000002D0, 0x00000007, 0x0004003B, +0x00000008, 0x000002D4, 0x00000007, 0x0004003B, 0x00000031, 0x000002D5, 0x00000007, 0x0004003B, +0x00000031, 0x000002D7, 0x00000007, 0x0004003B, 0x00000008, 0x000002DA, 0x00000007, 0x0004003B, +0x00000031, 0x000002DB, 0x00000007, 0x0004003B, 0x00000031, 0x000002DD, 0x00000007, 0x0004003B, +0x00000008, 0x000002DF, 0x00000007, 0x0004003B, 0x00000008, 0x000002E1, 0x00000007, 0x0004003B, +0x00000008, 0x000002E3, 0x00000007, 0x0004003B, 0x00000008, 0x000002E5, 0x00000007, 0x0004003B, +0x00000008, 0x000002E7, 0x00000007, 0x0004003B, 0x00000008, 0x000002EA, 0x00000007, 0x0004003B, +0x00000031, 0x000002EB, 0x00000007, 0x0004003B, 0x00000031, 0x000002EC, 0x00000007, 0x0004003B, +0x00000008, 0x000002EE, 0x00000007, 0x0004003B, 0x00000008, 0x000002F0, 0x00000007, 0x0004003B, +0x00000008, 0x000002F2, 0x00000007, 0x0004003B, 0x00000008, 0x000002F4, 0x00000007, 0x0004003B, +0x00000008, 0x000002F6, 0x00000007, 0x0004003B, 0x00000008, 0x000002F9, 0x00000007, 0x0004003B, +0x00000008, 0x000002FF, 0x00000007, 0x0004003D, 0x00000006, 0x000002B4, 0x0000004D, 0x0003003E, +0x000002B3, 0x000002B4, 0x000A0039, 0x00000002, 0x000002BA, 0x00000039, 0x000002B3, 0x000002B5, +0x000002B6, 0x000002B7, 0x000002B8, 0x000002B9, 0x0004003D, 0x00000007, 0x000002BB, 0x000002B5, +0x0003003E, 0x000002AE, 0x000002BB, 0x0004003D, 0x00000007, 0x000002BC, 0x000002B6, 0x0003003E, +0x000002AF, 0x000002BC, 0x0004003D, 0x00000007, 0x000002BD, 0x000002B7, 0x0003003E, 0x000002B0, +0x000002BD, 0x0004003D, 0x00000007, 0x000002BE, 0x000002B8, 0x0003003E, 0x000002B1, 0x000002BE, +0x0004003D, 0x00000007, 0x000002BF, 0x000002B9, 0x0003003E, 0x000002B2, 0x000002BF, 0x0004003D, +0x00000007, 0x000002C3, 0x0000004B, 0x0003003E, 0x000002C2, 0x000002C3, 0x0003003E, 0x000002C4, +0x000002C1, 0x00060039, 0x00000006, 0x000002C5, 0x0000002F, 0x000002C2, 0x000002C4, 0x0006000C, +0x00000006, 0x000002C6, 0x00000001, 0x00000011, 0x000002C5, 0x0003003E, 0x000002C0, 0x000002C6, +0x0004003D, 0x00000007, 0x000002C9, 0x0000004C, 0x0003003E, 0x000002C8, 0x000002C9, 0x0003003E, +0x000002CA, 0x000002C1, 0x00060039, 0x00000006, 0x000002CB, 0x0000002F, 0x000002C8, 0x000002CA, +0x0006000C, 0x00000006, 0x000002CC, 0x00000001, 0x00000011, 0x000002CB, 0x0003003E, 0x000002C7, +0x000002CC, 0x0004003D, 0x00000007, 0x000002CF, 0x0000004B, 0x0003003E, 0x000002CE, 0x000002CF, +0x0004003D, 0x00000007, 0x000002D1, 0x0000004C, 0x0003003E, 0x000002D0, 0x000002D1, 0x00060039, +0x00000006, 0x000002D2, 0x0000002F, 0x000002CE, 0x000002D0, 0x0006000C, 0x00000006, 0x000002D3, +0x00000001, 0x00000011, 0x000002D2, 0x0003003E, 0x000002CD, 0x000002D3, 0x0004003D, 0x00000006, +0x000002D6, 0x0000004D, 0x0003003E, 0x000002D5, 0x000002D6, 0x0004003D, 0x00000006, 0x000002D8, +0x000002C0, 0x0003003E, 0x000002D7, 0x000002D8, 0x00060039, 0x00000007, 0x000002D9, 0x0000003E, +0x000002D5, 0x000002D7, 0x0003003E, 0x000002D4, 0x000002D9, 0x0004003D, 0x00000006, 0x000002DC, +0x000002C7, 0x0003003E, 0x000002DB, 0x000002DC, 0x0004003D, 0x00000006, 0x000002DE, 0x000002CD, +0x0003003E, 0x000002DD, 0x000002DE, 0x0004003D, 0x00000007, 0x000002E0, 0x000002AE, 0x0003003E, +0x000002DF, 0x000002E0, 0x0004003D, 0x00000007, 0x000002E2, 0x000002AF, 0x0003003E, 0x000002E1, +0x000002E2, 0x0004003D, 0x00000007, 0x000002E4, 0x000002B0, 0x0003003E, 0x000002E3, 0x000002E4, +0x0004003D, 0x00000007, 0x000002E6, 0x000002B1, 0x0003003E, 0x000002E5, 0x000002E6, 0x0004003D, +0x00000007, 0x000002E8, 0x000002B2, 0x0003003E, 0x000002E7, 0x000002E8, 0x000B0039, 0x00000007, +0x000002E9, 0x00000048, 0x000002DB, 0x000002DD, 0x000002DF, 0x000002E1, 0x000002E3, 0x000002E5, +0x000002E7, 0x0003003E, 0x000002DA, 0x000002E9, 0x0003003E, 0x000002EB, 0x000000BA, 0x0004003D, +0x00000006, 0x000002ED, 0x000002C0, 0x0003003E, 0x000002EC, 0x000002ED, 0x0004003D, 0x00000007, +0x000002EF, 0x000002AE, 0x0003003E, 0x000002EE, 0x000002EF, 0x0004003D, 0x00000007, 0x000002F1, +0x000002AF, 0x0003003E, 0x000002F0, 0x000002F1, 0x0004003D, 0x00000007, 0x000002F3, 0x000002B0, +0x0003003E, 0x000002F2, 0x000002F3, 0x0004003D, 0x00000007, 0x000002F5, 0x000002B1, 0x0003003E, +0x000002F4, 0x000002F5, 0x0004003D, 0x00000007, 0x000002F7, 0x000002B2, 0x0003003E, 0x000002F6, +0x000002F7, 0x000B0039, 0x00000007, 0x000002F8, 0x00000048, 0x000002EB, 0x000002EC, 0x000002EE, +0x000002F0, 0x000002F2, 0x000002F4, 0x000002F6, 0x0003003E, 0x000002EA, 0x000002F8, 0x0004003D, +0x00000007, 0x000002FA, 0x000002D4, 0x0004003D, 0x00000007, 0x000002FB, 0x000002DA, 0x0004003D, +0x00000007, 0x000002FC, 0x000002EA, 0x00050088, 0x00000007, 0x000002FD, 0x000002FB, 0x000002FC, +0x00050085, 0x00000007, 0x000002FE, 0x000002FA, 0x000002FD, 0x0003003E, 0x000002F9, 0x000002FE, +0x0004003D, 0x00000007, 0x00000300, 0x000002F9, 0x0003003E, 0x000002FF, 0x00000300, 0x00050039, +0x00000007, 0x00000301, 0x0000002A, 0x000002FF, 0x000200FE, 0x00000301, 0x00010038, 0x00050036, +0x00000007, 0x00000050, 0x00000000, 0x0000001E, 0x000200F8, 0x00000051, 0x0004003B, 0x00000008, +0x00000304, 0x00000007, 0x0004003B, 0x0000000E, 0x00000308, 0x00000007, 0x0004003B, 0x00000010, +0x00000309, 0x00000007, 0x0004003B, 0x00000031, 0x0000030D, 0x00000007, 0x0004003B, 0x00000031, +0x00000314, 0x00000007, 0x0004003B, 0x00000031, 0x00000317, 0x00000007, 0x0004003B, 0x00000008, +0x0000031A, 0x00000007, 0x0004003B, 0x00000008, 0x00000329, 0x00000007, 0x0004003B, 0x00000008, +0x0000032C, 0x00000007, 0x0004003B, 0x00000008, 0x0000032D, 0x00000007, 0x0004003B, 0x00000008, +0x0000032F, 0x00000007, 0x0004003B, 0x00000031, 0x00000331, 0x00000007, 0x00050041, 0x00000113, +0x00000305, 0x00000112, 0x00000068, 0x0004003D, 0x0000005B, 0x00000306, 0x00000305, 0x0004007C, +0x0000000D, 0x00000307, 0x00000306, 0x0003003E, 0x00000308, 0x00000307, 0x0004003D, 0x0000000F, +0x0000030A, 0x00000118, 0x0003003E, 0x00000309, 0x0000030A, 0x00060039, 0x00000007, 0x0000030B, +0x00000014, 0x00000308, 0x00000309, 0x0006000C, 0x00000007, 0x0000030C, 0x00000001, 0x00000045, +0x0000030B, 0x0003003E, 0x00000304, 0x0000030C, 0x00060041, 0x00000311, 0x00000312, 0x00000310, +0x00000068, 0x0000005C, 0x0004003D, 0x00000006, 0x00000313, 0x00000312, 0x0003003E, 0x0000030D, +0x00000313, 0x00060041, 0x00000311, 0x00000315, 0x00000310, 0x00000068, 0x0000005F, 0x0004003D, +0x00000006, 0x00000316, 0x00000315, 0x0003003E, 0x00000314, 0x00000316, 0x00060041, 0x00000311, +0x00000318, 0x00000310, 0x00000068, 0x000000FD, 0x0004003D, 0x00000006, 0x00000319, 0x00000318, +0x0003003E, 0x00000317, 0x00000319, 0x0004003D, 0x00000006, 0x0000031B, 0x00000317, 0x0006000C, +0x00000006, 0x0000031C, 0x00000001, 0x0000000D, 0x0000031B, 0x0004003D, 0x00000006, 0x0000031D, +0x00000314, 0x0006000C, 0x00000006, 0x0000031E, 0x00000001, 0x0000000E, 0x0000031D, 0x00050085, +0x00000006, 0x0000031F, 0x0000031C, 0x0000031E, 0x0004003D, 0x00000006, 0x00000320, 0x00000317, +0x0006000C, 0x00000006, 0x00000321, 0x00000001, 0x0000000E, 0x00000320, 0x0004003D, 0x00000006, +0x00000322, 0x00000317, 0x0006000C, 0x00000006, 0x00000323, 0x00000001, 0x0000000D, 0x00000322, +0x0004003D, 0x00000006, 0x00000324, 0x00000314, 0x0006000C, 0x00000006, 0x00000325, 0x00000001, +0x0000000D, 0x00000324, 0x00050085, 0x00000006, 0x00000326, 0x00000323, 0x00000325, 0x00060050, +0x00000007, 0x00000327, 0x0000031F, 0x00000321, 0x00000326, 0x0006000C, 0x00000007, 0x00000328, +0x00000001, 0x00000045, 0x00000327, 0x0003003E, 0x0000031A, 0x00000328, 0x0004003D, 0x00000007, +0x0000032A, 0x00000304, 0x0004007F, 0x00000007, 0x0000032B, 0x0000032A, 0x0003003E, 0x00000329, +0x0000032B, 0x0004003D, 0x00000007, 0x0000032E, 0x0000031A, 0x0003003E, 0x0000032D, 0x0000032E, +0x0004003D, 0x00000007, 0x00000330, 0x00000329, 0x0003003E, 0x0000032F, 0x00000330, 0x0004003D, +0x00000006, 0x00000332, 0x0000030D, 0x0003003E, 0x00000331, 0x00000332, 0x00070039, 0x00000007, +0x00000333, 0x0000004E, 0x0000032D, 0x0000032F, 0x00000331, 0x0003003E, 0x0000032C, 0x00000333, +0x0004003D, 0x00000007, 0x00000334, 0x0000032C, 0x0005008E, 0x00000007, 0x00000336, 0x00000334, +0x00000335, 0x000200FE, 0x00000336, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthOfFieldfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthOfFieldfragspv.hpp index dad9bfd4d..021d7c0c8 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthOfFieldfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthOfFieldfragspv.hpp @@ -3,9 +3,9 @@ #include #include -constexpr uint32_t spirv_DepthOfFieldfragspv_size = 6284; -constexpr std::array spirv_DepthOfFieldfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x000000F2, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +constexpr uint32_t spirv_DepthOfFieldfragspv_size = 6316; +constexpr std::array spirv_DepthOfFieldfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x000000F4, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x000000DF, 0x000000EC, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, @@ -75,7 +75,8 @@ constexpr std::array spirv_DepthOfFieldfragspv = { 0x00040020, 0x000000C6, 0x00000007, 0x00000048, 0x0005002C, 0x00000014, 0x000000D0, 0x0000009F, 0x0000009F, 0x00040020, 0x000000DE, 0x00000001, 0x00000014, 0x0004003B, 0x000000DE, 0x000000DF, 0x00000001, 0x00040020, 0x000000EB, 0x00000003, 0x00000040, 0x0004003B, 0x000000EB, 0x000000EC, -0x00000003, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, +0x00000003, 0x0004002B, 0x00000006, 0x000000F2, 0x40C90FDB, 0x0004002B, 0x00000006, 0x000000F3, +0x3727C5AC, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x000000BF, 0x000000C0, 0x00000007, 0x0004003B, 0x00000015, 0x000000C5, 0x00000007, 0x0004003B, 0x00000007, 0x000000CE, 0x00000007, 0x0004003B, 0x00000007, 0x000000D3, 0x00000007, 0x0004003B, 0x00000007, 0x000000D6, 0x00000007, 0x0004003B, 0x00000007, 0x000000DA, 0x00000007, diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthPrePassfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthPrePassfragspv.hpp index 47690fb37..836243642 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthPrePassfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/DepthPrePassfragspv.hpp @@ -3,80 +3,90 @@ #include #include -constexpr uint32_t spirv_DepthPrePassfragspv_size = 2348; -constexpr std::array spirv_DepthPrePassfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000031, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_DepthPrePassfragspv_size = 2664; +constexpr std::array spirv_DepthPrePassfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000040, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0006000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000016, 0x00030010, 0x00000004, -0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, -0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, -0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, -0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, -0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, 0x00657669, -0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00040005, 0x00000008, 0x68706C61, 0x00000061, -0x00050005, 0x0000000C, 0x6C415F75, 0x6F646562, 0x0070614D, 0x00050005, 0x00000014, 0x74726556, -0x61447865, 0x00006174, 0x00050006, 0x00000014, 0x00000000, 0x6F6C6F43, 0x00007275, 0x00060006, -0x00000014, 0x00000001, 0x43786554, 0x64726F6F, 0x00000000, 0x00060006, 0x00000014, 0x00000002, -0x69736F50, 0x6E6F6974, 0x00000000, 0x00050006, 0x00000014, 0x00000003, 0x6D726F4E, 0x00006C61, -0x00050006, 0x00000014, 0x00000004, 0x676E6154, 0x00746E65, 0x00070006, 0x00000014, 0x00000005, -0x64616853, 0x614D776F, 0x6F6F4370, 0x00736472, 0x00060005, 0x00000016, 0x74726556, 0x754F7865, -0x74757074, 0x00000000, 0x00070005, 0x00000020, 0x66696E55, 0x4D6D726F, 0x72657461, 0x446C6169, -0x00617461, 0x00070006, 0x00000020, 0x00000000, 0x65626C41, 0x6F436F64, 0x72756F6C, 0x00000000, -0x00060006, 0x00000020, 0x00000001, 0x67756F52, 0x73656E68, 0x00000073, 0x00060006, 0x00000020, -0x00000002, 0x6174654D, 0x63696C6C, 0x00000000, 0x00060006, 0x00000020, 0x00000003, 0x73696D45, -0x65766973, 0x00000000, 0x00070006, 0x00000020, 0x00000004, 0x65626C41, 0x614D6F64, 0x63614670, -0x00726F74, 0x00080006, 0x00000020, 0x00000005, 0x6174654D, 0x63696C6C, 0x4670614D, 0x6F746361, -0x00000072, 0x00080006, 0x00000020, 0x00000006, 0x67756F52, 0x73656E68, 0x70614D73, 0x74636146, -0x0000726F, 0x00070006, 0x00000020, 0x00000007, 0x6D726F4E, 0x614D6C61, 0x63614670, 0x00726F74, -0x00060006, 0x00000020, 0x00000008, 0x614D4F41, 0x63614670, 0x00726F74, 0x00080006, 0x00000020, -0x00000009, 0x73696D45, 0x65766973, 0x4670614D, 0x6F746361, 0x00000072, 0x00060006, 0x00000020, -0x0000000A, 0x68706C41, 0x74754361, 0x0066664F, 0x00060006, 0x00000020, 0x0000000B, 0x6B726F77, -0x776F6C66, 0x00000000, 0x00050006, 0x00000020, 0x0000000C, 0x64646170, 0x00676E69, 0x00070005, -0x00000022, 0x6574616D, 0x6C616972, 0x706F7250, 0x69747265, 0x00007365, 0x00060005, 0x0000002C, -0x654D5F75, 0x6C6C6174, 0x614D6369, 0x00000070, 0x00060005, 0x0000002D, 0x6F525F75, 0x6E686775, -0x4D737365, 0x00007061, 0x00050005, 0x0000002E, 0x6F4E5F75, 0x6C616D72, 0x0070614D, 0x00040005, -0x0000002F, 0x4F415F75, 0x0070614D, 0x00060005, 0x00000030, 0x6D455F75, 0x69737369, 0x614D6576, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000014, 0x0000002C, 0x00030010, +0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, +0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, +0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, +0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, +0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00040005, 0x00000008, 0x68706C61, +0x00000061, 0x00050005, 0x0000000C, 0x6C415F75, 0x6F646562, 0x0070614D, 0x00050005, 0x00000012, +0x74726556, 0x61447865, 0x00006174, 0x00050006, 0x00000012, 0x00000000, 0x6F6C6F43, 0x00007275, +0x00060006, 0x00000012, 0x00000001, 0x43786554, 0x64726F6F, 0x00000000, 0x00060006, 0x00000012, +0x00000002, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00050006, 0x00000012, 0x00000003, 0x6D726F4E, +0x00006C61, 0x00060006, 0x00000012, 0x00000004, 0x6C726F57, 0x726F4E64, 0x006C616D, 0x00060005, +0x00000014, 0x74726556, 0x754F7865, 0x74757074, 0x00000000, 0x00070005, 0x0000001F, 0x66696E55, +0x4D6D726F, 0x72657461, 0x446C6169, 0x00617461, 0x00070006, 0x0000001F, 0x00000000, 0x65626C41, +0x6F436F64, 0x72756F6C, 0x00000000, 0x00060006, 0x0000001F, 0x00000001, 0x67756F52, 0x73656E68, +0x00000073, 0x00060006, 0x0000001F, 0x00000002, 0x6174654D, 0x63696C6C, 0x00000000, 0x00060006, +0x0000001F, 0x00000003, 0x73696D45, 0x65766973, 0x00000000, 0x00070006, 0x0000001F, 0x00000004, +0x65626C41, 0x614D6F64, 0x63614670, 0x00726F74, 0x00080006, 0x0000001F, 0x00000005, 0x6174654D, +0x63696C6C, 0x4670614D, 0x6F746361, 0x00000072, 0x00080006, 0x0000001F, 0x00000006, 0x67756F52, +0x73656E68, 0x70614D73, 0x74636146, 0x0000726F, 0x00070006, 0x0000001F, 0x00000007, 0x6D726F4E, +0x614D6C61, 0x63614670, 0x00726F74, 0x00060006, 0x0000001F, 0x00000008, 0x614D4F41, 0x63614670, +0x00726F74, 0x00080006, 0x0000001F, 0x00000009, 0x73696D45, 0x65766973, 0x4670614D, 0x6F746361, +0x00000072, 0x00060006, 0x0000001F, 0x0000000A, 0x68706C41, 0x74754361, 0x0066664F, 0x00060006, +0x0000001F, 0x0000000B, 0x6B726F77, 0x776F6C66, 0x00000000, 0x00050006, 0x0000001F, 0x0000000C, +0x64646170, 0x00676E69, 0x00070005, 0x00000021, 0x6574616D, 0x6C616972, 0x706F7250, 0x69747265, +0x00007365, 0x00050005, 0x0000002C, 0x4E74754F, 0x616D726F, 0x0000006C, 0x00060005, 0x0000003B, +0x654D5F75, 0x6C6C6174, 0x614D6369, 0x00000070, 0x00060005, 0x0000003C, 0x6F525F75, 0x6E686775, +0x4D737365, 0x00007061, 0x00050005, 0x0000003D, 0x6F4E5F75, 0x6C616D72, 0x0070614D, 0x00040005, +0x0000003E, 0x4F415F75, 0x0070614D, 0x00060005, 0x0000003F, 0x6D455F75, 0x69737369, 0x614D6576, 0x00000070, 0x00040047, 0x0000000C, 0x00000022, 0x00000001, 0x00040047, 0x0000000C, 0x00000021, -0x00000000, 0x00040047, 0x00000016, 0x0000001E, 0x00000000, 0x00050048, 0x00000020, 0x00000000, -0x00000023, 0x00000000, 0x00050048, 0x00000020, 0x00000001, 0x00000023, 0x00000010, 0x00050048, -0x00000020, 0x00000002, 0x00000023, 0x00000014, 0x00050048, 0x00000020, 0x00000003, 0x00000023, -0x00000018, 0x00050048, 0x00000020, 0x00000004, 0x00000023, 0x0000001C, 0x00050048, 0x00000020, -0x00000005, 0x00000023, 0x00000020, 0x00050048, 0x00000020, 0x00000006, 0x00000023, 0x00000024, -0x00050048, 0x00000020, 0x00000007, 0x00000023, 0x00000028, 0x00050048, 0x00000020, 0x00000008, -0x00000023, 0x0000002C, 0x00050048, 0x00000020, 0x00000009, 0x00000023, 0x00000030, 0x00050048, -0x00000020, 0x0000000A, 0x00000023, 0x00000034, 0x00050048, 0x00000020, 0x0000000B, 0x00000023, -0x00000038, 0x00050048, 0x00000020, 0x0000000C, 0x00000023, 0x0000003C, 0x00030047, 0x00000020, -0x00000002, 0x00040047, 0x00000022, 0x00000022, 0x00000001, 0x00040047, 0x00000022, 0x00000021, -0x00000006, 0x00040047, 0x0000002C, 0x00000022, 0x00000001, 0x00040047, 0x0000002C, 0x00000021, -0x00000001, 0x00040047, 0x0000002D, 0x00000022, 0x00000001, 0x00040047, 0x0000002D, 0x00000021, -0x00000002, 0x00040047, 0x0000002E, 0x00000022, 0x00000001, 0x00040047, 0x0000002E, 0x00000021, -0x00000003, 0x00040047, 0x0000002F, 0x00000022, 0x00000001, 0x00040047, 0x0000002F, 0x00000021, -0x00000004, 0x00040047, 0x00000030, 0x00000022, 0x00000001, 0x00040047, 0x00000030, 0x00000021, -0x00000005, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, -0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00090019, 0x00000009, 0x00000006, -0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x0000000A, -0x00000009, 0x00040020, 0x0000000B, 0x00000000, 0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, -0x00000000, 0x00040017, 0x0000000E, 0x00000006, 0x00000003, 0x00040017, 0x0000000F, 0x00000006, -0x00000002, 0x00040017, 0x00000010, 0x00000006, 0x00000004, 0x00040015, 0x00000011, 0x00000020, -0x00000000, 0x0004002B, 0x00000011, 0x00000012, 0x00000004, 0x0004001C, 0x00000013, 0x00000010, -0x00000012, 0x0008001E, 0x00000014, 0x0000000E, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000E, -0x00000013, 0x00040020, 0x00000015, 0x00000001, 0x00000014, 0x0004003B, 0x00000015, 0x00000016, -0x00000001, 0x00040015, 0x00000017, 0x00000020, 0x00000001, 0x0004002B, 0x00000017, 0x00000018, -0x00000001, 0x00040020, 0x00000019, 0x00000001, 0x0000000F, 0x0004002B, 0x00000011, 0x0000001D, -0x00000003, 0x000F001E, 0x00000020, 0x00000010, 0x00000006, 0x00000006, 0x00000006, 0x00000006, -0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, -0x00040020, 0x00000021, 0x00000002, 0x00000020, 0x0004003B, 0x00000021, 0x00000022, 0x00000002, -0x0004002B, 0x00000017, 0x00000023, 0x0000000A, 0x00040020, 0x00000024, 0x00000002, 0x00000006, -0x00020014, 0x00000027, 0x0004003B, 0x0000000B, 0x0000002C, 0x00000000, 0x0004003B, 0x0000000B, -0x0000002D, 0x00000000, 0x0004003B, 0x0000000B, 0x0000002E, 0x00000000, 0x0004003B, 0x0000000B, -0x0000002F, 0x00000000, 0x0004003B, 0x0000000B, 0x00000030, 0x00000000, 0x00050036, 0x00000002, -0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000007, 0x00000008, -0x00000007, 0x0004003D, 0x0000000A, 0x0000000D, 0x0000000C, 0x00050041, 0x00000019, 0x0000001A, -0x00000016, 0x00000018, 0x0004003D, 0x0000000F, 0x0000001B, 0x0000001A, 0x00050057, 0x00000010, -0x0000001C, 0x0000000D, 0x0000001B, 0x00050051, 0x00000006, 0x0000001E, 0x0000001C, 0x00000003, -0x0003003E, 0x00000008, 0x0000001E, 0x0004003D, 0x00000006, 0x0000001F, 0x00000008, 0x00050041, -0x00000024, 0x00000025, 0x00000022, 0x00000023, 0x0004003D, 0x00000006, 0x00000026, 0x00000025, -0x000500B8, 0x00000027, 0x00000028, 0x0000001F, 0x00000026, 0x000300F7, 0x0000002A, 0x00000000, -0x000400FA, 0x00000028, 0x00000029, 0x0000002A, 0x000200F8, 0x00000029, 0x000100FC, 0x000200F8, -0x0000002A, 0x000100FD, 0x00010038, +0x00000000, 0x00040047, 0x00000014, 0x0000001E, 0x00000000, 0x00050048, 0x0000001F, 0x00000000, +0x00000023, 0x00000000, 0x00050048, 0x0000001F, 0x00000001, 0x00000023, 0x00000010, 0x00050048, +0x0000001F, 0x00000002, 0x00000023, 0x00000014, 0x00050048, 0x0000001F, 0x00000003, 0x00000023, +0x00000018, 0x00050048, 0x0000001F, 0x00000004, 0x00000023, 0x0000001C, 0x00050048, 0x0000001F, +0x00000005, 0x00000023, 0x00000020, 0x00050048, 0x0000001F, 0x00000006, 0x00000023, 0x00000024, +0x00050048, 0x0000001F, 0x00000007, 0x00000023, 0x00000028, 0x00050048, 0x0000001F, 0x00000008, +0x00000023, 0x0000002C, 0x00050048, 0x0000001F, 0x00000009, 0x00000023, 0x00000030, 0x00050048, +0x0000001F, 0x0000000A, 0x00000023, 0x00000034, 0x00050048, 0x0000001F, 0x0000000B, 0x00000023, +0x00000038, 0x00050048, 0x0000001F, 0x0000000C, 0x00000023, 0x0000003C, 0x00030047, 0x0000001F, +0x00000002, 0x00040047, 0x00000021, 0x00000022, 0x00000001, 0x00040047, 0x00000021, 0x00000021, +0x00000006, 0x00040047, 0x0000002C, 0x0000001E, 0x00000000, 0x00040047, 0x0000003B, 0x00000022, +0x00000001, 0x00040047, 0x0000003B, 0x00000021, 0x00000001, 0x00040047, 0x0000003C, 0x00000022, +0x00000001, 0x00040047, 0x0000003C, 0x00000021, 0x00000002, 0x00040047, 0x0000003D, 0x00000022, +0x00000001, 0x00040047, 0x0000003D, 0x00000021, 0x00000003, 0x00040047, 0x0000003E, 0x00000022, +0x00000001, 0x00040047, 0x0000003E, 0x00000021, 0x00000004, 0x00040047, 0x0000003F, 0x00000022, +0x00000001, 0x00040047, 0x0000003F, 0x00000021, 0x00000005, 0x00020013, 0x00000002, 0x00030021, +0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, +0x00000006, 0x00090019, 0x00000009, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, +0x00000001, 0x00000000, 0x0003001B, 0x0000000A, 0x00000009, 0x00040020, 0x0000000B, 0x00000000, +0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, 0x00000000, 0x00040017, 0x0000000E, 0x00000006, +0x00000003, 0x00040017, 0x0000000F, 0x00000006, 0x00000002, 0x00040017, 0x00000010, 0x00000006, +0x00000004, 0x00040018, 0x00000011, 0x0000000E, 0x00000003, 0x0007001E, 0x00000012, 0x0000000E, +0x0000000F, 0x00000010, 0x0000000E, 0x00000011, 0x00040020, 0x00000013, 0x00000001, 0x00000012, +0x0004003B, 0x00000013, 0x00000014, 0x00000001, 0x00040015, 0x00000015, 0x00000020, 0x00000001, +0x0004002B, 0x00000015, 0x00000016, 0x00000001, 0x00040020, 0x00000017, 0x00000001, 0x0000000F, +0x00040015, 0x0000001B, 0x00000020, 0x00000000, 0x0004002B, 0x0000001B, 0x0000001C, 0x00000003, +0x000F001E, 0x0000001F, 0x00000010, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, +0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00040020, +0x00000020, 0x00000002, 0x0000001F, 0x0004003B, 0x00000020, 0x00000021, 0x00000002, 0x0004002B, +0x00000015, 0x00000022, 0x0000000A, 0x00040020, 0x00000023, 0x00000002, 0x00000006, 0x00020014, +0x00000026, 0x00040020, 0x0000002B, 0x00000003, 0x00000010, 0x0004003B, 0x0000002B, 0x0000002C, +0x00000003, 0x0004002B, 0x00000015, 0x0000002D, 0x00000003, 0x00040020, 0x0000002E, 0x00000001, +0x0000000E, 0x0004002B, 0x00000006, 0x00000031, 0x3F000000, 0x0004002B, 0x00000006, 0x00000036, +0x3F800000, 0x0004003B, 0x0000000B, 0x0000003B, 0x00000000, 0x0004003B, 0x0000000B, 0x0000003C, +0x00000000, 0x0004003B, 0x0000000B, 0x0000003D, 0x00000000, 0x0004003B, 0x0000000B, 0x0000003E, +0x00000000, 0x0004003B, 0x0000000B, 0x0000003F, 0x00000000, 0x00050036, 0x00000002, 0x00000004, +0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000007, 0x00000008, 0x00000007, +0x0004003D, 0x0000000A, 0x0000000D, 0x0000000C, 0x00050041, 0x00000017, 0x00000018, 0x00000014, +0x00000016, 0x0004003D, 0x0000000F, 0x00000019, 0x00000018, 0x00050057, 0x00000010, 0x0000001A, +0x0000000D, 0x00000019, 0x00050051, 0x00000006, 0x0000001D, 0x0000001A, 0x00000003, 0x0003003E, +0x00000008, 0x0000001D, 0x0004003D, 0x00000006, 0x0000001E, 0x00000008, 0x00050041, 0x00000023, +0x00000024, 0x00000021, 0x00000022, 0x0004003D, 0x00000006, 0x00000025, 0x00000024, 0x000500B8, +0x00000026, 0x00000027, 0x0000001E, 0x00000025, 0x000300F7, 0x00000029, 0x00000000, 0x000400FA, +0x00000027, 0x00000028, 0x00000029, 0x000200F8, 0x00000028, 0x000100FC, 0x000200F8, 0x00000029, +0x00050041, 0x0000002E, 0x0000002F, 0x00000014, 0x0000002D, 0x0004003D, 0x0000000E, 0x00000030, +0x0000002F, 0x0005008E, 0x0000000E, 0x00000032, 0x00000030, 0x00000031, 0x00060050, 0x0000000E, +0x00000033, 0x00000031, 0x00000031, 0x00000031, 0x00050081, 0x0000000E, 0x00000034, 0x00000032, +0x00000033, 0x0006000C, 0x0000000E, 0x00000035, 0x00000001, 0x00000045, 0x00000034, 0x00050051, +0x00000006, 0x00000037, 0x00000035, 0x00000000, 0x00050051, 0x00000006, 0x00000038, 0x00000035, +0x00000001, 0x00050051, 0x00000006, 0x00000039, 0x00000035, 0x00000002, 0x00070050, 0x00000010, +0x0000003A, 0x00000037, 0x00000038, 0x00000039, 0x00000036, 0x0003003E, 0x0000002C, 0x0000003A, +0x000100FD, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentIrradiancefragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentIrradiancefragspv.hpp new file mode 100644 index 000000000..49408ebfe --- /dev/null +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentIrradiancefragspv.hpp @@ -0,0 +1,250 @@ +// Header generated by Lumos Editor + +#include +#include + +constexpr uint32_t spirv_EnvironmentIrradiancefragspv_size = 7740; +constexpr std::array spirv_EnvironmentIrradiancefragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000159, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000102, 0x00000151, 0x00030010, +0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, +0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, +0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, +0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, +0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00090005, 0x0000000F, 0x43746547, +0x4D656275, 0x65547061, 0x6F6F4378, 0x69286472, 0x66763B31, 0x00003B32, 0x00040005, 0x0000000D, +0x65636166, 0x00000000, 0x00050005, 0x0000000E, 0x5474756F, 0x6F437865, 0x0064726F, 0x00080005, +0x00000015, 0x69646152, 0x496C6163, 0x7265766E, 0x565F6573, 0x75284364, 0x00003B31, 0x00040005, +0x00000014, 0x73746962, 0x00000000, 0x000B0005, 0x0000001C, 0x706D6F43, 0x42657475, 0x73697361, +0x74636556, 0x2873726F, 0x3B336676, 0x3B336676, 0x3B336676, 0x00000000, 0x00030005, 0x00000019, +0x0000004E, 0x00030005, 0x0000001A, 0x00000053, 0x00030005, 0x0000001B, 0x00000054, 0x00080005, +0x00000021, 0x706D6153, 0x6148656C, 0x72656D6D, 0x79656C73, 0x3B317528, 0x003B3175, 0x00030005, +0x0000001F, 0x00000069, 0x00040005, 0x00000020, 0x706D6173, 0x0073656C, 0x00080005, 0x00000027, +0x706D6153, 0x6548656C, 0x7073696D, 0x65726568, 0x3B316628, 0x003B3166, 0x00030005, 0x00000025, +0x00003175, 0x00030005, 0x00000026, 0x00003275, 0x000A0005, 0x0000002E, 0x676E6154, 0x54746E65, +0x726F576F, 0x7628646C, 0x763B3366, 0x763B3366, 0x763B3366, 0x003B3366, 0x00030005, 0x0000002A, +0x00000076, 0x00030005, 0x0000002B, 0x0000004E, 0x00030005, 0x0000002C, 0x00000053, 0x00030005, +0x0000002D, 0x00000054, 0x00030005, 0x00000030, 0x00007675, 0x00050005, 0x000000CB, 0x53766E69, +0x6C706D61, 0x00007365, 0x00040005, 0x000000D3, 0x61726170, 0x0000006D, 0x00030005, 0x000000D9, +0x00703175, 0x00030005, 0x000000F9, 0x0000004E, 0x00050005, 0x000000FA, 0x68737550, 0x736E6F43, +0x00007374, 0x00070006, 0x000000FA, 0x00000000, 0x65627563, 0x65636146, 0x65646E49, 0x00000078, +0x00050005, 0x000000FC, 0x68737570, 0x736E6F43, 0x00007374, 0x00050005, 0x00000102, 0x5474756F, +0x6F437865, 0x0064726F, 0x00040005, 0x00000103, 0x61726170, 0x0000006D, 0x00040005, 0x00000104, +0x61726170, 0x0000006D, 0x00030005, 0x00000109, 0x00000053, 0x00030005, 0x0000010A, 0x00000054, +0x00040005, 0x0000010B, 0x61726170, 0x0000006D, 0x00040005, 0x0000010C, 0x61726170, 0x0000006D, +0x00040005, 0x00000110, 0x706D6173, 0x0073656C, 0x00060005, 0x00000112, 0x66696E55, 0x426D726F, +0x65666675, 0x00000072, 0x00050006, 0x00000112, 0x00000000, 0x706D6153, 0x0073656C, 0x00030005, +0x00000114, 0x006F6275, 0x00050005, 0x00000119, 0x61727269, 0x6E616964, 0x00006563, 0x00030005, +0x0000011B, 0x00000069, 0x00030005, 0x00000124, 0x00000075, 0x00040005, 0x00000125, 0x61726170, +0x0000006D, 0x00040005, 0x00000127, 0x61726170, 0x0000006D, 0x00030005, 0x0000012A, 0x0000694C, +0x00040005, 0x0000012B, 0x61726170, 0x0000006D, 0x00040005, 0x0000012E, 0x61726170, 0x0000006D, +0x00050005, 0x00000136, 0x54736F63, 0x61746568, 0x00000000, 0x00050005, 0x0000013E, 0x65545F75, +0x72757478, 0x00000065, 0x00040005, 0x00000151, 0x4674756F, 0x00676172, 0x00050048, 0x000000FA, +0x00000000, 0x00000023, 0x00000000, 0x00030047, 0x000000FA, 0x00000002, 0x00040047, 0x00000102, +0x0000001E, 0x00000000, 0x00050048, 0x00000112, 0x00000000, 0x00000023, 0x00000000, 0x00030047, +0x00000112, 0x00000002, 0x00040047, 0x00000114, 0x00000022, 0x00000000, 0x00040047, 0x00000114, +0x00000021, 0x00000001, 0x00040047, 0x0000013E, 0x00000022, 0x00000000, 0x00040047, 0x0000013E, +0x00000021, 0x00000000, 0x00040047, 0x00000151, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, +0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, 0x00000001, 0x00040020, +0x00000007, 0x00000007, 0x00000006, 0x00030016, 0x00000008, 0x00000020, 0x00040017, 0x00000009, +0x00000008, 0x00000002, 0x00040020, 0x0000000A, 0x00000007, 0x00000009, 0x00040017, 0x0000000B, +0x00000008, 0x00000003, 0x00050021, 0x0000000C, 0x0000000B, 0x00000007, 0x0000000A, 0x00040015, +0x00000011, 0x00000020, 0x00000000, 0x00040020, 0x00000012, 0x00000007, 0x00000011, 0x00040021, +0x00000013, 0x00000008, 0x00000012, 0x00040020, 0x00000017, 0x00000007, 0x0000000B, 0x00060021, +0x00000018, 0x00000002, 0x0000000B, 0x00000017, 0x00000017, 0x00050021, 0x0000001E, 0x00000009, +0x00000012, 0x00000012, 0x00040020, 0x00000023, 0x00000007, 0x00000008, 0x00050021, 0x00000024, +0x0000000B, 0x00000023, 0x00000023, 0x00070021, 0x00000029, 0x0000000B, 0x0000000B, 0x0000000B, +0x0000000B, 0x0000000B, 0x0004002B, 0x00000008, 0x00000032, 0x40000000, 0x0004002B, 0x00000011, +0x00000033, 0x00000000, 0x0004002B, 0x00000011, 0x00000036, 0x00000001, 0x0004002B, 0x00000008, +0x0000003B, 0x3F800000, 0x0005002C, 0x00000009, 0x0000003C, 0x0000003B, 0x0000003B, 0x0004002B, +0x00000006, 0x0000003F, 0x00000000, 0x00020014, 0x00000040, 0x0004002B, 0x00000006, 0x0000004D, +0x00000001, 0x0004002B, 0x00000008, 0x00000051, 0xBF800000, 0x0004002B, 0x00000006, 0x0000005A, +0x00000002, 0x0004002B, 0x00000006, 0x00000066, 0x00000003, 0x0004002B, 0x00000006, 0x00000073, +0x00000004, 0x0004002B, 0x00000011, 0x00000087, 0x00000010, 0x0004002B, 0x00000011, 0x0000008D, +0x55555555, 0x0004002B, 0x00000011, 0x00000091, 0xAAAAAAAA, 0x0004002B, 0x00000011, 0x00000096, +0x33333333, 0x0004002B, 0x00000011, 0x00000098, 0x00000002, 0x0004002B, 0x00000011, 0x0000009B, +0xCCCCCCCC, 0x0004002B, 0x00000011, 0x000000A0, 0x0F0F0F0F, 0x0004002B, 0x00000011, 0x000000A2, +0x00000004, 0x0004002B, 0x00000011, 0x000000A5, 0xF0F0F0F0, 0x0004002B, 0x00000011, 0x000000AA, +0x00FF00FF, 0x0004002B, 0x00000011, 0x000000AC, 0x00000008, 0x0004002B, 0x00000011, 0x000000AF, +0xFF00FF00, 0x0004002B, 0x00000008, 0x000000B5, 0x2F800000, 0x0004002B, 0x00000008, 0x000000B9, +0x00000000, 0x0006002C, 0x0000000B, 0x000000BA, 0x000000B9, 0x0000003B, 0x000000B9, 0x0006002C, +0x0000000B, 0x000000BC, 0x0000003B, 0x000000B9, 0x000000B9, 0x0004002B, 0x00000008, 0x000000BF, +0x3727C5AC, 0x0004002B, 0x00000008, 0x000000E0, 0x40C90FDB, 0x0003001E, 0x000000FA, 0x00000011, +0x00040020, 0x000000FB, 0x00000009, 0x000000FA, 0x0004003B, 0x000000FB, 0x000000FC, 0x00000009, +0x00040020, 0x000000FD, 0x00000009, 0x00000011, 0x00040020, 0x00000101, 0x00000001, 0x00000009, +0x0004003B, 0x00000101, 0x00000102, 0x00000001, 0x0004002B, 0x00000011, 0x00000111, 0x00000040, +0x0003001E, 0x00000112, 0x00000011, 0x00040020, 0x00000113, 0x00000002, 0x00000112, 0x0004003B, +0x00000113, 0x00000114, 0x00000002, 0x00040020, 0x00000115, 0x00000002, 0x00000011, 0x0006002C, +0x0000000B, 0x0000011A, 0x000000B9, 0x000000B9, 0x000000B9, 0x00090019, 0x0000013B, 0x00000008, +0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x0000013C, +0x0000013B, 0x00040020, 0x0000013D, 0x00000000, 0x0000013C, 0x0004003B, 0x0000013D, 0x0000013E, +0x00000000, 0x00040017, 0x00000141, 0x00000008, 0x00000004, 0x00040020, 0x00000150, 0x00000003, +0x00000141, 0x0004003B, 0x00000150, 0x00000151, 0x00000003, 0x0004002B, 0x00000011, 0x00000157, +0x00000400, 0x0004002B, 0x00000008, 0x00000158, 0x3A800000, 0x00050036, 0x00000002, 0x00000004, +0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000017, 0x000000F9, 0x00000007, +0x0004003B, 0x00000007, 0x00000103, 0x00000007, 0x0004003B, 0x0000000A, 0x00000104, 0x00000007, +0x0004003B, 0x00000017, 0x00000109, 0x00000007, 0x0004003B, 0x00000017, 0x0000010A, 0x00000007, +0x0004003B, 0x00000017, 0x0000010B, 0x00000007, 0x0004003B, 0x00000017, 0x0000010C, 0x00000007, +0x0004003B, 0x00000012, 0x00000110, 0x00000007, 0x0004003B, 0x00000017, 0x00000119, 0x00000007, +0x0004003B, 0x00000012, 0x0000011B, 0x00000007, 0x0004003B, 0x0000000A, 0x00000124, 0x00000007, +0x0004003B, 0x00000012, 0x00000125, 0x00000007, 0x0004003B, 0x00000012, 0x00000127, 0x00000007, +0x0004003B, 0x00000017, 0x0000012A, 0x00000007, 0x0004003B, 0x00000023, 0x0000012B, 0x00000007, +0x0004003B, 0x00000023, 0x0000012E, 0x00000007, 0x0004003B, 0x00000023, 0x00000136, 0x00000007, +0x00050041, 0x000000FD, 0x000000FE, 0x000000FC, 0x0000003F, 0x0004003D, 0x00000011, 0x000000FF, +0x000000FE, 0x0004007C, 0x00000006, 0x00000100, 0x000000FF, 0x0003003E, 0x00000103, 0x00000100, +0x0004003D, 0x00000009, 0x00000105, 0x00000102, 0x0003003E, 0x00000104, 0x00000105, 0x00060039, +0x0000000B, 0x00000106, 0x0000000F, 0x00000103, 0x00000104, 0x0006000C, 0x0000000B, 0x00000107, +0x00000001, 0x00000045, 0x00000106, 0x0003003E, 0x000000F9, 0x00000107, 0x0004003D, 0x0000000B, +0x00000108, 0x000000F9, 0x00070039, 0x00000002, 0x0000010D, 0x0000001C, 0x00000108, 0x0000010B, +0x0000010C, 0x0004003D, 0x0000000B, 0x0000010E, 0x0000010B, 0x0003003E, 0x00000109, 0x0000010E, +0x0004003D, 0x0000000B, 0x0000010F, 0x0000010C, 0x0003003E, 0x0000010A, 0x0000010F, 0x00050041, +0x00000115, 0x00000116, 0x00000114, 0x0000003F, 0x0004003D, 0x00000011, 0x00000117, 0x00000116, +0x00050084, 0x00000011, 0x00000118, 0x00000111, 0x00000117, 0x0003003E, 0x00000110, 0x00000118, +0x0003003E, 0x00000119, 0x0000011A, 0x0003003E, 0x0000011B, 0x00000033, 0x000200F9, 0x0000011C, +0x000200F8, 0x0000011C, 0x000400F6, 0x0000011E, 0x0000011F, 0x00000000, 0x000200F9, 0x00000120, +0x000200F8, 0x00000120, 0x0004003D, 0x00000011, 0x00000121, 0x0000011B, 0x0004003D, 0x00000011, +0x00000122, 0x00000110, 0x000500B0, 0x00000040, 0x00000123, 0x00000121, 0x00000122, 0x000400FA, +0x00000123, 0x0000011D, 0x0000011E, 0x000200F8, 0x0000011D, 0x0004003D, 0x00000011, 0x00000126, +0x0000011B, 0x0003003E, 0x00000125, 0x00000126, 0x0004003D, 0x00000011, 0x00000128, 0x00000110, +0x0003003E, 0x00000127, 0x00000128, 0x00060039, 0x00000009, 0x00000129, 0x00000021, 0x00000125, +0x00000127, 0x0003003E, 0x00000124, 0x00000129, 0x00050041, 0x00000023, 0x0000012C, 0x00000124, +0x00000033, 0x0004003D, 0x00000008, 0x0000012D, 0x0000012C, 0x0003003E, 0x0000012B, 0x0000012D, +0x00050041, 0x00000023, 0x0000012F, 0x00000124, 0x00000036, 0x0004003D, 0x00000008, 0x00000130, +0x0000012F, 0x0003003E, 0x0000012E, 0x00000130, 0x00060039, 0x0000000B, 0x00000131, 0x00000027, +0x0000012B, 0x0000012E, 0x0004003D, 0x0000000B, 0x00000132, 0x000000F9, 0x0004003D, 0x0000000B, +0x00000133, 0x00000109, 0x0004003D, 0x0000000B, 0x00000134, 0x0000010A, 0x00080039, 0x0000000B, +0x00000135, 0x0000002E, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x0003003E, 0x0000012A, +0x00000135, 0x0004003D, 0x0000000B, 0x00000137, 0x0000012A, 0x0004003D, 0x0000000B, 0x00000138, +0x000000F9, 0x00050094, 0x00000008, 0x00000139, 0x00000137, 0x00000138, 0x0007000C, 0x00000008, +0x0000013A, 0x00000001, 0x00000028, 0x000000B9, 0x00000139, 0x0003003E, 0x00000136, 0x0000013A, +0x0004003D, 0x0000013C, 0x0000013F, 0x0000013E, 0x0004003D, 0x0000000B, 0x00000140, 0x0000012A, +0x00070058, 0x00000141, 0x00000142, 0x0000013F, 0x00000140, 0x00000002, 0x000000B9, 0x0008004F, +0x0000000B, 0x00000143, 0x00000142, 0x00000142, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, +0x0000000B, 0x00000144, 0x00000143, 0x00000032, 0x0004003D, 0x00000008, 0x00000145, 0x00000136, +0x0005008E, 0x0000000B, 0x00000146, 0x00000144, 0x00000145, 0x0004003D, 0x0000000B, 0x00000147, +0x00000119, 0x00050081, 0x0000000B, 0x00000148, 0x00000147, 0x00000146, 0x0003003E, 0x00000119, +0x00000148, 0x000200F9, 0x0000011F, 0x000200F8, 0x0000011F, 0x0004003D, 0x00000011, 0x00000149, +0x0000011B, 0x00050080, 0x00000011, 0x0000014A, 0x00000149, 0x0000004D, 0x0003003E, 0x0000011B, +0x0000014A, 0x000200F9, 0x0000011C, 0x000200F8, 0x0000011E, 0x0004003D, 0x00000011, 0x0000014B, +0x00000110, 0x00040070, 0x00000008, 0x0000014C, 0x0000014B, 0x00060050, 0x0000000B, 0x0000014D, +0x0000014C, 0x0000014C, 0x0000014C, 0x0004003D, 0x0000000B, 0x0000014E, 0x00000119, 0x00050088, +0x0000000B, 0x0000014F, 0x0000014E, 0x0000014D, 0x0003003E, 0x00000119, 0x0000014F, 0x0004003D, +0x0000000B, 0x00000152, 0x00000119, 0x00050051, 0x00000008, 0x00000153, 0x00000152, 0x00000000, +0x00050051, 0x00000008, 0x00000154, 0x00000152, 0x00000001, 0x00050051, 0x00000008, 0x00000155, +0x00000152, 0x00000002, 0x00070050, 0x00000141, 0x00000156, 0x00000153, 0x00000154, 0x00000155, +0x0000003B, 0x0003003E, 0x00000151, 0x00000156, 0x000100FD, 0x00010038, 0x00050036, 0x0000000B, +0x0000000F, 0x00000000, 0x0000000C, 0x00030037, 0x00000007, 0x0000000D, 0x00030037, 0x0000000A, +0x0000000E, 0x000200F8, 0x00000010, 0x0004003B, 0x0000000A, 0x00000030, 0x00000007, 0x0004003D, +0x00000009, 0x00000031, 0x0000000E, 0x0003003E, 0x00000030, 0x00000031, 0x00050041, 0x00000023, +0x00000034, 0x00000030, 0x00000033, 0x0004003D, 0x00000008, 0x00000035, 0x00000034, 0x00050041, +0x00000023, 0x00000037, 0x00000030, 0x00000036, 0x0004003D, 0x00000008, 0x00000038, 0x00000037, +0x00050050, 0x00000009, 0x00000039, 0x00000035, 0x00000038, 0x0005008E, 0x00000009, 0x0000003A, +0x00000039, 0x00000032, 0x00050083, 0x00000009, 0x0000003D, 0x0000003A, 0x0000003C, 0x0003003E, +0x00000030, 0x0000003D, 0x0004003D, 0x00000006, 0x0000003E, 0x0000000D, 0x000500AA, 0x00000040, +0x00000041, 0x0000003E, 0x0000003F, 0x000300F7, 0x00000043, 0x00000000, 0x000400FA, 0x00000041, +0x00000042, 0x0000004B, 0x000200F8, 0x00000042, 0x00050041, 0x00000023, 0x00000044, 0x00000030, +0x00000036, 0x0004003D, 0x00000008, 0x00000045, 0x00000044, 0x00050041, 0x00000023, 0x00000046, +0x00000030, 0x00000033, 0x0004003D, 0x00000008, 0x00000047, 0x00000046, 0x0004007F, 0x00000008, +0x00000048, 0x00000047, 0x00060050, 0x0000000B, 0x00000049, 0x0000003B, 0x00000045, 0x00000048, +0x000200FE, 0x00000049, 0x000200F8, 0x0000004B, 0x0004003D, 0x00000006, 0x0000004C, 0x0000000D, +0x000500AA, 0x00000040, 0x0000004E, 0x0000004C, 0x0000004D, 0x000300F7, 0x00000050, 0x00000000, +0x000400FA, 0x0000004E, 0x0000004F, 0x00000058, 0x000200F8, 0x0000004F, 0x00050041, 0x00000023, +0x00000052, 0x00000030, 0x00000036, 0x0004003D, 0x00000008, 0x00000053, 0x00000052, 0x00050041, +0x00000023, 0x00000054, 0x00000030, 0x00000033, 0x0004003D, 0x00000008, 0x00000055, 0x00000054, +0x00060050, 0x0000000B, 0x00000056, 0x00000051, 0x00000053, 0x00000055, 0x000200FE, 0x00000056, +0x000200F8, 0x00000058, 0x0004003D, 0x00000006, 0x00000059, 0x0000000D, 0x000500AA, 0x00000040, +0x0000005B, 0x00000059, 0x0000005A, 0x000300F7, 0x0000005D, 0x00000000, 0x000400FA, 0x0000005B, +0x0000005C, 0x00000064, 0x000200F8, 0x0000005C, 0x00050041, 0x00000023, 0x0000005E, 0x00000030, +0x00000033, 0x0004003D, 0x00000008, 0x0000005F, 0x0000005E, 0x00050041, 0x00000023, 0x00000060, +0x00000030, 0x00000036, 0x0004003D, 0x00000008, 0x00000061, 0x00000060, 0x00060050, 0x0000000B, +0x00000062, 0x0000005F, 0x00000051, 0x00000061, 0x000200FE, 0x00000062, 0x000200F8, 0x00000064, +0x0004003D, 0x00000006, 0x00000065, 0x0000000D, 0x000500AA, 0x00000040, 0x00000067, 0x00000065, +0x00000066, 0x000300F7, 0x00000069, 0x00000000, 0x000400FA, 0x00000067, 0x00000068, 0x00000071, +0x000200F8, 0x00000068, 0x00050041, 0x00000023, 0x0000006A, 0x00000030, 0x00000033, 0x0004003D, +0x00000008, 0x0000006B, 0x0000006A, 0x00050041, 0x00000023, 0x0000006C, 0x00000030, 0x00000036, +0x0004003D, 0x00000008, 0x0000006D, 0x0000006C, 0x0004007F, 0x00000008, 0x0000006E, 0x0000006D, +0x00060050, 0x0000000B, 0x0000006F, 0x0000006B, 0x0000003B, 0x0000006E, 0x000200FE, 0x0000006F, +0x000200F8, 0x00000071, 0x0004003D, 0x00000006, 0x00000072, 0x0000000D, 0x000500AA, 0x00000040, +0x00000074, 0x00000072, 0x00000073, 0x000300F7, 0x00000076, 0x00000000, 0x000400FA, 0x00000074, +0x00000075, 0x0000007D, 0x000200F8, 0x00000075, 0x00050041, 0x00000023, 0x00000077, 0x00000030, +0x00000033, 0x0004003D, 0x00000008, 0x00000078, 0x00000077, 0x00050041, 0x00000023, 0x00000079, +0x00000030, 0x00000036, 0x0004003D, 0x00000008, 0x0000007A, 0x00000079, 0x00060050, 0x0000000B, +0x0000007B, 0x00000078, 0x0000007A, 0x0000003B, 0x000200FE, 0x0000007B, 0x000200F8, 0x0000007D, +0x00050041, 0x00000023, 0x0000007E, 0x00000030, 0x00000033, 0x0004003D, 0x00000008, 0x0000007F, +0x0000007E, 0x0004007F, 0x00000008, 0x00000080, 0x0000007F, 0x00050041, 0x00000023, 0x00000081, +0x00000030, 0x00000036, 0x0004003D, 0x00000008, 0x00000082, 0x00000081, 0x00060050, 0x0000000B, +0x00000083, 0x00000080, 0x00000082, 0x00000051, 0x000200FE, 0x00000083, 0x000200F8, 0x00000076, +0x000100FF, 0x000200F8, 0x00000069, 0x000100FF, 0x000200F8, 0x0000005D, 0x000100FF, 0x000200F8, +0x00000050, 0x000100FF, 0x000200F8, 0x00000043, 0x000100FF, 0x00010038, 0x00050036, 0x00000008, +0x00000015, 0x00000000, 0x00000013, 0x00030037, 0x00000012, 0x00000014, 0x000200F8, 0x00000016, +0x0004003D, 0x00000011, 0x00000086, 0x00000014, 0x000500C4, 0x00000011, 0x00000088, 0x00000086, +0x00000087, 0x0004003D, 0x00000011, 0x00000089, 0x00000014, 0x000500C2, 0x00000011, 0x0000008A, +0x00000089, 0x00000087, 0x000500C5, 0x00000011, 0x0000008B, 0x00000088, 0x0000008A, 0x0003003E, +0x00000014, 0x0000008B, 0x0004003D, 0x00000011, 0x0000008C, 0x00000014, 0x000500C7, 0x00000011, +0x0000008E, 0x0000008C, 0x0000008D, 0x000500C4, 0x00000011, 0x0000008F, 0x0000008E, 0x00000036, +0x0004003D, 0x00000011, 0x00000090, 0x00000014, 0x000500C7, 0x00000011, 0x00000092, 0x00000090, +0x00000091, 0x000500C2, 0x00000011, 0x00000093, 0x00000092, 0x00000036, 0x000500C5, 0x00000011, +0x00000094, 0x0000008F, 0x00000093, 0x0003003E, 0x00000014, 0x00000094, 0x0004003D, 0x00000011, +0x00000095, 0x00000014, 0x000500C7, 0x00000011, 0x00000097, 0x00000095, 0x00000096, 0x000500C4, +0x00000011, 0x00000099, 0x00000097, 0x00000098, 0x0004003D, 0x00000011, 0x0000009A, 0x00000014, +0x000500C7, 0x00000011, 0x0000009C, 0x0000009A, 0x0000009B, 0x000500C2, 0x00000011, 0x0000009D, +0x0000009C, 0x00000098, 0x000500C5, 0x00000011, 0x0000009E, 0x00000099, 0x0000009D, 0x0003003E, +0x00000014, 0x0000009E, 0x0004003D, 0x00000011, 0x0000009F, 0x00000014, 0x000500C7, 0x00000011, +0x000000A1, 0x0000009F, 0x000000A0, 0x000500C4, 0x00000011, 0x000000A3, 0x000000A1, 0x000000A2, +0x0004003D, 0x00000011, 0x000000A4, 0x00000014, 0x000500C7, 0x00000011, 0x000000A6, 0x000000A4, +0x000000A5, 0x000500C2, 0x00000011, 0x000000A7, 0x000000A6, 0x000000A2, 0x000500C5, 0x00000011, +0x000000A8, 0x000000A3, 0x000000A7, 0x0003003E, 0x00000014, 0x000000A8, 0x0004003D, 0x00000011, +0x000000A9, 0x00000014, 0x000500C7, 0x00000011, 0x000000AB, 0x000000A9, 0x000000AA, 0x000500C4, +0x00000011, 0x000000AD, 0x000000AB, 0x000000AC, 0x0004003D, 0x00000011, 0x000000AE, 0x00000014, +0x000500C7, 0x00000011, 0x000000B0, 0x000000AE, 0x000000AF, 0x000500C2, 0x00000011, 0x000000B1, +0x000000B0, 0x000000AC, 0x000500C5, 0x00000011, 0x000000B2, 0x000000AD, 0x000000B1, 0x0003003E, +0x00000014, 0x000000B2, 0x0004003D, 0x00000011, 0x000000B3, 0x00000014, 0x00040070, 0x00000008, +0x000000B4, 0x000000B3, 0x00050085, 0x00000008, 0x000000B6, 0x000000B4, 0x000000B5, 0x000200FE, +0x000000B6, 0x00010038, 0x00050036, 0x00000002, 0x0000001C, 0x00000000, 0x00000018, 0x00030037, +0x0000000B, 0x00000019, 0x00030037, 0x00000017, 0x0000001A, 0x00030037, 0x00000017, 0x0000001B, +0x000200F8, 0x0000001D, 0x0007000C, 0x0000000B, 0x000000BB, 0x00000001, 0x00000044, 0x00000019, +0x000000BA, 0x0003003E, 0x0000001B, 0x000000BB, 0x0007000C, 0x0000000B, 0x000000BD, 0x00000001, +0x00000044, 0x00000019, 0x000000BC, 0x0004003D, 0x0000000B, 0x000000BE, 0x0000001B, 0x0004003D, +0x0000000B, 0x000000C0, 0x0000001B, 0x0004003D, 0x0000000B, 0x000000C1, 0x0000001B, 0x00050094, +0x00000008, 0x000000C2, 0x000000C0, 0x000000C1, 0x0007000C, 0x00000008, 0x000000C3, 0x00000001, +0x00000030, 0x000000BF, 0x000000C2, 0x00060050, 0x0000000B, 0x000000C4, 0x000000C3, 0x000000C3, +0x000000C3, 0x0008000C, 0x0000000B, 0x000000C5, 0x00000001, 0x0000002E, 0x000000BD, 0x000000BE, +0x000000C4, 0x0003003E, 0x0000001B, 0x000000C5, 0x0004003D, 0x0000000B, 0x000000C6, 0x0000001B, +0x0006000C, 0x0000000B, 0x000000C7, 0x00000001, 0x00000045, 0x000000C6, 0x0003003E, 0x0000001B, +0x000000C7, 0x0004003D, 0x0000000B, 0x000000C8, 0x0000001B, 0x0007000C, 0x0000000B, 0x000000C9, +0x00000001, 0x00000044, 0x00000019, 0x000000C8, 0x0006000C, 0x0000000B, 0x000000CA, 0x00000001, +0x00000045, 0x000000C9, 0x0003003E, 0x0000001A, 0x000000CA, 0x000100FD, 0x00010038, 0x00050036, +0x00000009, 0x00000021, 0x00000000, 0x0000001E, 0x00030037, 0x00000012, 0x0000001F, 0x00030037, +0x00000012, 0x00000020, 0x000200F8, 0x00000022, 0x0004003B, 0x00000023, 0x000000CB, 0x00000007, +0x0004003B, 0x00000012, 0x000000D3, 0x00000007, 0x0004003D, 0x00000011, 0x000000CC, 0x00000020, +0x00040070, 0x00000008, 0x000000CD, 0x000000CC, 0x00050088, 0x00000008, 0x000000CE, 0x0000003B, +0x000000CD, 0x0003003E, 0x000000CB, 0x000000CE, 0x0004003D, 0x00000011, 0x000000CF, 0x0000001F, +0x00040070, 0x00000008, 0x000000D0, 0x000000CF, 0x0004003D, 0x00000008, 0x000000D1, 0x000000CB, +0x00050085, 0x00000008, 0x000000D2, 0x000000D0, 0x000000D1, 0x0004003D, 0x00000011, 0x000000D4, +0x0000001F, 0x0003003E, 0x000000D3, 0x000000D4, 0x00050039, 0x00000008, 0x000000D5, 0x00000015, +0x000000D3, 0x00050050, 0x00000009, 0x000000D6, 0x000000D2, 0x000000D5, 0x000200FE, 0x000000D6, +0x00010038, 0x00050036, 0x0000000B, 0x00000027, 0x00000000, 0x00000024, 0x00030037, 0x00000023, +0x00000025, 0x00030037, 0x00000023, 0x00000026, 0x000200F8, 0x00000028, 0x0004003B, 0x00000023, +0x000000D9, 0x00000007, 0x0004003D, 0x00000008, 0x000000DA, 0x00000025, 0x0004003D, 0x00000008, +0x000000DB, 0x00000025, 0x00050085, 0x00000008, 0x000000DC, 0x000000DA, 0x000000DB, 0x00050083, +0x00000008, 0x000000DD, 0x0000003B, 0x000000DC, 0x0007000C, 0x00000008, 0x000000DE, 0x00000001, +0x00000028, 0x000000B9, 0x000000DD, 0x0006000C, 0x00000008, 0x000000DF, 0x00000001, 0x0000001F, +0x000000DE, 0x0003003E, 0x000000D9, 0x000000DF, 0x0004003D, 0x00000008, 0x000000E1, 0x00000026, +0x00050085, 0x00000008, 0x000000E2, 0x000000E0, 0x000000E1, 0x0006000C, 0x00000008, 0x000000E3, +0x00000001, 0x0000000E, 0x000000E2, 0x0004003D, 0x00000008, 0x000000E4, 0x000000D9, 0x00050085, +0x00000008, 0x000000E5, 0x000000E3, 0x000000E4, 0x0004003D, 0x00000008, 0x000000E6, 0x00000026, +0x00050085, 0x00000008, 0x000000E7, 0x000000E0, 0x000000E6, 0x0006000C, 0x00000008, 0x000000E8, +0x00000001, 0x0000000D, 0x000000E7, 0x0004003D, 0x00000008, 0x000000E9, 0x000000D9, 0x00050085, +0x00000008, 0x000000EA, 0x000000E8, 0x000000E9, 0x0004003D, 0x00000008, 0x000000EB, 0x00000025, +0x00060050, 0x0000000B, 0x000000EC, 0x000000E5, 0x000000EA, 0x000000EB, 0x000200FE, 0x000000EC, +0x00010038, 0x00050036, 0x0000000B, 0x0000002E, 0x00000000, 0x00000029, 0x00030037, 0x0000000B, +0x0000002A, 0x00030037, 0x0000000B, 0x0000002B, 0x00030037, 0x0000000B, 0x0000002C, 0x00030037, +0x0000000B, 0x0000002D, 0x000200F8, 0x0000002F, 0x00050051, 0x00000008, 0x000000EF, 0x0000002A, +0x00000000, 0x0005008E, 0x0000000B, 0x000000F0, 0x0000002C, 0x000000EF, 0x00050051, 0x00000008, +0x000000F1, 0x0000002A, 0x00000001, 0x0005008E, 0x0000000B, 0x000000F2, 0x0000002D, 0x000000F1, +0x00050081, 0x0000000B, 0x000000F3, 0x000000F0, 0x000000F2, 0x00050051, 0x00000008, 0x000000F4, +0x0000002A, 0x00000002, 0x0005008E, 0x0000000B, 0x000000F5, 0x0000002B, 0x000000F4, 0x00050081, +0x0000000B, 0x000000F6, 0x000000F3, 0x000000F5, 0x000200FE, 0x000000F6, 0x00010038, + }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentMipFilterfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentMipFilterfragspv.hpp new file mode 100644 index 000000000..d4348989a --- /dev/null +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/EnvironmentMipFilterfragspv.hpp @@ -0,0 +1,348 @@ +// Header generated by Lumos Editor + +#include +#include + +constexpr uint32_t spirv_EnvironmentMipFilterfragspv_size = 10864; +constexpr std::array spirv_EnvironmentMipFilterfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x000001D9, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, +0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000138, +0x0000014D, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, +0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, +0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, +0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, +0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, +0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, +0x0000000A, 0x75746173, 0x65746172, 0x3B316628, 0x00000000, 0x00040005, 0x00000009, 0x756C6176, +0x00000065, 0x00060005, 0x0000000F, 0x47475F44, 0x31662858, 0x3B31663B, 0x00000000, 0x00030005, +0x0000000D, 0x00486F4E, 0x00030005, 0x0000000E, 0x00000061, 0x00090005, 0x00000019, 0x43746547, +0x4D656275, 0x65547061, 0x6F6F4378, 0x28326472, 0x763B3169, 0x003B3266, 0x00060005, 0x00000017, +0x65627563, 0x65636146, 0x65646E49, 0x00000078, 0x00050005, 0x00000018, 0x43786574, 0x64726F6F, +0x00000000, 0x00080005, 0x0000001F, 0x69646152, 0x496C6163, 0x7265766E, 0x565F6573, 0x75284364, +0x00003B31, 0x00040005, 0x0000001E, 0x73746962, 0x00000000, 0x00070005, 0x00000024, 0x6D6D6148, +0x6C737265, 0x75287965, 0x31753B31, 0x0000003B, 0x00030005, 0x00000022, 0x00000069, 0x00030005, +0x00000023, 0x0000004E, 0x000A0005, 0x0000002B, 0x6F706D49, 0x6E617472, 0x61536563, 0x656C706D, +0x28584747, 0x3B326676, 0x3B336676, 0x003B3166, 0x00030005, 0x00000028, 0x00006958, 0x00030005, +0x00000029, 0x0000004E, 0x00050005, 0x0000002A, 0x67756F72, 0x73656E68, 0x00000073, 0x00030005, +0x00000033, 0x00003261, 0x00030005, 0x00000037, 0x00000066, 0x00030005, 0x00000049, 0x00007675, +0x00030005, 0x00000057, 0x00746572, 0x00040005, 0x00000059, 0x65636166, 0x00000000, 0x00040005, +0x000000D8, 0x61726170, 0x0000006D, 0x00030005, 0x000000DE, 0x00000061, 0x00030005, 0x000000E2, +0x00696870, 0x00050005, 0x000000E7, 0x54736F63, 0x61746568, 0x00000000, 0x00050005, 0x000000F5, +0x546E6973, 0x61746568, 0x00000000, 0x00030005, 0x000000FB, 0x00000048, 0x00030005, 0x00000108, +0x00007075, 0x00040005, 0x00000113, 0x676E6174, 0x00746E65, 0x00050005, 0x00000118, 0x61746962, +0x6E65676E, 0x00000074, 0x00050005, 0x0000011C, 0x706D6173, 0x6556656C, 0x00000063, 0x00030005, +0x0000012F, 0x0000004E, 0x00050005, 0x00000130, 0x68737550, 0x736E6F43, 0x00007374, 0x00060006, +0x00000130, 0x00000000, 0x67756F52, 0x73656E68, 0x00000073, 0x00070006, 0x00000130, 0x00000001, +0x65627563, 0x65636146, 0x65646E49, 0x00000078, 0x00040006, 0x00000130, 0x00000002, 0x00003070, +0x00040006, 0x00000130, 0x00000003, 0x00003170, 0x00050005, 0x00000132, 0x68737570, 0x736E6F43, +0x00007374, 0x00050005, 0x00000138, 0x5474756F, 0x6F437865, 0x0064726F, 0x00040005, 0x00000139, +0x61726170, 0x0000006D, 0x00040005, 0x0000013A, 0x61726170, 0x0000006D, 0x00030005, 0x0000013E, +0x00000052, 0x00030005, 0x00000140, 0x00000056, 0x00050005, 0x00000142, 0x61746F74, 0x6965576C, +0x00746867, 0x00070005, 0x00000143, 0x66657270, 0x65746C69, 0x43646572, 0x726F6C6F, 0x00000000, +0x00050005, 0x0000014D, 0x67617246, 0x6F6C6F43, 0x00007275, 0x00050005, 0x00000151, 0x65545F75, +0x72757478, 0x00000065, 0x00050005, 0x0000015B, 0x4D766E45, 0x69537061, 0x0000657A, 0x00030005, +0x00000162, 0x00000069, 0x00030005, 0x0000016B, 0x00006958, 0x00040005, 0x0000016C, 0x61726170, +0x0000006D, 0x00040005, 0x0000016E, 0x61726170, 0x0000006D, 0x00030005, 0x00000170, 0x00000048, +0x00040005, 0x00000171, 0x61726170, 0x0000006D, 0x00040005, 0x00000173, 0x61726170, 0x0000006D, +0x00040005, 0x00000175, 0x61726170, 0x0000006D, 0x00030005, 0x00000179, 0x0000004C, 0x00040005, +0x00000183, 0x746F644E, 0x0000004C, 0x00040005, 0x0000018C, 0x6F644E66, 0x00004874, 0x00040005, +0x00000190, 0x61726170, 0x0000006D, 0x00040005, 0x00000192, 0x6F645666, 0x00004874, 0x00040005, +0x00000196, 0x61726170, 0x0000006D, 0x00040005, 0x00000198, 0x66645066, 0x00000000, 0x00040005, +0x00000199, 0x61726170, 0x0000006D, 0x00040005, 0x0000019B, 0x61726170, 0x0000006D, 0x00040005, +0x000001A5, 0x656D4F66, 0x00536167, 0x00040005, 0x000001AC, 0x656D4F66, 0x00506167, 0x00050005, +0x000001B4, 0x70694D66, 0x73616942, 0x00000000, 0x00050005, 0x000001B5, 0x70694D66, 0x6576654C, +0x0000006C, 0x00050048, 0x00000130, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000130, +0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x00000130, 0x00000002, 0x00000023, 0x00000008, +0x00050048, 0x00000130, 0x00000003, 0x00000023, 0x0000000C, 0x00030047, 0x00000130, 0x00000002, +0x00040047, 0x00000138, 0x0000001E, 0x00000000, 0x00040047, 0x0000014D, 0x0000001E, 0x00000000, +0x00040047, 0x00000151, 0x00000022, 0x00000000, 0x00040047, 0x00000151, 0x00000021, 0x00000000, +0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, +0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00040021, 0x00000008, 0x00000006, 0x00000007, +0x00050021, 0x0000000C, 0x00000006, 0x00000007, 0x00000007, 0x00040015, 0x00000011, 0x00000020, +0x00000001, 0x00040020, 0x00000012, 0x00000007, 0x00000011, 0x00040017, 0x00000013, 0x00000006, +0x00000002, 0x00040020, 0x00000014, 0x00000007, 0x00000013, 0x00040017, 0x00000015, 0x00000006, +0x00000003, 0x00050021, 0x00000016, 0x00000015, 0x00000012, 0x00000014, 0x00040015, 0x0000001B, +0x00000020, 0x00000000, 0x00040020, 0x0000001C, 0x00000007, 0x0000001B, 0x00040021, 0x0000001D, +0x00000006, 0x0000001C, 0x00050021, 0x00000021, 0x00000013, 0x0000001C, 0x0000001C, 0x00040020, +0x00000026, 0x00000007, 0x00000015, 0x00060021, 0x00000027, 0x00000015, 0x00000014, 0x00000026, +0x00000007, 0x0004002B, 0x00000006, 0x0000002E, 0x00000000, 0x0004002B, 0x00000006, 0x0000002F, +0x3F800000, 0x0004002B, 0x00000006, 0x00000041, 0x40490FDB, 0x0004002B, 0x00000006, 0x0000004B, +0x40000000, 0x0004002B, 0x0000001B, 0x0000004C, 0x00000000, 0x0004002B, 0x0000001B, 0x0000004F, +0x00000001, 0x0005002C, 0x00000013, 0x00000055, 0x0000002F, 0x0000002F, 0x0006002C, 0x00000015, +0x00000058, 0x0000002E, 0x0000002E, 0x0000002E, 0x0004002B, 0x00000011, 0x0000005C, 0x00000000, +0x00020014, 0x0000005D, 0x0004002B, 0x00000011, 0x00000069, 0x00000001, 0x0004002B, 0x00000006, +0x0000006D, 0xBF800000, 0x0004002B, 0x00000011, 0x00000075, 0x00000002, 0x0004002B, 0x00000011, +0x00000081, 0x00000003, 0x0004002B, 0x00000011, 0x0000008C, 0x00000004, 0x0004002B, 0x0000001B, +0x000000A1, 0x00000010, 0x0004002B, 0x0000001B, 0x000000A7, 0x55555555, 0x0004002B, 0x0000001B, +0x000000AB, 0xAAAAAAAA, 0x0004002B, 0x0000001B, 0x000000B0, 0x33333333, 0x0004002B, 0x0000001B, +0x000000B2, 0x00000002, 0x0004002B, 0x0000001B, 0x000000B5, 0xCCCCCCCC, 0x0004002B, 0x0000001B, +0x000000BA, 0x0F0F0F0F, 0x0004002B, 0x0000001B, 0x000000BC, 0x00000004, 0x0004002B, 0x0000001B, +0x000000BF, 0xF0F0F0F0, 0x0004002B, 0x0000001B, 0x000000C4, 0x00FF00FF, 0x0004002B, 0x0000001B, +0x000000C6, 0x00000008, 0x0004002B, 0x0000001B, 0x000000C9, 0xFF00FF00, 0x0004002B, 0x00000006, +0x000000CF, 0x2F800000, 0x0004002B, 0x00000006, 0x000000E3, 0x40C90FDB, 0x0004002B, 0x00000006, +0x0000010C, 0x3F7FBE77, 0x0006002C, 0x00000015, 0x0000010E, 0x0000002E, 0x0000002E, 0x0000002F, +0x0006002C, 0x00000015, 0x0000010F, 0x0000002F, 0x0000002E, 0x0000002E, 0x00040017, 0x00000110, +0x0000005D, 0x00000003, 0x0006001E, 0x00000130, 0x00000006, 0x0000001B, 0x00000006, 0x00000006, +0x00040020, 0x00000131, 0x00000009, 0x00000130, 0x0004003B, 0x00000131, 0x00000132, 0x00000009, +0x00040020, 0x00000133, 0x00000009, 0x0000001B, 0x00040020, 0x00000137, 0x00000001, 0x00000013, +0x0004003B, 0x00000137, 0x00000138, 0x00000001, 0x00040020, 0x00000144, 0x00000009, 0x00000006, +0x0004002B, 0x00000006, 0x00000147, 0x3D75C28F, 0x00040017, 0x0000014B, 0x00000006, 0x00000004, +0x00040020, 0x0000014C, 0x00000003, 0x0000014B, 0x0004003B, 0x0000014C, 0x0000014D, 0x00000003, +0x00090019, 0x0000014E, 0x00000006, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, +0x00000000, 0x0003001B, 0x0000014F, 0x0000014E, 0x00040020, 0x00000150, 0x00000000, 0x0000014F, +0x0004003B, 0x00000150, 0x00000151, 0x00000000, 0x00040017, 0x0000015E, 0x00000011, 0x00000002, +0x0004002B, 0x0000001B, 0x00000169, 0x00000400, 0x0004002B, 0x00000006, 0x000001A1, 0x40800000, +0x0004002B, 0x00000006, 0x000001A6, 0x44800000, 0x0004002B, 0x00000006, 0x000001A9, 0x3727C5AC, +0x0004002B, 0x00000006, 0x000001AD, 0x41490FDB, 0x0004002B, 0x00000006, 0x000001AE, 0x40C00000, +0x0004002B, 0x00000006, 0x000001B6, 0x3F000000, 0x0004002B, 0x00000006, 0x000001CF, 0x38D1B717, +0x0004002B, 0x00000006, 0x000001D8, 0x3A800000, 0x00050036, 0x00000002, 0x00000004, 0x00000000, +0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000026, 0x0000012F, 0x00000007, 0x0004003B, +0x00000012, 0x00000139, 0x00000007, 0x0004003B, 0x00000014, 0x0000013A, 0x00000007, 0x0004003B, +0x00000026, 0x0000013E, 0x00000007, 0x0004003B, 0x00000026, 0x00000140, 0x00000007, 0x0004003B, +0x00000007, 0x00000142, 0x00000007, 0x0004003B, 0x00000026, 0x00000143, 0x00000007, 0x0004003B, +0x00000007, 0x0000015B, 0x00000007, 0x0004003B, 0x0000001C, 0x00000162, 0x00000007, 0x0004003B, +0x00000014, 0x0000016B, 0x00000007, 0x0004003B, 0x0000001C, 0x0000016C, 0x00000007, 0x0004003B, +0x0000001C, 0x0000016E, 0x00000007, 0x0004003B, 0x00000026, 0x00000170, 0x00000007, 0x0004003B, +0x00000014, 0x00000171, 0x00000007, 0x0004003B, 0x00000026, 0x00000173, 0x00000007, 0x0004003B, +0x00000007, 0x00000175, 0x00000007, 0x0004003B, 0x00000026, 0x00000179, 0x00000007, 0x0004003B, +0x00000007, 0x00000183, 0x00000007, 0x0004003B, 0x00000007, 0x0000018C, 0x00000007, 0x0004003B, +0x00000007, 0x00000190, 0x00000007, 0x0004003B, 0x00000007, 0x00000192, 0x00000007, 0x0004003B, +0x00000007, 0x00000196, 0x00000007, 0x0004003B, 0x00000007, 0x00000198, 0x00000007, 0x0004003B, +0x00000007, 0x00000199, 0x00000007, 0x0004003B, 0x00000007, 0x0000019B, 0x00000007, 0x0004003B, +0x00000007, 0x000001A5, 0x00000007, 0x0004003B, 0x00000007, 0x000001AC, 0x00000007, 0x0004003B, +0x00000007, 0x000001B4, 0x00000007, 0x0004003B, 0x00000007, 0x000001B5, 0x00000007, 0x00050041, +0x00000133, 0x00000134, 0x00000132, 0x00000069, 0x0004003D, 0x0000001B, 0x00000135, 0x00000134, +0x0004007C, 0x00000011, 0x00000136, 0x00000135, 0x0003003E, 0x00000139, 0x00000136, 0x0004003D, +0x00000013, 0x0000013B, 0x00000138, 0x0003003E, 0x0000013A, 0x0000013B, 0x00060039, 0x00000015, +0x0000013C, 0x00000019, 0x00000139, 0x0000013A, 0x0006000C, 0x00000015, 0x0000013D, 0x00000001, +0x00000045, 0x0000013C, 0x0003003E, 0x0000012F, 0x0000013D, 0x0004003D, 0x00000015, 0x0000013F, +0x0000012F, 0x0003003E, 0x0000013E, 0x0000013F, 0x0004003D, 0x00000015, 0x00000141, 0x0000013E, +0x0003003E, 0x00000140, 0x00000141, 0x0003003E, 0x00000142, 0x0000002E, 0x0003003E, 0x00000143, +0x00000058, 0x00050041, 0x00000144, 0x00000145, 0x00000132, 0x0000005C, 0x0004003D, 0x00000006, +0x00000146, 0x00000145, 0x000500B8, 0x0000005D, 0x00000148, 0x00000146, 0x00000147, 0x000300F7, +0x0000014A, 0x00000000, 0x000400FA, 0x00000148, 0x00000149, 0x0000015A, 0x000200F8, 0x00000149, +0x0004003D, 0x0000014F, 0x00000152, 0x00000151, 0x0004003D, 0x00000015, 0x00000153, 0x0000012F, +0x00070057, 0x0000014B, 0x00000154, 0x00000152, 0x00000153, 0x00000001, 0x0000002E, 0x0008004F, +0x00000015, 0x00000155, 0x00000154, 0x00000154, 0x00000000, 0x00000001, 0x00000002, 0x00050051, +0x00000006, 0x00000156, 0x00000155, 0x00000000, 0x00050051, 0x00000006, 0x00000157, 0x00000155, +0x00000001, 0x00050051, 0x00000006, 0x00000158, 0x00000155, 0x00000002, 0x00070050, 0x0000014B, +0x00000159, 0x00000156, 0x00000157, 0x00000158, 0x0000002F, 0x0003003E, 0x0000014D, 0x00000159, +0x000200F9, 0x0000014A, 0x000200F8, 0x0000015A, 0x0004003D, 0x0000014F, 0x0000015C, 0x00000151, +0x00040064, 0x0000014E, 0x0000015D, 0x0000015C, 0x00050067, 0x0000015E, 0x0000015F, 0x0000015D, +0x0000005C, 0x00050051, 0x00000011, 0x00000160, 0x0000015F, 0x00000000, 0x0004006F, 0x00000006, +0x00000161, 0x00000160, 0x0003003E, 0x0000015B, 0x00000161, 0x0003003E, 0x00000162, 0x0000004C, +0x000200F9, 0x00000163, 0x000200F8, 0x00000163, 0x000400F6, 0x00000165, 0x00000166, 0x00000000, +0x000200F9, 0x00000167, 0x000200F8, 0x00000167, 0x0004003D, 0x0000001B, 0x00000168, 0x00000162, +0x000500B0, 0x0000005D, 0x0000016A, 0x00000168, 0x00000169, 0x000400FA, 0x0000016A, 0x00000164, +0x00000165, 0x000200F8, 0x00000164, 0x0004003D, 0x0000001B, 0x0000016D, 0x00000162, 0x0003003E, +0x0000016C, 0x0000016D, 0x0003003E, 0x0000016E, 0x00000169, 0x00060039, 0x00000013, 0x0000016F, +0x00000024, 0x0000016C, 0x0000016E, 0x0003003E, 0x0000016B, 0x0000016F, 0x0004003D, 0x00000013, +0x00000172, 0x0000016B, 0x0003003E, 0x00000171, 0x00000172, 0x0004003D, 0x00000015, 0x00000174, +0x0000012F, 0x0003003E, 0x00000173, 0x00000174, 0x00050041, 0x00000144, 0x00000176, 0x00000132, +0x0000005C, 0x0004003D, 0x00000006, 0x00000177, 0x00000176, 0x0003003E, 0x00000175, 0x00000177, +0x00070039, 0x00000015, 0x00000178, 0x0000002B, 0x00000171, 0x00000173, 0x00000175, 0x0003003E, +0x00000170, 0x00000178, 0x0004003D, 0x00000015, 0x0000017A, 0x00000140, 0x0004003D, 0x00000015, +0x0000017B, 0x00000170, 0x00050094, 0x00000006, 0x0000017C, 0x0000017A, 0x0000017B, 0x00050085, +0x00000006, 0x0000017D, 0x0000004B, 0x0000017C, 0x0004003D, 0x00000015, 0x0000017E, 0x00000170, +0x0005008E, 0x00000015, 0x0000017F, 0x0000017E, 0x0000017D, 0x0004003D, 0x00000015, 0x00000180, +0x00000140, 0x00050083, 0x00000015, 0x00000181, 0x0000017F, 0x00000180, 0x0006000C, 0x00000015, +0x00000182, 0x00000001, 0x00000045, 0x00000181, 0x0003003E, 0x00000179, 0x00000182, 0x0004003D, +0x00000015, 0x00000184, 0x0000012F, 0x0004003D, 0x00000015, 0x00000185, 0x00000179, 0x00050094, +0x00000006, 0x00000186, 0x00000184, 0x00000185, 0x0007000C, 0x00000006, 0x00000187, 0x00000001, +0x00000028, 0x00000186, 0x0000002E, 0x0003003E, 0x00000183, 0x00000187, 0x0004003D, 0x00000006, +0x00000188, 0x00000183, 0x000500BA, 0x0000005D, 0x00000189, 0x00000188, 0x0000002E, 0x000300F7, +0x0000018B, 0x00000000, 0x000400FA, 0x00000189, 0x0000018A, 0x0000018B, 0x000200F8, 0x0000018A, +0x0004003D, 0x00000015, 0x0000018D, 0x0000012F, 0x0004003D, 0x00000015, 0x0000018E, 0x00000170, +0x00050094, 0x00000006, 0x0000018F, 0x0000018D, 0x0000018E, 0x0003003E, 0x00000190, 0x0000018F, +0x00050039, 0x00000006, 0x00000191, 0x0000000A, 0x00000190, 0x0003003E, 0x0000018C, 0x00000191, +0x0004003D, 0x00000015, 0x00000193, 0x00000140, 0x0004003D, 0x00000015, 0x00000194, 0x00000170, +0x00050094, 0x00000006, 0x00000195, 0x00000193, 0x00000194, 0x0003003E, 0x00000196, 0x00000195, +0x00050039, 0x00000006, 0x00000197, 0x0000000A, 0x00000196, 0x0003003E, 0x00000192, 0x00000197, +0x0004003D, 0x00000006, 0x0000019A, 0x0000018C, 0x0003003E, 0x00000199, 0x0000019A, 0x00050041, +0x00000144, 0x0000019C, 0x00000132, 0x0000005C, 0x0004003D, 0x00000006, 0x0000019D, 0x0000019C, +0x0003003E, 0x0000019B, 0x0000019D, 0x00060039, 0x00000006, 0x0000019E, 0x0000000F, 0x00000199, +0x0000019B, 0x0004003D, 0x00000006, 0x0000019F, 0x0000018C, 0x00050085, 0x00000006, 0x000001A0, +0x0000019E, 0x0000019F, 0x0004003D, 0x00000006, 0x000001A2, 0x00000192, 0x00050085, 0x00000006, +0x000001A3, 0x000001A1, 0x000001A2, 0x00050088, 0x00000006, 0x000001A4, 0x000001A0, 0x000001A3, +0x0003003E, 0x00000198, 0x000001A4, 0x0004003D, 0x00000006, 0x000001A7, 0x00000198, 0x00050085, +0x00000006, 0x000001A8, 0x000001A6, 0x000001A7, 0x0007000C, 0x00000006, 0x000001AA, 0x00000001, +0x00000028, 0x000001A8, 0x000001A9, 0x00050088, 0x00000006, 0x000001AB, 0x0000002F, 0x000001AA, +0x0003003E, 0x000001A5, 0x000001AB, 0x0004003D, 0x00000006, 0x000001AF, 0x0000015B, 0x00050085, +0x00000006, 0x000001B0, 0x000001AE, 0x000001AF, 0x0004003D, 0x00000006, 0x000001B1, 0x0000015B, +0x00050085, 0x00000006, 0x000001B2, 0x000001B0, 0x000001B1, 0x00050088, 0x00000006, 0x000001B3, +0x000001AD, 0x000001B2, 0x0003003E, 0x000001AC, 0x000001B3, 0x0003003E, 0x000001B4, 0x0000002F, +0x0004003D, 0x00000006, 0x000001B7, 0x000001A5, 0x0004003D, 0x00000006, 0x000001B8, 0x000001AC, +0x00050088, 0x00000006, 0x000001B9, 0x000001B7, 0x000001B8, 0x0006000C, 0x00000006, 0x000001BA, +0x00000001, 0x0000001E, 0x000001B9, 0x00050085, 0x00000006, 0x000001BB, 0x000001B6, 0x000001BA, +0x0004003D, 0x00000006, 0x000001BC, 0x000001B4, 0x00050081, 0x00000006, 0x000001BD, 0x000001BB, +0x000001BC, 0x0007000C, 0x00000006, 0x000001BE, 0x00000001, 0x00000028, 0x000001BD, 0x0000002E, +0x0003003E, 0x000001B5, 0x000001BE, 0x0004003D, 0x0000014F, 0x000001BF, 0x00000151, 0x0004003D, +0x00000015, 0x000001C0, 0x00000179, 0x0004003D, 0x00000006, 0x000001C1, 0x000001B5, 0x00070057, +0x0000014B, 0x000001C2, 0x000001BF, 0x000001C0, 0x00000001, 0x000001C1, 0x0008004F, 0x00000015, +0x000001C3, 0x000001C2, 0x000001C2, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000006, +0x000001C4, 0x00000183, 0x0005008E, 0x00000015, 0x000001C5, 0x000001C3, 0x000001C4, 0x0004003D, +0x00000015, 0x000001C6, 0x00000143, 0x00050081, 0x00000015, 0x000001C7, 0x000001C6, 0x000001C5, +0x0003003E, 0x00000143, 0x000001C7, 0x0004003D, 0x00000006, 0x000001C8, 0x00000183, 0x0004003D, +0x00000006, 0x000001C9, 0x00000142, 0x00050081, 0x00000006, 0x000001CA, 0x000001C9, 0x000001C8, +0x0003003E, 0x00000142, 0x000001CA, 0x000200F9, 0x0000018B, 0x000200F8, 0x0000018B, 0x000200F9, +0x00000166, 0x000200F8, 0x00000166, 0x0004003D, 0x0000001B, 0x000001CB, 0x00000162, 0x00050080, +0x0000001B, 0x000001CC, 0x000001CB, 0x00000069, 0x0003003E, 0x00000162, 0x000001CC, 0x000200F9, +0x00000163, 0x000200F8, 0x00000165, 0x0004003D, 0x00000015, 0x000001CD, 0x00000143, 0x0004003D, +0x00000006, 0x000001CE, 0x00000142, 0x0007000C, 0x00000006, 0x000001D0, 0x00000001, 0x00000028, +0x000001CE, 0x000001CF, 0x00060050, 0x00000015, 0x000001D1, 0x000001D0, 0x000001D0, 0x000001D0, +0x00050088, 0x00000015, 0x000001D2, 0x000001CD, 0x000001D1, 0x0003003E, 0x00000143, 0x000001D2, +0x0004003D, 0x00000015, 0x000001D3, 0x00000143, 0x00050051, 0x00000006, 0x000001D4, 0x000001D3, +0x00000000, 0x00050051, 0x00000006, 0x000001D5, 0x000001D3, 0x00000001, 0x00050051, 0x00000006, +0x000001D6, 0x000001D3, 0x00000002, 0x00070050, 0x0000014B, 0x000001D7, 0x000001D4, 0x000001D5, +0x000001D6, 0x0000002F, 0x0003003E, 0x0000014D, 0x000001D7, 0x000200F9, 0x0000014A, 0x000200F8, +0x0000014A, 0x000100FD, 0x00010038, 0x00050036, 0x00000006, 0x0000000A, 0x00000000, 0x00000008, +0x00030037, 0x00000007, 0x00000009, 0x000200F8, 0x0000000B, 0x0004003D, 0x00000006, 0x0000002D, +0x00000009, 0x0008000C, 0x00000006, 0x00000030, 0x00000001, 0x0000002B, 0x0000002D, 0x0000002E, +0x0000002F, 0x000200FE, 0x00000030, 0x00010038, 0x00050036, 0x00000006, 0x0000000F, 0x00000000, +0x0000000C, 0x00030037, 0x00000007, 0x0000000D, 0x00030037, 0x00000007, 0x0000000E, 0x000200F8, +0x00000010, 0x0004003B, 0x00000007, 0x00000033, 0x00000007, 0x0004003B, 0x00000007, 0x00000037, +0x00000007, 0x0004003D, 0x00000006, 0x00000034, 0x0000000E, 0x0004003D, 0x00000006, 0x00000035, +0x0000000E, 0x00050085, 0x00000006, 0x00000036, 0x00000034, 0x00000035, 0x0003003E, 0x00000033, +0x00000036, 0x0004003D, 0x00000006, 0x00000038, 0x0000000D, 0x0004003D, 0x00000006, 0x00000039, +0x00000033, 0x00050085, 0x00000006, 0x0000003A, 0x00000038, 0x00000039, 0x0004003D, 0x00000006, +0x0000003B, 0x0000000D, 0x00050083, 0x00000006, 0x0000003C, 0x0000003A, 0x0000003B, 0x0004003D, +0x00000006, 0x0000003D, 0x0000000D, 0x00050085, 0x00000006, 0x0000003E, 0x0000003C, 0x0000003D, +0x00050081, 0x00000006, 0x0000003F, 0x0000003E, 0x0000002F, 0x0003003E, 0x00000037, 0x0000003F, +0x0004003D, 0x00000006, 0x00000040, 0x00000033, 0x0004003D, 0x00000006, 0x00000042, 0x00000037, +0x00050085, 0x00000006, 0x00000043, 0x00000041, 0x00000042, 0x0004003D, 0x00000006, 0x00000044, +0x00000037, 0x00050085, 0x00000006, 0x00000045, 0x00000043, 0x00000044, 0x00050088, 0x00000006, +0x00000046, 0x00000040, 0x00000045, 0x000200FE, 0x00000046, 0x00010038, 0x00050036, 0x00000015, +0x00000019, 0x00000000, 0x00000016, 0x00030037, 0x00000012, 0x00000017, 0x00030037, 0x00000014, +0x00000018, 0x000200F8, 0x0000001A, 0x0004003B, 0x00000014, 0x00000049, 0x00000007, 0x0004003B, +0x00000026, 0x00000057, 0x00000007, 0x0004003B, 0x00000012, 0x00000059, 0x00000007, 0x0004003D, +0x00000013, 0x0000004A, 0x00000018, 0x0003003E, 0x00000049, 0x0000004A, 0x00050041, 0x00000007, +0x0000004D, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, 0x0000004E, 0x0000004D, 0x00050041, +0x00000007, 0x00000050, 0x00000049, 0x0000004F, 0x0004003D, 0x00000006, 0x00000051, 0x00000050, +0x00050083, 0x00000006, 0x00000052, 0x0000002F, 0x00000051, 0x00050050, 0x00000013, 0x00000053, +0x0000004E, 0x00000052, 0x0005008E, 0x00000013, 0x00000054, 0x00000053, 0x0000004B, 0x00050083, +0x00000013, 0x00000056, 0x00000054, 0x00000055, 0x0003003E, 0x00000049, 0x00000056, 0x0003003E, +0x00000057, 0x00000058, 0x0004003D, 0x00000011, 0x0000005A, 0x00000017, 0x0003003E, 0x00000059, +0x0000005A, 0x0004003D, 0x00000011, 0x0000005B, 0x00000059, 0x000500AA, 0x0000005D, 0x0000005E, +0x0000005B, 0x0000005C, 0x000300F7, 0x00000060, 0x00000000, 0x000400FA, 0x0000005E, 0x0000005F, +0x00000067, 0x000200F8, 0x0000005F, 0x00050041, 0x00000007, 0x00000061, 0x00000049, 0x0000004F, +0x0004003D, 0x00000006, 0x00000062, 0x00000061, 0x00050041, 0x00000007, 0x00000063, 0x00000049, +0x0000004C, 0x0004003D, 0x00000006, 0x00000064, 0x00000063, 0x0004007F, 0x00000006, 0x00000065, +0x00000064, 0x00060050, 0x00000015, 0x00000066, 0x0000002F, 0x00000062, 0x00000065, 0x0003003E, +0x00000057, 0x00000066, 0x000200F9, 0x00000060, 0x000200F8, 0x00000067, 0x0004003D, 0x00000011, +0x00000068, 0x00000059, 0x000500AA, 0x0000005D, 0x0000006A, 0x00000068, 0x00000069, 0x000300F7, +0x0000006C, 0x00000000, 0x000400FA, 0x0000006A, 0x0000006B, 0x00000073, 0x000200F8, 0x0000006B, +0x00050041, 0x00000007, 0x0000006E, 0x00000049, 0x0000004F, 0x0004003D, 0x00000006, 0x0000006F, +0x0000006E, 0x00050041, 0x00000007, 0x00000070, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, +0x00000071, 0x00000070, 0x00060050, 0x00000015, 0x00000072, 0x0000006D, 0x0000006F, 0x00000071, +0x0003003E, 0x00000057, 0x00000072, 0x000200F9, 0x0000006C, 0x000200F8, 0x00000073, 0x0004003D, +0x00000011, 0x00000074, 0x00000059, 0x000500AA, 0x0000005D, 0x00000076, 0x00000074, 0x00000075, +0x000300F7, 0x00000078, 0x00000000, 0x000400FA, 0x00000076, 0x00000077, 0x0000007F, 0x000200F8, +0x00000077, 0x00050041, 0x00000007, 0x00000079, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, +0x0000007A, 0x00000079, 0x00050041, 0x00000007, 0x0000007B, 0x00000049, 0x0000004F, 0x0004003D, +0x00000006, 0x0000007C, 0x0000007B, 0x0004007F, 0x00000006, 0x0000007D, 0x0000007C, 0x00060050, +0x00000015, 0x0000007E, 0x0000007A, 0x0000002F, 0x0000007D, 0x0003003E, 0x00000057, 0x0000007E, +0x000200F9, 0x00000078, 0x000200F8, 0x0000007F, 0x0004003D, 0x00000011, 0x00000080, 0x00000059, +0x000500AA, 0x0000005D, 0x00000082, 0x00000080, 0x00000081, 0x000300F7, 0x00000084, 0x00000000, +0x000400FA, 0x00000082, 0x00000083, 0x0000008A, 0x000200F8, 0x00000083, 0x00050041, 0x00000007, +0x00000085, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, 0x00000086, 0x00000085, 0x00050041, +0x00000007, 0x00000087, 0x00000049, 0x0000004F, 0x0004003D, 0x00000006, 0x00000088, 0x00000087, +0x00060050, 0x00000015, 0x00000089, 0x00000086, 0x0000006D, 0x00000088, 0x0003003E, 0x00000057, +0x00000089, 0x000200F9, 0x00000084, 0x000200F8, 0x0000008A, 0x0004003D, 0x00000011, 0x0000008B, +0x00000059, 0x000500AA, 0x0000005D, 0x0000008D, 0x0000008B, 0x0000008C, 0x000300F7, 0x0000008F, +0x00000000, 0x000400FA, 0x0000008D, 0x0000008E, 0x00000095, 0x000200F8, 0x0000008E, 0x00050041, +0x00000007, 0x00000090, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, 0x00000091, 0x00000090, +0x00050041, 0x00000007, 0x00000092, 0x00000049, 0x0000004F, 0x0004003D, 0x00000006, 0x00000093, +0x00000092, 0x00060050, 0x00000015, 0x00000094, 0x00000091, 0x00000093, 0x0000002F, 0x0003003E, +0x00000057, 0x00000094, 0x000200F9, 0x0000008F, 0x000200F8, 0x00000095, 0x00050041, 0x00000007, +0x00000096, 0x00000049, 0x0000004C, 0x0004003D, 0x00000006, 0x00000097, 0x00000096, 0x0004007F, +0x00000006, 0x00000098, 0x00000097, 0x00050041, 0x00000007, 0x00000099, 0x00000049, 0x0000004F, +0x0004003D, 0x00000006, 0x0000009A, 0x00000099, 0x00060050, 0x00000015, 0x0000009B, 0x00000098, +0x0000009A, 0x0000006D, 0x0003003E, 0x00000057, 0x0000009B, 0x000200F9, 0x0000008F, 0x000200F8, +0x0000008F, 0x000200F9, 0x00000084, 0x000200F8, 0x00000084, 0x000200F9, 0x00000078, 0x000200F8, +0x00000078, 0x000200F9, 0x0000006C, 0x000200F8, 0x0000006C, 0x000200F9, 0x00000060, 0x000200F8, +0x00000060, 0x0004003D, 0x00000015, 0x0000009C, 0x00000057, 0x0006000C, 0x00000015, 0x0000009D, +0x00000001, 0x00000045, 0x0000009C, 0x000200FE, 0x0000009D, 0x00010038, 0x00050036, 0x00000006, +0x0000001F, 0x00000000, 0x0000001D, 0x00030037, 0x0000001C, 0x0000001E, 0x000200F8, 0x00000020, +0x0004003D, 0x0000001B, 0x000000A0, 0x0000001E, 0x000500C4, 0x0000001B, 0x000000A2, 0x000000A0, +0x000000A1, 0x0004003D, 0x0000001B, 0x000000A3, 0x0000001E, 0x000500C2, 0x0000001B, 0x000000A4, +0x000000A3, 0x000000A1, 0x000500C5, 0x0000001B, 0x000000A5, 0x000000A2, 0x000000A4, 0x0003003E, +0x0000001E, 0x000000A5, 0x0004003D, 0x0000001B, 0x000000A6, 0x0000001E, 0x000500C7, 0x0000001B, +0x000000A8, 0x000000A6, 0x000000A7, 0x000500C4, 0x0000001B, 0x000000A9, 0x000000A8, 0x0000004F, +0x0004003D, 0x0000001B, 0x000000AA, 0x0000001E, 0x000500C7, 0x0000001B, 0x000000AC, 0x000000AA, +0x000000AB, 0x000500C2, 0x0000001B, 0x000000AD, 0x000000AC, 0x0000004F, 0x000500C5, 0x0000001B, +0x000000AE, 0x000000A9, 0x000000AD, 0x0003003E, 0x0000001E, 0x000000AE, 0x0004003D, 0x0000001B, +0x000000AF, 0x0000001E, 0x000500C7, 0x0000001B, 0x000000B1, 0x000000AF, 0x000000B0, 0x000500C4, +0x0000001B, 0x000000B3, 0x000000B1, 0x000000B2, 0x0004003D, 0x0000001B, 0x000000B4, 0x0000001E, +0x000500C7, 0x0000001B, 0x000000B6, 0x000000B4, 0x000000B5, 0x000500C2, 0x0000001B, 0x000000B7, +0x000000B6, 0x000000B2, 0x000500C5, 0x0000001B, 0x000000B8, 0x000000B3, 0x000000B7, 0x0003003E, +0x0000001E, 0x000000B8, 0x0004003D, 0x0000001B, 0x000000B9, 0x0000001E, 0x000500C7, 0x0000001B, +0x000000BB, 0x000000B9, 0x000000BA, 0x000500C4, 0x0000001B, 0x000000BD, 0x000000BB, 0x000000BC, +0x0004003D, 0x0000001B, 0x000000BE, 0x0000001E, 0x000500C7, 0x0000001B, 0x000000C0, 0x000000BE, +0x000000BF, 0x000500C2, 0x0000001B, 0x000000C1, 0x000000C0, 0x000000BC, 0x000500C5, 0x0000001B, +0x000000C2, 0x000000BD, 0x000000C1, 0x0003003E, 0x0000001E, 0x000000C2, 0x0004003D, 0x0000001B, +0x000000C3, 0x0000001E, 0x000500C7, 0x0000001B, 0x000000C5, 0x000000C3, 0x000000C4, 0x000500C4, +0x0000001B, 0x000000C7, 0x000000C5, 0x000000C6, 0x0004003D, 0x0000001B, 0x000000C8, 0x0000001E, +0x000500C7, 0x0000001B, 0x000000CA, 0x000000C8, 0x000000C9, 0x000500C2, 0x0000001B, 0x000000CB, +0x000000CA, 0x000000C6, 0x000500C5, 0x0000001B, 0x000000CC, 0x000000C7, 0x000000CB, 0x0003003E, +0x0000001E, 0x000000CC, 0x0004003D, 0x0000001B, 0x000000CD, 0x0000001E, 0x00040070, 0x00000006, +0x000000CE, 0x000000CD, 0x00050085, 0x00000006, 0x000000D0, 0x000000CE, 0x000000CF, 0x000200FE, +0x000000D0, 0x00010038, 0x00050036, 0x00000013, 0x00000024, 0x00000000, 0x00000021, 0x00030037, +0x0000001C, 0x00000022, 0x00030037, 0x0000001C, 0x00000023, 0x000200F8, 0x00000025, 0x0004003B, +0x0000001C, 0x000000D8, 0x00000007, 0x0004003D, 0x0000001B, 0x000000D3, 0x00000022, 0x00040070, +0x00000006, 0x000000D4, 0x000000D3, 0x0004003D, 0x0000001B, 0x000000D5, 0x00000023, 0x00040070, +0x00000006, 0x000000D6, 0x000000D5, 0x00050088, 0x00000006, 0x000000D7, 0x000000D4, 0x000000D6, +0x0004003D, 0x0000001B, 0x000000D9, 0x00000022, 0x0003003E, 0x000000D8, 0x000000D9, 0x00050039, +0x00000006, 0x000000DA, 0x0000001F, 0x000000D8, 0x00050050, 0x00000013, 0x000000DB, 0x000000D7, +0x000000DA, 0x000200FE, 0x000000DB, 0x00010038, 0x00050036, 0x00000015, 0x0000002B, 0x00000000, +0x00000027, 0x00030037, 0x00000014, 0x00000028, 0x00030037, 0x00000026, 0x00000029, 0x00030037, +0x00000007, 0x0000002A, 0x000200F8, 0x0000002C, 0x0004003B, 0x00000007, 0x000000DE, 0x00000007, +0x0004003B, 0x00000007, 0x000000E2, 0x00000007, 0x0004003B, 0x00000007, 0x000000E7, 0x00000007, +0x0004003B, 0x00000007, 0x000000F5, 0x00000007, 0x0004003B, 0x00000026, 0x000000FB, 0x00000007, +0x0004003B, 0x00000026, 0x00000108, 0x00000007, 0x0004003B, 0x00000026, 0x00000113, 0x00000007, +0x0004003B, 0x00000026, 0x00000118, 0x00000007, 0x0004003B, 0x00000026, 0x0000011C, 0x00000007, +0x0004003D, 0x00000006, 0x000000DF, 0x0000002A, 0x0004003D, 0x00000006, 0x000000E0, 0x0000002A, +0x00050085, 0x00000006, 0x000000E1, 0x000000DF, 0x000000E0, 0x0003003E, 0x000000DE, 0x000000E1, +0x00050041, 0x00000007, 0x000000E4, 0x00000028, 0x0000004C, 0x0004003D, 0x00000006, 0x000000E5, +0x000000E4, 0x00050085, 0x00000006, 0x000000E6, 0x000000E3, 0x000000E5, 0x0003003E, 0x000000E2, +0x000000E6, 0x00050041, 0x00000007, 0x000000E8, 0x00000028, 0x0000004F, 0x0004003D, 0x00000006, +0x000000E9, 0x000000E8, 0x00050083, 0x00000006, 0x000000EA, 0x0000002F, 0x000000E9, 0x0004003D, +0x00000006, 0x000000EB, 0x000000DE, 0x0004003D, 0x00000006, 0x000000EC, 0x000000DE, 0x00050085, +0x00000006, 0x000000ED, 0x000000EB, 0x000000EC, 0x00050083, 0x00000006, 0x000000EE, 0x000000ED, +0x0000002F, 0x00050041, 0x00000007, 0x000000EF, 0x00000028, 0x0000004F, 0x0004003D, 0x00000006, +0x000000F0, 0x000000EF, 0x00050085, 0x00000006, 0x000000F1, 0x000000EE, 0x000000F0, 0x00050081, +0x00000006, 0x000000F2, 0x0000002F, 0x000000F1, 0x00050088, 0x00000006, 0x000000F3, 0x000000EA, +0x000000F2, 0x0006000C, 0x00000006, 0x000000F4, 0x00000001, 0x0000001F, 0x000000F3, 0x0003003E, +0x000000E7, 0x000000F4, 0x0004003D, 0x00000006, 0x000000F6, 0x000000E7, 0x0004003D, 0x00000006, +0x000000F7, 0x000000E7, 0x00050085, 0x00000006, 0x000000F8, 0x000000F6, 0x000000F7, 0x00050083, +0x00000006, 0x000000F9, 0x0000002F, 0x000000F8, 0x0006000C, 0x00000006, 0x000000FA, 0x00000001, +0x0000001F, 0x000000F9, 0x0003003E, 0x000000F5, 0x000000FA, 0x0004003D, 0x00000006, 0x000000FC, +0x000000E2, 0x0006000C, 0x00000006, 0x000000FD, 0x00000001, 0x0000000E, 0x000000FC, 0x0004003D, +0x00000006, 0x000000FE, 0x000000F5, 0x00050085, 0x00000006, 0x000000FF, 0x000000FD, 0x000000FE, +0x00050041, 0x00000007, 0x00000100, 0x000000FB, 0x0000004C, 0x0003003E, 0x00000100, 0x000000FF, +0x0004003D, 0x00000006, 0x00000101, 0x000000E2, 0x0006000C, 0x00000006, 0x00000102, 0x00000001, +0x0000000D, 0x00000101, 0x0004003D, 0x00000006, 0x00000103, 0x000000F5, 0x00050085, 0x00000006, +0x00000104, 0x00000102, 0x00000103, 0x00050041, 0x00000007, 0x00000105, 0x000000FB, 0x0000004F, +0x0003003E, 0x00000105, 0x00000104, 0x0004003D, 0x00000006, 0x00000106, 0x000000E7, 0x00050041, +0x00000007, 0x00000107, 0x000000FB, 0x000000B2, 0x0003003E, 0x00000107, 0x00000106, 0x00050041, +0x00000007, 0x00000109, 0x00000029, 0x000000B2, 0x0004003D, 0x00000006, 0x0000010A, 0x00000109, +0x0006000C, 0x00000006, 0x0000010B, 0x00000001, 0x00000004, 0x0000010A, 0x000500B8, 0x0000005D, +0x0000010D, 0x0000010B, 0x0000010C, 0x00060050, 0x00000110, 0x00000111, 0x0000010D, 0x0000010D, +0x0000010D, 0x000600A9, 0x00000015, 0x00000112, 0x00000111, 0x0000010E, 0x0000010F, 0x0003003E, +0x00000108, 0x00000112, 0x0004003D, 0x00000015, 0x00000114, 0x00000108, 0x0004003D, 0x00000015, +0x00000115, 0x00000029, 0x0007000C, 0x00000015, 0x00000116, 0x00000001, 0x00000044, 0x00000114, +0x00000115, 0x0006000C, 0x00000015, 0x00000117, 0x00000001, 0x00000045, 0x00000116, 0x0003003E, +0x00000113, 0x00000117, 0x0004003D, 0x00000015, 0x00000119, 0x00000029, 0x0004003D, 0x00000015, +0x0000011A, 0x00000113, 0x0007000C, 0x00000015, 0x0000011B, 0x00000001, 0x00000044, 0x00000119, +0x0000011A, 0x0003003E, 0x00000118, 0x0000011B, 0x0004003D, 0x00000015, 0x0000011D, 0x00000113, +0x00050041, 0x00000007, 0x0000011E, 0x000000FB, 0x0000004C, 0x0004003D, 0x00000006, 0x0000011F, +0x0000011E, 0x0005008E, 0x00000015, 0x00000120, 0x0000011D, 0x0000011F, 0x0004003D, 0x00000015, +0x00000121, 0x00000118, 0x00050041, 0x00000007, 0x00000122, 0x000000FB, 0x0000004F, 0x0004003D, +0x00000006, 0x00000123, 0x00000122, 0x0005008E, 0x00000015, 0x00000124, 0x00000121, 0x00000123, +0x00050081, 0x00000015, 0x00000125, 0x00000120, 0x00000124, 0x0004003D, 0x00000015, 0x00000126, +0x00000029, 0x00050041, 0x00000007, 0x00000127, 0x000000FB, 0x000000B2, 0x0004003D, 0x00000006, +0x00000128, 0x00000127, 0x0005008E, 0x00000015, 0x00000129, 0x00000126, 0x00000128, 0x00050081, +0x00000015, 0x0000012A, 0x00000125, 0x00000129, 0x0003003E, 0x0000011C, 0x0000012A, 0x0004003D, +0x00000015, 0x0000012B, 0x0000011C, 0x0006000C, 0x00000015, 0x0000012C, 0x00000001, 0x00000045, +0x0000012B, 0x000200FE, 0x0000012C, 0x00010038, + }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRfragspv.hpp index 19f56a66f..5eb8c4fa8 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRfragspv.hpp @@ -3,1144 +3,1521 @@ #include #include -constexpr uint32_t spirv_ForwardPBRfragspv_size = 36396; -constexpr std::array spirv_ForwardPBRfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x000005D7, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_ForwardPBRfragspv_size = 48476; +constexpr std::array spirv_ForwardPBRfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x000007C3, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0008000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x000000A3, 0x0000018C, 0x0000047E, +0x0008000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x000001FE, 0x0000059F, 0x00000666, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, -0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000B, -0x61476544, 0x28616D6D, 0x3B336676, 0x00000000, 0x00040005, 0x0000000A, 0x6F6C6F63, 0x00007275, -0x00060005, 0x00000011, 0x61476544, 0x28616D6D, 0x3B346676, 0x00000000, 0x00040005, 0x00000010, -0x6F6C6F63, 0x00007275, 0x00050005, 0x00000014, 0x41746547, 0x6465626C, 0x0000286F, 0x00060005, -0x00000017, 0x4D746547, 0x6C617465, 0x2863696C, 0x00000000, 0x00060005, 0x0000001A, 0x52746547, -0x6867756F, 0x7373656E, 0x00000028, 0x00040005, 0x0000001C, 0x41746547, 0x0000284F, 0x00070005, -0x0000001F, 0x45746547, 0x7373696D, 0x28657669, 0x3B336676, 0x00000000, 0x00040005, 0x0000001E, -0x65626C61, 0x00006F64, 0x00070005, 0x00000021, 0x4E746547, 0x616D726F, 0x6F72466C, 0x70614D6D, -0x00000028, 0x00050005, 0x00000027, 0x73696F4E, 0x66762865, 0x00003B32, 0x00030005, 0x00000026, -0x00006F63, 0x00090005, 0x00000030, 0x65676F56, 0x7369446C, 0x6D61536B, 0x28656C70, 0x693B3169, -0x31663B31, 0x0000003B, 0x00050005, 0x0000002D, 0x706D6173, 0x6E49656C, 0x00786564, 0x00060005, -0x0000002E, 0x706D6173, 0x4373656C, 0x746E756F, 0x00000000, 0x00030005, 0x0000002F, 0x00696870, -0x00090005, 0x00000036, 0x53746547, 0x6F646168, 0x61694277, 0x66762873, 0x66763B33, 0x31693B33, -0x0000003B, 0x00060005, 0x00000033, 0x6867696C, 0x72694474, 0x69746365, 0x00006E6F, 0x00040005, -0x00000034, 0x6D726F6E, 0x00006C61, 0x00050005, 0x00000035, 0x64616873, 0x6E49776F, 0x00786564, -0x00100005, 0x00000043, 0x53464350, 0x6F646168, 0x72694477, 0x69746365, 0x6C616E6F, 0x6867694C, -0x41732874, 0x763B3132, 0x663B3466, 0x66763B31, 0x66763B33, 0x66763B33, 0x31693B33, 0x0000003B, -0x00050005, 0x0000003C, 0x64616873, 0x614D776F, 0x00000070, 0x00060005, 0x0000003D, 0x64616873, -0x6F43776F, 0x7364726F, 0x00000000, 0x00050005, 0x0000003E, 0x61527675, 0x73756964, 0x00000000, -0x00060005, 0x0000003F, 0x6867696C, 0x72694474, 0x69746365, 0x00006E6F, 0x00040005, 0x00000040, -0x6D726F6E, 0x00006C61, 0x00040005, 0x00000041, 0x6F507377, 0x00000073, 0x00060005, 0x00000042, -0x63736163, 0x49656461, 0x7865646E, 0x00000000, 0x00090005, 0x00000047, 0x636C6143, 0x74616C75, -0x73614365, 0x65646163, 0x65646E49, 0x66762878, 0x00003B33, 0x00040005, 0x00000046, 0x6F507377, -0x00000073, 0x000A0005, 0x0000004E, 0x636C6143, 0x74616C75, 0x61685365, 0x28776F64, 0x3B336676, -0x763B3169, 0x763B3366, 0x003B3366, 0x00040005, 0x0000004A, 0x6F507377, 0x00000073, 0x00060005, -0x0000004B, 0x63736163, 0x49656461, 0x7865646E, 0x00000000, 0x00060005, 0x0000004C, 0x6867696C, -0x72694474, 0x69746365, 0x00006E6F, 0x00040005, 0x0000004D, 0x6D726F6E, 0x00006C61, 0x00060005, -0x00000053, 0x4766646E, 0x66285847, 0x31663B31, 0x0000003B, 0x00040005, 0x00000051, 0x4C736F63, -0x00000068, 0x00050005, 0x00000052, 0x67756F72, 0x73656E68, 0x00000073, 0x00070005, 0x00000057, -0x63536167, 0x63696C68, 0x2831476B, 0x663B3166, 0x00003B31, 0x00050005, 0x00000055, 0x54736F63, -0x61746568, 0x00000000, 0x00030005, 0x00000056, 0x0000006B, 0x00080005, 0x0000005D, 0x63536167, -0x63696C68, 0x5847476B, 0x3B316628, 0x663B3166, 0x00003B31, 0x00040005, 0x0000005A, 0x4C736F63, -0x00000069, 0x00040005, 0x0000005B, 0x746F644E, 0x00000056, 0x00050005, 0x0000005C, 0x67756F72, -0x73656E68, 0x00000073, 0x000B0005, 0x00000063, 0x73657266, 0x536C656E, 0x696C6863, 0x6F526B63, -0x6E686775, 0x28737365, 0x3B336676, 0x663B3166, 0x00003B31, 0x00030005, 0x00000060, 0x00003046, -0x00050005, 0x00000061, 0x54736F63, 0x61746568, 0x00000000, 0x00050005, 0x00000062, 0x67756F72, -0x73656E68, 0x00000073, 0x00050005, 0x00000065, 0x6574614D, 0x6C616972, 0x00000000, 0x00050006, -0x00000065, 0x00000000, 0x65626C41, 0x00006F64, 0x00060006, 0x00000065, 0x00000001, 0x6174654D, -0x63696C6C, 0x00000000, 0x00060006, 0x00000065, 0x00000002, 0x67756F52, 0x73656E68, 0x00000073, -0x00060006, 0x00000065, 0x00000003, 0x73696D45, 0x65766973, 0x00000000, 0x00050006, 0x00000065, -0x00000004, 0x6D726F4E, 0x00006C61, 0x00040006, 0x00000065, 0x00000005, 0x00004F41, 0x00050006, -0x00000065, 0x00000006, 0x77656956, 0x00000000, 0x00050006, 0x00000065, 0x00000007, 0x746F444E, -0x00000056, 0x00120005, 0x0000006B, 0x6867694C, 0x676E6974, 0x33667628, 0x3366763B, 0x7274733B, -0x2D746375, 0x6574614D, 0x6C616972, 0x3466762D, 0x3366762D, 0x2D31662D, 0x2D336676, 0x2D336676, -0x762D3166, 0x662D3366, 0x003B3131, 0x00030005, 0x00000068, 0x00003046, 0x00040005, 0x00000069, -0x6F507377, 0x00000073, 0x00050005, 0x0000006A, 0x6574616D, 0x6C616972, 0x00000000, 0x00110005, -0x00000070, 0x284C4249, 0x3B336676, 0x3B336676, 0x75727473, 0x4D2D7463, 0x72657461, 0x2D6C6169, -0x2D346676, 0x2D336676, 0x762D3166, 0x762D3366, 0x662D3366, 0x66762D31, 0x31662D33, 0x00003B31, -0x00030005, 0x0000006D, 0x00003046, 0x00030005, 0x0000006E, 0x0000724C, 0x00050005, 0x0000006F, -0x6574616D, 0x6C616972, 0x00000000, 0x00050005, 0x00000073, 0x64616853, 0x6146776F, 0x00006564, -0x00030005, 0x00000075, 0x00494850, 0x00040005, 0x0000007D, 0x61726170, 0x0000006D, 0x00070005, -0x0000008B, 0x66696E55, 0x4D6D726F, 0x72657461, 0x446C6169, 0x00617461, 0x00070006, 0x0000008B, -0x00000000, 0x65626C41, 0x6F436F64, 0x72756F6C, 0x00000000, 0x00060006, 0x0000008B, 0x00000001, -0x67756F52, 0x73656E68, 0x00000073, 0x00060006, 0x0000008B, 0x00000002, 0x6174654D, 0x63696C6C, -0x00000000, 0x00060006, 0x0000008B, 0x00000003, 0x73696D45, 0x65766973, 0x00000000, 0x00070006, -0x0000008B, 0x00000004, 0x65626C41, 0x614D6F64, 0x63614670, 0x00726F74, 0x00080006, 0x0000008B, -0x00000005, 0x6174654D, 0x63696C6C, 0x4670614D, 0x6F746361, 0x00000072, 0x00080006, 0x0000008B, -0x00000006, 0x67756F52, 0x73656E68, 0x70614D73, 0x74636146, 0x0000726F, 0x00070006, 0x0000008B, -0x00000007, 0x6D726F4E, 0x614D6C61, 0x63614670, 0x00726F74, 0x00080006, 0x0000008B, 0x00000008, -0x73696D45, 0x65766973, 0x4670614D, 0x6F746361, 0x00000072, 0x00060006, 0x0000008B, 0x00000009, -0x614D4F41, 0x63614670, 0x00726F74, 0x00060006, 0x0000008B, 0x0000000A, 0x68706C41, 0x74754361, -0x0066664F, 0x00060006, 0x0000008B, 0x0000000B, 0x6B726F77, 0x776F6C66, 0x00000000, 0x00050006, -0x0000008B, 0x0000000C, 0x64646170, 0x00676E69, 0x00070005, 0x0000008D, 0x6574616D, 0x6C616972, -0x706F7250, 0x69747265, 0x00007365, 0x00050005, 0x0000009D, 0x6C415F75, 0x6F646562, 0x0070614D, -0x00050005, 0x000000A1, 0x74726556, 0x61447865, 0x00006174, 0x00050006, 0x000000A1, 0x00000000, -0x6F6C6F43, 0x00007275, 0x00060006, 0x000000A1, 0x00000001, 0x43786554, 0x64726F6F, 0x00000000, -0x00060006, 0x000000A1, 0x00000002, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00050006, 0x000000A1, -0x00000003, 0x6D726F4E, 0x00006C61, 0x00050006, 0x000000A1, 0x00000004, 0x676E6154, 0x00746E65, -0x00070006, 0x000000A1, 0x00000005, 0x64616853, 0x614D776F, 0x6F6F4370, 0x00736472, 0x00060005, -0x000000A3, 0x74726556, 0x754F7865, 0x74757074, 0x00000000, 0x00040005, 0x000000A9, 0x61726170, -0x0000006D, 0x00060005, 0x000000B9, 0x654D5F75, 0x6C6C6174, 0x614D6369, 0x00000070, 0x00060005, -0x000000CD, 0x6F525F75, 0x6E686775, 0x4D737365, 0x00007061, 0x00040005, 0x000000DE, 0x4F415F75, -0x0070614D, 0x00060005, 0x000000F0, 0x6D455F75, 0x69737369, 0x614D6576, 0x00000070, 0x00040005, -0x000000F5, 0x61726170, 0x0000006D, 0x00060005, 0x00000109, 0x676E6174, 0x4E746E65, 0x616D726F, -0x0000006C, 0x00050005, 0x0000010A, 0x6F4E5F75, 0x6C616D72, 0x0070614D, 0x00030005, 0x00000114, -0x0000004E, 0x00030005, 0x00000118, 0x00000054, 0x00030005, 0x0000011C, 0x00000042, 0x00030005, -0x00000123, 0x004E4254, 0x00050005, 0x00000146, 0x646C6F47, 0x6E416E65, 0x00656C67, 0x00030005, -0x00000148, 0x00000072, 0x00040005, 0x00000152, 0x74656874, 0x00000061, 0x00040005, 0x00000159, -0x656E6973, 0x00000000, 0x00040005, 0x0000015C, 0x69736F63, 0x0000656E, 0x00040005, 0x00000168, -0x426E696D, 0x00736169, 0x00040005, 0x00000169, 0x6867694C, 0x00000074, 0x00050006, 0x00000169, -0x00000000, 0x6F6C6F63, 0x00007275, 0x00060006, 0x00000169, 0x00000001, 0x69736F70, 0x6E6F6974, -0x00000000, 0x00060006, 0x00000169, 0x00000002, 0x65726964, 0x6F697463, 0x0000006E, 0x00060006, -0x00000169, 0x00000003, 0x65746E69, 0x7469736E, 0x00000079, 0x00050006, 0x00000169, 0x00000004, -0x69646172, 0x00007375, 0x00050006, 0x00000169, 0x00000005, 0x65707974, 0x00000000, 0x00050006, -0x00000169, 0x00000006, 0x6C676E61, 0x00000065, 0x00050005, 0x0000016F, 0x4C4F4255, 0x74686769, -0x00000000, 0x00050006, 0x0000016F, 0x00000000, 0x6867696C, 0x00007374, 0x00070006, 0x0000016F, -0x00000001, 0x64616853, 0x7254776F, 0x66736E61, 0x006D726F, 0x00060006, 0x0000016F, 0x00000002, -0x77656956, 0x7274614D, 0x00007869, 0x00060006, 0x0000016F, 0x00000003, 0x6867694C, 0x65695674, -0x00000077, 0x00060006, 0x0000016F, 0x00000004, 0x73616942, 0x7274614D, 0x00007869, 0x00070006, -0x0000016F, 0x00000005, 0x656D6163, 0x6F506172, 0x69746973, 0x00006E6F, 0x00060006, 0x0000016F, -0x00000006, 0x696C7053, 0x70654474, 0x00736874, 0x00060006, 0x0000016F, 0x00000007, 0x6867694C, -0x7A695374, 0x00000065, 0x00070006, 0x0000016F, 0x00000008, 0x5378614D, 0x6F646168, 0x73694477, -0x00000074, 0x00060006, 0x0000016F, 0x00000009, 0x64616853, 0x6146776F, 0x00006564, 0x00060006, -0x0000016F, 0x0000000A, 0x63736143, 0x46656461, 0x00656461, 0x00060006, 0x0000016F, 0x0000000B, -0x6867694C, 0x756F4374, 0x0000746E, 0x00060006, 0x0000016F, 0x0000000C, 0x64616853, 0x6F43776F, -0x00746E75, 0x00050006, 0x0000016F, 0x0000000D, 0x65646F4D, 0x00000000, 0x00060006, 0x0000016F, -0x0000000E, 0x4D766E45, 0x6F437069, 0x00746E75, 0x00060006, 0x0000016F, 0x0000000F, 0x74696E49, -0x426C6169, 0x00736169, 0x00040006, 0x0000016F, 0x00000010, 0x00003070, 0x00040006, 0x0000016F, -0x00000011, 0x00003170, 0x00040006, 0x0000016F, 0x00000012, 0x00003270, 0x00030005, 0x00000171, -0x006F6275, 0x00040005, 0x00000175, 0x73616962, 0x00000000, 0x00040005, 0x00000181, 0x73616962, -0x00000000, 0x00040005, 0x00000182, 0x61726170, 0x0000006D, 0x00040005, 0x00000184, 0x61726170, -0x0000006D, 0x00040005, 0x00000186, 0x61726170, 0x0000006D, 0x00030005, 0x00000189, 0x006D7573, -0x00040005, 0x0000018A, 0x73696F6E, 0x00000065, 0x00060005, 0x0000018C, 0x465F6C67, 0x43676172, -0x64726F6F, 0x00000000, 0x00040005, 0x0000018D, 0x61726170, 0x0000006D, 0x00030005, 0x00000191, -0x00000069, 0x00040005, 0x00000199, 0x7366666F, 0x00007465, 0x00040005, 0x0000019A, 0x61726170, -0x0000006D, 0x00040005, 0x0000019C, 0x61726170, 0x0000006D, 0x00040005, 0x0000019D, 0x61726170, -0x0000006D, 0x00030005, 0x000001A3, 0x0000007A, 0x00060005, 0x000001C0, 0x63736163, 0x49656461, -0x7865646E, 0x00000000, 0x00040005, 0x000001C1, 0x77656976, 0x00736F50, 0x00030005, 0x000001CB, -0x00000069, 0x00050005, 0x000001E7, 0x64616873, 0x6F43776F, 0x0064726F, 0x00040005, 0x000001F9, -0x5241454E, 0x00000000, 0x00050005, 0x000001FB, 0x61527675, 0x73756964, 0x00000000, 0x00040005, -0x00000206, 0x77656976, 0x00736F50, 0x00060005, 0x0000020F, 0x64616873, 0x6D41776F, 0x746E756F, -0x00000000, 0x00050005, 0x00000210, 0x61685375, 0x4D776F64, 0x00007061, 0x00040005, 0x00000211, -0x61726170, 0x0000006D, 0x00040005, 0x00000213, 0x61726170, 0x0000006D, 0x00040005, 0x00000215, -0x61726170, 0x0000006D, 0x00040005, 0x00000217, 0x61726170, 0x0000006D, 0x00040005, 0x00000219, -0x61726170, 0x0000006D, 0x00040005, 0x0000021B, 0x61726170, 0x0000006D, 0x00040005, 0x00000225, -0x68706C61, 0x00000061, 0x00040005, 0x00000229, 0x68706C61, 0x00715361, 0x00040005, 0x0000022D, -0x6F6E6564, 0x0000006D, 0x00030005, 0x00000248, 0x00000072, 0x00030005, 0x0000024B, 0x0000006B, -0x00040005, 0x00000250, 0x61726170, 0x0000006D, 0x00040005, 0x00000252, 0x61726170, 0x0000006D, -0x00040005, 0x00000255, 0x61726170, 0x0000006D, 0x00040005, 0x00000257, 0x61726170, 0x0000006D, -0x00040005, 0x0000026D, 0x75736572, 0x0000746C, 0x00030005, 0x0000026F, 0x00000069, 0x00040005, -0x0000027A, 0x6867694C, 0x00000074, 0x00050006, 0x0000027A, 0x00000000, 0x6F6C6F63, 0x00007275, -0x00060006, 0x0000027A, 0x00000001, 0x69736F70, 0x6E6F6974, 0x00000000, 0x00060006, 0x0000027A, -0x00000002, 0x65726964, 0x6F697463, 0x0000006E, 0x00060006, 0x0000027A, 0x00000003, 0x65746E69, -0x7469736E, 0x00000079, 0x00050006, 0x0000027A, 0x00000004, 0x69646172, 0x00007375, 0x00050006, -0x0000027A, 0x00000005, 0x65707974, 0x00000000, 0x00050006, 0x0000027A, 0x00000006, 0x6C676E61, -0x00000065, 0x00040005, 0x0000027C, 0x6867696C, 0x00000074, 0x00040005, 0x0000028F, 0x756C6176, -0x00000065, 0x00030005, 0x00000295, 0x0000004C, 0x00040005, 0x0000029B, 0x74736964, 0x00000000, -0x00040005, 0x000002A0, 0x65747461, 0x0000006E, 0x00030005, 0x000002B4, 0x0000004C, 0x00050005, -0x000002BA, 0x6F747563, 0x6E416666, 0x00656C67, 0x00040005, 0x000002BE, 0x74736964, 0x00000000, -0x00040005, 0x000002C3, 0x74656874, 0x00000061, 0x00040005, 0x000002C9, 0x69737065, 0x006E6F6C, -0x00050005, 0x000002CF, 0x65747461, 0x7461756E, 0x006E6F69, 0x00060005, 0x000002E0, 0x63736163, -0x49656461, 0x7865646E, 0x00000000, 0x00040005, 0x000002E1, 0x61726170, 0x0000006D, 0x00040005, -0x000002E4, 0x61726170, 0x0000006D, 0x00040005, 0x000002E6, 0x61726170, 0x0000006D, 0x00040005, -0x000002E8, 0x61726170, 0x0000006D, 0x00040005, 0x000002EC, 0x61726170, 0x0000006D, 0x00030005, -0x000002F0, 0x0000694C, 0x00050005, 0x000002F4, 0x6461724C, 0x636E6169, 0x00000065, 0x00030005, -0x000002FB, 0x0000684C, 0x00040005, 0x00000301, 0x4C736F63, 0x00000069, 0x00040005, 0x00000307, -0x4C736F63, 0x00000068, 0x00030005, 0x0000030D, 0x00000046, 0x00040005, 0x00000313, 0x61726170, -0x0000006D, 0x00040005, 0x00000315, 0x61726170, 0x0000006D, 0x00040005, 0x00000316, 0x61726170, -0x0000006D, 0x00030005, 0x0000031A, 0x00000044, 0x00040005, 0x0000031B, 0x61726170, 0x0000006D, -0x00040005, 0x0000031D, 0x61726170, 0x0000006D, 0x00030005, 0x00000321, 0x00000047, 0x00040005, -0x00000322, 0x61726170, 0x0000006D, 0x00040005, 0x00000324, 0x61726170, 0x0000006D, 0x00040005, -0x00000327, 0x61726170, 0x0000006D, 0x00030005, 0x0000032B, 0x0000646B, 0x00050005, 0x00000333, -0x66666964, 0x42657375, 0x00464452, 0x00060005, 0x00000339, 0x63657073, 0x72616C75, 0x46445242, -0x00000000, 0x00050005, 0x00000360, 0x61727269, 0x6E616964, 0x00006563, 0x00040005, 0x00000364, -0x72724975, 0x0070614D, 0x00040005, 0x0000036A, 0x61726170, 0x0000006D, 0x00030005, 0x0000036D, -0x00000046, 0x00040005, 0x0000036E, 0x61726170, 0x0000006D, 0x00040005, 0x00000370, 0x61726170, -0x0000006D, 0x00040005, 0x00000373, 0x61726170, 0x0000006D, 0x00030005, 0x00000377, 0x0000646B, -0x00050005, 0x0000037F, 0x66666964, 0x49657375, 0x00004C42, 0x00080005, 0x00000385, 0x6E455F75, -0x64615276, 0x636E6169, 0x78655465, 0x6576654C, 0x0000736C, 0x00070005, 0x00000389, 0x63657073, -0x72616C75, 0x61727249, 0x6E616964, 0x00006563, 0x00040005, 0x0000038A, 0x766E4575, 0x0070614D, -0x00040005, 0x00000394, 0x61726170, 0x0000006D, 0x00060005, 0x00000397, 0x63657073, 0x72616C75, -0x46445242, 0x00000000, 0x00050005, 0x00000398, 0x44524275, 0x54554C46, 0x00000000, 0x00050005, -0x000003A1, 0x63657073, 0x72616C75, 0x004C4249, 0x00050005, 0x000003B4, 0x43786574, 0x756F6C6F, -0x00000072, 0x00050005, 0x000003BF, 0x6174656D, 0x63696C6C, 0x00000000, 0x00050005, 0x000003C0, -0x67756F72, 0x73656E68, 0x00000073, 0x00030005, 0x000003CF, 0x00786574, 0x00030005, 0x000003F3, -0x00786574, 0x00050005, 0x00000411, 0x6574616D, 0x6C616972, 0x00000000, 0x00040005, 0x0000041D, -0x61726170, 0x0000006D, 0x00040005, 0x00000423, 0x6F507377, 0x00000073, 0x00060005, 0x00000435, -0x64616873, 0x6944776F, 0x6E617473, 0x00006563, 0x00070005, 0x00000438, 0x6E617274, 0x69746973, -0x69446E6F, 0x6E617473, 0x00006563, 0x00040005, 0x0000043B, 0x77656976, 0x00736F50, 0x00050005, -0x00000444, 0x74736964, 0x65636E61, 0x00000000, 0x00030005, 0x00000452, 0x0000724C, 0x00030005, -0x0000045C, 0x00003046, 0x00070005, 0x00000466, 0x6867696C, 0x6E6F4374, 0x62697274, 0x6F697475, -0x0000006E, 0x00040005, 0x00000467, 0x61726170, 0x0000006D, 0x00040005, 0x00000469, 0x61726170, -0x0000006D, 0x00040005, 0x0000046B, 0x61726170, 0x0000006D, 0x00060005, 0x0000046E, 0x436C6269, -0x72746E6F, 0x74756269, 0x006E6F69, 0x00040005, 0x0000046F, 0x61726170, 0x0000006D, 0x00040005, -0x00000471, 0x61726170, 0x0000006D, 0x00040005, 0x00000473, 0x61726170, 0x0000006D, 0x00050005, -0x00000476, 0x616E6966, 0x6C6F436C, 0x0072756F, 0x00050005, 0x0000047E, 0x4374756F, 0x726F6C6F, -0x00000000, 0x00060005, 0x000004BC, 0x63736163, 0x49656461, 0x7865646E, 0x00000000, 0x00040005, -0x000004BD, 0x61726170, 0x0000006D, 0x00050005, 0x000004DB, 0x41535375, 0x70614D4F, 0x00000000, -0x00050048, 0x0000008B, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000008B, 0x00000001, -0x00000023, 0x00000010, 0x00050048, 0x0000008B, 0x00000002, 0x00000023, 0x00000014, 0x00050048, -0x0000008B, 0x00000003, 0x00000023, 0x00000018, 0x00050048, 0x0000008B, 0x00000004, 0x00000023, -0x0000001C, 0x00050048, 0x0000008B, 0x00000005, 0x00000023, 0x00000020, 0x00050048, 0x0000008B, -0x00000006, 0x00000023, 0x00000024, 0x00050048, 0x0000008B, 0x00000007, 0x00000023, 0x00000028, -0x00050048, 0x0000008B, 0x00000008, 0x00000023, 0x0000002C, 0x00050048, 0x0000008B, 0x00000009, -0x00000023, 0x00000030, 0x00050048, 0x0000008B, 0x0000000A, 0x00000023, 0x00000034, 0x00050048, -0x0000008B, 0x0000000B, 0x00000023, 0x00000038, 0x00050048, 0x0000008B, 0x0000000C, 0x00000023, -0x0000003C, 0x00030047, 0x0000008B, 0x00000002, 0x00040047, 0x0000008D, 0x00000022, 0x00000001, -0x00040047, 0x0000008D, 0x00000021, 0x00000006, 0x00040047, 0x0000009D, 0x00000022, 0x00000001, -0x00040047, 0x0000009D, 0x00000021, 0x00000000, 0x00040047, 0x000000A3, 0x0000001E, 0x00000000, -0x00040047, 0x000000B9, 0x00000022, 0x00000001, 0x00040047, 0x000000B9, 0x00000021, 0x00000001, -0x00040047, 0x000000CD, 0x00000022, 0x00000001, 0x00040047, 0x000000CD, 0x00000021, 0x00000002, -0x00040047, 0x000000DE, 0x00000022, 0x00000001, 0x00040047, 0x000000DE, 0x00000021, 0x00000004, -0x00040047, 0x000000F0, 0x00000022, 0x00000001, 0x00040047, 0x000000F0, 0x00000021, 0x00000005, -0x00040047, 0x0000010A, 0x00000022, 0x00000001, 0x00040047, 0x0000010A, 0x00000021, 0x00000003, -0x00050048, 0x00000169, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000169, 0x00000001, -0x00000023, 0x00000010, 0x00050048, 0x00000169, 0x00000002, 0x00000023, 0x00000020, 0x00050048, -0x00000169, 0x00000003, 0x00000023, 0x00000030, 0x00050048, 0x00000169, 0x00000004, 0x00000023, -0x00000034, 0x00050048, 0x00000169, 0x00000005, 0x00000023, 0x00000038, 0x00050048, 0x00000169, -0x00000006, 0x00000023, 0x0000003C, 0x00040047, 0x0000016B, 0x00000006, 0x00000040, 0x00040047, -0x0000016D, 0x00000006, 0x00000040, 0x00040047, 0x0000016E, 0x00000006, 0x00000010, 0x00050048, -0x0000016F, 0x00000000, 0x00000023, 0x00000000, 0x00040048, 0x0000016F, 0x00000001, 0x00000005, -0x00050048, 0x0000016F, 0x00000001, 0x00000023, 0x00000800, 0x00050048, 0x0000016F, 0x00000001, -0x00000007, 0x00000010, 0x00040048, 0x0000016F, 0x00000002, 0x00000005, 0x00050048, 0x0000016F, -0x00000002, 0x00000023, 0x00000900, 0x00050048, 0x0000016F, 0x00000002, 0x00000007, 0x00000010, -0x00040048, 0x0000016F, 0x00000003, 0x00000005, 0x00050048, 0x0000016F, 0x00000003, 0x00000023, -0x00000940, 0x00050048, 0x0000016F, 0x00000003, 0x00000007, 0x00000010, 0x00040048, 0x0000016F, -0x00000004, 0x00000005, 0x00050048, 0x0000016F, 0x00000004, 0x00000023, 0x00000980, 0x00050048, -0x0000016F, 0x00000004, 0x00000007, 0x00000010, 0x00050048, 0x0000016F, 0x00000005, 0x00000023, -0x000009C0, 0x00050048, 0x0000016F, 0x00000006, 0x00000023, 0x000009D0, 0x00050048, 0x0000016F, -0x00000007, 0x00000023, 0x00000A10, 0x00050048, 0x0000016F, 0x00000008, 0x00000023, 0x00000A14, -0x00050048, 0x0000016F, 0x00000009, 0x00000023, 0x00000A18, 0x00050048, 0x0000016F, 0x0000000A, -0x00000023, 0x00000A1C, 0x00050048, 0x0000016F, 0x0000000B, 0x00000023, 0x00000A20, 0x00050048, -0x0000016F, 0x0000000C, 0x00000023, 0x00000A24, 0x00050048, 0x0000016F, 0x0000000D, 0x00000023, -0x00000A28, 0x00050048, 0x0000016F, 0x0000000E, 0x00000023, 0x00000A2C, 0x00050048, 0x0000016F, -0x0000000F, 0x00000023, 0x00000A30, 0x00050048, 0x0000016F, 0x00000010, 0x00000023, 0x00000A34, -0x00050048, 0x0000016F, 0x00000011, 0x00000023, 0x00000A38, 0x00050048, 0x0000016F, 0x00000012, -0x00000023, 0x00000A3C, 0x00030047, 0x0000016F, 0x00000002, 0x00040047, 0x00000171, 0x00000022, -0x00000002, 0x00040047, 0x00000171, 0x00000021, 0x00000005, 0x00040047, 0x0000018C, 0x0000000B, -0x0000000F, 0x00040047, 0x00000210, 0x00000022, 0x00000002, 0x00040047, 0x00000210, 0x00000021, -0x00000003, 0x00040047, 0x00000364, 0x00000022, 0x00000002, 0x00040047, 0x00000364, 0x00000021, -0x00000002, 0x00040047, 0x0000038A, 0x00000022, 0x00000002, 0x00040047, 0x0000038A, 0x00000021, -0x00000001, 0x00040047, 0x00000398, 0x00000022, 0x00000002, 0x00040047, 0x00000398, 0x00000021, -0x00000000, 0x00040047, 0x0000047E, 0x0000001E, 0x00000000, 0x00040047, 0x000004DB, 0x00000022, -0x00000002, 0x00040047, 0x000004DB, 0x00000021, 0x00000004, 0x00020013, 0x00000002, 0x00030021, -0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, -0x00000003, 0x00040020, 0x00000008, 0x00000007, 0x00000007, 0x00040021, 0x00000009, 0x00000007, -0x00000008, 0x00040017, 0x0000000D, 0x00000006, 0x00000004, 0x00040020, 0x0000000E, 0x00000007, -0x0000000D, 0x00040021, 0x0000000F, 0x0000000D, 0x0000000E, 0x00030021, 0x00000013, 0x0000000D, -0x00030021, 0x00000016, 0x00000007, 0x00030021, 0x00000019, 0x00000006, 0x00040017, 0x00000023, -0x00000006, 0x00000002, 0x00040020, 0x00000024, 0x00000007, 0x00000023, 0x00040021, 0x00000025, -0x00000006, 0x00000024, 0x00040015, 0x00000029, 0x00000020, 0x00000001, 0x00040020, 0x0000002A, -0x00000007, 0x00000029, 0x00040020, 0x0000002B, 0x00000007, 0x00000006, 0x00060021, 0x0000002C, -0x00000023, 0x0000002A, 0x0000002A, 0x0000002B, 0x00060021, 0x00000032, 0x00000006, 0x00000008, -0x00000008, 0x0000002A, 0x00090019, 0x00000038, 0x00000006, 0x00000001, 0x00000000, 0x00000001, -0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000039, 0x00000038, 0x00040020, 0x0000003A, -0x00000000, 0x00000039, 0x000A0021, 0x0000003B, 0x00000006, 0x0000003A, 0x0000000E, 0x0000002B, -0x00000008, 0x00000008, 0x00000008, 0x0000002A, 0x00040021, 0x00000045, 0x00000029, 0x00000008, -0x00070021, 0x00000049, 0x00000006, 0x00000008, 0x0000002A, 0x00000008, 0x00000008, 0x00050021, -0x00000050, 0x00000006, 0x0000002B, 0x0000002B, 0x00060021, 0x00000059, 0x00000006, 0x0000002B, -0x0000002B, 0x0000002B, 0x00060021, 0x0000005F, 0x00000007, 0x00000008, 0x0000002B, 0x0000002B, -0x000A001E, 0x00000065, 0x0000000D, 0x00000007, 0x00000006, 0x00000007, 0x00000007, 0x00000006, -0x00000007, 0x00000006, 0x00040020, 0x00000066, 0x00000007, 0x00000065, 0x00060021, 0x00000067, -0x00000007, 0x00000008, 0x00000008, 0x00000066, 0x00040020, 0x00000072, 0x00000006, 0x00000006, -0x0004003B, 0x00000072, 0x00000073, 0x00000006, 0x0004002B, 0x00000006, 0x00000074, 0x3F800000, -0x0004003B, 0x00000072, 0x00000075, 0x00000006, 0x0004002B, 0x00000006, 0x00000076, 0x3FCF1BBD, -0x0004002B, 0x00000006, 0x00000078, 0x400CCCCD, 0x0006002C, 0x00000007, 0x00000079, 0x00000078, -0x00000078, 0x00000078, 0x00040015, 0x00000081, 0x00000020, 0x00000000, 0x0004002B, 0x00000081, -0x00000082, 0x00000003, 0x000F001E, 0x0000008B, 0x0000000D, 0x00000006, 0x00000006, 0x00000006, -0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, -0x00000006, 0x00040020, 0x0000008C, 0x00000002, 0x0000008B, 0x0004003B, 0x0000008C, 0x0000008D, -0x00000002, 0x0004002B, 0x00000029, 0x0000008E, 0x00000004, 0x00040020, 0x0000008F, 0x00000002, -0x00000006, 0x0004002B, 0x00000029, 0x00000093, 0x00000000, 0x00040020, 0x00000094, 0x00000002, -0x0000000D, 0x00090019, 0x0000009A, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, -0x00000001, 0x00000000, 0x0003001B, 0x0000009B, 0x0000009A, 0x00040020, 0x0000009C, 0x00000000, -0x0000009B, 0x0004003B, 0x0000009C, 0x0000009D, 0x00000000, 0x0004002B, 0x00000081, 0x0000009F, -0x00000004, 0x0004001C, 0x000000A0, 0x0000000D, 0x0000009F, 0x0008001E, 0x000000A1, 0x00000007, -0x00000023, 0x0000000D, 0x00000007, 0x00000007, 0x000000A0, 0x00040020, 0x000000A2, 0x00000001, -0x000000A1, 0x0004003B, 0x000000A2, 0x000000A3, 0x00000001, 0x0004002B, 0x00000029, 0x000000A4, -0x00000001, 0x00040020, 0x000000A5, 0x00000001, 0x00000023, 0x0004002B, 0x00000029, 0x000000AF, -0x00000005, 0x0004002B, 0x00000029, 0x000000B3, 0x00000002, 0x0004003B, 0x0000009C, 0x000000B9, -0x00000000, 0x0004002B, 0x00000029, 0x000000C4, 0x00000006, 0x0004003B, 0x0000009C, 0x000000CD, -0x00000000, 0x0004002B, 0x00000081, 0x000000D2, 0x00000000, 0x0004002B, 0x00000029, 0x000000D8, -0x00000009, 0x0004003B, 0x0000009C, 0x000000DE, 0x00000000, 0x0004002B, 0x00000029, 0x000000E8, -0x00000003, 0x0004002B, 0x00000029, 0x000000ED, 0x00000008, 0x0004003B, 0x0000009C, 0x000000F0, -0x00000000, 0x0004002B, 0x00000029, 0x000000FC, 0x00000007, 0x0004002B, 0x00000006, 0x000000FF, -0x3DCCCCCD, 0x00020014, 0x00000100, 0x00040020, 0x00000104, 0x00000001, 0x00000007, 0x0004003B, -0x0000009C, 0x0000010A, 0x00000000, 0x0004002B, 0x00000006, 0x00000110, 0x40000000, 0x00040018, -0x00000121, 0x00000007, 0x00000003, 0x00040020, 0x00000122, 0x00000007, 0x00000121, 0x0004002B, -0x00000006, 0x00000127, 0x00000000, 0x0004002B, 0x00000006, 0x0000013C, 0x414FD639, 0x0004002B, -0x00000006, 0x0000013D, 0x429C774C, 0x0005002C, 0x00000023, 0x0000013E, 0x0000013C, 0x0000013D, -0x0004002B, 0x00000006, 0x00000141, 0x472AEE8C, 0x0004002B, 0x00000006, 0x00000147, 0x4019999A, -0x0004002B, 0x00000006, 0x0000014B, 0x3F000000, 0x0009001E, 0x00000169, 0x0000000D, 0x0000000D, -0x0000000D, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x0004002B, 0x00000081, 0x0000016A, -0x00000020, 0x0004001C, 0x0000016B, 0x00000169, 0x0000016A, 0x00040018, 0x0000016C, 0x0000000D, -0x00000004, 0x0004001C, 0x0000016D, 0x0000016C, 0x0000009F, 0x0004001C, 0x0000016E, 0x0000000D, -0x0000009F, 0x0015001E, 0x0000016F, 0x0000016B, 0x0000016D, 0x0000016C, 0x0000016C, 0x0000016C, -0x0000000D, 0x0000016E, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000029, 0x00000029, -0x00000029, 0x00000029, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00040020, 0x00000170, -0x00000002, 0x0000016F, 0x0004003B, 0x00000170, 0x00000171, 0x00000002, 0x0004002B, 0x00000029, -0x00000172, 0x0000000F, 0x00040020, 0x0000018B, 0x00000001, 0x0000000D, 0x0004003B, 0x0000018B, -0x0000018C, 0x00000001, 0x0004002B, 0x00000006, 0x000001A0, 0x442F0000, 0x0004002B, 0x00000081, -0x000001B0, 0x00000002, 0x0004002B, 0x00000006, 0x000001BC, 0x41000000, 0x00040020, 0x000001C2, -0x00000002, 0x0000016C, 0x0004002B, 0x00000029, 0x000001D2, 0x0000000C, 0x00040020, 0x000001D3, -0x00000002, 0x00000029, 0x0004002B, 0x00000006, 0x000001FA, 0x3C23D70A, 0x0004002B, 0x00000006, -0x00000204, 0x3B03126F, 0x0004003B, 0x0000003A, 0x00000210, 0x00000000, 0x0004002B, 0x00000006, -0x00000236, 0x40490FDB, 0x0004002B, 0x00000006, 0x00000267, 0x40A00000, 0x0006002C, 0x00000007, -0x0000026E, 0x00000127, 0x00000127, 0x00000127, 0x0004002B, 0x00000029, 0x00000276, 0x0000000B, -0x0009001E, 0x0000027A, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000006, 0x00000006, 0x00000006, -0x00000006, 0x00040020, 0x0000027B, 0x00000007, 0x0000027A, 0x00040020, 0x0000027E, 0x00000002, -0x00000169, 0x0004002B, 0x00000006, 0x000002CC, 0x3F666666, 0x0004002B, 0x00000006, 0x0000033F, -0x3727C5AC, 0x0004002B, 0x00000006, 0x00000340, 0x40800000, 0x0004002B, 0x00000006, 0x0000034A, -0x41200000, 0x0006002C, 0x00000007, 0x0000034B, 0x0000034A, 0x0000034A, 0x0000034A, 0x00090019, -0x00000361, 0x00000006, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, -0x0003001B, 0x00000362, 0x00000361, 0x00040020, 0x00000363, 0x00000000, 0x00000362, 0x0004003B, -0x00000363, 0x00000364, 0x00000000, 0x0004002B, 0x00000029, 0x00000386, 0x0000000E, 0x0004003B, -0x00000363, 0x0000038A, 0x00000000, 0x0004003B, 0x0000009C, 0x00000398, 0x00000000, 0x0004002B, -0x00000081, 0x000003A7, 0x00000001, 0x0004002B, 0x00000029, 0x000003B8, 0x0000000A, 0x0004002B, -0x00000006, 0x0000045D, 0x3D23D70A, 0x0006002C, 0x00000007, 0x0000045E, 0x0000045D, 0x0000045D, -0x0000045D, 0x00040020, 0x0000047D, 0x00000003, 0x0000000D, 0x0004003B, 0x0000047D, 0x0000047E, -0x00000003, 0x0004002B, 0x00000029, 0x00000484, 0x0000000D, 0x0004002B, 0x00000006, 0x000004C7, -0x3F4CCCCD, 0x0004002B, 0x00000006, 0x000004C8, 0x3E4CCCCD, 0x0007002C, 0x0000000D, 0x000004C9, -0x000004C7, 0x000004C8, 0x000004C8, 0x00000074, 0x0007002C, 0x0000000D, 0x000004CD, 0x000004C8, -0x000004C7, 0x000004C8, 0x00000074, 0x0007002C, 0x0000000D, 0x000004D1, 0x000004C8, 0x000004C8, -0x000004C7, 0x00000074, 0x0007002C, 0x0000000D, 0x000004D5, 0x000004C7, 0x000004C7, 0x000004C8, -0x00000074, 0x0004003B, 0x0000009C, 0x000004DB, 0x00000000, 0x0007002C, 0x0000000D, 0x000004DC, -0x0000014B, 0x00000127, 0x00000127, 0x0000014B, 0x0007002C, 0x0000000D, 0x000004DD, 0x00000127, -0x0000014B, 0x00000127, 0x0000014B, 0x0007002C, 0x0000000D, 0x000004DE, 0x00000127, 0x00000127, -0x00000074, 0x00000127, 0x0007002C, 0x0000000D, 0x000004DF, 0x00000127, 0x00000127, 0x00000127, -0x00000074, 0x0007002C, 0x0000016C, 0x000004E0, 0x000004DC, 0x000004DD, 0x000004DE, 0x000004DF, -0x0004002B, 0x00000081, 0x000004E1, 0x00000010, 0x0004001C, 0x000004E2, 0x00000023, 0x000004E1, -0x0004002B, 0x00000006, 0x000004E3, 0xBF7127FA, 0x0004002B, 0x00000006, 0x000004E4, 0xBECC51E0, -0x0005002C, 0x00000023, 0x000004E5, 0x000004E3, 0x000004E4, 0x0004002B, 0x00000006, 0x000004E6, -0x3F7211EE, 0x0004002B, 0x00000006, 0x000004E7, 0xBF44D71B, 0x0005002C, 0x00000023, 0x000004E8, -0x000004E6, 0x000004E7, 0x0004002B, 0x00000006, 0x000004E9, 0xBDC0E398, 0x0004002B, 0x00000006, -0x000004EA, 0xBF6DEC6B, 0x0005002C, 0x00000023, 0x000004EB, 0x000004E9, 0x000004EA, 0x0004002B, -0x00000006, 0x000004EC, 0x3EB09E84, 0x0004002B, 0x00000006, 0x000004ED, 0x3E967720, 0x0005002C, -0x00000023, 0x000004EE, 0x000004EC, 0x000004ED, 0x0004002B, 0x00000006, 0x000004EF, 0xBF6A777E, -0x0004002B, 0x00000006, 0x000004F0, 0x3EEA5988, 0x0005002C, 0x00000023, 0x000004F1, 0x000004EF, -0x000004F0, 0x0004002B, 0x00000006, 0x000004F2, 0xBF50C0D4, 0x0004002B, 0x00000006, 0x000004F3, -0xBF610E50, 0x0005002C, 0x00000023, 0x000004F4, 0x000004F2, 0x000004F3, 0x0004002B, 0x00000006, -0x000004F5, 0xBEC3FB24, 0x0004002B, 0x00000006, 0x000004F6, 0x3E8DB498, 0x0005002C, 0x00000023, -0x000004F7, 0x000004F5, 0x000004F6, 0x0004002B, 0x00000006, 0x000004F8, 0x3F798F60, 0x0004002B, -0x00000006, 0x000004F9, 0x3F41A8EC, 0x0005002C, 0x00000023, 0x000004FA, 0x000004F8, 0x000004F9, -0x0004002B, 0x00000006, 0x000004FB, 0x3EE2EF78, 0x0004002B, 0x00000006, 0x000004FC, 0xBF79A12C, -0x0005002C, 0x00000023, 0x000004FD, 0x000004FB, 0x000004FC, 0x0004002B, 0x00000006, 0x000004FE, -0x3F099500, 0x0004002B, 0x00000006, 0x000004FF, 0xBEF28D4A, 0x0005002C, 0x00000023, 0x00000500, -0x000004FE, 0x000004FF, 0x0004002B, 0x00000006, 0x00000501, 0xBE87AA08, 0x0004002B, 0x00000006, -0x00000502, 0xBED67E06, 0x0005002C, 0x00000023, 0x00000503, 0x00000501, 0x00000502, 0x0004002B, -0x00000006, 0x00000504, 0x3F4ABEE2, 0x0004002B, 0x00000006, 0x00000505, 0x3E437BC8, 0x0005002C, -0x00000023, 0x00000506, 0x00000504, 0x00000505, 0x0004002B, 0x00000006, 0x00000507, 0xBE77B198, -0x0004002B, 0x00000006, 0x00000508, 0x3F7F3FA8, 0x0005002C, 0x00000023, 0x00000509, 0x00000507, -0x00000508, 0x0004002B, 0x00000006, 0x0000050A, 0xBF5068D4, 0x0004002B, 0x00000006, 0x0000050B, -0x3F6A148A, 0x0005002C, 0x00000023, 0x0000050C, 0x0000050A, 0x0000050B, 0x0004002B, 0x00000006, -0x0000050D, 0x3E4CA330, 0x0004002B, 0x00000006, 0x0000050E, 0x3F495268, 0x0005002C, 0x00000023, -0x0000050F, 0x0000050D, 0x0000050E, 0x0004002B, 0x00000006, 0x00000510, 0x3E134898, 0x0004002B, -0x00000006, 0x00000511, 0xBE106460, 0x0005002C, 0x00000023, 0x00000512, 0x00000510, 0x00000511, -0x0013002C, 0x000004E2, 0x00000513, 0x000004E5, 0x000004E8, 0x000004EB, 0x000004EE, 0x000004F1, -0x000004F4, 0x000004F7, 0x000004FA, 0x000004FD, 0x00000500, 0x00000503, 0x00000506, 0x00000509, -0x0000050C, 0x0000050F, 0x00000512, 0x0004002B, 0x00000081, 0x00000514, 0x00000040, 0x0004001C, -0x00000515, 0x00000023, 0x00000514, 0x0004002B, 0x00000006, 0x00000516, 0xBF625322, 0x0004002B, -0x00000006, 0x00000517, 0x3DFEF391, 0x0005002C, 0x00000023, 0x00000518, 0x00000516, 0x00000517, -0x0004002B, 0x00000006, 0x00000519, 0xBF36E169, 0x0004002B, 0x00000006, 0x0000051A, 0x3CE4E26D, -0x0005002C, 0x00000023, 0x0000051B, 0x00000519, 0x0000051A, 0x0004002B, 0x00000006, 0x0000051C, -0xBF3F7953, 0x0004002B, 0x00000006, 0x0000051D, 0x3E696463, 0x0005002C, 0x00000023, 0x0000051E, -0x0000051C, 0x0000051D, 0x0004002B, 0x00000006, 0x0000051F, 0xBF708A37, 0x0004002B, 0x00000006, -0x00000520, 0x3E797B31, 0x0005002C, 0x00000023, 0x00000521, 0x0000051F, 0x00000520, 0x0004002B, -0x00000006, 0x00000522, 0xBF7C476F, 0x0004002B, 0x00000006, 0x00000523, 0x3D3A81DC, 0x0005002C, -0x00000023, 0x00000524, 0x00000522, 0x00000523, 0x0004002B, 0x00000006, 0x00000525, 0xBF5C828C, -0x0004002B, 0x00000006, 0x00000526, 0xBE0B7DC8, 0x0005002C, 0x00000023, 0x00000527, 0x00000525, -0x00000526, 0x0004002B, 0x00000006, 0x00000528, 0xBF61C66D, 0x0004002B, 0x00000006, 0x00000529, -0x3ECB3786, 0x0005002C, 0x00000023, 0x0000052A, 0x00000528, 0x00000529, 0x0004002B, 0x00000006, -0x0000052B, 0xBEEF127F, 0x0004002B, 0x00000006, 0x0000052C, 0x3C6DFE76, 0x0005002C, 0x00000023, -0x0000052D, 0x0000052B, 0x0000052C, 0x0004002B, 0x00000006, 0x0000052E, 0xBF0EE6A7, 0x0004002B, -0x00000006, 0x0000052F, 0x3E59C411, 0x0005002C, 0x00000023, 0x00000530, 0x0000052E, 0x0000052F, -0x0004002B, 0x00000006, 0x00000531, 0xBF14151A, 0x0004002B, 0x00000006, 0x00000532, 0xBDC43E53, -0x0005002C, 0x00000023, 0x00000533, 0x00000531, 0x00000532, 0x0004002B, 0x00000006, 0x00000534, -0xBF3D8213, 0x0004002B, 0x00000006, 0x00000535, 0xBDC3DA30, 0x0005002C, 0x00000023, 0x00000536, -0x00000534, 0x00000535, 0x0004002B, 0x00000006, 0x00000537, 0xBF406E2B, 0x0004002B, 0x00000006, -0x00000538, 0x3EF1F927, 0x0005002C, 0x00000023, 0x00000539, 0x00000537, 0x00000538, 0x0004002B, -0x00000006, 0x0000053A, 0xBF0D9B0B, 0x0004002B, 0x00000006, 0x0000053B, 0xBE790364, 0x0005002C, -0x00000023, 0x0000053C, 0x0000053A, 0x0000053B, 0x0004002B, 0x00000006, 0x0000053D, 0xBF2CBD34, -0x0004002B, 0x00000006, 0x0000053E, 0xBEA95571, 0x0005002C, 0x00000023, 0x0000053F, 0x0000053D, -0x0000053E, 0x0004002B, 0x00000006, 0x00000540, 0xBECE3737, 0x0004002B, 0x00000006, 0x00000541, -0xBDFA08C0, 0x0005002C, 0x00000023, 0x00000542, 0x00000540, 0x00000541, 0x0004002B, 0x00000006, -0x00000543, 0xBEA3B9AE, 0x0004002B, 0x00000006, 0x00000544, 0xBE9FD439, 0x0005002C, 0x00000023, -0x00000545, 0x00000543, 0x00000544, 0x0004002B, 0x00000006, 0x00000546, 0xBED3EDB7, 0x0004002B, -0x00000006, 0x00000547, 0xBEE127D4, 0x0005002C, 0x00000023, 0x00000548, 0x00000546, 0x00000547, -0x0004002B, 0x00000006, 0x00000549, 0xBF7AA9C5, 0x0004002B, 0x00000006, 0x0000054A, 0xBE4E132B, -0x0005002C, 0x00000023, 0x0000054B, 0x00000549, 0x0000054A, 0x0004002B, 0x00000006, 0x0000054C, -0xBF5D9696, 0x0004002B, 0x00000006, 0x0000054D, 0xBE93CFD5, 0x0005002C, 0x00000023, 0x0000054E, -0x0000054C, 0x0000054D, 0x0004002B, 0x00000006, 0x0000054F, 0xBE798D8B, 0x0004002B, 0x00000006, -0x00000550, 0xBE3ED9E0, 0x0005002C, 0x00000023, 0x00000551, 0x0000054F, 0x00000550, 0x0004002B, -0x00000006, 0x00000552, 0xBE96FFC1, 0x0004002B, 0x00000006, 0x00000553, 0xBD645804, 0x0005002C, -0x00000023, 0x00000554, 0x00000552, 0x00000553, 0x0004002B, 0x00000006, 0x00000555, 0xBF1ABD5E, -0x0004002B, 0x00000006, 0x00000556, 0xBF0B5409, 0x0005002C, 0x00000023, 0x00000557, 0x00000555, -0x00000556, 0x0004002B, 0x00000006, 0x00000558, 0xBED60B70, 0x0004002B, 0x00000006, 0x00000559, -0xBF167222, 0x0005002C, 0x00000023, 0x0000055A, 0x00000558, 0x00000559, 0x0004002B, 0x00000006, -0x0000055B, 0xBF0C957D, 0x0004002B, 0x00000006, 0x0000055C, 0xBED4EDD5, 0x0005002C, 0x00000023, -0x0000055D, 0x0000055B, 0x0000055C, 0x0004002B, 0x00000006, 0x0000055E, 0xBE73CB3E, 0x0004002B, -0x00000006, 0x0000055F, 0xBF1C9C5E, 0x0005002C, 0x00000023, 0x00000560, 0x0000055E, 0x0000055F, -0x0004002B, 0x00000006, 0x00000561, 0xBE88B4C0, 0x0004002B, 0x00000006, 0x00000562, 0xBEEB5E0F, -0x0005002C, 0x00000023, 0x00000563, 0x00000561, 0x00000562, 0x0004002B, 0x00000006, 0x00000564, -0xBDCCCFF2, 0x0004002B, 0x00000006, 0x00000565, 0xBE6A9D62, 0x0005002C, 0x00000023, 0x00000566, -0x00000564, 0x00000565, 0x0004002B, 0x00000006, 0x00000567, 0xBDD0BFA1, 0x0004002B, 0x00000006, -0x00000568, 0xBEC2C16E, 0x0005002C, 0x00000023, 0x00000569, 0x00000567, 0x00000568, 0x0004002B, -0x00000006, 0x0000056A, 0xBF2E749F, 0x0004002B, 0x00000006, 0x0000056B, 0xBF3365DC, 0x0005002C, -0x00000023, 0x0000056C, 0x0000056A, 0x0000056B, 0x0004002B, 0x00000006, 0x0000056D, 0xBF4373F3, -0x0004002B, 0x00000006, 0x0000056E, 0xBF0B1B58, 0x0005002C, 0x00000023, 0x0000056F, 0x0000056D, -0x0000056E, 0x0004002B, 0x00000006, 0x00000570, 0xBF0C8D3B, 0x0004002B, 0x00000006, 0x00000571, -0xBF403116, 0x0005002C, 0x00000023, 0x00000572, 0x00000570, 0x00000571, 0x0004002B, 0x00000006, -0x00000573, 0xBF4F1D93, 0x0004002B, 0x00000006, 0x00000574, 0xBED1461B, 0x0005002C, 0x00000023, -0x00000575, 0x00000573, 0x00000574, 0x0004002B, 0x00000006, 0x00000576, 0xBEC6B980, 0x0004002B, -0x00000006, 0x00000577, 0xBF4600B0, 0x0005002C, 0x00000023, 0x00000578, 0x00000576, 0x00000577, -0x0004002B, 0x00000006, 0x00000579, 0xBEDBD945, 0x0004002B, 0x00000006, 0x0000057A, 0xBF6517A4, -0x0005002C, 0x00000023, 0x0000057B, 0x00000579, 0x0000057A, 0x0004002B, 0x00000006, 0x0000057C, -0xBE06C15D, 0x0004002B, 0x00000006, 0x0000057D, 0x3D853D21, 0x0005002C, 0x00000023, 0x0000057E, -0x0000057C, 0x0000057D, 0x0004002B, 0x00000006, 0x0000057F, 0xBE8CCD10, 0x0004002B, 0x00000006, -0x00000580, 0x3DD2C8C5, 0x0005002C, 0x00000023, 0x00000581, 0x0000057F, 0x00000580, 0x0004002B, -0x00000006, 0x00000582, 0xBDD953DF, 0x0004002B, 0x00000006, 0x00000583, 0xBD8BEF07, 0x0005002C, -0x00000023, 0x00000584, 0x00000582, 0x00000583, 0x0004002B, 0x00000006, 0x00000585, 0xBE96D3FA, -0x0004002B, 0x00000006, 0x00000586, 0xBF643A54, 0x0005002C, 0x00000023, 0x00000587, 0x00000585, -0x00000586, 0x0004002B, 0x00000006, 0x00000588, 0xBF21218A, 0x0004002B, 0x00000006, 0x00000589, -0x3EC23F03, 0x0005002C, 0x00000023, 0x0000058A, 0x00000588, 0x00000589, 0x0004002B, 0x00000006, -0x0000058B, 0xBED083FD, 0x0004002B, 0x00000006, 0x0000058C, 0x3EADF373, 0x0005002C, 0x00000023, -0x0000058D, 0x0000058B, 0x0000058C, 0x0004002B, 0x00000006, 0x0000058E, 0x3D92BD3C, 0x0004002B, -0x00000006, 0x0000058F, 0xBEC4C0DF, 0x0005002C, 0x00000023, 0x00000590, 0x0000058E, 0x0000058F, -0x0004002B, 0x00000006, 0x00000591, 0x3CB45F18, 0x0004002B, 0x00000006, 0x00000592, 0xBE870FE0, -0x0005002C, 0x00000023, 0x00000593, 0x00000591, 0x00000592, 0x0004002B, 0x00000006, 0x00000594, -0x3B7E36D2, 0x0004002B, 0x00000006, 0x00000595, 0xBE0B56B8, 0x0005002C, 0x00000023, 0x00000596, -0x00000594, 0x00000595, 0x0004002B, 0x00000006, 0x00000597, 0xBE0CD573, 0x0004002B, 0x00000006, -0x00000598, 0xBF44916D, 0x0005002C, 0x00000023, 0x00000599, 0x00000597, 0x00000598, 0x0004002B, -0x00000006, 0x0000059A, 0xBD506141, 0x0004002B, 0x00000006, 0x0000059B, 0xBF67F413, 0x0005002C, -0x00000023, 0x0000059C, 0x0000059A, 0x0000059B, 0x0004002B, 0x00000006, 0x0000059D, 0x3DE9BE90, -0x0004002B, 0x00000006, 0x0000059E, 0xBD8F77F2, 0x0005002C, 0x00000023, 0x0000059F, 0x0000059D, -0x0000059E, 0x0004002B, 0x00000006, 0x000005A0, 0x3E273BC9, 0x0004002B, 0x00000006, 0x000005A1, -0xBE5E71CE, 0x0005002C, 0x00000023, 0x000005A2, 0x000005A0, 0x000005A1, 0x0004002B, 0x00000006, -0x000005A3, 0xBDCD562A, 0x0004002B, 0x00000006, 0x000005A4, 0xBF1686A5, 0x0005002C, 0x00000023, -0x000005A5, 0x000005A3, 0x000005A4, 0x0004002B, 0x00000006, 0x000005A6, 0xBBA1F080, 0x0004002B, -0x00000006, 0x000005A7, 0x3E006078, 0x0005002C, 0x00000023, 0x000005A8, 0x000005A6, 0x000005A7, -0x0004002B, 0x00000006, 0x000005A9, 0x3D1098D4, 0x0004002B, 0x00000006, 0x000005AA, 0xBF1E8B1A, -0x0005002C, 0x00000023, 0x000005AB, 0x000005A9, 0x000005AA, 0x0004002B, 0x00000006, 0x000005AC, -0x3E48576D, 0x0004002B, 0x00000006, 0x000005AD, 0xBEEB04EE, 0x0005002C, 0x00000023, 0x000005AE, -0x000005AC, 0x000005AD, 0x0004002B, 0x00000006, 0x000005AF, 0x3E9BA1D3, 0x0004002B, 0x00000006, -0x000005B0, 0xBEB1565C, 0x0005002C, 0x00000023, 0x000005B1, 0x000005AF, 0x000005B0, 0x0004002B, -0x00000006, 0x000005B2, 0xBF2D9924, 0x0004002B, 0x00000006, 0x000005B3, 0x3F2F62A6, 0x0005002C, -0x00000023, 0x000005B4, 0x000005B2, 0x000005B3, 0x0004002B, 0x00000006, 0x000005B5, 0xBF20E001, -0x0004002B, 0x00000006, 0x000005B6, 0x3F020AD9, 0x0005002C, 0x00000023, 0x000005B7, 0x000005B5, -0x000005B6, 0x0004002B, 0x00000006, 0x000005B8, 0xBF022B49, 0x0004002B, 0x00000006, 0x000005B9, -0x3EEAE1AC, 0x0005002C, 0x00000023, 0x000005BA, 0x000005B8, 0x000005B9, 0x0004002B, 0x00000006, -0x000005BB, 0x3D039EF1, 0x0004002B, 0x00000006, 0x000005BC, 0xBF48331E, 0x0005002C, 0x00000023, -0x000005BD, 0x000005BB, 0x000005BC, 0x0004002B, 0x00000006, 0x000005BE, 0x3DFB1316, 0x0004002B, -0x00000006, 0x000005BF, 0x3E8F8A6E, 0x0005002C, 0x00000023, 0x000005C0, 0x000005BE, 0x000005BF, -0x0004002B, 0x00000006, 0x000005C1, 0xBD32C301, 0x0004002B, 0x00000006, 0x000005C2, 0x3E9FCE10, -0x0005002C, 0x00000023, 0x000005C3, 0x000005C1, 0x000005C2, 0x0004002B, 0x00000006, 0x000005C4, -0x3E082F51, 0x0004002B, 0x00000006, 0x000005C5, 0x3DAE6D9C, 0x0005002C, 0x00000023, 0x000005C6, -0x000005C4, 0x000005C5, 0x0004002B, 0x00000006, 0x000005C7, 0xBE44B76F, 0x0004002B, 0x00000006, -0x000005C8, 0x3E925AAB, 0x0005002C, 0x00000023, 0x000005C9, 0x000005C7, 0x000005C8, 0x0004002B, -0x00000006, 0x000005CA, 0x3E3C0725, 0x0004002B, 0x00000006, 0x000005CB, 0xBF369707, 0x0005002C, -0x00000023, 0x000005CC, 0x000005CA, 0x000005CB, 0x0004002B, 0x00000006, 0x000005CD, 0x3E87CAEA, -0x0004002B, 0x00000006, 0x000005CE, 0xBF18C261, 0x0005002C, 0x00000023, 0x000005CF, 0x000005CD, -0x000005CE, 0x0004002B, 0x00000006, 0x000005D0, 0xBC1DBEC2, 0x0004002B, 0x00000006, 0x000005D1, -0xBEF75361, 0x0005002C, 0x00000023, 0x000005D2, 0x000005D0, 0x000005D1, 0x0004002B, 0x00000006, -0x000005D3, 0xBC97AEDE, 0x0004002B, 0x00000006, 0x000005D4, 0x3EDF1477, 0x0005002C, 0x00000023, -0x000005D5, 0x000005D3, 0x000005D4, 0x0043002C, 0x00000515, 0x000005D6, 0x00000518, 0x0000051B, -0x0000051E, 0x00000521, 0x00000524, 0x00000527, 0x0000052A, 0x0000052D, 0x00000530, 0x00000533, -0x00000536, 0x00000539, 0x0000053C, 0x0000053F, 0x00000542, 0x00000545, 0x00000548, 0x0000054B, -0x0000054E, 0x00000551, 0x00000554, 0x00000557, 0x0000055A, 0x0000055D, 0x00000560, 0x00000563, -0x00000566, 0x00000569, 0x0000056C, 0x0000056F, 0x00000572, 0x00000575, 0x00000578, 0x0000057B, -0x0000057E, 0x00000581, 0x00000584, 0x00000587, 0x0000058A, 0x0000058D, 0x00000590, 0x00000593, -0x00000596, 0x00000599, 0x0000059C, 0x0000059F, 0x000005A2, 0x000005A5, 0x000005A8, 0x000005AB, -0x000005AE, 0x000005B1, 0x000005B4, 0x000005B7, 0x000005BA, 0x000005BD, 0x000005C0, 0x000005C3, -0x000005C6, 0x000005C9, 0x000005CC, 0x000005CF, 0x000005D2, 0x000005D5, 0x00050036, 0x00000002, -0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x0000000E, 0x000003B4, -0x00000007, 0x0004003B, 0x0000002B, 0x000003BF, 0x00000007, 0x0004003B, 0x0000002B, 0x000003C0, -0x00000007, 0x0004003B, 0x00000008, 0x000003CF, 0x00000007, 0x0004003B, 0x00000008, 0x000003F3, -0x00000007, 0x0004003B, 0x00000066, 0x00000411, 0x00000007, 0x0004003B, 0x00000008, 0x0000041D, -0x00000007, 0x0004003B, 0x00000008, 0x00000423, 0x00000007, 0x0004003B, 0x0000002B, 0x00000435, -0x00000007, 0x0004003B, 0x0000002B, 0x00000438, 0x00000007, 0x0004003B, 0x0000000E, 0x0000043B, -0x00000007, 0x0004003B, 0x0000002B, 0x00000444, 0x00000007, 0x0004003B, 0x00000008, 0x00000452, -0x00000007, 0x0004003B, 0x00000008, 0x0000045C, 0x00000007, 0x0004003B, 0x00000008, 0x00000466, -0x00000007, 0x0004003B, 0x00000008, 0x00000467, 0x00000007, 0x0004003B, 0x00000008, 0x00000469, -0x00000007, 0x0004003B, 0x00000066, 0x0000046B, 0x00000007, 0x0004003B, 0x00000008, 0x0000046E, -0x00000007, 0x0004003B, 0x00000008, 0x0000046F, 0x00000007, 0x0004003B, 0x00000008, 0x00000471, -0x00000007, 0x0004003B, 0x00000066, 0x00000473, 0x00000007, 0x0004003B, 0x00000008, 0x00000476, -0x00000007, 0x0004003B, 0x0000002A, 0x000004BC, 0x00000007, 0x0004003B, 0x00000008, 0x000004BD, -0x00000007, 0x0003003E, 0x00000073, 0x00000074, 0x0003003E, 0x00000075, 0x00000076, 0x00040039, -0x0000000D, 0x000003B5, 0x00000014, 0x0003003E, 0x000003B4, 0x000003B5, 0x00050041, 0x0000002B, -0x000003B6, 0x000003B4, 0x00000082, 0x0004003D, 0x00000006, 0x000003B7, 0x000003B6, 0x00050041, -0x0000008F, 0x000003B9, 0x0000008D, 0x000003B8, 0x0004003D, 0x00000006, 0x000003BA, 0x000003B9, -0x000500B8, 0x00000100, 0x000003BB, 0x000003B7, 0x000003BA, 0x000300F7, 0x000003BD, 0x00000000, -0x000400FA, 0x000003BB, 0x000003BC, 0x000003BD, 0x000200F8, 0x000003BC, 0x000100FC, 0x000200F8, -0x000003BD, 0x0003003E, 0x000003BF, 0x00000127, 0x0003003E, 0x000003C0, 0x00000127, 0x00050041, -0x0000008F, 0x000003C1, 0x0000008D, 0x00000276, 0x0004003D, 0x00000006, 0x000003C2, 0x000003C1, -0x000500B4, 0x00000100, 0x000003C3, 0x000003C2, 0x00000127, 0x000300F7, 0x000003C5, 0x00000000, -0x000400FA, 0x000003C3, 0x000003C4, 0x000003C9, 0x000200F8, 0x000003C4, 0x00040039, 0x00000007, -0x000003C6, 0x00000017, 0x00050051, 0x00000006, 0x000003C7, 0x000003C6, 0x00000000, 0x0003003E, -0x000003BF, 0x000003C7, 0x00040039, 0x00000006, 0x000003C8, 0x0000001A, 0x0003003E, 0x000003C0, -0x000003C8, 0x000200F9, 0x000003C5, 0x000200F8, 0x000003C9, 0x00050041, 0x0000008F, 0x000003CA, -0x0000008D, 0x00000276, 0x0004003D, 0x00000006, 0x000003CB, 0x000003CA, 0x000500B4, 0x00000100, -0x000003CC, 0x000003CB, 0x00000074, 0x000300F7, 0x000003CE, 0x00000000, 0x000400FA, 0x000003CC, -0x000003CD, 0x000003ED, 0x000200F8, 0x000003CD, 0x0004003D, 0x0000009B, 0x000003D0, 0x000000B9, -0x00050041, 0x000000A5, 0x000003D1, 0x000000A3, 0x000000A4, 0x0004003D, 0x00000023, 0x000003D2, -0x000003D1, 0x00050057, 0x0000000D, 0x000003D3, 0x000003D0, 0x000003D2, 0x0008004F, 0x00000007, -0x000003D4, 0x000003D3, 0x000003D3, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000003CF, -0x000003D4, 0x00050041, 0x0000008F, 0x000003D5, 0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, -0x000003D6, 0x000003D5, 0x00050083, 0x00000006, 0x000003D7, 0x00000074, 0x000003D6, 0x00050041, -0x0000008F, 0x000003D8, 0x0000008D, 0x000000B3, 0x0004003D, 0x00000006, 0x000003D9, 0x000003D8, -0x00050085, 0x00000006, 0x000003DA, 0x000003D7, 0x000003D9, 0x00050041, 0x0000008F, 0x000003DB, -0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, 0x000003DC, 0x000003DB, 0x00050041, 0x0000002B, -0x000003DD, 0x000003CF, 0x000001B0, 0x0004003D, 0x00000006, 0x000003DE, 0x000003DD, 0x00050085, -0x00000006, 0x000003DF, 0x000003DC, 0x000003DE, 0x00050081, 0x00000006, 0x000003E0, 0x000003DA, -0x000003DF, 0x0003003E, 0x000003BF, 0x000003E0, 0x00050041, 0x0000008F, 0x000003E1, 0x0000008D, -0x000000AF, 0x0004003D, 0x00000006, 0x000003E2, 0x000003E1, 0x00050083, 0x00000006, 0x000003E3, -0x00000074, 0x000003E2, 0x00050041, 0x0000008F, 0x000003E4, 0x0000008D, 0x000000A4, 0x0004003D, -0x00000006, 0x000003E5, 0x000003E4, 0x00050085, 0x00000006, 0x000003E6, 0x000003E3, 0x000003E5, -0x00050041, 0x0000008F, 0x000003E7, 0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, 0x000003E8, -0x000003E7, 0x00050041, 0x0000002B, 0x000003E9, 0x000003CF, 0x000003A7, 0x0004003D, 0x00000006, -0x000003EA, 0x000003E9, 0x00050085, 0x00000006, 0x000003EB, 0x000003E8, 0x000003EA, 0x00050081, -0x00000006, 0x000003EC, 0x000003E6, 0x000003EB, 0x0003003E, 0x000003C0, 0x000003EC, 0x000200F9, -0x000003CE, 0x000200F8, 0x000003ED, 0x00050041, 0x0000008F, 0x000003EE, 0x0000008D, 0x00000276, -0x0004003D, 0x00000006, 0x000003EF, 0x000003EE, 0x000500B4, 0x00000100, 0x000003F0, 0x000003EF, -0x00000110, 0x000300F7, 0x000003F2, 0x00000000, 0x000400FA, 0x000003F0, 0x000003F1, 0x000003F2, -0x000200F8, 0x000003F1, 0x0004003D, 0x0000009B, 0x000003F4, 0x000000B9, 0x00050041, 0x000000A5, -0x000003F5, 0x000000A3, 0x000000A4, 0x0004003D, 0x00000023, 0x000003F6, 0x000003F5, 0x00050057, -0x0000000D, 0x000003F7, 0x000003F4, 0x000003F6, 0x0008004F, 0x00000007, 0x000003F8, 0x000003F7, -0x000003F7, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000003F3, 0x000003F8, 0x00050041, -0x0000008F, 0x000003F9, 0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, 0x000003FA, 0x000003F9, -0x00050083, 0x00000006, 0x000003FB, 0x00000074, 0x000003FA, 0x00050041, 0x0000008F, 0x000003FC, -0x0000008D, 0x000000B3, 0x0004003D, 0x00000006, 0x000003FD, 0x000003FC, 0x00050085, 0x00000006, -0x000003FE, 0x000003FB, 0x000003FD, 0x00050041, 0x0000008F, 0x000003FF, 0x0000008D, 0x000000AF, -0x0004003D, 0x00000006, 0x00000400, 0x000003FF, 0x00050041, 0x0000002B, 0x00000401, 0x000003F3, -0x000001B0, 0x0004003D, 0x00000006, 0x00000402, 0x00000401, 0x00050085, 0x00000006, 0x00000403, -0x00000400, 0x00000402, 0x00050081, 0x00000006, 0x00000404, 0x000003FE, 0x00000403, 0x0003003E, -0x000003BF, 0x00000404, 0x00050041, 0x0000008F, 0x00000405, 0x0000008D, 0x000000AF, 0x0004003D, -0x00000006, 0x00000406, 0x00000405, 0x00050083, 0x00000006, 0x00000407, 0x00000074, 0x00000406, -0x00050041, 0x0000008F, 0x00000408, 0x0000008D, 0x000000A4, 0x0004003D, 0x00000006, 0x00000409, -0x00000408, 0x00050085, 0x00000006, 0x0000040A, 0x00000407, 0x00000409, 0x00050041, 0x0000008F, -0x0000040B, 0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, 0x0000040C, 0x0000040B, 0x00050041, -0x0000002B, 0x0000040D, 0x000003F3, 0x000003A7, 0x0004003D, 0x00000006, 0x0000040E, 0x0000040D, -0x00050085, 0x00000006, 0x0000040F, 0x0000040C, 0x0000040E, 0x00050081, 0x00000006, 0x00000410, -0x0000040A, 0x0000040F, 0x0003003E, 0x000003C0, 0x00000410, 0x000200F9, 0x000003F2, 0x000200F8, -0x000003F2, 0x000200F9, 0x000003CE, 0x000200F8, 0x000003CE, 0x000200F9, 0x000003C5, 0x000200F8, -0x000003C5, 0x0004003D, 0x0000000D, 0x00000412, 0x000003B4, 0x00050041, 0x0000000E, 0x00000413, -0x00000411, 0x00000093, 0x0003003E, 0x00000413, 0x00000412, 0x0004003D, 0x00000006, 0x00000414, -0x000003BF, 0x00060050, 0x00000007, 0x00000415, 0x00000414, 0x00000414, 0x00000414, 0x00050041, -0x00000008, 0x00000416, 0x00000411, 0x000000A4, 0x0003003E, 0x00000416, 0x00000415, 0x0004003D, -0x00000006, 0x00000417, 0x000003C0, 0x00050041, 0x0000002B, 0x00000418, 0x00000411, 0x000000B3, -0x0003003E, 0x00000418, 0x00000417, 0x00040039, 0x00000007, 0x00000419, 0x00000021, 0x00050041, -0x00000008, 0x0000041A, 0x00000411, 0x0000008E, 0x0003003E, 0x0000041A, 0x00000419, 0x00040039, -0x00000006, 0x0000041B, 0x0000001C, 0x00050041, 0x0000002B, 0x0000041C, 0x00000411, 0x000000AF, -0x0003003E, 0x0000041C, 0x0000041B, 0x00050041, 0x0000000E, 0x0000041E, 0x00000411, 0x00000093, -0x0004003D, 0x0000000D, 0x0000041F, 0x0000041E, 0x0008004F, 0x00000007, 0x00000420, 0x0000041F, -0x0000041F, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000041D, 0x00000420, 0x00050039, -0x00000007, 0x00000421, 0x0000001F, 0x0000041D, 0x00050041, 0x00000008, 0x00000422, 0x00000411, -0x000000E8, 0x0003003E, 0x00000422, 0x00000421, 0x00050041, 0x0000018B, 0x00000424, 0x000000A3, -0x000000B3, 0x0004003D, 0x0000000D, 0x00000425, 0x00000424, 0x0008004F, 0x00000007, 0x00000426, -0x00000425, 0x00000425, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000423, 0x00000426, -0x00050041, 0x00000094, 0x00000427, 0x00000171, 0x000000AF, 0x0004003D, 0x0000000D, 0x00000428, -0x00000427, 0x0008004F, 0x00000007, 0x00000429, 0x00000428, 0x00000428, 0x00000000, 0x00000001, -0x00000002, 0x0004003D, 0x00000007, 0x0000042A, 0x00000423, 0x00050083, 0x00000007, 0x0000042B, -0x00000429, 0x0000042A, 0x0006000C, 0x00000007, 0x0000042C, 0x00000001, 0x00000045, 0x0000042B, -0x00050041, 0x00000008, 0x0000042D, 0x00000411, 0x000000C4, 0x0003003E, 0x0000042D, 0x0000042C, -0x00050041, 0x00000008, 0x0000042E, 0x00000411, 0x0000008E, 0x0004003D, 0x00000007, 0x0000042F, -0x0000042E, 0x00050041, 0x00000008, 0x00000430, 0x00000411, 0x000000C4, 0x0004003D, 0x00000007, -0x00000431, 0x00000430, 0x00050094, 0x00000006, 0x00000432, 0x0000042F, 0x00000431, 0x0007000C, -0x00000006, 0x00000433, 0x00000001, 0x00000028, 0x00000432, 0x00000127, 0x00050041, 0x0000002B, -0x00000434, 0x00000411, 0x000000FC, 0x0003003E, 0x00000434, 0x00000433, 0x00050041, 0x0000008F, -0x00000436, 0x00000171, 0x000000ED, 0x0004003D, 0x00000006, 0x00000437, 0x00000436, 0x0003003E, -0x00000435, 0x00000437, 0x00050041, 0x0000008F, 0x00000439, 0x00000171, 0x000000D8, 0x0004003D, -0x00000006, 0x0000043A, 0x00000439, 0x0003003E, 0x00000438, 0x0000043A, 0x00050041, 0x000001C2, -0x0000043C, 0x00000171, 0x000000B3, 0x0004003D, 0x0000016C, 0x0000043D, 0x0000043C, 0x0004003D, -0x00000007, 0x0000043E, 0x00000423, 0x00050051, 0x00000006, 0x0000043F, 0x0000043E, 0x00000000, -0x00050051, 0x00000006, 0x00000440, 0x0000043E, 0x00000001, 0x00050051, 0x00000006, 0x00000441, -0x0000043E, 0x00000002, 0x00070050, 0x0000000D, 0x00000442, 0x0000043F, 0x00000440, 0x00000441, -0x00000074, 0x00050091, 0x0000000D, 0x00000443, 0x0000043D, 0x00000442, 0x0003003E, 0x0000043B, -0x00000443, 0x0004003D, 0x0000000D, 0x00000445, 0x0000043B, 0x0006000C, 0x00000006, 0x00000446, -0x00000001, 0x00000042, 0x00000445, 0x0003003E, 0x00000444, 0x00000446, 0x0004003D, 0x00000006, -0x00000447, 0x00000444, 0x0004003D, 0x00000006, 0x00000448, 0x00000435, 0x0004003D, 0x00000006, -0x00000449, 0x00000438, 0x00050083, 0x00000006, 0x0000044A, 0x00000448, 0x00000449, 0x00050083, -0x00000006, 0x0000044B, 0x00000447, 0x0000044A, 0x0003003E, 0x00000073, 0x0000044B, 0x0004003D, -0x00000006, 0x0000044C, 0x00000438, 0x0004003D, 0x00000006, 0x0000044D, 0x00000073, 0x00050088, -0x00000006, 0x0000044E, 0x0000044D, 0x0000044C, 0x0003003E, 0x00000073, 0x0000044E, 0x0004003D, -0x00000006, 0x0000044F, 0x00000073, 0x00050083, 0x00000006, 0x00000450, 0x00000074, 0x0000044F, -0x0008000C, 0x00000006, 0x00000451, 0x00000001, 0x0000002B, 0x00000450, 0x00000127, 0x00000074, -0x0003003E, 0x00000073, 0x00000451, 0x00050041, 0x0000002B, 0x00000453, 0x00000411, 0x000000FC, -0x0004003D, 0x00000006, 0x00000454, 0x00000453, 0x00050085, 0x00000006, 0x00000455, 0x00000110, -0x00000454, 0x00050041, 0x00000008, 0x00000456, 0x00000411, 0x0000008E, 0x0004003D, 0x00000007, -0x00000457, 0x00000456, 0x0005008E, 0x00000007, 0x00000458, 0x00000457, 0x00000455, 0x00050041, -0x00000008, 0x00000459, 0x00000411, 0x000000C4, 0x0004003D, 0x00000007, 0x0000045A, 0x00000459, -0x00050083, 0x00000007, 0x0000045B, 0x00000458, 0x0000045A, 0x0003003E, 0x00000452, 0x0000045B, -0x00050041, 0x0000000E, 0x0000045F, 0x00000411, 0x00000093, 0x0004003D, 0x0000000D, 0x00000460, -0x0000045F, 0x0008004F, 0x00000007, 0x00000461, 0x00000460, 0x00000460, 0x00000000, 0x00000001, -0x00000002, 0x00060041, 0x0000002B, 0x00000462, 0x00000411, 0x000000A4, 0x000000D2, 0x0004003D, -0x00000006, 0x00000463, 0x00000462, 0x00060050, 0x00000007, 0x00000464, 0x00000463, 0x00000463, -0x00000463, 0x0008000C, 0x00000007, 0x00000465, 0x00000001, 0x0000002E, 0x0000045E, 0x00000461, -0x00000464, 0x0003003E, 0x0000045C, 0x00000465, 0x0004003D, 0x00000007, 0x00000468, 0x0000045C, -0x0003003E, 0x00000467, 0x00000468, 0x0004003D, 0x00000007, 0x0000046A, 0x00000423, 0x0003003E, -0x00000469, 0x0000046A, 0x0004003D, 0x00000065, 0x0000046C, 0x00000411, 0x0003003E, 0x0000046B, -0x0000046C, 0x00070039, 0x00000007, 0x0000046D, 0x0000006B, 0x00000467, 0x00000469, 0x0000046B, -0x0003003E, 0x00000466, 0x0000046D, 0x0004003D, 0x00000007, 0x00000470, 0x0000045C, 0x0003003E, -0x0000046F, 0x00000470, 0x0004003D, 0x00000007, 0x00000472, 0x00000452, 0x0003003E, 0x00000471, -0x00000472, 0x0004003D, 0x00000065, 0x00000474, 0x00000411, 0x0003003E, 0x00000473, 0x00000474, -0x00070039, 0x00000007, 0x00000475, 0x00000070, 0x0000046F, 0x00000471, 0x00000473, 0x0003003E, -0x0000046E, 0x00000475, 0x0004003D, 0x00000007, 0x00000477, 0x00000466, 0x0004003D, 0x00000007, -0x00000478, 0x0000046E, 0x00050081, 0x00000007, 0x00000479, 0x00000477, 0x00000478, 0x00050041, -0x00000008, 0x0000047A, 0x00000411, 0x000000E8, 0x0004003D, 0x00000007, 0x0000047B, 0x0000047A, -0x00050081, 0x00000007, 0x0000047C, 0x00000479, 0x0000047B, 0x0003003E, 0x00000476, 0x0000047C, -0x0004003D, 0x00000007, 0x0000047F, 0x00000476, 0x00050051, 0x00000006, 0x00000480, 0x0000047F, -0x00000000, 0x00050051, 0x00000006, 0x00000481, 0x0000047F, 0x00000001, 0x00050051, 0x00000006, -0x00000482, 0x0000047F, 0x00000002, 0x00070050, 0x0000000D, 0x00000483, 0x00000480, 0x00000481, -0x00000482, 0x00000074, 0x0003003E, 0x0000047E, 0x00000483, 0x00050041, 0x000001D3, 0x00000485, -0x00000171, 0x00000484, 0x0004003D, 0x00000029, 0x00000486, 0x00000485, 0x000500AD, 0x00000100, -0x00000487, 0x00000486, 0x00000093, 0x000300F7, 0x00000489, 0x00000000, 0x000400FA, 0x00000487, -0x00000488, 0x00000489, 0x000200F8, 0x00000488, 0x00050041, 0x000001D3, 0x0000048A, 0x00000171, -0x00000484, 0x0004003D, 0x00000029, 0x0000048B, 0x0000048A, 0x000300F7, 0x00000493, 0x00000000, -0x001100FB, 0x0000048B, 0x00000493, 0x00000001, 0x0000048C, 0x00000002, 0x0000048D, 0x00000003, -0x0000048E, 0x00000004, 0x0000048F, 0x00000005, 0x00000490, 0x00000006, 0x00000491, 0x00000007, -0x00000492, 0x000200F8, 0x0000048C, 0x00050041, 0x0000000E, 0x00000494, 0x00000411, 0x00000093, -0x0004003D, 0x0000000D, 0x00000495, 0x00000494, 0x0003003E, 0x0000047E, 0x00000495, 0x000200F9, -0x00000493, 0x000200F8, 0x0000048D, 0x00050041, 0x00000008, 0x00000497, 0x00000411, 0x000000A4, -0x0004003D, 0x00000007, 0x00000498, 0x00000497, 0x00050051, 0x00000006, 0x00000499, 0x00000498, -0x00000000, 0x00050051, 0x00000006, 0x0000049A, 0x00000498, 0x00000001, 0x00050051, 0x00000006, -0x0000049B, 0x00000498, 0x00000002, 0x00070050, 0x0000000D, 0x0000049C, 0x00000499, 0x0000049A, -0x0000049B, 0x00000074, 0x0003003E, 0x0000047E, 0x0000049C, 0x000200F9, 0x00000493, 0x000200F8, -0x0000048E, 0x00050041, 0x0000002B, 0x0000049E, 0x00000411, 0x000000B3, 0x0004003D, 0x00000006, -0x0000049F, 0x0000049E, 0x00050041, 0x0000002B, 0x000004A0, 0x00000411, 0x000000B3, 0x0004003D, -0x00000006, 0x000004A1, 0x000004A0, 0x00050041, 0x0000002B, 0x000004A2, 0x00000411, 0x000000B3, -0x0004003D, 0x00000006, 0x000004A3, 0x000004A2, 0x00070050, 0x0000000D, 0x000004A4, 0x0000049F, -0x000004A1, 0x000004A3, 0x00000074, 0x0003003E, 0x0000047E, 0x000004A4, 0x000200F9, 0x00000493, -0x000200F8, 0x0000048F, 0x00050041, 0x0000002B, 0x000004A6, 0x00000411, 0x000000AF, 0x0004003D, -0x00000006, 0x000004A7, 0x000004A6, 0x00050041, 0x0000002B, 0x000004A8, 0x00000411, 0x000000AF, -0x0004003D, 0x00000006, 0x000004A9, 0x000004A8, 0x00050041, 0x0000002B, 0x000004AA, 0x00000411, -0x000000AF, 0x0004003D, 0x00000006, 0x000004AB, 0x000004AA, 0x00070050, 0x0000000D, 0x000004AC, -0x000004A7, 0x000004A9, 0x000004AB, 0x00000074, 0x0003003E, 0x0000047E, 0x000004AC, 0x000200F9, -0x00000493, 0x000200F8, 0x00000490, 0x00050041, 0x00000008, 0x000004AE, 0x00000411, 0x000000E8, -0x0004003D, 0x00000007, 0x000004AF, 0x000004AE, 0x00050051, 0x00000006, 0x000004B0, 0x000004AF, -0x00000000, 0x00050051, 0x00000006, 0x000004B1, 0x000004AF, 0x00000001, 0x00050051, 0x00000006, -0x000004B2, 0x000004AF, 0x00000002, 0x00070050, 0x0000000D, 0x000004B3, 0x000004B0, 0x000004B1, -0x000004B2, 0x00000074, 0x0003003E, 0x0000047E, 0x000004B3, 0x000200F9, 0x00000493, 0x000200F8, -0x00000491, 0x00050041, 0x00000008, 0x000004B5, 0x00000411, 0x0000008E, 0x0004003D, 0x00000007, -0x000004B6, 0x000004B5, 0x00050051, 0x00000006, 0x000004B7, 0x000004B6, 0x00000000, 0x00050051, -0x00000006, 0x000004B8, 0x000004B6, 0x00000001, 0x00050051, 0x00000006, 0x000004B9, 0x000004B6, -0x00000002, 0x00070050, 0x0000000D, 0x000004BA, 0x000004B7, 0x000004B8, 0x000004B9, 0x00000074, -0x0003003E, 0x0000047E, 0x000004BA, 0x000200F9, 0x00000493, 0x000200F8, 0x00000492, 0x0004003D, -0x00000007, 0x000004BE, 0x00000423, 0x0003003E, 0x000004BD, 0x000004BE, 0x00050039, 0x00000029, -0x000004BF, 0x00000047, 0x000004BD, 0x0003003E, 0x000004BC, 0x000004BF, 0x0004003D, 0x00000029, -0x000004C0, 0x000004BC, 0x000300F7, 0x000004C5, 0x00000000, 0x000B00FB, 0x000004C0, 0x000004C5, -0x00000000, 0x000004C1, 0x00000001, 0x000004C2, 0x00000002, 0x000004C3, 0x00000003, 0x000004C4, -0x000200F8, 0x000004C1, 0x0004003D, 0x0000000D, 0x000004C6, 0x0000047E, 0x00050085, 0x0000000D, -0x000004CA, 0x000004C6, 0x000004C9, 0x0003003E, 0x0000047E, 0x000004CA, 0x000200F9, 0x000004C5, -0x000200F8, 0x000004C2, 0x0004003D, 0x0000000D, 0x000004CC, 0x0000047E, 0x00050085, 0x0000000D, -0x000004CE, 0x000004CC, 0x000004CD, 0x0003003E, 0x0000047E, 0x000004CE, 0x000200F9, 0x000004C5, -0x000200F8, 0x000004C3, 0x0004003D, 0x0000000D, 0x000004D0, 0x0000047E, 0x00050085, 0x0000000D, -0x000004D2, 0x000004D0, 0x000004D1, 0x0003003E, 0x0000047E, 0x000004D2, 0x000200F9, 0x000004C5, -0x000200F8, 0x000004C4, 0x0004003D, 0x0000000D, 0x000004D4, 0x0000047E, 0x00050085, 0x0000000D, -0x000004D6, 0x000004D4, 0x000004D5, 0x0003003E, 0x0000047E, 0x000004D6, 0x000200F9, 0x000004C5, -0x000200F8, 0x000004C5, 0x000200F9, 0x00000493, 0x000200F8, 0x00000493, 0x000200F9, 0x00000489, -0x000200F8, 0x00000489, 0x000100FD, 0x00010038, 0x00050036, 0x00000007, 0x0000000B, 0x00000000, -0x00000009, 0x00030037, 0x00000008, 0x0000000A, 0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, -0x00000077, 0x0000000A, 0x0007000C, 0x00000007, 0x0000007A, 0x00000001, 0x0000001A, 0x00000077, -0x00000079, 0x000200FE, 0x0000007A, 0x00010038, 0x00050036, 0x0000000D, 0x00000011, 0x00000000, -0x0000000F, 0x00030037, 0x0000000E, 0x00000010, 0x000200F8, 0x00000012, 0x0004003B, 0x00000008, -0x0000007D, 0x00000007, 0x0004003D, 0x0000000D, 0x0000007E, 0x00000010, 0x0008004F, 0x00000007, -0x0000007F, 0x0000007E, 0x0000007E, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x0000007D, -0x0000007F, 0x00050039, 0x00000007, 0x00000080, 0x0000000B, 0x0000007D, 0x00050041, 0x0000002B, -0x00000083, 0x00000010, 0x00000082, 0x0004003D, 0x00000006, 0x00000084, 0x00000083, 0x00050051, -0x00000006, 0x00000085, 0x00000080, 0x00000000, 0x00050051, 0x00000006, 0x00000086, 0x00000080, -0x00000001, 0x00050051, 0x00000006, 0x00000087, 0x00000080, 0x00000002, 0x00070050, 0x0000000D, -0x00000088, 0x00000085, 0x00000086, 0x00000087, 0x00000084, 0x000200FE, 0x00000088, 0x00010038, -0x00050036, 0x0000000D, 0x00000014, 0x00000000, 0x00000013, 0x000200F8, 0x00000015, 0x0004003B, -0x0000000E, 0x000000A9, 0x00000007, 0x00050041, 0x0000008F, 0x00000090, 0x0000008D, 0x0000008E, -0x0004003D, 0x00000006, 0x00000091, 0x00000090, 0x00050083, 0x00000006, 0x00000092, 0x00000074, -0x00000091, 0x00050041, 0x00000094, 0x00000095, 0x0000008D, 0x00000093, 0x0004003D, 0x0000000D, -0x00000096, 0x00000095, 0x0005008E, 0x0000000D, 0x00000097, 0x00000096, 0x00000092, 0x00050041, -0x0000008F, 0x00000098, 0x0000008D, 0x0000008E, 0x0004003D, 0x00000006, 0x00000099, 0x00000098, -0x0004003D, 0x0000009B, 0x0000009E, 0x0000009D, 0x00050041, 0x000000A5, 0x000000A6, 0x000000A3, -0x000000A4, 0x0004003D, 0x00000023, 0x000000A7, 0x000000A6, 0x00050057, 0x0000000D, 0x000000A8, -0x0000009E, 0x000000A7, 0x0003003E, 0x000000A9, 0x000000A8, 0x00050039, 0x0000000D, 0x000000AA, -0x00000011, 0x000000A9, 0x0005008E, 0x0000000D, 0x000000AB, 0x000000AA, 0x00000099, 0x00050081, -0x0000000D, 0x000000AC, 0x00000097, 0x000000AB, 0x000200FE, 0x000000AC, 0x00010038, 0x00050036, -0x00000007, 0x00000017, 0x00000000, 0x00000016, 0x000200F8, 0x00000018, 0x00050041, 0x0000008F, -0x000000B0, 0x0000008D, 0x000000AF, 0x0004003D, 0x00000006, 0x000000B1, 0x000000B0, 0x00050083, -0x00000006, 0x000000B2, 0x00000074, 0x000000B1, 0x00050041, 0x0000008F, 0x000000B4, 0x0000008D, -0x000000B3, 0x0004003D, 0x00000006, 0x000000B5, 0x000000B4, 0x00050085, 0x00000006, 0x000000B6, -0x000000B2, 0x000000B5, 0x00050041, 0x0000008F, 0x000000B7, 0x0000008D, 0x000000AF, 0x0004003D, -0x00000006, 0x000000B8, 0x000000B7, 0x0004003D, 0x0000009B, 0x000000BA, 0x000000B9, 0x00050041, -0x000000A5, 0x000000BB, 0x000000A3, 0x000000A4, 0x0004003D, 0x00000023, 0x000000BC, 0x000000BB, -0x00050057, 0x0000000D, 0x000000BD, 0x000000BA, 0x000000BC, 0x0008004F, 0x00000007, 0x000000BE, -0x000000BD, 0x000000BD, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000007, 0x000000BF, -0x000000BE, 0x000000B8, 0x00060050, 0x00000007, 0x000000C0, 0x000000B6, 0x000000B6, 0x000000B6, -0x00050081, 0x00000007, 0x000000C1, 0x000000C0, 0x000000BF, 0x000200FE, 0x000000C1, 0x00010038, -0x00050036, 0x00000006, 0x0000001A, 0x00000000, 0x00000019, 0x000200F8, 0x0000001B, 0x00050041, -0x0000008F, 0x000000C5, 0x0000008D, 0x000000C4, 0x0004003D, 0x00000006, 0x000000C6, 0x000000C5, -0x00050083, 0x00000006, 0x000000C7, 0x00000074, 0x000000C6, 0x00050041, 0x0000008F, 0x000000C8, -0x0000008D, 0x000000A4, 0x0004003D, 0x00000006, 0x000000C9, 0x000000C8, 0x00050085, 0x00000006, -0x000000CA, 0x000000C7, 0x000000C9, 0x00050041, 0x0000008F, 0x000000CB, 0x0000008D, 0x000000C4, -0x0004003D, 0x00000006, 0x000000CC, 0x000000CB, 0x0004003D, 0x0000009B, 0x000000CE, 0x000000CD, -0x00050041, 0x000000A5, 0x000000CF, 0x000000A3, 0x000000A4, 0x0004003D, 0x00000023, 0x000000D0, -0x000000CF, 0x00050057, 0x0000000D, 0x000000D1, 0x000000CE, 0x000000D0, 0x00050051, 0x00000006, -0x000000D3, 0x000000D1, 0x00000000, 0x00050085, 0x00000006, 0x000000D4, 0x000000CC, 0x000000D3, -0x00050081, 0x00000006, 0x000000D5, 0x000000CA, 0x000000D4, 0x000200FE, 0x000000D5, 0x00010038, -0x00050036, 0x00000006, 0x0000001C, 0x00000000, 0x00000019, 0x000200F8, 0x0000001D, 0x00050041, -0x0000008F, 0x000000D9, 0x0000008D, 0x000000D8, 0x0004003D, 0x00000006, 0x000000DA, 0x000000D9, -0x00050083, 0x00000006, 0x000000DB, 0x00000074, 0x000000DA, 0x00050041, 0x0000008F, 0x000000DC, -0x0000008D, 0x000000D8, 0x0004003D, 0x00000006, 0x000000DD, 0x000000DC, 0x0004003D, 0x0000009B, -0x000000DF, 0x000000DE, 0x00050041, 0x000000A5, 0x000000E0, 0x000000A3, 0x000000A4, 0x0004003D, -0x00000023, 0x000000E1, 0x000000E0, 0x00050057, 0x0000000D, 0x000000E2, 0x000000DF, 0x000000E1, -0x00050051, 0x00000006, 0x000000E3, 0x000000E2, 0x00000000, 0x00050085, 0x00000006, 0x000000E4, -0x000000DD, 0x000000E3, 0x00050081, 0x00000006, 0x000000E5, 0x000000DB, 0x000000E4, 0x000200FE, -0x000000E5, 0x00010038, 0x00050036, 0x00000007, 0x0000001F, 0x00000000, 0x00000009, 0x00030037, -0x00000008, 0x0000001E, 0x000200F8, 0x00000020, 0x0004003B, 0x00000008, 0x000000F5, 0x00000007, -0x00050041, 0x0000008F, 0x000000E9, 0x0000008D, 0x000000E8, 0x0004003D, 0x00000006, 0x000000EA, -0x000000E9, 0x0004003D, 0x00000007, 0x000000EB, 0x0000001E, 0x0005008E, 0x00000007, 0x000000EC, -0x000000EB, 0x000000EA, 0x00050041, 0x0000008F, 0x000000EE, 0x0000008D, 0x000000ED, 0x0004003D, -0x00000006, 0x000000EF, 0x000000EE, 0x0004003D, 0x0000009B, 0x000000F1, 0x000000F0, 0x00050041, -0x000000A5, 0x000000F2, 0x000000A3, 0x000000A4, 0x0004003D, 0x00000023, 0x000000F3, 0x000000F2, -0x00050057, 0x0000000D, 0x000000F4, 0x000000F1, 0x000000F3, 0x0008004F, 0x00000007, 0x000000F6, -0x000000F4, 0x000000F4, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000000F5, 0x000000F6, -0x00050039, 0x00000007, 0x000000F7, 0x0000000B, 0x000000F5, 0x0005008E, 0x00000007, 0x000000F8, -0x000000F7, 0x000000EF, 0x00050081, 0x00000007, 0x000000F9, 0x000000EC, 0x000000F8, 0x000200FE, -0x000000F9, 0x00010038, 0x00050036, 0x00000007, 0x00000021, 0x00000000, 0x00000016, 0x000200F8, -0x00000022, 0x0004003B, 0x00000008, 0x00000109, 0x00000007, 0x0004003B, 0x00000008, 0x00000114, -0x00000007, 0x0004003B, 0x00000008, 0x00000118, 0x00000007, 0x0004003B, 0x00000008, 0x0000011C, -0x00000007, 0x0004003B, 0x00000122, 0x00000123, 0x00000007, 0x00050041, 0x0000008F, 0x000000FD, -0x0000008D, 0x000000FC, 0x0004003D, 0x00000006, 0x000000FE, 0x000000FD, 0x000500B8, 0x00000100, -0x00000101, 0x000000FE, 0x000000FF, 0x000300F7, 0x00000103, 0x00000000, 0x000400FA, 0x00000101, -0x00000102, 0x00000103, 0x000200F8, 0x00000102, 0x00050041, 0x00000104, 0x00000105, 0x000000A3, -0x000000E8, 0x0004003D, 0x00000007, 0x00000106, 0x00000105, 0x0006000C, 0x00000007, 0x00000107, -0x00000001, 0x00000045, 0x00000106, 0x000200FE, 0x00000107, 0x000200F8, 0x00000103, 0x0004003D, -0x0000009B, 0x0000010B, 0x0000010A, 0x00050041, 0x000000A5, 0x0000010C, 0x000000A3, 0x000000A4, -0x0004003D, 0x00000023, 0x0000010D, 0x0000010C, 0x00050057, 0x0000000D, 0x0000010E, 0x0000010B, -0x0000010D, 0x0008004F, 0x00000007, 0x0000010F, 0x0000010E, 0x0000010E, 0x00000000, 0x00000001, -0x00000002, 0x0005008E, 0x00000007, 0x00000111, 0x0000010F, 0x00000110, 0x00060050, 0x00000007, -0x00000112, 0x00000074, 0x00000074, 0x00000074, 0x00050083, 0x00000007, 0x00000113, 0x00000111, -0x00000112, 0x0003003E, 0x00000109, 0x00000113, 0x00050041, 0x00000104, 0x00000115, 0x000000A3, -0x000000E8, 0x0004003D, 0x00000007, 0x00000116, 0x00000115, 0x0006000C, 0x00000007, 0x00000117, -0x00000001, 0x00000045, 0x00000116, 0x0003003E, 0x00000114, 0x00000117, 0x00050041, 0x00000104, -0x00000119, 0x000000A3, 0x0000008E, 0x0004003D, 0x00000007, 0x0000011A, 0x00000119, 0x0006000C, -0x00000007, 0x0000011B, 0x00000001, 0x00000045, 0x0000011A, 0x0003003E, 0x00000118, 0x0000011B, -0x0004003D, 0x00000007, 0x0000011D, 0x00000114, 0x0004003D, 0x00000007, 0x0000011E, 0x00000118, -0x0007000C, 0x00000007, 0x0000011F, 0x00000001, 0x00000044, 0x0000011D, 0x0000011E, 0x0006000C, -0x00000007, 0x00000120, 0x00000001, 0x00000045, 0x0000011F, 0x0003003E, 0x0000011C, 0x00000120, -0x0004003D, 0x00000007, 0x00000124, 0x00000118, 0x0004003D, 0x00000007, 0x00000125, 0x0000011C, -0x0004003D, 0x00000007, 0x00000126, 0x00000114, 0x00050051, 0x00000006, 0x00000128, 0x00000124, -0x00000000, 0x00050051, 0x00000006, 0x00000129, 0x00000124, 0x00000001, 0x00050051, 0x00000006, -0x0000012A, 0x00000124, 0x00000002, 0x00050051, 0x00000006, 0x0000012B, 0x00000125, 0x00000000, -0x00050051, 0x00000006, 0x0000012C, 0x00000125, 0x00000001, 0x00050051, 0x00000006, 0x0000012D, -0x00000125, 0x00000002, 0x00050051, 0x00000006, 0x0000012E, 0x00000126, 0x00000000, 0x00050051, -0x00000006, 0x0000012F, 0x00000126, 0x00000001, 0x00050051, 0x00000006, 0x00000130, 0x00000126, -0x00000002, 0x00060050, 0x00000007, 0x00000131, 0x00000128, 0x00000129, 0x0000012A, 0x00060050, -0x00000007, 0x00000132, 0x0000012B, 0x0000012C, 0x0000012D, 0x00060050, 0x00000007, 0x00000133, -0x0000012E, 0x0000012F, 0x00000130, 0x00060050, 0x00000121, 0x00000134, 0x00000131, 0x00000132, -0x00000133, 0x0003003E, 0x00000123, 0x00000134, 0x0004003D, 0x00000121, 0x00000135, 0x00000123, -0x0004003D, 0x00000007, 0x00000136, 0x00000109, 0x00050091, 0x00000007, 0x00000137, 0x00000135, -0x00000136, 0x0006000C, 0x00000007, 0x00000138, 0x00000001, 0x00000045, 0x00000137, 0x000200FE, -0x00000138, 0x00010038, 0x00050036, 0x00000006, 0x00000027, 0x00000000, 0x00000025, 0x00030037, -0x00000024, 0x00000026, 0x000200F8, 0x00000028, 0x0004003D, 0x00000023, 0x0000013B, 0x00000026, -0x00050094, 0x00000006, 0x0000013F, 0x0000013B, 0x0000013E, 0x0006000C, 0x00000006, 0x00000140, -0x00000001, 0x0000000D, 0x0000013F, 0x00050085, 0x00000006, 0x00000142, 0x00000140, 0x00000141, -0x0006000C, 0x00000006, 0x00000143, 0x00000001, 0x0000000A, 0x00000142, 0x000200FE, 0x00000143, -0x00010038, 0x00050036, 0x00000023, 0x00000030, 0x00000000, 0x0000002C, 0x00030037, 0x0000002A, -0x0000002D, 0x00030037, 0x0000002A, 0x0000002E, 0x00030037, 0x0000002B, 0x0000002F, 0x000200F8, -0x00000031, 0x0004003B, 0x0000002B, 0x00000146, 0x00000007, 0x0004003B, 0x0000002B, 0x00000148, -0x00000007, 0x0004003B, 0x0000002B, 0x00000152, 0x00000007, 0x0004003B, 0x0000002B, 0x00000159, -0x00000007, 0x0004003B, 0x0000002B, 0x0000015C, 0x00000007, 0x0003003E, 0x00000146, 0x00000147, -0x0004003D, 0x00000029, 0x00000149, 0x0000002D, 0x0004006F, 0x00000006, 0x0000014A, 0x00000149, -0x00050081, 0x00000006, 0x0000014C, 0x0000014A, 0x0000014B, 0x0006000C, 0x00000006, 0x0000014D, -0x00000001, 0x0000001F, 0x0000014C, 0x0004003D, 0x00000029, 0x0000014E, 0x0000002E, 0x0004006F, -0x00000006, 0x0000014F, 0x0000014E, 0x0006000C, 0x00000006, 0x00000150, 0x00000001, 0x0000001F, -0x0000014F, 0x00050088, 0x00000006, 0x00000151, 0x0000014D, 0x00000150, 0x0003003E, 0x00000148, -0x00000151, 0x0004003D, 0x00000029, 0x00000153, 0x0000002D, 0x0004006F, 0x00000006, 0x00000154, -0x00000153, 0x0004003D, 0x00000006, 0x00000155, 0x00000146, 0x00050085, 0x00000006, 0x00000156, -0x00000154, 0x00000155, 0x0004003D, 0x00000006, 0x00000157, 0x0000002F, 0x00050081, 0x00000006, -0x00000158, 0x00000156, 0x00000157, 0x0003003E, 0x00000152, 0x00000158, 0x0004003D, 0x00000006, -0x0000015A, 0x00000152, 0x0006000C, 0x00000006, 0x0000015B, 0x00000001, 0x0000000D, 0x0000015A, -0x0003003E, 0x00000159, 0x0000015B, 0x0004003D, 0x00000006, 0x0000015D, 0x00000152, 0x0006000C, -0x00000006, 0x0000015E, 0x00000001, 0x0000000E, 0x0000015D, 0x0003003E, 0x0000015C, 0x0000015E, -0x0004003D, 0x00000006, 0x0000015F, 0x00000148, 0x0004003D, 0x00000006, 0x00000160, 0x0000015C, -0x00050085, 0x00000006, 0x00000161, 0x0000015F, 0x00000160, 0x0004003D, 0x00000006, 0x00000162, -0x00000148, 0x0004003D, 0x00000006, 0x00000163, 0x00000159, 0x00050085, 0x00000006, 0x00000164, -0x00000162, 0x00000163, 0x00050050, 0x00000023, 0x00000165, 0x00000161, 0x00000164, 0x000200FE, -0x00000165, 0x00010038, 0x00050036, 0x00000006, 0x00000036, 0x00000000, 0x00000032, 0x00030037, -0x00000008, 0x00000033, 0x00030037, 0x00000008, 0x00000034, 0x00030037, 0x0000002A, 0x00000035, -0x000200F8, 0x00000037, 0x0004003B, 0x0000002B, 0x00000168, 0x00000007, 0x0004003B, 0x0000002B, -0x00000175, 0x00000007, 0x00050041, 0x0000008F, 0x00000173, 0x00000171, 0x00000172, 0x0004003D, -0x00000006, 0x00000174, 0x00000173, 0x0003003E, 0x00000168, 0x00000174, 0x0004003D, 0x00000006, -0x00000176, 0x00000168, 0x0004003D, 0x00000007, 0x00000177, 0x00000034, 0x0004003D, 0x00000007, -0x00000178, 0x00000033, 0x00050094, 0x00000006, 0x00000179, 0x00000177, 0x00000178, 0x00050083, -0x00000006, 0x0000017A, 0x00000074, 0x00000179, 0x00050085, 0x00000006, 0x0000017B, 0x00000176, -0x0000017A, 0x0004003D, 0x00000006, 0x0000017C, 0x00000168, 0x0007000C, 0x00000006, 0x0000017D, -0x00000001, 0x00000028, 0x0000017B, 0x0000017C, 0x0003003E, 0x00000175, 0x0000017D, 0x0004003D, -0x00000006, 0x0000017E, 0x00000175, 0x000200FE, 0x0000017E, 0x00010038, 0x00050036, 0x00000006, -0x00000043, 0x00000000, 0x0000003B, 0x00030037, 0x0000003A, 0x0000003C, 0x00030037, 0x0000000E, -0x0000003D, 0x00030037, 0x0000002B, 0x0000003E, 0x00030037, 0x00000008, 0x0000003F, 0x00030037, -0x00000008, 0x00000040, 0x00030037, 0x00000008, 0x00000041, 0x00030037, 0x0000002A, 0x00000042, -0x000200F8, 0x00000044, 0x0004003B, 0x0000002B, 0x00000181, 0x00000007, 0x0004003B, 0x00000008, -0x00000182, 0x00000007, 0x0004003B, 0x00000008, 0x00000184, 0x00000007, 0x0004003B, 0x0000002A, -0x00000186, 0x00000007, 0x0004003B, 0x0000002B, 0x00000189, 0x00000007, 0x0004003B, 0x0000002B, -0x0000018A, 0x00000007, 0x0004003B, 0x00000024, 0x0000018D, 0x00000007, 0x0004003B, 0x0000002A, -0x00000191, 0x00000007, 0x0004003B, 0x00000024, 0x00000199, 0x00000007, 0x0004003B, 0x0000002A, -0x0000019A, 0x00000007, 0x0004003B, 0x0000002A, 0x0000019C, 0x00000007, 0x0004003B, 0x0000002B, -0x0000019D, 0x00000007, 0x0004003B, 0x0000002B, 0x000001A3, 0x00000007, 0x0004003D, 0x00000007, -0x00000183, 0x0000003F, 0x0003003E, 0x00000182, 0x00000183, 0x0004003D, 0x00000007, 0x00000185, -0x00000040, 0x0003003E, 0x00000184, 0x00000185, 0x0004003D, 0x00000029, 0x00000187, 0x00000042, -0x0003003E, 0x00000186, 0x00000187, 0x00070039, 0x00000006, 0x00000188, 0x00000036, 0x00000182, -0x00000184, 0x00000186, 0x0003003E, 0x00000181, 0x00000188, 0x0003003E, 0x00000189, 0x00000127, -0x0004003D, 0x0000000D, 0x0000018E, 0x0000018C, 0x0007004F, 0x00000023, 0x0000018F, 0x0000018E, -0x0000018E, 0x00000000, 0x00000001, 0x0003003E, 0x0000018D, 0x0000018F, 0x00050039, 0x00000006, -0x00000190, 0x00000027, 0x0000018D, 0x0003003E, 0x0000018A, 0x00000190, 0x0003003E, 0x00000191, -0x00000093, 0x000200F9, 0x00000192, 0x000200F8, 0x00000192, 0x000400F6, 0x00000194, 0x00000195, -0x00000000, 0x000200F9, 0x00000196, 0x000200F8, 0x00000196, 0x0004003D, 0x00000029, 0x00000197, -0x00000191, 0x000500B1, 0x00000100, 0x00000198, 0x00000197, 0x000000ED, 0x000400FA, 0x00000198, -0x00000193, 0x00000194, 0x000200F8, 0x00000193, 0x0004003D, 0x00000029, 0x0000019B, 0x00000191, -0x0003003E, 0x0000019A, 0x0000019B, 0x0003003E, 0x0000019C, 0x000000ED, 0x0004003D, 0x00000006, -0x0000019E, 0x0000018A, 0x0003003E, 0x0000019D, 0x0000019E, 0x00070039, 0x00000023, 0x0000019F, -0x00000030, 0x0000019A, 0x0000019C, 0x0000019D, 0x00050050, 0x00000023, 0x000001A1, 0x000001A0, -0x000001A0, 0x00050088, 0x00000023, 0x000001A2, 0x0000019F, 0x000001A1, 0x0003003E, 0x00000199, -0x000001A2, 0x0004003D, 0x00000039, 0x000001A4, 0x0000003C, 0x0004003D, 0x0000000D, 0x000001A5, -0x0000003D, 0x0007004F, 0x00000023, 0x000001A6, 0x000001A5, 0x000001A5, 0x00000000, 0x00000001, -0x0004003D, 0x00000023, 0x000001A7, 0x00000199, 0x00050081, 0x00000023, 0x000001A8, 0x000001A6, -0x000001A7, 0x0004003D, 0x00000029, 0x000001A9, 0x00000042, 0x0004006F, 0x00000006, 0x000001AA, -0x000001A9, 0x00050051, 0x00000006, 0x000001AB, 0x000001A8, 0x00000000, 0x00050051, 0x00000006, -0x000001AC, 0x000001A8, 0x00000001, 0x00060050, 0x00000007, 0x000001AD, 0x000001AB, 0x000001AC, -0x000001AA, 0x00050057, 0x0000000D, 0x000001AE, 0x000001A4, 0x000001AD, 0x00050051, 0x00000006, -0x000001AF, 0x000001AE, 0x00000000, 0x0003003E, 0x000001A3, 0x000001AF, 0x00050041, 0x0000002B, -0x000001B1, 0x0000003D, 0x000001B0, 0x0004003D, 0x00000006, 0x000001B2, 0x000001B1, 0x0004003D, -0x00000006, 0x000001B3, 0x00000181, 0x00050083, 0x00000006, 0x000001B4, 0x000001B2, 0x000001B3, -0x0004003D, 0x00000006, 0x000001B5, 0x000001A3, 0x0007000C, 0x00000006, 0x000001B6, 0x00000001, -0x00000030, 0x000001B4, 0x000001B5, 0x0004003D, 0x00000006, 0x000001B7, 0x00000189, 0x00050081, -0x00000006, 0x000001B8, 0x000001B7, 0x000001B6, 0x0003003E, 0x00000189, 0x000001B8, 0x000200F9, -0x00000195, 0x000200F8, 0x00000195, 0x0004003D, 0x00000029, 0x000001B9, 0x00000191, 0x00050080, -0x00000029, 0x000001BA, 0x000001B9, 0x000000A4, 0x0003003E, 0x00000191, 0x000001BA, 0x000200F9, -0x00000192, 0x000200F8, 0x00000194, 0x0004003D, 0x00000006, 0x000001BB, 0x00000189, 0x00050088, -0x00000006, 0x000001BD, 0x000001BB, 0x000001BC, 0x000200FE, 0x000001BD, 0x00010038, 0x00050036, -0x00000029, 0x00000047, 0x00000000, 0x00000045, 0x00030037, 0x00000008, 0x00000046, 0x000200F8, -0x00000048, 0x0004003B, 0x0000002A, 0x000001C0, 0x00000007, 0x0004003B, 0x0000000E, 0x000001C1, -0x00000007, 0x0004003B, 0x0000002A, 0x000001CB, 0x00000007, 0x0003003E, 0x000001C0, 0x00000093, -0x00050041, 0x000001C2, 0x000001C3, 0x00000171, 0x000000B3, 0x0004003D, 0x0000016C, 0x000001C4, -0x000001C3, 0x0004003D, 0x00000007, 0x000001C5, 0x00000046, 0x00050051, 0x00000006, 0x000001C6, -0x000001C5, 0x00000000, 0x00050051, 0x00000006, 0x000001C7, 0x000001C5, 0x00000001, 0x00050051, -0x00000006, 0x000001C8, 0x000001C5, 0x00000002, 0x00070050, 0x0000000D, 0x000001C9, 0x000001C6, -0x000001C7, 0x000001C8, 0x00000074, 0x00050091, 0x0000000D, 0x000001CA, 0x000001C4, 0x000001C9, -0x0003003E, 0x000001C1, 0x000001CA, 0x0003003E, 0x000001CB, 0x00000093, 0x000200F9, 0x000001CC, -0x000200F8, 0x000001CC, 0x000400F6, 0x000001CE, 0x000001CF, 0x00000000, 0x000200F9, 0x000001D0, -0x000200F8, 0x000001D0, 0x0004003D, 0x00000029, 0x000001D1, 0x000001CB, 0x00050041, 0x000001D3, -0x000001D4, 0x00000171, 0x000001D2, 0x0004003D, 0x00000029, 0x000001D5, 0x000001D4, 0x00050082, -0x00000029, 0x000001D6, 0x000001D5, 0x000000A4, 0x000500B1, 0x00000100, 0x000001D7, 0x000001D1, -0x000001D6, 0x000400FA, 0x000001D7, 0x000001CD, 0x000001CE, 0x000200F8, 0x000001CD, 0x00050041, -0x0000002B, 0x000001D8, 0x000001C1, 0x000001B0, 0x0004003D, 0x00000006, 0x000001D9, 0x000001D8, -0x0004003D, 0x00000029, 0x000001DA, 0x000001CB, 0x00070041, 0x0000008F, 0x000001DB, 0x00000171, -0x000000C4, 0x000001DA, 0x000000D2, 0x0004003D, 0x00000006, 0x000001DC, 0x000001DB, 0x000500B8, -0x00000100, 0x000001DD, 0x000001D9, 0x000001DC, 0x000300F7, 0x000001DF, 0x00000000, 0x000400FA, -0x000001DD, 0x000001DE, 0x000001DF, 0x000200F8, 0x000001DE, 0x0004003D, 0x00000029, 0x000001E0, -0x000001CB, 0x00050080, 0x00000029, 0x000001E1, 0x000001E0, 0x000000A4, 0x0003003E, 0x000001C0, -0x000001E1, 0x000200F9, 0x000001DF, 0x000200F8, 0x000001DF, 0x000200F9, 0x000001CF, 0x000200F8, -0x000001CF, 0x0004003D, 0x00000029, 0x000001E2, 0x000001CB, 0x00050080, 0x00000029, 0x000001E3, -0x000001E2, 0x000000A4, 0x0003003E, 0x000001CB, 0x000001E3, 0x000200F9, 0x000001CC, 0x000200F8, -0x000001CE, 0x0004003D, 0x00000029, 0x000001E4, 0x000001C0, 0x000200FE, 0x000001E4, 0x00010038, -0x00050036, 0x00000006, 0x0000004E, 0x00000000, 0x00000049, 0x00030037, 0x00000008, 0x0000004A, -0x00030037, 0x0000002A, 0x0000004B, 0x00030037, 0x00000008, 0x0000004C, 0x00030037, 0x00000008, -0x0000004D, 0x000200F8, 0x0000004F, 0x0004003B, 0x0000000E, 0x000001E7, 0x00000007, 0x0004003B, -0x0000002B, 0x000001F9, 0x00000007, 0x0004003B, 0x0000002B, 0x000001FB, 0x00000007, 0x0004003B, -0x0000000E, 0x00000206, 0x00000007, 0x0004003B, 0x0000002B, 0x0000020F, 0x00000007, 0x0004003B, -0x0000000E, 0x00000211, 0x00000007, 0x0004003B, 0x0000002B, 0x00000213, 0x00000007, 0x0004003B, -0x00000008, 0x00000215, 0x00000007, 0x0004003B, 0x00000008, 0x00000217, 0x00000007, 0x0004003B, -0x00000008, 0x00000219, 0x00000007, 0x0004003B, 0x0000002A, 0x0000021B, 0x00000007, 0x00050041, -0x000001C2, 0x000001E8, 0x00000171, 0x0000008E, 0x0004003D, 0x0000016C, 0x000001E9, 0x000001E8, -0x0004003D, 0x00000029, 0x000001EA, 0x0000004B, 0x00060041, 0x000001C2, 0x000001EB, 0x00000171, -0x000000A4, 0x000001EA, 0x0004003D, 0x0000016C, 0x000001EC, 0x000001EB, 0x00050092, 0x0000016C, -0x000001ED, 0x000001E9, 0x000001EC, 0x0004003D, 0x00000007, 0x000001EE, 0x0000004A, 0x00050051, -0x00000006, 0x000001EF, 0x000001EE, 0x00000000, 0x00050051, 0x00000006, 0x000001F0, 0x000001EE, -0x00000001, 0x00050051, 0x00000006, 0x000001F1, 0x000001EE, 0x00000002, 0x00070050, 0x0000000D, -0x000001F2, 0x000001EF, 0x000001F0, 0x000001F1, 0x00000074, 0x00050091, 0x0000000D, 0x000001F3, -0x000001ED, 0x000001F2, 0x0003003E, 0x000001E7, 0x000001F3, 0x0004003D, 0x0000000D, 0x000001F4, -0x000001E7, 0x00050041, 0x0000002B, 0x000001F5, 0x000001E7, 0x00000082, 0x0004003D, 0x00000006, -0x000001F6, 0x000001F5, 0x00050088, 0x00000006, 0x000001F7, 0x00000074, 0x000001F6, 0x0005008E, -0x0000000D, 0x000001F8, 0x000001F4, 0x000001F7, 0x0003003E, 0x000001E7, 0x000001F8, 0x0003003E, -0x000001F9, 0x000001FA, 0x00050041, 0x0000008F, 0x000001FC, 0x00000171, 0x000000FC, 0x0004003D, -0x00000006, 0x000001FD, 0x000001FC, 0x0004003D, 0x00000006, 0x000001FE, 0x000001F9, 0x00050085, -0x00000006, 0x000001FF, 0x000001FD, 0x000001FE, 0x00050041, 0x0000002B, 0x00000200, 0x000001E7, -0x000001B0, 0x0004003D, 0x00000006, 0x00000201, 0x00000200, 0x00050088, 0x00000006, 0x00000202, -0x000001FF, 0x00000201, 0x0003003E, 0x000001FB, 0x00000202, 0x0004003D, 0x00000006, 0x00000203, -0x000001FB, 0x0007000C, 0x00000006, 0x00000205, 0x00000001, 0x00000025, 0x00000203, 0x00000204, -0x0003003E, 0x000001FB, 0x00000205, 0x00050041, 0x000001C2, 0x00000207, 0x00000171, 0x000000B3, -0x0004003D, 0x0000016C, 0x00000208, 0x00000207, 0x0004003D, 0x00000007, 0x00000209, 0x0000004A, -0x00050051, 0x00000006, 0x0000020A, 0x00000209, 0x00000000, 0x00050051, 0x00000006, 0x0000020B, -0x00000209, 0x00000001, 0x00050051, 0x00000006, 0x0000020C, 0x00000209, 0x00000002, 0x00070050, -0x0000000D, 0x0000020D, 0x0000020A, 0x0000020B, 0x0000020C, 0x00000074, 0x00050091, 0x0000000D, -0x0000020E, 0x00000208, 0x0000020D, 0x0003003E, 0x00000206, 0x0000020E, 0x0003003E, 0x0000020F, -0x00000074, 0x0004003D, 0x0000000D, 0x00000212, 0x000001E7, 0x0003003E, 0x00000211, 0x00000212, -0x0004003D, 0x00000006, 0x00000214, 0x000001FB, 0x0003003E, 0x00000213, 0x00000214, 0x0004003D, -0x00000007, 0x00000216, 0x0000004C, 0x0003003E, 0x00000215, 0x00000216, 0x0004003D, 0x00000007, -0x00000218, 0x0000004D, 0x0003003E, 0x00000217, 0x00000218, 0x0004003D, 0x00000007, 0x0000021A, -0x0000004A, 0x0003003E, 0x00000219, 0x0000021A, 0x0004003D, 0x00000029, 0x0000021C, 0x0000004B, -0x0003003E, 0x0000021B, 0x0000021C, 0x000B0039, 0x00000006, 0x0000021D, 0x00000043, 0x00000210, -0x00000211, 0x00000213, 0x00000215, 0x00000217, 0x00000219, 0x0000021B, 0x0003003E, 0x0000020F, -0x0000021D, 0x0004003D, 0x00000006, 0x0000021E, 0x0000020F, 0x00050083, 0x00000006, 0x0000021F, -0x00000074, 0x0000021E, 0x0004003D, 0x00000006, 0x00000220, 0x00000073, 0x00050085, 0x00000006, -0x00000221, 0x0000021F, 0x00000220, 0x00050083, 0x00000006, 0x00000222, 0x00000074, 0x00000221, -0x000200FE, 0x00000222, 0x00010038, 0x00050036, 0x00000006, 0x00000053, 0x00000000, 0x00000050, -0x00030037, 0x0000002B, 0x00000051, 0x00030037, 0x0000002B, 0x00000052, 0x000200F8, 0x00000054, -0x0004003B, 0x0000002B, 0x00000225, 0x00000007, 0x0004003B, 0x0000002B, 0x00000229, 0x00000007, -0x0004003B, 0x0000002B, 0x0000022D, 0x00000007, 0x0004003D, 0x00000006, 0x00000226, 0x00000052, -0x0004003D, 0x00000006, 0x00000227, 0x00000052, 0x00050085, 0x00000006, 0x00000228, 0x00000226, -0x00000227, 0x0003003E, 0x00000225, 0x00000228, 0x0004003D, 0x00000006, 0x0000022A, 0x00000225, -0x0004003D, 0x00000006, 0x0000022B, 0x00000225, 0x00050085, 0x00000006, 0x0000022C, 0x0000022A, -0x0000022B, 0x0003003E, 0x00000229, 0x0000022C, 0x0004003D, 0x00000006, 0x0000022E, 0x00000051, -0x0004003D, 0x00000006, 0x0000022F, 0x00000051, 0x00050085, 0x00000006, 0x00000230, 0x0000022E, -0x0000022F, 0x0004003D, 0x00000006, 0x00000231, 0x00000229, 0x00050083, 0x00000006, 0x00000232, -0x00000231, 0x00000074, 0x00050085, 0x00000006, 0x00000233, 0x00000230, 0x00000232, 0x00050081, -0x00000006, 0x00000234, 0x00000233, 0x00000074, 0x0003003E, 0x0000022D, 0x00000234, 0x0004003D, -0x00000006, 0x00000235, 0x00000229, 0x0004003D, 0x00000006, 0x00000237, 0x0000022D, 0x00050085, -0x00000006, 0x00000238, 0x00000236, 0x00000237, 0x0004003D, 0x00000006, 0x00000239, 0x0000022D, -0x00050085, 0x00000006, 0x0000023A, 0x00000238, 0x00000239, 0x00050088, 0x00000006, 0x0000023B, -0x00000235, 0x0000023A, 0x000200FE, 0x0000023B, 0x00010038, 0x00050036, 0x00000006, 0x00000057, -0x00000000, 0x00000050, 0x00030037, 0x0000002B, 0x00000055, 0x00030037, 0x0000002B, 0x00000056, -0x000200F8, 0x00000058, 0x0004003D, 0x00000006, 0x0000023E, 0x00000055, 0x0004003D, 0x00000006, -0x0000023F, 0x00000055, 0x0004003D, 0x00000006, 0x00000240, 0x00000056, 0x00050083, 0x00000006, -0x00000241, 0x00000074, 0x00000240, 0x00050085, 0x00000006, 0x00000242, 0x0000023F, 0x00000241, -0x0004003D, 0x00000006, 0x00000243, 0x00000056, 0x00050081, 0x00000006, 0x00000244, 0x00000242, -0x00000243, 0x00050088, 0x00000006, 0x00000245, 0x0000023E, 0x00000244, 0x000200FE, 0x00000245, -0x00010038, 0x00050036, 0x00000006, 0x0000005D, 0x00000000, 0x00000059, 0x00030037, 0x0000002B, -0x0000005A, 0x00030037, 0x0000002B, 0x0000005B, 0x00030037, 0x0000002B, 0x0000005C, 0x000200F8, -0x0000005E, 0x0004003B, 0x0000002B, 0x00000248, 0x00000007, 0x0004003B, 0x0000002B, 0x0000024B, -0x00000007, 0x0004003B, 0x0000002B, 0x00000250, 0x00000007, 0x0004003B, 0x0000002B, 0x00000252, -0x00000007, 0x0004003B, 0x0000002B, 0x00000255, 0x00000007, 0x0004003B, 0x0000002B, 0x00000257, -0x00000007, 0x0004003D, 0x00000006, 0x00000249, 0x0000005C, 0x00050081, 0x00000006, 0x0000024A, -0x00000249, 0x00000074, 0x0003003E, 0x00000248, 0x0000024A, 0x0004003D, 0x00000006, 0x0000024C, -0x00000248, 0x0004003D, 0x00000006, 0x0000024D, 0x00000248, 0x00050085, 0x00000006, 0x0000024E, -0x0000024C, 0x0000024D, 0x00050088, 0x00000006, 0x0000024F, 0x0000024E, 0x000001BC, 0x0003003E, -0x0000024B, 0x0000024F, 0x0004003D, 0x00000006, 0x00000251, 0x0000005A, 0x0003003E, 0x00000250, -0x00000251, 0x0004003D, 0x00000006, 0x00000253, 0x0000024B, 0x0003003E, 0x00000252, 0x00000253, -0x00060039, 0x00000006, 0x00000254, 0x00000057, 0x00000250, 0x00000252, 0x0004003D, 0x00000006, -0x00000256, 0x0000005B, 0x0003003E, 0x00000255, 0x00000256, 0x0004003D, 0x00000006, 0x00000258, -0x0000024B, 0x0003003E, 0x00000257, 0x00000258, 0x00060039, 0x00000006, 0x00000259, 0x00000057, -0x00000255, 0x00000257, 0x00050085, 0x00000006, 0x0000025A, 0x00000254, 0x00000259, 0x000200FE, -0x0000025A, 0x00010038, 0x00050036, 0x00000007, 0x00000063, 0x00000000, 0x0000005F, 0x00030037, -0x00000008, 0x00000060, 0x00030037, 0x0000002B, 0x00000061, 0x00030037, 0x0000002B, 0x00000062, -0x000200F8, 0x00000064, 0x0004003D, 0x00000007, 0x0000025D, 0x00000060, 0x0004003D, 0x00000006, -0x0000025E, 0x00000062, 0x00050083, 0x00000006, 0x0000025F, 0x00000074, 0x0000025E, 0x00060050, -0x00000007, 0x00000260, 0x0000025F, 0x0000025F, 0x0000025F, 0x0004003D, 0x00000007, 0x00000261, -0x00000060, 0x0007000C, 0x00000007, 0x00000262, 0x00000001, 0x00000028, 0x00000260, 0x00000261, -0x0004003D, 0x00000007, 0x00000263, 0x00000060, 0x00050083, 0x00000007, 0x00000264, 0x00000262, -0x00000263, 0x0004003D, 0x00000006, 0x00000265, 0x00000061, 0x00050083, 0x00000006, 0x00000266, -0x00000074, 0x00000265, 0x0007000C, 0x00000006, 0x00000268, 0x00000001, 0x0000001A, 0x00000266, -0x00000267, 0x0005008E, 0x00000007, 0x00000269, 0x00000264, 0x00000268, 0x00050081, 0x00000007, -0x0000026A, 0x0000025D, 0x00000269, 0x000200FE, 0x0000026A, 0x00010038, 0x00050036, 0x00000007, -0x0000006B, 0x00000000, 0x00000067, 0x00030037, 0x00000008, 0x00000068, 0x00030037, 0x00000008, -0x00000069, 0x00030037, 0x00000066, 0x0000006A, 0x000200F8, 0x0000006C, 0x0004003B, 0x00000008, -0x0000026D, 0x00000007, 0x0004003B, 0x0000002A, 0x0000026F, 0x00000007, 0x0004003B, 0x0000027B, -0x0000027C, 0x00000007, 0x0004003B, 0x0000002B, 0x0000028F, 0x00000007, 0x0004003B, 0x00000008, -0x00000295, 0x00000007, 0x0004003B, 0x0000002B, 0x0000029B, 0x00000007, 0x0004003B, 0x0000002B, -0x000002A0, 0x00000007, 0x0004003B, 0x00000008, 0x000002B4, 0x00000007, 0x0004003B, 0x0000002B, -0x000002BA, 0x00000007, 0x0004003B, 0x0000002B, 0x000002BE, 0x00000007, 0x0004003B, 0x0000002B, -0x000002C3, 0x00000007, 0x0004003B, 0x0000002B, 0x000002C9, 0x00000007, 0x0004003B, 0x0000002B, -0x000002CF, 0x00000007, 0x0004003B, 0x0000002A, 0x000002E0, 0x00000007, 0x0004003B, 0x00000008, -0x000002E1, 0x00000007, 0x0004003B, 0x00000008, 0x000002E4, 0x00000007, 0x0004003B, 0x0000002A, -0x000002E6, 0x00000007, 0x0004003B, 0x00000008, 0x000002E8, 0x00000007, 0x0004003B, 0x00000008, -0x000002EC, 0x00000007, 0x0004003B, 0x00000008, 0x000002F0, 0x00000007, 0x0004003B, 0x00000008, -0x000002F4, 0x00000007, 0x0004003B, 0x00000008, 0x000002FB, 0x00000007, 0x0004003B, 0x0000002B, -0x00000301, 0x00000007, 0x0004003B, 0x0000002B, 0x00000307, 0x00000007, 0x0004003B, 0x00000008, -0x0000030D, 0x00000007, 0x0004003B, 0x00000008, 0x00000313, 0x00000007, 0x0004003B, 0x0000002B, -0x00000315, 0x00000007, 0x0004003B, 0x0000002B, 0x00000316, 0x00000007, 0x0004003B, 0x0000002B, -0x0000031A, 0x00000007, 0x0004003B, 0x0000002B, 0x0000031B, 0x00000007, 0x0004003B, 0x0000002B, -0x0000031D, 0x00000007, 0x0004003B, 0x0000002B, 0x00000321, 0x00000007, 0x0004003B, 0x0000002B, -0x00000322, 0x00000007, 0x0004003B, 0x0000002B, 0x00000324, 0x00000007, 0x0004003B, 0x0000002B, -0x00000327, 0x00000007, 0x0004003B, 0x00000008, 0x0000032B, 0x00000007, 0x0004003B, 0x00000008, -0x00000333, 0x00000007, 0x0004003B, 0x00000008, 0x00000339, 0x00000007, 0x0003003E, 0x0000026D, -0x0000026E, 0x0003003E, 0x0000026F, 0x00000093, 0x000200F9, 0x00000270, 0x000200F8, 0x00000270, -0x000400F6, 0x00000272, 0x00000273, 0x00000000, 0x000200F9, 0x00000274, 0x000200F8, 0x00000274, -0x0004003D, 0x00000029, 0x00000275, 0x0000026F, 0x00050041, 0x000001D3, 0x00000277, 0x00000171, -0x00000276, 0x0004003D, 0x00000029, 0x00000278, 0x00000277, 0x000500B1, 0x00000100, 0x00000279, -0x00000275, 0x00000278, 0x000400FA, 0x00000279, 0x00000271, 0x00000272, 0x000200F8, 0x00000271, -0x0004003D, 0x00000029, 0x0000027D, 0x0000026F, 0x00060041, 0x0000027E, 0x0000027F, 0x00000171, -0x00000093, 0x0000027D, 0x0004003D, 0x00000169, 0x00000280, 0x0000027F, 0x00050051, 0x0000000D, -0x00000281, 0x00000280, 0x00000000, 0x00050041, 0x0000000E, 0x00000282, 0x0000027C, 0x00000093, -0x0003003E, 0x00000282, 0x00000281, 0x00050051, 0x0000000D, 0x00000283, 0x00000280, 0x00000001, -0x00050041, 0x0000000E, 0x00000284, 0x0000027C, 0x000000A4, 0x0003003E, 0x00000284, 0x00000283, -0x00050051, 0x0000000D, 0x00000285, 0x00000280, 0x00000002, 0x00050041, 0x0000000E, 0x00000286, -0x0000027C, 0x000000B3, 0x0003003E, 0x00000286, 0x00000285, 0x00050051, 0x00000006, 0x00000287, -0x00000280, 0x00000003, 0x00050041, 0x0000002B, 0x00000288, 0x0000027C, 0x000000E8, 0x0003003E, -0x00000288, 0x00000287, 0x00050051, 0x00000006, 0x00000289, 0x00000280, 0x00000004, 0x00050041, -0x0000002B, 0x0000028A, 0x0000027C, 0x0000008E, 0x0003003E, 0x0000028A, 0x00000289, 0x00050051, -0x00000006, 0x0000028B, 0x00000280, 0x00000005, 0x00050041, 0x0000002B, 0x0000028C, 0x0000027C, -0x000000AF, 0x0003003E, 0x0000028C, 0x0000028B, 0x00050051, 0x00000006, 0x0000028D, 0x00000280, -0x00000006, 0x00050041, 0x0000002B, 0x0000028E, 0x0000027C, 0x000000C4, 0x0003003E, 0x0000028E, -0x0000028D, 0x0003003E, 0x0000028F, 0x00000127, 0x00050041, 0x0000002B, 0x00000290, 0x0000027C, -0x000000AF, 0x0004003D, 0x00000006, 0x00000291, 0x00000290, 0x000500B4, 0x00000100, 0x00000292, -0x00000291, 0x00000110, 0x000300F7, 0x00000294, 0x00000000, 0x000400FA, 0x00000292, 0x00000293, -0x000002AE, 0x000200F8, 0x00000293, 0x00050041, 0x0000000E, 0x00000296, 0x0000027C, 0x000000A4, -0x0004003D, 0x0000000D, 0x00000297, 0x00000296, 0x0008004F, 0x00000007, 0x00000298, 0x00000297, -0x00000297, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x00000299, 0x00000069, -0x00050083, 0x00000007, 0x0000029A, 0x00000298, 0x00000299, 0x0003003E, 0x00000295, 0x0000029A, -0x0004003D, 0x00000007, 0x0000029C, 0x00000295, 0x0006000C, 0x00000006, 0x0000029D, 0x00000001, -0x00000042, 0x0000029C, 0x0003003E, 0x0000029B, 0x0000029D, 0x0004003D, 0x00000007, 0x0000029E, -0x00000295, 0x0006000C, 0x00000007, 0x0000029F, 0x00000001, 0x00000045, 0x0000029E, 0x0003003E, -0x00000295, 0x0000029F, 0x00050041, 0x0000002B, 0x000002A1, 0x0000027C, 0x0000008E, 0x0004003D, -0x00000006, 0x000002A2, 0x000002A1, 0x0004003D, 0x00000006, 0x000002A3, 0x0000029B, 0x0007000C, -0x00000006, 0x000002A4, 0x00000001, 0x0000001A, 0x000002A3, 0x00000110, 0x00050081, 0x00000006, -0x000002A5, 0x000002A4, 0x00000074, 0x00050088, 0x00000006, 0x000002A6, 0x000002A2, 0x000002A5, -0x0003003E, 0x000002A0, 0x000002A6, 0x0004003D, 0x00000006, 0x000002A7, 0x000002A0, 0x0003003E, -0x0000028F, 0x000002A7, 0x0004003D, 0x00000007, 0x000002A8, 0x00000295, 0x00050051, 0x00000006, -0x000002A9, 0x000002A8, 0x00000000, 0x00050051, 0x00000006, 0x000002AA, 0x000002A8, 0x00000001, -0x00050051, 0x00000006, 0x000002AB, 0x000002A8, 0x00000002, 0x00070050, 0x0000000D, 0x000002AC, -0x000002A9, 0x000002AA, 0x000002AB, 0x00000074, 0x00050041, 0x0000000E, 0x000002AD, 0x0000027C, -0x000000B3, 0x0003003E, 0x000002AD, 0x000002AC, 0x000200F9, 0x00000294, 0x000200F8, 0x000002AE, -0x00050041, 0x0000002B, 0x000002AF, 0x0000027C, 0x000000AF, 0x0004003D, 0x00000006, 0x000002B0, -0x000002AF, 0x000500B4, 0x00000100, 0x000002B1, 0x000002B0, 0x00000074, 0x000300F7, 0x000002B3, -0x00000000, 0x000400FA, 0x000002B1, 0x000002B2, 0x000002DF, 0x000200F8, 0x000002B2, 0x00050041, -0x0000000E, 0x000002B5, 0x0000027C, 0x000000A4, 0x0004003D, 0x0000000D, 0x000002B6, 0x000002B5, -0x0008004F, 0x00000007, 0x000002B7, 0x000002B6, 0x000002B6, 0x00000000, 0x00000001, 0x00000002, -0x0004003D, 0x00000007, 0x000002B8, 0x00000069, 0x00050083, 0x00000007, 0x000002B9, 0x000002B7, -0x000002B8, 0x0003003E, 0x000002B4, 0x000002B9, 0x00050041, 0x0000002B, 0x000002BB, 0x0000027C, -0x000000C4, 0x0004003D, 0x00000006, 0x000002BC, 0x000002BB, 0x00050083, 0x00000006, 0x000002BD, -0x00000074, 0x000002BC, 0x0003003E, 0x000002BA, 0x000002BD, 0x0004003D, 0x00000007, 0x000002BF, -0x000002B4, 0x0006000C, 0x00000006, 0x000002C0, 0x00000001, 0x00000042, 0x000002BF, 0x0003003E, -0x000002BE, 0x000002C0, 0x0004003D, 0x00000007, 0x000002C1, 0x000002B4, 0x0006000C, 0x00000007, -0x000002C2, 0x00000001, 0x00000045, 0x000002C1, 0x0003003E, 0x000002B4, 0x000002C2, 0x0004003D, -0x00000007, 0x000002C4, 0x000002B4, 0x00050041, 0x0000000E, 0x000002C5, 0x0000027C, 0x000000B3, -0x0004003D, 0x0000000D, 0x000002C6, 0x000002C5, 0x0008004F, 0x00000007, 0x000002C7, 0x000002C6, -0x000002C6, 0x00000000, 0x00000001, 0x00000002, 0x00050094, 0x00000006, 0x000002C8, 0x000002C4, -0x000002C7, 0x0003003E, 0x000002C3, 0x000002C8, 0x0004003D, 0x00000006, 0x000002CA, 0x000002BA, -0x0004003D, 0x00000006, 0x000002CB, 0x000002BA, 0x00050085, 0x00000006, 0x000002CD, 0x000002CB, -0x000002CC, 0x00050083, 0x00000006, 0x000002CE, 0x000002CA, 0x000002CD, 0x0003003E, 0x000002C9, -0x000002CE, 0x0004003D, 0x00000006, 0x000002D0, 0x000002C3, 0x0004003D, 0x00000006, 0x000002D1, -0x000002BA, 0x00050083, 0x00000006, 0x000002D2, 0x000002D0, 0x000002D1, 0x0004003D, 0x00000006, -0x000002D3, 0x000002C9, 0x00050088, 0x00000006, 0x000002D4, 0x000002D2, 0x000002D3, 0x0003003E, -0x000002CF, 0x000002D4, 0x00050041, 0x0000002B, 0x000002D5, 0x0000027C, 0x0000008E, 0x0004003D, -0x00000006, 0x000002D6, 0x000002D5, 0x0004003D, 0x00000006, 0x000002D7, 0x000002BE, 0x0007000C, -0x00000006, 0x000002D8, 0x00000001, 0x0000001A, 0x000002D7, 0x00000110, 0x00050081, 0x00000006, -0x000002D9, 0x000002D8, 0x00000074, 0x00050088, 0x00000006, 0x000002DA, 0x000002D6, 0x000002D9, -0x0004003D, 0x00000006, 0x000002DB, 0x000002CF, 0x00050085, 0x00000006, 0x000002DC, 0x000002DB, -0x000002DA, 0x0003003E, 0x000002CF, 0x000002DC, 0x0004003D, 0x00000006, 0x000002DD, 0x000002CF, -0x0008000C, 0x00000006, 0x000002DE, 0x00000001, 0x0000002B, 0x000002DD, 0x00000127, 0x00000074, -0x0003003E, 0x0000028F, 0x000002DE, 0x000200F9, 0x000002B3, 0x000200F8, 0x000002DF, 0x0004003D, -0x00000007, 0x000002E2, 0x00000069, 0x0003003E, 0x000002E1, 0x000002E2, 0x00050039, 0x00000029, -0x000002E3, 0x00000047, 0x000002E1, 0x0003003E, 0x000002E0, 0x000002E3, 0x0004003D, 0x00000007, -0x000002E5, 0x00000069, 0x0003003E, 0x000002E4, 0x000002E5, 0x0004003D, 0x00000029, 0x000002E7, -0x000002E0, 0x0003003E, 0x000002E6, 0x000002E7, 0x00050041, 0x0000000E, 0x000002E9, 0x0000027C, -0x000000B3, 0x0004003D, 0x0000000D, 0x000002EA, 0x000002E9, 0x0008004F, 0x00000007, 0x000002EB, -0x000002EA, 0x000002EA, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000002E8, 0x000002EB, -0x00050041, 0x00000008, 0x000002ED, 0x0000006A, 0x0000008E, 0x0004003D, 0x00000007, 0x000002EE, -0x000002ED, 0x0003003E, 0x000002EC, 0x000002EE, 0x00080039, 0x00000006, 0x000002EF, 0x0000004E, -0x000002E4, 0x000002E6, 0x000002E8, 0x000002EC, 0x0003003E, 0x0000028F, 0x000002EF, 0x000200F9, -0x000002B3, 0x000200F8, 0x000002B3, 0x000200F9, 0x00000294, 0x000200F8, 0x00000294, 0x00050041, -0x0000000E, 0x000002F1, 0x0000027C, 0x000000B3, 0x0004003D, 0x0000000D, 0x000002F2, 0x000002F1, -0x0008004F, 0x00000007, 0x000002F3, 0x000002F2, 0x000002F2, 0x00000000, 0x00000001, 0x00000002, -0x0003003E, 0x000002F0, 0x000002F3, 0x00050041, 0x0000000E, 0x000002F5, 0x0000027C, 0x00000093, -0x0004003D, 0x0000000D, 0x000002F6, 0x000002F5, 0x0008004F, 0x00000007, 0x000002F7, 0x000002F6, -0x000002F6, 0x00000000, 0x00000001, 0x00000002, 0x00050041, 0x0000002B, 0x000002F8, 0x0000027C, -0x000000E8, 0x0004003D, 0x00000006, 0x000002F9, 0x000002F8, 0x0005008E, 0x00000007, 0x000002FA, -0x000002F7, 0x000002F9, 0x0003003E, 0x000002F4, 0x000002FA, 0x0004003D, 0x00000007, 0x000002FC, -0x000002F0, 0x00050041, 0x00000008, 0x000002FD, 0x0000006A, 0x000000C4, 0x0004003D, 0x00000007, -0x000002FE, 0x000002FD, 0x00050081, 0x00000007, 0x000002FF, 0x000002FC, 0x000002FE, 0x0006000C, -0x00000007, 0x00000300, 0x00000001, 0x00000045, 0x000002FF, 0x0003003E, 0x000002FB, 0x00000300, -0x00050041, 0x00000008, 0x00000302, 0x0000006A, 0x0000008E, 0x0004003D, 0x00000007, 0x00000303, -0x00000302, 0x0004003D, 0x00000007, 0x00000304, 0x000002F0, 0x00050094, 0x00000006, 0x00000305, -0x00000303, 0x00000304, 0x0007000C, 0x00000006, 0x00000306, 0x00000001, 0x00000028, 0x00000127, -0x00000305, 0x0003003E, 0x00000301, 0x00000306, 0x00050041, 0x00000008, 0x00000308, 0x0000006A, -0x0000008E, 0x0004003D, 0x00000007, 0x00000309, 0x00000308, 0x0004003D, 0x00000007, 0x0000030A, -0x000002FB, 0x00050094, 0x00000006, 0x0000030B, 0x00000309, 0x0000030A, 0x0007000C, 0x00000006, -0x0000030C, 0x00000001, 0x00000028, 0x00000127, 0x0000030B, 0x0003003E, 0x00000307, 0x0000030C, -0x0004003D, 0x00000007, 0x0000030E, 0x000002FB, 0x00050041, 0x00000008, 0x0000030F, 0x0000006A, -0x000000C4, 0x0004003D, 0x00000007, 0x00000310, 0x0000030F, 0x00050094, 0x00000006, 0x00000311, -0x0000030E, 0x00000310, 0x0007000C, 0x00000006, 0x00000312, 0x00000001, 0x00000028, 0x00000127, -0x00000311, 0x0004003D, 0x00000007, 0x00000314, 0x00000068, 0x0003003E, 0x00000313, 0x00000314, -0x0003003E, 0x00000315, 0x00000312, 0x00050041, 0x0000002B, 0x00000317, 0x0000006A, 0x000000B3, -0x0004003D, 0x00000006, 0x00000318, 0x00000317, 0x0003003E, 0x00000316, 0x00000318, 0x00070039, -0x00000007, 0x00000319, 0x00000063, 0x00000313, 0x00000315, 0x00000316, 0x0003003E, 0x0000030D, -0x00000319, 0x0004003D, 0x00000006, 0x0000031C, 0x00000307, 0x0003003E, 0x0000031B, 0x0000031C, -0x00050041, 0x0000002B, 0x0000031E, 0x0000006A, 0x000000B3, 0x0004003D, 0x00000006, 0x0000031F, -0x0000031E, 0x0003003E, 0x0000031D, 0x0000031F, 0x00060039, 0x00000006, 0x00000320, 0x00000053, -0x0000031B, 0x0000031D, 0x0003003E, 0x0000031A, 0x00000320, 0x0004003D, 0x00000006, 0x00000323, -0x00000301, 0x0003003E, 0x00000322, 0x00000323, 0x00050041, 0x0000002B, 0x00000325, 0x0000006A, -0x000000FC, 0x0004003D, 0x00000006, 0x00000326, 0x00000325, 0x0003003E, 0x00000324, 0x00000326, -0x00050041, 0x0000002B, 0x00000328, 0x0000006A, 0x000000B3, 0x0004003D, 0x00000006, 0x00000329, -0x00000328, 0x0003003E, 0x00000327, 0x00000329, 0x00070039, 0x00000006, 0x0000032A, 0x0000005D, -0x00000322, 0x00000324, 0x00000327, 0x0003003E, 0x00000321, 0x0000032A, 0x0004003D, 0x00000007, -0x0000032C, 0x0000030D, 0x00060050, 0x00000007, 0x0000032D, 0x00000074, 0x00000074, 0x00000074, -0x00050083, 0x00000007, 0x0000032E, 0x0000032D, 0x0000032C, 0x00060041, 0x0000002B, 0x0000032F, -0x0000006A, 0x000000A4, 0x000000D2, 0x0004003D, 0x00000006, 0x00000330, 0x0000032F, 0x00050083, -0x00000006, 0x00000331, 0x00000074, 0x00000330, 0x0005008E, 0x00000007, 0x00000332, 0x0000032E, -0x00000331, 0x0003003E, 0x0000032B, 0x00000332, 0x0004003D, 0x00000007, 0x00000334, 0x0000032B, -0x00050041, 0x0000000E, 0x00000335, 0x0000006A, 0x00000093, 0x0004003D, 0x0000000D, 0x00000336, -0x00000335, 0x0008004F, 0x00000007, 0x00000337, 0x00000336, 0x00000336, 0x00000000, 0x00000001, -0x00000002, 0x00050085, 0x00000007, 0x00000338, 0x00000334, 0x00000337, 0x0003003E, 0x00000333, -0x00000338, 0x0004003D, 0x00000007, 0x0000033A, 0x0000030D, 0x0004003D, 0x00000006, 0x0000033B, -0x0000031A, 0x0005008E, 0x00000007, 0x0000033C, 0x0000033A, 0x0000033B, 0x0004003D, 0x00000006, -0x0000033D, 0x00000321, 0x0005008E, 0x00000007, 0x0000033E, 0x0000033C, 0x0000033D, 0x0004003D, -0x00000006, 0x00000341, 0x00000301, 0x00050085, 0x00000006, 0x00000342, 0x00000340, 0x00000341, -0x00050041, 0x0000002B, 0x00000343, 0x0000006A, 0x000000FC, 0x0004003D, 0x00000006, 0x00000344, -0x00000343, 0x00050085, 0x00000006, 0x00000345, 0x00000342, 0x00000344, 0x0007000C, 0x00000006, -0x00000346, 0x00000001, 0x00000028, 0x0000033F, 0x00000345, 0x00060050, 0x00000007, 0x00000347, -0x00000346, 0x00000346, 0x00000346, 0x00050088, 0x00000007, 0x00000348, 0x0000033E, 0x00000347, -0x0003003E, 0x00000339, 0x00000348, 0x0004003D, 0x00000007, 0x00000349, 0x00000339, 0x0008000C, -0x00000007, 0x0000034C, 0x00000001, 0x0000002B, 0x00000349, 0x0000026E, 0x0000034B, 0x0003003E, -0x00000339, 0x0000034C, 0x0004003D, 0x00000007, 0x0000034D, 0x00000333, 0x0004003D, 0x00000007, -0x0000034E, 0x00000339, 0x00050081, 0x00000007, 0x0000034F, 0x0000034D, 0x0000034E, 0x0004003D, -0x00000007, 0x00000350, 0x000002F4, 0x00050085, 0x00000007, 0x00000351, 0x0000034F, 0x00000350, -0x0004003D, 0x00000006, 0x00000352, 0x00000301, 0x0005008E, 0x00000007, 0x00000353, 0x00000351, -0x00000352, 0x0004003D, 0x00000006, 0x00000354, 0x0000028F, 0x0005008E, 0x00000007, 0x00000355, -0x00000353, 0x00000354, 0x00050041, 0x0000002B, 0x00000356, 0x0000006A, 0x000000AF, 0x0004003D, -0x00000006, 0x00000357, 0x00000356, 0x0005008E, 0x00000007, 0x00000358, 0x00000355, 0x00000357, -0x0004003D, 0x00000007, 0x00000359, 0x0000026D, 0x00050081, 0x00000007, 0x0000035A, 0x00000359, -0x00000358, 0x0003003E, 0x0000026D, 0x0000035A, 0x000200F9, 0x00000273, 0x000200F8, 0x00000273, -0x0004003D, 0x00000029, 0x0000035B, 0x0000026F, 0x00050080, 0x00000029, 0x0000035C, 0x0000035B, -0x000000A4, 0x0003003E, 0x0000026F, 0x0000035C, 0x000200F9, 0x00000270, 0x000200F8, 0x00000272, -0x0004003D, 0x00000007, 0x0000035D, 0x0000026D, 0x000200FE, 0x0000035D, 0x00010038, 0x00050036, -0x00000007, 0x00000070, 0x00000000, 0x00000067, 0x00030037, 0x00000008, 0x0000006D, 0x00030037, -0x00000008, 0x0000006E, 0x00030037, 0x00000066, 0x0000006F, 0x000200F8, 0x00000071, 0x0004003B, -0x00000008, 0x00000360, 0x00000007, 0x0004003B, 0x00000008, 0x0000036A, 0x00000007, 0x0004003B, -0x00000008, 0x0000036D, 0x00000007, 0x0004003B, 0x00000008, 0x0000036E, 0x00000007, 0x0004003B, -0x0000002B, 0x00000370, 0x00000007, 0x0004003B, 0x0000002B, 0x00000373, 0x00000007, 0x0004003B, -0x00000008, 0x00000377, 0x00000007, 0x0004003B, 0x00000008, 0x0000037F, 0x00000007, 0x0004003B, -0x0000002A, 0x00000385, 0x00000007, 0x0004003B, 0x00000008, 0x00000389, 0x00000007, 0x0004003B, -0x00000008, 0x00000394, 0x00000007, 0x0004003B, 0x00000024, 0x00000397, 0x00000007, 0x0004003B, -0x00000008, 0x000003A1, 0x00000007, 0x0004003D, 0x00000362, 0x00000365, 0x00000364, 0x00050041, -0x00000008, 0x00000366, 0x0000006F, 0x0000008E, 0x0004003D, 0x00000007, 0x00000367, 0x00000366, -0x00050057, 0x0000000D, 0x00000368, 0x00000365, 0x00000367, 0x0008004F, 0x00000007, 0x00000369, -0x00000368, 0x00000368, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000360, 0x00000369, -0x0004003D, 0x00000007, 0x0000036B, 0x00000360, 0x0003003E, 0x0000036A, 0x0000036B, 0x00050039, -0x00000007, 0x0000036C, 0x0000000B, 0x0000036A, 0x0003003E, 0x00000360, 0x0000036C, 0x0004003D, -0x00000007, 0x0000036F, 0x0000006D, 0x0003003E, 0x0000036E, 0x0000036F, 0x00050041, 0x0000002B, -0x00000371, 0x0000006F, 0x000000FC, 0x0004003D, 0x00000006, 0x00000372, 0x00000371, 0x0003003E, -0x00000370, 0x00000372, 0x00050041, 0x0000002B, 0x00000374, 0x0000006F, 0x000000B3, 0x0004003D, -0x00000006, 0x00000375, 0x00000374, 0x0003003E, 0x00000373, 0x00000375, 0x00070039, 0x00000007, -0x00000376, 0x00000063, 0x0000036E, 0x00000370, 0x00000373, 0x0003003E, 0x0000036D, 0x00000376, -0x0004003D, 0x00000007, 0x00000378, 0x0000036D, 0x00060050, 0x00000007, 0x00000379, 0x00000074, -0x00000074, 0x00000074, 0x00050083, 0x00000007, 0x0000037A, 0x00000379, 0x00000378, 0x00060041, -0x0000002B, 0x0000037B, 0x0000006F, 0x000000A4, 0x000000D2, 0x0004003D, 0x00000006, 0x0000037C, -0x0000037B, 0x00050083, 0x00000006, 0x0000037D, 0x00000074, 0x0000037C, 0x0005008E, 0x00000007, -0x0000037E, 0x0000037A, 0x0000037D, 0x0003003E, 0x00000377, 0x0000037E, 0x00050041, 0x0000000E, -0x00000380, 0x0000006F, 0x00000093, 0x0004003D, 0x0000000D, 0x00000381, 0x00000380, 0x0008004F, -0x00000007, 0x00000382, 0x00000381, 0x00000381, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, -0x00000007, 0x00000383, 0x00000360, 0x00050085, 0x00000007, 0x00000384, 0x00000382, 0x00000383, -0x0003003E, 0x0000037F, 0x00000384, 0x00050041, 0x000001D3, 0x00000387, 0x00000171, 0x00000386, -0x0004003D, 0x00000029, 0x00000388, 0x00000387, 0x0003003E, 0x00000385, 0x00000388, 0x0004003D, -0x00000362, 0x0000038B, 0x0000038A, 0x0004003D, 0x00000007, 0x0000038C, 0x0000006E, 0x00050041, -0x0000002B, 0x0000038D, 0x0000006F, 0x000000B3, 0x0004003D, 0x00000006, 0x0000038E, 0x0000038D, -0x0004003D, 0x00000029, 0x0000038F, 0x00000385, 0x0004006F, 0x00000006, 0x00000390, 0x0000038F, -0x00050085, 0x00000006, 0x00000391, 0x0000038E, 0x00000390, 0x00070058, 0x0000000D, 0x00000392, -0x0000038B, 0x0000038C, 0x00000002, 0x00000391, 0x0008004F, 0x00000007, 0x00000393, 0x00000392, -0x00000392, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000389, 0x00000393, 0x0004003D, -0x00000007, 0x00000395, 0x00000389, 0x0003003E, 0x00000394, 0x00000395, 0x00050039, 0x00000007, -0x00000396, 0x0000000B, 0x00000394, 0x0003003E, 0x00000389, 0x00000396, 0x0004003D, 0x0000009B, -0x00000399, 0x00000398, 0x00050041, 0x0000002B, 0x0000039A, 0x0000006F, 0x000000FC, 0x0004003D, -0x00000006, 0x0000039B, 0x0000039A, 0x00050041, 0x0000002B, 0x0000039C, 0x0000006F, 0x000000B3, -0x0004003D, 0x00000006, 0x0000039D, 0x0000039C, 0x00050050, 0x00000023, 0x0000039E, 0x0000039B, -0x0000039D, 0x00050057, 0x0000000D, 0x0000039F, 0x00000399, 0x0000039E, 0x0007004F, 0x00000023, -0x000003A0, 0x0000039F, 0x0000039F, 0x00000000, 0x00000001, 0x0003003E, 0x00000397, 0x000003A0, -0x0004003D, 0x00000007, 0x000003A2, 0x00000389, 0x0004003D, 0x00000007, 0x000003A3, 0x0000036D, -0x00050041, 0x0000002B, 0x000003A4, 0x00000397, 0x000000D2, 0x0004003D, 0x00000006, 0x000003A5, -0x000003A4, 0x0005008E, 0x00000007, 0x000003A6, 0x000003A3, 0x000003A5, 0x00050041, 0x0000002B, -0x000003A8, 0x00000397, 0x000003A7, 0x0004003D, 0x00000006, 0x000003A9, 0x000003A8, 0x00060050, -0x00000007, 0x000003AA, 0x000003A9, 0x000003A9, 0x000003A9, 0x00050081, 0x00000007, 0x000003AB, -0x000003A6, 0x000003AA, 0x00050085, 0x00000007, 0x000003AC, 0x000003A2, 0x000003AB, 0x0003003E, -0x000003A1, 0x000003AC, 0x0004003D, 0x00000007, 0x000003AD, 0x00000377, 0x0004003D, 0x00000007, -0x000003AE, 0x0000037F, 0x00050085, 0x00000007, 0x000003AF, 0x000003AD, 0x000003AE, 0x0004003D, -0x00000007, 0x000003B0, 0x000003A1, 0x00050081, 0x00000007, 0x000003B1, 0x000003AF, 0x000003B0, -0x000200FE, 0x000003B1, 0x00010038, +0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00050005, 0x0000000A, +0x35776F70, 0x3B316628, 0x00000000, 0x00030005, 0x00000009, 0x00000078, 0x00060005, 0x00000010, +0x61476544, 0x28616D6D, 0x3B336676, 0x00000000, 0x00040005, 0x0000000F, 0x6F6C6F63, 0x00007275, +0x00060005, 0x00000016, 0x61476544, 0x28616D6D, 0x3B346676, 0x00000000, 0x00040005, 0x00000015, +0x6F6C6F63, 0x00007275, 0x00060005, 0x00000019, 0x75746173, 0x65746172, 0x3B316628, 0x00000000, +0x00040005, 0x00000018, 0x756C6176, 0x00000065, 0x00080005, 0x00000020, 0x47475F44, 0x31662858, +0x3B31663B, 0x3B336676, 0x3B336676, 0x00000000, 0x00050005, 0x0000001C, 0x67756F72, 0x73656E68, +0x00000073, 0x00030005, 0x0000001D, 0x00486F4E, 0x00030005, 0x0000001E, 0x0000006E, 0x00030005, +0x0000001F, 0x00000068, 0x00080005, 0x00000026, 0x63535F46, 0x63696C68, 0x6676286B, 0x31663B33, +0x3B31663B, 0x00000000, 0x00030005, 0x00000023, 0x00003066, 0x00030005, 0x00000024, 0x00303966, +0x00030005, 0x00000025, 0x00486F56, 0x00070005, 0x0000002C, 0x63535F46, 0x63696C68, 0x3166286B, +0x3B31663B, 0x003B3166, 0x00030005, 0x00000029, 0x00000075, 0x00030005, 0x0000002A, 0x00003066, +0x00030005, 0x0000002B, 0x00303966, 0x00080005, 0x00000033, 0x425F6446, 0x656C7275, 0x31662879, +0x3B31663B, 0x663B3166, 0x00003B31, 0x00050005, 0x0000002F, 0x67756F72, 0x73656E68, 0x00000073, +0x00030005, 0x00000030, 0x00566F4E, 0x00030005, 0x00000031, 0x004C6F4E, 0x00030005, 0x00000032, +0x00486F4C, 0x000A0005, 0x00000038, 0x6D535F56, 0x47687469, 0x6F435847, 0x6C657272, 0x64657461, +0x3B316628, 0x663B3166, 0x00003B31, 0x00030005, 0x00000035, 0x00566F4E, 0x00030005, 0x00000036, +0x004C6F4E, 0x00030005, 0x00000037, 0x00000061, 0x000A0005, 0x0000003D, 0x706D6F43, 0x4D657475, +0x6F726369, 0x64616853, 0x6E69776F, 0x31662867, 0x3B31663B, 0x00000000, 0x00030005, 0x0000003B, +0x004C6F4E, 0x00050005, 0x0000003C, 0x69736976, 0x696C6962, 0x00007974, 0x00080005, 0x00000043, +0x66666944, 0x28657375, 0x663B3166, 0x31663B31, 0x3B31663B, 0x00000000, 0x00050005, 0x0000003F, +0x67756F72, 0x73656E68, 0x00000073, 0x00030005, 0x00000040, 0x00566F4E, 0x00030005, 0x00000041, +0x004C6F4E, 0x00030005, 0x00000042, 0x00486F4C, 0x00060005, 0x00000046, 0x6D616C63, 0x566F4E70, +0x3B316628, 0x00000000, 0x00030005, 0x00000045, 0x00566F4E, 0x00090005, 0x0000004B, 0x706D6F63, +0x44657475, 0x75666669, 0x6F436573, 0x28726F6C, 0x3B346676, 0x003B3166, 0x00050005, 0x00000049, +0x65736162, 0x6F6C6F43, 0x00000072, 0x00050005, 0x0000004A, 0x6174656D, 0x63696C6C, 0x00000000, +0x00080005, 0x00000051, 0x706D6F63, 0x46657475, 0x66762830, 0x31663B34, 0x3B31663B, 0x00000000, +0x00050005, 0x0000004E, 0x65736162, 0x6F6C6F43, 0x00000072, 0x00050005, 0x0000004F, 0x6174656D, +0x63696C6C, 0x00000000, 0x00050005, 0x00000050, 0x6C666572, 0x61746365, 0x0065636E, 0x00080005, +0x00000054, 0x706D6F63, 0x44657475, 0x656C6569, 0x69727463, 0x28304663, 0x003B3166, 0x00050005, +0x00000053, 0x6C666572, 0x61746365, 0x0065636E, 0x000B0005, 0x00000057, 0x63726570, 0x75747065, +0x6F526C61, 0x6E686775, 0x54737365, 0x756F526F, 0x656E6867, 0x66287373, 0x00003B31, 0x00070005, +0x00000056, 0x63726570, 0x75747065, 0x6F526C61, 0x6E686775, 0x00737365, 0x00090005, 0x0000005D, +0x74736964, 0x75626972, 0x6E6F6974, 0x3B316628, 0x763B3166, 0x763B3366, 0x003B3366, 0x00050005, +0x00000059, 0x67756F72, 0x73656E68, 0x00000073, 0x00030005, 0x0000005A, 0x00486F4E, 0x00030005, +0x0000005B, 0x00000068, 0x00040005, 0x0000005C, 0x6D726F6E, 0x00006C61, 0x00080005, 0x00000062, +0x69736976, 0x696C6962, 0x66287974, 0x31663B31, 0x3B31663B, 0x00000000, 0x00050005, 0x0000005F, +0x67756F72, 0x73656E68, 0x00000073, 0x00030005, 0x00000060, 0x00566F4E, 0x00030005, 0x00000061, +0x004C6F4E, 0x00060005, 0x00000067, 0x73657266, 0x286C656E, 0x3B336676, 0x003B3166, 0x00030005, +0x00000065, 0x00003066, 0x00030005, 0x00000066, 0x00486F4C, 0x000B0005, 0x0000006D, 0x73657266, +0x536C656E, 0x696C6863, 0x6F526B63, 0x6E686775, 0x28737365, 0x3B336676, 0x663B3166, 0x00003B31, +0x00030005, 0x0000006A, 0x00003046, 0x00050005, 0x0000006B, 0x54736F63, 0x61746568, 0x00000000, +0x00050005, 0x0000006C, 0x67756F72, 0x73656E68, 0x00000073, 0x00050005, 0x00000070, 0x41746547, +0x6465626C, 0x0000286F, 0x00060005, 0x00000073, 0x4D746547, 0x6C617465, 0x2863696C, 0x00000000, +0x00060005, 0x00000076, 0x52746547, 0x6867756F, 0x7373656E, 0x00000028, 0x00040005, 0x00000078, +0x41746547, 0x0000284F, 0x00070005, 0x0000007B, 0x45746547, 0x7373696D, 0x28657669, 0x3B336676, +0x00000000, 0x00040005, 0x0000007A, 0x65626C61, 0x00006F64, 0x00070005, 0x0000007D, 0x4E746547, +0x616D726F, 0x6F72466C, 0x70614D6D, 0x00000028, 0x00050005, 0x00000083, 0x73696F4E, 0x66762865, +0x00003B32, 0x00030005, 0x00000082, 0x00006F63, 0x00090005, 0x0000008B, 0x65676F56, 0x7369446C, +0x6D61536B, 0x28656C70, 0x693B3169, 0x31663B31, 0x0000003B, 0x00050005, 0x00000088, 0x706D6173, +0x6E49656C, 0x00786564, 0x00060005, 0x00000089, 0x706D6173, 0x4373656C, 0x746E756F, 0x00000000, +0x00030005, 0x0000008A, 0x00696870, 0x00090005, 0x00000091, 0x53746547, 0x6F646168, 0x61694277, +0x66762873, 0x66763B33, 0x31693B33, 0x0000003B, 0x00060005, 0x0000008E, 0x6867696C, 0x72694474, +0x69746365, 0x00006E6F, 0x00040005, 0x0000008F, 0x6D726F6E, 0x00006C61, 0x00050005, 0x00000090, +0x64616873, 0x6E49776F, 0x00786564, 0x00100005, 0x0000009E, 0x53464350, 0x6F646168, 0x72694477, +0x69746365, 0x6C616E6F, 0x6867694C, 0x41732874, 0x763B3132, 0x663B3466, 0x66763B31, 0x66763B33, +0x66763B33, 0x31693B33, 0x0000003B, 0x00050005, 0x00000097, 0x64616873, 0x614D776F, 0x00000070, +0x00060005, 0x00000098, 0x64616873, 0x6F43776F, 0x7364726F, 0x00000000, 0x00050005, 0x00000099, +0x61527675, 0x73756964, 0x00000000, 0x00060005, 0x0000009A, 0x6867696C, 0x72694474, 0x69746365, +0x00006E6F, 0x00040005, 0x0000009B, 0x6D726F6E, 0x00006C61, 0x00040005, 0x0000009C, 0x6F507377, +0x00000073, 0x00060005, 0x0000009D, 0x63736163, 0x49656461, 0x7865646E, 0x00000000, 0x00090005, +0x000000A2, 0x636C6143, 0x74616C75, 0x73614365, 0x65646163, 0x65646E49, 0x66762878, 0x00003B33, +0x00040005, 0x000000A1, 0x6F507377, 0x00000073, 0x000A0005, 0x000000A9, 0x636C6143, 0x74616C75, +0x61685365, 0x28776F64, 0x3B336676, 0x763B3169, 0x763B3366, 0x003B3366, 0x00040005, 0x000000A5, +0x6F507377, 0x00000073, 0x00060005, 0x000000A6, 0x63736163, 0x49656461, 0x7865646E, 0x00000000, +0x00060005, 0x000000A7, 0x6867696C, 0x72694474, 0x69746365, 0x00006E6F, 0x00040005, 0x000000A8, +0x6D726F6E, 0x00006C61, 0x00050005, 0x000000AB, 0x6574614D, 0x6C616972, 0x00000000, 0x00050006, +0x000000AB, 0x00000000, 0x65626C41, 0x00006F64, 0x00060006, 0x000000AB, 0x00000001, 0x6174654D, +0x63696C6C, 0x00000000, 0x00060006, 0x000000AB, 0x00000002, 0x67756F52, 0x73656E68, 0x00000073, +0x00080006, 0x000000AB, 0x00000003, 0x63726550, 0x75747065, 0x6F526C61, 0x6E686775, 0x00737365, +0x00060006, 0x000000AB, 0x00000004, 0x6C666552, 0x61746365, 0x0065636E, 0x00060006, 0x000000AB, +0x00000005, 0x73696D45, 0x65766973, 0x00000000, 0x00050006, 0x000000AB, 0x00000006, 0x6D726F4E, +0x00006C61, 0x00040006, 0x000000AB, 0x00000007, 0x00004F41, 0x00050006, 0x000000AB, 0x00000008, +0x77656956, 0x00000000, 0x00050006, 0x000000AB, 0x00000009, 0x746F444E, 0x00000056, 0x00040006, +0x000000AB, 0x0000000A, 0x00003046, 0x00080006, 0x000000AB, 0x0000000B, 0x72656E45, 0x6F437967, +0x6E65706D, 0x69746173, 0x00006E6F, 0x00040006, 0x000000AB, 0x0000000C, 0x00676664, 0x00040005, +0x000000AC, 0x6867694C, 0x00000074, 0x00050006, 0x000000AC, 0x00000000, 0x6F6C6F63, 0x00007275, +0x00060006, 0x000000AC, 0x00000001, 0x69736F70, 0x6E6F6974, 0x00000000, 0x00060006, 0x000000AC, +0x00000002, 0x65726964, 0x6F697463, 0x0000006E, 0x00060006, 0x000000AC, 0x00000003, 0x65746E69, +0x7469736E, 0x00000079, 0x00050006, 0x000000AC, 0x00000004, 0x69646172, 0x00007375, 0x00050006, +0x000000AC, 0x00000005, 0x65707974, 0x00000000, 0x00050006, 0x000000AC, 0x00000006, 0x6C676E61, +0x00000065, 0x00230005, 0x000000B5, 0x746F7349, 0x69706F72, 0x626F4C63, 0x74732865, 0x74637572, +0x74614D2D, 0x61697265, 0x66762D6C, 0x31662D34, 0x2D31662D, 0x662D3166, 0x66762D31, 0x66762D33, +0x31662D33, 0x3366762D, 0x2D31662D, 0x2D336676, 0x2D336676, 0x31326676, 0x7274733B, 0x2D746375, +0x6867694C, 0x66762D74, 0x66762D34, 0x66762D34, 0x31662D34, 0x2D31662D, 0x662D3166, 0x763B3131, +0x663B3366, 0x31663B31, 0x3B31663B, 0x003B3166, 0x00050005, 0x000000AE, 0x6574616D, 0x6C616972, +0x00000000, 0x00040005, 0x000000AF, 0x6867696C, 0x00000074, 0x00030005, 0x000000B0, 0x00000068, +0x00030005, 0x000000B1, 0x00566F4E, 0x00030005, 0x000000B2, 0x004C6F4E, 0x00030005, 0x000000B3, +0x00486F4E, 0x00030005, 0x000000B4, 0x00486F4C, 0x00180005, 0x000000BC, 0x66666944, 0x4C657375, +0x2865626F, 0x75727473, 0x4D2D7463, 0x72657461, 0x2D6C6169, 0x2D346676, 0x662D3166, 0x31662D31, +0x2D31662D, 0x2D336676, 0x2D336676, 0x762D3166, 0x662D3366, 0x66762D31, 0x66762D33, 0x66762D33, +0x663B3132, 0x31663B31, 0x3B31663B, 0x00000000, 0x00050005, 0x000000B8, 0x6574616D, 0x6C616972, +0x00000000, 0x00030005, 0x000000B9, 0x00566F4E, 0x00030005, 0x000000BA, 0x004C6F4E, 0x00030005, +0x000000BB, 0x00486F4C, 0x00230005, 0x000000C5, 0x63657053, 0x72616C75, 0x65626F4C, 0x72747328, +0x2D746375, 0x6574614D, 0x6C616972, 0x3466762D, 0x2D31662D, 0x662D3166, 0x31662D31, 0x3366762D, +0x3366762D, 0x2D31662D, 0x2D336676, 0x762D3166, 0x762D3366, 0x762D3366, 0x3B313266, 0x75727473, +0x4C2D7463, 0x74686769, 0x3466762D, 0x3466762D, 0x3466762D, 0x2D31662D, 0x662D3166, 0x31662D31, +0x66763B31, 0x31663B33, 0x3B31663B, 0x663B3166, 0x00003B31, 0x00050005, 0x000000BE, 0x6574616D, +0x6C616972, 0x00000000, 0x00040005, 0x000000BF, 0x6867696C, 0x00000074, 0x00030005, 0x000000C0, +0x00000068, 0x00030005, 0x000000C1, 0x00566F4E, 0x00030005, 0x000000C2, 0x004C6F4E, 0x00030005, +0x000000C3, 0x00486F4E, 0x00030005, 0x000000C4, 0x00486F4C, 0x00170005, 0x000000CC, 0x6867694C, +0x676E6974, 0x33667628, 0x3366763B, 0x7274733B, 0x2D746375, 0x6574614D, 0x6C616972, 0x3466762D, +0x2D31662D, 0x662D3166, 0x31662D31, 0x3366762D, 0x3366762D, 0x2D31662D, 0x2D336676, 0x762D3166, +0x762D3366, 0x762D3366, 0x3B313266, 0x00000000, 0x00030005, 0x000000C9, 0x00003046, 0x00040005, +0x000000CA, 0x6F507377, 0x00000073, 0x00050005, 0x000000CB, 0x6574616D, 0x6C616972, 0x00000000, +0x00150005, 0x000000D1, 0x284C4249, 0x3B336676, 0x3B336676, 0x75727473, 0x4D2D7463, 0x72657461, +0x2D6C6169, 0x2D346676, 0x662D3166, 0x31662D31, 0x2D31662D, 0x2D336676, 0x2D336676, 0x762D3166, +0x662D3366, 0x66762D31, 0x66762D33, 0x66762D33, 0x003B3132, 0x00030005, 0x000000CE, 0x00003046, +0x00030005, 0x000000CF, 0x0000724C, 0x00050005, 0x000000D0, 0x6574616D, 0x6C616972, 0x00000000, +0x00050005, 0x000000D4, 0x64616853, 0x6146776F, 0x00006564, 0x00030005, 0x000000D6, 0x00494850, +0x00030005, 0x000000D8, 0x00003278, 0x00040005, 0x000000E9, 0x61726170, 0x0000006D, 0x00030005, +0x000000FC, 0x0048784E, 0x00030005, 0x000000FE, 0x00000061, 0x00030005, 0x00000102, 0x0000006B, +0x00030005, 0x0000010C, 0x00000064, 0x00040005, 0x0000011C, 0x61726170, 0x0000006D, 0x00030005, +0x0000012E, 0x00303966, 0x00060005, 0x00000138, 0x6867696C, 0x61635374, 0x72657474, 0x00000000, +0x00040005, 0x00000139, 0x61726170, 0x0000006D, 0x00040005, 0x0000013A, 0x61726170, 0x0000006D, +0x00040005, 0x0000013C, 0x61726170, 0x0000006D, 0x00050005, 0x0000013F, 0x77656976, 0x74616353, +0x00726574, 0x00040005, 0x00000140, 0x61726170, 0x0000006D, 0x00040005, 0x00000141, 0x61726170, +0x0000006D, 0x00040005, 0x00000143, 0x61726170, 0x0000006D, 0x00030005, 0x0000014C, 0x00003261, +0x00040005, 0x00000150, 0x4C584747, 0x00000000, 0x00040005, 0x0000015E, 0x56584747, 0x00000000, +0x00050005, 0x00000172, 0x72657061, 0x65727574, 0x00000000, 0x00050005, 0x00000178, 0x7263696D, +0x6168536F, 0x00776F64, 0x00040005, 0x0000017C, 0x61726170, 0x0000006D, 0x00040005, 0x00000183, +0x61726170, 0x0000006D, 0x00040005, 0x00000185, 0x61726170, 0x0000006D, 0x00040005, 0x00000187, +0x61726170, 0x0000006D, 0x00040005, 0x00000189, 0x61726170, 0x0000006D, 0x00040005, 0x000001B0, +0x61726170, 0x0000006D, 0x00040005, 0x000001B2, 0x61726170, 0x0000006D, 0x00040005, 0x000001B7, +0x61726170, 0x0000006D, 0x00040005, 0x000001B9, 0x61726170, 0x0000006D, 0x00040005, 0x000001BB, +0x61726170, 0x0000006D, 0x00030005, 0x000001C0, 0x00303966, 0x00040005, 0x000001C4, 0x61726170, +0x0000006D, 0x00040005, 0x000001C6, 0x61726170, 0x0000006D, 0x00040005, 0x000001C8, 0x61726170, +0x0000006D, 0x00070005, 0x000001DD, 0x66696E55, 0x4D6D726F, 0x72657461, 0x446C6169, 0x00617461, +0x00070006, 0x000001DD, 0x00000000, 0x65626C41, 0x6F436F64, 0x72756F6C, 0x00000000, 0x00060006, +0x000001DD, 0x00000001, 0x67756F52, 0x73656E68, 0x00000073, 0x00060006, 0x000001DD, 0x00000002, +0x6174654D, 0x63696C6C, 0x00000000, 0x00060006, 0x000001DD, 0x00000003, 0x6C666552, 0x61746365, +0x0065636E, 0x00060006, 0x000001DD, 0x00000004, 0x73696D45, 0x65766973, 0x00000000, 0x00070006, +0x000001DD, 0x00000005, 0x65626C41, 0x614D6F64, 0x63614670, 0x00726F74, 0x00080006, 0x000001DD, +0x00000006, 0x6174654D, 0x63696C6C, 0x4670614D, 0x6F746361, 0x00000072, 0x00080006, 0x000001DD, +0x00000007, 0x67756F52, 0x73656E68, 0x70614D73, 0x74636146, 0x0000726F, 0x00070006, 0x000001DD, +0x00000008, 0x6D726F4E, 0x614D6C61, 0x63614670, 0x00726F74, 0x00080006, 0x000001DD, 0x00000009, +0x73696D45, 0x65766973, 0x4670614D, 0x6F746361, 0x00000072, 0x00060006, 0x000001DD, 0x0000000A, +0x614D4F41, 0x63614670, 0x00726F74, 0x00060006, 0x000001DD, 0x0000000B, 0x68706C41, 0x74754361, +0x0066664F, 0x00060006, 0x000001DD, 0x0000000C, 0x6B726F77, 0x776F6C66, 0x00000000, 0x00070005, +0x000001DF, 0x6574616D, 0x6C616972, 0x706F7250, 0x69747265, 0x00007365, 0x00050005, 0x000001F9, +0x6C415F75, 0x6F646562, 0x0070614D, 0x00050005, 0x000001FC, 0x74726556, 0x61447865, 0x00006174, +0x00050006, 0x000001FC, 0x00000000, 0x6F6C6F43, 0x00007275, 0x00060006, 0x000001FC, 0x00000001, +0x43786554, 0x64726F6F, 0x00000000, 0x00060006, 0x000001FC, 0x00000002, 0x69736F50, 0x6E6F6974, +0x00000000, 0x00050006, 0x000001FC, 0x00000003, 0x6D726F4E, 0x00006C61, 0x00060006, 0x000001FC, +0x00000004, 0x6C726F57, 0x726F4E64, 0x006C616D, 0x00060005, 0x000001FE, 0x74726556, 0x754F7865, +0x74757074, 0x00000000, 0x00040005, 0x00000204, 0x61726170, 0x0000006D, 0x00060005, 0x0000021D, +0x654D5F75, 0x6C6C6174, 0x614D6369, 0x00000070, 0x00060005, 0x00000239, 0x6F525F75, 0x6E686775, +0x4D737365, 0x00007061, 0x00040005, 0x00000250, 0x4F415F75, 0x0070614D, 0x00060005, 0x0000026C, +0x6D455F75, 0x69737369, 0x614D6576, 0x00000070, 0x00040005, 0x00000271, 0x61726170, 0x0000006D, +0x00040005, 0x00000284, 0x6D726F4E, 0x00006C61, 0x00050005, 0x00000285, 0x6F4E5F75, 0x6C616D72, +0x0070614D, 0x00050005, 0x000002A2, 0x646C6F47, 0x6E416E65, 0x00656C67, 0x00030005, 0x000002A4, +0x00000072, 0x00040005, 0x000002AD, 0x74656874, 0x00000061, 0x00040005, 0x000002B4, 0x656E6973, +0x00000000, 0x00040005, 0x000002B7, 0x69736F63, 0x0000656E, 0x00040005, 0x000002C3, 0x426E696D, +0x00736169, 0x00040005, 0x000002C4, 0x6867694C, 0x00000074, 0x00050006, 0x000002C4, 0x00000000, +0x6F6C6F63, 0x00007275, 0x00060006, 0x000002C4, 0x00000001, 0x69736F70, 0x6E6F6974, 0x00000000, +0x00060006, 0x000002C4, 0x00000002, 0x65726964, 0x6F697463, 0x0000006E, 0x00060006, 0x000002C4, +0x00000003, 0x65746E69, 0x7469736E, 0x00000079, 0x00050006, 0x000002C4, 0x00000004, 0x69646172, +0x00007375, 0x00050006, 0x000002C4, 0x00000005, 0x65707974, 0x00000000, 0x00050006, 0x000002C4, +0x00000006, 0x6C676E61, 0x00000065, 0x00050005, 0x000002CB, 0x4C4F4255, 0x74686769, 0x00000000, +0x00050006, 0x000002CB, 0x00000000, 0x6867696C, 0x00007374, 0x00070006, 0x000002CB, 0x00000001, +0x64616853, 0x7254776F, 0x66736E61, 0x006D726F, 0x00060006, 0x000002CB, 0x00000002, 0x77656956, +0x7274614D, 0x00007869, 0x00060006, 0x000002CB, 0x00000003, 0x6867694C, 0x65695674, 0x00000077, +0x00060006, 0x000002CB, 0x00000004, 0x73616942, 0x7274614D, 0x00007869, 0x00070006, 0x000002CB, +0x00000005, 0x656D6163, 0x6F506172, 0x69746973, 0x00006E6F, 0x00060006, 0x000002CB, 0x00000006, +0x696C7053, 0x70654474, 0x00736874, 0x00060006, 0x000002CB, 0x00000007, 0x6867694C, 0x7A695374, +0x00000065, 0x00070006, 0x000002CB, 0x00000008, 0x5378614D, 0x6F646168, 0x73694477, 0x00000074, +0x00060006, 0x000002CB, 0x00000009, 0x64616853, 0x6146776F, 0x00006564, 0x00060006, 0x000002CB, +0x0000000A, 0x63736143, 0x46656461, 0x00656461, 0x00060006, 0x000002CB, 0x0000000B, 0x6867694C, +0x756F4374, 0x0000746E, 0x00060006, 0x000002CB, 0x0000000C, 0x64616853, 0x6F43776F, 0x00746E75, +0x00050006, 0x000002CB, 0x0000000D, 0x65646F4D, 0x00000000, 0x00060006, 0x000002CB, 0x0000000E, +0x4D766E45, 0x6F437069, 0x00746E75, 0x00060006, 0x000002CB, 0x0000000F, 0x74696E49, 0x426C6169, +0x00736169, 0x00050006, 0x000002CB, 0x00000010, 0x74646957, 0x00000068, 0x00050006, 0x000002CB, +0x00000011, 0x67696548, 0x00007468, 0x00070006, 0x000002CB, 0x00000012, 0x64616873, 0x6E45776F, +0x656C6261, 0x00000064, 0x00030005, 0x000002CD, 0x006F6275, 0x00040005, 0x000002D1, 0x73616962, +0x00000000, 0x00040005, 0x000002DD, 0x73616962, 0x00000000, 0x00040005, 0x000002DE, 0x61726170, +0x0000006D, 0x00040005, 0x000002E0, 0x61726170, 0x0000006D, 0x00040005, 0x000002E2, 0x61726170, +0x0000006D, 0x00030005, 0x000002E5, 0x006D7573, 0x00040005, 0x000002E6, 0x73696F6E, 0x00000065, +0x00040005, 0x000002E7, 0x61726170, 0x0000006D, 0x00030005, 0x000002EB, 0x00000069, 0x00040005, +0x000002F3, 0x7366666F, 0x00007465, 0x00040005, 0x000002F4, 0x61726170, 0x0000006D, 0x00040005, +0x000002F6, 0x61726170, 0x0000006D, 0x00040005, 0x000002F7, 0x61726170, 0x0000006D, 0x00030005, +0x000002FD, 0x0000007A, 0x00060005, 0x0000031A, 0x63736163, 0x49656461, 0x7865646E, 0x00000000, +0x00040005, 0x0000031B, 0x77656976, 0x00736F50, 0x00030005, 0x00000325, 0x00000069, 0x00050005, +0x00000341, 0x64616873, 0x6F43776F, 0x0064726F, 0x00040005, 0x00000353, 0x5241454E, 0x00000000, +0x00050005, 0x00000355, 0x61527675, 0x73756964, 0x00000000, 0x00040005, 0x00000360, 0x77656976, +0x00736F50, 0x00060005, 0x00000369, 0x64616873, 0x6D41776F, 0x746E756F, 0x00000000, 0x00050005, +0x0000036A, 0x61685375, 0x4D776F64, 0x00007061, 0x00040005, 0x0000036B, 0x61726170, 0x0000006D, +0x00040005, 0x0000036D, 0x61726170, 0x0000006D, 0x00040005, 0x0000036F, 0x61726170, 0x0000006D, +0x00040005, 0x00000371, 0x61726170, 0x0000006D, 0x00040005, 0x00000373, 0x61726170, 0x0000006D, +0x00040005, 0x00000375, 0x61726170, 0x0000006D, 0x00050005, 0x00000378, 0x63736163, 0x46656461, +0x00656461, 0x00050005, 0x00000385, 0x63736163, 0x4E656461, 0x00747865, 0x00060005, 0x0000039F, +0x64616873, 0x6D41776F, 0x746E756F, 0x00000031, 0x00040005, 0x000003A0, 0x61726170, 0x0000006D, +0x00040005, 0x000003A2, 0x61726170, 0x0000006D, 0x00040005, 0x000003A4, 0x61726170, 0x0000006D, +0x00040005, 0x000003A6, 0x61726170, 0x0000006D, 0x00040005, 0x000003A8, 0x61726170, 0x0000006D, +0x00040005, 0x000003AA, 0x61726170, 0x0000006D, 0x00030005, 0x000003B8, 0x00000044, 0x00040005, +0x000003BA, 0x61726170, 0x0000006D, 0x00040005, 0x000003BC, 0x61726170, 0x0000006D, 0x00030005, +0x000003BF, 0x00000056, 0x00040005, 0x000003C0, 0x61726170, 0x0000006D, 0x00040005, 0x000003C2, +0x61726170, 0x0000006D, 0x00040005, 0x000003C4, 0x61726170, 0x0000006D, 0x00030005, 0x000003C7, +0x00000046, 0x00040005, 0x000003C9, 0x61726170, 0x0000006D, 0x00040005, 0x000003D5, 0x61726170, +0x0000006D, 0x00040005, 0x000003D7, 0x61726170, 0x0000006D, 0x00040005, 0x000003D9, 0x61726170, +0x0000006D, 0x00040005, 0x000003DB, 0x61726170, 0x0000006D, 0x00040005, 0x000003E1, 0x61726170, +0x0000006D, 0x00040005, 0x000003E3, 0x61726170, 0x0000006D, 0x00040005, 0x000003E5, 0x61726170, +0x0000006D, 0x00040005, 0x000003E7, 0x61726170, 0x0000006D, 0x00040005, 0x000003EC, 0x75736572, +0x0000746C, 0x00030005, 0x000003EE, 0x00000069, 0x00040005, 0x000003FA, 0x6867696C, 0x00000074, +0x00040005, 0x0000040D, 0x756C6176, 0x00000065, 0x00030005, 0x00000413, 0x0000004C, 0x00040005, +0x00000419, 0x74736964, 0x00000000, 0x00040005, 0x0000041E, 0x65747461, 0x0000006E, 0x00050005, +0x00000425, 0x65747461, 0x7461756E, 0x006E6F69, 0x00030005, 0x0000043E, 0x0000004C, 0x00050005, +0x00000444, 0x6F747563, 0x6E416666, 0x00656C67, 0x00040005, 0x00000448, 0x74736964, 0x00000000, +0x00040005, 0x0000044D, 0x74656874, 0x00000061, 0x00040005, 0x00000453, 0x69737065, 0x006E6F6C, +0x00050005, 0x00000459, 0x65747461, 0x7461756E, 0x006E6F69, 0x00060005, 0x0000046A, 0x63736163, +0x49656461, 0x7865646E, 0x00000000, 0x00040005, 0x0000046B, 0x61726170, 0x0000006D, 0x00040005, +0x00000474, 0x61726170, 0x0000006D, 0x00040005, 0x00000476, 0x61726170, 0x0000006D, 0x00040005, +0x00000478, 0x61726170, 0x0000006D, 0x00040005, 0x0000047C, 0x61726170, 0x0000006D, 0x00030005, +0x00000481, 0x0000694C, 0x00050005, 0x00000485, 0x6461724C, 0x636E6169, 0x00000065, 0x00030005, +0x0000048C, 0x0000684C, 0x00050005, 0x00000492, 0x6867696C, 0x4C6F4E74, 0x00000000, 0x00040005, +0x00000497, 0x61726170, 0x0000006D, 0x00030005, 0x00000499, 0x00000068, 0x00050005, 0x0000049F, +0x64616873, 0x5F676E69, 0x00566F4E, 0x00040005, 0x000004A5, 0x61726170, 0x0000006D, 0x00030005, +0x000004A7, 0x00566F4E, 0x00030005, 0x000004A9, 0x004C6F4E, 0x00040005, 0x000004AA, 0x61726170, +0x0000006D, 0x00030005, 0x000004AD, 0x00486F4E, 0x00040005, 0x000004B2, 0x61726170, 0x0000006D, +0x00030005, 0x000004B4, 0x00486F4C, 0x00040005, 0x000004B8, 0x61726170, 0x0000006D, 0x00030005, +0x000004BA, 0x00006446, 0x00040005, 0x000004BC, 0x61726170, 0x0000006D, 0x00040005, 0x000004BE, +0x61726170, 0x0000006D, 0x00040005, 0x000004C0, 0x61726170, 0x0000006D, 0x00030005, 0x000004C3, +0x00007246, 0x00040005, 0x000004C7, 0x61726170, 0x0000006D, 0x00040005, 0x000004C9, 0x61726170, +0x0000006D, 0x00040005, 0x000004CB, 0x61726170, 0x0000006D, 0x00040005, 0x000004CD, 0x61726170, +0x0000006D, 0x00040005, 0x000004D0, 0x6F6C6F63, 0x00007275, 0x00040005, 0x000004DA, 0x61726170, +0x0000006D, 0x00040005, 0x000004DC, 0x61726170, 0x0000006D, 0x00050005, 0x000004E9, 0x61727269, +0x6E616964, 0x00006563, 0x00040005, 0x000004ED, 0x72724975, 0x0070614D, 0x00030005, 0x000004F3, +0x00000046, 0x00040005, 0x000004F4, 0x61726170, 0x0000006D, 0x00040005, 0x000004F6, 0x61726170, +0x0000006D, 0x00040005, 0x000004F9, 0x61726170, 0x0000006D, 0x00030005, 0x000004FD, 0x0000646B, +0x00050005, 0x00000505, 0x66666964, 0x49657375, 0x00004C42, 0x00080005, 0x0000050B, 0x6E455F75, +0x64615276, 0x636E6169, 0x78655465, 0x6576654C, 0x0000736C, 0x00070005, 0x0000050F, 0x63657073, +0x72616C75, 0x61727249, 0x6E616964, 0x00006563, 0x00040005, 0x00000510, 0x766E4575, 0x0070614D, +0x00050005, 0x0000051A, 0x63657073, 0x72616C75, 0x004C4249, 0x00050005, 0x0000052D, 0x43786574, +0x756F6C6F, 0x00000072, 0x00050005, 0x00000537, 0x6174656D, 0x63696C6C, 0x00000000, 0x00050005, +0x00000538, 0x67756F72, 0x73656E68, 0x00000073, 0x00030005, 0x00000547, 0x00786574, 0x00030005, +0x0000056B, 0x00786574, 0x00050005, 0x00000589, 0x6574616D, 0x6C616972, 0x00000000, 0x00040005, +0x00000597, 0x61726170, 0x0000006D, 0x00030005, 0x0000059D, 0x00007675, 0x00060005, 0x0000059F, +0x465F6C67, 0x43676172, 0x64726F6F, 0x00000000, 0x00040005, 0x000005AA, 0x6F617373, 0x00000000, +0x00050005, 0x000005AB, 0x41535375, 0x70614D4F, 0x00000000, 0x00040005, 0x000005BA, 0x61726170, +0x0000006D, 0x00050005, 0x000005BF, 0x67756F72, 0x73656E68, 0x00003273, 0x00040005, 0x000005C3, +0x75646E64, 0x00000000, 0x00040005, 0x000005C7, 0x76646E64, 0x00000000, 0x00050005, 0x000005CB, +0x69726176, 0x65636E61, 0x00000000, 0x00070005, 0x000005D3, 0x6E72656B, 0x6F526C65, 0x6E686775, +0x32737365, 0x00000000, 0x00070005, 0x000005D8, 0x746C6966, 0x64657265, 0x67756F52, 0x73656E68, +0x00003273, 0x00040005, 0x000005DC, 0x61726170, 0x0000006D, 0x00040005, 0x000005E1, 0x6F507377, +0x00000073, 0x00050005, 0x000005F3, 0x44524275, 0x54554C46, 0x00000000, 0x00050005, 0x000005FD, +0x6C666572, 0x61746365, 0x0065636E, 0x00040005, 0x000005FE, 0x61726170, 0x0000006D, 0x00030005, +0x00000602, 0x00003046, 0x00040005, 0x00000605, 0x61726170, 0x0000006D, 0x00040005, 0x00000608, +0x61726170, 0x0000006D, 0x00040005, 0x0000061B, 0x61726170, 0x0000006D, 0x00060005, 0x00000625, +0x64616873, 0x6944776F, 0x6E617473, 0x00006563, 0x00070005, 0x00000628, 0x6E617274, 0x69746973, +0x69446E6F, 0x6E617473, 0x00006563, 0x00040005, 0x0000062B, 0x77656976, 0x00736F50, 0x00050005, +0x00000634, 0x74736964, 0x65636E61, 0x00000000, 0x00030005, 0x00000642, 0x0000724C, 0x00070005, +0x0000064C, 0x6867696C, 0x6E6F4374, 0x62697274, 0x6F697475, 0x0000006E, 0x00040005, 0x0000064D, +0x61726170, 0x0000006D, 0x00040005, 0x00000650, 0x61726170, 0x0000006D, 0x00040005, 0x00000652, +0x61726170, 0x0000006D, 0x00060005, 0x00000655, 0x436C6269, 0x72746E6F, 0x74756269, 0x006E6F69, +0x00040005, 0x00000656, 0x61726170, 0x0000006D, 0x00040005, 0x00000659, 0x61726170, 0x0000006D, +0x00040005, 0x0000065B, 0x61726170, 0x0000006D, 0x00050005, 0x0000065E, 0x616E6966, 0x6C6F436C, +0x0072756F, 0x00050005, 0x00000666, 0x4374756F, 0x726F6C6F, 0x00000000, 0x00060005, 0x000006A5, +0x63736163, 0x49656461, 0x7865646E, 0x00000000, 0x00040005, 0x000006A6, 0x61726170, 0x0000006D, +0x00050048, 0x000001DD, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x000001DD, 0x00000001, +0x00000023, 0x00000010, 0x00050048, 0x000001DD, 0x00000002, 0x00000023, 0x00000014, 0x00050048, +0x000001DD, 0x00000003, 0x00000023, 0x00000018, 0x00050048, 0x000001DD, 0x00000004, 0x00000023, +0x0000001C, 0x00050048, 0x000001DD, 0x00000005, 0x00000023, 0x00000020, 0x00050048, 0x000001DD, +0x00000006, 0x00000023, 0x00000024, 0x00050048, 0x000001DD, 0x00000007, 0x00000023, 0x00000028, +0x00050048, 0x000001DD, 0x00000008, 0x00000023, 0x0000002C, 0x00050048, 0x000001DD, 0x00000009, +0x00000023, 0x00000030, 0x00050048, 0x000001DD, 0x0000000A, 0x00000023, 0x00000034, 0x00050048, +0x000001DD, 0x0000000B, 0x00000023, 0x00000038, 0x00050048, 0x000001DD, 0x0000000C, 0x00000023, +0x0000003C, 0x00030047, 0x000001DD, 0x00000002, 0x00040047, 0x000001DF, 0x00000022, 0x00000001, +0x00040047, 0x000001DF, 0x00000021, 0x00000006, 0x00040047, 0x000001F9, 0x00000022, 0x00000001, +0x00040047, 0x000001F9, 0x00000021, 0x00000000, 0x00040047, 0x000001FE, 0x0000001E, 0x00000000, +0x00040047, 0x0000021D, 0x00000022, 0x00000001, 0x00040047, 0x0000021D, 0x00000021, 0x00000001, +0x00040047, 0x00000239, 0x00000022, 0x00000001, 0x00040047, 0x00000239, 0x00000021, 0x00000002, +0x00040047, 0x00000250, 0x00000022, 0x00000001, 0x00040047, 0x00000250, 0x00000021, 0x00000004, +0x00040047, 0x0000026C, 0x00000022, 0x00000001, 0x00040047, 0x0000026C, 0x00000021, 0x00000005, +0x00040047, 0x00000285, 0x00000022, 0x00000001, 0x00040047, 0x00000285, 0x00000021, 0x00000003, +0x00050048, 0x000002C4, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x000002C4, 0x00000001, +0x00000023, 0x00000010, 0x00050048, 0x000002C4, 0x00000002, 0x00000023, 0x00000020, 0x00050048, +0x000002C4, 0x00000003, 0x00000023, 0x00000030, 0x00050048, 0x000002C4, 0x00000004, 0x00000023, +0x00000034, 0x00050048, 0x000002C4, 0x00000005, 0x00000023, 0x00000038, 0x00050048, 0x000002C4, +0x00000006, 0x00000023, 0x0000003C, 0x00040047, 0x000002C6, 0x00000006, 0x00000040, 0x00040047, +0x000002C9, 0x00000006, 0x00000040, 0x00040047, 0x000002CA, 0x00000006, 0x00000010, 0x00050048, +0x000002CB, 0x00000000, 0x00000023, 0x00000000, 0x00040048, 0x000002CB, 0x00000001, 0x00000005, +0x00050048, 0x000002CB, 0x00000001, 0x00000023, 0x00000800, 0x00050048, 0x000002CB, 0x00000001, +0x00000007, 0x00000010, 0x00040048, 0x000002CB, 0x00000002, 0x00000005, 0x00050048, 0x000002CB, +0x00000002, 0x00000023, 0x00000900, 0x00050048, 0x000002CB, 0x00000002, 0x00000007, 0x00000010, +0x00040048, 0x000002CB, 0x00000003, 0x00000005, 0x00050048, 0x000002CB, 0x00000003, 0x00000023, +0x00000940, 0x00050048, 0x000002CB, 0x00000003, 0x00000007, 0x00000010, 0x00040048, 0x000002CB, +0x00000004, 0x00000005, 0x00050048, 0x000002CB, 0x00000004, 0x00000023, 0x00000980, 0x00050048, +0x000002CB, 0x00000004, 0x00000007, 0x00000010, 0x00050048, 0x000002CB, 0x00000005, 0x00000023, +0x000009C0, 0x00050048, 0x000002CB, 0x00000006, 0x00000023, 0x000009D0, 0x00050048, 0x000002CB, +0x00000007, 0x00000023, 0x00000A10, 0x00050048, 0x000002CB, 0x00000008, 0x00000023, 0x00000A14, +0x00050048, 0x000002CB, 0x00000009, 0x00000023, 0x00000A18, 0x00050048, 0x000002CB, 0x0000000A, +0x00000023, 0x00000A1C, 0x00050048, 0x000002CB, 0x0000000B, 0x00000023, 0x00000A20, 0x00050048, +0x000002CB, 0x0000000C, 0x00000023, 0x00000A24, 0x00050048, 0x000002CB, 0x0000000D, 0x00000023, +0x00000A28, 0x00050048, 0x000002CB, 0x0000000E, 0x00000023, 0x00000A2C, 0x00050048, 0x000002CB, +0x0000000F, 0x00000023, 0x00000A30, 0x00050048, 0x000002CB, 0x00000010, 0x00000023, 0x00000A34, +0x00050048, 0x000002CB, 0x00000011, 0x00000023, 0x00000A38, 0x00050048, 0x000002CB, 0x00000012, +0x00000023, 0x00000A3C, 0x00030047, 0x000002CB, 0x00000002, 0x00040047, 0x000002CD, 0x00000022, +0x00000002, 0x00040047, 0x000002CD, 0x00000021, 0x00000005, 0x00040047, 0x0000036A, 0x00000022, +0x00000002, 0x00040047, 0x0000036A, 0x00000021, 0x00000003, 0x00040047, 0x000004ED, 0x00000022, +0x00000002, 0x00040047, 0x000004ED, 0x00000021, 0x00000002, 0x00040047, 0x00000510, 0x00000022, +0x00000002, 0x00040047, 0x00000510, 0x00000021, 0x00000001, 0x00040047, 0x0000059F, 0x0000000B, +0x0000000F, 0x00040047, 0x000005AB, 0x00000022, 0x00000002, 0x00040047, 0x000005AB, 0x00000021, +0x00000004, 0x00040047, 0x000005F3, 0x00000022, 0x00000002, 0x00040047, 0x000005F3, 0x00000021, +0x00000000, 0x00040047, 0x00000666, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, +0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, +0x00000006, 0x00040021, 0x00000008, 0x00000006, 0x00000007, 0x00040017, 0x0000000C, 0x00000006, +0x00000003, 0x00040020, 0x0000000D, 0x00000007, 0x0000000C, 0x00040021, 0x0000000E, 0x0000000C, +0x0000000D, 0x00040017, 0x00000012, 0x00000006, 0x00000004, 0x00040020, 0x00000013, 0x00000007, +0x00000012, 0x00040021, 0x00000014, 0x00000012, 0x00000013, 0x00070021, 0x0000001B, 0x00000006, +0x00000007, 0x00000007, 0x0000000C, 0x0000000C, 0x00060021, 0x00000022, 0x0000000C, 0x0000000C, +0x00000007, 0x00000007, 0x00060021, 0x00000028, 0x00000006, 0x00000007, 0x00000007, 0x00000007, +0x00070021, 0x0000002E, 0x00000006, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00050021, +0x0000003A, 0x00000006, 0x00000007, 0x00000007, 0x00050021, 0x00000048, 0x0000000C, 0x00000012, +0x00000007, 0x00060021, 0x0000004D, 0x0000000C, 0x00000012, 0x00000007, 0x00000007, 0x00050021, +0x00000064, 0x0000000C, 0x0000000C, 0x00000007, 0x00060021, 0x00000069, 0x0000000C, 0x0000000D, +0x00000007, 0x00000007, 0x00030021, 0x0000006F, 0x00000012, 0x00030021, 0x00000072, 0x0000000C, +0x00030021, 0x00000075, 0x00000006, 0x00040017, 0x0000007F, 0x00000006, 0x00000002, 0x00040020, +0x00000080, 0x00000007, 0x0000007F, 0x00040021, 0x00000081, 0x00000006, 0x00000080, 0x00040015, +0x00000085, 0x00000020, 0x00000001, 0x00040020, 0x00000086, 0x00000007, 0x00000085, 0x00060021, +0x00000087, 0x0000007F, 0x00000086, 0x00000086, 0x00000007, 0x00060021, 0x0000008D, 0x00000006, +0x0000000D, 0x0000000D, 0x00000086, 0x00090019, 0x00000093, 0x00000006, 0x00000001, 0x00000000, +0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000094, 0x00000093, 0x00040020, +0x00000095, 0x00000000, 0x00000094, 0x000A0021, 0x00000096, 0x00000006, 0x00000095, 0x00000013, +0x00000007, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000086, 0x00040021, 0x000000A0, 0x00000085, +0x0000000D, 0x00070021, 0x000000A4, 0x00000006, 0x0000000D, 0x00000086, 0x0000000D, 0x0000000D, +0x000F001E, 0x000000AB, 0x00000012, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x0000000C, +0x0000000C, 0x00000006, 0x0000000C, 0x00000006, 0x0000000C, 0x0000000C, 0x0000007F, 0x0009001E, +0x000000AC, 0x00000012, 0x00000012, 0x00000012, 0x00000006, 0x00000006, 0x00000006, 0x00000006, +0x000A0021, 0x000000AD, 0x0000000C, 0x000000AB, 0x000000AC, 0x0000000C, 0x00000007, 0x00000007, +0x00000007, 0x00000007, 0x00070021, 0x000000B7, 0x0000000C, 0x000000AB, 0x00000007, 0x00000007, +0x00000007, 0x00040020, 0x000000C7, 0x00000007, 0x000000AB, 0x00060021, 0x000000C8, 0x0000000C, +0x0000000D, 0x0000000D, 0x000000C7, 0x00040020, 0x000000D3, 0x00000006, 0x00000006, 0x0004003B, +0x000000D3, 0x000000D4, 0x00000006, 0x0004002B, 0x00000006, 0x000000D5, 0x3F800000, 0x0004003B, +0x000000D3, 0x000000D6, 0x00000006, 0x0004002B, 0x00000006, 0x000000D7, 0x3FCF1BBD, 0x0004002B, +0x00000006, 0x000000E4, 0x400CCCCD, 0x0006002C, 0x0000000C, 0x000000E5, 0x000000E4, 0x000000E4, +0x000000E4, 0x00040015, 0x000000ED, 0x00000020, 0x00000000, 0x0004002B, 0x000000ED, 0x000000EE, +0x00000003, 0x0004002B, 0x00000006, 0x000000F8, 0x00000000, 0x0004002B, 0x00000006, 0x00000110, +0x3EA2F983, 0x0004002B, 0x00000006, 0x00000113, 0x477FE000, 0x0004002B, 0x00000006, 0x00000128, +0x40A00000, 0x0004002B, 0x00000006, 0x0000012F, 0x3F000000, 0x0004002B, 0x00000006, 0x00000130, +0x40000000, 0x0004002B, 0x00000006, 0x00000174, 0x3F7FF972, 0x0004002B, 0x00000006, 0x0000018F, +0x38D1B717, 0x0004002B, 0x00000006, 0x000001A4, 0x3E23D70A, 0x0004002B, 0x00000006, 0x000001C1, +0x41840000, 0x0006002C, 0x0000000C, 0x000001C2, 0x000001C1, 0x000001C1, 0x000001C1, 0x000F001E, +0x000001DD, 0x00000012, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, +0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00040020, 0x000001DE, +0x00000002, 0x000001DD, 0x0004003B, 0x000001DE, 0x000001DF, 0x00000002, 0x0004002B, 0x00000085, +0x000001E0, 0x00000005, 0x00040020, 0x000001E1, 0x00000002, 0x00000006, 0x0004002B, 0x00000006, +0x000001E4, 0x3D4CCCCD, 0x00020014, 0x000001E5, 0x0004002B, 0x00000085, 0x000001E9, 0x00000000, +0x00040020, 0x000001EA, 0x00000002, 0x00000012, 0x00090019, 0x000001F6, 0x00000006, 0x00000001, +0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x000001F7, 0x000001F6, +0x00040020, 0x000001F8, 0x00000000, 0x000001F7, 0x0004003B, 0x000001F8, 0x000001F9, 0x00000000, +0x00040018, 0x000001FB, 0x0000000C, 0x00000003, 0x0007001E, 0x000001FC, 0x0000000C, 0x0000007F, +0x00000012, 0x0000000C, 0x000001FB, 0x00040020, 0x000001FD, 0x00000001, 0x000001FC, 0x0004003B, +0x000001FD, 0x000001FE, 0x00000001, 0x0004002B, 0x00000085, 0x000001FF, 0x00000001, 0x00040020, +0x00000200, 0x00000001, 0x0000007F, 0x0004002B, 0x00000085, 0x0000020A, 0x00000006, 0x0004002B, +0x00000085, 0x00000210, 0x00000002, 0x0004003B, 0x000001F8, 0x0000021D, 0x00000000, 0x0004002B, +0x00000085, 0x00000228, 0x00000007, 0x0004003B, 0x000001F8, 0x00000239, 0x00000000, 0x0004002B, +0x000000ED, 0x0000023E, 0x00000000, 0x0004002B, 0x00000085, 0x00000244, 0x0000000A, 0x0004003B, +0x000001F8, 0x00000250, 0x00000000, 0x0004002B, 0x00000085, 0x0000025A, 0x00000009, 0x0004002B, +0x00000085, 0x00000260, 0x00000004, 0x0004003B, 0x000001F8, 0x0000026C, 0x00000000, 0x0004002B, +0x00000085, 0x00000278, 0x00000008, 0x0004002B, 0x00000085, 0x0000027E, 0x00000003, 0x00040020, +0x0000027F, 0x00000001, 0x0000000C, 0x0004003B, 0x000001F8, 0x00000285, 0x00000000, 0x00040020, +0x0000028F, 0x00000001, 0x000001FB, 0x0004002B, 0x00000006, 0x00000298, 0x414FD639, 0x0004002B, +0x00000006, 0x00000299, 0x429C774C, 0x0005002C, 0x0000007F, 0x0000029A, 0x00000298, 0x00000299, +0x0004002B, 0x00000006, 0x0000029D, 0x472AEE8C, 0x0004002B, 0x00000006, 0x000002A3, 0x4019999A, +0x0009001E, 0x000002C4, 0x00000012, 0x00000012, 0x00000012, 0x00000006, 0x00000006, 0x00000006, +0x00000006, 0x0004002B, 0x000000ED, 0x000002C5, 0x00000020, 0x0004001C, 0x000002C6, 0x000002C4, +0x000002C5, 0x00040018, 0x000002C7, 0x00000012, 0x00000004, 0x0004002B, 0x000000ED, 0x000002C8, +0x00000004, 0x0004001C, 0x000002C9, 0x000002C7, 0x000002C8, 0x0004001C, 0x000002CA, 0x00000012, +0x000002C8, 0x0015001E, 0x000002CB, 0x000002C6, 0x000002C9, 0x000002C7, 0x000002C7, 0x000002C7, +0x00000012, 0x000002CA, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000085, 0x00000085, +0x00000085, 0x00000085, 0x00000006, 0x00000006, 0x00000006, 0x00000085, 0x00040020, 0x000002CC, +0x00000002, 0x000002CB, 0x0004003B, 0x000002CC, 0x000002CD, 0x00000002, 0x0004002B, 0x00000085, +0x000002CE, 0x0000000F, 0x0004002B, 0x00000006, 0x000002FA, 0x442F0000, 0x0004002B, 0x000000ED, +0x0000030A, 0x00000002, 0x0004002B, 0x00000006, 0x00000316, 0x41000000, 0x00040020, 0x0000031C, +0x00000002, 0x000002C7, 0x0004002B, 0x00000085, 0x0000032C, 0x0000000C, 0x00040020, 0x0000032D, +0x00000002, 0x00000085, 0x0004002B, 0x00000006, 0x00000354, 0x3C23D70A, 0x0004002B, 0x00000006, +0x0000035E, 0x3B03126F, 0x0004003B, 0x00000095, 0x0000036A, 0x00000000, 0x0006002C, 0x0000000C, +0x000003ED, 0x000000F8, 0x000000F8, 0x000000F8, 0x0004002B, 0x00000085, 0x000003F5, 0x0000000B, +0x00040020, 0x000003F9, 0x00000007, 0x000000AC, 0x00040020, 0x000003FC, 0x00000002, 0x000002C4, +0x0004002B, 0x00000006, 0x00000456, 0x3F666666, 0x0004002B, 0x00000085, 0x0000046E, 0x00000012, +0x00090019, 0x000004EA, 0x00000006, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, +0x00000000, 0x0003001B, 0x000004EB, 0x000004EA, 0x00040020, 0x000004EC, 0x00000000, 0x000004EB, +0x0004003B, 0x000004EC, 0x000004ED, 0x00000000, 0x0004002B, 0x00000085, 0x0000050C, 0x0000000E, +0x0004003B, 0x000004EC, 0x00000510, 0x00000000, 0x0004002B, 0x000000ED, 0x00000520, 0x00000001, +0x00040020, 0x0000059E, 0x00000001, 0x00000012, 0x0004003B, 0x0000059E, 0x0000059F, 0x00000001, +0x0004002B, 0x00000085, 0x000005A2, 0x00000010, 0x0004002B, 0x00000085, 0x000005A5, 0x00000011, +0x0004003B, 0x000001F8, 0x000005AB, 0x00000000, 0x0004002B, 0x00000006, 0x000005B7, 0x3D3851EC, +0x0004002B, 0x00000006, 0x000005D6, 0x3CA3D70A, 0x0004003B, 0x000001F8, 0x000005F3, 0x00000000, +0x0004002B, 0x00000006, 0x0000060F, 0x3DCCCCCD, 0x00040020, 0x00000665, 0x00000003, 0x00000012, +0x0004003B, 0x00000665, 0x00000666, 0x00000003, 0x0004002B, 0x00000085, 0x0000066C, 0x0000000D, +0x0004002B, 0x00000006, 0x000006B0, 0x3F4CCCCD, 0x0004002B, 0x00000006, 0x000006B1, 0x3E4CCCCD, +0x0007002C, 0x00000012, 0x000006B2, 0x000006B0, 0x000006B1, 0x000006B1, 0x000000D5, 0x0007002C, +0x00000012, 0x000006B6, 0x000006B1, 0x000006B0, 0x000006B1, 0x000000D5, 0x0007002C, 0x00000012, +0x000006BA, 0x000006B1, 0x000006B1, 0x000006B0, 0x000000D5, 0x0007002C, 0x00000012, 0x000006BE, +0x000006B0, 0x000006B0, 0x000006B1, 0x000000D5, 0x0004002B, 0x00000006, 0x000006C4, 0x40C90FDB, +0x0004002B, 0x00000006, 0x000006C5, 0x3727C5AC, 0x0004002B, 0x00000006, 0x000006C6, 0x3D23D70A, +0x0006002C, 0x0000000C, 0x000006C7, 0x000006C6, 0x000006C6, 0x000006C6, 0x0007002C, 0x00000012, +0x000006C8, 0x0000012F, 0x000000F8, 0x000000F8, 0x0000012F, 0x0007002C, 0x00000012, 0x000006C9, +0x000000F8, 0x0000012F, 0x000000F8, 0x0000012F, 0x0007002C, 0x00000012, 0x000006CA, 0x000000F8, +0x000000F8, 0x000000D5, 0x000000F8, 0x0007002C, 0x00000012, 0x000006CB, 0x000000F8, 0x000000F8, +0x000000F8, 0x000000D5, 0x0007002C, 0x000002C7, 0x000006CC, 0x000006C8, 0x000006C9, 0x000006CA, +0x000006CB, 0x0004002B, 0x000000ED, 0x000006CD, 0x00000010, 0x0004001C, 0x000006CE, 0x0000007F, +0x000006CD, 0x0004002B, 0x00000006, 0x000006CF, 0xBF7127FA, 0x0004002B, 0x00000006, 0x000006D0, +0xBECC51E0, 0x0005002C, 0x0000007F, 0x000006D1, 0x000006CF, 0x000006D0, 0x0004002B, 0x00000006, +0x000006D2, 0x3F7211EE, 0x0004002B, 0x00000006, 0x000006D3, 0xBF44D71B, 0x0005002C, 0x0000007F, +0x000006D4, 0x000006D2, 0x000006D3, 0x0004002B, 0x00000006, 0x000006D5, 0xBDC0E398, 0x0004002B, +0x00000006, 0x000006D6, 0xBF6DEC6B, 0x0005002C, 0x0000007F, 0x000006D7, 0x000006D5, 0x000006D6, +0x0004002B, 0x00000006, 0x000006D8, 0x3EB09E84, 0x0004002B, 0x00000006, 0x000006D9, 0x3E967720, +0x0005002C, 0x0000007F, 0x000006DA, 0x000006D8, 0x000006D9, 0x0004002B, 0x00000006, 0x000006DB, +0xBF6A777E, 0x0004002B, 0x00000006, 0x000006DC, 0x3EEA5988, 0x0005002C, 0x0000007F, 0x000006DD, +0x000006DB, 0x000006DC, 0x0004002B, 0x00000006, 0x000006DE, 0xBF50C0D4, 0x0004002B, 0x00000006, +0x000006DF, 0xBF610E50, 0x0005002C, 0x0000007F, 0x000006E0, 0x000006DE, 0x000006DF, 0x0004002B, +0x00000006, 0x000006E1, 0xBEC3FB24, 0x0004002B, 0x00000006, 0x000006E2, 0x3E8DB498, 0x0005002C, +0x0000007F, 0x000006E3, 0x000006E1, 0x000006E2, 0x0004002B, 0x00000006, 0x000006E4, 0x3F798F60, +0x0004002B, 0x00000006, 0x000006E5, 0x3F41A8EC, 0x0005002C, 0x0000007F, 0x000006E6, 0x000006E4, +0x000006E5, 0x0004002B, 0x00000006, 0x000006E7, 0x3EE2EF78, 0x0004002B, 0x00000006, 0x000006E8, +0xBF79A12C, 0x0005002C, 0x0000007F, 0x000006E9, 0x000006E7, 0x000006E8, 0x0004002B, 0x00000006, +0x000006EA, 0x3F099500, 0x0004002B, 0x00000006, 0x000006EB, 0xBEF28D4A, 0x0005002C, 0x0000007F, +0x000006EC, 0x000006EA, 0x000006EB, 0x0004002B, 0x00000006, 0x000006ED, 0xBE87AA08, 0x0004002B, +0x00000006, 0x000006EE, 0xBED67E06, 0x0005002C, 0x0000007F, 0x000006EF, 0x000006ED, 0x000006EE, +0x0004002B, 0x00000006, 0x000006F0, 0x3F4ABEE2, 0x0004002B, 0x00000006, 0x000006F1, 0x3E437BC8, +0x0005002C, 0x0000007F, 0x000006F2, 0x000006F0, 0x000006F1, 0x0004002B, 0x00000006, 0x000006F3, +0xBE77B198, 0x0004002B, 0x00000006, 0x000006F4, 0x3F7F3FA8, 0x0005002C, 0x0000007F, 0x000006F5, +0x000006F3, 0x000006F4, 0x0004002B, 0x00000006, 0x000006F6, 0xBF5068D4, 0x0004002B, 0x00000006, +0x000006F7, 0x3F6A148A, 0x0005002C, 0x0000007F, 0x000006F8, 0x000006F6, 0x000006F7, 0x0004002B, +0x00000006, 0x000006F9, 0x3E4CA330, 0x0004002B, 0x00000006, 0x000006FA, 0x3F495268, 0x0005002C, +0x0000007F, 0x000006FB, 0x000006F9, 0x000006FA, 0x0004002B, 0x00000006, 0x000006FC, 0x3E134898, +0x0004002B, 0x00000006, 0x000006FD, 0xBE106460, 0x0005002C, 0x0000007F, 0x000006FE, 0x000006FC, +0x000006FD, 0x0013002C, 0x000006CE, 0x000006FF, 0x000006D1, 0x000006D4, 0x000006D7, 0x000006DA, +0x000006DD, 0x000006E0, 0x000006E3, 0x000006E6, 0x000006E9, 0x000006EC, 0x000006EF, 0x000006F2, +0x000006F5, 0x000006F8, 0x000006FB, 0x000006FE, 0x0004002B, 0x000000ED, 0x00000700, 0x00000040, +0x0004001C, 0x00000701, 0x0000007F, 0x00000700, 0x0004002B, 0x00000006, 0x00000702, 0xBF625322, +0x0004002B, 0x00000006, 0x00000703, 0x3DFEF391, 0x0005002C, 0x0000007F, 0x00000704, 0x00000702, +0x00000703, 0x0004002B, 0x00000006, 0x00000705, 0xBF36E169, 0x0004002B, 0x00000006, 0x00000706, +0x3CE4E26D, 0x0005002C, 0x0000007F, 0x00000707, 0x00000705, 0x00000706, 0x0004002B, 0x00000006, +0x00000708, 0xBF3F7953, 0x0004002B, 0x00000006, 0x00000709, 0x3E696463, 0x0005002C, 0x0000007F, +0x0000070A, 0x00000708, 0x00000709, 0x0004002B, 0x00000006, 0x0000070B, 0xBF708A37, 0x0004002B, +0x00000006, 0x0000070C, 0x3E797B31, 0x0005002C, 0x0000007F, 0x0000070D, 0x0000070B, 0x0000070C, +0x0004002B, 0x00000006, 0x0000070E, 0xBF7C476F, 0x0004002B, 0x00000006, 0x0000070F, 0x3D3A81DC, +0x0005002C, 0x0000007F, 0x00000710, 0x0000070E, 0x0000070F, 0x0004002B, 0x00000006, 0x00000711, +0xBF5C828C, 0x0004002B, 0x00000006, 0x00000712, 0xBE0B7DC8, 0x0005002C, 0x0000007F, 0x00000713, +0x00000711, 0x00000712, 0x0004002B, 0x00000006, 0x00000714, 0xBF61C66D, 0x0004002B, 0x00000006, +0x00000715, 0x3ECB3786, 0x0005002C, 0x0000007F, 0x00000716, 0x00000714, 0x00000715, 0x0004002B, +0x00000006, 0x00000717, 0xBEEF127F, 0x0004002B, 0x00000006, 0x00000718, 0x3C6DFE76, 0x0005002C, +0x0000007F, 0x00000719, 0x00000717, 0x00000718, 0x0004002B, 0x00000006, 0x0000071A, 0xBF0EE6A7, +0x0004002B, 0x00000006, 0x0000071B, 0x3E59C411, 0x0005002C, 0x0000007F, 0x0000071C, 0x0000071A, +0x0000071B, 0x0004002B, 0x00000006, 0x0000071D, 0xBF14151A, 0x0004002B, 0x00000006, 0x0000071E, +0xBDC43E53, 0x0005002C, 0x0000007F, 0x0000071F, 0x0000071D, 0x0000071E, 0x0004002B, 0x00000006, +0x00000720, 0xBF3D8213, 0x0004002B, 0x00000006, 0x00000721, 0xBDC3DA30, 0x0005002C, 0x0000007F, +0x00000722, 0x00000720, 0x00000721, 0x0004002B, 0x00000006, 0x00000723, 0xBF406E2B, 0x0004002B, +0x00000006, 0x00000724, 0x3EF1F927, 0x0005002C, 0x0000007F, 0x00000725, 0x00000723, 0x00000724, +0x0004002B, 0x00000006, 0x00000726, 0xBF0D9B0B, 0x0004002B, 0x00000006, 0x00000727, 0xBE790364, +0x0005002C, 0x0000007F, 0x00000728, 0x00000726, 0x00000727, 0x0004002B, 0x00000006, 0x00000729, +0xBF2CBD34, 0x0004002B, 0x00000006, 0x0000072A, 0xBEA95571, 0x0005002C, 0x0000007F, 0x0000072B, +0x00000729, 0x0000072A, 0x0004002B, 0x00000006, 0x0000072C, 0xBECE3737, 0x0004002B, 0x00000006, +0x0000072D, 0xBDFA08C0, 0x0005002C, 0x0000007F, 0x0000072E, 0x0000072C, 0x0000072D, 0x0004002B, +0x00000006, 0x0000072F, 0xBEA3B9AE, 0x0004002B, 0x00000006, 0x00000730, 0xBE9FD439, 0x0005002C, +0x0000007F, 0x00000731, 0x0000072F, 0x00000730, 0x0004002B, 0x00000006, 0x00000732, 0xBED3EDB7, +0x0004002B, 0x00000006, 0x00000733, 0xBEE127D4, 0x0005002C, 0x0000007F, 0x00000734, 0x00000732, +0x00000733, 0x0004002B, 0x00000006, 0x00000735, 0xBF7AA9C5, 0x0004002B, 0x00000006, 0x00000736, +0xBE4E132B, 0x0005002C, 0x0000007F, 0x00000737, 0x00000735, 0x00000736, 0x0004002B, 0x00000006, +0x00000738, 0xBF5D9696, 0x0004002B, 0x00000006, 0x00000739, 0xBE93CFD5, 0x0005002C, 0x0000007F, +0x0000073A, 0x00000738, 0x00000739, 0x0004002B, 0x00000006, 0x0000073B, 0xBE798D8B, 0x0004002B, +0x00000006, 0x0000073C, 0xBE3ED9E0, 0x0005002C, 0x0000007F, 0x0000073D, 0x0000073B, 0x0000073C, +0x0004002B, 0x00000006, 0x0000073E, 0xBE96FFC1, 0x0004002B, 0x00000006, 0x0000073F, 0xBD645804, +0x0005002C, 0x0000007F, 0x00000740, 0x0000073E, 0x0000073F, 0x0004002B, 0x00000006, 0x00000741, +0xBF1ABD5E, 0x0004002B, 0x00000006, 0x00000742, 0xBF0B5409, 0x0005002C, 0x0000007F, 0x00000743, +0x00000741, 0x00000742, 0x0004002B, 0x00000006, 0x00000744, 0xBED60B70, 0x0004002B, 0x00000006, +0x00000745, 0xBF167222, 0x0005002C, 0x0000007F, 0x00000746, 0x00000744, 0x00000745, 0x0004002B, +0x00000006, 0x00000747, 0xBF0C957D, 0x0004002B, 0x00000006, 0x00000748, 0xBED4EDD5, 0x0005002C, +0x0000007F, 0x00000749, 0x00000747, 0x00000748, 0x0004002B, 0x00000006, 0x0000074A, 0xBE73CB3E, +0x0004002B, 0x00000006, 0x0000074B, 0xBF1C9C5E, 0x0005002C, 0x0000007F, 0x0000074C, 0x0000074A, +0x0000074B, 0x0004002B, 0x00000006, 0x0000074D, 0xBE88B4C0, 0x0004002B, 0x00000006, 0x0000074E, +0xBEEB5E0F, 0x0005002C, 0x0000007F, 0x0000074F, 0x0000074D, 0x0000074E, 0x0004002B, 0x00000006, +0x00000750, 0xBDCCCFF2, 0x0004002B, 0x00000006, 0x00000751, 0xBE6A9D62, 0x0005002C, 0x0000007F, +0x00000752, 0x00000750, 0x00000751, 0x0004002B, 0x00000006, 0x00000753, 0xBDD0BFA1, 0x0004002B, +0x00000006, 0x00000754, 0xBEC2C16E, 0x0005002C, 0x0000007F, 0x00000755, 0x00000753, 0x00000754, +0x0004002B, 0x00000006, 0x00000756, 0xBF2E749F, 0x0004002B, 0x00000006, 0x00000757, 0xBF3365DC, +0x0005002C, 0x0000007F, 0x00000758, 0x00000756, 0x00000757, 0x0004002B, 0x00000006, 0x00000759, +0xBF4373F3, 0x0004002B, 0x00000006, 0x0000075A, 0xBF0B1B58, 0x0005002C, 0x0000007F, 0x0000075B, +0x00000759, 0x0000075A, 0x0004002B, 0x00000006, 0x0000075C, 0xBF0C8D3B, 0x0004002B, 0x00000006, +0x0000075D, 0xBF403116, 0x0005002C, 0x0000007F, 0x0000075E, 0x0000075C, 0x0000075D, 0x0004002B, +0x00000006, 0x0000075F, 0xBF4F1D93, 0x0004002B, 0x00000006, 0x00000760, 0xBED1461B, 0x0005002C, +0x0000007F, 0x00000761, 0x0000075F, 0x00000760, 0x0004002B, 0x00000006, 0x00000762, 0xBEC6B980, +0x0004002B, 0x00000006, 0x00000763, 0xBF4600B0, 0x0005002C, 0x0000007F, 0x00000764, 0x00000762, +0x00000763, 0x0004002B, 0x00000006, 0x00000765, 0xBEDBD945, 0x0004002B, 0x00000006, 0x00000766, +0xBF6517A4, 0x0005002C, 0x0000007F, 0x00000767, 0x00000765, 0x00000766, 0x0004002B, 0x00000006, +0x00000768, 0xBE06C15D, 0x0004002B, 0x00000006, 0x00000769, 0x3D853D21, 0x0005002C, 0x0000007F, +0x0000076A, 0x00000768, 0x00000769, 0x0004002B, 0x00000006, 0x0000076B, 0xBE8CCD10, 0x0004002B, +0x00000006, 0x0000076C, 0x3DD2C8C5, 0x0005002C, 0x0000007F, 0x0000076D, 0x0000076B, 0x0000076C, +0x0004002B, 0x00000006, 0x0000076E, 0xBDD953DF, 0x0004002B, 0x00000006, 0x0000076F, 0xBD8BEF07, +0x0005002C, 0x0000007F, 0x00000770, 0x0000076E, 0x0000076F, 0x0004002B, 0x00000006, 0x00000771, +0xBE96D3FA, 0x0004002B, 0x00000006, 0x00000772, 0xBF643A54, 0x0005002C, 0x0000007F, 0x00000773, +0x00000771, 0x00000772, 0x0004002B, 0x00000006, 0x00000774, 0xBF21218A, 0x0004002B, 0x00000006, +0x00000775, 0x3EC23F03, 0x0005002C, 0x0000007F, 0x00000776, 0x00000774, 0x00000775, 0x0004002B, +0x00000006, 0x00000777, 0xBED083FD, 0x0004002B, 0x00000006, 0x00000778, 0x3EADF373, 0x0005002C, +0x0000007F, 0x00000779, 0x00000777, 0x00000778, 0x0004002B, 0x00000006, 0x0000077A, 0x3D92BD3C, +0x0004002B, 0x00000006, 0x0000077B, 0xBEC4C0DF, 0x0005002C, 0x0000007F, 0x0000077C, 0x0000077A, +0x0000077B, 0x0004002B, 0x00000006, 0x0000077D, 0x3CB45F18, 0x0004002B, 0x00000006, 0x0000077E, +0xBE870FE0, 0x0005002C, 0x0000007F, 0x0000077F, 0x0000077D, 0x0000077E, 0x0004002B, 0x00000006, +0x00000780, 0x3B7E36D2, 0x0004002B, 0x00000006, 0x00000781, 0xBE0B56B8, 0x0005002C, 0x0000007F, +0x00000782, 0x00000780, 0x00000781, 0x0004002B, 0x00000006, 0x00000783, 0xBE0CD573, 0x0004002B, +0x00000006, 0x00000784, 0xBF44916D, 0x0005002C, 0x0000007F, 0x00000785, 0x00000783, 0x00000784, +0x0004002B, 0x00000006, 0x00000786, 0xBD506141, 0x0004002B, 0x00000006, 0x00000787, 0xBF67F413, +0x0005002C, 0x0000007F, 0x00000788, 0x00000786, 0x00000787, 0x0004002B, 0x00000006, 0x00000789, +0x3DE9BE90, 0x0004002B, 0x00000006, 0x0000078A, 0xBD8F77F2, 0x0005002C, 0x0000007F, 0x0000078B, +0x00000789, 0x0000078A, 0x0004002B, 0x00000006, 0x0000078C, 0x3E273BC9, 0x0004002B, 0x00000006, +0x0000078D, 0xBE5E71CE, 0x0005002C, 0x0000007F, 0x0000078E, 0x0000078C, 0x0000078D, 0x0004002B, +0x00000006, 0x0000078F, 0xBDCD562A, 0x0004002B, 0x00000006, 0x00000790, 0xBF1686A5, 0x0005002C, +0x0000007F, 0x00000791, 0x0000078F, 0x00000790, 0x0004002B, 0x00000006, 0x00000792, 0xBBA1F080, +0x0004002B, 0x00000006, 0x00000793, 0x3E006078, 0x0005002C, 0x0000007F, 0x00000794, 0x00000792, +0x00000793, 0x0004002B, 0x00000006, 0x00000795, 0x3D1098D4, 0x0004002B, 0x00000006, 0x00000796, +0xBF1E8B1A, 0x0005002C, 0x0000007F, 0x00000797, 0x00000795, 0x00000796, 0x0004002B, 0x00000006, +0x00000798, 0x3E48576D, 0x0004002B, 0x00000006, 0x00000799, 0xBEEB04EE, 0x0005002C, 0x0000007F, +0x0000079A, 0x00000798, 0x00000799, 0x0004002B, 0x00000006, 0x0000079B, 0x3E9BA1D3, 0x0004002B, +0x00000006, 0x0000079C, 0xBEB1565C, 0x0005002C, 0x0000007F, 0x0000079D, 0x0000079B, 0x0000079C, +0x0004002B, 0x00000006, 0x0000079E, 0xBF2D9924, 0x0004002B, 0x00000006, 0x0000079F, 0x3F2F62A6, +0x0005002C, 0x0000007F, 0x000007A0, 0x0000079E, 0x0000079F, 0x0004002B, 0x00000006, 0x000007A1, +0xBF20E001, 0x0004002B, 0x00000006, 0x000007A2, 0x3F020AD9, 0x0005002C, 0x0000007F, 0x000007A3, +0x000007A1, 0x000007A2, 0x0004002B, 0x00000006, 0x000007A4, 0xBF022B49, 0x0004002B, 0x00000006, +0x000007A5, 0x3EEAE1AC, 0x0005002C, 0x0000007F, 0x000007A6, 0x000007A4, 0x000007A5, 0x0004002B, +0x00000006, 0x000007A7, 0x3D039EF1, 0x0004002B, 0x00000006, 0x000007A8, 0xBF48331E, 0x0005002C, +0x0000007F, 0x000007A9, 0x000007A7, 0x000007A8, 0x0004002B, 0x00000006, 0x000007AA, 0x3DFB1316, +0x0004002B, 0x00000006, 0x000007AB, 0x3E8F8A6E, 0x0005002C, 0x0000007F, 0x000007AC, 0x000007AA, +0x000007AB, 0x0004002B, 0x00000006, 0x000007AD, 0xBD32C301, 0x0004002B, 0x00000006, 0x000007AE, +0x3E9FCE10, 0x0005002C, 0x0000007F, 0x000007AF, 0x000007AD, 0x000007AE, 0x0004002B, 0x00000006, +0x000007B0, 0x3E082F51, 0x0004002B, 0x00000006, 0x000007B1, 0x3DAE6D9C, 0x0005002C, 0x0000007F, +0x000007B2, 0x000007B0, 0x000007B1, 0x0004002B, 0x00000006, 0x000007B3, 0xBE44B76F, 0x0004002B, +0x00000006, 0x000007B4, 0x3E925AAB, 0x0005002C, 0x0000007F, 0x000007B5, 0x000007B3, 0x000007B4, +0x0004002B, 0x00000006, 0x000007B6, 0x3E3C0725, 0x0004002B, 0x00000006, 0x000007B7, 0xBF369707, +0x0005002C, 0x0000007F, 0x000007B8, 0x000007B6, 0x000007B7, 0x0004002B, 0x00000006, 0x000007B9, +0x3E87CAEA, 0x0004002B, 0x00000006, 0x000007BA, 0xBF18C261, 0x0005002C, 0x0000007F, 0x000007BB, +0x000007B9, 0x000007BA, 0x0004002B, 0x00000006, 0x000007BC, 0xBC1DBEC2, 0x0004002B, 0x00000006, +0x000007BD, 0xBEF75361, 0x0005002C, 0x0000007F, 0x000007BE, 0x000007BC, 0x000007BD, 0x0004002B, +0x00000006, 0x000007BF, 0xBC97AEDE, 0x0004002B, 0x00000006, 0x000007C0, 0x3EDF1477, 0x0005002C, +0x0000007F, 0x000007C1, 0x000007BF, 0x000007C0, 0x0043002C, 0x00000701, 0x000007C2, 0x00000704, +0x00000707, 0x0000070A, 0x0000070D, 0x00000710, 0x00000713, 0x00000716, 0x00000719, 0x0000071C, +0x0000071F, 0x00000722, 0x00000725, 0x00000728, 0x0000072B, 0x0000072E, 0x00000731, 0x00000734, +0x00000737, 0x0000073A, 0x0000073D, 0x00000740, 0x00000743, 0x00000746, 0x00000749, 0x0000074C, +0x0000074F, 0x00000752, 0x00000755, 0x00000758, 0x0000075B, 0x0000075E, 0x00000761, 0x00000764, +0x00000767, 0x0000076A, 0x0000076D, 0x00000770, 0x00000773, 0x00000776, 0x00000779, 0x0000077C, +0x0000077F, 0x00000782, 0x00000785, 0x00000788, 0x0000078B, 0x0000078E, 0x00000791, 0x00000794, +0x00000797, 0x0000079A, 0x0000079D, 0x000007A0, 0x000007A3, 0x000007A6, 0x000007A9, 0x000007AC, +0x000007AF, 0x000007B2, 0x000007B5, 0x000007B8, 0x000007BB, 0x000007BE, 0x000007C1, 0x00050036, +0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000013, +0x0000052D, 0x00000007, 0x0004003B, 0x00000007, 0x00000537, 0x00000007, 0x0004003B, 0x00000007, +0x00000538, 0x00000007, 0x0004003B, 0x0000000D, 0x00000547, 0x00000007, 0x0004003B, 0x0000000D, +0x0000056B, 0x00000007, 0x0004003B, 0x000000C7, 0x00000589, 0x00000007, 0x0004003B, 0x0000000D, +0x00000597, 0x00000007, 0x0004003B, 0x00000080, 0x0000059D, 0x00000007, 0x0004003B, 0x00000007, +0x000005AA, 0x00000007, 0x0004003B, 0x00000007, 0x000005BA, 0x00000007, 0x0004003B, 0x00000007, +0x000005BF, 0x00000007, 0x0004003B, 0x0000000D, 0x000005C3, 0x00000007, 0x0004003B, 0x0000000D, +0x000005C7, 0x00000007, 0x0004003B, 0x00000007, 0x000005CB, 0x00000007, 0x0004003B, 0x00000007, +0x000005D3, 0x00000007, 0x0004003B, 0x00000007, 0x000005D8, 0x00000007, 0x0004003B, 0x00000007, +0x000005DC, 0x00000007, 0x0004003B, 0x0000000D, 0x000005E1, 0x00000007, 0x0004003B, 0x00000007, +0x000005FD, 0x00000007, 0x0004003B, 0x00000007, 0x000005FE, 0x00000007, 0x0004003B, 0x0000000D, +0x00000602, 0x00000007, 0x0004003B, 0x00000007, 0x00000605, 0x00000007, 0x0004003B, 0x00000007, +0x00000608, 0x00000007, 0x0004003B, 0x00000007, 0x0000061B, 0x00000007, 0x0004003B, 0x00000007, +0x00000625, 0x00000007, 0x0004003B, 0x00000007, 0x00000628, 0x00000007, 0x0004003B, 0x00000013, +0x0000062B, 0x00000007, 0x0004003B, 0x00000007, 0x00000634, 0x00000007, 0x0004003B, 0x0000000D, +0x00000642, 0x00000007, 0x0004003B, 0x0000000D, 0x0000064C, 0x00000007, 0x0004003B, 0x0000000D, +0x0000064D, 0x00000007, 0x0004003B, 0x0000000D, 0x00000650, 0x00000007, 0x0004003B, 0x000000C7, +0x00000652, 0x00000007, 0x0004003B, 0x0000000D, 0x00000655, 0x00000007, 0x0004003B, 0x0000000D, +0x00000656, 0x00000007, 0x0004003B, 0x0000000D, 0x00000659, 0x00000007, 0x0004003B, 0x000000C7, +0x0000065B, 0x00000007, 0x0004003B, 0x0000000D, 0x0000065E, 0x00000007, 0x0004003B, 0x00000086, +0x000006A5, 0x00000007, 0x0004003B, 0x0000000D, 0x000006A6, 0x00000007, 0x0003003E, 0x000000D4, +0x000000D5, 0x0003003E, 0x000000D6, 0x000000D7, 0x00040039, 0x00000012, 0x0000052E, 0x00000070, +0x0003003E, 0x0000052D, 0x0000052E, 0x00050041, 0x00000007, 0x0000052F, 0x0000052D, 0x000000EE, +0x0004003D, 0x00000006, 0x00000530, 0x0000052F, 0x00050041, 0x000001E1, 0x00000531, 0x000001DF, +0x000003F5, 0x0004003D, 0x00000006, 0x00000532, 0x00000531, 0x000500B8, 0x000001E5, 0x00000533, +0x00000530, 0x00000532, 0x000300F7, 0x00000535, 0x00000000, 0x000400FA, 0x00000533, 0x00000534, +0x00000535, 0x000200F8, 0x00000534, 0x000100FC, 0x000200F8, 0x00000535, 0x0003003E, 0x00000537, +0x000000F8, 0x0003003E, 0x00000538, 0x000000F8, 0x00050041, 0x000001E1, 0x00000539, 0x000001DF, +0x0000032C, 0x0004003D, 0x00000006, 0x0000053A, 0x00000539, 0x000500B4, 0x000001E5, 0x0000053B, +0x0000053A, 0x000000F8, 0x000300F7, 0x0000053D, 0x00000000, 0x000400FA, 0x0000053B, 0x0000053C, +0x00000541, 0x000200F8, 0x0000053C, 0x00040039, 0x0000000C, 0x0000053E, 0x00000073, 0x00050051, +0x00000006, 0x0000053F, 0x0000053E, 0x00000000, 0x0003003E, 0x00000537, 0x0000053F, 0x00040039, +0x00000006, 0x00000540, 0x00000076, 0x0003003E, 0x00000538, 0x00000540, 0x000200F9, 0x0000053D, +0x000200F8, 0x00000541, 0x00050041, 0x000001E1, 0x00000542, 0x000001DF, 0x0000032C, 0x0004003D, +0x00000006, 0x00000543, 0x00000542, 0x000500B4, 0x000001E5, 0x00000544, 0x00000543, 0x000000D5, +0x000300F7, 0x00000546, 0x00000000, 0x000400FA, 0x00000544, 0x00000545, 0x00000565, 0x000200F8, +0x00000545, 0x0004003D, 0x000001F7, 0x00000548, 0x0000021D, 0x00050041, 0x00000200, 0x00000549, +0x000001FE, 0x000001FF, 0x0004003D, 0x0000007F, 0x0000054A, 0x00000549, 0x00050057, 0x00000012, +0x0000054B, 0x00000548, 0x0000054A, 0x0008004F, 0x0000000C, 0x0000054C, 0x0000054B, 0x0000054B, +0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000547, 0x0000054C, 0x00050041, 0x000001E1, +0x0000054D, 0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, 0x0000054E, 0x0000054D, 0x00050083, +0x00000006, 0x0000054F, 0x000000D5, 0x0000054E, 0x00050041, 0x000001E1, 0x00000550, 0x000001DF, +0x00000210, 0x0004003D, 0x00000006, 0x00000551, 0x00000550, 0x00050085, 0x00000006, 0x00000552, +0x0000054F, 0x00000551, 0x00050041, 0x000001E1, 0x00000553, 0x000001DF, 0x0000020A, 0x0004003D, +0x00000006, 0x00000554, 0x00000553, 0x00050041, 0x00000007, 0x00000555, 0x00000547, 0x0000030A, +0x0004003D, 0x00000006, 0x00000556, 0x00000555, 0x00050085, 0x00000006, 0x00000557, 0x00000554, +0x00000556, 0x00050081, 0x00000006, 0x00000558, 0x00000552, 0x00000557, 0x0003003E, 0x00000537, +0x00000558, 0x00050041, 0x000001E1, 0x00000559, 0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, +0x0000055A, 0x00000559, 0x00050083, 0x00000006, 0x0000055B, 0x000000D5, 0x0000055A, 0x00050041, +0x000001E1, 0x0000055C, 0x000001DF, 0x000001FF, 0x0004003D, 0x00000006, 0x0000055D, 0x0000055C, +0x00050085, 0x00000006, 0x0000055E, 0x0000055B, 0x0000055D, 0x00050041, 0x000001E1, 0x0000055F, +0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, 0x00000560, 0x0000055F, 0x00050041, 0x00000007, +0x00000561, 0x00000547, 0x00000520, 0x0004003D, 0x00000006, 0x00000562, 0x00000561, 0x00050085, +0x00000006, 0x00000563, 0x00000560, 0x00000562, 0x00050081, 0x00000006, 0x00000564, 0x0000055E, +0x00000563, 0x0003003E, 0x00000538, 0x00000564, 0x000200F9, 0x00000546, 0x000200F8, 0x00000565, +0x00050041, 0x000001E1, 0x00000566, 0x000001DF, 0x0000032C, 0x0004003D, 0x00000006, 0x00000567, +0x00000566, 0x000500B4, 0x000001E5, 0x00000568, 0x00000567, 0x00000130, 0x000300F7, 0x0000056A, +0x00000000, 0x000400FA, 0x00000568, 0x00000569, 0x0000056A, 0x000200F8, 0x00000569, 0x0004003D, +0x000001F7, 0x0000056C, 0x0000021D, 0x00050041, 0x00000200, 0x0000056D, 0x000001FE, 0x000001FF, +0x0004003D, 0x0000007F, 0x0000056E, 0x0000056D, 0x00050057, 0x00000012, 0x0000056F, 0x0000056C, +0x0000056E, 0x0008004F, 0x0000000C, 0x00000570, 0x0000056F, 0x0000056F, 0x00000000, 0x00000001, +0x00000002, 0x0003003E, 0x0000056B, 0x00000570, 0x00050041, 0x000001E1, 0x00000571, 0x000001DF, +0x0000020A, 0x0004003D, 0x00000006, 0x00000572, 0x00000571, 0x00050083, 0x00000006, 0x00000573, +0x000000D5, 0x00000572, 0x00050041, 0x000001E1, 0x00000574, 0x000001DF, 0x00000210, 0x0004003D, +0x00000006, 0x00000575, 0x00000574, 0x00050085, 0x00000006, 0x00000576, 0x00000573, 0x00000575, +0x00050041, 0x000001E1, 0x00000577, 0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, 0x00000578, +0x00000577, 0x00050041, 0x00000007, 0x00000579, 0x0000056B, 0x0000030A, 0x0004003D, 0x00000006, +0x0000057A, 0x00000579, 0x00050085, 0x00000006, 0x0000057B, 0x00000578, 0x0000057A, 0x00050081, +0x00000006, 0x0000057C, 0x00000576, 0x0000057B, 0x0003003E, 0x00000537, 0x0000057C, 0x00050041, +0x000001E1, 0x0000057D, 0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, 0x0000057E, 0x0000057D, +0x00050083, 0x00000006, 0x0000057F, 0x000000D5, 0x0000057E, 0x00050041, 0x000001E1, 0x00000580, +0x000001DF, 0x000001FF, 0x0004003D, 0x00000006, 0x00000581, 0x00000580, 0x00050085, 0x00000006, +0x00000582, 0x0000057F, 0x00000581, 0x00050041, 0x000001E1, 0x00000583, 0x000001DF, 0x0000020A, +0x0004003D, 0x00000006, 0x00000584, 0x00000583, 0x00050041, 0x00000007, 0x00000585, 0x0000056B, +0x00000520, 0x0004003D, 0x00000006, 0x00000586, 0x00000585, 0x00050085, 0x00000006, 0x00000587, +0x00000584, 0x00000586, 0x00050081, 0x00000006, 0x00000588, 0x00000582, 0x00000587, 0x0003003E, +0x00000538, 0x00000588, 0x000200F9, 0x0000056A, 0x000200F8, 0x0000056A, 0x000200F9, 0x00000546, +0x000200F8, 0x00000546, 0x000200F9, 0x0000053D, 0x000200F8, 0x0000053D, 0x0004003D, 0x00000012, +0x0000058A, 0x0000052D, 0x00050041, 0x00000013, 0x0000058B, 0x00000589, 0x000001E9, 0x0003003E, +0x0000058B, 0x0000058A, 0x0004003D, 0x00000006, 0x0000058C, 0x00000537, 0x00050041, 0x00000007, +0x0000058D, 0x00000589, 0x000001FF, 0x0003003E, 0x0000058D, 0x0000058C, 0x0004003D, 0x00000006, +0x0000058E, 0x00000538, 0x00050041, 0x00000007, 0x0000058F, 0x00000589, 0x0000027E, 0x0003003E, +0x0000058F, 0x0000058E, 0x00050041, 0x000001E1, 0x00000590, 0x000001DF, 0x0000027E, 0x0004003D, +0x00000006, 0x00000591, 0x00000590, 0x00050041, 0x00000007, 0x00000592, 0x00000589, 0x00000260, +0x0003003E, 0x00000592, 0x00000591, 0x00040039, 0x0000000C, 0x00000593, 0x0000007D, 0x00050041, +0x0000000D, 0x00000594, 0x00000589, 0x0000020A, 0x0003003E, 0x00000594, 0x00000593, 0x00040039, +0x00000006, 0x00000595, 0x00000078, 0x00050041, 0x00000007, 0x00000596, 0x00000589, 0x00000228, +0x0003003E, 0x00000596, 0x00000595, 0x00050041, 0x00000013, 0x00000598, 0x00000589, 0x000001E9, +0x0004003D, 0x00000012, 0x00000599, 0x00000598, 0x0008004F, 0x0000000C, 0x0000059A, 0x00000599, +0x00000599, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000597, 0x0000059A, 0x00050039, +0x0000000C, 0x0000059B, 0x0000007B, 0x00000597, 0x00050041, 0x0000000D, 0x0000059C, 0x00000589, +0x000001E0, 0x0003003E, 0x0000059C, 0x0000059B, 0x0004003D, 0x00000012, 0x000005A0, 0x0000059F, +0x0007004F, 0x0000007F, 0x000005A1, 0x000005A0, 0x000005A0, 0x00000000, 0x00000001, 0x00050041, +0x000001E1, 0x000005A3, 0x000002CD, 0x000005A2, 0x0004003D, 0x00000006, 0x000005A4, 0x000005A3, +0x00050041, 0x000001E1, 0x000005A6, 0x000002CD, 0x000005A5, 0x0004003D, 0x00000006, 0x000005A7, +0x000005A6, 0x00050050, 0x0000007F, 0x000005A8, 0x000005A4, 0x000005A7, 0x00050088, 0x0000007F, +0x000005A9, 0x000005A1, 0x000005A8, 0x0003003E, 0x0000059D, 0x000005A9, 0x0004003D, 0x000001F7, +0x000005AC, 0x000005AB, 0x0004003D, 0x0000007F, 0x000005AD, 0x0000059D, 0x00050057, 0x00000012, +0x000005AE, 0x000005AC, 0x000005AD, 0x00050051, 0x00000006, 0x000005AF, 0x000005AE, 0x00000000, +0x0003003E, 0x000005AA, 0x000005AF, 0x0004003D, 0x00000006, 0x000005B0, 0x000005AA, 0x00050041, +0x00000013, 0x000005B1, 0x00000589, 0x000001E9, 0x0004003D, 0x00000012, 0x000005B2, 0x000005B1, +0x0005008E, 0x00000012, 0x000005B3, 0x000005B2, 0x000005B0, 0x00050041, 0x00000013, 0x000005B4, +0x00000589, 0x000001E9, 0x0003003E, 0x000005B4, 0x000005B3, 0x00050041, 0x00000007, 0x000005B5, +0x00000589, 0x0000027E, 0x0004003D, 0x00000006, 0x000005B6, 0x000005B5, 0x0008000C, 0x00000006, +0x000005B8, 0x00000001, 0x0000002B, 0x000005B6, 0x000005B7, 0x000000D5, 0x00050041, 0x00000007, +0x000005B9, 0x00000589, 0x0000027E, 0x0003003E, 0x000005B9, 0x000005B8, 0x00050041, 0x00000007, +0x000005BB, 0x00000589, 0x00000210, 0x0004003D, 0x00000006, 0x000005BC, 0x000005BB, 0x0003003E, +0x000005BA, 0x000005BC, 0x00050039, 0x00000006, 0x000005BD, 0x00000057, 0x000005BA, 0x00050041, +0x00000007, 0x000005BE, 0x00000589, 0x00000210, 0x0003003E, 0x000005BE, 0x000005BD, 0x0004003D, +0x00000006, 0x000005C0, 0x00000538, 0x0004003D, 0x00000006, 0x000005C1, 0x00000538, 0x00050085, +0x00000006, 0x000005C2, 0x000005C0, 0x000005C1, 0x0003003E, 0x000005BF, 0x000005C2, 0x00050041, +0x0000000D, 0x000005C4, 0x00000589, 0x0000020A, 0x0004003D, 0x0000000C, 0x000005C5, 0x000005C4, +0x000400CF, 0x0000000C, 0x000005C6, 0x000005C5, 0x0003003E, 0x000005C3, 0x000005C6, 0x00050041, +0x0000000D, 0x000005C8, 0x00000589, 0x0000020A, 0x0004003D, 0x0000000C, 0x000005C9, 0x000005C8, +0x000400D0, 0x0000000C, 0x000005CA, 0x000005C9, 0x0003003E, 0x000005C7, 0x000005CA, 0x0004003D, +0x0000000C, 0x000005CC, 0x000005C3, 0x0004003D, 0x0000000C, 0x000005CD, 0x000005C3, 0x00050094, +0x00000006, 0x000005CE, 0x000005CC, 0x000005CD, 0x0004003D, 0x0000000C, 0x000005CF, 0x000005C7, +0x0004003D, 0x0000000C, 0x000005D0, 0x000005C7, 0x00050094, 0x00000006, 0x000005D1, 0x000005CF, +0x000005D0, 0x00050081, 0x00000006, 0x000005D2, 0x000005CE, 0x000005D1, 0x0003003E, 0x000005CB, +0x000005D2, 0x0004003D, 0x00000006, 0x000005D4, 0x000005CB, 0x00050085, 0x00000006, 0x000005D5, +0x000005D4, 0x000000D5, 0x0007000C, 0x00000006, 0x000005D7, 0x00000001, 0x00000025, 0x000005D5, +0x000005D6, 0x0003003E, 0x000005D3, 0x000005D7, 0x0004003D, 0x00000006, 0x000005D9, 0x000005BF, +0x0004003D, 0x00000006, 0x000005DA, 0x000005D3, 0x00050081, 0x00000006, 0x000005DB, 0x000005D9, +0x000005DA, 0x0003003E, 0x000005DC, 0x000005DB, 0x00050039, 0x00000006, 0x000005DD, 0x00000019, +0x000005DC, 0x0003003E, 0x000005D8, 0x000005DD, 0x0004003D, 0x00000006, 0x000005DE, 0x000005D8, +0x0006000C, 0x00000006, 0x000005DF, 0x00000001, 0x0000001F, 0x000005DE, 0x00050041, 0x00000007, +0x000005E0, 0x00000589, 0x00000210, 0x0003003E, 0x000005E0, 0x000005DF, 0x00050041, 0x0000059E, +0x000005E2, 0x000001FE, 0x00000210, 0x0004003D, 0x00000012, 0x000005E3, 0x000005E2, 0x0008004F, +0x0000000C, 0x000005E4, 0x000005E3, 0x000005E3, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, +0x000005E1, 0x000005E4, 0x00050041, 0x000001EA, 0x000005E5, 0x000002CD, 0x000001E0, 0x0004003D, +0x00000012, 0x000005E6, 0x000005E5, 0x0008004F, 0x0000000C, 0x000005E7, 0x000005E6, 0x000005E6, +0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x0000000C, 0x000005E8, 0x000005E1, 0x00050083, +0x0000000C, 0x000005E9, 0x000005E7, 0x000005E8, 0x0006000C, 0x0000000C, 0x000005EA, 0x00000001, +0x00000045, 0x000005E9, 0x00050041, 0x0000000D, 0x000005EB, 0x00000589, 0x00000278, 0x0003003E, +0x000005EB, 0x000005EA, 0x00050041, 0x0000000D, 0x000005EC, 0x00000589, 0x0000020A, 0x0004003D, +0x0000000C, 0x000005ED, 0x000005EC, 0x00050041, 0x0000000D, 0x000005EE, 0x00000589, 0x00000278, +0x0004003D, 0x0000000C, 0x000005EF, 0x000005EE, 0x00050094, 0x00000006, 0x000005F0, 0x000005ED, +0x000005EF, 0x0007000C, 0x00000006, 0x000005F1, 0x00000001, 0x00000028, 0x000005F0, 0x0000018F, +0x00050041, 0x00000007, 0x000005F2, 0x00000589, 0x0000025A, 0x0003003E, 0x000005F2, 0x000005F1, +0x0004003D, 0x000001F7, 0x000005F4, 0x000005F3, 0x00050041, 0x00000007, 0x000005F5, 0x00000589, +0x0000025A, 0x0004003D, 0x00000006, 0x000005F6, 0x000005F5, 0x00050041, 0x00000007, 0x000005F7, +0x00000589, 0x0000027E, 0x0004003D, 0x00000006, 0x000005F8, 0x000005F7, 0x00050050, 0x0000007F, +0x000005F9, 0x000005F6, 0x000005F8, 0x00050057, 0x00000012, 0x000005FA, 0x000005F4, 0x000005F9, +0x0007004F, 0x0000007F, 0x000005FB, 0x000005FA, 0x000005FA, 0x00000000, 0x00000001, 0x00050041, +0x00000080, 0x000005FC, 0x00000589, 0x0000032C, 0x0003003E, 0x000005FC, 0x000005FB, 0x00050041, +0x00000007, 0x000005FF, 0x00000589, 0x00000260, 0x0004003D, 0x00000006, 0x00000600, 0x000005FF, +0x0003003E, 0x000005FE, 0x00000600, 0x00050039, 0x00000006, 0x00000601, 0x00000054, 0x000005FE, +0x0003003E, 0x000005FD, 0x00000601, 0x00050041, 0x00000013, 0x00000603, 0x00000589, 0x000001E9, +0x0004003D, 0x00000012, 0x00000604, 0x00000603, 0x00050041, 0x00000007, 0x00000606, 0x00000589, +0x000001FF, 0x0004003D, 0x00000006, 0x00000607, 0x00000606, 0x0003003E, 0x00000605, 0x00000607, +0x0004003D, 0x00000006, 0x00000609, 0x000005FD, 0x0003003E, 0x00000608, 0x00000609, 0x00070039, +0x0000000C, 0x0000060A, 0x00000051, 0x00000604, 0x00000605, 0x00000608, 0x0003003E, 0x00000602, +0x0000060A, 0x0004003D, 0x0000000C, 0x0000060B, 0x00000602, 0x00050041, 0x0000000D, 0x0000060C, +0x00000589, 0x00000244, 0x0003003E, 0x0000060C, 0x0000060B, 0x00050041, 0x0000000D, 0x0000060D, +0x00000589, 0x00000244, 0x0004003D, 0x0000000C, 0x0000060E, 0x0000060D, 0x00060041, 0x00000007, +0x00000610, 0x00000589, 0x0000032C, 0x00000520, 0x0004003D, 0x00000006, 0x00000611, 0x00000610, +0x0007000C, 0x00000006, 0x00000612, 0x00000001, 0x00000028, 0x0000060F, 0x00000611, 0x00050088, +0x00000006, 0x00000613, 0x000000D5, 0x00000612, 0x00050083, 0x00000006, 0x00000614, 0x00000613, +0x000000D5, 0x0005008E, 0x0000000C, 0x00000615, 0x0000060E, 0x00000614, 0x00060050, 0x0000000C, +0x00000616, 0x000000D5, 0x000000D5, 0x000000D5, 0x00050081, 0x0000000C, 0x00000617, 0x00000616, +0x00000615, 0x00050041, 0x0000000D, 0x00000618, 0x00000589, 0x000003F5, 0x0003003E, 0x00000618, +0x00000617, 0x00050041, 0x00000013, 0x00000619, 0x00000589, 0x000001E9, 0x0004003D, 0x00000012, +0x0000061A, 0x00000619, 0x00050041, 0x00000007, 0x0000061C, 0x00000589, 0x000001FF, 0x0004003D, +0x00000006, 0x0000061D, 0x0000061C, 0x0003003E, 0x0000061B, 0x0000061D, 0x00060039, 0x0000000C, +0x0000061E, 0x0000004B, 0x0000061A, 0x0000061B, 0x00060041, 0x00000007, 0x0000061F, 0x00000589, +0x000001E9, 0x0000023E, 0x00050051, 0x00000006, 0x00000620, 0x0000061E, 0x00000000, 0x0003003E, +0x0000061F, 0x00000620, 0x00060041, 0x00000007, 0x00000621, 0x00000589, 0x000001E9, 0x00000520, +0x00050051, 0x00000006, 0x00000622, 0x0000061E, 0x00000001, 0x0003003E, 0x00000621, 0x00000622, +0x00060041, 0x00000007, 0x00000623, 0x00000589, 0x000001E9, 0x0000030A, 0x00050051, 0x00000006, +0x00000624, 0x0000061E, 0x00000002, 0x0003003E, 0x00000623, 0x00000624, 0x00050041, 0x000001E1, +0x00000626, 0x000002CD, 0x00000278, 0x0004003D, 0x00000006, 0x00000627, 0x00000626, 0x0003003E, +0x00000625, 0x00000627, 0x00050041, 0x000001E1, 0x00000629, 0x000002CD, 0x0000025A, 0x0004003D, +0x00000006, 0x0000062A, 0x00000629, 0x0003003E, 0x00000628, 0x0000062A, 0x00050041, 0x0000031C, +0x0000062C, 0x000002CD, 0x00000210, 0x0004003D, 0x000002C7, 0x0000062D, 0x0000062C, 0x0004003D, +0x0000000C, 0x0000062E, 0x000005E1, 0x00050051, 0x00000006, 0x0000062F, 0x0000062E, 0x00000000, +0x00050051, 0x00000006, 0x00000630, 0x0000062E, 0x00000001, 0x00050051, 0x00000006, 0x00000631, +0x0000062E, 0x00000002, 0x00070050, 0x00000012, 0x00000632, 0x0000062F, 0x00000630, 0x00000631, +0x000000D5, 0x00050091, 0x00000012, 0x00000633, 0x0000062D, 0x00000632, 0x0003003E, 0x0000062B, +0x00000633, 0x0004003D, 0x00000012, 0x00000635, 0x0000062B, 0x0006000C, 0x00000006, 0x00000636, +0x00000001, 0x00000042, 0x00000635, 0x0003003E, 0x00000634, 0x00000636, 0x0004003D, 0x00000006, +0x00000637, 0x00000634, 0x0004003D, 0x00000006, 0x00000638, 0x00000625, 0x0004003D, 0x00000006, +0x00000639, 0x00000628, 0x00050083, 0x00000006, 0x0000063A, 0x00000638, 0x00000639, 0x00050083, +0x00000006, 0x0000063B, 0x00000637, 0x0000063A, 0x0003003E, 0x000000D4, 0x0000063B, 0x0004003D, +0x00000006, 0x0000063C, 0x00000628, 0x0004003D, 0x00000006, 0x0000063D, 0x000000D4, 0x00050088, +0x00000006, 0x0000063E, 0x0000063D, 0x0000063C, 0x0003003E, 0x000000D4, 0x0000063E, 0x0004003D, +0x00000006, 0x0000063F, 0x000000D4, 0x00050083, 0x00000006, 0x00000640, 0x000000D5, 0x0000063F, +0x0008000C, 0x00000006, 0x00000641, 0x00000001, 0x0000002B, 0x00000640, 0x000000F8, 0x000000D5, +0x0003003E, 0x000000D4, 0x00000641, 0x00050041, 0x00000007, 0x00000643, 0x00000589, 0x0000025A, +0x0004003D, 0x00000006, 0x00000644, 0x00000643, 0x00050085, 0x00000006, 0x00000645, 0x00000130, +0x00000644, 0x00050041, 0x0000000D, 0x00000646, 0x00000589, 0x0000020A, 0x0004003D, 0x0000000C, +0x00000647, 0x00000646, 0x0005008E, 0x0000000C, 0x00000648, 0x00000647, 0x00000645, 0x00050041, +0x0000000D, 0x00000649, 0x00000589, 0x00000278, 0x0004003D, 0x0000000C, 0x0000064A, 0x00000649, +0x00050083, 0x0000000C, 0x0000064B, 0x00000648, 0x0000064A, 0x0003003E, 0x00000642, 0x0000064B, +0x00050041, 0x0000000D, 0x0000064E, 0x00000589, 0x00000244, 0x0004003D, 0x0000000C, 0x0000064F, +0x0000064E, 0x0003003E, 0x0000064D, 0x0000064F, 0x0004003D, 0x0000000C, 0x00000651, 0x000005E1, +0x0003003E, 0x00000650, 0x00000651, 0x0004003D, 0x000000AB, 0x00000653, 0x00000589, 0x0003003E, +0x00000652, 0x00000653, 0x00070039, 0x0000000C, 0x00000654, 0x000000CC, 0x0000064D, 0x00000650, +0x00000652, 0x0003003E, 0x0000064C, 0x00000654, 0x00050041, 0x0000000D, 0x00000657, 0x00000589, +0x00000244, 0x0004003D, 0x0000000C, 0x00000658, 0x00000657, 0x0003003E, 0x00000656, 0x00000658, +0x0004003D, 0x0000000C, 0x0000065A, 0x00000642, 0x0003003E, 0x00000659, 0x0000065A, 0x0004003D, +0x000000AB, 0x0000065C, 0x00000589, 0x0003003E, 0x0000065B, 0x0000065C, 0x00070039, 0x0000000C, +0x0000065D, 0x000000D1, 0x00000656, 0x00000659, 0x0000065B, 0x0003003E, 0x00000655, 0x0000065D, +0x0004003D, 0x0000000C, 0x0000065F, 0x0000064C, 0x0004003D, 0x0000000C, 0x00000660, 0x00000655, +0x00050081, 0x0000000C, 0x00000661, 0x0000065F, 0x00000660, 0x00050041, 0x0000000D, 0x00000662, +0x00000589, 0x000001E0, 0x0004003D, 0x0000000C, 0x00000663, 0x00000662, 0x00050081, 0x0000000C, +0x00000664, 0x00000661, 0x00000663, 0x0003003E, 0x0000065E, 0x00000664, 0x0004003D, 0x0000000C, +0x00000667, 0x0000065E, 0x00050051, 0x00000006, 0x00000668, 0x00000667, 0x00000000, 0x00050051, +0x00000006, 0x00000669, 0x00000667, 0x00000001, 0x00050051, 0x00000006, 0x0000066A, 0x00000667, +0x00000002, 0x00070050, 0x00000012, 0x0000066B, 0x00000668, 0x00000669, 0x0000066A, 0x000000D5, +0x0003003E, 0x00000666, 0x0000066B, 0x00050041, 0x0000032D, 0x0000066D, 0x000002CD, 0x0000066C, +0x0004003D, 0x00000085, 0x0000066E, 0x0000066D, 0x000500AD, 0x000001E5, 0x0000066F, 0x0000066E, +0x000001E9, 0x000300F7, 0x00000671, 0x00000000, 0x000400FA, 0x0000066F, 0x00000670, 0x00000671, +0x000200F8, 0x00000670, 0x00050041, 0x0000032D, 0x00000672, 0x000002CD, 0x0000066C, 0x0004003D, +0x00000085, 0x00000673, 0x00000672, 0x000300F7, 0x0000067B, 0x00000000, 0x001100FB, 0x00000673, +0x0000067B, 0x00000001, 0x00000674, 0x00000002, 0x00000675, 0x00000003, 0x00000676, 0x00000004, +0x00000677, 0x00000005, 0x00000678, 0x00000006, 0x00000679, 0x00000007, 0x0000067A, 0x000200F8, +0x00000674, 0x00050041, 0x00000013, 0x0000067C, 0x00000589, 0x000001E9, 0x0004003D, 0x00000012, +0x0000067D, 0x0000067C, 0x0003003E, 0x00000666, 0x0000067D, 0x000200F9, 0x0000067B, 0x000200F8, +0x00000675, 0x00050041, 0x00000007, 0x0000067F, 0x00000589, 0x000001FF, 0x0004003D, 0x00000006, +0x00000680, 0x0000067F, 0x00060050, 0x0000000C, 0x00000681, 0x00000680, 0x00000680, 0x00000680, +0x00050051, 0x00000006, 0x00000682, 0x00000681, 0x00000000, 0x00050051, 0x00000006, 0x00000683, +0x00000681, 0x00000001, 0x00050051, 0x00000006, 0x00000684, 0x00000681, 0x00000002, 0x00070050, +0x00000012, 0x00000685, 0x00000682, 0x00000683, 0x00000684, 0x000000D5, 0x0003003E, 0x00000666, +0x00000685, 0x000200F9, 0x0000067B, 0x000200F8, 0x00000676, 0x00050041, 0x00000007, 0x00000687, +0x00000589, 0x0000027E, 0x0004003D, 0x00000006, 0x00000688, 0x00000687, 0x00060050, 0x0000000C, +0x00000689, 0x00000688, 0x00000688, 0x00000688, 0x00050051, 0x00000006, 0x0000068A, 0x00000689, +0x00000000, 0x00050051, 0x00000006, 0x0000068B, 0x00000689, 0x00000001, 0x00050051, 0x00000006, +0x0000068C, 0x00000689, 0x00000002, 0x00070050, 0x00000012, 0x0000068D, 0x0000068A, 0x0000068B, +0x0000068C, 0x000000D5, 0x0003003E, 0x00000666, 0x0000068D, 0x000200F9, 0x0000067B, 0x000200F8, +0x00000677, 0x00050041, 0x00000007, 0x0000068F, 0x00000589, 0x00000228, 0x0004003D, 0x00000006, +0x00000690, 0x0000068F, 0x00060050, 0x0000000C, 0x00000691, 0x00000690, 0x00000690, 0x00000690, +0x00050051, 0x00000006, 0x00000692, 0x00000691, 0x00000000, 0x00050051, 0x00000006, 0x00000693, +0x00000691, 0x00000001, 0x00050051, 0x00000006, 0x00000694, 0x00000691, 0x00000002, 0x00070050, +0x00000012, 0x00000695, 0x00000692, 0x00000693, 0x00000694, 0x000000D5, 0x0003003E, 0x00000666, +0x00000695, 0x000200F9, 0x0000067B, 0x000200F8, 0x00000678, 0x00050041, 0x0000000D, 0x00000697, +0x00000589, 0x000001E0, 0x0004003D, 0x0000000C, 0x00000698, 0x00000697, 0x00050051, 0x00000006, +0x00000699, 0x00000698, 0x00000000, 0x00050051, 0x00000006, 0x0000069A, 0x00000698, 0x00000001, +0x00050051, 0x00000006, 0x0000069B, 0x00000698, 0x00000002, 0x00070050, 0x00000012, 0x0000069C, +0x00000699, 0x0000069A, 0x0000069B, 0x000000D5, 0x0003003E, 0x00000666, 0x0000069C, 0x000200F9, +0x0000067B, 0x000200F8, 0x00000679, 0x00050041, 0x0000000D, 0x0000069E, 0x00000589, 0x0000020A, +0x0004003D, 0x0000000C, 0x0000069F, 0x0000069E, 0x00050051, 0x00000006, 0x000006A0, 0x0000069F, +0x00000000, 0x00050051, 0x00000006, 0x000006A1, 0x0000069F, 0x00000001, 0x00050051, 0x00000006, +0x000006A2, 0x0000069F, 0x00000002, 0x00070050, 0x00000012, 0x000006A3, 0x000006A0, 0x000006A1, +0x000006A2, 0x000000D5, 0x0003003E, 0x00000666, 0x000006A3, 0x000200F9, 0x0000067B, 0x000200F8, +0x0000067A, 0x0004003D, 0x0000000C, 0x000006A7, 0x000005E1, 0x0003003E, 0x000006A6, 0x000006A7, +0x00050039, 0x00000085, 0x000006A8, 0x000000A2, 0x000006A6, 0x0003003E, 0x000006A5, 0x000006A8, +0x0004003D, 0x00000085, 0x000006A9, 0x000006A5, 0x000300F7, 0x000006AE, 0x00000000, 0x000B00FB, +0x000006A9, 0x000006AE, 0x00000000, 0x000006AA, 0x00000001, 0x000006AB, 0x00000002, 0x000006AC, +0x00000003, 0x000006AD, 0x000200F8, 0x000006AA, 0x0004003D, 0x00000012, 0x000006AF, 0x00000666, +0x00050085, 0x00000012, 0x000006B3, 0x000006AF, 0x000006B2, 0x0003003E, 0x00000666, 0x000006B3, +0x000200F9, 0x000006AE, 0x000200F8, 0x000006AB, 0x0004003D, 0x00000012, 0x000006B5, 0x00000666, +0x00050085, 0x00000012, 0x000006B7, 0x000006B5, 0x000006B6, 0x0003003E, 0x00000666, 0x000006B7, +0x000200F9, 0x000006AE, 0x000200F8, 0x000006AC, 0x0004003D, 0x00000012, 0x000006B9, 0x00000666, +0x00050085, 0x00000012, 0x000006BB, 0x000006B9, 0x000006BA, 0x0003003E, 0x00000666, 0x000006BB, +0x000200F9, 0x000006AE, 0x000200F8, 0x000006AD, 0x0004003D, 0x00000012, 0x000006BD, 0x00000666, +0x00050085, 0x00000012, 0x000006BF, 0x000006BD, 0x000006BE, 0x0003003E, 0x00000666, 0x000006BF, +0x000200F9, 0x000006AE, 0x000200F8, 0x000006AE, 0x000200F9, 0x0000067B, 0x000200F8, 0x0000067B, +0x000200F9, 0x00000671, 0x000200F8, 0x00000671, 0x000100FD, 0x00010038, 0x00050036, 0x00000006, +0x0000000A, 0x00000000, 0x00000008, 0x00030037, 0x00000007, 0x00000009, 0x000200F8, 0x0000000B, +0x0004003B, 0x00000007, 0x000000D8, 0x00000007, 0x0004003D, 0x00000006, 0x000000D9, 0x00000009, +0x0004003D, 0x00000006, 0x000000DA, 0x00000009, 0x00050085, 0x00000006, 0x000000DB, 0x000000D9, +0x000000DA, 0x0003003E, 0x000000D8, 0x000000DB, 0x0004003D, 0x00000006, 0x000000DC, 0x000000D8, +0x0004003D, 0x00000006, 0x000000DD, 0x000000D8, 0x00050085, 0x00000006, 0x000000DE, 0x000000DC, +0x000000DD, 0x0004003D, 0x00000006, 0x000000DF, 0x00000009, 0x00050085, 0x00000006, 0x000000E0, +0x000000DE, 0x000000DF, 0x000200FE, 0x000000E0, 0x00010038, 0x00050036, 0x0000000C, 0x00000010, +0x00000000, 0x0000000E, 0x00030037, 0x0000000D, 0x0000000F, 0x000200F8, 0x00000011, 0x0004003D, +0x0000000C, 0x000000E3, 0x0000000F, 0x0007000C, 0x0000000C, 0x000000E6, 0x00000001, 0x0000001A, +0x000000E3, 0x000000E5, 0x000200FE, 0x000000E6, 0x00010038, 0x00050036, 0x00000012, 0x00000016, +0x00000000, 0x00000014, 0x00030037, 0x00000013, 0x00000015, 0x000200F8, 0x00000017, 0x0004003B, +0x0000000D, 0x000000E9, 0x00000007, 0x0004003D, 0x00000012, 0x000000EA, 0x00000015, 0x0008004F, +0x0000000C, 0x000000EB, 0x000000EA, 0x000000EA, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, +0x000000E9, 0x000000EB, 0x00050039, 0x0000000C, 0x000000EC, 0x00000010, 0x000000E9, 0x00050041, +0x00000007, 0x000000EF, 0x00000015, 0x000000EE, 0x0004003D, 0x00000006, 0x000000F0, 0x000000EF, +0x00050051, 0x00000006, 0x000000F1, 0x000000EC, 0x00000000, 0x00050051, 0x00000006, 0x000000F2, +0x000000EC, 0x00000001, 0x00050051, 0x00000006, 0x000000F3, 0x000000EC, 0x00000002, 0x00070050, +0x00000012, 0x000000F4, 0x000000F1, 0x000000F2, 0x000000F3, 0x000000F0, 0x000200FE, 0x000000F4, +0x00010038, 0x00050036, 0x00000006, 0x00000019, 0x00000000, 0x00000008, 0x00030037, 0x00000007, +0x00000018, 0x000200F8, 0x0000001A, 0x0004003D, 0x00000006, 0x000000F7, 0x00000018, 0x0008000C, +0x00000006, 0x000000F9, 0x00000001, 0x0000002B, 0x000000F7, 0x000000F8, 0x000000D5, 0x000200FE, +0x000000F9, 0x00010038, 0x00050036, 0x00000006, 0x00000020, 0x00000000, 0x0000001B, 0x00030037, +0x00000007, 0x0000001C, 0x00030037, 0x00000007, 0x0000001D, 0x00030037, 0x0000000C, 0x0000001E, +0x00030037, 0x0000000C, 0x0000001F, 0x000200F8, 0x00000021, 0x0004003B, 0x0000000D, 0x000000FC, +0x00000007, 0x0004003B, 0x00000007, 0x000000FE, 0x00000007, 0x0004003B, 0x00000007, 0x00000102, +0x00000007, 0x0004003B, 0x00000007, 0x0000010C, 0x00000007, 0x0007000C, 0x0000000C, 0x000000FD, +0x00000001, 0x00000044, 0x0000001E, 0x0000001F, 0x0003003E, 0x000000FC, 0x000000FD, 0x0004003D, +0x00000006, 0x000000FF, 0x0000001D, 0x0004003D, 0x00000006, 0x00000100, 0x0000001C, 0x00050085, +0x00000006, 0x00000101, 0x000000FF, 0x00000100, 0x0003003E, 0x000000FE, 0x00000101, 0x0004003D, +0x00000006, 0x00000103, 0x0000001C, 0x0004003D, 0x0000000C, 0x00000104, 0x000000FC, 0x0004003D, +0x0000000C, 0x00000105, 0x000000FC, 0x00050094, 0x00000006, 0x00000106, 0x00000104, 0x00000105, +0x0004003D, 0x00000006, 0x00000107, 0x000000FE, 0x0004003D, 0x00000006, 0x00000108, 0x000000FE, +0x00050085, 0x00000006, 0x00000109, 0x00000107, 0x00000108, 0x00050081, 0x00000006, 0x0000010A, +0x00000106, 0x00000109, 0x00050088, 0x00000006, 0x0000010B, 0x00000103, 0x0000010A, 0x0003003E, +0x00000102, 0x0000010B, 0x0004003D, 0x00000006, 0x0000010D, 0x00000102, 0x0004003D, 0x00000006, +0x0000010E, 0x00000102, 0x00050085, 0x00000006, 0x0000010F, 0x0000010D, 0x0000010E, 0x00050085, +0x00000006, 0x00000111, 0x0000010F, 0x00000110, 0x0003003E, 0x0000010C, 0x00000111, 0x0004003D, +0x00000006, 0x00000112, 0x0000010C, 0x0007000C, 0x00000006, 0x00000114, 0x00000001, 0x00000025, +0x00000112, 0x00000113, 0x000200FE, 0x00000114, 0x00010038, 0x00050036, 0x0000000C, 0x00000026, +0x00000000, 0x00000022, 0x00030037, 0x0000000C, 0x00000023, 0x00030037, 0x00000007, 0x00000024, +0x00030037, 0x00000007, 0x00000025, 0x000200F8, 0x00000027, 0x0004003B, 0x00000007, 0x0000011C, +0x00000007, 0x0004003D, 0x00000006, 0x00000117, 0x00000024, 0x00060050, 0x0000000C, 0x00000118, +0x00000117, 0x00000117, 0x00000117, 0x00050083, 0x0000000C, 0x00000119, 0x00000118, 0x00000023, +0x0004003D, 0x00000006, 0x0000011A, 0x00000025, 0x00050083, 0x00000006, 0x0000011B, 0x000000D5, +0x0000011A, 0x0003003E, 0x0000011C, 0x0000011B, 0x00050039, 0x00000006, 0x0000011D, 0x0000000A, +0x0000011C, 0x0005008E, 0x0000000C, 0x0000011E, 0x00000119, 0x0000011D, 0x00050081, 0x0000000C, +0x0000011F, 0x00000023, 0x0000011E, 0x000200FE, 0x0000011F, 0x00010038, 0x00050036, 0x00000006, +0x0000002C, 0x00000000, 0x00000028, 0x00030037, 0x00000007, 0x00000029, 0x00030037, 0x00000007, +0x0000002A, 0x00030037, 0x00000007, 0x0000002B, 0x000200F8, 0x0000002D, 0x0004003D, 0x00000006, +0x00000122, 0x0000002A, 0x0004003D, 0x00000006, 0x00000123, 0x0000002B, 0x0004003D, 0x00000006, +0x00000124, 0x0000002A, 0x00050083, 0x00000006, 0x00000125, 0x00000123, 0x00000124, 0x0004003D, +0x00000006, 0x00000126, 0x00000029, 0x00050083, 0x00000006, 0x00000127, 0x000000D5, 0x00000126, +0x0007000C, 0x00000006, 0x00000129, 0x00000001, 0x0000001A, 0x00000127, 0x00000128, 0x00050085, +0x00000006, 0x0000012A, 0x00000125, 0x00000129, 0x00050081, 0x00000006, 0x0000012B, 0x00000122, +0x0000012A, 0x000200FE, 0x0000012B, 0x00010038, 0x00050036, 0x00000006, 0x00000033, 0x00000000, +0x0000002E, 0x00030037, 0x00000007, 0x0000002F, 0x00030037, 0x00000007, 0x00000030, 0x00030037, +0x00000007, 0x00000031, 0x00030037, 0x00000007, 0x00000032, 0x000200F8, 0x00000034, 0x0004003B, +0x00000007, 0x0000012E, 0x00000007, 0x0004003B, 0x00000007, 0x00000138, 0x00000007, 0x0004003B, +0x00000007, 0x00000139, 0x00000007, 0x0004003B, 0x00000007, 0x0000013A, 0x00000007, 0x0004003B, +0x00000007, 0x0000013C, 0x00000007, 0x0004003B, 0x00000007, 0x0000013F, 0x00000007, 0x0004003B, +0x00000007, 0x00000140, 0x00000007, 0x0004003B, 0x00000007, 0x00000141, 0x00000007, 0x0004003B, +0x00000007, 0x00000143, 0x00000007, 0x0004003D, 0x00000006, 0x00000131, 0x0000002F, 0x00050085, +0x00000006, 0x00000132, 0x00000130, 0x00000131, 0x0004003D, 0x00000006, 0x00000133, 0x00000032, +0x00050085, 0x00000006, 0x00000134, 0x00000132, 0x00000133, 0x0004003D, 0x00000006, 0x00000135, +0x00000032, 0x00050085, 0x00000006, 0x00000136, 0x00000134, 0x00000135, 0x00050081, 0x00000006, +0x00000137, 0x0000012F, 0x00000136, 0x0003003E, 0x0000012E, 0x00000137, 0x0003003E, 0x00000139, +0x000000D5, 0x0004003D, 0x00000006, 0x0000013B, 0x0000012E, 0x0003003E, 0x0000013A, 0x0000013B, +0x0004003D, 0x00000006, 0x0000013D, 0x00000031, 0x0003003E, 0x0000013C, 0x0000013D, 0x00070039, +0x00000006, 0x0000013E, 0x0000002C, 0x00000139, 0x0000013A, 0x0000013C, 0x0003003E, 0x00000138, +0x0000013E, 0x0003003E, 0x00000140, 0x000000D5, 0x0004003D, 0x00000006, 0x00000142, 0x0000012E, +0x0003003E, 0x00000141, 0x00000142, 0x0004003D, 0x00000006, 0x00000144, 0x00000030, 0x0003003E, +0x00000143, 0x00000144, 0x00070039, 0x00000006, 0x00000145, 0x0000002C, 0x00000140, 0x00000141, +0x00000143, 0x0003003E, 0x0000013F, 0x00000145, 0x0004003D, 0x00000006, 0x00000146, 0x00000138, +0x0004003D, 0x00000006, 0x00000147, 0x0000013F, 0x00050085, 0x00000006, 0x00000148, 0x00000146, +0x00000147, 0x00050085, 0x00000006, 0x00000149, 0x00000148, 0x00000110, 0x000200FE, 0x00000149, +0x00010038, 0x00050036, 0x00000006, 0x00000038, 0x00000000, 0x00000028, 0x00030037, 0x00000007, +0x00000035, 0x00030037, 0x00000007, 0x00000036, 0x00030037, 0x00000007, 0x00000037, 0x000200F8, +0x00000039, 0x0004003B, 0x00000007, 0x0000014C, 0x00000007, 0x0004003B, 0x00000007, 0x00000150, +0x00000007, 0x0004003B, 0x00000007, 0x0000015E, 0x00000007, 0x0004003D, 0x00000006, 0x0000014D, +0x00000037, 0x0004003D, 0x00000006, 0x0000014E, 0x00000037, 0x00050085, 0x00000006, 0x0000014F, +0x0000014D, 0x0000014E, 0x0003003E, 0x0000014C, 0x0000014F, 0x0004003D, 0x00000006, 0x00000151, +0x00000035, 0x0004003D, 0x00000006, 0x00000152, 0x00000036, 0x0004007F, 0x00000006, 0x00000153, +0x00000152, 0x0004003D, 0x00000006, 0x00000154, 0x0000014C, 0x00050085, 0x00000006, 0x00000155, +0x00000153, 0x00000154, 0x0004003D, 0x00000006, 0x00000156, 0x00000036, 0x00050081, 0x00000006, +0x00000157, 0x00000155, 0x00000156, 0x0004003D, 0x00000006, 0x00000158, 0x00000036, 0x00050085, +0x00000006, 0x00000159, 0x00000157, 0x00000158, 0x0004003D, 0x00000006, 0x0000015A, 0x0000014C, +0x00050081, 0x00000006, 0x0000015B, 0x00000159, 0x0000015A, 0x0006000C, 0x00000006, 0x0000015C, +0x00000001, 0x0000001F, 0x0000015B, 0x00050085, 0x00000006, 0x0000015D, 0x00000151, 0x0000015C, +0x0003003E, 0x00000150, 0x0000015D, 0x0004003D, 0x00000006, 0x0000015F, 0x00000036, 0x0004003D, +0x00000006, 0x00000160, 0x00000035, 0x0004007F, 0x00000006, 0x00000161, 0x00000160, 0x0004003D, +0x00000006, 0x00000162, 0x0000014C, 0x00050085, 0x00000006, 0x00000163, 0x00000161, 0x00000162, +0x0004003D, 0x00000006, 0x00000164, 0x00000035, 0x00050081, 0x00000006, 0x00000165, 0x00000163, +0x00000164, 0x0004003D, 0x00000006, 0x00000166, 0x00000035, 0x00050085, 0x00000006, 0x00000167, +0x00000165, 0x00000166, 0x0004003D, 0x00000006, 0x00000168, 0x0000014C, 0x00050081, 0x00000006, +0x00000169, 0x00000167, 0x00000168, 0x0006000C, 0x00000006, 0x0000016A, 0x00000001, 0x0000001F, +0x00000169, 0x00050085, 0x00000006, 0x0000016B, 0x0000015F, 0x0000016A, 0x0003003E, 0x0000015E, +0x0000016B, 0x0004003D, 0x00000006, 0x0000016C, 0x0000015E, 0x0004003D, 0x00000006, 0x0000016D, +0x00000150, 0x00050081, 0x00000006, 0x0000016E, 0x0000016C, 0x0000016D, 0x00050088, 0x00000006, +0x0000016F, 0x0000012F, 0x0000016E, 0x000200FE, 0x0000016F, 0x00010038, 0x00050036, 0x00000006, +0x0000003D, 0x00000000, 0x0000003A, 0x00030037, 0x00000007, 0x0000003B, 0x00030037, 0x00000007, +0x0000003C, 0x000200F8, 0x0000003E, 0x0004003B, 0x00000007, 0x00000172, 0x00000007, 0x0004003B, +0x00000007, 0x00000178, 0x00000007, 0x0004003B, 0x00000007, 0x0000017C, 0x00000007, 0x0004003D, +0x00000006, 0x00000173, 0x0000003C, 0x0007000C, 0x00000006, 0x00000175, 0x00000001, 0x00000025, +0x00000173, 0x00000174, 0x00050083, 0x00000006, 0x00000176, 0x000000D5, 0x00000175, 0x0006000C, +0x00000006, 0x00000177, 0x00000001, 0x00000020, 0x00000176, 0x0003003E, 0x00000172, 0x00000177, +0x0004003D, 0x00000006, 0x00000179, 0x0000003B, 0x0004003D, 0x00000006, 0x0000017A, 0x00000172, +0x00050085, 0x00000006, 0x0000017B, 0x00000179, 0x0000017A, 0x0003003E, 0x0000017C, 0x0000017B, +0x00050039, 0x00000006, 0x0000017D, 0x00000019, 0x0000017C, 0x0003003E, 0x00000178, 0x0000017D, +0x0004003D, 0x00000006, 0x0000017E, 0x00000178, 0x0004003D, 0x00000006, 0x0000017F, 0x00000178, +0x00050085, 0x00000006, 0x00000180, 0x0000017E, 0x0000017F, 0x000200FE, 0x00000180, 0x00010038, +0x00050036, 0x00000006, 0x00000043, 0x00000000, 0x0000002E, 0x00030037, 0x00000007, 0x0000003F, +0x00030037, 0x00000007, 0x00000040, 0x00030037, 0x00000007, 0x00000041, 0x00030037, 0x00000007, +0x00000042, 0x000200F8, 0x00000044, 0x0004003B, 0x00000007, 0x00000183, 0x00000007, 0x0004003B, +0x00000007, 0x00000185, 0x00000007, 0x0004003B, 0x00000007, 0x00000187, 0x00000007, 0x0004003B, +0x00000007, 0x00000189, 0x00000007, 0x0004003D, 0x00000006, 0x00000184, 0x0000003F, 0x0003003E, +0x00000183, 0x00000184, 0x0004003D, 0x00000006, 0x00000186, 0x00000040, 0x0003003E, 0x00000185, +0x00000186, 0x0004003D, 0x00000006, 0x00000188, 0x00000041, 0x0003003E, 0x00000187, 0x00000188, +0x0004003D, 0x00000006, 0x0000018A, 0x00000042, 0x0003003E, 0x00000189, 0x0000018A, 0x00080039, +0x00000006, 0x0000018B, 0x00000033, 0x00000183, 0x00000185, 0x00000187, 0x00000189, 0x000200FE, +0x0000018B, 0x00010038, 0x00050036, 0x00000006, 0x00000046, 0x00000000, 0x00000008, 0x00030037, +0x00000007, 0x00000045, 0x000200F8, 0x00000047, 0x0004003D, 0x00000006, 0x0000018E, 0x00000045, +0x0007000C, 0x00000006, 0x00000190, 0x00000001, 0x00000028, 0x0000018E, 0x0000018F, 0x000200FE, +0x00000190, 0x00010038, 0x00050036, 0x0000000C, 0x0000004B, 0x00000000, 0x00000048, 0x00030037, +0x00000012, 0x00000049, 0x00030037, 0x00000007, 0x0000004A, 0x000200F8, 0x0000004C, 0x0008004F, +0x0000000C, 0x00000193, 0x00000049, 0x00000049, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, +0x00000006, 0x00000194, 0x0000004A, 0x00050083, 0x00000006, 0x00000195, 0x000000D5, 0x00000194, +0x0005008E, 0x0000000C, 0x00000196, 0x00000193, 0x00000195, 0x000200FE, 0x00000196, 0x00010038, +0x00050036, 0x0000000C, 0x00000051, 0x00000000, 0x0000004D, 0x00030037, 0x00000012, 0x0000004E, +0x00030037, 0x00000007, 0x0000004F, 0x00030037, 0x00000007, 0x00000050, 0x000200F8, 0x00000052, +0x0008004F, 0x0000000C, 0x00000199, 0x0000004E, 0x0000004E, 0x00000000, 0x00000001, 0x00000002, +0x0004003D, 0x00000006, 0x0000019A, 0x0000004F, 0x0005008E, 0x0000000C, 0x0000019B, 0x00000199, +0x0000019A, 0x0004003D, 0x00000006, 0x0000019C, 0x00000050, 0x0004003D, 0x00000006, 0x0000019D, +0x0000004F, 0x00050083, 0x00000006, 0x0000019E, 0x000000D5, 0x0000019D, 0x00050085, 0x00000006, +0x0000019F, 0x0000019C, 0x0000019E, 0x00060050, 0x0000000C, 0x000001A0, 0x0000019F, 0x0000019F, +0x0000019F, 0x00050081, 0x0000000C, 0x000001A1, 0x0000019B, 0x000001A0, 0x000200FE, 0x000001A1, +0x00010038, 0x00050036, 0x00000006, 0x00000054, 0x00000000, 0x00000008, 0x00030037, 0x00000007, +0x00000053, 0x000200F8, 0x00000055, 0x0004003D, 0x00000006, 0x000001A5, 0x00000053, 0x00050085, +0x00000006, 0x000001A6, 0x000001A4, 0x000001A5, 0x0004003D, 0x00000006, 0x000001A7, 0x00000053, +0x00050085, 0x00000006, 0x000001A8, 0x000001A6, 0x000001A7, 0x000200FE, 0x000001A8, 0x00010038, +0x00050036, 0x00000006, 0x00000057, 0x00000000, 0x00000008, 0x00030037, 0x00000007, 0x00000056, +0x000200F8, 0x00000058, 0x0004003D, 0x00000006, 0x000001AB, 0x00000056, 0x0004003D, 0x00000006, +0x000001AC, 0x00000056, 0x00050085, 0x00000006, 0x000001AD, 0x000001AB, 0x000001AC, 0x000200FE, +0x000001AD, 0x00010038, 0x00050036, 0x00000006, 0x0000005D, 0x00000000, 0x0000001B, 0x00030037, +0x00000007, 0x00000059, 0x00030037, 0x00000007, 0x0000005A, 0x00030037, 0x0000000C, 0x0000005B, +0x00030037, 0x0000000C, 0x0000005C, 0x000200F8, 0x0000005E, 0x0004003B, 0x00000007, 0x000001B0, +0x00000007, 0x0004003B, 0x00000007, 0x000001B2, 0x00000007, 0x0004003D, 0x00000006, 0x000001B1, +0x00000059, 0x0003003E, 0x000001B0, 0x000001B1, 0x0004003D, 0x00000006, 0x000001B3, 0x0000005A, +0x0003003E, 0x000001B2, 0x000001B3, 0x00080039, 0x00000006, 0x000001B4, 0x00000020, 0x000001B0, +0x000001B2, 0x0000005C, 0x0000005B, 0x000200FE, 0x000001B4, 0x00010038, 0x00050036, 0x00000006, +0x00000062, 0x00000000, 0x00000028, 0x00030037, 0x00000007, 0x0000005F, 0x00030037, 0x00000007, +0x00000060, 0x00030037, 0x00000007, 0x00000061, 0x000200F8, 0x00000063, 0x0004003B, 0x00000007, +0x000001B7, 0x00000007, 0x0004003B, 0x00000007, 0x000001B9, 0x00000007, 0x0004003B, 0x00000007, +0x000001BB, 0x00000007, 0x0004003D, 0x00000006, 0x000001B8, 0x0000005F, 0x0003003E, 0x000001B7, +0x000001B8, 0x0004003D, 0x00000006, 0x000001BA, 0x00000060, 0x0003003E, 0x000001B9, 0x000001BA, +0x0004003D, 0x00000006, 0x000001BC, 0x00000061, 0x0003003E, 0x000001BB, 0x000001BC, 0x00070039, +0x00000006, 0x000001BD, 0x00000038, 0x000001B7, 0x000001B9, 0x000001BB, 0x000200FE, 0x000001BD, +0x00010038, 0x00050036, 0x0000000C, 0x00000067, 0x00000000, 0x00000064, 0x00030037, 0x0000000C, +0x00000065, 0x00030037, 0x00000007, 0x00000066, 0x000200F8, 0x00000068, 0x0004003B, 0x00000007, +0x000001C0, 0x00000007, 0x0004003B, 0x00000007, 0x000001C4, 0x00000007, 0x0004003B, 0x00000007, +0x000001C6, 0x00000007, 0x0004003B, 0x00000007, 0x000001C8, 0x00000007, 0x00050094, 0x00000006, +0x000001C3, 0x00000065, 0x000001C2, 0x0003003E, 0x000001C4, 0x000001C3, 0x00050039, 0x00000006, +0x000001C5, 0x00000019, 0x000001C4, 0x0003003E, 0x000001C0, 0x000001C5, 0x0004003D, 0x00000006, +0x000001C7, 0x000001C0, 0x0003003E, 0x000001C6, 0x000001C7, 0x0004003D, 0x00000006, 0x000001C9, +0x00000066, 0x0003003E, 0x000001C8, 0x000001C9, 0x00070039, 0x0000000C, 0x000001CA, 0x00000026, +0x00000065, 0x000001C6, 0x000001C8, 0x000200FE, 0x000001CA, 0x00010038, 0x00050036, 0x0000000C, +0x0000006D, 0x00000000, 0x00000069, 0x00030037, 0x0000000D, 0x0000006A, 0x00030037, 0x00000007, +0x0000006B, 0x00030037, 0x00000007, 0x0000006C, 0x000200F8, 0x0000006E, 0x0004003D, 0x0000000C, +0x000001CD, 0x0000006A, 0x0004003D, 0x00000006, 0x000001CE, 0x0000006C, 0x00050083, 0x00000006, +0x000001CF, 0x000000D5, 0x000001CE, 0x00060050, 0x0000000C, 0x000001D0, 0x000001CF, 0x000001CF, +0x000001CF, 0x0004003D, 0x0000000C, 0x000001D1, 0x0000006A, 0x0007000C, 0x0000000C, 0x000001D2, +0x00000001, 0x00000028, 0x000001D0, 0x000001D1, 0x0004003D, 0x0000000C, 0x000001D3, 0x0000006A, +0x00050083, 0x0000000C, 0x000001D4, 0x000001D2, 0x000001D3, 0x0004003D, 0x00000006, 0x000001D5, +0x0000006B, 0x00050083, 0x00000006, 0x000001D6, 0x000000D5, 0x000001D5, 0x0007000C, 0x00000006, +0x000001D7, 0x00000001, 0x00000028, 0x000001D6, 0x000000F8, 0x0007000C, 0x00000006, 0x000001D8, +0x00000001, 0x0000001A, 0x000001D7, 0x00000128, 0x0005008E, 0x0000000C, 0x000001D9, 0x000001D4, +0x000001D8, 0x00050081, 0x0000000C, 0x000001DA, 0x000001CD, 0x000001D9, 0x000200FE, 0x000001DA, +0x00010038, 0x00050036, 0x00000012, 0x00000070, 0x00000000, 0x0000006F, 0x000200F8, 0x00000071, +0x0004003B, 0x00000013, 0x00000204, 0x00000007, 0x00050041, 0x000001E1, 0x000001E2, 0x000001DF, +0x000001E0, 0x0004003D, 0x00000006, 0x000001E3, 0x000001E2, 0x000500B8, 0x000001E5, 0x000001E6, +0x000001E3, 0x000001E4, 0x000300F7, 0x000001E8, 0x00000000, 0x000400FA, 0x000001E6, 0x000001E7, +0x000001E8, 0x000200F8, 0x000001E7, 0x00050041, 0x000001EA, 0x000001EB, 0x000001DF, 0x000001E9, +0x0004003D, 0x00000012, 0x000001EC, 0x000001EB, 0x000200FE, 0x000001EC, 0x000200F8, 0x000001E8, +0x00050041, 0x000001E1, 0x000001EE, 0x000001DF, 0x000001E0, 0x0004003D, 0x00000006, 0x000001EF, +0x000001EE, 0x00050083, 0x00000006, 0x000001F0, 0x000000D5, 0x000001EF, 0x00050041, 0x000001EA, +0x000001F1, 0x000001DF, 0x000001E9, 0x0004003D, 0x00000012, 0x000001F2, 0x000001F1, 0x0005008E, +0x00000012, 0x000001F3, 0x000001F2, 0x000001F0, 0x00050041, 0x000001E1, 0x000001F4, 0x000001DF, +0x000001E0, 0x0004003D, 0x00000006, 0x000001F5, 0x000001F4, 0x0004003D, 0x000001F7, 0x000001FA, +0x000001F9, 0x00050041, 0x00000200, 0x00000201, 0x000001FE, 0x000001FF, 0x0004003D, 0x0000007F, +0x00000202, 0x00000201, 0x00050057, 0x00000012, 0x00000203, 0x000001FA, 0x00000202, 0x0003003E, +0x00000204, 0x00000203, 0x00050039, 0x00000012, 0x00000205, 0x00000016, 0x00000204, 0x0005008E, +0x00000012, 0x00000206, 0x00000205, 0x000001F5, 0x00050081, 0x00000012, 0x00000207, 0x000001F3, +0x00000206, 0x000200FE, 0x00000207, 0x00010038, 0x00050036, 0x0000000C, 0x00000073, 0x00000000, +0x00000072, 0x000200F8, 0x00000074, 0x00050041, 0x000001E1, 0x0000020B, 0x000001DF, 0x0000020A, +0x0004003D, 0x00000006, 0x0000020C, 0x0000020B, 0x000500B8, 0x000001E5, 0x0000020D, 0x0000020C, +0x000001E4, 0x000300F7, 0x0000020F, 0x00000000, 0x000400FA, 0x0000020D, 0x0000020E, 0x0000020F, +0x000200F8, 0x0000020E, 0x00050041, 0x000001E1, 0x00000211, 0x000001DF, 0x00000210, 0x0004003D, +0x00000006, 0x00000212, 0x00000211, 0x00060050, 0x0000000C, 0x00000213, 0x00000212, 0x00000212, +0x00000212, 0x000200FE, 0x00000213, 0x000200F8, 0x0000020F, 0x00050041, 0x000001E1, 0x00000215, +0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, 0x00000216, 0x00000215, 0x00050083, 0x00000006, +0x00000217, 0x000000D5, 0x00000216, 0x00050041, 0x000001E1, 0x00000218, 0x000001DF, 0x00000210, +0x0004003D, 0x00000006, 0x00000219, 0x00000218, 0x00050085, 0x00000006, 0x0000021A, 0x00000217, +0x00000219, 0x00050041, 0x000001E1, 0x0000021B, 0x000001DF, 0x0000020A, 0x0004003D, 0x00000006, +0x0000021C, 0x0000021B, 0x0004003D, 0x000001F7, 0x0000021E, 0x0000021D, 0x00050041, 0x00000200, +0x0000021F, 0x000001FE, 0x000001FF, 0x0004003D, 0x0000007F, 0x00000220, 0x0000021F, 0x00050057, +0x00000012, 0x00000221, 0x0000021E, 0x00000220, 0x0008004F, 0x0000000C, 0x00000222, 0x00000221, +0x00000221, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x0000000C, 0x00000223, 0x00000222, +0x0000021C, 0x00060050, 0x0000000C, 0x00000224, 0x0000021A, 0x0000021A, 0x0000021A, 0x00050081, +0x0000000C, 0x00000225, 0x00000224, 0x00000223, 0x000200FE, 0x00000225, 0x00010038, 0x00050036, +0x00000006, 0x00000076, 0x00000000, 0x00000075, 0x000200F8, 0x00000077, 0x00050041, 0x000001E1, +0x00000229, 0x000001DF, 0x00000228, 0x0004003D, 0x00000006, 0x0000022A, 0x00000229, 0x000500B8, +0x000001E5, 0x0000022B, 0x0000022A, 0x000001E4, 0x000300F7, 0x0000022D, 0x00000000, 0x000400FA, +0x0000022B, 0x0000022C, 0x0000022D, 0x000200F8, 0x0000022C, 0x00050041, 0x000001E1, 0x0000022E, +0x000001DF, 0x000001FF, 0x0004003D, 0x00000006, 0x0000022F, 0x0000022E, 0x000200FE, 0x0000022F, +0x000200F8, 0x0000022D, 0x00050041, 0x000001E1, 0x00000231, 0x000001DF, 0x00000228, 0x0004003D, +0x00000006, 0x00000232, 0x00000231, 0x00050083, 0x00000006, 0x00000233, 0x000000D5, 0x00000232, +0x00050041, 0x000001E1, 0x00000234, 0x000001DF, 0x000001FF, 0x0004003D, 0x00000006, 0x00000235, +0x00000234, 0x00050085, 0x00000006, 0x00000236, 0x00000233, 0x00000235, 0x00050041, 0x000001E1, +0x00000237, 0x000001DF, 0x00000228, 0x0004003D, 0x00000006, 0x00000238, 0x00000237, 0x0004003D, +0x000001F7, 0x0000023A, 0x00000239, 0x00050041, 0x00000200, 0x0000023B, 0x000001FE, 0x000001FF, +0x0004003D, 0x0000007F, 0x0000023C, 0x0000023B, 0x00050057, 0x00000012, 0x0000023D, 0x0000023A, +0x0000023C, 0x00050051, 0x00000006, 0x0000023F, 0x0000023D, 0x00000000, 0x00050085, 0x00000006, +0x00000240, 0x00000238, 0x0000023F, 0x00050081, 0x00000006, 0x00000241, 0x00000236, 0x00000240, +0x000200FE, 0x00000241, 0x00010038, 0x00050036, 0x00000006, 0x00000078, 0x00000000, 0x00000075, +0x000200F8, 0x00000079, 0x00050041, 0x000001E1, 0x00000245, 0x000001DF, 0x00000244, 0x0004003D, +0x00000006, 0x00000246, 0x00000245, 0x000500B8, 0x000001E5, 0x00000247, 0x00000246, 0x000001E4, +0x000300F7, 0x00000249, 0x00000000, 0x000400FA, 0x00000247, 0x00000248, 0x00000249, 0x000200F8, +0x00000248, 0x000200FE, 0x000000D5, 0x000200F8, 0x00000249, 0x00050041, 0x000001E1, 0x0000024B, +0x000001DF, 0x00000244, 0x0004003D, 0x00000006, 0x0000024C, 0x0000024B, 0x00050083, 0x00000006, +0x0000024D, 0x000000D5, 0x0000024C, 0x00050041, 0x000001E1, 0x0000024E, 0x000001DF, 0x00000244, +0x0004003D, 0x00000006, 0x0000024F, 0x0000024E, 0x0004003D, 0x000001F7, 0x00000251, 0x00000250, +0x00050041, 0x00000200, 0x00000252, 0x000001FE, 0x000001FF, 0x0004003D, 0x0000007F, 0x00000253, +0x00000252, 0x00050057, 0x00000012, 0x00000254, 0x00000251, 0x00000253, 0x00050051, 0x00000006, +0x00000255, 0x00000254, 0x00000000, 0x00050085, 0x00000006, 0x00000256, 0x0000024F, 0x00000255, +0x00050081, 0x00000006, 0x00000257, 0x0000024D, 0x00000256, 0x000200FE, 0x00000257, 0x00010038, +0x00050036, 0x0000000C, 0x0000007B, 0x00000000, 0x0000000E, 0x00030037, 0x0000000D, 0x0000007A, +0x000200F8, 0x0000007C, 0x0004003B, 0x0000000D, 0x00000271, 0x00000007, 0x00050041, 0x000001E1, +0x0000025B, 0x000001DF, 0x0000025A, 0x0004003D, 0x00000006, 0x0000025C, 0x0000025B, 0x000500B8, +0x000001E5, 0x0000025D, 0x0000025C, 0x000001E4, 0x000300F7, 0x0000025F, 0x00000000, 0x000400FA, +0x0000025D, 0x0000025E, 0x0000025F, 0x000200F8, 0x0000025E, 0x00050041, 0x000001E1, 0x00000261, +0x000001DF, 0x00000260, 0x0004003D, 0x00000006, 0x00000262, 0x00000261, 0x0004003D, 0x0000000C, +0x00000263, 0x0000007A, 0x0005008E, 0x0000000C, 0x00000264, 0x00000263, 0x00000262, 0x000200FE, +0x00000264, 0x000200F8, 0x0000025F, 0x00050041, 0x000001E1, 0x00000266, 0x000001DF, 0x00000260, +0x0004003D, 0x00000006, 0x00000267, 0x00000266, 0x0004003D, 0x0000000C, 0x00000268, 0x0000007A, +0x0005008E, 0x0000000C, 0x00000269, 0x00000268, 0x00000267, 0x00050041, 0x000001E1, 0x0000026A, +0x000001DF, 0x0000025A, 0x0004003D, 0x00000006, 0x0000026B, 0x0000026A, 0x0004003D, 0x000001F7, +0x0000026D, 0x0000026C, 0x00050041, 0x00000200, 0x0000026E, 0x000001FE, 0x000001FF, 0x0004003D, +0x0000007F, 0x0000026F, 0x0000026E, 0x00050057, 0x00000012, 0x00000270, 0x0000026D, 0x0000026F, +0x0008004F, 0x0000000C, 0x00000272, 0x00000270, 0x00000270, 0x00000000, 0x00000001, 0x00000002, +0x0003003E, 0x00000271, 0x00000272, 0x00050039, 0x0000000C, 0x00000273, 0x00000010, 0x00000271, +0x0005008E, 0x0000000C, 0x00000274, 0x00000273, 0x0000026B, 0x00050081, 0x0000000C, 0x00000275, +0x00000269, 0x00000274, 0x000200FE, 0x00000275, 0x00010038, 0x00050036, 0x0000000C, 0x0000007D, +0x00000000, 0x00000072, 0x000200F8, 0x0000007E, 0x0004003B, 0x0000000D, 0x00000284, 0x00000007, +0x00050041, 0x000001E1, 0x00000279, 0x000001DF, 0x00000278, 0x0004003D, 0x00000006, 0x0000027A, +0x00000279, 0x000500B8, 0x000001E5, 0x0000027B, 0x0000027A, 0x000001E4, 0x000300F7, 0x0000027D, +0x00000000, 0x000400FA, 0x0000027B, 0x0000027C, 0x0000027D, 0x000200F8, 0x0000027C, 0x00050041, +0x0000027F, 0x00000280, 0x000001FE, 0x0000027E, 0x0004003D, 0x0000000C, 0x00000281, 0x00000280, +0x0006000C, 0x0000000C, 0x00000282, 0x00000001, 0x00000045, 0x00000281, 0x000200FE, 0x00000282, +0x000200F8, 0x0000027D, 0x0004003D, 0x000001F7, 0x00000286, 0x00000285, 0x00050041, 0x00000200, +0x00000287, 0x000001FE, 0x000001FF, 0x0004003D, 0x0000007F, 0x00000288, 0x00000287, 0x00050057, +0x00000012, 0x00000289, 0x00000286, 0x00000288, 0x0008004F, 0x0000000C, 0x0000028A, 0x00000289, +0x00000289, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x0000000C, 0x0000028B, 0x0000028A, +0x00000130, 0x00060050, 0x0000000C, 0x0000028C, 0x000000D5, 0x000000D5, 0x000000D5, 0x00050083, +0x0000000C, 0x0000028D, 0x0000028B, 0x0000028C, 0x0006000C, 0x0000000C, 0x0000028E, 0x00000001, +0x00000045, 0x0000028D, 0x0003003E, 0x00000284, 0x0000028E, 0x00050041, 0x0000028F, 0x00000290, +0x000001FE, 0x00000260, 0x0004003D, 0x000001FB, 0x00000291, 0x00000290, 0x0004003D, 0x0000000C, +0x00000292, 0x00000284, 0x00050091, 0x0000000C, 0x00000293, 0x00000291, 0x00000292, 0x0006000C, +0x0000000C, 0x00000294, 0x00000001, 0x00000045, 0x00000293, 0x000200FE, 0x00000294, 0x00010038, +0x00050036, 0x00000006, 0x00000083, 0x00000000, 0x00000081, 0x00030037, 0x00000080, 0x00000082, +0x000200F8, 0x00000084, 0x0004003D, 0x0000007F, 0x00000297, 0x00000082, 0x00050094, 0x00000006, +0x0000029B, 0x00000297, 0x0000029A, 0x0006000C, 0x00000006, 0x0000029C, 0x00000001, 0x0000000D, +0x0000029B, 0x00050085, 0x00000006, 0x0000029E, 0x0000029C, 0x0000029D, 0x0006000C, 0x00000006, +0x0000029F, 0x00000001, 0x0000000A, 0x0000029E, 0x000200FE, 0x0000029F, 0x00010038, 0x00050036, +0x0000007F, 0x0000008B, 0x00000000, 0x00000087, 0x00030037, 0x00000086, 0x00000088, 0x00030037, +0x00000086, 0x00000089, 0x00030037, 0x00000007, 0x0000008A, 0x000200F8, 0x0000008C, 0x0004003B, +0x00000007, 0x000002A2, 0x00000007, 0x0004003B, 0x00000007, 0x000002A4, 0x00000007, 0x0004003B, +0x00000007, 0x000002AD, 0x00000007, 0x0004003B, 0x00000007, 0x000002B4, 0x00000007, 0x0004003B, +0x00000007, 0x000002B7, 0x00000007, 0x0003003E, 0x000002A2, 0x000002A3, 0x0004003D, 0x00000085, +0x000002A5, 0x00000088, 0x0004006F, 0x00000006, 0x000002A6, 0x000002A5, 0x00050081, 0x00000006, +0x000002A7, 0x000002A6, 0x0000012F, 0x0006000C, 0x00000006, 0x000002A8, 0x00000001, 0x0000001F, +0x000002A7, 0x0004003D, 0x00000085, 0x000002A9, 0x00000089, 0x0004006F, 0x00000006, 0x000002AA, +0x000002A9, 0x0006000C, 0x00000006, 0x000002AB, 0x00000001, 0x0000001F, 0x000002AA, 0x00050088, +0x00000006, 0x000002AC, 0x000002A8, 0x000002AB, 0x0003003E, 0x000002A4, 0x000002AC, 0x0004003D, +0x00000085, 0x000002AE, 0x00000088, 0x0004006F, 0x00000006, 0x000002AF, 0x000002AE, 0x0004003D, +0x00000006, 0x000002B0, 0x000002A2, 0x00050085, 0x00000006, 0x000002B1, 0x000002AF, 0x000002B0, +0x0004003D, 0x00000006, 0x000002B2, 0x0000008A, 0x00050081, 0x00000006, 0x000002B3, 0x000002B1, +0x000002B2, 0x0003003E, 0x000002AD, 0x000002B3, 0x0004003D, 0x00000006, 0x000002B5, 0x000002AD, +0x0006000C, 0x00000006, 0x000002B6, 0x00000001, 0x0000000D, 0x000002B5, 0x0003003E, 0x000002B4, +0x000002B6, 0x0004003D, 0x00000006, 0x000002B8, 0x000002AD, 0x0006000C, 0x00000006, 0x000002B9, +0x00000001, 0x0000000E, 0x000002B8, 0x0003003E, 0x000002B7, 0x000002B9, 0x0004003D, 0x00000006, +0x000002BA, 0x000002A4, 0x0004003D, 0x00000006, 0x000002BB, 0x000002B7, 0x00050085, 0x00000006, +0x000002BC, 0x000002BA, 0x000002BB, 0x0004003D, 0x00000006, 0x000002BD, 0x000002A4, 0x0004003D, +0x00000006, 0x000002BE, 0x000002B4, 0x00050085, 0x00000006, 0x000002BF, 0x000002BD, 0x000002BE, +0x00050050, 0x0000007F, 0x000002C0, 0x000002BC, 0x000002BF, 0x000200FE, 0x000002C0, 0x00010038, +0x00050036, 0x00000006, 0x00000091, 0x00000000, 0x0000008D, 0x00030037, 0x0000000D, 0x0000008E, +0x00030037, 0x0000000D, 0x0000008F, 0x00030037, 0x00000086, 0x00000090, 0x000200F8, 0x00000092, +0x0004003B, 0x00000007, 0x000002C3, 0x00000007, 0x0004003B, 0x00000007, 0x000002D1, 0x00000007, +0x00050041, 0x000001E1, 0x000002CF, 0x000002CD, 0x000002CE, 0x0004003D, 0x00000006, 0x000002D0, +0x000002CF, 0x0003003E, 0x000002C3, 0x000002D0, 0x0004003D, 0x00000006, 0x000002D2, 0x000002C3, +0x0004003D, 0x0000000C, 0x000002D3, 0x0000008F, 0x0004003D, 0x0000000C, 0x000002D4, 0x0000008E, +0x00050094, 0x00000006, 0x000002D5, 0x000002D3, 0x000002D4, 0x00050083, 0x00000006, 0x000002D6, +0x000000D5, 0x000002D5, 0x00050085, 0x00000006, 0x000002D7, 0x000002D2, 0x000002D6, 0x0004003D, +0x00000006, 0x000002D8, 0x000002C3, 0x0007000C, 0x00000006, 0x000002D9, 0x00000001, 0x00000028, +0x000002D7, 0x000002D8, 0x0003003E, 0x000002D1, 0x000002D9, 0x0004003D, 0x00000006, 0x000002DA, +0x000002D1, 0x000200FE, 0x000002DA, 0x00010038, 0x00050036, 0x00000006, 0x0000009E, 0x00000000, +0x00000096, 0x00030037, 0x00000095, 0x00000097, 0x00030037, 0x00000013, 0x00000098, 0x00030037, +0x00000007, 0x00000099, 0x00030037, 0x0000000D, 0x0000009A, 0x00030037, 0x0000000D, 0x0000009B, +0x00030037, 0x0000000D, 0x0000009C, 0x00030037, 0x00000086, 0x0000009D, 0x000200F8, 0x0000009F, +0x0004003B, 0x00000007, 0x000002DD, 0x00000007, 0x0004003B, 0x0000000D, 0x000002DE, 0x00000007, +0x0004003B, 0x0000000D, 0x000002E0, 0x00000007, 0x0004003B, 0x00000086, 0x000002E2, 0x00000007, +0x0004003B, 0x00000007, 0x000002E5, 0x00000007, 0x0004003B, 0x00000007, 0x000002E6, 0x00000007, +0x0004003B, 0x00000080, 0x000002E7, 0x00000007, 0x0004003B, 0x00000086, 0x000002EB, 0x00000007, +0x0004003B, 0x00000080, 0x000002F3, 0x00000007, 0x0004003B, 0x00000086, 0x000002F4, 0x00000007, +0x0004003B, 0x00000086, 0x000002F6, 0x00000007, 0x0004003B, 0x00000007, 0x000002F7, 0x00000007, +0x0004003B, 0x00000007, 0x000002FD, 0x00000007, 0x0004003D, 0x0000000C, 0x000002DF, 0x0000009A, +0x0003003E, 0x000002DE, 0x000002DF, 0x0004003D, 0x0000000C, 0x000002E1, 0x0000009B, 0x0003003E, +0x000002E0, 0x000002E1, 0x0004003D, 0x00000085, 0x000002E3, 0x0000009D, 0x0003003E, 0x000002E2, +0x000002E3, 0x00070039, 0x00000006, 0x000002E4, 0x00000091, 0x000002DE, 0x000002E0, 0x000002E2, +0x0003003E, 0x000002DD, 0x000002E4, 0x0003003E, 0x000002E5, 0x000000F8, 0x0004003D, 0x0000000C, +0x000002E8, 0x0000009C, 0x0007004F, 0x0000007F, 0x000002E9, 0x000002E8, 0x000002E8, 0x00000000, +0x00000001, 0x0003003E, 0x000002E7, 0x000002E9, 0x00050039, 0x00000006, 0x000002EA, 0x00000083, +0x000002E7, 0x0003003E, 0x000002E6, 0x000002EA, 0x0003003E, 0x000002EB, 0x000001E9, 0x000200F9, +0x000002EC, 0x000200F8, 0x000002EC, 0x000400F6, 0x000002EE, 0x000002EF, 0x00000000, 0x000200F9, +0x000002F0, 0x000200F8, 0x000002F0, 0x0004003D, 0x00000085, 0x000002F1, 0x000002EB, 0x000500B1, +0x000001E5, 0x000002F2, 0x000002F1, 0x00000278, 0x000400FA, 0x000002F2, 0x000002ED, 0x000002EE, +0x000200F8, 0x000002ED, 0x0004003D, 0x00000085, 0x000002F5, 0x000002EB, 0x0003003E, 0x000002F4, +0x000002F5, 0x0003003E, 0x000002F6, 0x00000278, 0x0004003D, 0x00000006, 0x000002F8, 0x000002E6, +0x0003003E, 0x000002F7, 0x000002F8, 0x00070039, 0x0000007F, 0x000002F9, 0x0000008B, 0x000002F4, +0x000002F6, 0x000002F7, 0x00050050, 0x0000007F, 0x000002FB, 0x000002FA, 0x000002FA, 0x00050088, +0x0000007F, 0x000002FC, 0x000002F9, 0x000002FB, 0x0003003E, 0x000002F3, 0x000002FC, 0x0004003D, +0x00000094, 0x000002FE, 0x00000097, 0x0004003D, 0x00000012, 0x000002FF, 0x00000098, 0x0007004F, +0x0000007F, 0x00000300, 0x000002FF, 0x000002FF, 0x00000000, 0x00000001, 0x0004003D, 0x0000007F, +0x00000301, 0x000002F3, 0x00050081, 0x0000007F, 0x00000302, 0x00000300, 0x00000301, 0x0004003D, +0x00000085, 0x00000303, 0x0000009D, 0x0004006F, 0x00000006, 0x00000304, 0x00000303, 0x00050051, +0x00000006, 0x00000305, 0x00000302, 0x00000000, 0x00050051, 0x00000006, 0x00000306, 0x00000302, +0x00000001, 0x00060050, 0x0000000C, 0x00000307, 0x00000305, 0x00000306, 0x00000304, 0x00050057, +0x00000012, 0x00000308, 0x000002FE, 0x00000307, 0x00050051, 0x00000006, 0x00000309, 0x00000308, +0x00000000, 0x0003003E, 0x000002FD, 0x00000309, 0x00050041, 0x00000007, 0x0000030B, 0x00000098, +0x0000030A, 0x0004003D, 0x00000006, 0x0000030C, 0x0000030B, 0x0004003D, 0x00000006, 0x0000030D, +0x000002DD, 0x00050083, 0x00000006, 0x0000030E, 0x0000030C, 0x0000030D, 0x0004003D, 0x00000006, +0x0000030F, 0x000002FD, 0x0007000C, 0x00000006, 0x00000310, 0x00000001, 0x00000030, 0x0000030E, +0x0000030F, 0x0004003D, 0x00000006, 0x00000311, 0x000002E5, 0x00050081, 0x00000006, 0x00000312, +0x00000311, 0x00000310, 0x0003003E, 0x000002E5, 0x00000312, 0x000200F9, 0x000002EF, 0x000200F8, +0x000002EF, 0x0004003D, 0x00000085, 0x00000313, 0x000002EB, 0x00050080, 0x00000085, 0x00000314, +0x00000313, 0x000001FF, 0x0003003E, 0x000002EB, 0x00000314, 0x000200F9, 0x000002EC, 0x000200F8, +0x000002EE, 0x0004003D, 0x00000006, 0x00000315, 0x000002E5, 0x00050088, 0x00000006, 0x00000317, +0x00000315, 0x00000316, 0x000200FE, 0x00000317, 0x00010038, 0x00050036, 0x00000085, 0x000000A2, +0x00000000, 0x000000A0, 0x00030037, 0x0000000D, 0x000000A1, 0x000200F8, 0x000000A3, 0x0004003B, +0x00000086, 0x0000031A, 0x00000007, 0x0004003B, 0x00000013, 0x0000031B, 0x00000007, 0x0004003B, +0x00000086, 0x00000325, 0x00000007, 0x0003003E, 0x0000031A, 0x000001E9, 0x00050041, 0x0000031C, +0x0000031D, 0x000002CD, 0x00000210, 0x0004003D, 0x000002C7, 0x0000031E, 0x0000031D, 0x0004003D, +0x0000000C, 0x0000031F, 0x000000A1, 0x00050051, 0x00000006, 0x00000320, 0x0000031F, 0x00000000, +0x00050051, 0x00000006, 0x00000321, 0x0000031F, 0x00000001, 0x00050051, 0x00000006, 0x00000322, +0x0000031F, 0x00000002, 0x00070050, 0x00000012, 0x00000323, 0x00000320, 0x00000321, 0x00000322, +0x000000D5, 0x00050091, 0x00000012, 0x00000324, 0x0000031E, 0x00000323, 0x0003003E, 0x0000031B, +0x00000324, 0x0003003E, 0x00000325, 0x000001E9, 0x000200F9, 0x00000326, 0x000200F8, 0x00000326, +0x000400F6, 0x00000328, 0x00000329, 0x00000000, 0x000200F9, 0x0000032A, 0x000200F8, 0x0000032A, +0x0004003D, 0x00000085, 0x0000032B, 0x00000325, 0x00050041, 0x0000032D, 0x0000032E, 0x000002CD, +0x0000032C, 0x0004003D, 0x00000085, 0x0000032F, 0x0000032E, 0x00050082, 0x00000085, 0x00000330, +0x0000032F, 0x000001FF, 0x000500B1, 0x000001E5, 0x00000331, 0x0000032B, 0x00000330, 0x000400FA, +0x00000331, 0x00000327, 0x00000328, 0x000200F8, 0x00000327, 0x00050041, 0x00000007, 0x00000332, +0x0000031B, 0x0000030A, 0x0004003D, 0x00000006, 0x00000333, 0x00000332, 0x0004003D, 0x00000085, +0x00000334, 0x00000325, 0x00070041, 0x000001E1, 0x00000335, 0x000002CD, 0x0000020A, 0x00000334, +0x0000023E, 0x0004003D, 0x00000006, 0x00000336, 0x00000335, 0x000500B8, 0x000001E5, 0x00000337, +0x00000333, 0x00000336, 0x000300F7, 0x00000339, 0x00000000, 0x000400FA, 0x00000337, 0x00000338, +0x00000339, 0x000200F8, 0x00000338, 0x0004003D, 0x00000085, 0x0000033A, 0x00000325, 0x00050080, +0x00000085, 0x0000033B, 0x0000033A, 0x000001FF, 0x0003003E, 0x0000031A, 0x0000033B, 0x000200F9, +0x00000339, 0x000200F8, 0x00000339, 0x000200F9, 0x00000329, 0x000200F8, 0x00000329, 0x0004003D, +0x00000085, 0x0000033C, 0x00000325, 0x00050080, 0x00000085, 0x0000033D, 0x0000033C, 0x000001FF, +0x0003003E, 0x00000325, 0x0000033D, 0x000200F9, 0x00000326, 0x000200F8, 0x00000328, 0x0004003D, +0x00000085, 0x0000033E, 0x0000031A, 0x000200FE, 0x0000033E, 0x00010038, 0x00050036, 0x00000006, +0x000000A9, 0x00000000, 0x000000A4, 0x00030037, 0x0000000D, 0x000000A5, 0x00030037, 0x00000086, +0x000000A6, 0x00030037, 0x0000000D, 0x000000A7, 0x00030037, 0x0000000D, 0x000000A8, 0x000200F8, +0x000000AA, 0x0004003B, 0x00000013, 0x00000341, 0x00000007, 0x0004003B, 0x00000007, 0x00000353, +0x00000007, 0x0004003B, 0x00000007, 0x00000355, 0x00000007, 0x0004003B, 0x00000013, 0x00000360, +0x00000007, 0x0004003B, 0x00000007, 0x00000369, 0x00000007, 0x0004003B, 0x00000013, 0x0000036B, +0x00000007, 0x0004003B, 0x00000007, 0x0000036D, 0x00000007, 0x0004003B, 0x0000000D, 0x0000036F, +0x00000007, 0x0004003B, 0x0000000D, 0x00000371, 0x00000007, 0x0004003B, 0x0000000D, 0x00000373, +0x00000007, 0x0004003B, 0x00000086, 0x00000375, 0x00000007, 0x0004003B, 0x00000007, 0x00000378, +0x00000007, 0x0004003B, 0x00000086, 0x00000385, 0x00000007, 0x0004003B, 0x00000007, 0x0000039F, +0x00000007, 0x0004003B, 0x00000013, 0x000003A0, 0x00000007, 0x0004003B, 0x00000007, 0x000003A2, +0x00000007, 0x0004003B, 0x0000000D, 0x000003A4, 0x00000007, 0x0004003B, 0x0000000D, 0x000003A6, +0x00000007, 0x0004003B, 0x0000000D, 0x000003A8, 0x00000007, 0x0004003B, 0x00000086, 0x000003AA, +0x00000007, 0x00050041, 0x0000031C, 0x00000342, 0x000002CD, 0x00000260, 0x0004003D, 0x000002C7, +0x00000343, 0x00000342, 0x0004003D, 0x00000085, 0x00000344, 0x000000A6, 0x00060041, 0x0000031C, +0x00000345, 0x000002CD, 0x000001FF, 0x00000344, 0x0004003D, 0x000002C7, 0x00000346, 0x00000345, +0x00050092, 0x000002C7, 0x00000347, 0x00000343, 0x00000346, 0x0004003D, 0x0000000C, 0x00000348, +0x000000A5, 0x00050051, 0x00000006, 0x00000349, 0x00000348, 0x00000000, 0x00050051, 0x00000006, +0x0000034A, 0x00000348, 0x00000001, 0x00050051, 0x00000006, 0x0000034B, 0x00000348, 0x00000002, +0x00070050, 0x00000012, 0x0000034C, 0x00000349, 0x0000034A, 0x0000034B, 0x000000D5, 0x00050091, +0x00000012, 0x0000034D, 0x00000347, 0x0000034C, 0x0003003E, 0x00000341, 0x0000034D, 0x0004003D, +0x00000012, 0x0000034E, 0x00000341, 0x00050041, 0x00000007, 0x0000034F, 0x00000341, 0x000000EE, +0x0004003D, 0x00000006, 0x00000350, 0x0000034F, 0x00050088, 0x00000006, 0x00000351, 0x000000D5, +0x00000350, 0x0005008E, 0x00000012, 0x00000352, 0x0000034E, 0x00000351, 0x0003003E, 0x00000341, +0x00000352, 0x0003003E, 0x00000353, 0x00000354, 0x00050041, 0x000001E1, 0x00000356, 0x000002CD, +0x00000228, 0x0004003D, 0x00000006, 0x00000357, 0x00000356, 0x0004003D, 0x00000006, 0x00000358, +0x00000353, 0x00050085, 0x00000006, 0x00000359, 0x00000357, 0x00000358, 0x00050041, 0x00000007, +0x0000035A, 0x00000341, 0x0000030A, 0x0004003D, 0x00000006, 0x0000035B, 0x0000035A, 0x00050088, +0x00000006, 0x0000035C, 0x00000359, 0x0000035B, 0x0003003E, 0x00000355, 0x0000035C, 0x0004003D, +0x00000006, 0x0000035D, 0x00000355, 0x0007000C, 0x00000006, 0x0000035F, 0x00000001, 0x00000025, +0x0000035D, 0x0000035E, 0x0003003E, 0x00000355, 0x0000035F, 0x00050041, 0x0000031C, 0x00000361, +0x000002CD, 0x00000210, 0x0004003D, 0x000002C7, 0x00000362, 0x00000361, 0x0004003D, 0x0000000C, +0x00000363, 0x000000A5, 0x00050051, 0x00000006, 0x00000364, 0x00000363, 0x00000000, 0x00050051, +0x00000006, 0x00000365, 0x00000363, 0x00000001, 0x00050051, 0x00000006, 0x00000366, 0x00000363, +0x00000002, 0x00070050, 0x00000012, 0x00000367, 0x00000364, 0x00000365, 0x00000366, 0x000000D5, +0x00050091, 0x00000012, 0x00000368, 0x00000362, 0x00000367, 0x0003003E, 0x00000360, 0x00000368, +0x0003003E, 0x00000369, 0x000000D5, 0x0004003D, 0x00000012, 0x0000036C, 0x00000341, 0x0003003E, +0x0000036B, 0x0000036C, 0x0004003D, 0x00000006, 0x0000036E, 0x00000355, 0x0003003E, 0x0000036D, +0x0000036E, 0x0004003D, 0x0000000C, 0x00000370, 0x000000A7, 0x0003003E, 0x0000036F, 0x00000370, +0x0004003D, 0x0000000C, 0x00000372, 0x000000A8, 0x0003003E, 0x00000371, 0x00000372, 0x0004003D, +0x0000000C, 0x00000374, 0x000000A5, 0x0003003E, 0x00000373, 0x00000374, 0x0004003D, 0x00000085, +0x00000376, 0x000000A6, 0x0003003E, 0x00000375, 0x00000376, 0x000B0039, 0x00000006, 0x00000377, +0x0000009E, 0x0000036A, 0x0000036B, 0x0000036D, 0x0000036F, 0x00000371, 0x00000373, 0x00000375, +0x0003003E, 0x00000369, 0x00000377, 0x0004003D, 0x00000085, 0x00000379, 0x000000A6, 0x00070041, +0x000001E1, 0x0000037A, 0x000002CD, 0x0000020A, 0x00000379, 0x0000023E, 0x0004003D, 0x00000006, +0x0000037B, 0x0000037A, 0x00050041, 0x000001E1, 0x0000037C, 0x000002CD, 0x00000244, 0x0004003D, +0x00000006, 0x0000037D, 0x0000037C, 0x00050081, 0x00000006, 0x0000037E, 0x0000037B, 0x0000037D, +0x0004003D, 0x00000085, 0x0000037F, 0x000000A6, 0x00070041, 0x000001E1, 0x00000380, 0x000002CD, +0x0000020A, 0x0000037F, 0x0000023E, 0x0004003D, 0x00000006, 0x00000381, 0x00000380, 0x00050041, +0x00000007, 0x00000382, 0x00000360, 0x0000030A, 0x0004003D, 0x00000006, 0x00000383, 0x00000382, +0x0008000C, 0x00000006, 0x00000384, 0x00000001, 0x00000031, 0x0000037E, 0x00000381, 0x00000383, +0x0003003E, 0x00000378, 0x00000384, 0x0004003D, 0x00000085, 0x00000386, 0x000000A6, 0x00050080, +0x00000085, 0x00000387, 0x00000386, 0x000001FF, 0x0003003E, 0x00000385, 0x00000387, 0x0004003D, +0x00000006, 0x00000388, 0x00000378, 0x000500BA, 0x000001E5, 0x00000389, 0x00000388, 0x000000F8, +0x000300F7, 0x0000038B, 0x00000000, 0x000400FA, 0x00000389, 0x0000038A, 0x0000038B, 0x000200F8, +0x0000038A, 0x0004003D, 0x00000085, 0x0000038C, 0x00000385, 0x00050041, 0x0000032D, 0x0000038D, +0x000002CD, 0x0000032C, 0x0004003D, 0x00000085, 0x0000038E, 0x0000038D, 0x000500B1, 0x000001E5, +0x0000038F, 0x0000038C, 0x0000038E, 0x000200F9, 0x0000038B, 0x000200F8, 0x0000038B, 0x000700F5, +0x000001E5, 0x00000390, 0x00000389, 0x000000AA, 0x0000038F, 0x0000038A, 0x000300F7, 0x00000392, +0x00000000, 0x000400FA, 0x00000390, 0x00000391, 0x00000392, 0x000200F8, 0x00000391, 0x00050041, +0x0000031C, 0x00000393, 0x000002CD, 0x00000260, 0x0004003D, 0x000002C7, 0x00000394, 0x00000393, +0x0004003D, 0x00000085, 0x00000395, 0x00000385, 0x00060041, 0x0000031C, 0x00000396, 0x000002CD, +0x000001FF, 0x00000395, 0x0004003D, 0x000002C7, 0x00000397, 0x00000396, 0x00050092, 0x000002C7, +0x00000398, 0x00000394, 0x00000397, 0x0004003D, 0x0000000C, 0x00000399, 0x000000A5, 0x00050051, +0x00000006, 0x0000039A, 0x00000399, 0x00000000, 0x00050051, 0x00000006, 0x0000039B, 0x00000399, +0x00000001, 0x00050051, 0x00000006, 0x0000039C, 0x00000399, 0x00000002, 0x00070050, 0x00000012, +0x0000039D, 0x0000039A, 0x0000039B, 0x0000039C, 0x000000D5, 0x00050091, 0x00000012, 0x0000039E, +0x00000398, 0x0000039D, 0x0003003E, 0x00000341, 0x0000039E, 0x0004003D, 0x00000012, 0x000003A1, +0x00000341, 0x0003003E, 0x000003A0, 0x000003A1, 0x0004003D, 0x00000006, 0x000003A3, 0x00000355, +0x0003003E, 0x000003A2, 0x000003A3, 0x0004003D, 0x0000000C, 0x000003A5, 0x000000A7, 0x0003003E, +0x000003A4, 0x000003A5, 0x0004003D, 0x0000000C, 0x000003A7, 0x000000A8, 0x0003003E, 0x000003A6, +0x000003A7, 0x0004003D, 0x0000000C, 0x000003A9, 0x000000A5, 0x0003003E, 0x000003A8, 0x000003A9, +0x0004003D, 0x00000085, 0x000003AB, 0x00000385, 0x0003003E, 0x000003AA, 0x000003AB, 0x000B0039, +0x00000006, 0x000003AC, 0x0000009E, 0x0000036A, 0x000003A0, 0x000003A2, 0x000003A4, 0x000003A6, +0x000003A8, 0x000003AA, 0x0003003E, 0x0000039F, 0x000003AC, 0x0004003D, 0x00000006, 0x000003AD, +0x00000369, 0x0004003D, 0x00000006, 0x000003AE, 0x0000039F, 0x0004003D, 0x00000006, 0x000003AF, +0x00000378, 0x0008000C, 0x00000006, 0x000003B0, 0x00000001, 0x0000002E, 0x000003AD, 0x000003AE, +0x000003AF, 0x0003003E, 0x00000369, 0x000003B0, 0x000200F9, 0x00000392, 0x000200F8, 0x00000392, +0x0004003D, 0x00000006, 0x000003B1, 0x00000369, 0x00050083, 0x00000006, 0x000003B2, 0x000000D5, +0x000003B1, 0x0004003D, 0x00000006, 0x000003B3, 0x000000D4, 0x00050085, 0x00000006, 0x000003B4, +0x000003B2, 0x000003B3, 0x00050083, 0x00000006, 0x000003B5, 0x000000D5, 0x000003B4, 0x000200FE, +0x000003B5, 0x00010038, 0x00050036, 0x0000000C, 0x000000B5, 0x00000000, 0x000000AD, 0x00030037, +0x000000AB, 0x000000AE, 0x00030037, 0x000000AC, 0x000000AF, 0x00030037, 0x0000000C, 0x000000B0, +0x00030037, 0x00000007, 0x000000B1, 0x00030037, 0x00000007, 0x000000B2, 0x00030037, 0x00000007, +0x000000B3, 0x00030037, 0x00000007, 0x000000B4, 0x000200F8, 0x000000B6, 0x0004003B, 0x00000007, +0x000003B8, 0x00000007, 0x0004003B, 0x00000007, 0x000003BA, 0x00000007, 0x0004003B, 0x00000007, +0x000003BC, 0x00000007, 0x0004003B, 0x00000007, 0x000003BF, 0x00000007, 0x0004003B, 0x00000007, +0x000003C0, 0x00000007, 0x0004003B, 0x00000007, 0x000003C2, 0x00000007, 0x0004003B, 0x00000007, +0x000003C4, 0x00000007, 0x0004003B, 0x0000000D, 0x000003C7, 0x00000007, 0x0004003B, 0x00000007, +0x000003C9, 0x00000007, 0x00050051, 0x0000000C, 0x000003B9, 0x000000AE, 0x00000006, 0x00050051, +0x00000006, 0x000003BB, 0x000000AE, 0x00000002, 0x0003003E, 0x000003BA, 0x000003BB, 0x0004003D, +0x00000006, 0x000003BD, 0x000000B3, 0x0003003E, 0x000003BC, 0x000003BD, 0x00080039, 0x00000006, +0x000003BE, 0x0000005D, 0x000003BA, 0x000003BC, 0x000003B9, 0x000000B0, 0x0003003E, 0x000003B8, +0x000003BE, 0x00050051, 0x00000006, 0x000003C1, 0x000000AE, 0x00000002, 0x0003003E, 0x000003C0, +0x000003C1, 0x0004003D, 0x00000006, 0x000003C3, 0x000000B1, 0x0003003E, 0x000003C2, 0x000003C3, +0x0004003D, 0x00000006, 0x000003C5, 0x000000B2, 0x0003003E, 0x000003C4, 0x000003C5, 0x00070039, +0x00000006, 0x000003C6, 0x00000062, 0x000003C0, 0x000003C2, 0x000003C4, 0x0003003E, 0x000003BF, +0x000003C6, 0x00050051, 0x0000000C, 0x000003C8, 0x000000AE, 0x0000000A, 0x0004003D, 0x00000006, +0x000003CA, 0x000000B4, 0x0003003E, 0x000003C9, 0x000003CA, 0x00060039, 0x0000000C, 0x000003CB, +0x00000067, 0x000003C8, 0x000003C9, 0x0003003E, 0x000003C7, 0x000003CB, 0x0004003D, 0x00000006, +0x000003CC, 0x000003B8, 0x0004003D, 0x00000006, 0x000003CD, 0x000003BF, 0x00050085, 0x00000006, +0x000003CE, 0x000003CC, 0x000003CD, 0x0004003D, 0x0000000C, 0x000003CF, 0x000003C7, 0x0005008E, +0x0000000C, 0x000003D0, 0x000003CF, 0x000003CE, 0x000200FE, 0x000003D0, 0x00010038, 0x00050036, +0x0000000C, 0x000000BC, 0x00000000, 0x000000B7, 0x00030037, 0x000000AB, 0x000000B8, 0x00030037, +0x00000007, 0x000000B9, 0x00030037, 0x00000007, 0x000000BA, 0x00030037, 0x00000007, 0x000000BB, +0x000200F8, 0x000000BD, 0x0004003B, 0x00000007, 0x000003D5, 0x00000007, 0x0004003B, 0x00000007, +0x000003D7, 0x00000007, 0x0004003B, 0x00000007, 0x000003D9, 0x00000007, 0x0004003B, 0x00000007, +0x000003DB, 0x00000007, 0x00050051, 0x00000012, 0x000003D3, 0x000000B8, 0x00000000, 0x0008004F, +0x0000000C, 0x000003D4, 0x000003D3, 0x000003D3, 0x00000000, 0x00000001, 0x00000002, 0x00050051, +0x00000006, 0x000003D6, 0x000000B8, 0x00000002, 0x0003003E, 0x000003D5, 0x000003D6, 0x0004003D, +0x00000006, 0x000003D8, 0x000000B9, 0x0003003E, 0x000003D7, 0x000003D8, 0x0004003D, 0x00000006, +0x000003DA, 0x000000BA, 0x0003003E, 0x000003D9, 0x000003DA, 0x0004003D, 0x00000006, 0x000003DC, +0x000000BB, 0x0003003E, 0x000003DB, 0x000003DC, 0x00080039, 0x00000006, 0x000003DD, 0x00000043, +0x000003D5, 0x000003D7, 0x000003D9, 0x000003DB, 0x0005008E, 0x0000000C, 0x000003DE, 0x000003D4, +0x000003DD, 0x000200FE, 0x000003DE, 0x00010038, 0x00050036, 0x0000000C, 0x000000C5, 0x00000000, +0x000000AD, 0x00030037, 0x000000AB, 0x000000BE, 0x00030037, 0x000000AC, 0x000000BF, 0x00030037, +0x0000000C, 0x000000C0, 0x00030037, 0x00000007, 0x000000C1, 0x00030037, 0x00000007, 0x000000C2, +0x00030037, 0x00000007, 0x000000C3, 0x00030037, 0x00000007, 0x000000C4, 0x000200F8, 0x000000C6, +0x0004003B, 0x00000007, 0x000003E1, 0x00000007, 0x0004003B, 0x00000007, 0x000003E3, 0x00000007, +0x0004003B, 0x00000007, 0x000003E5, 0x00000007, 0x0004003B, 0x00000007, 0x000003E7, 0x00000007, +0x0004003D, 0x00000006, 0x000003E2, 0x000000C1, 0x0003003E, 0x000003E1, 0x000003E2, 0x0004003D, +0x00000006, 0x000003E4, 0x000000C2, 0x0003003E, 0x000003E3, 0x000003E4, 0x0004003D, 0x00000006, +0x000003E6, 0x000000C3, 0x0003003E, 0x000003E5, 0x000003E6, 0x0004003D, 0x00000006, 0x000003E8, +0x000000C4, 0x0003003E, 0x000003E7, 0x000003E8, 0x000B0039, 0x0000000C, 0x000003E9, 0x000000B5, +0x000000BE, 0x000000BF, 0x000000C0, 0x000003E1, 0x000003E3, 0x000003E5, 0x000003E7, 0x000200FE, +0x000003E9, 0x00010038, 0x00050036, 0x0000000C, 0x000000CC, 0x00000000, 0x000000C8, 0x00030037, +0x0000000D, 0x000000C9, 0x00030037, 0x0000000D, 0x000000CA, 0x00030037, 0x000000C7, 0x000000CB, +0x000200F8, 0x000000CD, 0x0004003B, 0x0000000D, 0x000003EC, 0x00000007, 0x0004003B, 0x00000086, +0x000003EE, 0x00000007, 0x0004003B, 0x000003F9, 0x000003FA, 0x00000007, 0x0004003B, 0x00000007, +0x0000040D, 0x00000007, 0x0004003B, 0x0000000D, 0x00000413, 0x00000007, 0x0004003B, 0x00000007, +0x00000419, 0x00000007, 0x0004003B, 0x00000007, 0x0000041E, 0x00000007, 0x0004003B, 0x00000007, +0x00000425, 0x00000007, 0x0004003B, 0x0000000D, 0x0000043E, 0x00000007, 0x0004003B, 0x00000007, +0x00000444, 0x00000007, 0x0004003B, 0x00000007, 0x00000448, 0x00000007, 0x0004003B, 0x00000007, +0x0000044D, 0x00000007, 0x0004003B, 0x00000007, 0x00000453, 0x00000007, 0x0004003B, 0x00000007, +0x00000459, 0x00000007, 0x0004003B, 0x00000086, 0x0000046A, 0x00000007, 0x0004003B, 0x0000000D, +0x0000046B, 0x00000007, 0x0004003B, 0x0000000D, 0x00000474, 0x00000007, 0x0004003B, 0x00000086, +0x00000476, 0x00000007, 0x0004003B, 0x0000000D, 0x00000478, 0x00000007, 0x0004003B, 0x0000000D, +0x0000047C, 0x00000007, 0x0004003B, 0x0000000D, 0x00000481, 0x00000007, 0x0004003B, 0x0000000D, +0x00000485, 0x00000007, 0x0004003B, 0x0000000D, 0x0000048C, 0x00000007, 0x0004003B, 0x00000007, +0x00000492, 0x00000007, 0x0004003B, 0x00000007, 0x00000497, 0x00000007, 0x0004003B, 0x0000000D, +0x00000499, 0x00000007, 0x0004003B, 0x00000007, 0x0000049F, 0x00000007, 0x0004003B, 0x00000007, +0x000004A5, 0x00000007, 0x0004003B, 0x00000007, 0x000004A7, 0x00000007, 0x0004003B, 0x00000007, +0x000004A9, 0x00000007, 0x0004003B, 0x00000007, 0x000004AA, 0x00000007, 0x0004003B, 0x00000007, +0x000004AD, 0x00000007, 0x0004003B, 0x00000007, 0x000004B2, 0x00000007, 0x0004003B, 0x00000007, +0x000004B4, 0x00000007, 0x0004003B, 0x00000007, 0x000004B8, 0x00000007, 0x0004003B, 0x0000000D, +0x000004BA, 0x00000007, 0x0004003B, 0x00000007, 0x000004BC, 0x00000007, 0x0004003B, 0x00000007, +0x000004BE, 0x00000007, 0x0004003B, 0x00000007, 0x000004C0, 0x00000007, 0x0004003B, 0x0000000D, +0x000004C3, 0x00000007, 0x0004003B, 0x00000007, 0x000004C7, 0x00000007, 0x0004003B, 0x00000007, +0x000004C9, 0x00000007, 0x0004003B, 0x00000007, 0x000004CB, 0x00000007, 0x0004003B, 0x00000007, +0x000004CD, 0x00000007, 0x0004003B, 0x0000000D, 0x000004D0, 0x00000007, 0x0004003B, 0x00000007, +0x000004DA, 0x00000007, 0x0004003B, 0x00000007, 0x000004DC, 0x00000007, 0x0003003E, 0x000003EC, +0x000003ED, 0x0003003E, 0x000003EE, 0x000001E9, 0x000200F9, 0x000003EF, 0x000200F8, 0x000003EF, +0x000400F6, 0x000003F1, 0x000003F2, 0x00000000, 0x000200F9, 0x000003F3, 0x000200F8, 0x000003F3, +0x0004003D, 0x00000085, 0x000003F4, 0x000003EE, 0x00050041, 0x0000032D, 0x000003F6, 0x000002CD, +0x000003F5, 0x0004003D, 0x00000085, 0x000003F7, 0x000003F6, 0x000500B1, 0x000001E5, 0x000003F8, +0x000003F4, 0x000003F7, 0x000400FA, 0x000003F8, 0x000003F0, 0x000003F1, 0x000200F8, 0x000003F0, +0x0004003D, 0x00000085, 0x000003FB, 0x000003EE, 0x00060041, 0x000003FC, 0x000003FD, 0x000002CD, +0x000001E9, 0x000003FB, 0x0004003D, 0x000002C4, 0x000003FE, 0x000003FD, 0x00050051, 0x00000012, +0x000003FF, 0x000003FE, 0x00000000, 0x00050041, 0x00000013, 0x00000400, 0x000003FA, 0x000001E9, +0x0003003E, 0x00000400, 0x000003FF, 0x00050051, 0x00000012, 0x00000401, 0x000003FE, 0x00000001, +0x00050041, 0x00000013, 0x00000402, 0x000003FA, 0x000001FF, 0x0003003E, 0x00000402, 0x00000401, +0x00050051, 0x00000012, 0x00000403, 0x000003FE, 0x00000002, 0x00050041, 0x00000013, 0x00000404, +0x000003FA, 0x00000210, 0x0003003E, 0x00000404, 0x00000403, 0x00050051, 0x00000006, 0x00000405, +0x000003FE, 0x00000003, 0x00050041, 0x00000007, 0x00000406, 0x000003FA, 0x0000027E, 0x0003003E, +0x00000406, 0x00000405, 0x00050051, 0x00000006, 0x00000407, 0x000003FE, 0x00000004, 0x00050041, +0x00000007, 0x00000408, 0x000003FA, 0x00000260, 0x0003003E, 0x00000408, 0x00000407, 0x00050051, +0x00000006, 0x00000409, 0x000003FE, 0x00000005, 0x00050041, 0x00000007, 0x0000040A, 0x000003FA, +0x000001E0, 0x0003003E, 0x0000040A, 0x00000409, 0x00050051, 0x00000006, 0x0000040B, 0x000003FE, +0x00000006, 0x00050041, 0x00000007, 0x0000040C, 0x000003FA, 0x0000020A, 0x0003003E, 0x0000040C, +0x0000040B, 0x0003003E, 0x0000040D, 0x000000F8, 0x00050041, 0x00000007, 0x0000040E, 0x000003FA, +0x000001E0, 0x0004003D, 0x00000006, 0x0000040F, 0x0000040E, 0x000500B4, 0x000001E5, 0x00000410, +0x0000040F, 0x00000130, 0x000300F7, 0x00000412, 0x00000000, 0x000400FA, 0x00000410, 0x00000411, +0x00000438, 0x000200F8, 0x00000411, 0x00050041, 0x00000013, 0x00000414, 0x000003FA, 0x000001FF, +0x0004003D, 0x00000012, 0x00000415, 0x00000414, 0x0008004F, 0x0000000C, 0x00000416, 0x00000415, +0x00000415, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x0000000C, 0x00000417, 0x000000CA, +0x00050083, 0x0000000C, 0x00000418, 0x00000416, 0x00000417, 0x0003003E, 0x00000413, 0x00000418, +0x0004003D, 0x0000000C, 0x0000041A, 0x00000413, 0x0006000C, 0x00000006, 0x0000041B, 0x00000001, +0x00000042, 0x0000041A, 0x0003003E, 0x00000419, 0x0000041B, 0x0004003D, 0x0000000C, 0x0000041C, +0x00000413, 0x0006000C, 0x0000000C, 0x0000041D, 0x00000001, 0x00000045, 0x0000041C, 0x0003003E, +0x00000413, 0x0000041D, 0x00050041, 0x00000007, 0x0000041F, 0x000003FA, 0x00000260, 0x0004003D, +0x00000006, 0x00000420, 0x0000041F, 0x0004003D, 0x00000006, 0x00000421, 0x00000419, 0x0007000C, +0x00000006, 0x00000422, 0x00000001, 0x0000001A, 0x00000421, 0x00000130, 0x00050081, 0x00000006, +0x00000423, 0x00000422, 0x000000D5, 0x00050088, 0x00000006, 0x00000424, 0x00000420, 0x00000423, +0x0003003E, 0x0000041E, 0x00000424, 0x0004003D, 0x00000006, 0x00000426, 0x00000419, 0x0004003D, +0x00000006, 0x00000427, 0x00000419, 0x00050085, 0x00000006, 0x00000428, 0x00000426, 0x00000427, +0x00050041, 0x00000007, 0x00000429, 0x000003FA, 0x00000260, 0x0004003D, 0x00000006, 0x0000042A, +0x00000429, 0x00050041, 0x00000007, 0x0000042B, 0x000003FA, 0x00000260, 0x0004003D, 0x00000006, +0x0000042C, 0x0000042B, 0x00050085, 0x00000006, 0x0000042D, 0x0000042A, 0x0000042C, 0x00050088, +0x00000006, 0x0000042E, 0x00000428, 0x0000042D, 0x00050083, 0x00000006, 0x0000042F, 0x000000D5, +0x0000042E, 0x0008000C, 0x00000006, 0x00000430, 0x00000001, 0x0000002B, 0x0000042F, 0x000000F8, +0x000000D5, 0x0003003E, 0x00000425, 0x00000430, 0x0004003D, 0x00000006, 0x00000431, 0x00000425, +0x0003003E, 0x0000040D, 0x00000431, 0x0004003D, 0x0000000C, 0x00000432, 0x00000413, 0x00050051, +0x00000006, 0x00000433, 0x00000432, 0x00000000, 0x00050051, 0x00000006, 0x00000434, 0x00000432, +0x00000001, 0x00050051, 0x00000006, 0x00000435, 0x00000432, 0x00000002, 0x00070050, 0x00000012, +0x00000436, 0x00000433, 0x00000434, 0x00000435, 0x000000D5, 0x00050041, 0x00000013, 0x00000437, +0x000003FA, 0x00000210, 0x0003003E, 0x00000437, 0x00000436, 0x000200F9, 0x00000412, 0x000200F8, +0x00000438, 0x00050041, 0x00000007, 0x00000439, 0x000003FA, 0x000001E0, 0x0004003D, 0x00000006, +0x0000043A, 0x00000439, 0x000500B4, 0x000001E5, 0x0000043B, 0x0000043A, 0x000000D5, 0x000300F7, +0x0000043D, 0x00000000, 0x000400FA, 0x0000043B, 0x0000043C, 0x00000469, 0x000200F8, 0x0000043C, +0x00050041, 0x00000013, 0x0000043F, 0x000003FA, 0x000001FF, 0x0004003D, 0x00000012, 0x00000440, +0x0000043F, 0x0008004F, 0x0000000C, 0x00000441, 0x00000440, 0x00000440, 0x00000000, 0x00000001, +0x00000002, 0x0004003D, 0x0000000C, 0x00000442, 0x000000CA, 0x00050083, 0x0000000C, 0x00000443, +0x00000441, 0x00000442, 0x0003003E, 0x0000043E, 0x00000443, 0x00050041, 0x00000007, 0x00000445, +0x000003FA, 0x0000020A, 0x0004003D, 0x00000006, 0x00000446, 0x00000445, 0x00050083, 0x00000006, +0x00000447, 0x000000D5, 0x00000446, 0x0003003E, 0x00000444, 0x00000447, 0x0004003D, 0x0000000C, +0x00000449, 0x0000043E, 0x0006000C, 0x00000006, 0x0000044A, 0x00000001, 0x00000042, 0x00000449, +0x0003003E, 0x00000448, 0x0000044A, 0x0004003D, 0x0000000C, 0x0000044B, 0x0000043E, 0x0006000C, +0x0000000C, 0x0000044C, 0x00000001, 0x00000045, 0x0000044B, 0x0003003E, 0x0000043E, 0x0000044C, +0x0004003D, 0x0000000C, 0x0000044E, 0x0000043E, 0x00050041, 0x00000013, 0x0000044F, 0x000003FA, +0x00000210, 0x0004003D, 0x00000012, 0x00000450, 0x0000044F, 0x0008004F, 0x0000000C, 0x00000451, +0x00000450, 0x00000450, 0x00000000, 0x00000001, 0x00000002, 0x00050094, 0x00000006, 0x00000452, +0x0000044E, 0x00000451, 0x0003003E, 0x0000044D, 0x00000452, 0x0004003D, 0x00000006, 0x00000454, +0x00000444, 0x0004003D, 0x00000006, 0x00000455, 0x00000444, 0x00050085, 0x00000006, 0x00000457, +0x00000455, 0x00000456, 0x00050083, 0x00000006, 0x00000458, 0x00000454, 0x00000457, 0x0003003E, +0x00000453, 0x00000458, 0x0004003D, 0x00000006, 0x0000045A, 0x0000044D, 0x0004003D, 0x00000006, +0x0000045B, 0x00000444, 0x00050083, 0x00000006, 0x0000045C, 0x0000045A, 0x0000045B, 0x0004003D, +0x00000006, 0x0000045D, 0x00000453, 0x00050088, 0x00000006, 0x0000045E, 0x0000045C, 0x0000045D, +0x0003003E, 0x00000459, 0x0000045E, 0x00050041, 0x00000007, 0x0000045F, 0x000003FA, 0x00000260, +0x0004003D, 0x00000006, 0x00000460, 0x0000045F, 0x0004003D, 0x00000006, 0x00000461, 0x00000448, +0x0007000C, 0x00000006, 0x00000462, 0x00000001, 0x0000001A, 0x00000461, 0x00000130, 0x00050081, +0x00000006, 0x00000463, 0x00000462, 0x000000D5, 0x00050088, 0x00000006, 0x00000464, 0x00000460, +0x00000463, 0x0004003D, 0x00000006, 0x00000465, 0x00000459, 0x00050085, 0x00000006, 0x00000466, +0x00000465, 0x00000464, 0x0003003E, 0x00000459, 0x00000466, 0x0004003D, 0x00000006, 0x00000467, +0x00000459, 0x0008000C, 0x00000006, 0x00000468, 0x00000001, 0x0000002B, 0x00000467, 0x000000F8, +0x000000D5, 0x0003003E, 0x0000040D, 0x00000468, 0x000200F9, 0x0000043D, 0x000200F8, 0x00000469, +0x0004003D, 0x0000000C, 0x0000046C, 0x000000CA, 0x0003003E, 0x0000046B, 0x0000046C, 0x00050039, +0x00000085, 0x0000046D, 0x000000A2, 0x0000046B, 0x0003003E, 0x0000046A, 0x0000046D, 0x00050041, +0x0000032D, 0x0000046F, 0x000002CD, 0x0000046E, 0x0004003D, 0x00000085, 0x00000470, 0x0000046F, +0x000500AD, 0x000001E5, 0x00000471, 0x00000470, 0x000001E9, 0x000300F7, 0x00000473, 0x00000000, +0x000400FA, 0x00000471, 0x00000472, 0x00000480, 0x000200F8, 0x00000472, 0x0004003D, 0x0000000C, +0x00000475, 0x000000CA, 0x0003003E, 0x00000474, 0x00000475, 0x0004003D, 0x00000085, 0x00000477, +0x0000046A, 0x0003003E, 0x00000476, 0x00000477, 0x00050041, 0x00000013, 0x00000479, 0x000003FA, +0x00000210, 0x0004003D, 0x00000012, 0x0000047A, 0x00000479, 0x0008004F, 0x0000000C, 0x0000047B, +0x0000047A, 0x0000047A, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000478, 0x0000047B, +0x00050041, 0x0000000D, 0x0000047D, 0x000000CB, 0x0000020A, 0x0004003D, 0x0000000C, 0x0000047E, +0x0000047D, 0x0003003E, 0x0000047C, 0x0000047E, 0x00080039, 0x00000006, 0x0000047F, 0x000000A9, +0x00000474, 0x00000476, 0x00000478, 0x0000047C, 0x0003003E, 0x0000040D, 0x0000047F, 0x000200F9, +0x00000473, 0x000200F8, 0x00000480, 0x0003003E, 0x0000040D, 0x000000D5, 0x000200F9, 0x00000473, +0x000200F8, 0x00000473, 0x000200F9, 0x0000043D, 0x000200F8, 0x0000043D, 0x000200F9, 0x00000412, +0x000200F8, 0x00000412, 0x00050041, 0x00000013, 0x00000482, 0x000003FA, 0x00000210, 0x0004003D, +0x00000012, 0x00000483, 0x00000482, 0x0008004F, 0x0000000C, 0x00000484, 0x00000483, 0x00000483, +0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000481, 0x00000484, 0x00050041, 0x00000013, +0x00000486, 0x000003FA, 0x000001E9, 0x0004003D, 0x00000012, 0x00000487, 0x00000486, 0x0008004F, +0x0000000C, 0x00000488, 0x00000487, 0x00000487, 0x00000000, 0x00000001, 0x00000002, 0x00050041, +0x00000007, 0x00000489, 0x000003FA, 0x0000027E, 0x0004003D, 0x00000006, 0x0000048A, 0x00000489, +0x0005008E, 0x0000000C, 0x0000048B, 0x00000488, 0x0000048A, 0x0003003E, 0x00000485, 0x0000048B, +0x0004003D, 0x0000000C, 0x0000048D, 0x00000481, 0x00050041, 0x0000000D, 0x0000048E, 0x000000CB, +0x00000278, 0x0004003D, 0x0000000C, 0x0000048F, 0x0000048E, 0x00050081, 0x0000000C, 0x00000490, +0x0000048D, 0x0000048F, 0x0006000C, 0x0000000C, 0x00000491, 0x00000001, 0x00000045, 0x00000490, +0x0003003E, 0x0000048C, 0x00000491, 0x00050041, 0x0000000D, 0x00000493, 0x000000CB, 0x0000020A, +0x0004003D, 0x0000000C, 0x00000494, 0x00000493, 0x0004003D, 0x0000000C, 0x00000495, 0x00000481, +0x00050094, 0x00000006, 0x00000496, 0x00000494, 0x00000495, 0x0003003E, 0x00000497, 0x00000496, +0x00050039, 0x00000006, 0x00000498, 0x00000019, 0x00000497, 0x0003003E, 0x00000492, 0x00000498, +0x00050041, 0x0000000D, 0x0000049A, 0x000000CB, 0x00000278, 0x0004003D, 0x0000000C, 0x0000049B, +0x0000049A, 0x0004003D, 0x0000000C, 0x0000049C, 0x00000481, 0x00050081, 0x0000000C, 0x0000049D, +0x0000049B, 0x0000049C, 0x0006000C, 0x0000000C, 0x0000049E, 0x00000001, 0x00000045, 0x0000049D, +0x0003003E, 0x00000499, 0x0000049E, 0x00050041, 0x0000000D, 0x000004A0, 0x000000CB, 0x0000020A, +0x0004003D, 0x0000000C, 0x000004A1, 0x000004A0, 0x00050041, 0x0000000D, 0x000004A2, 0x000000CB, +0x00000278, 0x0004003D, 0x0000000C, 0x000004A3, 0x000004A2, 0x00050094, 0x00000006, 0x000004A4, +0x000004A1, 0x000004A3, 0x0003003E, 0x000004A5, 0x000004A4, 0x00050039, 0x00000006, 0x000004A6, +0x00000046, 0x000004A5, 0x0003003E, 0x0000049F, 0x000004A6, 0x0004003D, 0x00000006, 0x000004A8, +0x0000049F, 0x0003003E, 0x000004A7, 0x000004A8, 0x0004003D, 0x00000006, 0x000004AB, 0x00000492, +0x0003003E, 0x000004AA, 0x000004AB, 0x00050039, 0x00000006, 0x000004AC, 0x00000019, 0x000004AA, +0x0003003E, 0x000004A9, 0x000004AC, 0x00050041, 0x0000000D, 0x000004AE, 0x000000CB, 0x0000020A, +0x0004003D, 0x0000000C, 0x000004AF, 0x000004AE, 0x0004003D, 0x0000000C, 0x000004B0, 0x00000499, +0x00050094, 0x00000006, 0x000004B1, 0x000004AF, 0x000004B0, 0x0003003E, 0x000004B2, 0x000004B1, +0x00050039, 0x00000006, 0x000004B3, 0x00000019, 0x000004B2, 0x0003003E, 0x000004AD, 0x000004B3, +0x0004003D, 0x0000000C, 0x000004B5, 0x00000481, 0x0004003D, 0x0000000C, 0x000004B6, 0x00000499, +0x00050094, 0x00000006, 0x000004B7, 0x000004B5, 0x000004B6, 0x0003003E, 0x000004B8, 0x000004B7, +0x00050039, 0x00000006, 0x000004B9, 0x00000019, 0x000004B8, 0x0003003E, 0x000004B4, 0x000004B9, +0x0004003D, 0x000000AB, 0x000004BB, 0x000000CB, 0x0004003D, 0x00000006, 0x000004BD, 0x000004A7, +0x0003003E, 0x000004BC, 0x000004BD, 0x0004003D, 0x00000006, 0x000004BF, 0x000004A9, 0x0003003E, +0x000004BE, 0x000004BF, 0x0004003D, 0x00000006, 0x000004C1, 0x000004B4, 0x0003003E, 0x000004C0, +0x000004C1, 0x00080039, 0x0000000C, 0x000004C2, 0x000000BC, 0x000004BB, 0x000004BC, 0x000004BE, +0x000004C0, 0x0003003E, 0x000004BA, 0x000004C2, 0x0004003D, 0x000000AB, 0x000004C4, 0x000000CB, +0x0004003D, 0x000000AC, 0x000004C5, 0x000003FA, 0x0004003D, 0x0000000C, 0x000004C6, 0x00000499, +0x0004003D, 0x00000006, 0x000004C8, 0x000004A7, 0x0003003E, 0x000004C7, 0x000004C8, 0x0004003D, +0x00000006, 0x000004CA, 0x000004A9, 0x0003003E, 0x000004C9, 0x000004CA, 0x0004003D, 0x00000006, +0x000004CC, 0x000004AD, 0x0003003E, 0x000004CB, 0x000004CC, 0x0004003D, 0x00000006, 0x000004CE, +0x000004B4, 0x0003003E, 0x000004CD, 0x000004CE, 0x000B0039, 0x0000000C, 0x000004CF, 0x000000C5, +0x000004C4, 0x000004C5, 0x000004C6, 0x000004C7, 0x000004C9, 0x000004CB, 0x000004CD, 0x0003003E, +0x000004C3, 0x000004CF, 0x0004003D, 0x0000000C, 0x000004D1, 0x000004BA, 0x0004003D, 0x0000000C, +0x000004D2, 0x000004C3, 0x00050081, 0x0000000C, 0x000004D3, 0x000004D1, 0x000004D2, 0x0003003E, +0x000004D0, 0x000004D3, 0x0004003D, 0x0000000C, 0x000004D4, 0x000004D0, 0x0004003D, 0x0000000C, +0x000004D5, 0x00000485, 0x00050085, 0x0000000C, 0x000004D6, 0x000004D4, 0x000004D5, 0x0004003D, +0x00000006, 0x000004D7, 0x0000040D, 0x0004003D, 0x00000006, 0x000004D8, 0x000004A9, 0x00050085, +0x00000006, 0x000004D9, 0x000004D7, 0x000004D8, 0x0004003D, 0x00000006, 0x000004DB, 0x000004A9, +0x0003003E, 0x000004DA, 0x000004DB, 0x00050041, 0x00000007, 0x000004DD, 0x000000CB, 0x00000228, +0x0004003D, 0x00000006, 0x000004DE, 0x000004DD, 0x0003003E, 0x000004DC, 0x000004DE, 0x00060039, +0x00000006, 0x000004DF, 0x0000003D, 0x000004DA, 0x000004DC, 0x00050085, 0x00000006, 0x000004E0, +0x000004D9, 0x000004DF, 0x0005008E, 0x0000000C, 0x000004E1, 0x000004D6, 0x000004E0, 0x0004003D, +0x0000000C, 0x000004E2, 0x000003EC, 0x00050081, 0x0000000C, 0x000004E3, 0x000004E2, 0x000004E1, +0x0003003E, 0x000003EC, 0x000004E3, 0x000200F9, 0x000003F2, 0x000200F8, 0x000003F2, 0x0004003D, +0x00000085, 0x000004E4, 0x000003EE, 0x00050080, 0x00000085, 0x000004E5, 0x000004E4, 0x000001FF, +0x0003003E, 0x000003EE, 0x000004E5, 0x000200F9, 0x000003EF, 0x000200F8, 0x000003F1, 0x0004003D, +0x0000000C, 0x000004E6, 0x000003EC, 0x000200FE, 0x000004E6, 0x00010038, 0x00050036, 0x0000000C, +0x000000D1, 0x00000000, 0x000000C8, 0x00030037, 0x0000000D, 0x000000CE, 0x00030037, 0x0000000D, +0x000000CF, 0x00030037, 0x000000C7, 0x000000D0, 0x000200F8, 0x000000D2, 0x0004003B, 0x0000000D, +0x000004E9, 0x00000007, 0x0004003B, 0x0000000D, 0x000004F3, 0x00000007, 0x0004003B, 0x0000000D, +0x000004F4, 0x00000007, 0x0004003B, 0x00000007, 0x000004F6, 0x00000007, 0x0004003B, 0x00000007, +0x000004F9, 0x00000007, 0x0004003B, 0x0000000D, 0x000004FD, 0x00000007, 0x0004003B, 0x0000000D, +0x00000505, 0x00000007, 0x0004003B, 0x00000086, 0x0000050B, 0x00000007, 0x0004003B, 0x0000000D, +0x0000050F, 0x00000007, 0x0004003B, 0x0000000D, 0x0000051A, 0x00000007, 0x0004003D, 0x000004EB, +0x000004EE, 0x000004ED, 0x00050041, 0x0000000D, 0x000004EF, 0x000000D0, 0x0000020A, 0x0004003D, +0x0000000C, 0x000004F0, 0x000004EF, 0x00050057, 0x00000012, 0x000004F1, 0x000004EE, 0x000004F0, +0x0008004F, 0x0000000C, 0x000004F2, 0x000004F1, 0x000004F1, 0x00000000, 0x00000001, 0x00000002, +0x0003003E, 0x000004E9, 0x000004F2, 0x0004003D, 0x0000000C, 0x000004F5, 0x000000CE, 0x0003003E, +0x000004F4, 0x000004F5, 0x00050041, 0x00000007, 0x000004F7, 0x000000D0, 0x0000025A, 0x0004003D, +0x00000006, 0x000004F8, 0x000004F7, 0x0003003E, 0x000004F6, 0x000004F8, 0x00050041, 0x00000007, +0x000004FA, 0x000000D0, 0x00000210, 0x0004003D, 0x00000006, 0x000004FB, 0x000004FA, 0x0003003E, +0x000004F9, 0x000004FB, 0x00070039, 0x0000000C, 0x000004FC, 0x0000006D, 0x000004F4, 0x000004F6, +0x000004F9, 0x0003003E, 0x000004F3, 0x000004FC, 0x0004003D, 0x0000000C, 0x000004FE, 0x000004F3, +0x00060050, 0x0000000C, 0x000004FF, 0x000000D5, 0x000000D5, 0x000000D5, 0x00050083, 0x0000000C, +0x00000500, 0x000004FF, 0x000004FE, 0x00050041, 0x00000007, 0x00000501, 0x000000D0, 0x000001FF, +0x0004003D, 0x00000006, 0x00000502, 0x00000501, 0x00050083, 0x00000006, 0x00000503, 0x000000D5, +0x00000502, 0x0005008E, 0x0000000C, 0x00000504, 0x00000500, 0x00000503, 0x0003003E, 0x000004FD, +0x00000504, 0x00050041, 0x00000013, 0x00000506, 0x000000D0, 0x000001E9, 0x0004003D, 0x00000012, +0x00000507, 0x00000506, 0x0008004F, 0x0000000C, 0x00000508, 0x00000507, 0x00000507, 0x00000000, +0x00000001, 0x00000002, 0x0004003D, 0x0000000C, 0x00000509, 0x000004E9, 0x00050085, 0x0000000C, +0x0000050A, 0x00000508, 0x00000509, 0x0003003E, 0x00000505, 0x0000050A, 0x00050041, 0x0000032D, +0x0000050D, 0x000002CD, 0x0000050C, 0x0004003D, 0x00000085, 0x0000050E, 0x0000050D, 0x0003003E, +0x0000050B, 0x0000050E, 0x0004003D, 0x000004EB, 0x00000511, 0x00000510, 0x0004003D, 0x0000000C, +0x00000512, 0x000000CF, 0x00050041, 0x00000007, 0x00000513, 0x000000D0, 0x0000027E, 0x0004003D, +0x00000006, 0x00000514, 0x00000513, 0x0004003D, 0x00000085, 0x00000515, 0x0000050B, 0x0004006F, +0x00000006, 0x00000516, 0x00000515, 0x00050085, 0x00000006, 0x00000517, 0x00000514, 0x00000516, +0x00070058, 0x00000012, 0x00000518, 0x00000511, 0x00000512, 0x00000002, 0x00000517, 0x0008004F, +0x0000000C, 0x00000519, 0x00000518, 0x00000518, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, +0x0000050F, 0x00000519, 0x0004003D, 0x0000000C, 0x0000051B, 0x0000050F, 0x0004003D, 0x0000000C, +0x0000051C, 0x000004F3, 0x00060041, 0x00000007, 0x0000051D, 0x000000D0, 0x0000032C, 0x0000023E, +0x0004003D, 0x00000006, 0x0000051E, 0x0000051D, 0x0005008E, 0x0000000C, 0x0000051F, 0x0000051C, +0x0000051E, 0x00060041, 0x00000007, 0x00000521, 0x000000D0, 0x0000032C, 0x00000520, 0x0004003D, +0x00000006, 0x00000522, 0x00000521, 0x00060050, 0x0000000C, 0x00000523, 0x00000522, 0x00000522, +0x00000522, 0x00050081, 0x0000000C, 0x00000524, 0x0000051F, 0x00000523, 0x00050085, 0x0000000C, +0x00000525, 0x0000051B, 0x00000524, 0x0003003E, 0x0000051A, 0x00000525, 0x0004003D, 0x0000000C, +0x00000526, 0x000004FD, 0x0004003D, 0x0000000C, 0x00000527, 0x00000505, 0x00050085, 0x0000000C, +0x00000528, 0x00000526, 0x00000527, 0x0004003D, 0x0000000C, 0x00000529, 0x0000051A, 0x00050081, +0x0000000C, 0x0000052A, 0x00000528, 0x00000529, 0x000200FE, 0x0000052A, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRvertspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRvertspv.hpp index 22f2b6b72..78067fb1c 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRvertspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/ForwardPBRvertspv.hpp @@ -3,87 +3,100 @@ #include #include -constexpr uint32_t spirv_ForwardPBRvertspv_size = 2588; -constexpr std::array spirv_ForwardPBRvertspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000054, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_ForwardPBRvertspv_size = 3004; +constexpr std::array spirv_ForwardPBRvertspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000067, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x000C000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000000F, 0x0000001B, 0x00000027, -0x00000033, 0x0000003A, 0x0000004B, 0x00000051, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, -0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, -0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, -0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, -0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, -0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00050005, -0x0000000D, 0x74726556, 0x61447865, 0x00006174, 0x00050006, 0x0000000D, 0x00000000, 0x6F6C6F43, -0x00007275, 0x00060006, 0x0000000D, 0x00000001, 0x43786554, 0x64726F6F, 0x00000000, 0x00060006, -0x0000000D, 0x00000002, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00050006, 0x0000000D, 0x00000003, -0x6D726F4E, 0x00006C61, 0x00050006, 0x0000000D, 0x00000004, 0x676E6154, 0x00746E65, 0x00070006, -0x0000000D, 0x00000005, 0x64616853, 0x614D776F, 0x6F6F4370, 0x00736472, 0x00060005, 0x0000000F, -0x74726556, 0x754F7865, 0x74757074, 0x00000000, 0x00050005, 0x00000013, 0x68737550, 0x736E6F43, -0x00007374, 0x00060006, 0x00000013, 0x00000000, 0x6E617274, 0x726F6673, 0x0000006D, 0x00050005, -0x00000015, 0x68737570, 0x736E6F43, 0x00007374, 0x00050005, 0x0000001B, 0x6F506E69, 0x69746973, -0x00006E6F, 0x00060005, 0x00000025, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, -0x00000025, 0x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000027, 0x00000000, -0x00030005, 0x00000028, 0x004F4255, 0x00060006, 0x00000028, 0x00000000, 0x6A6F7270, 0x77656956, -0x00000000, 0x00050005, 0x0000002A, 0x656D6163, 0x42556172, 0x0000004F, 0x00040005, 0x00000033, -0x6F436E69, 0x00726F6C, 0x00050005, 0x0000003A, 0x65546E69, 0x6F6F4378, 0x00006472, 0x00050005, -0x0000004B, 0x6F4E6E69, 0x6C616D72, 0x00000000, 0x00050005, 0x00000051, 0x61546E69, 0x6E65676E, -0x00000074, 0x00040047, 0x0000000F, 0x0000001E, 0x00000000, 0x00040048, 0x00000013, 0x00000000, -0x00000005, 0x00050048, 0x00000013, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000013, -0x00000000, 0x00000007, 0x00000010, 0x00030047, 0x00000013, 0x00000002, 0x00040047, 0x0000001B, -0x0000001E, 0x00000000, 0x00050048, 0x00000025, 0x00000000, 0x0000000B, 0x00000000, 0x00030047, -0x00000025, 0x00000002, 0x00040048, 0x00000028, 0x00000000, 0x00000005, 0x00050048, 0x00000028, -0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000028, 0x00000000, 0x00000007, 0x00000010, -0x00030047, 0x00000028, 0x00000002, 0x00040047, 0x0000002A, 0x00000022, 0x00000000, 0x00040047, -0x0000002A, 0x00000021, 0x00000000, 0x00040047, 0x00000033, 0x0000001E, 0x00000001, 0x00040047, -0x0000003A, 0x0000001E, 0x00000002, 0x00040047, 0x0000004B, 0x0000001E, 0x00000003, 0x00040047, -0x00000051, 0x0000001E, 0x00000004, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, -0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000003, 0x00040017, -0x00000008, 0x00000006, 0x00000002, 0x00040017, 0x00000009, 0x00000006, 0x00000004, 0x00040015, -0x0000000A, 0x00000020, 0x00000000, 0x0004002B, 0x0000000A, 0x0000000B, 0x00000004, 0x0004001C, -0x0000000C, 0x00000009, 0x0000000B, 0x0008001E, 0x0000000D, 0x00000007, 0x00000008, 0x00000009, -0x00000007, 0x00000007, 0x0000000C, 0x00040020, 0x0000000E, 0x00000003, 0x0000000D, 0x0004003B, -0x0000000E, 0x0000000F, 0x00000003, 0x00040015, 0x00000010, 0x00000020, 0x00000001, 0x0004002B, -0x00000010, 0x00000011, 0x00000002, 0x00040018, 0x00000012, 0x00000009, 0x00000004, 0x0003001E, -0x00000013, 0x00000012, 0x00040020, 0x00000014, 0x00000009, 0x00000013, 0x0004003B, 0x00000014, -0x00000015, 0x00000009, 0x0004002B, 0x00000010, 0x00000016, 0x00000000, 0x00040020, 0x00000017, -0x00000009, 0x00000012, 0x00040020, 0x0000001A, 0x00000001, 0x00000007, 0x0004003B, 0x0000001A, -0x0000001B, 0x00000001, 0x0004002B, 0x00000006, 0x0000001D, 0x3F800000, 0x00040020, 0x00000023, -0x00000003, 0x00000009, 0x0003001E, 0x00000025, 0x00000009, 0x00040020, 0x00000026, 0x00000003, -0x00000025, 0x0004003B, 0x00000026, 0x00000027, 0x00000003, 0x0003001E, 0x00000028, 0x00000012, -0x00040020, 0x00000029, 0x00000002, 0x00000028, 0x0004003B, 0x00000029, 0x0000002A, 0x00000002, -0x00040020, 0x0000002B, 0x00000002, 0x00000012, 0x00040020, 0x00000032, 0x00000001, 0x00000009, -0x0004003B, 0x00000032, 0x00000033, 0x00000001, 0x00040020, 0x00000036, 0x00000003, 0x00000007, -0x0004002B, 0x00000010, 0x00000038, 0x00000001, 0x00040020, 0x00000039, 0x00000001, 0x00000008, -0x0004003B, 0x00000039, 0x0000003A, 0x00000001, 0x00040020, 0x0000003C, 0x00000003, 0x00000008, -0x0004002B, 0x00000010, 0x0000003E, 0x00000003, 0x00040018, 0x00000041, 0x00000007, 0x00000003, -0x0004003B, 0x0000001A, 0x0000004B, 0x00000001, 0x0004002B, 0x00000010, 0x00000050, 0x00000004, -0x0004003B, 0x0000001A, 0x00000051, 0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, -0x00000003, 0x000200F8, 0x00000005, 0x00050041, 0x00000017, 0x00000018, 0x00000015, 0x00000016, -0x0004003D, 0x00000012, 0x00000019, 0x00000018, 0x0004003D, 0x00000007, 0x0000001C, 0x0000001B, -0x00050051, 0x00000006, 0x0000001E, 0x0000001C, 0x00000000, 0x00050051, 0x00000006, 0x0000001F, -0x0000001C, 0x00000001, 0x00050051, 0x00000006, 0x00000020, 0x0000001C, 0x00000002, 0x00070050, -0x00000009, 0x00000021, 0x0000001E, 0x0000001F, 0x00000020, 0x0000001D, 0x00050091, 0x00000009, -0x00000022, 0x00000019, 0x00000021, 0x00050041, 0x00000023, 0x00000024, 0x0000000F, 0x00000011, -0x0003003E, 0x00000024, 0x00000022, 0x00050041, 0x0000002B, 0x0000002C, 0x0000002A, 0x00000016, -0x0004003D, 0x00000012, 0x0000002D, 0x0000002C, 0x00050041, 0x00000023, 0x0000002E, 0x0000000F, -0x00000011, 0x0004003D, 0x00000009, 0x0000002F, 0x0000002E, 0x00050091, 0x00000009, 0x00000030, -0x0000002D, 0x0000002F, 0x00050041, 0x00000023, 0x00000031, 0x00000027, 0x00000016, 0x0003003E, -0x00000031, 0x00000030, 0x0004003D, 0x00000009, 0x00000034, 0x00000033, 0x0008004F, 0x00000007, -0x00000035, 0x00000034, 0x00000034, 0x00000000, 0x00000001, 0x00000002, 0x00050041, 0x00000036, -0x00000037, 0x0000000F, 0x00000016, 0x0003003E, 0x00000037, 0x00000035, 0x0004003D, 0x00000008, -0x0000003B, 0x0000003A, 0x00050041, 0x0000003C, 0x0000003D, 0x0000000F, 0x00000038, 0x0003003E, -0x0000003D, 0x0000003B, 0x00050041, 0x00000017, 0x0000003F, 0x00000015, 0x00000016, 0x0004003D, -0x00000012, 0x00000040, 0x0000003F, 0x00050051, 0x00000009, 0x00000042, 0x00000040, 0x00000000, -0x0008004F, 0x00000007, 0x00000043, 0x00000042, 0x00000042, 0x00000000, 0x00000001, 0x00000002, -0x00050051, 0x00000009, 0x00000044, 0x00000040, 0x00000001, 0x0008004F, 0x00000007, 0x00000045, -0x00000044, 0x00000044, 0x00000000, 0x00000001, 0x00000002, 0x00050051, 0x00000009, 0x00000046, -0x00000040, 0x00000002, 0x0008004F, 0x00000007, 0x00000047, 0x00000046, 0x00000046, 0x00000000, -0x00000001, 0x00000002, 0x00060050, 0x00000041, 0x00000048, 0x00000043, 0x00000045, 0x00000047, -0x0006000C, 0x00000041, 0x00000049, 0x00000001, 0x00000022, 0x00000048, 0x00040054, 0x00000041, -0x0000004A, 0x00000049, 0x0004003D, 0x00000007, 0x0000004C, 0x0000004B, 0x0006000C, 0x00000007, -0x0000004D, 0x00000001, 0x00000045, 0x0000004C, 0x00050091, 0x00000007, 0x0000004E, 0x0000004A, -0x0000004D, 0x00050041, 0x00000036, 0x0000004F, 0x0000000F, 0x0000003E, 0x0003003E, 0x0000004F, -0x0000004E, 0x0004003D, 0x00000007, 0x00000052, 0x00000051, 0x00050041, 0x00000036, 0x00000053, -0x0000000F, 0x00000050, 0x0003003E, 0x00000053, 0x00000052, 0x000100FD, 0x00010038, +0x000D000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000000D, 0x00000019, 0x00000025, +0x00000031, 0x00000038, 0x0000004B, 0x00000051, 0x00000053, 0x00030003, 0x00000002, 0x000001C2, +0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, +0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, +0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, +0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, +0x64756C63, 0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, +0x00050005, 0x0000000B, 0x74726556, 0x61447865, 0x00006174, 0x00050006, 0x0000000B, 0x00000000, +0x6F6C6F43, 0x00007275, 0x00060006, 0x0000000B, 0x00000001, 0x43786554, 0x64726F6F, 0x00000000, +0x00060006, 0x0000000B, 0x00000002, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00050006, 0x0000000B, +0x00000003, 0x6D726F4E, 0x00006C61, 0x00060006, 0x0000000B, 0x00000004, 0x6C726F57, 0x726F4E64, +0x006C616D, 0x00060005, 0x0000000D, 0x74726556, 0x754F7865, 0x74757074, 0x00000000, 0x00050005, +0x00000011, 0x68737550, 0x736E6F43, 0x00007374, 0x00060006, 0x00000011, 0x00000000, 0x6E617274, +0x726F6673, 0x0000006D, 0x00050005, 0x00000013, 0x68737570, 0x736E6F43, 0x00007374, 0x00050005, +0x00000019, 0x6F506E69, 0x69746973, 0x00006E6F, 0x00060005, 0x00000023, 0x505F6C67, 0x65567265, +0x78657472, 0x00000000, 0x00060006, 0x00000023, 0x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69, +0x00030005, 0x00000025, 0x00000000, 0x00030005, 0x00000026, 0x004F4255, 0x00060006, 0x00000026, +0x00000000, 0x6A6F7270, 0x77656956, 0x00000000, 0x00050005, 0x00000028, 0x656D6163, 0x42556172, +0x0000004F, 0x00040005, 0x00000031, 0x6F436E69, 0x00726F6C, 0x00050005, 0x00000038, 0x65546E69, +0x6F6F4378, 0x00006472, 0x00060005, 0x0000003D, 0x6E617274, 0x736F7073, 0x766E4965, 0x00000000, +0x00050005, 0x0000004B, 0x6F4E6E69, 0x6C616D72, 0x00000000, 0x00050005, 0x00000051, 0x61546E69, +0x6E65676E, 0x00000074, 0x00050005, 0x00000053, 0x69426E69, 0x676E6174, 0x00746E65, 0x00040047, +0x0000000D, 0x0000001E, 0x00000000, 0x00040048, 0x00000011, 0x00000000, 0x00000005, 0x00050048, +0x00000011, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000011, 0x00000000, 0x00000007, +0x00000010, 0x00030047, 0x00000011, 0x00000002, 0x00040047, 0x00000019, 0x0000001E, 0x00000000, +0x00050048, 0x00000023, 0x00000000, 0x0000000B, 0x00000000, 0x00030047, 0x00000023, 0x00000002, +0x00040048, 0x00000026, 0x00000000, 0x00000005, 0x00050048, 0x00000026, 0x00000000, 0x00000023, +0x00000000, 0x00050048, 0x00000026, 0x00000000, 0x00000007, 0x00000010, 0x00030047, 0x00000026, +0x00000002, 0x00040047, 0x00000028, 0x00000022, 0x00000000, 0x00040047, 0x00000028, 0x00000021, +0x00000000, 0x00040047, 0x00000031, 0x0000001E, 0x00000001, 0x00040047, 0x00000038, 0x0000001E, +0x00000002, 0x00040047, 0x0000004B, 0x0000001E, 0x00000003, 0x00040047, 0x00000051, 0x0000001E, +0x00000004, 0x00040047, 0x00000053, 0x0000001E, 0x00000005, 0x00020013, 0x00000002, 0x00030021, +0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, +0x00000003, 0x00040017, 0x00000008, 0x00000006, 0x00000002, 0x00040017, 0x00000009, 0x00000006, +0x00000004, 0x00040018, 0x0000000A, 0x00000007, 0x00000003, 0x0007001E, 0x0000000B, 0x00000007, +0x00000008, 0x00000009, 0x00000007, 0x0000000A, 0x00040020, 0x0000000C, 0x00000003, 0x0000000B, +0x0004003B, 0x0000000C, 0x0000000D, 0x00000003, 0x00040015, 0x0000000E, 0x00000020, 0x00000001, +0x0004002B, 0x0000000E, 0x0000000F, 0x00000002, 0x00040018, 0x00000010, 0x00000009, 0x00000004, +0x0003001E, 0x00000011, 0x00000010, 0x00040020, 0x00000012, 0x00000009, 0x00000011, 0x0004003B, +0x00000012, 0x00000013, 0x00000009, 0x0004002B, 0x0000000E, 0x00000014, 0x00000000, 0x00040020, +0x00000015, 0x00000009, 0x00000010, 0x00040020, 0x00000018, 0x00000001, 0x00000007, 0x0004003B, +0x00000018, 0x00000019, 0x00000001, 0x0004002B, 0x00000006, 0x0000001B, 0x3F800000, 0x00040020, +0x00000021, 0x00000003, 0x00000009, 0x0003001E, 0x00000023, 0x00000009, 0x00040020, 0x00000024, +0x00000003, 0x00000023, 0x0004003B, 0x00000024, 0x00000025, 0x00000003, 0x0003001E, 0x00000026, +0x00000010, 0x00040020, 0x00000027, 0x00000002, 0x00000026, 0x0004003B, 0x00000027, 0x00000028, +0x00000002, 0x00040020, 0x00000029, 0x00000002, 0x00000010, 0x00040020, 0x00000030, 0x00000001, +0x00000009, 0x0004003B, 0x00000030, 0x00000031, 0x00000001, 0x00040020, 0x00000034, 0x00000003, +0x00000007, 0x0004002B, 0x0000000E, 0x00000036, 0x00000001, 0x00040020, 0x00000037, 0x00000001, +0x00000008, 0x0004003B, 0x00000037, 0x00000038, 0x00000001, 0x00040020, 0x0000003A, 0x00000003, +0x00000008, 0x00040020, 0x0000003C, 0x00000007, 0x0000000A, 0x0004002B, 0x0000000E, 0x00000049, +0x00000003, 0x0004003B, 0x00000018, 0x0000004B, 0x00000001, 0x0004002B, 0x0000000E, 0x0000004F, +0x00000004, 0x0004003B, 0x00000018, 0x00000051, 0x00000001, 0x0004003B, 0x00000018, 0x00000053, +0x00000001, 0x0004002B, 0x00000006, 0x00000056, 0x00000000, 0x00040020, 0x00000065, 0x00000003, +0x0000000A, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, +0x0004003B, 0x0000003C, 0x0000003D, 0x00000007, 0x00050041, 0x00000015, 0x00000016, 0x00000013, +0x00000014, 0x0004003D, 0x00000010, 0x00000017, 0x00000016, 0x0004003D, 0x00000007, 0x0000001A, +0x00000019, 0x00050051, 0x00000006, 0x0000001C, 0x0000001A, 0x00000000, 0x00050051, 0x00000006, +0x0000001D, 0x0000001A, 0x00000001, 0x00050051, 0x00000006, 0x0000001E, 0x0000001A, 0x00000002, +0x00070050, 0x00000009, 0x0000001F, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001B, 0x00050091, +0x00000009, 0x00000020, 0x00000017, 0x0000001F, 0x00050041, 0x00000021, 0x00000022, 0x0000000D, +0x0000000F, 0x0003003E, 0x00000022, 0x00000020, 0x00050041, 0x00000029, 0x0000002A, 0x00000028, +0x00000014, 0x0004003D, 0x00000010, 0x0000002B, 0x0000002A, 0x00050041, 0x00000021, 0x0000002C, +0x0000000D, 0x0000000F, 0x0004003D, 0x00000009, 0x0000002D, 0x0000002C, 0x00050091, 0x00000009, +0x0000002E, 0x0000002B, 0x0000002D, 0x00050041, 0x00000021, 0x0000002F, 0x00000025, 0x00000014, +0x0003003E, 0x0000002F, 0x0000002E, 0x0004003D, 0x00000009, 0x00000032, 0x00000031, 0x0008004F, +0x00000007, 0x00000033, 0x00000032, 0x00000032, 0x00000000, 0x00000001, 0x00000002, 0x00050041, +0x00000034, 0x00000035, 0x0000000D, 0x00000014, 0x0003003E, 0x00000035, 0x00000033, 0x0004003D, +0x00000008, 0x00000039, 0x00000038, 0x00050041, 0x0000003A, 0x0000003B, 0x0000000D, 0x00000036, +0x0003003E, 0x0000003B, 0x00000039, 0x00050041, 0x00000015, 0x0000003E, 0x00000013, 0x00000014, +0x0004003D, 0x00000010, 0x0000003F, 0x0000003E, 0x00050051, 0x00000009, 0x00000040, 0x0000003F, +0x00000000, 0x0008004F, 0x00000007, 0x00000041, 0x00000040, 0x00000040, 0x00000000, 0x00000001, +0x00000002, 0x00050051, 0x00000009, 0x00000042, 0x0000003F, 0x00000001, 0x0008004F, 0x00000007, +0x00000043, 0x00000042, 0x00000042, 0x00000000, 0x00000001, 0x00000002, 0x00050051, 0x00000009, +0x00000044, 0x0000003F, 0x00000002, 0x0008004F, 0x00000007, 0x00000045, 0x00000044, 0x00000044, +0x00000000, 0x00000001, 0x00000002, 0x00060050, 0x0000000A, 0x00000046, 0x00000041, 0x00000043, +0x00000045, 0x0006000C, 0x0000000A, 0x00000047, 0x00000001, 0x00000022, 0x00000046, 0x00040054, +0x0000000A, 0x00000048, 0x00000047, 0x0003003E, 0x0000003D, 0x00000048, 0x0004003D, 0x0000000A, +0x0000004A, 0x0000003D, 0x0004003D, 0x00000007, 0x0000004C, 0x0000004B, 0x00050091, 0x00000007, +0x0000004D, 0x0000004A, 0x0000004C, 0x00050041, 0x00000034, 0x0000004E, 0x0000000D, 0x00000049, +0x0003003E, 0x0000004E, 0x0000004D, 0x0004003D, 0x0000000A, 0x00000050, 0x0000003D, 0x0004003D, +0x00000007, 0x00000052, 0x00000051, 0x0004003D, 0x00000007, 0x00000054, 0x00000053, 0x0004003D, +0x00000007, 0x00000055, 0x0000004B, 0x00050051, 0x00000006, 0x00000057, 0x00000052, 0x00000000, +0x00050051, 0x00000006, 0x00000058, 0x00000052, 0x00000001, 0x00050051, 0x00000006, 0x00000059, +0x00000052, 0x00000002, 0x00050051, 0x00000006, 0x0000005A, 0x00000054, 0x00000000, 0x00050051, +0x00000006, 0x0000005B, 0x00000054, 0x00000001, 0x00050051, 0x00000006, 0x0000005C, 0x00000054, +0x00000002, 0x00050051, 0x00000006, 0x0000005D, 0x00000055, 0x00000000, 0x00050051, 0x00000006, +0x0000005E, 0x00000055, 0x00000001, 0x00050051, 0x00000006, 0x0000005F, 0x00000055, 0x00000002, +0x00060050, 0x00000007, 0x00000060, 0x00000057, 0x00000058, 0x00000059, 0x00060050, 0x00000007, +0x00000061, 0x0000005A, 0x0000005B, 0x0000005C, 0x00060050, 0x00000007, 0x00000062, 0x0000005D, +0x0000005E, 0x0000005F, 0x00060050, 0x0000000A, 0x00000063, 0x00000060, 0x00000061, 0x00000062, +0x00050092, 0x0000000A, 0x00000064, 0x00000050, 0x00000063, 0x00050041, 0x00000065, 0x00000066, +0x0000000D, 0x0000004F, 0x0003003E, 0x00000066, 0x00000064, 0x000100FD, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Gridvertspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Gridvertspv.hpp index 0083ba7cc..7743a85cd 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/Gridvertspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Gridvertspv.hpp @@ -3,141 +3,142 @@ #include #include -constexpr uint32_t spirv_Gridvertspv_size = 4288; -constexpr std::array spirv_Gridvertspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x0000008F, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_Gridvertspv_size = 4344; +constexpr std::array spirv_Gridvertspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000090, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0011000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000003C, 0x00000044, 0x0000004B, +0x0012000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000003C, 0x00000044, 0x0000004B, 0x0000004F, 0x00000053, 0x00000055, 0x00000058, 0x0000005F, 0x00000067, 0x00000078, 0x0000008D, -0x0000008E, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, -0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, -0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, -0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, -0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, 0x00657669, -0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x000B0005, 0x00000012, 0x72706E55, 0x63656A6F, -0x696F5074, 0x6628746E, 0x31663B31, 0x3B31663B, 0x3434666D, 0x34666D3B, 0x00003B34, 0x00030005, -0x0000000D, 0x00000078, 0x00030005, 0x0000000E, 0x00000079, 0x00030005, 0x0000000F, 0x0000007A, -0x00040005, 0x00000010, 0x77656976, 0x00000000, 0x00050005, 0x00000011, 0x6A6F7270, 0x69746365, -0x00006E6F, 0x00050005, 0x00000018, 0x64697267, 0x6E616C50, 0x00000065, 0x00040005, 0x00000021, -0x77656976, 0x00766E49, 0x00040005, 0x00000024, 0x6A6F7270, 0x00766E49, 0x00070005, 0x00000028, -0x72706E75, 0x63656A6F, 0x50646574, 0x746E696F, 0x00000000, 0x00050005, 0x0000003A, 0x69736F70, -0x6E6F6974, 0x00000000, 0x00050005, 0x0000003C, 0x6F506E69, 0x69746973, 0x00006E6F, 0x00060005, -0x00000042, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, 0x00000042, 0x00000000, -0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000044, 0x00000000, 0x00060005, 0x0000004B, -0x67617266, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00040005, 0x0000004D, 0x74736574, 0x00000000, -0x00050005, 0x0000004F, 0x6F436E69, 0x72756F6C, 0x00000000, 0x00060005, 0x00000053, 0x67617266, -0x43786554, 0x64726F6F, 0x00000000, 0x00050005, 0x00000055, 0x65546E69, 0x6F6F4378, 0x00006472, -0x00050005, 0x00000058, 0x67617266, 0x77656956, 0x00000000, 0x00030005, 0x00000059, 0x004F4255, -0x00050006, 0x00000059, 0x00000000, 0x77656976, 0x00000000, 0x00050006, 0x00000059, 0x00000001, -0x6A6F7270, 0x00000000, 0x00050006, 0x00000059, 0x00000002, 0x564D5F75, 0x00000050, 0x00030005, -0x0000005B, 0x006F6275, 0x00050005, 0x0000005F, 0x67617266, 0x6A6F7250, 0x00000000, 0x00030005, -0x00000064, 0x00000070, 0x00050005, 0x00000067, 0x7261656E, 0x6E696F50, 0x00000074, 0x00040005, -0x00000068, 0x61726170, 0x0000006D, 0x00040005, 0x0000006C, 0x61726170, 0x0000006D, 0x00040005, -0x00000070, 0x61726170, 0x0000006D, 0x00040005, 0x00000071, 0x61726170, 0x0000006D, 0x00040005, -0x00000074, 0x61726170, 0x0000006D, 0x00050005, 0x00000078, 0x50726166, 0x746E696F, 0x00000000, -0x00040005, 0x00000079, 0x61726170, 0x0000006D, 0x00040005, 0x0000007C, 0x61726170, 0x0000006D, -0x00040005, 0x0000007F, 0x61726170, 0x0000006D, 0x00040005, 0x00000080, 0x61726170, 0x0000006D, -0x00040005, 0x00000083, 0x61726170, 0x0000006D, 0x00050005, 0x0000008D, 0x6F4E6E69, 0x6C616D72, -0x00000000, 0x00050005, 0x0000008E, 0x61546E69, 0x6E65676E, 0x00000074, 0x00040047, 0x0000003C, -0x0000001E, 0x00000000, 0x00050048, 0x00000042, 0x00000000, 0x0000000B, 0x00000000, 0x00030047, -0x00000042, 0x00000002, 0x00040047, 0x0000004B, 0x0000001E, 0x00000000, 0x00040047, 0x0000004F, -0x0000001E, 0x00000001, 0x00040047, 0x00000053, 0x0000001E, 0x00000001, 0x00040047, 0x00000055, -0x0000001E, 0x00000002, 0x00040047, 0x00000058, 0x0000001E, 0x00000004, 0x00040048, 0x00000059, -0x00000000, 0x00000005, 0x00050048, 0x00000059, 0x00000000, 0x00000023, 0x00000000, 0x00050048, -0x00000059, 0x00000000, 0x00000007, 0x00000010, 0x00040048, 0x00000059, 0x00000001, 0x00000005, -0x00050048, 0x00000059, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x00000059, 0x00000001, -0x00000007, 0x00000010, 0x00040048, 0x00000059, 0x00000002, 0x00000005, 0x00050048, 0x00000059, -0x00000002, 0x00000023, 0x00000080, 0x00050048, 0x00000059, 0x00000002, 0x00000007, 0x00000010, -0x00030047, 0x00000059, 0x00000002, 0x00040047, 0x0000005B, 0x00000022, 0x00000000, 0x00040047, -0x0000005B, 0x00000021, 0x00000000, 0x00040047, 0x0000005F, 0x0000001E, 0x00000008, 0x00040047, -0x00000067, 0x0000001E, 0x00000002, 0x00040047, 0x00000078, 0x0000001E, 0x00000003, 0x00040047, -0x0000008D, 0x0000001E, 0x00000003, 0x00040047, 0x0000008E, 0x0000001E, 0x00000004, 0x00020013, -0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040020, -0x00000007, 0x00000007, 0x00000006, 0x00040017, 0x00000008, 0x00000006, 0x00000004, 0x00040018, -0x00000009, 0x00000008, 0x00000004, 0x00040020, 0x0000000A, 0x00000007, 0x00000009, 0x00040017, -0x0000000B, 0x00000006, 0x00000003, 0x00080021, 0x0000000C, 0x0000000B, 0x00000007, 0x00000007, -0x00000007, 0x0000000A, 0x0000000A, 0x00040015, 0x00000014, 0x00000020, 0x00000000, 0x0004002B, -0x00000014, 0x00000015, 0x00000006, 0x0004001C, 0x00000016, 0x0000000B, 0x00000015, 0x00040020, -0x00000017, 0x00000006, 0x00000016, 0x0004003B, 0x00000017, 0x00000018, 0x00000006, 0x0004002B, -0x00000006, 0x00000019, 0x3F800000, 0x0004002B, 0x00000006, 0x0000001A, 0x00000000, 0x0006002C, -0x0000000B, 0x0000001B, 0x00000019, 0x00000019, 0x0000001A, 0x0004002B, 0x00000006, 0x0000001C, -0xBF800000, 0x0006002C, 0x0000000B, 0x0000001D, 0x0000001C, 0x0000001C, 0x0000001A, 0x0006002C, -0x0000000B, 0x0000001E, 0x0000001C, 0x00000019, 0x0000001A, 0x0006002C, 0x0000000B, 0x0000001F, -0x00000019, 0x0000001C, 0x0000001A, 0x0009002C, 0x00000016, 0x00000020, 0x0000001B, 0x0000001D, -0x0000001E, 0x0000001D, 0x0000001B, 0x0000001F, 0x00040020, 0x00000027, 0x00000007, 0x00000008, -0x0004002B, 0x00000014, 0x00000033, 0x00000003, 0x00040020, 0x0000003B, 0x00000001, 0x0000000B, -0x0004003B, 0x0000003B, 0x0000003C, 0x00000001, 0x0003001E, 0x00000042, 0x00000008, 0x00040020, -0x00000043, 0x00000003, 0x00000042, 0x0004003B, 0x00000043, 0x00000044, 0x00000003, 0x00040015, -0x00000045, 0x00000020, 0x00000001, 0x0004002B, 0x00000045, 0x00000046, 0x00000000, 0x00040020, -0x00000048, 0x00000003, 0x00000008, 0x00040020, 0x0000004A, 0x00000003, 0x0000000B, 0x0004003B, -0x0000004A, 0x0000004B, 0x00000003, 0x00040020, 0x0000004E, 0x00000001, 0x00000008, 0x0004003B, -0x0000004E, 0x0000004F, 0x00000001, 0x00040017, 0x00000051, 0x00000006, 0x00000002, 0x00040020, -0x00000052, 0x00000003, 0x00000051, 0x0004003B, 0x00000052, 0x00000053, 0x00000003, 0x00040020, -0x00000054, 0x00000001, 0x00000051, 0x0004003B, 0x00000054, 0x00000055, 0x00000001, 0x00040020, -0x00000057, 0x00000003, 0x00000009, 0x0004003B, 0x00000057, 0x00000058, 0x00000003, 0x0005001E, -0x00000059, 0x00000009, 0x00000009, 0x00000009, 0x00040020, 0x0000005A, 0x00000002, 0x00000059, -0x0004003B, 0x0000005A, 0x0000005B, 0x00000002, 0x00040020, 0x0000005C, 0x00000002, 0x00000009, -0x0004003B, 0x00000057, 0x0000005F, 0x00000003, 0x0004002B, 0x00000045, 0x00000060, 0x00000001, -0x00040020, 0x00000063, 0x00000007, 0x0000000B, 0x0004003B, 0x0000004A, 0x00000067, 0x00000003, -0x0004002B, 0x00000014, 0x00000069, 0x00000000, 0x0004002B, 0x00000014, 0x0000006D, 0x00000001, -0x0004003B, 0x0000004A, 0x00000078, 0x00000003, 0x0004003B, 0x0000003B, 0x0000008D, 0x00000001, -0x0004003B, 0x0000003B, 0x0000008E, 0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, -0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000027, 0x0000003A, 0x00000007, 0x0004003B, -0x00000027, 0x0000004D, 0x00000007, 0x0004003B, 0x00000063, 0x00000064, 0x00000007, 0x0004003B, -0x00000007, 0x00000068, 0x00000007, 0x0004003B, 0x00000007, 0x0000006C, 0x00000007, 0x0004003B, -0x00000007, 0x00000070, 0x00000007, 0x0004003B, 0x0000000A, 0x00000071, 0x00000007, 0x0004003B, -0x0000000A, 0x00000074, 0x00000007, 0x0004003B, 0x00000007, 0x00000079, 0x00000007, 0x0004003B, -0x00000007, 0x0000007C, 0x00000007, 0x0004003B, 0x00000007, 0x0000007F, 0x00000007, 0x0004003B, -0x0000000A, 0x00000080, 0x00000007, 0x0004003B, 0x0000000A, 0x00000083, 0x00000007, 0x0003003E, -0x00000018, 0x00000020, 0x0004003D, 0x0000000B, 0x0000003D, 0x0000003C, 0x00050051, 0x00000006, -0x0000003E, 0x0000003D, 0x00000000, 0x00050051, 0x00000006, 0x0000003F, 0x0000003D, 0x00000001, -0x00050051, 0x00000006, 0x00000040, 0x0000003D, 0x00000002, 0x00070050, 0x00000008, 0x00000041, -0x0000003E, 0x0000003F, 0x00000040, 0x00000019, 0x0003003E, 0x0000003A, 0x00000041, 0x0004003D, -0x00000008, 0x00000047, 0x0000003A, 0x00050041, 0x00000048, 0x00000049, 0x00000044, 0x00000046, -0x0003003E, 0x00000049, 0x00000047, 0x0004003D, 0x0000000B, 0x0000004C, 0x0000003C, 0x0003003E, -0x0000004B, 0x0000004C, 0x0004003D, 0x00000008, 0x00000050, 0x0000004F, 0x0003003E, 0x0000004D, -0x00000050, 0x0004003D, 0x00000051, 0x00000056, 0x00000055, 0x0003003E, 0x00000053, 0x00000056, -0x00050041, 0x0000005C, 0x0000005D, 0x0000005B, 0x00000046, 0x0004003D, 0x00000009, 0x0000005E, -0x0000005D, 0x0003003E, 0x00000058, 0x0000005E, 0x00050041, 0x0000005C, 0x00000061, 0x0000005B, -0x00000060, 0x0004003D, 0x00000009, 0x00000062, 0x00000061, 0x0003003E, 0x0000005F, 0x00000062, -0x0004003D, 0x00000008, 0x00000065, 0x0000003A, 0x0008004F, 0x0000000B, 0x00000066, 0x00000065, -0x00000065, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x00000064, 0x00000066, 0x00050041, -0x00000007, 0x0000006A, 0x00000064, 0x00000069, 0x0004003D, 0x00000006, 0x0000006B, 0x0000006A, -0x0003003E, 0x00000068, 0x0000006B, 0x00050041, 0x00000007, 0x0000006E, 0x00000064, 0x0000006D, -0x0004003D, 0x00000006, 0x0000006F, 0x0000006E, 0x0003003E, 0x0000006C, 0x0000006F, 0x0003003E, -0x00000070, 0x0000001A, 0x00050041, 0x0000005C, 0x00000072, 0x0000005B, 0x00000046, 0x0004003D, -0x00000009, 0x00000073, 0x00000072, 0x0003003E, 0x00000071, 0x00000073, 0x00050041, 0x0000005C, -0x00000075, 0x0000005B, 0x00000060, 0x0004003D, 0x00000009, 0x00000076, 0x00000075, 0x0003003E, -0x00000074, 0x00000076, 0x00090039, 0x0000000B, 0x00000077, 0x00000012, 0x00000068, 0x0000006C, -0x00000070, 0x00000071, 0x00000074, 0x0003003E, 0x00000067, 0x00000077, 0x00050041, 0x00000007, -0x0000007A, 0x00000064, 0x00000069, 0x0004003D, 0x00000006, 0x0000007B, 0x0000007A, 0x0003003E, -0x00000079, 0x0000007B, 0x00050041, 0x00000007, 0x0000007D, 0x00000064, 0x0000006D, 0x0004003D, -0x00000006, 0x0000007E, 0x0000007D, 0x0003003E, 0x0000007C, 0x0000007E, 0x0003003E, 0x0000007F, -0x00000019, 0x00050041, 0x0000005C, 0x00000081, 0x0000005B, 0x00000046, 0x0004003D, 0x00000009, -0x00000082, 0x00000081, 0x0003003E, 0x00000080, 0x00000082, 0x00050041, 0x0000005C, 0x00000084, -0x0000005B, 0x00000060, 0x0004003D, 0x00000009, 0x00000085, 0x00000084, 0x0003003E, 0x00000083, -0x00000085, 0x00090039, 0x0000000B, 0x00000086, 0x00000012, 0x00000079, 0x0000007C, 0x0000007F, -0x00000080, 0x00000083, 0x0003003E, 0x00000078, 0x00000086, 0x0004003D, 0x0000000B, 0x00000087, -0x00000064, 0x00050051, 0x00000006, 0x00000088, 0x00000087, 0x00000000, 0x00050051, 0x00000006, -0x00000089, 0x00000087, 0x00000001, 0x00050051, 0x00000006, 0x0000008A, 0x00000087, 0x00000002, -0x00070050, 0x00000008, 0x0000008B, 0x00000088, 0x00000089, 0x0000008A, 0x00000019, 0x00050041, -0x00000048, 0x0000008C, 0x00000044, 0x00000046, 0x0003003E, 0x0000008C, 0x0000008B, 0x000100FD, -0x00010038, 0x00050036, 0x0000000B, 0x00000012, 0x00000000, 0x0000000C, 0x00030037, 0x00000007, -0x0000000D, 0x00030037, 0x00000007, 0x0000000E, 0x00030037, 0x00000007, 0x0000000F, 0x00030037, -0x0000000A, 0x00000010, 0x00030037, 0x0000000A, 0x00000011, 0x000200F8, 0x00000013, 0x0004003B, -0x0000000A, 0x00000021, 0x00000007, 0x0004003B, 0x0000000A, 0x00000024, 0x00000007, 0x0004003B, -0x00000027, 0x00000028, 0x00000007, 0x0004003D, 0x00000009, 0x00000022, 0x00000010, 0x0006000C, -0x00000009, 0x00000023, 0x00000001, 0x00000022, 0x00000022, 0x0003003E, 0x00000021, 0x00000023, -0x0004003D, 0x00000009, 0x00000025, 0x00000011, 0x0006000C, 0x00000009, 0x00000026, 0x00000001, -0x00000022, 0x00000025, 0x0003003E, 0x00000024, 0x00000026, 0x0004003D, 0x00000009, 0x00000029, -0x00000021, 0x0004003D, 0x00000009, 0x0000002A, 0x00000024, 0x00050092, 0x00000009, 0x0000002B, -0x00000029, 0x0000002A, 0x0004003D, 0x00000006, 0x0000002C, 0x0000000D, 0x0004003D, 0x00000006, -0x0000002D, 0x0000000E, 0x0004003D, 0x00000006, 0x0000002E, 0x0000000F, 0x00070050, 0x00000008, -0x0000002F, 0x0000002C, 0x0000002D, 0x0000002E, 0x00000019, 0x00050091, 0x00000008, 0x00000030, -0x0000002B, 0x0000002F, 0x0003003E, 0x00000028, 0x00000030, 0x0004003D, 0x00000008, 0x00000031, -0x00000028, 0x0008004F, 0x0000000B, 0x00000032, 0x00000031, 0x00000031, 0x00000000, 0x00000001, -0x00000002, 0x00050041, 0x00000007, 0x00000034, 0x00000028, 0x00000033, 0x0004003D, 0x00000006, -0x00000035, 0x00000034, 0x00060050, 0x0000000B, 0x00000036, 0x00000035, 0x00000035, 0x00000035, -0x00050088, 0x0000000B, 0x00000037, 0x00000032, 0x00000036, 0x000200FE, 0x00000037, 0x00010038, - +0x0000008E, 0x0000008F, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, +0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, +0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, +0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, +0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x000B0005, 0x00000012, 0x72706E55, +0x63656A6F, 0x696F5074, 0x6628746E, 0x31663B31, 0x3B31663B, 0x3434666D, 0x34666D3B, 0x00003B34, +0x00030005, 0x0000000D, 0x00000078, 0x00030005, 0x0000000E, 0x00000079, 0x00030005, 0x0000000F, +0x0000007A, 0x00040005, 0x00000010, 0x77656976, 0x00000000, 0x00050005, 0x00000011, 0x6A6F7270, +0x69746365, 0x00006E6F, 0x00050005, 0x00000018, 0x64697267, 0x6E616C50, 0x00000065, 0x00040005, +0x00000021, 0x77656976, 0x00766E49, 0x00040005, 0x00000024, 0x6A6F7270, 0x00766E49, 0x00070005, +0x00000028, 0x72706E75, 0x63656A6F, 0x50646574, 0x746E696F, 0x00000000, 0x00050005, 0x0000003A, +0x69736F70, 0x6E6F6974, 0x00000000, 0x00050005, 0x0000003C, 0x6F506E69, 0x69746973, 0x00006E6F, +0x00060005, 0x00000042, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, 0x00000042, +0x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000044, 0x00000000, 0x00060005, +0x0000004B, 0x67617266, 0x69736F50, 0x6E6F6974, 0x00000000, 0x00040005, 0x0000004D, 0x74736574, +0x00000000, 0x00050005, 0x0000004F, 0x6F436E69, 0x72756F6C, 0x00000000, 0x00060005, 0x00000053, +0x67617266, 0x43786554, 0x64726F6F, 0x00000000, 0x00050005, 0x00000055, 0x65546E69, 0x6F6F4378, +0x00006472, 0x00050005, 0x00000058, 0x67617266, 0x77656956, 0x00000000, 0x00030005, 0x00000059, +0x004F4255, 0x00050006, 0x00000059, 0x00000000, 0x77656976, 0x00000000, 0x00050006, 0x00000059, +0x00000001, 0x6A6F7270, 0x00000000, 0x00050006, 0x00000059, 0x00000002, 0x564D5F75, 0x00000050, +0x00030005, 0x0000005B, 0x006F6275, 0x00050005, 0x0000005F, 0x67617266, 0x6A6F7250, 0x00000000, +0x00030005, 0x00000064, 0x00000070, 0x00050005, 0x00000067, 0x7261656E, 0x6E696F50, 0x00000074, +0x00040005, 0x00000068, 0x61726170, 0x0000006D, 0x00040005, 0x0000006C, 0x61726170, 0x0000006D, +0x00040005, 0x00000070, 0x61726170, 0x0000006D, 0x00040005, 0x00000071, 0x61726170, 0x0000006D, +0x00040005, 0x00000074, 0x61726170, 0x0000006D, 0x00050005, 0x00000078, 0x50726166, 0x746E696F, +0x00000000, 0x00040005, 0x00000079, 0x61726170, 0x0000006D, 0x00040005, 0x0000007C, 0x61726170, +0x0000006D, 0x00040005, 0x0000007F, 0x61726170, 0x0000006D, 0x00040005, 0x00000080, 0x61726170, +0x0000006D, 0x00040005, 0x00000083, 0x61726170, 0x0000006D, 0x00050005, 0x0000008D, 0x6F4E6E69, +0x6C616D72, 0x00000000, 0x00050005, 0x0000008E, 0x61546E69, 0x6E65676E, 0x00000074, 0x00050005, +0x0000008F, 0x69426E69, 0x676E6174, 0x00746E65, 0x00040047, 0x0000003C, 0x0000001E, 0x00000000, +0x00050048, 0x00000042, 0x00000000, 0x0000000B, 0x00000000, 0x00030047, 0x00000042, 0x00000002, +0x00040047, 0x0000004B, 0x0000001E, 0x00000000, 0x00040047, 0x0000004F, 0x0000001E, 0x00000001, +0x00040047, 0x00000053, 0x0000001E, 0x00000001, 0x00040047, 0x00000055, 0x0000001E, 0x00000002, +0x00040047, 0x00000058, 0x0000001E, 0x00000004, 0x00040048, 0x00000059, 0x00000000, 0x00000005, +0x00050048, 0x00000059, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000059, 0x00000000, +0x00000007, 0x00000010, 0x00040048, 0x00000059, 0x00000001, 0x00000005, 0x00050048, 0x00000059, +0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x00000059, 0x00000001, 0x00000007, 0x00000010, +0x00040048, 0x00000059, 0x00000002, 0x00000005, 0x00050048, 0x00000059, 0x00000002, 0x00000023, +0x00000080, 0x00050048, 0x00000059, 0x00000002, 0x00000007, 0x00000010, 0x00030047, 0x00000059, +0x00000002, 0x00040047, 0x0000005B, 0x00000022, 0x00000000, 0x00040047, 0x0000005B, 0x00000021, +0x00000000, 0x00040047, 0x0000005F, 0x0000001E, 0x00000008, 0x00040047, 0x00000067, 0x0000001E, +0x00000002, 0x00040047, 0x00000078, 0x0000001E, 0x00000003, 0x00040047, 0x0000008D, 0x0000001E, +0x00000003, 0x00040047, 0x0000008E, 0x0000001E, 0x00000004, 0x00040047, 0x0000008F, 0x0000001E, +0x00000005, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, +0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00040017, 0x00000008, 0x00000006, +0x00000004, 0x00040018, 0x00000009, 0x00000008, 0x00000004, 0x00040020, 0x0000000A, 0x00000007, +0x00000009, 0x00040017, 0x0000000B, 0x00000006, 0x00000003, 0x00080021, 0x0000000C, 0x0000000B, +0x00000007, 0x00000007, 0x00000007, 0x0000000A, 0x0000000A, 0x00040015, 0x00000014, 0x00000020, +0x00000000, 0x0004002B, 0x00000014, 0x00000015, 0x00000006, 0x0004001C, 0x00000016, 0x0000000B, +0x00000015, 0x00040020, 0x00000017, 0x00000006, 0x00000016, 0x0004003B, 0x00000017, 0x00000018, +0x00000006, 0x0004002B, 0x00000006, 0x00000019, 0x3F800000, 0x0004002B, 0x00000006, 0x0000001A, +0x00000000, 0x0006002C, 0x0000000B, 0x0000001B, 0x00000019, 0x00000019, 0x0000001A, 0x0004002B, +0x00000006, 0x0000001C, 0xBF800000, 0x0006002C, 0x0000000B, 0x0000001D, 0x0000001C, 0x0000001C, +0x0000001A, 0x0006002C, 0x0000000B, 0x0000001E, 0x0000001C, 0x00000019, 0x0000001A, 0x0006002C, +0x0000000B, 0x0000001F, 0x00000019, 0x0000001C, 0x0000001A, 0x0009002C, 0x00000016, 0x00000020, +0x0000001B, 0x0000001D, 0x0000001E, 0x0000001D, 0x0000001B, 0x0000001F, 0x00040020, 0x00000027, +0x00000007, 0x00000008, 0x0004002B, 0x00000014, 0x00000033, 0x00000003, 0x00040020, 0x0000003B, +0x00000001, 0x0000000B, 0x0004003B, 0x0000003B, 0x0000003C, 0x00000001, 0x0003001E, 0x00000042, +0x00000008, 0x00040020, 0x00000043, 0x00000003, 0x00000042, 0x0004003B, 0x00000043, 0x00000044, +0x00000003, 0x00040015, 0x00000045, 0x00000020, 0x00000001, 0x0004002B, 0x00000045, 0x00000046, +0x00000000, 0x00040020, 0x00000048, 0x00000003, 0x00000008, 0x00040020, 0x0000004A, 0x00000003, +0x0000000B, 0x0004003B, 0x0000004A, 0x0000004B, 0x00000003, 0x00040020, 0x0000004E, 0x00000001, +0x00000008, 0x0004003B, 0x0000004E, 0x0000004F, 0x00000001, 0x00040017, 0x00000051, 0x00000006, +0x00000002, 0x00040020, 0x00000052, 0x00000003, 0x00000051, 0x0004003B, 0x00000052, 0x00000053, +0x00000003, 0x00040020, 0x00000054, 0x00000001, 0x00000051, 0x0004003B, 0x00000054, 0x00000055, +0x00000001, 0x00040020, 0x00000057, 0x00000003, 0x00000009, 0x0004003B, 0x00000057, 0x00000058, +0x00000003, 0x0005001E, 0x00000059, 0x00000009, 0x00000009, 0x00000009, 0x00040020, 0x0000005A, +0x00000002, 0x00000059, 0x0004003B, 0x0000005A, 0x0000005B, 0x00000002, 0x00040020, 0x0000005C, +0x00000002, 0x00000009, 0x0004003B, 0x00000057, 0x0000005F, 0x00000003, 0x0004002B, 0x00000045, +0x00000060, 0x00000001, 0x00040020, 0x00000063, 0x00000007, 0x0000000B, 0x0004003B, 0x0000004A, +0x00000067, 0x00000003, 0x0004002B, 0x00000014, 0x00000069, 0x00000000, 0x0004002B, 0x00000014, +0x0000006D, 0x00000001, 0x0004003B, 0x0000004A, 0x00000078, 0x00000003, 0x0004003B, 0x0000003B, +0x0000008D, 0x00000001, 0x0004003B, 0x0000003B, 0x0000008E, 0x00000001, 0x0004003B, 0x0000003B, +0x0000008F, 0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, +0x00000005, 0x0004003B, 0x00000027, 0x0000003A, 0x00000007, 0x0004003B, 0x00000027, 0x0000004D, +0x00000007, 0x0004003B, 0x00000063, 0x00000064, 0x00000007, 0x0004003B, 0x00000007, 0x00000068, +0x00000007, 0x0004003B, 0x00000007, 0x0000006C, 0x00000007, 0x0004003B, 0x00000007, 0x00000070, +0x00000007, 0x0004003B, 0x0000000A, 0x00000071, 0x00000007, 0x0004003B, 0x0000000A, 0x00000074, +0x00000007, 0x0004003B, 0x00000007, 0x00000079, 0x00000007, 0x0004003B, 0x00000007, 0x0000007C, +0x00000007, 0x0004003B, 0x00000007, 0x0000007F, 0x00000007, 0x0004003B, 0x0000000A, 0x00000080, +0x00000007, 0x0004003B, 0x0000000A, 0x00000083, 0x00000007, 0x0003003E, 0x00000018, 0x00000020, +0x0004003D, 0x0000000B, 0x0000003D, 0x0000003C, 0x00050051, 0x00000006, 0x0000003E, 0x0000003D, +0x00000000, 0x00050051, 0x00000006, 0x0000003F, 0x0000003D, 0x00000001, 0x00050051, 0x00000006, +0x00000040, 0x0000003D, 0x00000002, 0x00070050, 0x00000008, 0x00000041, 0x0000003E, 0x0000003F, +0x00000040, 0x00000019, 0x0003003E, 0x0000003A, 0x00000041, 0x0004003D, 0x00000008, 0x00000047, +0x0000003A, 0x00050041, 0x00000048, 0x00000049, 0x00000044, 0x00000046, 0x0003003E, 0x00000049, +0x00000047, 0x0004003D, 0x0000000B, 0x0000004C, 0x0000003C, 0x0003003E, 0x0000004B, 0x0000004C, +0x0004003D, 0x00000008, 0x00000050, 0x0000004F, 0x0003003E, 0x0000004D, 0x00000050, 0x0004003D, +0x00000051, 0x00000056, 0x00000055, 0x0003003E, 0x00000053, 0x00000056, 0x00050041, 0x0000005C, +0x0000005D, 0x0000005B, 0x00000046, 0x0004003D, 0x00000009, 0x0000005E, 0x0000005D, 0x0003003E, +0x00000058, 0x0000005E, 0x00050041, 0x0000005C, 0x00000061, 0x0000005B, 0x00000060, 0x0004003D, +0x00000009, 0x00000062, 0x00000061, 0x0003003E, 0x0000005F, 0x00000062, 0x0004003D, 0x00000008, +0x00000065, 0x0000003A, 0x0008004F, 0x0000000B, 0x00000066, 0x00000065, 0x00000065, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000064, 0x00000066, 0x00050041, 0x00000007, 0x0000006A, +0x00000064, 0x00000069, 0x0004003D, 0x00000006, 0x0000006B, 0x0000006A, 0x0003003E, 0x00000068, +0x0000006B, 0x00050041, 0x00000007, 0x0000006E, 0x00000064, 0x0000006D, 0x0004003D, 0x00000006, +0x0000006F, 0x0000006E, 0x0003003E, 0x0000006C, 0x0000006F, 0x0003003E, 0x00000070, 0x0000001A, +0x00050041, 0x0000005C, 0x00000072, 0x0000005B, 0x00000046, 0x0004003D, 0x00000009, 0x00000073, +0x00000072, 0x0003003E, 0x00000071, 0x00000073, 0x00050041, 0x0000005C, 0x00000075, 0x0000005B, +0x00000060, 0x0004003D, 0x00000009, 0x00000076, 0x00000075, 0x0003003E, 0x00000074, 0x00000076, +0x00090039, 0x0000000B, 0x00000077, 0x00000012, 0x00000068, 0x0000006C, 0x00000070, 0x00000071, +0x00000074, 0x0003003E, 0x00000067, 0x00000077, 0x00050041, 0x00000007, 0x0000007A, 0x00000064, +0x00000069, 0x0004003D, 0x00000006, 0x0000007B, 0x0000007A, 0x0003003E, 0x00000079, 0x0000007B, +0x00050041, 0x00000007, 0x0000007D, 0x00000064, 0x0000006D, 0x0004003D, 0x00000006, 0x0000007E, +0x0000007D, 0x0003003E, 0x0000007C, 0x0000007E, 0x0003003E, 0x0000007F, 0x00000019, 0x00050041, +0x0000005C, 0x00000081, 0x0000005B, 0x00000046, 0x0004003D, 0x00000009, 0x00000082, 0x00000081, +0x0003003E, 0x00000080, 0x00000082, 0x00050041, 0x0000005C, 0x00000084, 0x0000005B, 0x00000060, +0x0004003D, 0x00000009, 0x00000085, 0x00000084, 0x0003003E, 0x00000083, 0x00000085, 0x00090039, +0x0000000B, 0x00000086, 0x00000012, 0x00000079, 0x0000007C, 0x0000007F, 0x00000080, 0x00000083, +0x0003003E, 0x00000078, 0x00000086, 0x0004003D, 0x0000000B, 0x00000087, 0x00000064, 0x00050051, +0x00000006, 0x00000088, 0x00000087, 0x00000000, 0x00050051, 0x00000006, 0x00000089, 0x00000087, +0x00000001, 0x00050051, 0x00000006, 0x0000008A, 0x00000087, 0x00000002, 0x00070050, 0x00000008, +0x0000008B, 0x00000088, 0x00000089, 0x0000008A, 0x00000019, 0x00050041, 0x00000048, 0x0000008C, +0x00000044, 0x00000046, 0x0003003E, 0x0000008C, 0x0000008B, 0x000100FD, 0x00010038, 0x00050036, +0x0000000B, 0x00000012, 0x00000000, 0x0000000C, 0x00030037, 0x00000007, 0x0000000D, 0x00030037, +0x00000007, 0x0000000E, 0x00030037, 0x00000007, 0x0000000F, 0x00030037, 0x0000000A, 0x00000010, +0x00030037, 0x0000000A, 0x00000011, 0x000200F8, 0x00000013, 0x0004003B, 0x0000000A, 0x00000021, +0x00000007, 0x0004003B, 0x0000000A, 0x00000024, 0x00000007, 0x0004003B, 0x00000027, 0x00000028, +0x00000007, 0x0004003D, 0x00000009, 0x00000022, 0x00000010, 0x0006000C, 0x00000009, 0x00000023, +0x00000001, 0x00000022, 0x00000022, 0x0003003E, 0x00000021, 0x00000023, 0x0004003D, 0x00000009, +0x00000025, 0x00000011, 0x0006000C, 0x00000009, 0x00000026, 0x00000001, 0x00000022, 0x00000025, +0x0003003E, 0x00000024, 0x00000026, 0x0004003D, 0x00000009, 0x00000029, 0x00000021, 0x0004003D, +0x00000009, 0x0000002A, 0x00000024, 0x00050092, 0x00000009, 0x0000002B, 0x00000029, 0x0000002A, +0x0004003D, 0x00000006, 0x0000002C, 0x0000000D, 0x0004003D, 0x00000006, 0x0000002D, 0x0000000E, +0x0004003D, 0x00000006, 0x0000002E, 0x0000000F, 0x00070050, 0x00000008, 0x0000002F, 0x0000002C, +0x0000002D, 0x0000002E, 0x00000019, 0x00050091, 0x00000008, 0x00000030, 0x0000002B, 0x0000002F, +0x0003003E, 0x00000028, 0x00000030, 0x0004003D, 0x00000008, 0x00000031, 0x00000028, 0x0008004F, +0x0000000B, 0x00000032, 0x00000031, 0x00000031, 0x00000000, 0x00000001, 0x00000002, 0x00050041, +0x00000007, 0x00000034, 0x00000028, 0x00000033, 0x0004003D, 0x00000006, 0x00000035, 0x00000034, +0x00060050, 0x0000000B, 0x00000036, 0x00000035, 0x00000035, 0x00000035, 0x00050088, 0x0000000B, +0x00000037, 0x00000032, 0x00000036, 0x000200FE, 0x00000037, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOBlurfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOBlurfragspv.hpp new file mode 100644 index 000000000..feade0599 --- /dev/null +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOBlurfragspv.hpp @@ -0,0 +1,110 @@ +// Header generated by Lumos Editor + +#include +#include + +constexpr uint32_t spirv_SSAOBlurfragspv_size = 3244; +constexpr std::array spirv_SSAOBlurfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x0000007D, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000010, 0x00000076, 0x00030010, +0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, +0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, +0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, +0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, +0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00050005, 0x00000008, 0x4472756F, +0x68747065, 0x00000000, 0x00050005, 0x0000000C, 0x445F6E69, 0x68747065, 0x00000000, 0x00050005, +0x00000010, 0x5474756F, 0x6F437865, 0x0064726F, 0x00050005, 0x00000019, 0x4E72756F, 0x616D726F, +0x0000006C, 0x00050005, 0x0000001A, 0x4E5F6E69, 0x616D726F, 0x0000006C, 0x00050005, 0x00000027, +0x706D6173, 0x6F43656C, 0x00746E75, 0x00030005, 0x00000029, 0x006D7573, 0x00030005, 0x0000002B, +0x00000069, 0x00060005, 0x0000002C, 0x66696E55, 0x426D726F, 0x65666675, 0x00000072, 0x00070006, +0x0000002C, 0x00000000, 0x6F617373, 0x65786554, 0x66664F6C, 0x00746573, 0x00070006, 0x0000002C, +0x00000001, 0x6F617373, 0x72756C42, 0x69646152, 0x00007375, 0x00040006, 0x0000002C, 0x00000002, +0x00646170, 0x00030005, 0x0000002E, 0x006F6275, 0x00040005, 0x0000003F, 0x7366666F, 0x00007465, +0x00040005, 0x00000046, 0x74706564, 0x00000068, 0x00040005, 0x0000004D, 0x6D726F6E, 0x00006C61, +0x00040005, 0x00000068, 0x535F6E69, 0x004F4153, 0x00050005, 0x00000076, 0x67617266, 0x6F6C6F43, +0x00007275, 0x00040047, 0x0000000C, 0x00000022, 0x00000000, 0x00040047, 0x0000000C, 0x00000021, +0x00000001, 0x00040047, 0x00000010, 0x0000001E, 0x00000000, 0x00040047, 0x0000001A, 0x00000022, +0x00000000, 0x00040047, 0x0000001A, 0x00000021, 0x00000003, 0x00050048, 0x0000002C, 0x00000000, +0x00000023, 0x00000000, 0x00050048, 0x0000002C, 0x00000001, 0x00000023, 0x00000008, 0x00050048, +0x0000002C, 0x00000002, 0x00000023, 0x0000000C, 0x00030047, 0x0000002C, 0x00000002, 0x00040047, +0x0000002E, 0x00000022, 0x00000000, 0x00040047, 0x0000002E, 0x00000021, 0x00000000, 0x00040047, +0x00000068, 0x00000022, 0x00000000, 0x00040047, 0x00000068, 0x00000021, 0x00000002, 0x00040047, +0x00000076, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, +0x00030016, 0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00090019, +0x00000009, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, +0x0003001B, 0x0000000A, 0x00000009, 0x00040020, 0x0000000B, 0x00000000, 0x0000000A, 0x0004003B, +0x0000000B, 0x0000000C, 0x00000000, 0x00040017, 0x0000000E, 0x00000006, 0x00000002, 0x00040020, +0x0000000F, 0x00000001, 0x0000000E, 0x0004003B, 0x0000000F, 0x00000010, 0x00000001, 0x00040017, +0x00000012, 0x00000006, 0x00000004, 0x00040015, 0x00000014, 0x00000020, 0x00000000, 0x0004002B, +0x00000014, 0x00000015, 0x00000000, 0x00040017, 0x00000017, 0x00000006, 0x00000003, 0x00040020, +0x00000018, 0x00000007, 0x00000017, 0x0004003B, 0x0000000B, 0x0000001A, 0x00000000, 0x0004002B, +0x00000006, 0x0000001F, 0x40000000, 0x0004002B, 0x00000006, 0x00000021, 0x3F800000, 0x00040015, +0x00000025, 0x00000020, 0x00000001, 0x00040020, 0x00000026, 0x00000007, 0x00000025, 0x0004002B, +0x00000025, 0x00000028, 0x00000000, 0x0004002B, 0x00000006, 0x0000002A, 0x00000000, 0x0005001E, +0x0000002C, 0x0000000E, 0x00000025, 0x00000025, 0x00040020, 0x0000002D, 0x00000002, 0x0000002C, +0x0004003B, 0x0000002D, 0x0000002E, 0x00000002, 0x0004002B, 0x00000025, 0x0000002F, 0x00000001, +0x00040020, 0x00000030, 0x00000002, 0x00000025, 0x00020014, 0x0000003C, 0x00040020, 0x0000003E, +0x00000007, 0x0000000E, 0x00040020, 0x00000040, 0x00000002, 0x0000000E, 0x0004002B, 0x00000006, +0x0000005C, 0x37A7C5AC, 0x0004002B, 0x00000006, 0x00000063, 0x3F59999A, 0x0004003B, 0x0000000B, +0x00000068, 0x00000000, 0x00040020, 0x00000075, 0x00000003, 0x00000012, 0x0004003B, 0x00000075, +0x00000076, 0x00000003, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, +0x00000005, 0x0004003B, 0x00000007, 0x00000008, 0x00000007, 0x0004003B, 0x00000018, 0x00000019, +0x00000007, 0x0004003B, 0x00000026, 0x00000027, 0x00000007, 0x0004003B, 0x00000007, 0x00000029, +0x00000007, 0x0004003B, 0x00000026, 0x0000002B, 0x00000007, 0x0004003B, 0x0000003E, 0x0000003F, +0x00000007, 0x0004003B, 0x00000007, 0x00000046, 0x00000007, 0x0004003B, 0x00000018, 0x0000004D, +0x00000007, 0x0004003D, 0x0000000A, 0x0000000D, 0x0000000C, 0x0004003D, 0x0000000E, 0x00000011, +0x00000010, 0x00050057, 0x00000012, 0x00000013, 0x0000000D, 0x00000011, 0x00050051, 0x00000006, +0x00000016, 0x00000013, 0x00000000, 0x0003003E, 0x00000008, 0x00000016, 0x0004003D, 0x0000000A, +0x0000001B, 0x0000001A, 0x0004003D, 0x0000000E, 0x0000001C, 0x00000010, 0x00050057, 0x00000012, +0x0000001D, 0x0000001B, 0x0000001C, 0x0008004F, 0x00000017, 0x0000001E, 0x0000001D, 0x0000001D, +0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000017, 0x00000020, 0x0000001E, 0x0000001F, +0x00060050, 0x00000017, 0x00000022, 0x00000021, 0x00000021, 0x00000021, 0x00050083, 0x00000017, +0x00000023, 0x00000020, 0x00000022, 0x0006000C, 0x00000017, 0x00000024, 0x00000001, 0x00000045, +0x00000023, 0x0003003E, 0x00000019, 0x00000024, 0x0003003E, 0x00000027, 0x00000028, 0x0003003E, +0x00000029, 0x0000002A, 0x00050041, 0x00000030, 0x00000031, 0x0000002E, 0x0000002F, 0x0004003D, +0x00000025, 0x00000032, 0x00000031, 0x0004007E, 0x00000025, 0x00000033, 0x00000032, 0x0003003E, +0x0000002B, 0x00000033, 0x000200F9, 0x00000034, 0x000200F8, 0x00000034, 0x000400F6, 0x00000036, +0x00000037, 0x00000000, 0x000200F9, 0x00000038, 0x000200F8, 0x00000038, 0x0004003D, 0x00000025, +0x00000039, 0x0000002B, 0x00050041, 0x00000030, 0x0000003A, 0x0000002E, 0x0000002F, 0x0004003D, +0x00000025, 0x0000003B, 0x0000003A, 0x000500B3, 0x0000003C, 0x0000003D, 0x00000039, 0x0000003B, +0x000400FA, 0x0000003D, 0x00000035, 0x00000036, 0x000200F8, 0x00000035, 0x00050041, 0x00000040, +0x00000041, 0x0000002E, 0x00000028, 0x0004003D, 0x0000000E, 0x00000042, 0x00000041, 0x0004003D, +0x00000025, 0x00000043, 0x0000002B, 0x0004006F, 0x00000006, 0x00000044, 0x00000043, 0x0005008E, +0x0000000E, 0x00000045, 0x00000042, 0x00000044, 0x0003003E, 0x0000003F, 0x00000045, 0x0004003D, +0x0000000A, 0x00000047, 0x0000000C, 0x0004003D, 0x0000000E, 0x00000048, 0x00000010, 0x0004003D, +0x0000000E, 0x00000049, 0x0000003F, 0x00050081, 0x0000000E, 0x0000004A, 0x00000048, 0x00000049, +0x00050057, 0x00000012, 0x0000004B, 0x00000047, 0x0000004A, 0x00050051, 0x00000006, 0x0000004C, +0x0000004B, 0x00000000, 0x0003003E, 0x00000046, 0x0000004C, 0x0004003D, 0x0000000A, 0x0000004E, +0x0000001A, 0x0004003D, 0x0000000E, 0x0000004F, 0x00000010, 0x0004003D, 0x0000000E, 0x00000050, +0x0000003F, 0x00050081, 0x0000000E, 0x00000051, 0x0000004F, 0x00000050, 0x00050057, 0x00000012, +0x00000052, 0x0000004E, 0x00000051, 0x0008004F, 0x00000017, 0x00000053, 0x00000052, 0x00000052, +0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000017, 0x00000054, 0x00000053, 0x0000001F, +0x00060050, 0x00000017, 0x00000055, 0x00000021, 0x00000021, 0x00000021, 0x00050083, 0x00000017, +0x00000056, 0x00000054, 0x00000055, 0x0006000C, 0x00000017, 0x00000057, 0x00000001, 0x00000045, +0x00000056, 0x0003003E, 0x0000004D, 0x00000057, 0x0004003D, 0x00000006, 0x00000058, 0x00000008, +0x0004003D, 0x00000006, 0x00000059, 0x00000046, 0x00050083, 0x00000006, 0x0000005A, 0x00000058, +0x00000059, 0x0006000C, 0x00000006, 0x0000005B, 0x00000001, 0x00000004, 0x0000005A, 0x000500B8, +0x0000003C, 0x0000005D, 0x0000005B, 0x0000005C, 0x000300F7, 0x0000005F, 0x00000000, 0x000400FA, +0x0000005D, 0x0000005E, 0x0000005F, 0x000200F8, 0x0000005E, 0x0004003D, 0x00000017, 0x00000060, +0x00000019, 0x0004003D, 0x00000017, 0x00000061, 0x0000004D, 0x00050094, 0x00000006, 0x00000062, +0x00000060, 0x00000061, 0x000500BA, 0x0000003C, 0x00000064, 0x00000062, 0x00000063, 0x000200F9, +0x0000005F, 0x000200F8, 0x0000005F, 0x000700F5, 0x0000003C, 0x00000065, 0x0000005D, 0x00000035, +0x00000064, 0x0000005E, 0x000300F7, 0x00000067, 0x00000000, 0x000400FA, 0x00000065, 0x00000066, +0x00000067, 0x000200F8, 0x00000066, 0x0004003D, 0x0000000A, 0x00000069, 0x00000068, 0x0004003D, +0x0000000E, 0x0000006A, 0x00000010, 0x0004003D, 0x0000000E, 0x0000006B, 0x0000003F, 0x00050081, +0x0000000E, 0x0000006C, 0x0000006A, 0x0000006B, 0x00050057, 0x00000012, 0x0000006D, 0x00000069, +0x0000006C, 0x00050051, 0x00000006, 0x0000006E, 0x0000006D, 0x00000000, 0x0004003D, 0x00000006, +0x0000006F, 0x00000029, 0x00050081, 0x00000006, 0x00000070, 0x0000006F, 0x0000006E, 0x0003003E, +0x00000029, 0x00000070, 0x0004003D, 0x00000025, 0x00000071, 0x00000027, 0x00050080, 0x00000025, +0x00000072, 0x00000071, 0x0000002F, 0x0003003E, 0x00000027, 0x00000072, 0x000200F9, 0x00000067, +0x000200F8, 0x00000067, 0x000200F9, 0x00000037, 0x000200F8, 0x00000037, 0x0004003D, 0x00000025, +0x00000073, 0x0000002B, 0x00050080, 0x00000025, 0x00000074, 0x00000073, 0x0000002F, 0x0003003E, +0x0000002B, 0x00000074, 0x000200F9, 0x00000034, 0x000200F8, 0x00000036, 0x0004003D, 0x00000006, +0x00000077, 0x00000029, 0x0004003D, 0x00000025, 0x00000078, 0x00000027, 0x0004006F, 0x00000006, +0x00000079, 0x00000078, 0x00050088, 0x00000006, 0x0000007A, 0x00000077, 0x00000079, 0x0008000C, +0x00000006, 0x0000007B, 0x00000001, 0x0000002B, 0x0000007A, 0x0000002A, 0x00000021, 0x00070050, +0x00000012, 0x0000007C, 0x0000007B, 0x0000007B, 0x0000007B, 0x0000007B, 0x0003003E, 0x00000076, +0x0000007C, 0x000100FD, 0x00010038, + }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOfragspv.hpp index b1c5245c4..76d977601 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/SSAOfragspv.hpp @@ -3,262 +3,274 @@ #include #include -constexpr uint32_t spirv_SSAOfragspv_size = 8172; -constexpr std::array spirv_SSAOfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000168, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, -0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x000000EF, 0x00000161, 0x00030010, -0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, -0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, -0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, -0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, -0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, -0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000B, 0x75746173, -0x65746172, 0x32667628, 0x0000003B, 0x00040005, 0x0000000A, 0x6F6C6F63, 0x00007275, 0x00060005, -0x0000000F, 0x64616572, 0x74706544, 0x66762868, 0x00003B32, 0x00040005, 0x0000000E, 0x726F6F63, -0x00000064, 0x000B0005, 0x0000001A, 0x6F636572, 0x7274736E, 0x5F746375, 0x69736F70, 0x6E6F6974, -0x32667628, 0x3B31663B, 0x3434666D, 0x0000003B, 0x00030005, 0x00000017, 0x00007675, 0x00030005, -0x00000018, 0x0000007A, 0x00080005, 0x00000019, 0x65766E69, 0x5F657372, 0x77656976, 0x6F72705F, -0x7463656A, 0x006E6F69, 0x00080005, 0x0000001F, 0x6D726F6E, 0x72466C61, 0x65446D6F, 0x28687470, -0x763B3166, 0x003B3266, 0x00040005, 0x0000001D, 0x74706564, 0x00000068, 0x00050005, 0x0000001E, -0x43786574, 0x64726F6F, 0x00000073, 0x00070005, 0x00000025, 0x6C666572, 0x69746365, 0x76286E6F, -0x763B3366, 0x003B3366, 0x00030005, 0x00000023, 0x00003176, 0x00030005, 0x00000024, 0x00003276, -0x00070005, 0x00000032, 0x74706544, 0x78655468, 0x65727574, 0x706D6153, 0x0072656C, 0x00050005, -0x0000003A, 0x656D6163, 0x61526172, 0x0065676E, 0x00030005, 0x00000056, 0x00000078, 0x00030005, -0x0000005B, 0x00000079, 0x00050005, 0x00000062, 0x69736F70, 0x6E6F6974, 0x0000735F, 0x00050005, -0x00000067, 0x69736F70, 0x6E6F6974, 0x0000765F, 0x00040005, 0x00000074, 0x74706564, 0x00003168, -0x00040005, 0x00000079, 0x61726170, 0x0000006D, 0x00040005, 0x0000007B, 0x74706564, 0x00003268, -0x00040005, 0x0000007F, 0x61726170, 0x0000006D, 0x00030005, 0x00000081, 0x00003170, 0x00030005, -0x00000088, 0x00003270, 0x00040005, 0x0000008F, 0x6D726F6E, 0x00006C61, 0x00040005, 0x0000009C, -0x75736572, 0x0000746C, 0x00060005, 0x000000AC, 0x706D6173, 0x735F656C, 0x72656870, 0x00000065, -0x00040005, 0x000000ED, 0x74706564, 0x00000068, 0x00050005, 0x000000EF, 0x5474756F, 0x6F437865, -0x0064726F, 0x00040005, 0x000000F0, 0x61726170, 0x0000006D, 0x00040005, 0x000000F3, 0x646E6172, -0x00006D6F, 0x00060005, 0x000000F4, 0x73696F4E, 0x6D615365, 0x72656C70, 0x00000000, 0x00050005, -0x000000FC, 0x69736F70, 0x6E6F6974, 0x00000000, 0x00060005, 0x000000FD, 0x66696E55, 0x426D726F, -0x65666675, 0x00000072, 0x00050006, 0x000000FD, 0x00000000, 0x50766E69, 0x006A6F72, 0x00050006, -0x000000FD, 0x00000001, 0x7261656E, 0x00000000, 0x00040006, 0x000000FD, 0x00000002, 0x00726166, -0x00040006, 0x000000FD, 0x00000003, 0x00003070, 0x00040006, 0x000000FD, 0x00000004, 0x00003170, -0x00030005, 0x000000FF, 0x006F6275, 0x00040005, 0x00000102, 0x61726170, 0x0000006D, 0x00040005, -0x00000104, 0x61726170, 0x0000006D, 0x00040005, 0x00000106, 0x61726170, 0x0000006D, 0x00040005, -0x0000010B, 0x6D726F6E, 0x00006C61, 0x00040005, 0x0000010C, 0x61726170, 0x0000006D, 0x00040005, -0x0000010E, 0x61726170, 0x0000006D, 0x00060005, 0x00000115, 0x69646172, 0x645F7375, 0x68747065, -0x00000000, 0x00050005, 0x00000119, 0x6C63636F, 0x6F697375, 0x0000006E, 0x00030005, 0x0000011B, -0x00000069, 0x00030005, 0x00000125, 0x00796172, 0x00040005, 0x00000128, 0x61726170, 0x0000006D, -0x00040005, 0x0000012B, 0x61726170, 0x0000006D, 0x00050005, 0x0000012F, 0x696D6568, 0x7961725F, -0x00000000, 0x00050005, 0x00000138, 0x5F63636F, 0x74706564, 0x00000068, 0x00040005, 0x00000139, -0x61726170, 0x0000006D, 0x00040005, 0x0000013D, 0x61726170, 0x0000006D, 0x00050005, 0x0000013F, -0x66666964, 0x6E657265, 0x00006563, 0x00030005, 0x00000150, 0x00006F61, 0x00040005, 0x00000156, -0x616E6966, 0x0000006C, 0x00040005, 0x0000015B, 0x6F617373, 0x00000000, 0x00040005, 0x00000161, -0x4674756F, 0x00676172, 0x00040047, 0x00000032, 0x00000022, 0x00000000, 0x00040047, 0x00000032, -0x00000021, 0x00000001, 0x00040047, 0x000000EF, 0x0000001E, 0x00000000, 0x00040047, 0x000000F4, -0x00000022, 0x00000000, 0x00040047, 0x000000F4, 0x00000021, 0x00000002, 0x00040048, 0x000000FD, -0x00000000, 0x00000005, 0x00050048, 0x000000FD, 0x00000000, 0x00000023, 0x00000000, 0x00050048, -0x000000FD, 0x00000000, 0x00000007, 0x00000010, 0x00050048, 0x000000FD, 0x00000001, 0x00000023, -0x00000040, 0x00050048, 0x000000FD, 0x00000002, 0x00000023, 0x00000044, 0x00050048, 0x000000FD, -0x00000003, 0x00000023, 0x00000048, 0x00050048, 0x000000FD, 0x00000004, 0x00000023, 0x0000004C, -0x00030047, 0x000000FD, 0x00000002, 0x00040047, 0x000000FF, 0x00000022, 0x00000000, 0x00040047, -0x000000FF, 0x00000021, 0x00000000, 0x00040047, 0x00000161, 0x0000001E, 0x00000000, 0x00020013, -0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, -0x00000007, 0x00000006, 0x00000002, 0x00040020, 0x00000008, 0x00000007, 0x00000007, 0x00040021, -0x00000009, 0x00000007, 0x00000008, 0x00040021, 0x0000000D, 0x00000006, 0x00000008, 0x00040020, -0x00000011, 0x00000007, 0x00000006, 0x00040017, 0x00000012, 0x00000006, 0x00000004, 0x00040018, -0x00000013, 0x00000012, 0x00000004, 0x00040020, 0x00000014, 0x00000007, 0x00000013, 0x00040017, -0x00000015, 0x00000006, 0x00000003, 0x00060021, 0x00000016, 0x00000015, 0x00000008, 0x00000011, -0x00000014, 0x00050021, 0x0000001C, 0x00000015, 0x00000011, 0x00000008, 0x00040020, 0x00000021, -0x00000007, 0x00000015, 0x00050021, 0x00000022, 0x00000015, 0x00000021, 0x00000021, 0x0004002B, -0x00000006, 0x00000028, 0x00000000, 0x0004002B, 0x00000006, 0x00000029, 0x3F800000, 0x00090019, -0x0000002F, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, -0x0003001B, 0x00000030, 0x0000002F, 0x00040020, 0x00000031, 0x00000000, 0x00000030, 0x0004003B, -0x00000031, 0x00000032, 0x00000000, 0x00040015, 0x00000036, 0x00000020, 0x00000000, 0x0004002B, -0x00000036, 0x00000037, 0x00000000, 0x0004002B, 0x00000006, 0x0000003B, 0x3C23D70A, 0x0004002B, -0x00000006, 0x0000003C, 0x447A0000, 0x0005002C, 0x00000007, 0x0000003D, 0x0000003B, 0x0000003C, -0x0004002B, 0x00000006, 0x0000003E, 0x40000000, 0x0004002B, 0x00000036, 0x00000042, 0x00000001, -0x00040020, 0x00000061, 0x00000007, 0x00000012, 0x0004002B, 0x00000036, 0x0000006D, 0x00000003, -0x0004002B, 0x00000006, 0x00000076, 0x3A83126F, 0x0005002C, 0x00000007, 0x00000077, 0x00000028, -0x00000076, 0x0005002C, 0x00000007, 0x0000007D, 0x00000076, 0x00000028, 0x0004002B, 0x00000036, -0x00000093, 0x00000002, 0x0004002B, 0x00000036, 0x000000A9, 0x00000010, 0x0004001C, 0x000000AA, -0x00000015, 0x000000A9, 0x00040020, 0x000000AB, 0x00000007, 0x000000AA, 0x0004002B, 0x00000006, -0x000000AD, 0x3F09C0EC, 0x0004002B, 0x00000006, 0x000000AE, 0x3E3E0DED, 0x0004002B, 0x00000006, -0x000000AF, 0xBEDD21FF, 0x0006002C, 0x00000015, 0x000000B0, 0x000000AD, 0x000000AE, 0x000000AF, -0x0004002B, 0x00000006, 0x000000B1, 0x3E0D35A8, 0x0004002B, 0x00000006, 0x000000B2, 0x3E7E9100, -0x0004002B, 0x00000006, 0x000000B3, 0x3EE2D0E5, 0x0006002C, 0x00000015, 0x000000B4, 0x000000B1, -0x000000B2, 0x000000B3, 0x0004002B, 0x00000006, 0x000000B5, 0x3EAC985F, 0x0004002B, 0x00000006, -0x000000B6, 0x3F1161E5, 0x0004002B, 0x00000006, 0x000000B7, 0xBBBAC711, 0x0006002C, 0x00000015, -0x000000B8, 0x000000B5, 0x000000B6, 0x000000B7, 0x0004002B, 0x00000006, 0x000000B9, 0xBF332CA5, -0x0004002B, 0x00000006, 0x000000BA, 0xBD38BAC7, 0x0004002B, 0x00000006, 0x000000BB, 0xBAF9096C, -0x0006002C, 0x00000015, 0x000000BC, 0x000000B9, 0x000000BA, 0x000000BB, 0x0004002B, 0x00000006, -0x000000BD, 0x3D8D1B71, 0x0004002B, 0x00000006, 0x000000BE, 0xBE23A29C, 0x0004002B, 0x00000006, -0x000000BF, 0xBF5ACD9F, 0x0006002C, 0x00000015, 0x000000C0, 0x000000BD, 0x000000BE, 0x000000BF, -0x0004002B, 0x00000006, 0x000000C1, 0x3D656042, 0x0004002B, 0x00000006, 0x000000C2, 0x3BE21965, -0x0004002B, 0x00000006, 0x000000C3, 0xBE3CB924, 0x0006002C, 0x00000015, 0x000000C4, 0x000000C1, -0x000000C2, 0x000000C3, 0x0004002B, 0x00000006, 0x000000C5, 0xBC6F34D7, 0x0004002B, 0x00000006, -0x000000C6, 0x3E0F9097, 0x0004002B, 0x00000006, 0x000000C7, 0x3D9C0EBF, 0x0006002C, 0x00000015, -0x000000C8, 0x000000C5, 0x000000C6, 0x000000C7, 0x0004002B, 0x00000006, 0x000000C9, 0xBE450481, -0x0004002B, 0x00000006, 0x000000CA, 0xBD0CE704, 0x0006002C, 0x00000015, 0x000000CB, 0x0000003B, -0x000000C9, 0x000000CA, 0x0004002B, 0x00000006, 0x000000CC, 0xBEB72474, 0x0004002B, 0x00000006, -0x000000CD, 0xBF07B4A2, 0x0004002B, 0x00000006, 0x000000CE, 0xBEDF212D, 0x0006002C, 0x00000015, -0x000000CF, 0x000000CC, 0x000000CD, 0x000000CE, 0x0004002B, 0x00000006, 0x000000D0, 0xBEA240B8, -0x0004002B, 0x00000006, 0x000000D1, 0x3DD9B3D0, 0x0004002B, 0x00000006, 0x000000D2, 0x3C816F00, -0x0006002C, 0x00000015, 0x000000D3, 0x000000D0, 0x000000D1, 0x000000D2, 0x0004002B, 0x00000006, -0x000000D4, 0x3C28C155, 0x0004002B, 0x00000006, 0x000000D5, 0xBF163F14, 0x0004002B, 0x00000006, -0x000000D6, 0x3B96BB99, 0x0006002C, 0x00000015, 0x000000D7, 0x000000D4, 0x000000D5, 0x000000D6, -0x0004002B, 0x00000006, 0x000000D8, 0xBDB7B4A2, 0x0004002B, 0x00000006, 0x000000D9, 0xBEFCED91, -0x0004002B, 0x00000006, 0x000000DA, 0x3EA84B5E, 0x0006002C, 0x00000015, 0x000000DB, 0x000000D8, -0x000000D9, 0x000000DA, 0x0004002B, 0x00000006, 0x000000DC, 0x3F363F14, 0x0004002B, 0x00000006, -0x000000DD, 0xBC7C5048, 0x0004002B, 0x00000006, 0x000000DE, 0xBDBC01A3, 0x0006002C, 0x00000015, -0x000000DF, 0x000000DC, 0x000000DD, 0x000000DE, 0x0004002B, 0x00000006, 0x000000E0, 0xBD5A511A, -0x0004002B, 0x00000006, 0x000000E1, 0x3D741F21, 0x0004002B, 0x00000006, 0x000000E2, 0xBF0A8588, -0x0006002C, 0x00000015, 0x000000E3, 0x000000E0, 0x000000E1, 0x000000E2, 0x0004002B, 0x00000006, -0x000000E4, 0x3D102DE0, 0x0004002B, 0x00000006, 0x000000E5, 0xBD813A93, 0x0004002B, 0x00000006, -0x000000E6, 0x3F0BC6A8, 0x0006002C, 0x00000015, 0x000000E7, 0x000000E4, 0x000000E5, 0x000000E6, -0x0004002B, 0x00000006, 0x000000E8, 0xBEF487FD, 0x0004002B, 0x00000006, 0x000000E9, 0x3E91C433, -0x0004002B, 0x00000006, 0x000000EA, 0xBCDE00D2, 0x0006002C, 0x00000015, 0x000000EB, 0x000000E8, -0x000000E9, 0x000000EA, 0x0013002C, 0x000000AA, 0x000000EC, 0x000000B0, 0x000000B4, 0x000000B8, -0x000000BC, 0x000000C0, 0x000000C4, 0x000000C8, 0x000000CB, 0x000000CF, 0x000000D3, 0x000000D7, -0x000000DB, 0x000000DF, 0x000000E3, 0x000000E7, 0x000000EB, 0x00040020, 0x000000EE, 0x00000001, -0x00000007, 0x0004003B, 0x000000EE, 0x000000EF, 0x00000001, 0x0004003B, 0x00000031, 0x000000F4, -0x00000000, 0x0004002B, 0x00000006, 0x000000F7, 0x40800000, 0x0007001E, 0x000000FD, 0x00000013, -0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00040020, 0x000000FE, 0x00000002, 0x000000FD, -0x0004003B, 0x000000FE, 0x000000FF, 0x00000002, 0x00040015, 0x00000100, 0x00000020, 0x00000001, -0x0004002B, 0x00000100, 0x00000101, 0x00000000, 0x00040020, 0x00000107, 0x00000002, 0x00000013, -0x0004002B, 0x00000006, 0x00000116, 0x3951B717, 0x00040020, 0x0000011A, 0x00000007, 0x00000100, -0x0004002B, 0x00000100, 0x00000122, 0x00000010, 0x00020014, 0x00000123, 0x0004002B, 0x00000006, -0x00000143, 0x358637BD, 0x0004002B, 0x00000006, 0x00000146, 0x3BF5C28F, 0x0004002B, 0x00000100, -0x0000014E, 0x00000001, 0x0004002B, 0x00000006, 0x00000153, 0x3D800000, 0x0004002B, 0x00000006, -0x00000158, 0x3E4CCCCD, 0x00040020, 0x00000160, 0x00000003, 0x00000012, 0x0004003B, 0x00000160, -0x00000161, 0x00000003, 0x0004002B, 0x00000006, 0x00000167, 0x3DCCCCCD, 0x00050036, 0x00000002, -0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x000000AB, 0x000000AC, -0x00000007, 0x0004003B, 0x00000011, 0x000000ED, 0x00000007, 0x0004003B, 0x00000008, 0x000000F0, -0x00000007, 0x0004003B, 0x00000021, 0x000000F3, 0x00000007, 0x0004003B, 0x00000021, 0x000000FC, -0x00000007, 0x0004003B, 0x00000008, 0x00000102, 0x00000007, 0x0004003B, 0x00000011, 0x00000104, -0x00000007, 0x0004003B, 0x00000014, 0x00000106, 0x00000007, 0x0004003B, 0x00000021, 0x0000010B, -0x00000007, 0x0004003B, 0x00000011, 0x0000010C, 0x00000007, 0x0004003B, 0x00000008, 0x0000010E, -0x00000007, 0x0004003B, 0x00000011, 0x00000115, 0x00000007, 0x0004003B, 0x00000011, 0x00000119, -0x00000007, 0x0004003B, 0x0000011A, 0x0000011B, 0x00000007, 0x0004003B, 0x00000021, 0x00000125, -0x00000007, 0x0004003B, 0x00000021, 0x00000128, 0x00000007, 0x0004003B, 0x00000021, 0x0000012B, -0x00000007, 0x0004003B, 0x00000021, 0x0000012F, 0x00000007, 0x0004003B, 0x00000011, 0x00000138, -0x00000007, 0x0004003B, 0x00000008, 0x00000139, 0x00000007, 0x0004003B, 0x00000008, 0x0000013D, -0x00000007, 0x0004003B, 0x00000011, 0x0000013F, 0x00000007, 0x0004003B, 0x00000011, 0x00000150, -0x00000007, 0x0004003B, 0x00000011, 0x00000156, 0x00000007, 0x0004003B, 0x00000061, 0x0000015B, -0x00000007, 0x0003003E, 0x000000AC, 0x000000EC, 0x0004003D, 0x00000007, 0x000000F1, 0x000000EF, -0x0003003E, 0x000000F0, 0x000000F1, 0x00050039, 0x00000006, 0x000000F2, 0x0000000F, 0x000000F0, -0x0003003E, 0x000000ED, 0x000000F2, 0x0004003D, 0x00000030, 0x000000F5, 0x000000F4, 0x0004003D, -0x00000007, 0x000000F6, 0x000000EF, 0x0005008E, 0x00000007, 0x000000F8, 0x000000F6, 0x000000F7, -0x00050057, 0x00000012, 0x000000F9, 0x000000F5, 0x000000F8, 0x0008004F, 0x00000015, 0x000000FA, -0x000000F9, 0x000000F9, 0x00000000, 0x00000001, 0x00000002, 0x0006000C, 0x00000015, 0x000000FB, -0x00000001, 0x00000045, 0x000000FA, 0x0003003E, 0x000000F3, 0x000000FB, 0x0004003D, 0x00000007, -0x00000103, 0x000000EF, 0x0003003E, 0x00000102, 0x00000103, 0x0004003D, 0x00000006, 0x00000105, -0x000000ED, 0x0003003E, 0x00000104, 0x00000105, 0x00050041, 0x00000107, 0x00000108, 0x000000FF, -0x00000101, 0x0004003D, 0x00000013, 0x00000109, 0x00000108, 0x0003003E, 0x00000106, 0x00000109, -0x00070039, 0x00000015, 0x0000010A, 0x0000001A, 0x00000102, 0x00000104, 0x00000106, 0x0003003E, -0x000000FC, 0x0000010A, 0x0004003D, 0x00000006, 0x0000010D, 0x000000ED, 0x0003003E, 0x0000010C, -0x0000010D, 0x0004003D, 0x00000007, 0x0000010F, 0x000000EF, 0x0003003E, 0x0000010E, 0x0000010F, -0x00060039, 0x00000015, 0x00000110, 0x0000001F, 0x0000010C, 0x0000010E, 0x0003003E, 0x0000010B, -0x00000110, 0x0004003D, 0x00000015, 0x00000111, 0x0000010B, 0x00060050, 0x00000015, 0x00000112, -0x00000028, 0x00000028, 0x00000028, 0x00060050, 0x00000015, 0x00000113, 0x00000029, 0x00000029, -0x00000029, 0x0008000C, 0x00000015, 0x00000114, 0x00000001, 0x0000002B, 0x00000111, 0x00000112, -0x00000113, 0x0003003E, 0x0000010B, 0x00000114, 0x0004003D, 0x00000006, 0x00000117, 0x000000ED, -0x00050088, 0x00000006, 0x00000118, 0x00000116, 0x00000117, 0x0003003E, 0x00000115, 0x00000118, -0x0003003E, 0x00000119, 0x00000028, 0x0003003E, 0x0000011B, 0x00000101, 0x000200F9, 0x0000011C, -0x000200F8, 0x0000011C, 0x000400F6, 0x0000011E, 0x0000011F, 0x00000000, 0x000200F9, 0x00000120, -0x000200F8, 0x00000120, 0x0004003D, 0x00000100, 0x00000121, 0x0000011B, 0x000500B1, 0x00000123, -0x00000124, 0x00000121, 0x00000122, 0x000400FA, 0x00000124, 0x0000011D, 0x0000011E, 0x000200F8, -0x0000011D, 0x0004003D, 0x00000006, 0x00000126, 0x00000115, 0x0004003D, 0x00000100, 0x00000127, -0x0000011B, 0x00050041, 0x00000021, 0x00000129, 0x000000AC, 0x00000127, 0x0004003D, 0x00000015, -0x0000012A, 0x00000129, 0x0003003E, 0x00000128, 0x0000012A, 0x0004003D, 0x00000015, 0x0000012C, -0x000000F3, 0x0003003E, 0x0000012B, 0x0000012C, 0x00060039, 0x00000015, 0x0000012D, 0x00000025, -0x00000128, 0x0000012B, 0x0005008E, 0x00000015, 0x0000012E, 0x0000012D, 0x00000126, 0x0003003E, -0x00000125, 0x0000012E, 0x0004003D, 0x00000015, 0x00000130, 0x000000FC, 0x0004003D, 0x00000015, -0x00000131, 0x00000125, 0x0004003D, 0x00000015, 0x00000132, 0x0000010B, 0x00050094, 0x00000006, -0x00000133, 0x00000131, 0x00000132, 0x0006000C, 0x00000006, 0x00000134, 0x00000001, 0x00000006, -0x00000133, 0x0004003D, 0x00000015, 0x00000135, 0x00000125, 0x0005008E, 0x00000015, 0x00000136, -0x00000135, 0x00000134, 0x00050081, 0x00000015, 0x00000137, 0x00000130, 0x00000136, 0x0003003E, -0x0000012F, 0x00000137, 0x0004003D, 0x00000015, 0x0000013A, 0x0000012F, 0x0007004F, 0x00000007, -0x0000013B, 0x0000013A, 0x0000013A, 0x00000000, 0x00000001, 0x0003003E, 0x00000139, 0x0000013B, -0x00050039, 0x00000007, 0x0000013C, 0x0000000B, 0x00000139, 0x0003003E, 0x0000013D, 0x0000013C, -0x00050039, 0x00000006, 0x0000013E, 0x0000000F, 0x0000013D, 0x0003003E, 0x00000138, 0x0000013E, -0x0004003D, 0x00000006, 0x00000140, 0x000000ED, 0x0004003D, 0x00000006, 0x00000141, 0x00000138, -0x00050083, 0x00000006, 0x00000142, 0x00000140, 0x00000141, 0x0003003E, 0x0000013F, 0x00000142, -0x0004003D, 0x00000006, 0x00000144, 0x0000013F, 0x0007000C, 0x00000006, 0x00000145, 0x00000001, -0x00000030, 0x00000143, 0x00000144, 0x0004003D, 0x00000006, 0x00000147, 0x0000013F, 0x0008000C, -0x00000006, 0x00000148, 0x00000001, 0x00000031, 0x00000143, 0x00000146, 0x00000147, 0x00050083, -0x00000006, 0x00000149, 0x00000029, 0x00000148, 0x00050085, 0x00000006, 0x0000014A, 0x00000145, -0x00000149, 0x0004003D, 0x00000006, 0x0000014B, 0x00000119, 0x00050081, 0x00000006, 0x0000014C, -0x0000014B, 0x0000014A, 0x0003003E, 0x00000119, 0x0000014C, 0x000200F9, 0x0000011F, 0x000200F8, -0x0000011F, 0x0004003D, 0x00000100, 0x0000014D, 0x0000011B, 0x00050080, 0x00000100, 0x0000014F, -0x0000014D, 0x0000014E, 0x0003003E, 0x0000011B, 0x0000014F, 0x000200F9, 0x0000011C, 0x000200F8, -0x0000011E, 0x0004003D, 0x00000006, 0x00000151, 0x00000119, 0x00050085, 0x00000006, 0x00000152, -0x00000029, 0x00000151, 0x00050085, 0x00000006, 0x00000154, 0x00000152, 0x00000153, 0x00050083, -0x00000006, 0x00000155, 0x00000029, 0x00000154, 0x0003003E, 0x00000150, 0x00000155, 0x0004003D, -0x00000006, 0x00000157, 0x00000150, 0x00050081, 0x00000006, 0x00000159, 0x00000157, 0x00000158, -0x0008000C, 0x00000006, 0x0000015A, 0x00000001, 0x0000002B, 0x00000159, 0x00000028, 0x00000029, -0x0003003E, 0x00000156, 0x0000015A, 0x0004003D, 0x00000006, 0x0000015C, 0x00000156, 0x0004003D, -0x00000006, 0x0000015D, 0x00000156, 0x0004003D, 0x00000006, 0x0000015E, 0x00000156, 0x00070050, -0x00000012, 0x0000015F, 0x0000015C, 0x0000015D, 0x0000015E, 0x00000029, 0x0003003E, 0x0000015B, -0x0000015F, 0x0004003D, 0x00000015, 0x00000162, 0x000000FC, 0x00050051, 0x00000006, 0x00000163, -0x00000162, 0x00000000, 0x00050051, 0x00000006, 0x00000164, 0x00000162, 0x00000001, 0x00050051, -0x00000006, 0x00000165, 0x00000162, 0x00000002, 0x00070050, 0x00000012, 0x00000166, 0x00000163, -0x00000164, 0x00000165, 0x00000029, 0x0003003E, 0x00000161, 0x00000166, 0x000100FD, 0x00010038, -0x00050036, 0x00000007, 0x0000000B, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x0000000A, -0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, 0x00000027, 0x0000000A, 0x00050050, 0x00000007, -0x0000002A, 0x00000028, 0x00000028, 0x00050050, 0x00000007, 0x0000002B, 0x00000029, 0x00000029, -0x0008000C, 0x00000007, 0x0000002C, 0x00000001, 0x0000002B, 0x00000027, 0x0000002A, 0x0000002B, -0x000200FE, 0x0000002C, 0x00010038, 0x00050036, 0x00000006, 0x0000000F, 0x00000000, 0x0000000D, -0x00030037, 0x00000008, 0x0000000E, 0x000200F8, 0x00000010, 0x0004003B, 0x00000008, 0x0000003A, -0x00000007, 0x0004003D, 0x00000030, 0x00000033, 0x00000032, 0x0004003D, 0x00000007, 0x00000034, -0x0000000E, 0x00050057, 0x00000012, 0x00000035, 0x00000033, 0x00000034, 0x00050051, 0x00000006, -0x00000038, 0x00000035, 0x00000000, 0x000200FE, 0x00000038, 0x00010038, 0x00050036, 0x00000015, -0x0000001A, 0x00000000, 0x00000016, 0x00030037, 0x00000008, 0x00000017, 0x00030037, 0x00000011, -0x00000018, 0x00030037, 0x00000014, 0x00000019, 0x000200F8, 0x0000001B, 0x0004003B, 0x00000011, -0x00000056, 0x00000007, 0x0004003B, 0x00000011, 0x0000005B, 0x00000007, 0x0004003B, 0x00000061, -0x00000062, 0x00000007, 0x0004003B, 0x00000061, 0x00000067, 0x00000007, 0x00050041, 0x00000011, -0x00000057, 0x00000017, 0x00000037, 0x0004003D, 0x00000006, 0x00000058, 0x00000057, 0x00050085, -0x00000006, 0x00000059, 0x00000058, 0x0000003E, 0x00050083, 0x00000006, 0x0000005A, 0x00000059, -0x00000029, 0x0003003E, 0x00000056, 0x0000005A, 0x00050041, 0x00000011, 0x0000005C, 0x00000017, -0x00000042, 0x0004003D, 0x00000006, 0x0000005D, 0x0000005C, 0x00050083, 0x00000006, 0x0000005E, -0x00000029, 0x0000005D, 0x00050085, 0x00000006, 0x0000005F, 0x0000005E, 0x0000003E, 0x00050083, -0x00000006, 0x00000060, 0x0000005F, 0x00000029, 0x0003003E, 0x0000005B, 0x00000060, 0x0004003D, -0x00000006, 0x00000063, 0x00000056, 0x0004003D, 0x00000006, 0x00000064, 0x0000005B, 0x0004003D, -0x00000006, 0x00000065, 0x00000018, 0x00070050, 0x00000012, 0x00000066, 0x00000063, 0x00000064, -0x00000065, 0x00000029, 0x0003003E, 0x00000062, 0x00000066, 0x0004003D, 0x00000013, 0x00000068, -0x00000019, 0x0004003D, 0x00000012, 0x00000069, 0x00000062, 0x00050091, 0x00000012, 0x0000006A, -0x00000068, 0x00000069, 0x0003003E, 0x00000067, 0x0000006A, 0x0004003D, 0x00000012, 0x0000006B, -0x00000067, 0x0008004F, 0x00000015, 0x0000006C, 0x0000006B, 0x0000006B, 0x00000000, 0x00000001, -0x00000002, 0x00050041, 0x00000011, 0x0000006E, 0x00000067, 0x0000006D, 0x0004003D, 0x00000006, -0x0000006F, 0x0000006E, 0x00060050, 0x00000015, 0x00000070, 0x0000006F, 0x0000006F, 0x0000006F, -0x00050088, 0x00000015, 0x00000071, 0x0000006C, 0x00000070, 0x000200FE, 0x00000071, 0x00010038, -0x00050036, 0x00000015, 0x0000001F, 0x00000000, 0x0000001C, 0x00030037, 0x00000011, 0x0000001D, -0x00030037, 0x00000008, 0x0000001E, 0x000200F8, 0x00000020, 0x0004003B, 0x00000011, 0x00000074, -0x00000007, 0x0004003B, 0x00000008, 0x00000079, 0x00000007, 0x0004003B, 0x00000011, 0x0000007B, -0x00000007, 0x0004003B, 0x00000008, 0x0000007F, 0x00000007, 0x0004003B, 0x00000021, 0x00000081, -0x00000007, 0x0004003B, 0x00000021, 0x00000088, 0x00000007, 0x0004003B, 0x00000021, 0x0000008F, -0x00000007, 0x0004003D, 0x00000007, 0x00000075, 0x0000001E, 0x00050081, 0x00000007, 0x00000078, -0x00000075, 0x00000077, 0x0003003E, 0x00000079, 0x00000078, 0x00050039, 0x00000006, 0x0000007A, -0x0000000F, 0x00000079, 0x0003003E, 0x00000074, 0x0000007A, 0x0004003D, 0x00000007, 0x0000007C, -0x0000001E, 0x00050081, 0x00000007, 0x0000007E, 0x0000007C, 0x0000007D, 0x0003003E, 0x0000007F, -0x0000007E, 0x00050039, 0x00000006, 0x00000080, 0x0000000F, 0x0000007F, 0x0003003E, 0x0000007B, -0x00000080, 0x0004003D, 0x00000006, 0x00000082, 0x00000074, 0x0004003D, 0x00000006, 0x00000083, -0x0000001D, 0x00050083, 0x00000006, 0x00000084, 0x00000082, 0x00000083, 0x00050051, 0x00000006, -0x00000085, 0x00000077, 0x00000000, 0x00050051, 0x00000006, 0x00000086, 0x00000077, 0x00000001, -0x00060050, 0x00000015, 0x00000087, 0x00000085, 0x00000086, 0x00000084, 0x0003003E, 0x00000081, -0x00000087, 0x0004003D, 0x00000006, 0x00000089, 0x0000007B, 0x0004003D, 0x00000006, 0x0000008A, -0x0000001D, 0x00050083, 0x00000006, 0x0000008B, 0x00000089, 0x0000008A, 0x00050051, 0x00000006, -0x0000008C, 0x0000007D, 0x00000000, 0x00050051, 0x00000006, 0x0000008D, 0x0000007D, 0x00000001, -0x00060050, 0x00000015, 0x0000008E, 0x0000008C, 0x0000008D, 0x0000008B, 0x0003003E, 0x00000088, -0x0000008E, 0x0004003D, 0x00000015, 0x00000090, 0x00000081, 0x0004003D, 0x00000015, 0x00000091, -0x00000088, 0x0007000C, 0x00000015, 0x00000092, 0x00000001, 0x00000044, 0x00000090, 0x00000091, -0x0003003E, 0x0000008F, 0x00000092, 0x00050041, 0x00000011, 0x00000094, 0x0000008F, 0x00000093, -0x0004003D, 0x00000006, 0x00000095, 0x00000094, 0x0004007F, 0x00000006, 0x00000096, 0x00000095, -0x00050041, 0x00000011, 0x00000097, 0x0000008F, 0x00000093, 0x0003003E, 0x00000097, 0x00000096, -0x0004003D, 0x00000015, 0x00000098, 0x0000008F, 0x0006000C, 0x00000015, 0x00000099, 0x00000001, -0x00000045, 0x00000098, 0x000200FE, 0x00000099, 0x00010038, 0x00050036, 0x00000015, 0x00000025, -0x00000000, 0x00000022, 0x00030037, 0x00000021, 0x00000023, 0x00030037, 0x00000021, 0x00000024, -0x000200F8, 0x00000026, 0x0004003B, 0x00000021, 0x0000009C, 0x00000007, 0x0004003D, 0x00000015, -0x0000009D, 0x00000024, 0x0004003D, 0x00000015, 0x0000009E, 0x00000023, 0x00050094, 0x00000006, -0x0000009F, 0x0000009D, 0x0000009E, 0x00050085, 0x00000006, 0x000000A0, 0x0000003E, 0x0000009F, -0x0004003D, 0x00000015, 0x000000A1, 0x00000024, 0x0005008E, 0x00000015, 0x000000A2, 0x000000A1, -0x000000A0, 0x0003003E, 0x0000009C, 0x000000A2, 0x0004003D, 0x00000015, 0x000000A3, 0x00000023, -0x0004003D, 0x00000015, 0x000000A4, 0x0000009C, 0x00050083, 0x00000015, 0x000000A5, 0x000000A3, -0x000000A4, 0x0003003E, 0x0000009C, 0x000000A5, 0x0004003D, 0x00000015, 0x000000A6, 0x0000009C, -0x000200FE, 0x000000A6, 0x00010038, +constexpr uint32_t spirv_SSAOfragspv_size = 8544; +constexpr std::array spirv_SSAOfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000158, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, +0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000056, +0x00000061, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, +0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, +0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, +0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, +0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, +0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00070005, +0x0000000A, 0x656E694C, 0x7A697261, 0x70654465, 0x66286874, 0x00003B31, 0x00040005, 0x00000009, +0x74706564, 0x00000068, 0x000A0005, 0x00000011, 0x6F636572, 0x7274736E, 0x56746375, 0x736F5053, +0x6D6F7246, 0x74706544, 0x66762868, 0x00003B32, 0x00030005, 0x00000010, 0x00007675, 0x00030005, +0x00000013, 0x0000007A, 0x00040005, 0x0000001C, 0x74706564, 0x00000068, 0x00050005, 0x00000020, +0x445F6E69, 0x68747065, 0x00000000, 0x00040005, 0x00000028, 0x61726170, 0x0000006D, 0x00030005, +0x0000002B, 0x00000078, 0x00030005, 0x00000030, 0x00000079, 0x00030005, 0x00000037, 0x00736F70, +0x00040005, 0x0000003C, 0x56736F70, 0x00000053, 0x00060005, 0x00000040, 0x66696E55, 0x426D726F, +0x65666675, 0x00000072, 0x00060006, 0x00000040, 0x00000000, 0x6A6F7270, 0x69746365, 0x00006E6F, +0x00050006, 0x00000040, 0x00000001, 0x50766E69, 0x006A6F72, 0x00050006, 0x00000040, 0x00000002, +0x77656976, 0x00000000, 0x00050006, 0x00000040, 0x00000003, 0x706D6173, 0x0073656C, 0x00060006, +0x00000040, 0x00000004, 0x6F617373, 0x69646152, 0x00007375, 0x00050006, 0x00000040, 0x00000005, +0x7261656E, 0x00000000, 0x00040006, 0x00000040, 0x00000006, 0x00726166, 0x00060006, 0x00000040, +0x00000007, 0x65727473, 0x6874676E, 0x00000000, 0x00030005, 0x00000042, 0x006F6275, 0x00040005, +0x00000053, 0x74706564, 0x00000068, 0x00050005, 0x00000056, 0x5474756F, 0x6F437865, 0x0064726F, +0x00050005, 0x00000061, 0x67617266, 0x6F6C6F43, 0x00007275, 0x00040005, 0x00000065, 0x6D726F6E, +0x00006C61, 0x00050005, 0x00000071, 0x4E5F6E69, 0x616D726F, 0x0000006C, 0x00040005, 0x0000007B, +0x56736F70, 0x00000053, 0x00040005, 0x0000007C, 0x61726170, 0x0000006D, 0x00060005, 0x00000081, +0x74706564, 0x78655468, 0x657A6953, 0x00000000, 0x00060005, 0x00000086, 0x73696F6E, 0x78655465, +0x657A6953, 0x00000000, 0x00050005, 0x00000087, 0x4E5F6E69, 0x6573696F, 0x00000000, 0x00050005, +0x0000008B, 0x646E6572, 0x63537265, 0x00656C61, 0x00040005, 0x0000008D, 0x73696F6E, 0x00565565, +0x00050005, 0x000000A2, 0x646E6172, 0x65566D6F, 0x00000063, 0x00040005, 0x000000A7, 0x676E6174, +0x00746E65, 0x00050005, 0x000000B0, 0x61746962, 0x6E65676E, 0x00000074, 0x00030005, 0x000000B5, +0x004E4254, 0x00040005, 0x000000C7, 0x73616962, 0x00000000, 0x00050005, 0x000000C9, 0x6C63636F, +0x6F697375, 0x0000006E, 0x00050005, 0x000000CA, 0x706D6173, 0x6F43656C, 0x00746E75, 0x00030005, +0x000000CC, 0x00000069, 0x00050005, 0x000000D5, 0x706D6173, 0x6F50656C, 0x00000073, 0x00040005, +0x000000E6, 0x7366666F, 0x00007465, 0x00060005, 0x00000103, 0x706D6173, 0x4E64656C, 0x616D726F, +0x0000006C, 0x00070005, 0x00000117, 0x6F636572, 0x7274736E, 0x65746375, 0x736F5064, 0x00000000, +0x00040005, 0x00000118, 0x61726170, 0x0000006D, 0x00040005, 0x00000126, 0x66666964, 0x00000000, +0x00030005, 0x0000012A, 0x0000006C, 0x00050005, 0x0000012D, 0x676E6172, 0x65684365, 0x00006B63, +0x00040047, 0x00000020, 0x00000022, 0x00000000, 0x00040047, 0x00000020, 0x00000021, 0x00000001, +0x00040047, 0x0000003F, 0x00000006, 0x00000010, 0x00040048, 0x00000040, 0x00000000, 0x00000005, +0x00050048, 0x00000040, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000040, 0x00000000, +0x00000007, 0x00000010, 0x00040048, 0x00000040, 0x00000001, 0x00000005, 0x00050048, 0x00000040, +0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x00000040, 0x00000001, 0x00000007, 0x00000010, +0x00040048, 0x00000040, 0x00000002, 0x00000005, 0x00050048, 0x00000040, 0x00000002, 0x00000023, +0x00000080, 0x00050048, 0x00000040, 0x00000002, 0x00000007, 0x00000010, 0x00050048, 0x00000040, +0x00000003, 0x00000023, 0x000000C0, 0x00050048, 0x00000040, 0x00000004, 0x00000023, 0x000004C0, +0x00050048, 0x00000040, 0x00000005, 0x00000023, 0x000004C4, 0x00050048, 0x00000040, 0x00000006, +0x00000023, 0x000004C8, 0x00050048, 0x00000040, 0x00000007, 0x00000023, 0x000004CC, 0x00030047, +0x00000040, 0x00000002, 0x00040047, 0x00000042, 0x00000022, 0x00000000, 0x00040047, 0x00000042, +0x00000021, 0x00000000, 0x00040047, 0x00000056, 0x0000001E, 0x00000000, 0x00040047, 0x00000061, +0x0000001E, 0x00000000, 0x00040047, 0x00000071, 0x00000022, 0x00000000, 0x00040047, 0x00000071, +0x00000021, 0x00000002, 0x00040047, 0x00000087, 0x00000022, 0x00000000, 0x00040047, 0x00000087, +0x00000021, 0x00000003, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, +0x00000006, 0x00000020, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x00040021, 0x00000008, +0x00000006, 0x00000007, 0x00040017, 0x0000000C, 0x00000006, 0x00000002, 0x00040020, 0x0000000D, +0x00000007, 0x0000000C, 0x00040017, 0x0000000E, 0x00000006, 0x00000003, 0x00040021, 0x0000000F, +0x0000000E, 0x0000000D, 0x0004002B, 0x00000006, 0x00000015, 0x40000000, 0x0004002B, 0x00000006, +0x00000017, 0x3F800000, 0x00090019, 0x0000001D, 0x00000006, 0x00000001, 0x00000000, 0x00000000, +0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x0000001E, 0x0000001D, 0x00040020, 0x0000001F, +0x00000000, 0x0000001E, 0x0004003B, 0x0000001F, 0x00000020, 0x00000000, 0x00040017, 0x00000023, +0x00000006, 0x00000004, 0x00040015, 0x00000025, 0x00000020, 0x00000000, 0x0004002B, 0x00000025, +0x00000026, 0x00000000, 0x0004002B, 0x00000025, 0x00000031, 0x00000001, 0x00040020, 0x00000036, +0x00000007, 0x00000023, 0x00040018, 0x0000003D, 0x00000023, 0x00000004, 0x0004002B, 0x00000025, +0x0000003E, 0x00000040, 0x0004001C, 0x0000003F, 0x00000023, 0x0000003E, 0x000A001E, 0x00000040, +0x0000003D, 0x0000003D, 0x0000003D, 0x0000003F, 0x00000006, 0x00000006, 0x00000006, 0x00000006, +0x00040020, 0x00000041, 0x00000002, 0x00000040, 0x0004003B, 0x00000041, 0x00000042, 0x00000002, +0x00040015, 0x00000043, 0x00000020, 0x00000001, 0x0004002B, 0x00000043, 0x00000044, 0x00000001, +0x00040020, 0x00000045, 0x00000002, 0x0000003D, 0x0004002B, 0x00000025, 0x0000004C, 0x00000003, +0x00040020, 0x00000055, 0x00000001, 0x0000000C, 0x0004003B, 0x00000055, 0x00000056, 0x00000001, +0x0004002B, 0x00000006, 0x0000005B, 0x38D1B717, 0x00020014, 0x0000005C, 0x00040020, 0x00000060, +0x00000003, 0x00000023, 0x0004003B, 0x00000060, 0x00000061, 0x00000003, 0x0007002C, 0x00000023, +0x00000062, 0x00000017, 0x00000017, 0x00000017, 0x00000017, 0x00040020, 0x00000064, 0x00000007, +0x0000000E, 0x0004002B, 0x00000043, 0x00000066, 0x00000002, 0x00040018, 0x00000069, 0x0000000E, +0x00000003, 0x0004003B, 0x0000001F, 0x00000071, 0x00000000, 0x00040017, 0x0000007F, 0x00000043, +0x00000002, 0x00040020, 0x00000080, 0x00000007, 0x0000007F, 0x0004002B, 0x00000043, 0x00000083, +0x00000000, 0x0004003B, 0x0000001F, 0x00000087, 0x00000000, 0x0004002B, 0x00000006, 0x0000008C, +0x3F000000, 0x00040020, 0x0000008E, 0x00000007, 0x00000043, 0x00040020, 0x000000B4, 0x00000007, +0x00000069, 0x0004002B, 0x00000006, 0x000000B9, 0x00000000, 0x0004002B, 0x00000006, 0x000000C8, +0x3C23D70A, 0x00040020, 0x000000CB, 0x00000007, 0x00000025, 0x0004002B, 0x00000025, 0x000000D3, +0x00000020, 0x0004002B, 0x00000043, 0x000000D7, 0x00000003, 0x00040020, 0x000000D9, 0x00000002, +0x00000023, 0x0004002B, 0x00000043, 0x000000E0, 0x00000004, 0x00040020, 0x000000E1, 0x00000002, +0x00000006, 0x0005002C, 0x0000000C, 0x000000FD, 0x0000008C, 0x0000008C, 0x0004002B, 0x00000006, +0x0000011F, 0x3F7D70A4, 0x0004002B, 0x00000025, 0x00000130, 0x00000002, 0x0004002B, 0x00000006, +0x0000014C, 0x3D000000, 0x0004002B, 0x00000043, 0x0000014E, 0x00000007, 0x0004002B, 0x00000006, +0x00000155, 0x40C90FDB, 0x0004002B, 0x00000006, 0x00000156, 0x3727C5AC, 0x0004002B, 0x00000043, +0x00000157, 0x00000020, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, +0x00000005, 0x0004003B, 0x00000007, 0x00000053, 0x00000007, 0x0004003B, 0x00000064, 0x00000065, +0x00000007, 0x0004003B, 0x00000064, 0x0000007B, 0x00000007, 0x0004003B, 0x0000000D, 0x0000007C, +0x00000007, 0x0004003B, 0x00000080, 0x00000081, 0x00000007, 0x0004003B, 0x00000080, 0x00000086, +0x00000007, 0x0004003B, 0x00000007, 0x0000008B, 0x00000007, 0x0004003B, 0x0000000D, 0x0000008D, +0x00000007, 0x0004003B, 0x00000064, 0x000000A2, 0x00000007, 0x0004003B, 0x00000064, 0x000000A7, +0x00000007, 0x0004003B, 0x00000064, 0x000000B0, 0x00000007, 0x0004003B, 0x000000B4, 0x000000B5, +0x00000007, 0x0004003B, 0x00000007, 0x000000C7, 0x00000007, 0x0004003B, 0x00000007, 0x000000C9, +0x00000007, 0x0004003B, 0x0000008E, 0x000000CA, 0x00000007, 0x0004003B, 0x000000CB, 0x000000CC, +0x00000007, 0x0004003B, 0x00000064, 0x000000D5, 0x00000007, 0x0004003B, 0x00000036, 0x000000E6, +0x00000007, 0x0004003B, 0x00000064, 0x00000103, 0x00000007, 0x0004003B, 0x00000064, 0x00000117, +0x00000007, 0x0004003B, 0x0000000D, 0x00000118, 0x00000007, 0x0004003B, 0x00000064, 0x00000126, +0x00000007, 0x0004003B, 0x00000007, 0x0000012A, 0x00000007, 0x0004003B, 0x00000007, 0x0000012D, +0x00000007, 0x0004003D, 0x0000001E, 0x00000054, 0x00000020, 0x0004003D, 0x0000000C, 0x00000057, +0x00000056, 0x00050057, 0x00000023, 0x00000058, 0x00000054, 0x00000057, 0x00050051, 0x00000006, +0x00000059, 0x00000058, 0x00000000, 0x0003003E, 0x00000053, 0x00000059, 0x0004003D, 0x00000006, +0x0000005A, 0x00000053, 0x000500B8, 0x0000005C, 0x0000005D, 0x0000005A, 0x0000005B, 0x000300F7, +0x0000005F, 0x00000000, 0x000400FA, 0x0000005D, 0x0000005E, 0x0000005F, 0x000200F8, 0x0000005E, +0x0003003E, 0x00000061, 0x00000062, 0x000100FD, 0x000200F8, 0x0000005F, 0x00050041, 0x00000045, +0x00000067, 0x00000042, 0x00000066, 0x0004003D, 0x0000003D, 0x00000068, 0x00000067, 0x00050051, +0x00000023, 0x0000006A, 0x00000068, 0x00000000, 0x0008004F, 0x0000000E, 0x0000006B, 0x0000006A, +0x0000006A, 0x00000000, 0x00000001, 0x00000002, 0x00050051, 0x00000023, 0x0000006C, 0x00000068, +0x00000001, 0x0008004F, 0x0000000E, 0x0000006D, 0x0000006C, 0x0000006C, 0x00000000, 0x00000001, +0x00000002, 0x00050051, 0x00000023, 0x0000006E, 0x00000068, 0x00000002, 0x0008004F, 0x0000000E, +0x0000006F, 0x0000006E, 0x0000006E, 0x00000000, 0x00000001, 0x00000002, 0x00060050, 0x00000069, +0x00000070, 0x0000006B, 0x0000006D, 0x0000006F, 0x0004003D, 0x0000001E, 0x00000072, 0x00000071, +0x0004003D, 0x0000000C, 0x00000073, 0x00000056, 0x00050057, 0x00000023, 0x00000074, 0x00000072, +0x00000073, 0x0008004F, 0x0000000E, 0x00000075, 0x00000074, 0x00000074, 0x00000000, 0x00000001, +0x00000002, 0x0005008E, 0x0000000E, 0x00000076, 0x00000075, 0x00000015, 0x00060050, 0x0000000E, +0x00000077, 0x00000017, 0x00000017, 0x00000017, 0x00050083, 0x0000000E, 0x00000078, 0x00000076, +0x00000077, 0x00050091, 0x0000000E, 0x00000079, 0x00000070, 0x00000078, 0x0006000C, 0x0000000E, +0x0000007A, 0x00000001, 0x00000045, 0x00000079, 0x0003003E, 0x00000065, 0x0000007A, 0x0004003D, +0x0000000C, 0x0000007D, 0x00000056, 0x0003003E, 0x0000007C, 0x0000007D, 0x00050039, 0x0000000E, +0x0000007E, 0x00000011, 0x0000007C, 0x0003003E, 0x0000007B, 0x0000007E, 0x0004003D, 0x0000001E, +0x00000082, 0x00000020, 0x00040064, 0x0000001D, 0x00000084, 0x00000082, 0x00050067, 0x0000007F, +0x00000085, 0x00000084, 0x00000083, 0x0003003E, 0x00000081, 0x00000085, 0x0004003D, 0x0000001E, +0x00000088, 0x00000087, 0x00040064, 0x0000001D, 0x00000089, 0x00000088, 0x00050067, 0x0000007F, +0x0000008A, 0x00000089, 0x00000083, 0x0003003E, 0x00000086, 0x0000008A, 0x0003003E, 0x0000008B, +0x0000008C, 0x00050041, 0x0000008E, 0x0000008F, 0x00000081, 0x00000026, 0x0004003D, 0x00000043, +0x00000090, 0x0000008F, 0x0004006F, 0x00000006, 0x00000091, 0x00000090, 0x00050041, 0x0000008E, +0x00000092, 0x00000086, 0x00000026, 0x0004003D, 0x00000043, 0x00000093, 0x00000092, 0x0004006F, +0x00000006, 0x00000094, 0x00000093, 0x00050088, 0x00000006, 0x00000095, 0x00000091, 0x00000094, +0x00050041, 0x0000008E, 0x00000096, 0x00000081, 0x00000031, 0x0004003D, 0x00000043, 0x00000097, +0x00000096, 0x0004006F, 0x00000006, 0x00000098, 0x00000097, 0x00050041, 0x0000008E, 0x00000099, +0x00000086, 0x00000031, 0x0004003D, 0x00000043, 0x0000009A, 0x00000099, 0x0004006F, 0x00000006, +0x0000009B, 0x0000009A, 0x00050088, 0x00000006, 0x0000009C, 0x00000098, 0x0000009B, 0x00050050, +0x0000000C, 0x0000009D, 0x00000095, 0x0000009C, 0x0004003D, 0x0000000C, 0x0000009E, 0x00000056, +0x00050085, 0x0000000C, 0x0000009F, 0x0000009D, 0x0000009E, 0x0004003D, 0x00000006, 0x000000A0, +0x0000008B, 0x0005008E, 0x0000000C, 0x000000A1, 0x0000009F, 0x000000A0, 0x0003003E, 0x0000008D, +0x000000A1, 0x0004003D, 0x0000001E, 0x000000A3, 0x00000087, 0x0004003D, 0x0000000C, 0x000000A4, +0x0000008D, 0x00050057, 0x00000023, 0x000000A5, 0x000000A3, 0x000000A4, 0x0008004F, 0x0000000E, +0x000000A6, 0x000000A5, 0x000000A5, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000000A2, +0x000000A6, 0x0004003D, 0x0000000E, 0x000000A8, 0x000000A2, 0x0004003D, 0x0000000E, 0x000000A9, +0x00000065, 0x0004003D, 0x0000000E, 0x000000AA, 0x000000A2, 0x0004003D, 0x0000000E, 0x000000AB, +0x00000065, 0x00050094, 0x00000006, 0x000000AC, 0x000000AA, 0x000000AB, 0x0005008E, 0x0000000E, +0x000000AD, 0x000000A9, 0x000000AC, 0x00050083, 0x0000000E, 0x000000AE, 0x000000A8, 0x000000AD, +0x0006000C, 0x0000000E, 0x000000AF, 0x00000001, 0x00000045, 0x000000AE, 0x0003003E, 0x000000A7, +0x000000AF, 0x0004003D, 0x0000000E, 0x000000B1, 0x000000A7, 0x0004003D, 0x0000000E, 0x000000B2, +0x00000065, 0x0007000C, 0x0000000E, 0x000000B3, 0x00000001, 0x00000044, 0x000000B1, 0x000000B2, +0x0003003E, 0x000000B0, 0x000000B3, 0x0004003D, 0x0000000E, 0x000000B6, 0x000000A7, 0x0004003D, +0x0000000E, 0x000000B7, 0x000000B0, 0x0004003D, 0x0000000E, 0x000000B8, 0x00000065, 0x00050051, +0x00000006, 0x000000BA, 0x000000B6, 0x00000000, 0x00050051, 0x00000006, 0x000000BB, 0x000000B6, +0x00000001, 0x00050051, 0x00000006, 0x000000BC, 0x000000B6, 0x00000002, 0x00050051, 0x00000006, +0x000000BD, 0x000000B7, 0x00000000, 0x00050051, 0x00000006, 0x000000BE, 0x000000B7, 0x00000001, +0x00050051, 0x00000006, 0x000000BF, 0x000000B7, 0x00000002, 0x00050051, 0x00000006, 0x000000C0, +0x000000B8, 0x00000000, 0x00050051, 0x00000006, 0x000000C1, 0x000000B8, 0x00000001, 0x00050051, +0x00000006, 0x000000C2, 0x000000B8, 0x00000002, 0x00060050, 0x0000000E, 0x000000C3, 0x000000BA, +0x000000BB, 0x000000BC, 0x00060050, 0x0000000E, 0x000000C4, 0x000000BD, 0x000000BE, 0x000000BF, +0x00060050, 0x0000000E, 0x000000C5, 0x000000C0, 0x000000C1, 0x000000C2, 0x00060050, 0x00000069, +0x000000C6, 0x000000C3, 0x000000C4, 0x000000C5, 0x0003003E, 0x000000B5, 0x000000C6, 0x0003003E, +0x000000C7, 0x000000C8, 0x0003003E, 0x000000C9, 0x000000B9, 0x0003003E, 0x000000CA, 0x00000083, +0x0003003E, 0x000000CC, 0x00000026, 0x000200F9, 0x000000CD, 0x000200F8, 0x000000CD, 0x000400F6, +0x000000CF, 0x000000D0, 0x00000000, 0x000200F9, 0x000000D1, 0x000200F8, 0x000000D1, 0x0004003D, +0x00000025, 0x000000D2, 0x000000CC, 0x000500B0, 0x0000005C, 0x000000D4, 0x000000D2, 0x000000D3, +0x000400FA, 0x000000D4, 0x000000CE, 0x000000CF, 0x000200F8, 0x000000CE, 0x0004003D, 0x00000069, +0x000000D6, 0x000000B5, 0x0004003D, 0x00000025, 0x000000D8, 0x000000CC, 0x00060041, 0x000000D9, +0x000000DA, 0x00000042, 0x000000D7, 0x000000D8, 0x0004003D, 0x00000023, 0x000000DB, 0x000000DA, +0x0008004F, 0x0000000E, 0x000000DC, 0x000000DB, 0x000000DB, 0x00000000, 0x00000001, 0x00000002, +0x00050091, 0x0000000E, 0x000000DD, 0x000000D6, 0x000000DC, 0x0003003E, 0x000000D5, 0x000000DD, +0x0004003D, 0x0000000E, 0x000000DE, 0x0000007B, 0x0004003D, 0x0000000E, 0x000000DF, 0x000000D5, +0x00050041, 0x000000E1, 0x000000E2, 0x00000042, 0x000000E0, 0x0004003D, 0x00000006, 0x000000E3, +0x000000E2, 0x0005008E, 0x0000000E, 0x000000E4, 0x000000DF, 0x000000E3, 0x00050081, 0x0000000E, +0x000000E5, 0x000000DE, 0x000000E4, 0x0003003E, 0x000000D5, 0x000000E5, 0x0004003D, 0x0000000E, +0x000000E7, 0x000000D5, 0x00050051, 0x00000006, 0x000000E8, 0x000000E7, 0x00000000, 0x00050051, +0x00000006, 0x000000E9, 0x000000E7, 0x00000001, 0x00050051, 0x00000006, 0x000000EA, 0x000000E7, +0x00000002, 0x00070050, 0x00000023, 0x000000EB, 0x000000E8, 0x000000E9, 0x000000EA, 0x00000017, +0x0003003E, 0x000000E6, 0x000000EB, 0x00050041, 0x00000045, 0x000000EC, 0x00000042, 0x00000083, +0x0004003D, 0x0000003D, 0x000000ED, 0x000000EC, 0x0004003D, 0x00000023, 0x000000EE, 0x000000E6, +0x00050091, 0x00000023, 0x000000EF, 0x000000ED, 0x000000EE, 0x0003003E, 0x000000E6, 0x000000EF, +0x00050041, 0x00000007, 0x000000F0, 0x000000E6, 0x0000004C, 0x0004003D, 0x00000006, 0x000000F1, +0x000000F0, 0x0004003D, 0x00000023, 0x000000F2, 0x000000E6, 0x0007004F, 0x0000000C, 0x000000F3, +0x000000F2, 0x000000F2, 0x00000000, 0x00000001, 0x00050050, 0x0000000C, 0x000000F4, 0x000000F1, +0x000000F1, 0x00050088, 0x0000000C, 0x000000F5, 0x000000F3, 0x000000F4, 0x00050041, 0x00000007, +0x000000F6, 0x000000E6, 0x00000026, 0x00050051, 0x00000006, 0x000000F7, 0x000000F5, 0x00000000, +0x0003003E, 0x000000F6, 0x000000F7, 0x00050041, 0x00000007, 0x000000F8, 0x000000E6, 0x00000031, +0x00050051, 0x00000006, 0x000000F9, 0x000000F5, 0x00000001, 0x0003003E, 0x000000F8, 0x000000F9, +0x0004003D, 0x00000023, 0x000000FA, 0x000000E6, 0x0007004F, 0x0000000C, 0x000000FB, 0x000000FA, +0x000000FA, 0x00000000, 0x00000001, 0x0005008E, 0x0000000C, 0x000000FC, 0x000000FB, 0x0000008C, +0x00050081, 0x0000000C, 0x000000FE, 0x000000FC, 0x000000FD, 0x00050041, 0x00000007, 0x000000FF, +0x000000E6, 0x00000026, 0x00050051, 0x00000006, 0x00000100, 0x000000FE, 0x00000000, 0x0003003E, +0x000000FF, 0x00000100, 0x00050041, 0x00000007, 0x00000101, 0x000000E6, 0x00000031, 0x00050051, +0x00000006, 0x00000102, 0x000000FE, 0x00000001, 0x0003003E, 0x00000101, 0x00000102, 0x00050041, +0x00000045, 0x00000104, 0x00000042, 0x00000066, 0x0004003D, 0x0000003D, 0x00000105, 0x00000104, +0x00050051, 0x00000023, 0x00000106, 0x00000105, 0x00000000, 0x0008004F, 0x0000000E, 0x00000107, +0x00000106, 0x00000106, 0x00000000, 0x00000001, 0x00000002, 0x00050051, 0x00000023, 0x00000108, +0x00000105, 0x00000001, 0x0008004F, 0x0000000E, 0x00000109, 0x00000108, 0x00000108, 0x00000000, +0x00000001, 0x00000002, 0x00050051, 0x00000023, 0x0000010A, 0x00000105, 0x00000002, 0x0008004F, +0x0000000E, 0x0000010B, 0x0000010A, 0x0000010A, 0x00000000, 0x00000001, 0x00000002, 0x00060050, +0x00000069, 0x0000010C, 0x00000107, 0x00000109, 0x0000010B, 0x0004003D, 0x0000001E, 0x0000010D, +0x00000071, 0x0004003D, 0x00000023, 0x0000010E, 0x000000E6, 0x0007004F, 0x0000000C, 0x0000010F, +0x0000010E, 0x0000010E, 0x00000000, 0x00000001, 0x00050057, 0x00000023, 0x00000110, 0x0000010D, +0x0000010F, 0x0008004F, 0x0000000E, 0x00000111, 0x00000110, 0x00000110, 0x00000000, 0x00000001, +0x00000002, 0x0005008E, 0x0000000E, 0x00000112, 0x00000111, 0x00000015, 0x00060050, 0x0000000E, +0x00000113, 0x00000017, 0x00000017, 0x00000017, 0x00050083, 0x0000000E, 0x00000114, 0x00000112, +0x00000113, 0x00050091, 0x0000000E, 0x00000115, 0x0000010C, 0x00000114, 0x0006000C, 0x0000000E, +0x00000116, 0x00000001, 0x00000045, 0x00000115, 0x0003003E, 0x00000103, 0x00000116, 0x0004003D, +0x00000023, 0x00000119, 0x000000E6, 0x0007004F, 0x0000000C, 0x0000011A, 0x00000119, 0x00000119, +0x00000000, 0x00000001, 0x0003003E, 0x00000118, 0x0000011A, 0x00050039, 0x0000000E, 0x0000011B, +0x00000011, 0x00000118, 0x0003003E, 0x00000117, 0x0000011B, 0x0004003D, 0x0000000E, 0x0000011C, +0x00000103, 0x0004003D, 0x0000000E, 0x0000011D, 0x00000065, 0x00050094, 0x00000006, 0x0000011E, +0x0000011C, 0x0000011D, 0x000500BA, 0x0000005C, 0x00000120, 0x0000011E, 0x0000011F, 0x000300F7, +0x00000122, 0x00000000, 0x000400FA, 0x00000120, 0x00000121, 0x00000125, 0x000200F8, 0x00000121, +0x0004003D, 0x00000043, 0x00000123, 0x000000CA, 0x00050080, 0x00000043, 0x00000124, 0x00000123, +0x00000044, 0x0003003E, 0x000000CA, 0x00000124, 0x000200F9, 0x00000122, 0x000200F8, 0x00000125, +0x0004003D, 0x0000000E, 0x00000127, 0x0000007B, 0x0004003D, 0x0000000E, 0x00000128, 0x00000117, +0x00050083, 0x0000000E, 0x00000129, 0x00000127, 0x00000128, 0x0003003E, 0x00000126, 0x00000129, +0x0004003D, 0x0000000E, 0x0000012B, 0x00000126, 0x0006000C, 0x00000006, 0x0000012C, 0x00000001, +0x00000042, 0x0000012B, 0x0003003E, 0x0000012A, 0x0000012C, 0x00050041, 0x000000E1, 0x0000012E, +0x00000042, 0x000000E0, 0x0004003D, 0x00000006, 0x0000012F, 0x0000012E, 0x00050041, 0x00000007, +0x00000131, 0x00000117, 0x00000130, 0x0004003D, 0x00000006, 0x00000132, 0x00000131, 0x00050041, +0x00000007, 0x00000133, 0x000000D5, 0x00000130, 0x0004003D, 0x00000006, 0x00000134, 0x00000133, +0x00050083, 0x00000006, 0x00000135, 0x00000132, 0x00000134, 0x0004003D, 0x00000006, 0x00000136, +0x000000C7, 0x00050083, 0x00000006, 0x00000137, 0x00000135, 0x00000136, 0x0006000C, 0x00000006, +0x00000138, 0x00000001, 0x00000004, 0x00000137, 0x00050088, 0x00000006, 0x00000139, 0x0000012F, +0x00000138, 0x0008000C, 0x00000006, 0x0000013A, 0x00000001, 0x00000031, 0x000000B9, 0x00000017, +0x00000139, 0x0003003E, 0x0000012D, 0x0000013A, 0x00050041, 0x00000007, 0x0000013B, 0x00000117, +0x00000130, 0x0004003D, 0x00000006, 0x0000013C, 0x0000013B, 0x00050041, 0x00000007, 0x0000013D, +0x000000D5, 0x00000130, 0x0004003D, 0x00000006, 0x0000013E, 0x0000013D, 0x0004003D, 0x00000006, +0x0000013F, 0x000000C7, 0x00050081, 0x00000006, 0x00000140, 0x0000013E, 0x0000013F, 0x000500BE, +0x0000005C, 0x00000141, 0x0000013C, 0x00000140, 0x000600A9, 0x00000006, 0x00000142, 0x00000141, +0x00000017, 0x000000B9, 0x0004003D, 0x00000006, 0x00000143, 0x0000012D, 0x00050085, 0x00000006, +0x00000144, 0x00000142, 0x00000143, 0x0004003D, 0x00000006, 0x00000145, 0x000000C9, 0x00050081, +0x00000006, 0x00000146, 0x00000145, 0x00000144, 0x0003003E, 0x000000C9, 0x00000146, 0x0004003D, +0x00000043, 0x00000147, 0x000000CA, 0x00050080, 0x00000043, 0x00000148, 0x00000147, 0x00000044, +0x0003003E, 0x000000CA, 0x00000148, 0x000200F9, 0x00000122, 0x000200F8, 0x00000122, 0x000200F9, +0x000000D0, 0x000200F8, 0x000000D0, 0x0004003D, 0x00000025, 0x00000149, 0x000000CC, 0x00050080, +0x00000025, 0x0000014A, 0x00000149, 0x00000044, 0x0003003E, 0x000000CC, 0x0000014A, 0x000200F9, +0x000000CD, 0x000200F8, 0x000000CF, 0x0004003D, 0x00000006, 0x0000014B, 0x000000C9, 0x00050085, +0x00000006, 0x0000014D, 0x0000014B, 0x0000014C, 0x00050041, 0x000000E1, 0x0000014F, 0x00000042, +0x0000014E, 0x0004003D, 0x00000006, 0x00000150, 0x0000014F, 0x00050088, 0x00000006, 0x00000151, +0x0000014D, 0x00000150, 0x00050083, 0x00000006, 0x00000152, 0x00000017, 0x00000151, 0x0003003E, +0x000000C9, 0x00000152, 0x0004003D, 0x00000006, 0x00000153, 0x000000C9, 0x00070050, 0x00000023, +0x00000154, 0x00000153, 0x00000153, 0x00000153, 0x00000153, 0x0003003E, 0x00000061, 0x00000154, +0x000100FD, 0x00010038, 0x00050036, 0x00000006, 0x0000000A, 0x00000000, 0x00000008, 0x00030037, +0x00000007, 0x00000009, 0x000200F8, 0x0000000B, 0x0004003B, 0x00000007, 0x00000013, 0x00000007, +0x0004003D, 0x00000006, 0x00000014, 0x00000009, 0x00050085, 0x00000006, 0x00000016, 0x00000014, +0x00000015, 0x00050083, 0x00000006, 0x00000018, 0x00000016, 0x00000017, 0x0003003E, 0x00000013, +0x00000018, 0x0004003D, 0x00000006, 0x00000019, 0x00000013, 0x000200FE, 0x00000019, 0x00010038, +0x00050036, 0x0000000E, 0x00000011, 0x00000000, 0x0000000F, 0x00030037, 0x0000000D, 0x00000010, +0x000200F8, 0x00000012, 0x0004003B, 0x00000007, 0x0000001C, 0x00000007, 0x0004003B, 0x00000007, +0x00000028, 0x00000007, 0x0004003B, 0x00000007, 0x0000002B, 0x00000007, 0x0004003B, 0x00000007, +0x00000030, 0x00000007, 0x0004003B, 0x00000036, 0x00000037, 0x00000007, 0x0004003B, 0x00000036, +0x0000003C, 0x00000007, 0x0004003D, 0x0000001E, 0x00000021, 0x00000020, 0x0004003D, 0x0000000C, +0x00000022, 0x00000010, 0x00050057, 0x00000023, 0x00000024, 0x00000021, 0x00000022, 0x00050051, +0x00000006, 0x00000027, 0x00000024, 0x00000000, 0x0003003E, 0x0000001C, 0x00000027, 0x0004003D, +0x00000006, 0x00000029, 0x0000001C, 0x0003003E, 0x00000028, 0x00000029, 0x00050039, 0x00000006, +0x0000002A, 0x0000000A, 0x00000028, 0x0003003E, 0x0000001C, 0x0000002A, 0x00050041, 0x00000007, +0x0000002C, 0x00000010, 0x00000026, 0x0004003D, 0x00000006, 0x0000002D, 0x0000002C, 0x00050085, +0x00000006, 0x0000002E, 0x0000002D, 0x00000015, 0x00050083, 0x00000006, 0x0000002F, 0x0000002E, +0x00000017, 0x0003003E, 0x0000002B, 0x0000002F, 0x00050041, 0x00000007, 0x00000032, 0x00000010, +0x00000031, 0x0004003D, 0x00000006, 0x00000033, 0x00000032, 0x00050085, 0x00000006, 0x00000034, +0x00000033, 0x00000015, 0x00050083, 0x00000006, 0x00000035, 0x00000034, 0x00000017, 0x0003003E, +0x00000030, 0x00000035, 0x0004003D, 0x00000006, 0x00000038, 0x0000002B, 0x0004003D, 0x00000006, +0x00000039, 0x00000030, 0x0004003D, 0x00000006, 0x0000003A, 0x0000001C, 0x00070050, 0x00000023, +0x0000003B, 0x00000038, 0x00000039, 0x0000003A, 0x00000017, 0x0003003E, 0x00000037, 0x0000003B, +0x00050041, 0x00000045, 0x00000046, 0x00000042, 0x00000044, 0x0004003D, 0x0000003D, 0x00000047, +0x00000046, 0x0004003D, 0x00000023, 0x00000048, 0x00000037, 0x00050091, 0x00000023, 0x00000049, +0x00000047, 0x00000048, 0x0003003E, 0x0000003C, 0x00000049, 0x0004003D, 0x00000023, 0x0000004A, +0x0000003C, 0x0008004F, 0x0000000E, 0x0000004B, 0x0000004A, 0x0000004A, 0x00000000, 0x00000001, +0x00000002, 0x00050041, 0x00000007, 0x0000004D, 0x0000003C, 0x0000004C, 0x0004003D, 0x00000006, +0x0000004E, 0x0000004D, 0x00060050, 0x0000000E, 0x0000004F, 0x0000004E, 0x0000004E, 0x0000004E, +0x00050088, 0x0000000E, 0x00000050, 0x0000004B, 0x0000004F, 0x000200FE, 0x00000050, 0x00010038, + }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/ScreenPassvertspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/ScreenPassvertspv.hpp index 568e27f61..216ba40f3 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/ScreenPassvertspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/ScreenPassvertspv.hpp @@ -25,7 +25,7 @@ constexpr std::array spirv_ScreenPassvertspv = { 0x00000001, 0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, 0x00000001, 0x0004002B, 0x0000000A, 0x0000000E, 0x00000002, 0x0004002B, 0x00000006, 0x00000015, 0x40800000, 0x0004002B, 0x00000006, 0x00000017, 0x3F800000, 0x00040020, 0x0000001A, 0x00000003, 0x00000007, 0x0004003B, 0x0000001A, -0x0000001B, 0x00000003, 0x0004002B, 0x00000006, 0x0000001F, 0x3F000000, 0x00040017, 0x00000021, +0x0000001B, 0x00000003, 0x0004002B, 0x00000006, 0x0000001D, 0x3F000000, 0x00040017, 0x00000021, 0x00000006, 0x00000004, 0x0003001E, 0x00000022, 0x00000021, 0x00040020, 0x00000023, 0x00000003, 0x00000022, 0x0004003B, 0x00000023, 0x00000024, 0x00000003, 0x0004002B, 0x0000000A, 0x00000025, 0x00000000, 0x00040020, 0x0000002A, 0x00000003, 0x00000021, 0x00050036, 0x00000002, 0x00000004, @@ -36,8 +36,8 @@ constexpr std::array spirv_ScreenPassvertspv = { 0x00000013, 0x00000012, 0x00050050, 0x00000007, 0x00000014, 0x00000010, 0x00000013, 0x0005008E, 0x00000007, 0x00000016, 0x00000014, 0x00000015, 0x00050050, 0x00000007, 0x00000018, 0x00000017, 0x00000017, 0x00050083, 0x00000007, 0x00000019, 0x00000016, 0x00000018, 0x0003003E, 0x00000009, -0x00000019, 0x0004003D, 0x00000007, 0x0000001C, 0x00000009, 0x00050050, 0x00000007, 0x0000001D, -0x00000017, 0x00000017, 0x00050081, 0x00000007, 0x0000001E, 0x0000001C, 0x0000001D, 0x0005008E, +0x00000019, 0x0004003D, 0x00000007, 0x0000001C, 0x00000009, 0x0005008E, 0x00000007, 0x0000001E, +0x0000001C, 0x0000001D, 0x00050050, 0x00000007, 0x0000001F, 0x0000001D, 0x0000001D, 0x00050081, 0x00000007, 0x00000020, 0x0000001E, 0x0000001F, 0x0003003E, 0x0000001B, 0x00000020, 0x0004003D, 0x00000007, 0x00000026, 0x00000009, 0x00050051, 0x00000006, 0x00000027, 0x00000026, 0x00000000, 0x00050051, 0x00000006, 0x00000028, 0x00000026, 0x00000001, 0x00070050, 0x00000021, 0x00000029, diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Shadowvertspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Shadowvertspv.hpp index 502413d9c..beeadd50e 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/Shadowvertspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Shadowvertspv.hpp @@ -3,81 +3,92 @@ #include #include -constexpr uint32_t spirv_Shadowvertspv_size = 2392; -constexpr std::array spirv_Shadowvertspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000053, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_Shadowvertspv_size = 2748; +constexpr std::array spirv_Shadowvertspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x0000005A, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x000C000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x00000031, 0x00000039, 0x00000049, -0x0000004D, 0x0000004F, 0x00000051, 0x00000052, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, -0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, -0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, -0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, -0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, -0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00050005, -0x0000000A, 0x68737550, 0x736E6F43, 0x00007374, 0x00060006, 0x0000000A, 0x00000000, 0x6E617274, -0x726F6673, 0x0000006D, 0x00070006, 0x0000000A, 0x00000001, 0x63736163, 0x49656461, 0x7865646E, -0x00000000, 0x00050005, 0x0000000C, 0x68737570, 0x736E6F43, 0x00007374, 0x00040005, 0x00000018, -0x6A6F7270, 0x00000000, 0x00050005, 0x0000001B, 0x64616853, 0x6144776F, 0x00006174, 0x00070006, -0x0000001B, 0x00000000, 0x6867694C, 0x74614D74, 0x65636972, 0x00000073, 0x00030005, 0x0000001D, -0x006F6275, 0x00060005, 0x0000002F, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, -0x0000002F, 0x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000031, 0x00000000, -0x00050005, 0x00000039, 0x6F506E69, 0x69746973, 0x00006E6F, 0x00040005, 0x00000044, 0x74736574, -0x00000000, 0x00040005, 0x00000047, 0x74736574, 0x00000032, 0x00040005, 0x00000049, 0x6F436E69, -0x00726F6C, 0x00030005, 0x0000004D, 0x00007675, 0x00050005, 0x0000004F, 0x65546E69, 0x6F6F4378, -0x00006472, 0x00050005, 0x00000051, 0x6F4E6E69, 0x6C616D72, 0x00000000, 0x00050005, 0x00000052, -0x61546E69, 0x6E65676E, 0x00000074, 0x00040048, 0x0000000A, 0x00000000, 0x00000005, 0x00050048, -0x0000000A, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000000A, 0x00000000, 0x00000007, -0x00000010, 0x00050048, 0x0000000A, 0x00000001, 0x00000023, 0x00000040, 0x00030047, 0x0000000A, -0x00000002, 0x00040047, 0x0000001A, 0x00000006, 0x00000040, 0x00040048, 0x0000001B, 0x00000000, -0x00000005, 0x00050048, 0x0000001B, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001B, -0x00000000, 0x00000007, 0x00000010, 0x00030047, 0x0000001B, 0x00000002, 0x00040047, 0x0000001D, -0x00000022, 0x00000000, 0x00040047, 0x0000001D, 0x00000021, 0x00000000, 0x00050048, 0x0000002F, -0x00000000, 0x0000000B, 0x00000000, 0x00030047, 0x0000002F, 0x00000002, 0x00040047, 0x00000039, -0x0000001E, 0x00000000, 0x00040047, 0x00000049, 0x0000001E, 0x00000001, 0x00040047, 0x0000004D, -0x0000001E, 0x00000000, 0x00040047, 0x0000004F, 0x0000001E, 0x00000002, 0x00040047, 0x00000051, -0x0000001E, 0x00000003, 0x00040047, 0x00000052, 0x0000001E, 0x00000004, 0x00020013, 0x00000002, -0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, -0x00000006, 0x00000004, 0x00040018, 0x00000008, 0x00000007, 0x00000004, 0x00040015, 0x00000009, -0x00000020, 0x00000000, 0x0004001E, 0x0000000A, 0x00000008, 0x00000009, 0x00040020, 0x0000000B, -0x00000009, 0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, 0x00000009, 0x00040015, 0x0000000D, -0x00000020, 0x00000001, 0x0004002B, 0x0000000D, 0x0000000E, 0x00000001, 0x00040020, 0x0000000F, -0x00000009, 0x00000009, 0x00040020, 0x00000017, 0x00000007, 0x00000008, 0x0004002B, 0x00000009, -0x00000019, 0x00000010, 0x0004001C, 0x0000001A, 0x00000008, 0x00000019, 0x0003001E, 0x0000001B, -0x0000001A, 0x00040020, 0x0000001C, 0x00000002, 0x0000001B, 0x0004003B, 0x0000001C, 0x0000001D, -0x00000002, 0x0004002B, 0x0000000D, 0x0000001E, 0x00000000, 0x00040020, 0x0000001F, 0x00000002, -0x00000008, 0x0004002B, 0x0000000D, 0x00000026, 0x00000002, 0x0004002B, 0x0000000D, 0x0000002A, -0x00000003, 0x0003001E, 0x0000002F, 0x00000007, 0x00040020, 0x00000030, 0x00000003, 0x0000002F, -0x0004003B, 0x00000030, 0x00000031, 0x00000003, 0x00040020, 0x00000033, 0x00000009, 0x00000008, -0x00040017, 0x00000037, 0x00000006, 0x00000003, 0x00040020, 0x00000038, 0x00000001, 0x00000037, -0x0004003B, 0x00000038, 0x00000039, 0x00000001, 0x0004002B, 0x00000006, 0x0000003B, 0x3F800000, -0x00040020, 0x00000041, 0x00000003, 0x00000007, 0x00040020, 0x00000043, 0x00000007, 0x00000037, -0x00040020, 0x00000046, 0x00000007, 0x00000007, 0x00040020, 0x00000048, 0x00000001, 0x00000007, -0x0004003B, 0x00000048, 0x00000049, 0x00000001, 0x00040017, 0x0000004B, 0x00000006, 0x00000002, -0x00040020, 0x0000004C, 0x00000003, 0x0000004B, 0x0004003B, 0x0000004C, 0x0000004D, 0x00000003, -0x00040020, 0x0000004E, 0x00000001, 0x0000004B, 0x0004003B, 0x0000004E, 0x0000004F, 0x00000001, -0x0004003B, 0x00000038, 0x00000051, 0x00000001, 0x0004003B, 0x00000038, 0x00000052, 0x00000001, +0x000D000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x00000031, 0x00000039, 0x00000049, +0x0000004C, 0x0000004F, 0x00000052, 0x00000056, 0x00000058, 0x00030003, 0x00000002, 0x000001C2, +0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, +0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, +0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, +0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, +0x64756C63, 0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, +0x00050005, 0x0000000A, 0x68737550, 0x736E6F43, 0x00007374, 0x00060006, 0x0000000A, 0x00000000, +0x6E617274, 0x726F6673, 0x0000006D, 0x00070006, 0x0000000A, 0x00000001, 0x63736163, 0x49656461, +0x7865646E, 0x00000000, 0x00040006, 0x0000000A, 0x00000002, 0x00003070, 0x00040006, 0x0000000A, +0x00000003, 0x00003170, 0x00040006, 0x0000000A, 0x00000004, 0x00003270, 0x00050005, 0x0000000C, +0x68737570, 0x736E6F43, 0x00007374, 0x00040005, 0x00000018, 0x6A6F7270, 0x00000000, 0x00050005, +0x0000001B, 0x64616853, 0x6144776F, 0x00006174, 0x00070006, 0x0000001B, 0x00000000, 0x6867694C, +0x74614D74, 0x65636972, 0x00000073, 0x00030005, 0x0000001D, 0x006F6275, 0x00060005, 0x0000002F, +0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, 0x0000002F, 0x00000000, 0x505F6C67, +0x7469736F, 0x006E6F69, 0x00030005, 0x00000031, 0x00000000, 0x00050005, 0x00000039, 0x6F506E69, +0x69746973, 0x00006E6F, 0x00040005, 0x00000044, 0x74736574, 0x00000000, 0x00040005, 0x00000047, +0x74736574, 0x00000032, 0x00040005, 0x00000049, 0x6F436E69, 0x00726F6C, 0x00040005, 0x0000004B, +0x74736574, 0x00000033, 0x00050005, 0x0000004C, 0x61546E69, 0x6E65676E, 0x00000074, 0x00040005, +0x0000004E, 0x74736574, 0x00000034, 0x00050005, 0x0000004F, 0x69426E69, 0x676E6174, 0x00746E65, +0x00040005, 0x00000051, 0x74736574, 0x00000035, 0x00050005, 0x00000052, 0x6F4E6E69, 0x6C616D72, +0x00000000, 0x00030005, 0x00000056, 0x00007675, 0x00050005, 0x00000058, 0x65546E69, 0x6F6F4378, +0x00006472, 0x00040048, 0x0000000A, 0x00000000, 0x00000005, 0x00050048, 0x0000000A, 0x00000000, +0x00000023, 0x00000000, 0x00050048, 0x0000000A, 0x00000000, 0x00000007, 0x00000010, 0x00050048, +0x0000000A, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x0000000A, 0x00000002, 0x00000023, +0x00000044, 0x00050048, 0x0000000A, 0x00000003, 0x00000023, 0x00000048, 0x00050048, 0x0000000A, +0x00000004, 0x00000023, 0x0000004C, 0x00030047, 0x0000000A, 0x00000002, 0x00040047, 0x0000001A, +0x00000006, 0x00000040, 0x00040048, 0x0000001B, 0x00000000, 0x00000005, 0x00050048, 0x0000001B, +0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001B, 0x00000000, 0x00000007, 0x00000010, +0x00030047, 0x0000001B, 0x00000002, 0x00040047, 0x0000001D, 0x00000022, 0x00000000, 0x00040047, +0x0000001D, 0x00000021, 0x00000000, 0x00050048, 0x0000002F, 0x00000000, 0x0000000B, 0x00000000, +0x00030047, 0x0000002F, 0x00000002, 0x00040047, 0x00000039, 0x0000001E, 0x00000000, 0x00040047, +0x00000049, 0x0000001E, 0x00000001, 0x00040047, 0x0000004C, 0x0000001E, 0x00000004, 0x00040047, +0x0000004F, 0x0000001E, 0x00000005, 0x00040047, 0x00000052, 0x0000001E, 0x00000003, 0x00040047, +0x00000056, 0x0000001E, 0x00000000, 0x00040047, 0x00000058, 0x0000001E, 0x00000002, 0x00020013, +0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, +0x00000007, 0x00000006, 0x00000004, 0x00040018, 0x00000008, 0x00000007, 0x00000004, 0x00040015, +0x00000009, 0x00000020, 0x00000000, 0x0007001E, 0x0000000A, 0x00000008, 0x00000009, 0x00000006, +0x00000006, 0x00000006, 0x00040020, 0x0000000B, 0x00000009, 0x0000000A, 0x0004003B, 0x0000000B, +0x0000000C, 0x00000009, 0x00040015, 0x0000000D, 0x00000020, 0x00000001, 0x0004002B, 0x0000000D, +0x0000000E, 0x00000001, 0x00040020, 0x0000000F, 0x00000009, 0x00000009, 0x00040020, 0x00000017, +0x00000007, 0x00000008, 0x0004002B, 0x00000009, 0x00000019, 0x00000010, 0x0004001C, 0x0000001A, +0x00000008, 0x00000019, 0x0003001E, 0x0000001B, 0x0000001A, 0x00040020, 0x0000001C, 0x00000002, +0x0000001B, 0x0004003B, 0x0000001C, 0x0000001D, 0x00000002, 0x0004002B, 0x0000000D, 0x0000001E, +0x00000000, 0x00040020, 0x0000001F, 0x00000002, 0x00000008, 0x0004002B, 0x0000000D, 0x00000026, +0x00000002, 0x0004002B, 0x0000000D, 0x0000002A, 0x00000003, 0x0003001E, 0x0000002F, 0x00000007, +0x00040020, 0x00000030, 0x00000003, 0x0000002F, 0x0004003B, 0x00000030, 0x00000031, 0x00000003, +0x00040020, 0x00000033, 0x00000009, 0x00000008, 0x00040017, 0x00000037, 0x00000006, 0x00000003, +0x00040020, 0x00000038, 0x00000001, 0x00000037, 0x0004003B, 0x00000038, 0x00000039, 0x00000001, +0x0004002B, 0x00000006, 0x0000003B, 0x3F800000, 0x00040020, 0x00000041, 0x00000003, 0x00000007, +0x00040020, 0x00000043, 0x00000007, 0x00000037, 0x00040020, 0x00000046, 0x00000007, 0x00000007, +0x00040020, 0x00000048, 0x00000001, 0x00000007, 0x0004003B, 0x00000048, 0x00000049, 0x00000001, +0x0004003B, 0x00000038, 0x0000004C, 0x00000001, 0x0004003B, 0x00000038, 0x0000004F, 0x00000001, +0x0004003B, 0x00000038, 0x00000052, 0x00000001, 0x00040017, 0x00000054, 0x00000006, 0x00000002, +0x00040020, 0x00000055, 0x00000003, 0x00000054, 0x0004003B, 0x00000055, 0x00000056, 0x00000003, +0x00040020, 0x00000057, 0x00000001, 0x00000054, 0x0004003B, 0x00000057, 0x00000058, 0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000017, 0x00000018, 0x00000007, 0x0004003B, 0x00000043, 0x00000044, 0x00000007, 0x0004003B, -0x00000046, 0x00000047, 0x00000007, 0x00050041, 0x0000000F, 0x00000010, 0x0000000C, 0x0000000E, -0x0004003D, 0x00000009, 0x00000011, 0x00000010, 0x000300F7, 0x00000016, 0x00000000, 0x000900FB, -0x00000011, 0x00000015, 0x00000000, 0x00000012, 0x00000001, 0x00000013, 0x00000002, 0x00000014, -0x000200F8, 0x00000015, 0x00060041, 0x0000001F, 0x0000002B, 0x0000001D, 0x0000001E, 0x0000002A, -0x0004003D, 0x00000008, 0x0000002C, 0x0000002B, 0x0003003E, 0x00000018, 0x0000002C, 0x000200F9, -0x00000016, 0x000200F8, 0x00000012, 0x00060041, 0x0000001F, 0x00000020, 0x0000001D, 0x0000001E, -0x0000001E, 0x0004003D, 0x00000008, 0x00000021, 0x00000020, 0x0003003E, 0x00000018, 0x00000021, -0x000200F9, 0x00000016, 0x000200F8, 0x00000013, 0x00060041, 0x0000001F, 0x00000023, 0x0000001D, -0x0000001E, 0x0000000E, 0x0004003D, 0x00000008, 0x00000024, 0x00000023, 0x0003003E, 0x00000018, -0x00000024, 0x000200F9, 0x00000016, 0x000200F8, 0x00000014, 0x00060041, 0x0000001F, 0x00000027, -0x0000001D, 0x0000001E, 0x00000026, 0x0004003D, 0x00000008, 0x00000028, 0x00000027, 0x0003003E, -0x00000018, 0x00000028, 0x000200F9, 0x00000016, 0x000200F8, 0x00000016, 0x0004003D, 0x00000008, -0x00000032, 0x00000018, 0x00050041, 0x00000033, 0x00000034, 0x0000000C, 0x0000001E, 0x0004003D, -0x00000008, 0x00000035, 0x00000034, 0x00050092, 0x00000008, 0x00000036, 0x00000032, 0x00000035, -0x0004003D, 0x00000037, 0x0000003A, 0x00000039, 0x00050051, 0x00000006, 0x0000003C, 0x0000003A, -0x00000000, 0x00050051, 0x00000006, 0x0000003D, 0x0000003A, 0x00000001, 0x00050051, 0x00000006, -0x0000003E, 0x0000003A, 0x00000002, 0x00070050, 0x00000007, 0x0000003F, 0x0000003C, 0x0000003D, -0x0000003E, 0x0000003B, 0x00050091, 0x00000007, 0x00000040, 0x00000036, 0x0000003F, 0x00050041, -0x00000041, 0x00000042, 0x00000031, 0x0000001E, 0x0003003E, 0x00000042, 0x00000040, 0x0004003D, -0x00000037, 0x00000045, 0x00000039, 0x0003003E, 0x00000044, 0x00000045, 0x0004003D, 0x00000007, -0x0000004A, 0x00000049, 0x0003003E, 0x00000047, 0x0000004A, 0x0004003D, 0x0000004B, 0x00000050, -0x0000004F, 0x0003003E, 0x0000004D, 0x00000050, 0x000100FD, 0x00010038, +0x00000046, 0x00000047, 0x00000007, 0x0004003B, 0x00000043, 0x0000004B, 0x00000007, 0x0004003B, +0x00000043, 0x0000004E, 0x00000007, 0x0004003B, 0x00000043, 0x00000051, 0x00000007, 0x00050041, +0x0000000F, 0x00000010, 0x0000000C, 0x0000000E, 0x0004003D, 0x00000009, 0x00000011, 0x00000010, +0x000300F7, 0x00000016, 0x00000000, 0x000900FB, 0x00000011, 0x00000015, 0x00000000, 0x00000012, +0x00000001, 0x00000013, 0x00000002, 0x00000014, 0x000200F8, 0x00000015, 0x00060041, 0x0000001F, +0x0000002B, 0x0000001D, 0x0000001E, 0x0000002A, 0x0004003D, 0x00000008, 0x0000002C, 0x0000002B, +0x0003003E, 0x00000018, 0x0000002C, 0x000200F9, 0x00000016, 0x000200F8, 0x00000012, 0x00060041, +0x0000001F, 0x00000020, 0x0000001D, 0x0000001E, 0x0000001E, 0x0004003D, 0x00000008, 0x00000021, +0x00000020, 0x0003003E, 0x00000018, 0x00000021, 0x000200F9, 0x00000016, 0x000200F8, 0x00000013, +0x00060041, 0x0000001F, 0x00000023, 0x0000001D, 0x0000001E, 0x0000000E, 0x0004003D, 0x00000008, +0x00000024, 0x00000023, 0x0003003E, 0x00000018, 0x00000024, 0x000200F9, 0x00000016, 0x000200F8, +0x00000014, 0x00060041, 0x0000001F, 0x00000027, 0x0000001D, 0x0000001E, 0x00000026, 0x0004003D, +0x00000008, 0x00000028, 0x00000027, 0x0003003E, 0x00000018, 0x00000028, 0x000200F9, 0x00000016, +0x000200F8, 0x00000016, 0x0004003D, 0x00000008, 0x00000032, 0x00000018, 0x00050041, 0x00000033, +0x00000034, 0x0000000C, 0x0000001E, 0x0004003D, 0x00000008, 0x00000035, 0x00000034, 0x00050092, +0x00000008, 0x00000036, 0x00000032, 0x00000035, 0x0004003D, 0x00000037, 0x0000003A, 0x00000039, +0x00050051, 0x00000006, 0x0000003C, 0x0000003A, 0x00000000, 0x00050051, 0x00000006, 0x0000003D, +0x0000003A, 0x00000001, 0x00050051, 0x00000006, 0x0000003E, 0x0000003A, 0x00000002, 0x00070050, +0x00000007, 0x0000003F, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003B, 0x00050091, 0x00000007, +0x00000040, 0x00000036, 0x0000003F, 0x00050041, 0x00000041, 0x00000042, 0x00000031, 0x0000001E, +0x0003003E, 0x00000042, 0x00000040, 0x0004003D, 0x00000037, 0x00000045, 0x00000039, 0x0003003E, +0x00000044, 0x00000045, 0x0004003D, 0x00000007, 0x0000004A, 0x00000049, 0x0003003E, 0x00000047, +0x0000004A, 0x0004003D, 0x00000037, 0x0000004D, 0x0000004C, 0x0003003E, 0x0000004B, 0x0000004D, +0x0004003D, 0x00000037, 0x00000050, 0x0000004F, 0x0003003E, 0x0000004E, 0x00000050, 0x0004003D, +0x00000037, 0x00000053, 0x00000052, 0x0003003E, 0x00000051, 0x00000053, 0x0004003D, 0x00000054, +0x00000059, 0x00000058, 0x0003003E, 0x00000056, 0x00000059, 0x000100FD, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Sharpenfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Sharpenfragspv.hpp new file mode 100644 index 000000000..cb18fe414 --- /dev/null +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Sharpenfragspv.hpp @@ -0,0 +1,86 @@ +// Header generated by Lumos Editor + +#include +#include + +constexpr uint32_t spirv_Sharpenfragspv_size = 2472; +constexpr std::array spirv_Sharpenfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000069, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, +0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000014, +0x0000005F, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, +0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, +0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, +0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, +0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, +0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00040005, +0x00000008, 0x756F6D61, 0x0000746E, 0x00050005, 0x0000000C, 0x6F6C6F63, 0x65547275, 0x00000078, +0x00050005, 0x00000010, 0x65545F75, 0x72757478, 0x00000065, 0x00050005, 0x00000014, 0x5474756F, +0x6F437865, 0x0064726F, 0x00040005, 0x00000018, 0x53786574, 0x00657A69, 0x00050005, 0x00000020, +0x6769656E, 0x756F6268, 0x00000072, 0x00040005, 0x00000024, 0x746E6563, 0x00006572, 0x00040005, +0x0000002C, 0x6F6C6F63, 0x00007275, 0x00040005, 0x0000005F, 0x4674756F, 0x00676172, 0x00040047, +0x00000010, 0x00000022, 0x00000000, 0x00040047, 0x00000010, 0x00000021, 0x00000001, 0x00040047, +0x00000014, 0x0000001E, 0x00000000, 0x00040047, 0x0000005F, 0x0000001E, 0x00000000, 0x00020013, +0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040020, +0x00000007, 0x00000007, 0x00000006, 0x0004002B, 0x00000006, 0x00000009, 0x3F333333, 0x00040017, +0x0000000A, 0x00000006, 0x00000004, 0x00040020, 0x0000000B, 0x00000007, 0x0000000A, 0x00090019, +0x0000000D, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, +0x0003001B, 0x0000000E, 0x0000000D, 0x00040020, 0x0000000F, 0x00000000, 0x0000000E, 0x0004003B, +0x0000000F, 0x00000010, 0x00000000, 0x00040017, 0x00000012, 0x00000006, 0x00000002, 0x00040020, +0x00000013, 0x00000001, 0x00000012, 0x0004003B, 0x00000013, 0x00000014, 0x00000001, 0x00040020, +0x00000017, 0x00000007, 0x00000012, 0x00040015, 0x0000001A, 0x00000020, 0x00000001, 0x0004002B, +0x0000001A, 0x0000001B, 0x00000000, 0x00040017, 0x0000001D, 0x0000001A, 0x00000002, 0x0004002B, +0x00000006, 0x00000022, 0xBF800000, 0x0004002B, 0x00000006, 0x00000026, 0x40800000, 0x0004002B, +0x00000006, 0x00000028, 0x3F800000, 0x00040017, 0x0000002A, 0x00000006, 0x00000003, 0x00040020, +0x0000002B, 0x00000007, 0x0000002A, 0x0004002B, 0x00000006, 0x0000002F, 0x00000000, 0x0005002C, +0x00000012, 0x00000030, 0x0000002F, 0x00000028, 0x0005002C, 0x00000012, 0x0000003A, 0x00000022, +0x0000002F, 0x0005002C, 0x00000012, 0x0000004A, 0x00000028, 0x0000002F, 0x0005002C, 0x00000012, +0x00000055, 0x0000002F, 0x00000022, 0x00040020, 0x0000005E, 0x00000003, 0x0000000A, 0x0004003B, +0x0000005E, 0x0000005F, 0x00000003, 0x00040015, 0x00000061, 0x00000020, 0x00000000, 0x0004002B, +0x00000061, 0x00000062, 0x00000003, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, +0x000200F8, 0x00000005, 0x0004003B, 0x00000007, 0x00000008, 0x00000007, 0x0004003B, 0x0000000B, +0x0000000C, 0x00000007, 0x0004003B, 0x00000017, 0x00000018, 0x00000007, 0x0004003B, 0x00000007, +0x00000020, 0x00000007, 0x0004003B, 0x00000007, 0x00000024, 0x00000007, 0x0004003B, 0x0000002B, +0x0000002C, 0x00000007, 0x0003003E, 0x00000008, 0x00000009, 0x0004003D, 0x0000000E, 0x00000011, +0x00000010, 0x0004003D, 0x00000012, 0x00000015, 0x00000014, 0x00050057, 0x0000000A, 0x00000016, +0x00000011, 0x00000015, 0x0003003E, 0x0000000C, 0x00000016, 0x0004003D, 0x0000000E, 0x00000019, +0x00000010, 0x00040064, 0x0000000D, 0x0000001C, 0x00000019, 0x00050067, 0x0000001D, 0x0000001E, +0x0000001C, 0x0000001B, 0x0004006F, 0x00000012, 0x0000001F, 0x0000001E, 0x0003003E, 0x00000018, +0x0000001F, 0x0004003D, 0x00000006, 0x00000021, 0x00000008, 0x00050085, 0x00000006, 0x00000023, +0x00000021, 0x00000022, 0x0003003E, 0x00000020, 0x00000023, 0x0004003D, 0x00000006, 0x00000025, +0x00000008, 0x00050085, 0x00000006, 0x00000027, 0x00000025, 0x00000026, 0x00050081, 0x00000006, +0x00000029, 0x00000027, 0x00000028, 0x0003003E, 0x00000024, 0x00000029, 0x0004003D, 0x0000000E, +0x0000002D, 0x00000010, 0x0004003D, 0x00000012, 0x0000002E, 0x00000014, 0x0004003D, 0x00000012, +0x00000031, 0x00000018, 0x00050088, 0x00000012, 0x00000032, 0x00000030, 0x00000031, 0x00050081, +0x00000012, 0x00000033, 0x0000002E, 0x00000032, 0x00050057, 0x0000000A, 0x00000034, 0x0000002D, +0x00000033, 0x0008004F, 0x0000002A, 0x00000035, 0x00000034, 0x00000034, 0x00000000, 0x00000001, +0x00000002, 0x0004003D, 0x00000006, 0x00000036, 0x00000020, 0x0005008E, 0x0000002A, 0x00000037, +0x00000035, 0x00000036, 0x0004003D, 0x0000000E, 0x00000038, 0x00000010, 0x0004003D, 0x00000012, +0x00000039, 0x00000014, 0x0004003D, 0x00000012, 0x0000003B, 0x00000018, 0x00050088, 0x00000012, +0x0000003C, 0x0000003A, 0x0000003B, 0x00050081, 0x00000012, 0x0000003D, 0x00000039, 0x0000003C, +0x00050057, 0x0000000A, 0x0000003E, 0x00000038, 0x0000003D, 0x0008004F, 0x0000002A, 0x0000003F, +0x0000003E, 0x0000003E, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000006, 0x00000040, +0x00000020, 0x0005008E, 0x0000002A, 0x00000041, 0x0000003F, 0x00000040, 0x00050081, 0x0000002A, +0x00000042, 0x00000037, 0x00000041, 0x0004003D, 0x0000000A, 0x00000043, 0x0000000C, 0x0008004F, +0x0000002A, 0x00000044, 0x00000043, 0x00000043, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, +0x00000006, 0x00000045, 0x00000024, 0x0005008E, 0x0000002A, 0x00000046, 0x00000044, 0x00000045, +0x00050081, 0x0000002A, 0x00000047, 0x00000042, 0x00000046, 0x0004003D, 0x0000000E, 0x00000048, +0x00000010, 0x0004003D, 0x00000012, 0x00000049, 0x00000014, 0x0004003D, 0x00000012, 0x0000004B, +0x00000018, 0x00050088, 0x00000012, 0x0000004C, 0x0000004A, 0x0000004B, 0x00050081, 0x00000012, +0x0000004D, 0x00000049, 0x0000004C, 0x00050057, 0x0000000A, 0x0000004E, 0x00000048, 0x0000004D, +0x0008004F, 0x0000002A, 0x0000004F, 0x0000004E, 0x0000004E, 0x00000000, 0x00000001, 0x00000002, +0x0004003D, 0x00000006, 0x00000050, 0x00000020, 0x0005008E, 0x0000002A, 0x00000051, 0x0000004F, +0x00000050, 0x00050081, 0x0000002A, 0x00000052, 0x00000047, 0x00000051, 0x0004003D, 0x0000000E, +0x00000053, 0x00000010, 0x0004003D, 0x00000012, 0x00000054, 0x00000014, 0x0004003D, 0x00000012, +0x00000056, 0x00000018, 0x00050088, 0x00000012, 0x00000057, 0x00000055, 0x00000056, 0x00050081, +0x00000012, 0x00000058, 0x00000054, 0x00000057, 0x00050057, 0x0000000A, 0x00000059, 0x00000053, +0x00000058, 0x0008004F, 0x0000002A, 0x0000005A, 0x00000059, 0x00000059, 0x00000000, 0x00000001, +0x00000002, 0x0004003D, 0x00000006, 0x0000005B, 0x00000020, 0x0005008E, 0x0000002A, 0x0000005C, +0x0000005A, 0x0000005B, 0x00050081, 0x0000002A, 0x0000005D, 0x00000052, 0x0000005C, 0x0003003E, +0x0000002C, 0x0000005D, 0x0004003D, 0x0000002A, 0x00000060, 0x0000002C, 0x00050041, 0x00000007, +0x00000063, 0x0000000C, 0x00000062, 0x0004003D, 0x00000006, 0x00000064, 0x00000063, 0x00050051, +0x00000006, 0x00000065, 0x00000060, 0x00000000, 0x00050051, 0x00000006, 0x00000066, 0x00000060, +0x00000001, 0x00050051, 0x00000006, 0x00000067, 0x00000060, 0x00000002, 0x00070050, 0x0000000A, +0x00000068, 0x00000065, 0x00000066, 0x00000067, 0x00000064, 0x0003003E, 0x0000005F, 0x00000068, +0x000100FD, 0x00010038, + }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxfragspv.hpp index 99d6fc057..a0b2407a7 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxfragspv.hpp @@ -3,121 +3,112 @@ #include #include -constexpr uint32_t spirv_Skyboxfragspv_size = 3676; -constexpr std::array spirv_Skyboxfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x0000008F, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_Skyboxfragspv_size = 3388; +constexpr std::array spirv_Skyboxfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000083, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x00000019, 0x00000089, 0x00030010, +0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000000E, 0x0000007B, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, -0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00060005, 0x0000000B, 0x61476544, -0x28616D6D, 0x3B336676, 0x00000000, 0x00040005, 0x0000000A, 0x6F6C6F63, 0x00007275, 0x00040005, -0x0000000E, 0x53746547, 0x0028796B, 0x00030005, 0x00000016, 0x00007675, 0x00050005, 0x00000019, -0x5074756F, 0x7469736F, 0x006E6F69, 0x00040005, 0x0000001E, 0x69646172, 0x00006E61, 0x00040005, -0x00000020, 0x506E7573, 0x0000736F, 0x00050005, 0x0000002D, 0x446E7573, 0x61747369, 0x0065636E, -0x00050005, 0x00000033, 0x74616373, 0x4D726574, 0x00746C75, 0x00040005, 0x00000037, 0x74736964, -0x00000000, 0x00040005, 0x00000043, 0x6F6C6F63, 0x00007275, 0x00040005, 0x00000064, 0x6F6C6F63, -0x00007275, 0x00060005, 0x00000067, 0x66696E55, 0x426D726F, 0x65666675, 0x00000072, 0x00060006, -0x00000067, 0x00000000, 0x6F707845, 0x65727573, 0x00000000, 0x00050006, 0x00000067, 0x00000001, -0x65646F4D, 0x00000000, 0x00060006, 0x00000067, 0x00000002, 0x72756C42, 0x6576654C, 0x0000006C, -0x00040006, 0x00000067, 0x00000003, 0x00003170, 0x00040005, 0x00000069, 0x61746164, 0x00000000, -0x00050005, 0x00000076, 0x75435F75, 0x614D6562, 0x00000070, 0x00040005, 0x0000007F, 0x61726170, -0x0000006D, 0x00040005, 0x00000089, 0x4674756F, 0x00676172, 0x00040047, 0x00000019, 0x0000001E, -0x00000000, 0x00050048, 0x00000067, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000067, -0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x00000067, 0x00000002, 0x00000023, 0x00000008, -0x00050048, 0x00000067, 0x00000003, 0x00000023, 0x0000000C, 0x00030047, 0x00000067, 0x00000002, -0x00040047, 0x00000069, 0x00000022, 0x00000000, 0x00040047, 0x00000069, 0x00000021, 0x00000002, -0x00040047, 0x00000076, 0x00000022, 0x00000000, 0x00040047, 0x00000076, 0x00000021, 0x00000001, -0x00040047, 0x00000089, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, -0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000003, -0x00040020, 0x00000008, 0x00000007, 0x00000007, 0x00040021, 0x00000009, 0x00000007, 0x00000008, -0x00030021, 0x0000000D, 0x00000007, 0x0004002B, 0x00000006, 0x00000011, 0x400CCCCD, 0x0006002C, -0x00000007, 0x00000012, 0x00000011, 0x00000011, 0x00000011, 0x00040017, 0x00000017, 0x00000006, -0x00000004, 0x00040020, 0x00000018, 0x00000001, 0x00000017, 0x0004003B, 0x00000018, 0x00000019, -0x00000001, 0x00040020, 0x0000001D, 0x00000007, 0x00000006, 0x0004002B, 0x00000006, 0x0000001F, -0xC0060A89, 0x00040015, 0x00000023, 0x00000020, 0x00000000, 0x0004002B, 0x00000023, 0x00000024, -0x00000000, 0x0004002B, 0x00000023, 0x00000028, 0x00000001, 0x0004002B, 0x00000006, 0x0000002A, -0x00000000, 0x0004002B, 0x00000023, 0x0000002B, 0x00000002, 0x0004002B, 0x00000006, 0x00000035, -0x3F800000, 0x0004002B, 0x00000006, 0x0000003A, 0x3DCCCCCD, 0x0004002B, 0x00000006, 0x0000003C, -0x3E99999A, 0x0004002B, 0x00000006, 0x00000045, 0x3F000000, 0x0006002C, 0x00000007, 0x00000046, -0x0000003C, 0x00000045, 0x00000035, 0x0004002B, 0x00000006, 0x00000051, 0x40000000, 0x0006002C, -0x00000007, 0x00000065, 0x00000035, 0x0000002A, 0x0000002A, 0x00040015, 0x00000066, 0x00000020, -0x00000001, 0x0006001E, 0x00000067, 0x00000006, 0x00000066, 0x00000006, 0x00000006, 0x00040020, -0x00000068, 0x00000002, 0x00000067, 0x0004003B, 0x00000068, 0x00000069, 0x00000002, 0x0004002B, -0x00000066, 0x0000006A, 0x00000001, 0x00040020, 0x0000006B, 0x00000002, 0x00000066, 0x0004002B, -0x00000066, 0x0000006E, 0x00000000, 0x00020014, 0x0000006F, 0x00090019, 0x00000073, 0x00000006, -0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000074, -0x00000073, 0x00040020, 0x00000075, 0x00000000, 0x00000074, 0x0004003B, 0x00000075, 0x00000076, -0x00000000, 0x0004002B, 0x00000066, 0x0000007A, 0x00000002, 0x00040020, 0x0000007B, 0x00000002, -0x00000006, 0x00040020, 0x00000088, 0x00000003, 0x00000017, 0x0004003B, 0x00000088, 0x00000089, -0x00000003, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, -0x0004003B, 0x00000008, 0x00000064, 0x00000007, 0x0004003B, 0x00000008, 0x0000007F, 0x00000007, -0x0003003E, 0x00000064, 0x00000065, 0x00050041, 0x0000006B, 0x0000006C, 0x00000069, 0x0000006A, -0x0004003D, 0x00000066, 0x0000006D, 0x0000006C, 0x000500AA, 0x0000006F, 0x00000070, 0x0000006D, -0x0000006E, 0x000300F7, 0x00000072, 0x00000000, 0x000400FA, 0x00000070, 0x00000071, 0x00000082, -0x000200F8, 0x00000071, 0x0004003D, 0x00000074, 0x00000077, 0x00000076, 0x0004003D, 0x00000017, -0x00000078, 0x00000019, 0x0008004F, 0x00000007, 0x00000079, 0x00000078, 0x00000078, 0x00000000, -0x00000001, 0x00000002, 0x00050041, 0x0000007B, 0x0000007C, 0x00000069, 0x0000007A, 0x0004003D, -0x00000006, 0x0000007D, 0x0000007C, 0x00070058, 0x00000017, 0x0000007E, 0x00000077, 0x00000079, -0x00000002, 0x0000007D, 0x0008004F, 0x00000007, 0x00000080, 0x0000007E, 0x0000007E, 0x00000000, -0x00000001, 0x00000002, 0x0003003E, 0x0000007F, 0x00000080, 0x00050039, 0x00000007, 0x00000081, -0x0000000B, 0x0000007F, 0x0003003E, 0x00000064, 0x00000081, 0x000200F9, 0x00000072, 0x000200F8, -0x00000082, 0x00040039, 0x00000007, 0x00000083, 0x0000000E, 0x0003003E, 0x00000064, 0x00000083, -0x000200F9, 0x00000072, 0x000200F8, 0x00000072, 0x00050041, 0x0000007B, 0x00000084, 0x00000069, -0x0000006E, 0x0004003D, 0x00000006, 0x00000085, 0x00000084, 0x0004003D, 0x00000007, 0x00000086, -0x00000064, 0x0005008E, 0x00000007, 0x00000087, 0x00000086, 0x00000085, 0x0003003E, 0x00000064, -0x00000087, 0x0004003D, 0x00000007, 0x0000008A, 0x00000064, 0x00050051, 0x00000006, 0x0000008B, -0x0000008A, 0x00000000, 0x00050051, 0x00000006, 0x0000008C, 0x0000008A, 0x00000001, 0x00050051, -0x00000006, 0x0000008D, 0x0000008A, 0x00000002, 0x00070050, 0x00000017, 0x0000008E, 0x0000008B, -0x0000008C, 0x0000008D, 0x00000035, 0x0003003E, 0x00000089, 0x0000008E, 0x000100FD, 0x00010038, -0x00050036, 0x00000007, 0x0000000B, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x0000000A, -0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, 0x00000010, 0x0000000A, 0x0007000C, 0x00000007, -0x00000013, 0x00000001, 0x0000001A, 0x00000010, 0x00000012, 0x000200FE, 0x00000013, 0x00010038, -0x00050036, 0x00000007, 0x0000000E, 0x00000000, 0x0000000D, 0x000200F8, 0x0000000F, 0x0004003B, -0x00000008, 0x00000016, 0x00000007, 0x0004003B, 0x0000001D, 0x0000001E, 0x00000007, 0x0004003B, -0x00000008, 0x00000020, 0x00000007, 0x0004003B, 0x0000001D, 0x0000002D, 0x00000007, 0x0004003B, -0x0000001D, 0x00000033, 0x00000007, 0x0004003B, 0x0000001D, 0x00000037, 0x00000007, 0x0004003B, -0x00000008, 0x00000043, 0x00000007, 0x0004003D, 0x00000017, 0x0000001A, 0x00000019, 0x0008004F, -0x00000007, 0x0000001B, 0x0000001A, 0x0000001A, 0x00000000, 0x00000001, 0x00000002, 0x0006000C, -0x00000007, 0x0000001C, 0x00000001, 0x00000045, 0x0000001B, 0x0003003E, 0x00000016, 0x0000001C, -0x0003003E, 0x0000001E, 0x0000001F, 0x0004003D, 0x00000006, 0x00000021, 0x0000001E, 0x0006000C, -0x00000006, 0x00000022, 0x00000001, 0x0000000E, 0x00000021, 0x00050041, 0x0000001D, 0x00000025, -0x00000020, 0x00000024, 0x0003003E, 0x00000025, 0x00000022, 0x0004003D, 0x00000006, 0x00000026, -0x0000001E, 0x0006000C, 0x00000006, 0x00000027, 0x00000001, 0x0000000D, 0x00000026, 0x00050041, -0x0000001D, 0x00000029, 0x00000020, 0x00000028, 0x0003003E, 0x00000029, 0x00000027, 0x00050041, -0x0000001D, 0x0000002C, 0x00000020, 0x0000002B, 0x0003003E, 0x0000002C, 0x0000002A, 0x0004003D, -0x00000007, 0x0000002E, 0x00000016, 0x0004003D, 0x00000007, 0x0000002F, 0x00000020, 0x0006000C, -0x00000007, 0x00000030, 0x00000001, 0x00000045, 0x0000002F, 0x00050083, 0x00000007, 0x00000031, -0x0000002E, 0x00000030, 0x0006000C, 0x00000006, 0x00000032, 0x00000001, 0x00000042, 0x00000031, -0x0003003E, 0x0000002D, 0x00000032, 0x0004003D, 0x00000006, 0x00000034, 0x0000002D, 0x0008000C, -0x00000006, 0x00000036, 0x00000001, 0x0000002B, 0x00000034, 0x0000002A, 0x00000035, 0x0003003E, -0x00000033, 0x00000036, 0x00050041, 0x0000001D, 0x00000038, 0x00000016, 0x00000028, 0x0004003D, -0x00000006, 0x00000039, 0x00000038, 0x00050081, 0x00000006, 0x0000003B, 0x00000039, 0x0000003A, -0x0003003E, 0x00000037, 0x0000003B, 0x0004003D, 0x00000006, 0x0000003D, 0x00000033, 0x0004003D, -0x00000006, 0x0000003E, 0x00000037, 0x0008000C, 0x00000006, 0x0000003F, 0x00000001, 0x0000002E, -0x0000003D, 0x00000035, 0x0000003E, 0x00050085, 0x00000006, 0x00000040, 0x0000003C, 0x0000003F, -0x0004003D, 0x00000006, 0x00000041, 0x00000037, 0x00050088, 0x00000006, 0x00000042, 0x00000040, -0x00000041, 0x0003003E, 0x00000037, 0x00000042, 0x0004003D, 0x00000006, 0x00000044, 0x00000037, -0x0005008E, 0x00000007, 0x00000047, 0x00000046, 0x00000044, 0x0003003E, 0x00000043, 0x00000047, -0x0004003D, 0x00000007, 0x00000048, 0x00000043, 0x00060050, 0x00000007, 0x00000049, 0x0000002A, -0x0000002A, 0x0000002A, 0x0007000C, 0x00000007, 0x0000004A, 0x00000001, 0x00000028, 0x00000048, -0x00000049, 0x0003003E, 0x00000043, 0x0000004A, 0x0004003D, 0x00000007, 0x0000004B, 0x00000043, -0x0004003D, 0x00000007, 0x0000004C, 0x00000043, 0x00060050, 0x00000007, 0x0000004D, 0x00000035, -0x00000035, 0x00000035, 0x00050083, 0x00000007, 0x0000004E, 0x0000004D, 0x0000004C, 0x0007000C, -0x00000007, 0x0000004F, 0x00000001, 0x0000001A, 0x0000004B, 0x0000004E, 0x0004003D, 0x00000007, -0x00000050, 0x00000043, 0x0004003D, 0x00000007, 0x00000052, 0x00000043, 0x0005008E, 0x00000007, -0x00000053, 0x00000052, 0x00000051, 0x00060050, 0x00000007, 0x00000054, 0x00000045, 0x00000045, -0x00000045, 0x00050081, 0x00000007, 0x00000055, 0x00000053, 0x00000054, 0x0004003D, 0x00000007, -0x00000056, 0x00000043, 0x00050083, 0x00000007, 0x00000057, 0x00000055, 0x00000056, 0x00050088, -0x00000007, 0x00000058, 0x00000050, 0x00000057, 0x00050041, 0x0000001D, 0x00000059, 0x00000020, -0x00000028, 0x0004003D, 0x00000006, 0x0000005A, 0x00000059, 0x00050085, 0x00000006, 0x0000005B, -0x0000005A, 0x00000051, 0x0008000C, 0x00000006, 0x0000005C, 0x00000001, 0x0000002B, 0x0000005B, -0x0000002A, 0x00000035, 0x00060050, 0x00000007, 0x0000005D, 0x0000005C, 0x0000005C, 0x0000005C, -0x0008000C, 0x00000007, 0x0000005E, 0x00000001, 0x0000002E, 0x0000004F, 0x00000058, 0x0000005D, -0x00060050, 0x00000007, 0x0000005F, 0x0000002A, 0x0000002A, 0x0000002A, 0x0007000C, 0x00000007, -0x00000060, 0x00000001, 0x00000028, 0x0000005E, 0x0000005F, 0x0003003E, 0x00000043, 0x00000060, -0x0004003D, 0x00000007, 0x00000061, 0x00000043, 0x000200FE, 0x00000061, 0x00010038, +0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00040005, 0x00000009, 0x53746547, +0x0028796B, 0x00030005, 0x0000000C, 0x00007675, 0x00050005, 0x0000000E, 0x5074756F, 0x7469736F, +0x006E6F69, 0x00040005, 0x00000012, 0x69646172, 0x00006E61, 0x00040005, 0x00000014, 0x506E7573, +0x0000736F, 0x00050005, 0x00000021, 0x446E7573, 0x61747369, 0x0065636E, 0x00050005, 0x00000027, +0x74616373, 0x4D726574, 0x00746C75, 0x00040005, 0x0000002B, 0x74736964, 0x00000000, 0x00040005, +0x00000037, 0x6F6C6F63, 0x00007275, 0x00040005, 0x00000058, 0x6F6C6F63, 0x00007275, 0x00060005, +0x0000005B, 0x66696E55, 0x426D726F, 0x65666675, 0x00000072, 0x00060006, 0x0000005B, 0x00000000, +0x6F707845, 0x65727573, 0x00000000, 0x00050006, 0x0000005B, 0x00000001, 0x65646F4D, 0x00000000, +0x00060006, 0x0000005B, 0x00000002, 0x72756C42, 0x6576654C, 0x0000006C, 0x00040006, 0x0000005B, +0x00000003, 0x00003170, 0x00040005, 0x0000005D, 0x61746164, 0x00000000, 0x00050005, 0x0000006A, +0x75435F75, 0x614D6562, 0x00000070, 0x00040005, 0x0000007B, 0x4674756F, 0x00676172, 0x00040047, +0x0000000E, 0x0000001E, 0x00000000, 0x00050048, 0x0000005B, 0x00000000, 0x00000023, 0x00000000, +0x00050048, 0x0000005B, 0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x0000005B, 0x00000002, +0x00000023, 0x00000008, 0x00050048, 0x0000005B, 0x00000003, 0x00000023, 0x0000000C, 0x00030047, +0x0000005B, 0x00000002, 0x00040047, 0x0000005D, 0x00000022, 0x00000000, 0x00040047, 0x0000005D, +0x00000021, 0x00000002, 0x00040047, 0x0000006A, 0x00000022, 0x00000000, 0x00040047, 0x0000006A, +0x00000021, 0x00000001, 0x00040047, 0x0000007B, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, +0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, +0x00000006, 0x00000003, 0x00030021, 0x00000008, 0x00000007, 0x00040020, 0x0000000B, 0x00000007, +0x00000007, 0x00040020, 0x0000000D, 0x00000001, 0x00000007, 0x0004003B, 0x0000000D, 0x0000000E, +0x00000001, 0x00040020, 0x00000011, 0x00000007, 0x00000006, 0x0004002B, 0x00000006, 0x00000013, +0xC0060A89, 0x00040015, 0x00000017, 0x00000020, 0x00000000, 0x0004002B, 0x00000017, 0x00000018, +0x00000000, 0x0004002B, 0x00000017, 0x0000001C, 0x00000001, 0x0004002B, 0x00000006, 0x0000001E, +0x00000000, 0x0004002B, 0x00000017, 0x0000001F, 0x00000002, 0x0004002B, 0x00000006, 0x00000029, +0x3F800000, 0x0004002B, 0x00000006, 0x0000002E, 0x3DCCCCCD, 0x0004002B, 0x00000006, 0x00000030, +0x3E99999A, 0x0004002B, 0x00000006, 0x00000039, 0x3F000000, 0x0006002C, 0x00000007, 0x0000003A, +0x00000030, 0x00000039, 0x00000029, 0x0004002B, 0x00000006, 0x00000045, 0x40000000, 0x0006002C, +0x00000007, 0x00000059, 0x00000029, 0x0000001E, 0x0000001E, 0x00040015, 0x0000005A, 0x00000020, +0x00000001, 0x0006001E, 0x0000005B, 0x00000006, 0x0000005A, 0x00000006, 0x00000006, 0x00040020, +0x0000005C, 0x00000002, 0x0000005B, 0x0004003B, 0x0000005C, 0x0000005D, 0x00000002, 0x0004002B, +0x0000005A, 0x0000005E, 0x00000001, 0x00040020, 0x0000005F, 0x00000002, 0x0000005A, 0x0004002B, +0x0000005A, 0x00000062, 0x00000000, 0x00020014, 0x00000063, 0x00090019, 0x00000067, 0x00000006, +0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001B, 0x00000068, +0x00000067, 0x00040020, 0x00000069, 0x00000000, 0x00000068, 0x0004003B, 0x00000069, 0x0000006A, +0x00000000, 0x0004002B, 0x0000005A, 0x0000006D, 0x00000002, 0x00040020, 0x0000006E, 0x00000002, +0x00000006, 0x00040017, 0x00000071, 0x00000006, 0x00000004, 0x00040020, 0x0000007A, 0x00000003, +0x00000071, 0x0004003B, 0x0000007A, 0x0000007B, 0x00000003, 0x0004002B, 0x00000006, 0x00000081, +0x40C90FDB, 0x0004002B, 0x00000006, 0x00000082, 0x3727C5AC, 0x00050036, 0x00000002, 0x00000004, +0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x0000000B, 0x00000058, 0x00000007, +0x0003003E, 0x00000058, 0x00000059, 0x00050041, 0x0000005F, 0x00000060, 0x0000005D, 0x0000005E, +0x0004003D, 0x0000005A, 0x00000061, 0x00000060, 0x000500AA, 0x00000063, 0x00000064, 0x00000061, +0x00000062, 0x000300F7, 0x00000066, 0x00000000, 0x000400FA, 0x00000064, 0x00000065, 0x00000074, +0x000200F8, 0x00000065, 0x0004003D, 0x00000068, 0x0000006B, 0x0000006A, 0x0004003D, 0x00000007, +0x0000006C, 0x0000000E, 0x00050041, 0x0000006E, 0x0000006F, 0x0000005D, 0x0000006D, 0x0004003D, +0x00000006, 0x00000070, 0x0000006F, 0x00070058, 0x00000071, 0x00000072, 0x0000006B, 0x0000006C, +0x00000002, 0x00000070, 0x0008004F, 0x00000007, 0x00000073, 0x00000072, 0x00000072, 0x00000000, +0x00000001, 0x00000002, 0x0003003E, 0x00000058, 0x00000073, 0x000200F9, 0x00000066, 0x000200F8, +0x00000074, 0x00040039, 0x00000007, 0x00000075, 0x00000009, 0x0003003E, 0x00000058, 0x00000075, +0x000200F9, 0x00000066, 0x000200F8, 0x00000066, 0x00050041, 0x0000006E, 0x00000076, 0x0000005D, +0x00000062, 0x0004003D, 0x00000006, 0x00000077, 0x00000076, 0x0004003D, 0x00000007, 0x00000078, +0x00000058, 0x0005008E, 0x00000007, 0x00000079, 0x00000078, 0x00000077, 0x0003003E, 0x00000058, +0x00000079, 0x0004003D, 0x00000007, 0x0000007C, 0x00000058, 0x00050051, 0x00000006, 0x0000007D, +0x0000007C, 0x00000000, 0x00050051, 0x00000006, 0x0000007E, 0x0000007C, 0x00000001, 0x00050051, +0x00000006, 0x0000007F, 0x0000007C, 0x00000002, 0x00070050, 0x00000071, 0x00000080, 0x0000007D, +0x0000007E, 0x0000007F, 0x00000029, 0x0003003E, 0x0000007B, 0x00000080, 0x000100FD, 0x00010038, +0x00050036, 0x00000007, 0x00000009, 0x00000000, 0x00000008, 0x000200F8, 0x0000000A, 0x0004003B, +0x0000000B, 0x0000000C, 0x00000007, 0x0004003B, 0x00000011, 0x00000012, 0x00000007, 0x0004003B, +0x0000000B, 0x00000014, 0x00000007, 0x0004003B, 0x00000011, 0x00000021, 0x00000007, 0x0004003B, +0x00000011, 0x00000027, 0x00000007, 0x0004003B, 0x00000011, 0x0000002B, 0x00000007, 0x0004003B, +0x0000000B, 0x00000037, 0x00000007, 0x0004003D, 0x00000007, 0x0000000F, 0x0000000E, 0x0006000C, +0x00000007, 0x00000010, 0x00000001, 0x00000045, 0x0000000F, 0x0003003E, 0x0000000C, 0x00000010, +0x0003003E, 0x00000012, 0x00000013, 0x0004003D, 0x00000006, 0x00000015, 0x00000012, 0x0006000C, +0x00000006, 0x00000016, 0x00000001, 0x0000000E, 0x00000015, 0x00050041, 0x00000011, 0x00000019, +0x00000014, 0x00000018, 0x0003003E, 0x00000019, 0x00000016, 0x0004003D, 0x00000006, 0x0000001A, +0x00000012, 0x0006000C, 0x00000006, 0x0000001B, 0x00000001, 0x0000000D, 0x0000001A, 0x00050041, +0x00000011, 0x0000001D, 0x00000014, 0x0000001C, 0x0003003E, 0x0000001D, 0x0000001B, 0x00050041, +0x00000011, 0x00000020, 0x00000014, 0x0000001F, 0x0003003E, 0x00000020, 0x0000001E, 0x0004003D, +0x00000007, 0x00000022, 0x0000000C, 0x0004003D, 0x00000007, 0x00000023, 0x00000014, 0x0006000C, +0x00000007, 0x00000024, 0x00000001, 0x00000045, 0x00000023, 0x00050083, 0x00000007, 0x00000025, +0x00000022, 0x00000024, 0x0006000C, 0x00000006, 0x00000026, 0x00000001, 0x00000042, 0x00000025, +0x0003003E, 0x00000021, 0x00000026, 0x0004003D, 0x00000006, 0x00000028, 0x00000021, 0x0008000C, +0x00000006, 0x0000002A, 0x00000001, 0x0000002B, 0x00000028, 0x0000001E, 0x00000029, 0x0003003E, +0x00000027, 0x0000002A, 0x00050041, 0x00000011, 0x0000002C, 0x0000000C, 0x0000001C, 0x0004003D, +0x00000006, 0x0000002D, 0x0000002C, 0x00050081, 0x00000006, 0x0000002F, 0x0000002D, 0x0000002E, +0x0003003E, 0x0000002B, 0x0000002F, 0x0004003D, 0x00000006, 0x00000031, 0x00000027, 0x0004003D, +0x00000006, 0x00000032, 0x0000002B, 0x0008000C, 0x00000006, 0x00000033, 0x00000001, 0x0000002E, +0x00000031, 0x00000029, 0x00000032, 0x00050085, 0x00000006, 0x00000034, 0x00000030, 0x00000033, +0x0004003D, 0x00000006, 0x00000035, 0x0000002B, 0x00050088, 0x00000006, 0x00000036, 0x00000034, +0x00000035, 0x0003003E, 0x0000002B, 0x00000036, 0x0004003D, 0x00000006, 0x00000038, 0x0000002B, +0x0005008E, 0x00000007, 0x0000003B, 0x0000003A, 0x00000038, 0x0003003E, 0x00000037, 0x0000003B, +0x0004003D, 0x00000007, 0x0000003C, 0x00000037, 0x00060050, 0x00000007, 0x0000003D, 0x0000001E, +0x0000001E, 0x0000001E, 0x0007000C, 0x00000007, 0x0000003E, 0x00000001, 0x00000028, 0x0000003C, +0x0000003D, 0x0003003E, 0x00000037, 0x0000003E, 0x0004003D, 0x00000007, 0x0000003F, 0x00000037, +0x0004003D, 0x00000007, 0x00000040, 0x00000037, 0x00060050, 0x00000007, 0x00000041, 0x00000029, +0x00000029, 0x00000029, 0x00050083, 0x00000007, 0x00000042, 0x00000041, 0x00000040, 0x0007000C, +0x00000007, 0x00000043, 0x00000001, 0x0000001A, 0x0000003F, 0x00000042, 0x0004003D, 0x00000007, +0x00000044, 0x00000037, 0x0004003D, 0x00000007, 0x00000046, 0x00000037, 0x0005008E, 0x00000007, +0x00000047, 0x00000046, 0x00000045, 0x00060050, 0x00000007, 0x00000048, 0x00000039, 0x00000039, +0x00000039, 0x00050081, 0x00000007, 0x00000049, 0x00000047, 0x00000048, 0x0004003D, 0x00000007, +0x0000004A, 0x00000037, 0x00050083, 0x00000007, 0x0000004B, 0x00000049, 0x0000004A, 0x00050088, +0x00000007, 0x0000004C, 0x00000044, 0x0000004B, 0x00050041, 0x00000011, 0x0000004D, 0x00000014, +0x0000001C, 0x0004003D, 0x00000006, 0x0000004E, 0x0000004D, 0x00050085, 0x00000006, 0x0000004F, +0x0000004E, 0x00000045, 0x0008000C, 0x00000006, 0x00000050, 0x00000001, 0x0000002B, 0x0000004F, +0x0000001E, 0x00000029, 0x00060050, 0x00000007, 0x00000051, 0x00000050, 0x00000050, 0x00000050, +0x0008000C, 0x00000007, 0x00000052, 0x00000001, 0x0000002E, 0x00000043, 0x0000004C, 0x00000051, +0x00060050, 0x00000007, 0x00000053, 0x0000001E, 0x0000001E, 0x0000001E, 0x0007000C, 0x00000007, +0x00000054, 0x00000001, 0x00000028, 0x00000052, 0x00000053, 0x0003003E, 0x00000037, 0x00000054, +0x0004003D, 0x00000007, 0x00000055, 0x00000037, 0x000200FE, 0x00000055, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxvertspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxvertspv.hpp index 4e8721ce6..c4dfddf31 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxvertspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/Skyboxvertspv.hpp @@ -3,55 +3,69 @@ #include #include -constexpr uint32_t spirv_Skyboxvertspv_size = 1552; -constexpr std::array spirv_Skyboxvertspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x00000030, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, +constexpr uint32_t spirv_Skyboxvertspv_size = 1988; +constexpr std::array spirv_Skyboxvertspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x0000003E, 0x00000000, 0x00020011, 0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, 0x00000000, 0x00000001, -0x000C000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000000C, 0x00000019, 0x0000001F, -0x0000002A, 0x0000002D, 0x0000002E, 0x0000002F, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, -0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, -0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, -0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, -0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, -0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00030005, -0x00000009, 0x00736F70, 0x00050005, 0x0000000C, 0x6F506E69, 0x69746973, 0x00006E6F, 0x00060005, -0x00000017, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, 0x00000017, 0x00000000, -0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000019, 0x00000000, 0x00050005, 0x0000001F, -0x5074756F, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000021, 0x004F4255, 0x00060006, 0x00000021, -0x00000000, 0x70766E69, 0x766A6F72, 0x00776569, 0x00030005, 0x00000023, 0x006F6275, 0x00040005, -0x0000002A, 0x6F436E69, 0x00726F6C, 0x00050005, 0x0000002D, 0x65546E69, 0x6F6F4378, 0x00006472, -0x00050005, 0x0000002E, 0x6F4E6E69, 0x6C616D72, 0x00000000, 0x00050005, 0x0000002F, 0x61546E69, -0x6E65676E, 0x00000074, 0x00040047, 0x0000000C, 0x0000001E, 0x00000000, 0x00050048, 0x00000017, -0x00000000, 0x0000000B, 0x00000000, 0x00030047, 0x00000017, 0x00000002, 0x00040047, 0x0000001F, -0x0000001E, 0x00000000, 0x00040048, 0x00000021, 0x00000000, 0x00000005, 0x00050048, 0x00000021, -0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000021, 0x00000000, 0x00000007, 0x00000010, -0x00030047, 0x00000021, 0x00000002, 0x00040047, 0x00000023, 0x00000022, 0x00000000, 0x00040047, -0x00000023, 0x00000021, 0x00000000, 0x00040047, 0x0000002A, 0x0000001E, 0x00000001, 0x00040047, -0x0000002D, 0x0000001E, 0x00000002, 0x00040047, 0x0000002E, 0x0000001E, 0x00000003, 0x00040047, -0x0000002F, 0x0000001E, 0x00000004, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, -0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000004, 0x00040020, -0x00000008, 0x00000007, 0x00000007, 0x00040017, 0x0000000A, 0x00000006, 0x00000003, 0x00040020, -0x0000000B, 0x00000001, 0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, 0x00000001, 0x0004002B, -0x00000006, 0x0000000E, 0x3F800000, 0x00040015, 0x00000013, 0x00000020, 0x00000000, 0x0004002B, -0x00000013, 0x00000014, 0x00000002, 0x00040020, 0x00000015, 0x00000007, 0x00000006, 0x0003001E, -0x00000017, 0x00000007, 0x00040020, 0x00000018, 0x00000003, 0x00000017, 0x0004003B, 0x00000018, -0x00000019, 0x00000003, 0x00040015, 0x0000001A, 0x00000020, 0x00000001, 0x0004002B, 0x0000001A, -0x0000001B, 0x00000000, 0x00040020, 0x0000001D, 0x00000003, 0x00000007, 0x0004003B, 0x0000001D, -0x0000001F, 0x00000003, 0x00040018, 0x00000020, 0x00000007, 0x00000004, 0x0003001E, 0x00000021, -0x00000020, 0x00040020, 0x00000022, 0x00000002, 0x00000021, 0x0004003B, 0x00000022, 0x00000023, -0x00000002, 0x00040020, 0x00000024, 0x00000002, 0x00000020, 0x00040020, 0x00000029, 0x00000001, -0x00000007, 0x0004003B, 0x00000029, 0x0000002A, 0x00000001, 0x00040017, 0x0000002B, 0x00000006, -0x00000002, 0x00040020, 0x0000002C, 0x00000001, 0x0000002B, 0x0004003B, 0x0000002C, 0x0000002D, -0x00000001, 0x0004003B, 0x0000000B, 0x0000002E, 0x00000001, 0x0004003B, 0x0000000B, 0x0000002F, -0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, -0x0004003B, 0x00000008, 0x00000009, 0x00000007, 0x0004003D, 0x0000000A, 0x0000000D, 0x0000000C, -0x00050051, 0x00000006, 0x0000000F, 0x0000000D, 0x00000000, 0x00050051, 0x00000006, 0x00000010, -0x0000000D, 0x00000001, 0x00050051, 0x00000006, 0x00000011, 0x0000000D, 0x00000002, 0x00070050, -0x00000007, 0x00000012, 0x0000000F, 0x00000010, 0x00000011, 0x0000000E, 0x0003003E, 0x00000009, -0x00000012, 0x00050041, 0x00000015, 0x00000016, 0x00000009, 0x00000014, 0x0003003E, 0x00000016, -0x0000000E, 0x0004003D, 0x00000007, 0x0000001C, 0x00000009, 0x00050041, 0x0000001D, 0x0000001E, -0x00000019, 0x0000001B, 0x0003003E, 0x0000001E, 0x0000001C, 0x00050041, 0x00000024, 0x00000025, -0x00000023, 0x0000001B, 0x0004003D, 0x00000020, 0x00000026, 0x00000025, 0x0004003D, 0x00000007, -0x00000027, 0x00000009, 0x00050091, 0x00000007, 0x00000028, 0x00000026, 0x00000027, 0x0003003E, -0x0000001F, 0x00000028, 0x000100FD, 0x00010038, +0x000D000F, 0x00000000, 0x00000004, 0x6E69616D, 0x00000000, 0x0000000C, 0x00000016, 0x0000001D, +0x00000038, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x00030003, 0x00000002, 0x000001C2, +0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, +0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, +0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, +0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, +0x64756C63, 0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, +0x00030005, 0x00000009, 0x00736F70, 0x00050005, 0x0000000C, 0x6F506E69, 0x69746973, 0x00006E6F, +0x00060005, 0x00000014, 0x505F6C67, 0x65567265, 0x78657472, 0x00000000, 0x00060006, 0x00000014, +0x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69, 0x00030005, 0x00000016, 0x00000000, 0x00050005, +0x0000001D, 0x5074756F, 0x7469736F, 0x006E6F69, 0x00030005, 0x0000001F, 0x004F4255, 0x00070006, +0x0000001F, 0x00000000, 0x50766E69, 0x656A6F72, 0x6F697463, 0x0000006E, 0x00050006, 0x0000001F, +0x00000001, 0x56766E69, 0x00776569, 0x00030005, 0x00000021, 0x006F6275, 0x00040005, 0x00000038, +0x6F436E69, 0x00726F6C, 0x00050005, 0x0000003A, 0x65546E69, 0x6F6F4378, 0x00006472, 0x00050005, +0x0000003B, 0x6F4E6E69, 0x6C616D72, 0x00000000, 0x00050005, 0x0000003C, 0x61546E69, 0x6E65676E, +0x00000074, 0x00050005, 0x0000003D, 0x69426E69, 0x676E6174, 0x00746E65, 0x00040047, 0x0000000C, +0x0000001E, 0x00000000, 0x00050048, 0x00000014, 0x00000000, 0x0000000B, 0x00000000, 0x00030047, +0x00000014, 0x00000002, 0x00040047, 0x0000001D, 0x0000001E, 0x00000000, 0x00040048, 0x0000001F, +0x00000000, 0x00000005, 0x00050048, 0x0000001F, 0x00000000, 0x00000023, 0x00000000, 0x00050048, +0x0000001F, 0x00000000, 0x00000007, 0x00000010, 0x00040048, 0x0000001F, 0x00000001, 0x00000005, +0x00050048, 0x0000001F, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x0000001F, 0x00000001, +0x00000007, 0x00000010, 0x00030047, 0x0000001F, 0x00000002, 0x00040047, 0x00000021, 0x00000022, +0x00000000, 0x00040047, 0x00000021, 0x00000021, 0x00000000, 0x00040047, 0x00000038, 0x0000001E, +0x00000001, 0x00040047, 0x0000003A, 0x0000001E, 0x00000002, 0x00040047, 0x0000003B, 0x0000001E, +0x00000003, 0x00040047, 0x0000003C, 0x0000001E, 0x00000004, 0x00040047, 0x0000003D, 0x0000001E, +0x00000005, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, +0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000004, 0x00040020, 0x00000008, 0x00000007, +0x00000007, 0x00040017, 0x0000000A, 0x00000006, 0x00000003, 0x00040020, 0x0000000B, 0x00000001, +0x0000000A, 0x0004003B, 0x0000000B, 0x0000000C, 0x00000001, 0x00040017, 0x0000000D, 0x00000006, +0x00000002, 0x0004002B, 0x00000006, 0x00000010, 0x3F800000, 0x0003001E, 0x00000014, 0x00000007, +0x00040020, 0x00000015, 0x00000003, 0x00000014, 0x0004003B, 0x00000015, 0x00000016, 0x00000003, +0x00040015, 0x00000017, 0x00000020, 0x00000001, 0x0004002B, 0x00000017, 0x00000018, 0x00000000, +0x00040020, 0x0000001A, 0x00000003, 0x00000007, 0x00040020, 0x0000001C, 0x00000003, 0x0000000A, +0x0004003B, 0x0000001C, 0x0000001D, 0x00000003, 0x00040018, 0x0000001E, 0x00000007, 0x00000004, +0x0004001E, 0x0000001F, 0x0000001E, 0x0000001E, 0x00040020, 0x00000020, 0x00000002, 0x0000001F, +0x0004003B, 0x00000020, 0x00000021, 0x00000002, 0x0004002B, 0x00000017, 0x00000022, 0x00000001, +0x00040020, 0x00000023, 0x00000002, 0x0000001E, 0x00040018, 0x00000026, 0x0000000A, 0x00000003, +0x00040020, 0x00000037, 0x00000001, 0x00000007, 0x0004003B, 0x00000037, 0x00000038, 0x00000001, +0x00040020, 0x00000039, 0x00000001, 0x0000000D, 0x0004003B, 0x00000039, 0x0000003A, 0x00000001, +0x0004003B, 0x0000000B, 0x0000003B, 0x00000001, 0x0004003B, 0x0000000B, 0x0000003C, 0x00000001, +0x0004003B, 0x0000000B, 0x0000003D, 0x00000001, 0x00050036, 0x00000002, 0x00000004, 0x00000000, +0x00000003, 0x000200F8, 0x00000005, 0x0004003B, 0x00000008, 0x00000009, 0x00000007, 0x0004003D, +0x0000000A, 0x0000000E, 0x0000000C, 0x0007004F, 0x0000000D, 0x0000000F, 0x0000000E, 0x0000000E, +0x00000000, 0x00000001, 0x00050051, 0x00000006, 0x00000011, 0x0000000F, 0x00000000, 0x00050051, +0x00000006, 0x00000012, 0x0000000F, 0x00000001, 0x00070050, 0x00000007, 0x00000013, 0x00000011, +0x00000012, 0x00000010, 0x00000010, 0x0003003E, 0x00000009, 0x00000013, 0x0004003D, 0x00000007, +0x00000019, 0x00000009, 0x00050041, 0x0000001A, 0x0000001B, 0x00000016, 0x00000018, 0x0003003E, +0x0000001B, 0x00000019, 0x00050041, 0x00000023, 0x00000024, 0x00000021, 0x00000022, 0x0004003D, +0x0000001E, 0x00000025, 0x00000024, 0x00050051, 0x00000007, 0x00000027, 0x00000025, 0x00000000, +0x0008004F, 0x0000000A, 0x00000028, 0x00000027, 0x00000027, 0x00000000, 0x00000001, 0x00000002, +0x00050051, 0x00000007, 0x00000029, 0x00000025, 0x00000001, 0x0008004F, 0x0000000A, 0x0000002A, +0x00000029, 0x00000029, 0x00000000, 0x00000001, 0x00000002, 0x00050051, 0x00000007, 0x0000002B, +0x00000025, 0x00000002, 0x0008004F, 0x0000000A, 0x0000002C, 0x0000002B, 0x0000002B, 0x00000000, +0x00000001, 0x00000002, 0x00060050, 0x00000026, 0x0000002D, 0x00000028, 0x0000002A, 0x0000002C, +0x00050041, 0x00000023, 0x0000002E, 0x00000021, 0x00000018, 0x0004003D, 0x0000001E, 0x0000002F, +0x0000002E, 0x0004003D, 0x00000007, 0x00000030, 0x00000009, 0x00050091, 0x00000007, 0x00000031, +0x0000002F, 0x00000030, 0x00050051, 0x00000006, 0x00000032, 0x00000031, 0x00000000, 0x00050051, +0x00000006, 0x00000033, 0x00000031, 0x00000001, 0x00050051, 0x00000006, 0x00000034, 0x00000031, +0x00000002, 0x00060050, 0x0000000A, 0x00000035, 0x00000032, 0x00000033, 0x00000034, 0x00050091, +0x0000000A, 0x00000036, 0x0000002D, 0x00000035, 0x0003003E, 0x0000001D, 0x00000036, 0x000100FD, +0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/Headers/ToneMappingfragspv.hpp b/Lumos/Assets/Shaders/CompiledSPV/Headers/ToneMappingfragspv.hpp index b3c077d5b..960a6246a 100644 --- a/Lumos/Assets/Shaders/CompiledSPV/Headers/ToneMappingfragspv.hpp +++ b/Lumos/Assets/Shaders/CompiledSPV/Headers/ToneMappingfragspv.hpp @@ -3,368 +3,435 @@ #include #include -constexpr uint32_t spirv_ToneMappingfragspv_size = 11576; -constexpr std::array spirv_ToneMappingfragspv = { - 0x07230203, 0x00010000, 0x000D000A, 0x000001F1, 0x00000000, 0x00020011, 0x00000001, 0x00020011, +constexpr uint32_t spirv_ToneMappingfragspv_size = 13716; +constexpr std::array spirv_ToneMappingfragspv = { + 0x07230203, 0x00010000, 0x000D000A, 0x00000249, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x00000032, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E, 0x00000000, 0x0003000E, -0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x0000017E, -0x000001EB, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, +0x00000000, 0x00000001, 0x0007000F, 0x00000004, 0x00000004, 0x6E69616D, 0x00000000, 0x000001C0, +0x00000241, 0x00030010, 0x00000004, 0x00000007, 0x00030003, 0x00000002, 0x000001C2, 0x00090004, 0x415F4C47, 0x735F4252, 0x72617065, 0x5F657461, 0x64616873, 0x6F5F7265, 0x63656A62, 0x00007374, 0x00090004, 0x415F4C47, 0x735F4252, 0x69646168, 0x6C5F676E, 0x75676E61, 0x5F656761, 0x70303234, 0x006B6361, 0x000A0004, 0x475F4C47, 0x4C474F4F, 0x70635F45, 0x74735F70, 0x5F656C79, 0x656E696C, 0x7269645F, 0x69746365, 0x00006576, 0x00080004, 0x475F4C47, 0x4C474F4F, 0x6E695F45, 0x64756C63, 0x69645F65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6E69616D, 0x00000000, 0x00050005, 0x0000000B, 0x6D6D6147, 0x66762861, 0x00003B33, 0x00040005, 0x0000000A, 0x6F6C6F63, 0x00007275, -0x000B0005, 0x00000019, 0x61737055, 0x656C706D, 0x746E6554, 0x32732839, 0x31663B31, 0x3266763B, -0x3266763B, 0x3B31663B, 0x00000000, 0x00030005, 0x00000014, 0x00786574, 0x00030005, 0x00000015, -0x00646F6C, 0x00030005, 0x00000016, 0x00007675, 0x00050005, 0x00000017, 0x65786574, 0x7A69536C, -0x00000065, 0x00040005, 0x00000018, 0x69646172, 0x00007375, 0x00070005, 0x0000001C, 0x53454341, -0x656E6F54, 0x2870616D, 0x3B336676, 0x00000000, 0x00040005, 0x0000001B, 0x6F6C6F63, 0x00000072, -0x00080005, 0x0000001F, 0x656E696C, 0x6F547261, 0x614D656E, 0x6E697070, 0x66762867, 0x00003B33, -0x00040005, 0x0000001E, 0x6F6C6F63, 0x00000072, 0x000B0005, 0x00000022, 0x616D756C, 0x65736142, -0x69655264, 0x7261686E, 0x6E6F5464, 0x70614D65, 0x676E6970, 0x33667628, 0x0000003B, 0x00040005, -0x00000021, 0x6F6C6F63, 0x00000072, 0x000F0005, 0x00000025, 0x74696877, 0x65725065, 0x76726573, -0x4C676E69, 0x42616D75, 0x64657361, 0x6E696552, 0x64726168, 0x656E6F54, 0x7070614D, 0x28676E69, -0x3B336676, 0x00000000, 0x00040005, 0x00000024, 0x6F6C6F63, 0x00000072, 0x000A0005, 0x00000028, -0x68636E75, 0x65747261, 0x745F3264, 0x6D656E6F, 0x705F7061, 0x69747261, 0x76286C61, 0x003B3366, -0x00030005, 0x00000027, 0x00000078, 0x00080005, 0x0000002B, 0x68636E75, 0x65747261, 0x665F3264, -0x696D6C69, 0x66762863, 0x00003B33, 0x00030005, 0x0000002A, 0x00000076, 0x00060005, 0x0000002F, -0x696D756C, 0x636E616E, 0x66762865, 0x00003B33, 0x00030005, 0x0000002E, 0x00000076, 0x00070005, -0x00000032, 0x6E696572, 0x64726168, 0x646F6A5F, 0x76286569, 0x003B3366, 0x00030005, 0x00000031, -0x00000076, 0x00040005, 0x0000003C, 0x7366666F, 0x00007465, 0x00040005, 0x00000046, 0x75736572, -0x0000746C, 0x00030005, 0x000000AA, 0x0000316D, 0x00030005, 0x000000B8, 0x0000326D, 0x00030005, -0x000000C6, 0x00000076, 0x00030005, 0x000000CA, 0x00000061, 0x00030005, 0x000000D4, 0x00000062, -0x00040005, 0x000000F1, 0x616D756C, 0x00000000, 0x00060005, 0x000000F8, 0x656E6F74, 0x7070614D, -0x754C6465, 0x0000616D, 0x00040005, 0x00000105, 0x74696877, 0x00000065, 0x00040005, 0x00000106, -0x616D756C, 0x00000000, 0x00060005, 0x00000109, 0x656E6F74, 0x7070614D, 0x754C6465, 0x0000616D, -0x00030005, 0x0000011D, 0x00000041, 0x00030005, 0x0000011F, 0x00000042, 0x00030005, 0x00000121, -0x00000043, 0x00030005, 0x00000123, 0x00000044, 0x00030005, 0x00000125, 0x00000045, 0x00030005, -0x00000127, 0x00000046, 0x00060005, 0x0000014D, 0x6F707865, 0x65727573, 0x6169625F, 0x00000073, -0x00040005, 0x0000014E, 0x72727563, 0x00000000, 0x00040005, 0x00000152, 0x61726170, 0x0000006D, -0x00030005, 0x00000154, 0x00000057, 0x00050005, 0x00000157, 0x74696877, 0x63735F65, 0x00656C61, -0x00040005, 0x00000159, 0x61726170, 0x0000006D, 0x00030005, 0x00000166, 0x0000006C, 0x00040005, -0x00000167, 0x61726170, 0x0000006D, 0x00030005, 0x0000016A, 0x00007674, 0x00040005, 0x0000017A, -0x6F6C6F63, 0x00007275, 0x00050005, 0x0000017B, 0x65545F75, 0x72757478, 0x00000065, 0x00050005, -0x0000017E, 0x5474756F, 0x6F437865, 0x0064726F, 0x00050005, 0x00000182, 0x706D6173, 0x6353656C, -0x00656C61, 0x00040005, 0x00000186, 0x53786574, 0x00657A69, 0x00060005, 0x00000187, 0x6C425F75, -0x546D6F6F, 0x75747865, 0x00006572, 0x00050005, 0x0000018C, 0x78655466, 0x657A6953, 0x00000000, -0x00040005, 0x00000198, 0x6F6F6C62, 0x0000006D, 0x00040005, 0x0000019C, 0x61726170, 0x0000006D, -0x00040005, 0x0000019D, 0x61726170, 0x0000006D, 0x00040005, 0x0000019F, 0x61726170, 0x0000006D, -0x00040005, 0x000001A0, 0x61726170, 0x0000006D, 0x00060005, 0x000001A3, 0x66696E55, 0x426D726F, -0x65666675, 0x00000072, 0x00070006, 0x000001A3, 0x00000000, 0x6F6F6C42, 0x746E496D, 0x69736E65, -0x00007974, 0x00070006, 0x000001A3, 0x00000001, 0x656E6F54, 0x4970614D, 0x7865646E, 0x00000000, -0x00040006, 0x000001A3, 0x00000002, 0x00003070, 0x00040006, 0x000001A3, 0x00000003, 0x00003170, -0x00030005, 0x000001A5, 0x006F6275, 0x00030005, 0x000001AD, 0x00000069, 0x00040005, 0x000001B7, -0x61726170, 0x0000006D, 0x00040005, 0x000001C0, 0x61726170, 0x0000006D, 0x00040005, 0x000001C9, -0x61726170, 0x0000006D, 0x00040005, 0x000001D2, 0x61726170, 0x0000006D, 0x00040005, 0x000001DB, -0x61726170, 0x0000006D, 0x00040005, 0x000001E4, 0x61726170, 0x0000006D, 0x00040005, 0x000001E7, -0x61726170, 0x0000006D, 0x00040005, 0x000001EB, 0x4674756F, 0x00676172, 0x00040047, 0x0000017B, -0x00000022, 0x00000000, 0x00040047, 0x0000017B, 0x00000021, 0x00000001, 0x00040047, 0x0000017E, -0x0000001E, 0x00000000, 0x00040047, 0x00000187, 0x00000022, 0x00000000, 0x00040047, 0x00000187, -0x00000021, 0x00000002, 0x00050048, 0x000001A3, 0x00000000, 0x00000023, 0x00000000, 0x00050048, -0x000001A3, 0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x000001A3, 0x00000002, 0x00000023, -0x00000008, 0x00050048, 0x000001A3, 0x00000003, 0x00000023, 0x0000000C, 0x00030047, 0x000001A3, -0x00000002, 0x00040047, 0x000001A5, 0x00000022, 0x00000000, 0x00040047, 0x000001A5, 0x00000021, -0x00000000, 0x00040047, 0x000001EB, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, +0x00080005, 0x00000012, 0x75746153, 0x69746172, 0x614D6E6F, 0x78697274, 0x3B316628, 0x00000000, +0x00050005, 0x00000011, 0x75746173, 0x69746172, 0x00006E6F, 0x000B0005, 0x0000001F, 0x61737055, +0x656C706D, 0x746E6554, 0x32732839, 0x31663B31, 0x3266763B, 0x3266763B, 0x3B31663B, 0x00000000, +0x00030005, 0x0000001A, 0x00786574, 0x00030005, 0x0000001B, 0x00646F6C, 0x00030005, 0x0000001C, +0x00007675, 0x00050005, 0x0000001D, 0x65786574, 0x7A69536C, 0x00000065, 0x00040005, 0x0000001E, +0x69646172, 0x00007375, 0x00070005, 0x00000022, 0x53454341, 0x656E6F54, 0x2870616D, 0x3B336676, +0x00000000, 0x00040005, 0x00000021, 0x6F6C6F63, 0x00000072, 0x00080005, 0x00000025, 0x656E696C, +0x6F547261, 0x614D656E, 0x6E697070, 0x66762867, 0x00003B33, 0x00040005, 0x00000024, 0x6F6C6F63, +0x00000072, 0x000B0005, 0x00000028, 0x616D756C, 0x65736142, 0x69655264, 0x7261686E, 0x6E6F5464, +0x70614D65, 0x676E6970, 0x33667628, 0x0000003B, 0x00040005, 0x00000027, 0x6F6C6F63, 0x00000072, +0x000F0005, 0x0000002B, 0x74696877, 0x65725065, 0x76726573, 0x4C676E69, 0x42616D75, 0x64657361, +0x6E696552, 0x64726168, 0x656E6F54, 0x7070614D, 0x28676E69, 0x3B336676, 0x00000000, 0x00040005, +0x0000002A, 0x6F6C6F63, 0x00000072, 0x000A0005, 0x0000002E, 0x68636E75, 0x65747261, 0x745F3264, +0x6D656E6F, 0x705F7061, 0x69747261, 0x76286C61, 0x003B3366, 0x00030005, 0x0000002D, 0x00000078, +0x00080005, 0x00000031, 0x68636E75, 0x65747261, 0x665F3264, 0x696D6C69, 0x66762863, 0x00003B33, +0x00030005, 0x00000030, 0x00000076, 0x00060005, 0x00000035, 0x696D756C, 0x636E616E, 0x66762865, +0x00003B33, 0x00030005, 0x00000034, 0x00000076, 0x00070005, 0x00000038, 0x6E696572, 0x64726168, +0x646F6A5F, 0x76286569, 0x003B3366, 0x00030005, 0x00000037, 0x00000076, 0x00050005, 0x00000040, +0x696D756C, 0x636E616E, 0x00000065, 0x00050005, 0x00000045, 0x4D656E6F, 0x73756E69, 0x00746153, +0x00030005, 0x00000049, 0x00646572, 0x00040005, 0x00000056, 0x65657267, 0x0000006E, 0x00040005, +0x00000061, 0x65756C62, 0x00000000, 0x00040005, 0x00000080, 0x7366666F, 0x00007465, 0x00040005, +0x00000088, 0x75736572, 0x0000746C, 0x00030005, 0x000000EC, 0x0000316D, 0x00030005, 0x000000FA, +0x0000326D, 0x00030005, 0x00000108, 0x00000076, 0x00030005, 0x0000010C, 0x00000061, 0x00030005, +0x00000116, 0x00000062, 0x00040005, 0x00000133, 0x616D756C, 0x00000000, 0x00060005, 0x0000013A, +0x656E6F74, 0x7070614D, 0x754C6465, 0x0000616D, 0x00040005, 0x00000147, 0x74696877, 0x00000065, +0x00040005, 0x00000148, 0x616D756C, 0x00000000, 0x00060005, 0x0000014B, 0x656E6F74, 0x7070614D, +0x754C6465, 0x0000616D, 0x00030005, 0x0000015F, 0x00000041, 0x00030005, 0x00000161, 0x00000042, +0x00030005, 0x00000163, 0x00000043, 0x00030005, 0x00000165, 0x00000044, 0x00030005, 0x00000167, +0x00000045, 0x00030005, 0x00000169, 0x00000046, 0x00060005, 0x0000018F, 0x6F707865, 0x65727573, +0x6169625F, 0x00000073, 0x00040005, 0x00000190, 0x72727563, 0x00000000, 0x00040005, 0x00000194, +0x61726170, 0x0000006D, 0x00030005, 0x00000196, 0x00000057, 0x00050005, 0x00000199, 0x74696877, +0x63735F65, 0x00656C61, 0x00040005, 0x0000019B, 0x61726170, 0x0000006D, 0x00030005, 0x000001A8, +0x0000006C, 0x00040005, 0x000001A9, 0x61726170, 0x0000006D, 0x00030005, 0x000001AC, 0x00007674, +0x00040005, 0x000001BC, 0x6F6C6F63, 0x00007275, 0x00050005, 0x000001BD, 0x65545F75, 0x72757478, +0x00000065, 0x00050005, 0x000001C0, 0x5474756F, 0x6F437865, 0x0064726F, 0x00050005, 0x000001C4, +0x706D6173, 0x6353656C, 0x00656C61, 0x00040005, 0x000001C8, 0x53786574, 0x00657A69, 0x00060005, +0x000001C9, 0x6C425F75, 0x546D6F6F, 0x75747865, 0x00006572, 0x00050005, 0x000001CE, 0x78655466, +0x657A6953, 0x00000000, 0x00040005, 0x000001D7, 0x6F6F6C62, 0x0000006D, 0x00040005, 0x000001DB, +0x61726170, 0x0000006D, 0x00040005, 0x000001DC, 0x61726170, 0x0000006D, 0x00040005, 0x000001DE, +0x61726170, 0x0000006D, 0x00040005, 0x000001DF, 0x61726170, 0x0000006D, 0x00060005, 0x000001E2, +0x66696E55, 0x426D726F, 0x65666675, 0x00000072, 0x00070006, 0x000001E2, 0x00000000, 0x6F6F6C42, +0x746E496D, 0x69736E65, 0x00007974, 0x00070006, 0x000001E2, 0x00000001, 0x656E6F54, 0x4970614D, +0x7865646E, 0x00000000, 0x00060006, 0x000001E2, 0x00000002, 0x75746153, 0x69746172, 0x00006E6F, +0x00060006, 0x000001E2, 0x00000003, 0x746E6F43, 0x74736172, 0x00000000, 0x00060006, 0x000001E2, +0x00000004, 0x67697242, 0x656E7468, 0x00007373, 0x00040006, 0x000001E2, 0x00000005, 0x00003070, +0x00040006, 0x000001E2, 0x00000006, 0x00003170, 0x00040006, 0x000001E2, 0x00000007, 0x00003270, +0x00030005, 0x000001E4, 0x006F6275, 0x00030005, 0x000001EC, 0x00000069, 0x00040005, 0x000001F6, +0x61726170, 0x0000006D, 0x00040005, 0x000001FF, 0x61726170, 0x0000006D, 0x00040005, 0x00000208, +0x61726170, 0x0000006D, 0x00040005, 0x00000211, 0x61726170, 0x0000006D, 0x00040005, 0x0000021A, +0x61726170, 0x0000006D, 0x00040005, 0x00000223, 0x61726170, 0x0000006D, 0x00040005, 0x00000226, +0x61726170, 0x0000006D, 0x00040005, 0x00000235, 0x61726170, 0x0000006D, 0x00040005, 0x00000241, +0x4674756F, 0x00676172, 0x00040047, 0x000001BD, 0x00000022, 0x00000000, 0x00040047, 0x000001BD, +0x00000021, 0x00000001, 0x00040047, 0x000001C0, 0x0000001E, 0x00000000, 0x00040047, 0x000001C9, +0x00000022, 0x00000000, 0x00040047, 0x000001C9, 0x00000021, 0x00000002, 0x00050048, 0x000001E2, +0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x000001E2, 0x00000001, 0x00000023, 0x00000004, +0x00050048, 0x000001E2, 0x00000002, 0x00000023, 0x00000008, 0x00050048, 0x000001E2, 0x00000003, +0x00000023, 0x0000000C, 0x00050048, 0x000001E2, 0x00000004, 0x00000023, 0x00000010, 0x00050048, +0x000001E2, 0x00000005, 0x00000023, 0x00000014, 0x00050048, 0x000001E2, 0x00000006, 0x00000023, +0x00000018, 0x00050048, 0x000001E2, 0x00000007, 0x00000023, 0x0000001C, 0x00030047, 0x000001E2, +0x00000002, 0x00040047, 0x000001E4, 0x00000022, 0x00000000, 0x00040047, 0x000001E4, 0x00000021, +0x00000000, 0x00040047, 0x00000241, 0x0000001E, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000003, 0x00040020, 0x00000008, 0x00000007, 0x00000007, 0x00040021, 0x00000009, 0x00000007, -0x00000008, 0x00090019, 0x0000000D, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, -0x00000001, 0x00000000, 0x0003001B, 0x0000000E, 0x0000000D, 0x00040020, 0x0000000F, 0x00000000, -0x0000000E, 0x00040020, 0x00000010, 0x00000007, 0x00000006, 0x00040017, 0x00000011, 0x00000006, -0x00000002, 0x00040020, 0x00000012, 0x00000007, 0x00000011, 0x00080021, 0x00000013, 0x00000007, -0x0000000F, 0x00000010, 0x00000012, 0x00000012, 0x00000010, 0x00040021, 0x0000002D, 0x00000006, -0x00000008, 0x0004002B, 0x00000006, 0x00000035, 0x3EE8BA2F, 0x0006002C, 0x00000007, 0x00000036, -0x00000035, 0x00000035, 0x00000035, 0x00040017, 0x0000003A, 0x00000006, 0x00000004, 0x00040020, -0x0000003B, 0x00000007, 0x0000003A, 0x0004002B, 0x00000006, 0x0000003F, 0x3F800000, 0x0004002B, -0x00000006, 0x00000040, 0xBF800000, 0x0004002B, 0x00000006, 0x00000041, 0x00000000, 0x0007002C, -0x0000003A, 0x00000042, 0x0000003F, 0x0000003F, 0x00000040, 0x00000041, 0x0004002B, 0x00000006, -0x0000004C, 0x40800000, 0x0004002B, 0x00000006, 0x00000060, 0x40000000, 0x0004002B, 0x00000006, -0x000000A4, 0x3D800000, 0x00040018, 0x000000A8, 0x00000007, 0x00000003, 0x00040020, 0x000000A9, -0x00000007, 0x000000A8, 0x0004002B, 0x00000006, 0x000000AB, 0x3F18E172, 0x0004002B, 0x00000006, -0x000000AC, 0x3D9BA5E3, 0x0004002B, 0x00000006, 0x000000AD, 0x3CE8A71E, 0x0006002C, 0x00000007, -0x000000AE, 0x000000AB, 0x000000AC, 0x000000AD, 0x0004002B, 0x00000006, 0x000000AF, 0x3EB58B82, -0x0004002B, 0x00000006, 0x000000B0, 0x3F6888F8, 0x0004002B, 0x00000006, 0x000000B1, 0x3E090ABB, -0x0006002C, 0x00000007, 0x000000B2, 0x000000AF, 0x000000B0, 0x000000B1, 0x0004002B, 0x00000006, -0x000000B3, 0x3D458CD2, 0x0004002B, 0x00000006, 0x000000B4, 0x3C804966, 0x0004002B, 0x00000006, -0x000000B5, 0x3F567818, 0x0006002C, 0x00000007, 0x000000B6, 0x000000B3, 0x000000B4, 0x000000B5, -0x0006002C, 0x000000A8, 0x000000B7, 0x000000AE, 0x000000B2, 0x000000B6, 0x0004002B, 0x00000006, -0x000000B9, 0x3FCD6873, 0x0004002B, 0x00000006, 0x000000BA, 0xBDD10F52, 0x0004002B, 0x00000006, -0x000000BB, 0xBB564D7F, 0x0006002C, 0x00000007, 0x000000BC, 0x000000B9, 0x000000BA, 0x000000BB, -0x0004002B, 0x00000006, 0x000000BD, 0xBF07F4DC, 0x0004002B, 0x00000006, 0x000000BE, 0x3F8DD734, -0x0004002B, 0x00000006, 0x000000BF, 0xBD950332, 0x0006002C, 0x00000007, 0x000000C0, 0x000000BD, -0x000000BE, 0x000000BF, 0x0004002B, 0x00000006, 0x000000C1, 0xBD96E04C, 0x0004002B, 0x00000006, -0x000000C2, 0xBBC63F14, 0x0004002B, 0x00000006, 0x000000C3, 0x3F89BB06, 0x0006002C, 0x00000007, -0x000000C4, 0x000000C1, 0x000000C2, 0x000000C3, 0x0006002C, 0x000000A8, 0x000000C5, 0x000000BC, -0x000000C0, 0x000000C4, 0x0004002B, 0x00000006, 0x000000CD, 0x3CC9590F, 0x0004002B, 0x00000006, -0x000000D1, 0x38BDDEAF, 0x0004002B, 0x00000006, 0x000000D6, 0x3F7BD5AA, 0x0004002B, 0x00000006, -0x000000D9, 0x3EDDABC1, 0x0004002B, 0x00000006, 0x000000DD, 0x3E73CB81, 0x0004002B, 0x00000006, -0x000000F3, 0x3E59B3D0, 0x0004002B, 0x00000006, 0x000000F4, 0x3F371759, 0x0004002B, 0x00000006, -0x000000F5, 0x3D93DD98, 0x0006002C, 0x00000007, 0x000000F6, 0x000000F3, 0x000000F4, 0x000000F5, -0x0004002B, 0x00000006, 0x0000011E, 0x3E19999A, 0x0004002B, 0x00000006, 0x00000120, 0x3F000000, -0x0004002B, 0x00000006, 0x00000122, 0x3DCCCCCD, 0x0004002B, 0x00000006, 0x00000124, 0x3E4CCCCD, -0x0004002B, 0x00000006, 0x00000126, 0x3CA3D70A, 0x0004002B, 0x00000006, 0x00000128, 0x3E99999A, -0x0004002B, 0x00000006, 0x00000155, 0x41333333, 0x0006002C, 0x00000007, 0x00000156, 0x00000155, -0x00000155, 0x00000155, 0x0006002C, 0x00000007, 0x00000158, 0x0000003F, 0x0000003F, 0x0000003F, -0x0004003B, 0x0000000F, 0x0000017B, 0x00000000, 0x00040020, 0x0000017D, 0x00000001, 0x00000011, -0x0004003B, 0x0000017D, 0x0000017E, 0x00000001, 0x00040015, 0x00000183, 0x00000020, 0x00000001, -0x00040017, 0x00000184, 0x00000183, 0x00000002, 0x00040020, 0x00000185, 0x00000007, 0x00000184, -0x0004003B, 0x0000000F, 0x00000187, 0x00000000, 0x0004002B, 0x00000183, 0x00000189, 0x00000000, -0x00040015, 0x0000018D, 0x00000020, 0x00000000, 0x0004002B, 0x0000018D, 0x0000018E, 0x00000000, -0x00040020, 0x0000018F, 0x00000007, 0x00000183, 0x0004002B, 0x0000018D, 0x00000193, 0x00000001, -0x0006001E, 0x000001A3, 0x00000006, 0x00000183, 0x00000006, 0x00000006, 0x00040020, 0x000001A4, -0x00000002, 0x000001A3, 0x0004003B, 0x000001A4, 0x000001A5, 0x00000002, 0x00040020, 0x000001A6, -0x00000002, 0x00000006, 0x0004002B, 0x00000183, 0x000001AE, 0x00000001, 0x00040020, 0x000001AF, -0x00000002, 0x00000183, 0x00020014, 0x000001B3, 0x0004002B, 0x00000183, 0x000001BC, 0x00000002, -0x0004002B, 0x00000183, 0x000001C5, 0x00000003, 0x0004002B, 0x00000183, 0x000001CE, 0x00000004, -0x0004002B, 0x00000183, 0x000001D7, 0x00000005, 0x0004002B, 0x00000183, 0x000001E0, 0x00000006, -0x00040020, 0x000001EA, 0x00000003, 0x0000003A, 0x0004003B, 0x000001EA, 0x000001EB, 0x00000003, -0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, 0x00000005, 0x0004003B, -0x00000008, 0x0000017A, 0x00000007, 0x0004003B, 0x00000010, 0x00000182, 0x00000007, 0x0004003B, -0x00000185, 0x00000186, 0x00000007, 0x0004003B, 0x00000012, 0x0000018C, 0x00000007, 0x0004003B, -0x00000008, 0x00000198, 0x00000007, 0x0004003B, 0x00000010, 0x0000019C, 0x00000007, 0x0004003B, -0x00000012, 0x0000019D, 0x00000007, 0x0004003B, 0x00000012, 0x0000019F, 0x00000007, 0x0004003B, -0x00000010, 0x000001A0, 0x00000007, 0x0004003B, 0x0000018F, 0x000001AD, 0x00000007, 0x0004003B, -0x00000008, 0x000001B7, 0x00000007, 0x0004003B, 0x00000008, 0x000001C0, 0x00000007, 0x0004003B, -0x00000008, 0x000001C9, 0x00000007, 0x0004003B, 0x00000008, 0x000001D2, 0x00000007, 0x0004003B, -0x00000008, 0x000001DB, 0x00000007, 0x0004003B, 0x00000008, 0x000001E4, 0x00000007, 0x0004003B, -0x00000008, 0x000001E7, 0x00000007, 0x0004003D, 0x0000000E, 0x0000017C, 0x0000017B, 0x0004003D, -0x00000011, 0x0000017F, 0x0000017E, 0x00050057, 0x0000003A, 0x00000180, 0x0000017C, 0x0000017F, -0x0008004F, 0x00000007, 0x00000181, 0x00000180, 0x00000180, 0x00000000, 0x00000001, 0x00000002, -0x0003003E, 0x0000017A, 0x00000181, 0x0003003E, 0x00000182, 0x00000120, 0x0004003D, 0x0000000E, -0x00000188, 0x00000187, 0x00040064, 0x0000000D, 0x0000018A, 0x00000188, 0x00050067, 0x00000184, -0x0000018B, 0x0000018A, 0x00000189, 0x0003003E, 0x00000186, 0x0000018B, 0x00050041, 0x0000018F, -0x00000190, 0x00000186, 0x0000018E, 0x0004003D, 0x00000183, 0x00000191, 0x00000190, 0x0004006F, -0x00000006, 0x00000192, 0x00000191, 0x00050041, 0x0000018F, 0x00000194, 0x00000186, 0x00000193, -0x0004003D, 0x00000183, 0x00000195, 0x00000194, 0x0004006F, 0x00000006, 0x00000196, 0x00000195, -0x00050050, 0x00000011, 0x00000197, 0x00000192, 0x00000196, 0x0003003E, 0x0000018C, 0x00000197, -0x0004003D, 0x00000011, 0x00000199, 0x0000018C, 0x00050050, 0x00000011, 0x0000019A, 0x0000003F, -0x0000003F, 0x00050088, 0x00000011, 0x0000019B, 0x0000019A, 0x00000199, 0x0003003E, 0x0000019C, -0x00000041, 0x0004003D, 0x00000011, 0x0000019E, 0x0000017E, 0x0003003E, 0x0000019D, 0x0000019E, -0x0003003E, 0x0000019F, 0x0000019B, 0x0004003D, 0x00000006, 0x000001A1, 0x00000182, 0x0003003E, -0x000001A0, 0x000001A1, 0x00090039, 0x00000007, 0x000001A2, 0x00000019, 0x00000187, 0x0000019C, -0x0000019D, 0x0000019F, 0x000001A0, 0x00050041, 0x000001A6, 0x000001A7, 0x000001A5, 0x00000189, -0x0004003D, 0x00000006, 0x000001A8, 0x000001A7, 0x0005008E, 0x00000007, 0x000001A9, 0x000001A2, -0x000001A8, 0x0003003E, 0x00000198, 0x000001A9, 0x0004003D, 0x00000007, 0x000001AA, 0x00000198, -0x0004003D, 0x00000007, 0x000001AB, 0x0000017A, 0x00050081, 0x00000007, 0x000001AC, 0x000001AB, -0x000001AA, 0x0003003E, 0x0000017A, 0x000001AC, 0x00050041, 0x000001AF, 0x000001B0, 0x000001A5, -0x000001AE, 0x0004003D, 0x00000183, 0x000001B1, 0x000001B0, 0x0003003E, 0x000001AD, 0x000001B1, -0x0004003D, 0x00000183, 0x000001B2, 0x000001AD, 0x000500AA, 0x000001B3, 0x000001B4, 0x000001B2, -0x000001AE, 0x000300F7, 0x000001B6, 0x00000000, 0x000400FA, 0x000001B4, 0x000001B5, 0x000001BA, -0x000200F8, 0x000001B5, 0x0004003D, 0x00000007, 0x000001B8, 0x0000017A, 0x0003003E, 0x000001B7, -0x000001B8, 0x00050039, 0x00000007, 0x000001B9, 0x0000001F, 0x000001B7, 0x0003003E, 0x0000017A, -0x000001B9, 0x000200F9, 0x000001B6, 0x000200F8, 0x000001BA, 0x0004003D, 0x00000183, 0x000001BB, -0x000001AD, 0x000500AA, 0x000001B3, 0x000001BD, 0x000001BB, 0x000001BC, 0x000300F7, 0x000001BF, -0x00000000, 0x000400FA, 0x000001BD, 0x000001BE, 0x000001C3, 0x000200F8, 0x000001BE, 0x0004003D, -0x00000007, 0x000001C1, 0x0000017A, 0x0003003E, 0x000001C0, 0x000001C1, 0x00050039, 0x00000007, -0x000001C2, 0x00000032, 0x000001C0, 0x0003003E, 0x0000017A, 0x000001C2, 0x000200F9, 0x000001BF, -0x000200F8, 0x000001C3, 0x0004003D, 0x00000183, 0x000001C4, 0x000001AD, 0x000500AA, 0x000001B3, -0x000001C6, 0x000001C4, 0x000001C5, 0x000300F7, 0x000001C8, 0x00000000, 0x000400FA, 0x000001C6, -0x000001C7, 0x000001CC, 0x000200F8, 0x000001C7, 0x0004003D, 0x00000007, 0x000001CA, 0x0000017A, -0x0003003E, 0x000001C9, 0x000001CA, 0x00050039, 0x00000007, 0x000001CB, 0x00000022, 0x000001C9, -0x0003003E, 0x0000017A, 0x000001CB, 0x000200F9, 0x000001C8, 0x000200F8, 0x000001CC, 0x0004003D, -0x00000183, 0x000001CD, 0x000001AD, 0x000500AA, 0x000001B3, 0x000001CF, 0x000001CD, 0x000001CE, -0x000300F7, 0x000001D1, 0x00000000, 0x000400FA, 0x000001CF, 0x000001D0, 0x000001D5, 0x000200F8, -0x000001D0, 0x0004003D, 0x00000007, 0x000001D3, 0x0000017A, 0x0003003E, 0x000001D2, 0x000001D3, -0x00050039, 0x00000007, 0x000001D4, 0x00000025, 0x000001D2, 0x0003003E, 0x0000017A, 0x000001D4, -0x000200F9, 0x000001D1, 0x000200F8, 0x000001D5, 0x0004003D, 0x00000183, 0x000001D6, 0x000001AD, -0x000500AA, 0x000001B3, 0x000001D8, 0x000001D6, 0x000001D7, 0x000300F7, 0x000001DA, 0x00000000, -0x000400FA, 0x000001D8, 0x000001D9, 0x000001DE, 0x000200F8, 0x000001D9, 0x0004003D, 0x00000007, -0x000001DC, 0x0000017A, 0x0003003E, 0x000001DB, 0x000001DC, 0x00050039, 0x00000007, 0x000001DD, -0x0000002B, 0x000001DB, 0x0003003E, 0x0000017A, 0x000001DD, 0x000200F9, 0x000001DA, 0x000200F8, -0x000001DE, 0x0004003D, 0x00000183, 0x000001DF, 0x000001AD, 0x000500AA, 0x000001B3, 0x000001E1, -0x000001DF, 0x000001E0, 0x000300F7, 0x000001E3, 0x00000000, 0x000400FA, 0x000001E1, 0x000001E2, -0x000001E3, 0x000200F8, 0x000001E2, 0x0004003D, 0x00000007, 0x000001E5, 0x0000017A, 0x0003003E, -0x000001E4, 0x000001E5, 0x00050039, 0x00000007, 0x000001E6, 0x0000001C, 0x000001E4, 0x0003003E, -0x0000017A, 0x000001E6, 0x000200F9, 0x000001E3, 0x000200F8, 0x000001E3, 0x000200F9, 0x000001DA, -0x000200F8, 0x000001DA, 0x000200F9, 0x000001D1, 0x000200F8, 0x000001D1, 0x000200F9, 0x000001C8, -0x000200F8, 0x000001C8, 0x000200F9, 0x000001BF, 0x000200F8, 0x000001BF, 0x000200F9, 0x000001B6, -0x000200F8, 0x000001B6, 0x0004003D, 0x00000007, 0x000001E8, 0x0000017A, 0x0003003E, 0x000001E7, -0x000001E8, 0x00050039, 0x00000007, 0x000001E9, 0x0000000B, 0x000001E7, 0x0003003E, 0x0000017A, -0x000001E9, 0x0004003D, 0x00000007, 0x000001EC, 0x0000017A, 0x00050051, 0x00000006, 0x000001ED, -0x000001EC, 0x00000000, 0x00050051, 0x00000006, 0x000001EE, 0x000001EC, 0x00000001, 0x00050051, -0x00000006, 0x000001EF, 0x000001EC, 0x00000002, 0x00070050, 0x0000003A, 0x000001F0, 0x000001ED, -0x000001EE, 0x000001EF, 0x0000003F, 0x0003003E, 0x000001EB, 0x000001F0, 0x000100FD, 0x00010038, +0x00000008, 0x00040020, 0x0000000D, 0x00000007, 0x00000006, 0x00040017, 0x0000000E, 0x00000006, +0x00000004, 0x00040018, 0x0000000F, 0x0000000E, 0x00000004, 0x00040021, 0x00000010, 0x0000000F, +0x0000000D, 0x00090019, 0x00000014, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, +0x00000001, 0x00000000, 0x0003001B, 0x00000015, 0x00000014, 0x00040020, 0x00000016, 0x00000000, +0x00000015, 0x00040017, 0x00000017, 0x00000006, 0x00000002, 0x00040020, 0x00000018, 0x00000007, +0x00000017, 0x00080021, 0x00000019, 0x00000007, 0x00000016, 0x0000000D, 0x00000018, 0x00000018, +0x0000000D, 0x00040021, 0x00000033, 0x00000006, 0x00000008, 0x0004002B, 0x00000006, 0x0000003B, +0x3EE8BA2F, 0x0006002C, 0x00000007, 0x0000003C, 0x0000003B, 0x0000003B, 0x0000003B, 0x0004002B, +0x00000006, 0x00000041, 0x3E9E00D2, 0x0004002B, 0x00000006, 0x00000042, 0x3F1C01A3, 0x0004002B, +0x00000006, 0x00000043, 0x3DA7EF9E, 0x0006002C, 0x00000007, 0x00000044, 0x00000041, 0x00000042, +0x00000043, 0x0004002B, 0x00000006, 0x00000046, 0x3F800000, 0x00040015, 0x0000004A, 0x00000020, +0x00000000, 0x0004002B, 0x0000004A, 0x0000004B, 0x00000000, 0x0004002B, 0x00000006, 0x00000052, +0x00000000, 0x0004002B, 0x0000004A, 0x00000057, 0x00000001, 0x0004002B, 0x0000004A, 0x00000062, +0x00000002, 0x00040020, 0x0000007F, 0x00000007, 0x0000000E, 0x0004002B, 0x00000006, 0x00000083, +0xBF800000, 0x0007002C, 0x0000000E, 0x00000084, 0x00000046, 0x00000046, 0x00000083, 0x00000052, +0x0004002B, 0x00000006, 0x0000008E, 0x40800000, 0x0004002B, 0x00000006, 0x000000A2, 0x40000000, +0x0004002B, 0x00000006, 0x000000E6, 0x3D800000, 0x00040018, 0x000000EA, 0x00000007, 0x00000003, +0x00040020, 0x000000EB, 0x00000007, 0x000000EA, 0x0004002B, 0x00000006, 0x000000ED, 0x3F18E172, +0x0004002B, 0x00000006, 0x000000EE, 0x3D9BA5E3, 0x0004002B, 0x00000006, 0x000000EF, 0x3CE8A71E, +0x0006002C, 0x00000007, 0x000000F0, 0x000000ED, 0x000000EE, 0x000000EF, 0x0004002B, 0x00000006, +0x000000F1, 0x3EB58B82, 0x0004002B, 0x00000006, 0x000000F2, 0x3F6888F8, 0x0004002B, 0x00000006, +0x000000F3, 0x3E090ABB, 0x0006002C, 0x00000007, 0x000000F4, 0x000000F1, 0x000000F2, 0x000000F3, +0x0004002B, 0x00000006, 0x000000F5, 0x3D458CD2, 0x0004002B, 0x00000006, 0x000000F6, 0x3C804966, +0x0004002B, 0x00000006, 0x000000F7, 0x3F567818, 0x0006002C, 0x00000007, 0x000000F8, 0x000000F5, +0x000000F6, 0x000000F7, 0x0006002C, 0x000000EA, 0x000000F9, 0x000000F0, 0x000000F4, 0x000000F8, +0x0004002B, 0x00000006, 0x000000FB, 0x3FCD6873, 0x0004002B, 0x00000006, 0x000000FC, 0xBDD10F52, +0x0004002B, 0x00000006, 0x000000FD, 0xBB564D7F, 0x0006002C, 0x00000007, 0x000000FE, 0x000000FB, +0x000000FC, 0x000000FD, 0x0004002B, 0x00000006, 0x000000FF, 0xBF07F4DC, 0x0004002B, 0x00000006, +0x00000100, 0x3F8DD734, 0x0004002B, 0x00000006, 0x00000101, 0xBD950332, 0x0006002C, 0x00000007, +0x00000102, 0x000000FF, 0x00000100, 0x00000101, 0x0004002B, 0x00000006, 0x00000103, 0xBD96E04C, +0x0004002B, 0x00000006, 0x00000104, 0xBBC63F14, 0x0004002B, 0x00000006, 0x00000105, 0x3F89BB06, +0x0006002C, 0x00000007, 0x00000106, 0x00000103, 0x00000104, 0x00000105, 0x0006002C, 0x000000EA, +0x00000107, 0x000000FE, 0x00000102, 0x00000106, 0x0004002B, 0x00000006, 0x0000010F, 0x3CC9590F, +0x0004002B, 0x00000006, 0x00000113, 0x38BDDEAF, 0x0004002B, 0x00000006, 0x00000118, 0x3F7BD5AA, +0x0004002B, 0x00000006, 0x0000011B, 0x3EDDABC1, 0x0004002B, 0x00000006, 0x0000011F, 0x3E73CB81, +0x0004002B, 0x00000006, 0x00000135, 0x3E59B3D0, 0x0004002B, 0x00000006, 0x00000136, 0x3F371759, +0x0004002B, 0x00000006, 0x00000137, 0x3D93DD98, 0x0006002C, 0x00000007, 0x00000138, 0x00000135, +0x00000136, 0x00000137, 0x0004002B, 0x00000006, 0x00000160, 0x3E19999A, 0x0004002B, 0x00000006, +0x00000162, 0x3F000000, 0x0004002B, 0x00000006, 0x00000164, 0x3DCCCCCD, 0x0004002B, 0x00000006, +0x00000166, 0x3E4CCCCD, 0x0004002B, 0x00000006, 0x00000168, 0x3CA3D70A, 0x0004002B, 0x00000006, +0x0000016A, 0x3E99999A, 0x0004002B, 0x00000006, 0x00000197, 0x41333333, 0x0006002C, 0x00000007, +0x00000198, 0x00000197, 0x00000197, 0x00000197, 0x0006002C, 0x00000007, 0x0000019A, 0x00000046, +0x00000046, 0x00000046, 0x0004003B, 0x00000016, 0x000001BD, 0x00000000, 0x00040020, 0x000001BF, +0x00000001, 0x00000017, 0x0004003B, 0x000001BF, 0x000001C0, 0x00000001, 0x00040015, 0x000001C5, +0x00000020, 0x00000001, 0x00040017, 0x000001C6, 0x000001C5, 0x00000002, 0x00040020, 0x000001C7, +0x00000007, 0x000001C6, 0x0004003B, 0x00000016, 0x000001C9, 0x00000000, 0x0004002B, 0x000001C5, +0x000001CB, 0x00000000, 0x00040020, 0x000001CF, 0x00000007, 0x000001C5, 0x000A001E, 0x000001E2, +0x00000006, 0x000001C5, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, +0x00040020, 0x000001E3, 0x00000002, 0x000001E2, 0x0004003B, 0x000001E3, 0x000001E4, 0x00000002, +0x00040020, 0x000001E5, 0x00000002, 0x00000006, 0x0004002B, 0x000001C5, 0x000001ED, 0x00000001, +0x00040020, 0x000001EE, 0x00000002, 0x000001C5, 0x00020014, 0x000001F2, 0x0004002B, 0x000001C5, +0x000001FB, 0x00000002, 0x0004002B, 0x000001C5, 0x00000204, 0x00000003, 0x0004002B, 0x000001C5, +0x0000020D, 0x00000004, 0x0004002B, 0x000001C5, 0x00000216, 0x00000005, 0x0004002B, 0x000001C5, +0x0000021F, 0x00000006, 0x00040020, 0x00000240, 0x00000003, 0x0000000E, 0x0004003B, 0x00000240, +0x00000241, 0x00000003, 0x0004002B, 0x00000006, 0x00000247, 0x40C90FDB, 0x0004002B, 0x00000006, +0x00000248, 0x3727C5AC, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200F8, +0x00000005, 0x0004003B, 0x00000008, 0x000001BC, 0x00000007, 0x0004003B, 0x0000000D, 0x000001C4, +0x00000007, 0x0004003B, 0x000001C7, 0x000001C8, 0x00000007, 0x0004003B, 0x00000018, 0x000001CE, +0x00000007, 0x0004003B, 0x00000008, 0x000001D7, 0x00000007, 0x0004003B, 0x0000000D, 0x000001DB, +0x00000007, 0x0004003B, 0x00000018, 0x000001DC, 0x00000007, 0x0004003B, 0x00000018, 0x000001DE, +0x00000007, 0x0004003B, 0x0000000D, 0x000001DF, 0x00000007, 0x0004003B, 0x000001CF, 0x000001EC, +0x00000007, 0x0004003B, 0x00000008, 0x000001F6, 0x00000007, 0x0004003B, 0x00000008, 0x000001FF, +0x00000007, 0x0004003B, 0x00000008, 0x00000208, 0x00000007, 0x0004003B, 0x00000008, 0x00000211, +0x00000007, 0x0004003B, 0x00000008, 0x0000021A, 0x00000007, 0x0004003B, 0x00000008, 0x00000223, +0x00000007, 0x0004003B, 0x00000008, 0x00000226, 0x00000007, 0x0004003B, 0x0000000D, 0x00000235, +0x00000007, 0x0004003D, 0x00000015, 0x000001BE, 0x000001BD, 0x0004003D, 0x00000017, 0x000001C1, +0x000001C0, 0x00050057, 0x0000000E, 0x000001C2, 0x000001BE, 0x000001C1, 0x0008004F, 0x00000007, +0x000001C3, 0x000001C2, 0x000001C2, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000001BC, +0x000001C3, 0x0003003E, 0x000001C4, 0x00000162, 0x0004003D, 0x00000015, 0x000001CA, 0x000001C9, +0x00040064, 0x00000014, 0x000001CC, 0x000001CA, 0x00050067, 0x000001C6, 0x000001CD, 0x000001CC, +0x000001CB, 0x0003003E, 0x000001C8, 0x000001CD, 0x00050041, 0x000001CF, 0x000001D0, 0x000001C8, +0x0000004B, 0x0004003D, 0x000001C5, 0x000001D1, 0x000001D0, 0x0004006F, 0x00000006, 0x000001D2, +0x000001D1, 0x00050041, 0x000001CF, 0x000001D3, 0x000001C8, 0x00000057, 0x0004003D, 0x000001C5, +0x000001D4, 0x000001D3, 0x0004006F, 0x00000006, 0x000001D5, 0x000001D4, 0x00050050, 0x00000017, +0x000001D6, 0x000001D2, 0x000001D5, 0x0003003E, 0x000001CE, 0x000001D6, 0x0004003D, 0x00000017, +0x000001D8, 0x000001CE, 0x00050050, 0x00000017, 0x000001D9, 0x00000046, 0x00000046, 0x00050088, +0x00000017, 0x000001DA, 0x000001D9, 0x000001D8, 0x0003003E, 0x000001DB, 0x00000052, 0x0004003D, +0x00000017, 0x000001DD, 0x000001C0, 0x0003003E, 0x000001DC, 0x000001DD, 0x0003003E, 0x000001DE, +0x000001DA, 0x0004003D, 0x00000006, 0x000001E0, 0x000001C4, 0x0003003E, 0x000001DF, 0x000001E0, +0x00090039, 0x00000007, 0x000001E1, 0x0000001F, 0x000001C9, 0x000001DB, 0x000001DC, 0x000001DE, +0x000001DF, 0x00050041, 0x000001E5, 0x000001E6, 0x000001E4, 0x000001CB, 0x0004003D, 0x00000006, +0x000001E7, 0x000001E6, 0x0005008E, 0x00000007, 0x000001E8, 0x000001E1, 0x000001E7, 0x0003003E, +0x000001D7, 0x000001E8, 0x0004003D, 0x00000007, 0x000001E9, 0x000001D7, 0x0004003D, 0x00000007, +0x000001EA, 0x000001BC, 0x00050081, 0x00000007, 0x000001EB, 0x000001EA, 0x000001E9, 0x0003003E, +0x000001BC, 0x000001EB, 0x00050041, 0x000001EE, 0x000001EF, 0x000001E4, 0x000001ED, 0x0004003D, +0x000001C5, 0x000001F0, 0x000001EF, 0x0003003E, 0x000001EC, 0x000001F0, 0x0004003D, 0x000001C5, +0x000001F1, 0x000001EC, 0x000500AA, 0x000001F2, 0x000001F3, 0x000001F1, 0x000001ED, 0x000300F7, +0x000001F5, 0x00000000, 0x000400FA, 0x000001F3, 0x000001F4, 0x000001F9, 0x000200F8, 0x000001F4, +0x0004003D, 0x00000007, 0x000001F7, 0x000001BC, 0x0003003E, 0x000001F6, 0x000001F7, 0x00050039, +0x00000007, 0x000001F8, 0x00000025, 0x000001F6, 0x0003003E, 0x000001BC, 0x000001F8, 0x000200F9, +0x000001F5, 0x000200F8, 0x000001F9, 0x0004003D, 0x000001C5, 0x000001FA, 0x000001EC, 0x000500AA, +0x000001F2, 0x000001FC, 0x000001FA, 0x000001FB, 0x000300F7, 0x000001FE, 0x00000000, 0x000400FA, +0x000001FC, 0x000001FD, 0x00000202, 0x000200F8, 0x000001FD, 0x0004003D, 0x00000007, 0x00000200, +0x000001BC, 0x0003003E, 0x000001FF, 0x00000200, 0x00050039, 0x00000007, 0x00000201, 0x00000038, +0x000001FF, 0x0003003E, 0x000001BC, 0x00000201, 0x000200F9, 0x000001FE, 0x000200F8, 0x00000202, +0x0004003D, 0x000001C5, 0x00000203, 0x000001EC, 0x000500AA, 0x000001F2, 0x00000205, 0x00000203, +0x00000204, 0x000300F7, 0x00000207, 0x00000000, 0x000400FA, 0x00000205, 0x00000206, 0x0000020B, +0x000200F8, 0x00000206, 0x0004003D, 0x00000007, 0x00000209, 0x000001BC, 0x0003003E, 0x00000208, +0x00000209, 0x00050039, 0x00000007, 0x0000020A, 0x00000028, 0x00000208, 0x0003003E, 0x000001BC, +0x0000020A, 0x000200F9, 0x00000207, 0x000200F8, 0x0000020B, 0x0004003D, 0x000001C5, 0x0000020C, +0x000001EC, 0x000500AA, 0x000001F2, 0x0000020E, 0x0000020C, 0x0000020D, 0x000300F7, 0x00000210, +0x00000000, 0x000400FA, 0x0000020E, 0x0000020F, 0x00000214, 0x000200F8, 0x0000020F, 0x0004003D, +0x00000007, 0x00000212, 0x000001BC, 0x0003003E, 0x00000211, 0x00000212, 0x00050039, 0x00000007, +0x00000213, 0x0000002B, 0x00000211, 0x0003003E, 0x000001BC, 0x00000213, 0x000200F9, 0x00000210, +0x000200F8, 0x00000214, 0x0004003D, 0x000001C5, 0x00000215, 0x000001EC, 0x000500AA, 0x000001F2, +0x00000217, 0x00000215, 0x00000216, 0x000300F7, 0x00000219, 0x00000000, 0x000400FA, 0x00000217, +0x00000218, 0x0000021D, 0x000200F8, 0x00000218, 0x0004003D, 0x00000007, 0x0000021B, 0x000001BC, +0x0003003E, 0x0000021A, 0x0000021B, 0x00050039, 0x00000007, 0x0000021C, 0x00000031, 0x0000021A, +0x0003003E, 0x000001BC, 0x0000021C, 0x000200F9, 0x00000219, 0x000200F8, 0x0000021D, 0x0004003D, +0x000001C5, 0x0000021E, 0x000001EC, 0x000500AA, 0x000001F2, 0x00000220, 0x0000021E, 0x0000021F, +0x000300F7, 0x00000222, 0x00000000, 0x000400FA, 0x00000220, 0x00000221, 0x00000222, 0x000200F8, +0x00000221, 0x0004003D, 0x00000007, 0x00000224, 0x000001BC, 0x0003003E, 0x00000223, 0x00000224, +0x00050039, 0x00000007, 0x00000225, 0x00000022, 0x00000223, 0x0003003E, 0x000001BC, 0x00000225, +0x000200F9, 0x00000222, 0x000200F8, 0x00000222, 0x000200F9, 0x00000219, 0x000200F8, 0x00000219, +0x000200F9, 0x00000210, 0x000200F8, 0x00000210, 0x000200F9, 0x00000207, 0x000200F8, 0x00000207, +0x000200F9, 0x000001FE, 0x000200F8, 0x000001FE, 0x000200F9, 0x000001F5, 0x000200F8, 0x000001F5, +0x0004003D, 0x00000007, 0x00000227, 0x000001BC, 0x0003003E, 0x00000226, 0x00000227, 0x00050039, +0x00000007, 0x00000228, 0x0000000B, 0x00000226, 0x0003003E, 0x000001BC, 0x00000228, 0x0004003D, +0x00000007, 0x00000229, 0x000001BC, 0x00060050, 0x00000007, 0x0000022A, 0x00000162, 0x00000162, +0x00000162, 0x00050083, 0x00000007, 0x0000022B, 0x00000229, 0x0000022A, 0x00050041, 0x000001E5, +0x0000022C, 0x000001E4, 0x00000204, 0x0004003D, 0x00000006, 0x0000022D, 0x0000022C, 0x0005008E, +0x00000007, 0x0000022E, 0x0000022B, 0x0000022D, 0x00060050, 0x00000007, 0x0000022F, 0x00000162, +0x00000162, 0x00000162, 0x00050081, 0x00000007, 0x00000230, 0x0000022E, 0x0000022F, 0x00050041, +0x000001E5, 0x00000231, 0x000001E4, 0x0000020D, 0x0004003D, 0x00000006, 0x00000232, 0x00000231, +0x00060050, 0x00000007, 0x00000233, 0x00000232, 0x00000232, 0x00000232, 0x00050081, 0x00000007, +0x00000234, 0x00000230, 0x00000233, 0x0003003E, 0x000001BC, 0x00000234, 0x00050041, 0x000001E5, +0x00000236, 0x000001E4, 0x000001FB, 0x0004003D, 0x00000006, 0x00000237, 0x00000236, 0x0003003E, +0x00000235, 0x00000237, 0x00050039, 0x0000000F, 0x00000238, 0x00000012, 0x00000235, 0x0004003D, +0x00000007, 0x00000239, 0x000001BC, 0x00050051, 0x00000006, 0x0000023A, 0x00000239, 0x00000000, +0x00050051, 0x00000006, 0x0000023B, 0x00000239, 0x00000001, 0x00050051, 0x00000006, 0x0000023C, +0x00000239, 0x00000002, 0x00070050, 0x0000000E, 0x0000023D, 0x0000023A, 0x0000023B, 0x0000023C, +0x00000046, 0x00050091, 0x0000000E, 0x0000023E, 0x00000238, 0x0000023D, 0x0008004F, 0x00000007, +0x0000023F, 0x0000023E, 0x0000023E, 0x00000000, 0x00000001, 0x00000002, 0x0003003E, 0x000001BC, +0x0000023F, 0x0004003D, 0x00000007, 0x00000242, 0x000001BC, 0x00050051, 0x00000006, 0x00000243, +0x00000242, 0x00000000, 0x00050051, 0x00000006, 0x00000244, 0x00000242, 0x00000001, 0x00050051, +0x00000006, 0x00000245, 0x00000242, 0x00000002, 0x00070050, 0x0000000E, 0x00000246, 0x00000243, +0x00000244, 0x00000245, 0x00000046, 0x0003003E, 0x00000241, 0x00000246, 0x000100FD, 0x00010038, 0x00050036, 0x00000007, 0x0000000B, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x0000000A, -0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, 0x00000034, 0x0000000A, 0x0007000C, 0x00000007, -0x00000037, 0x00000001, 0x0000001A, 0x00000034, 0x00000036, 0x000200FE, 0x00000037, 0x00010038, -0x00050036, 0x00000007, 0x00000019, 0x00000000, 0x00000013, 0x00030037, 0x0000000F, 0x00000014, -0x00030037, 0x00000010, 0x00000015, 0x00030037, 0x00000012, 0x00000016, 0x00030037, 0x00000012, -0x00000017, 0x00030037, 0x00000010, 0x00000018, 0x000200F8, 0x0000001A, 0x0004003B, 0x0000003B, -0x0000003C, 0x00000007, 0x0004003B, 0x00000008, 0x00000046, 0x00000007, 0x0004003D, 0x00000011, -0x0000003D, 0x00000017, 0x0009004F, 0x0000003A, 0x0000003E, 0x0000003D, 0x0000003D, 0x00000000, -0x00000001, 0x00000000, 0x00000001, 0x00050085, 0x0000003A, 0x00000043, 0x0000003E, 0x00000042, -0x0004003D, 0x00000006, 0x00000044, 0x00000018, 0x0005008E, 0x0000003A, 0x00000045, 0x00000043, -0x00000044, 0x0003003E, 0x0000003C, 0x00000045, 0x0004003D, 0x0000000E, 0x00000047, 0x00000014, -0x0004003D, 0x00000011, 0x00000048, 0x00000016, 0x0004003D, 0x00000006, 0x00000049, 0x00000015, -0x00070058, 0x0000003A, 0x0000004A, 0x00000047, 0x00000048, 0x00000002, 0x00000049, 0x0008004F, -0x00000007, 0x0000004B, 0x0000004A, 0x0000004A, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, -0x00000007, 0x0000004D, 0x0000004B, 0x0000004C, 0x0003003E, 0x00000046, 0x0000004D, 0x0004003D, -0x0000000E, 0x0000004E, 0x00000014, 0x0004003D, 0x00000011, 0x0000004F, 0x00000016, 0x0004003D, -0x0000003A, 0x00000050, 0x0000003C, 0x0007004F, 0x00000011, 0x00000051, 0x00000050, 0x00000050, -0x00000000, 0x00000001, 0x00050083, 0x00000011, 0x00000052, 0x0000004F, 0x00000051, 0x0004003D, -0x00000006, 0x00000053, 0x00000015, 0x00070058, 0x0000003A, 0x00000054, 0x0000004E, 0x00000052, -0x00000002, 0x00000053, 0x0008004F, 0x00000007, 0x00000055, 0x00000054, 0x00000054, 0x00000000, -0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x00000056, 0x00000046, 0x00050081, 0x00000007, -0x00000057, 0x00000056, 0x00000055, 0x0003003E, 0x00000046, 0x00000057, 0x0004003D, 0x0000000E, -0x00000058, 0x00000014, 0x0004003D, 0x00000011, 0x00000059, 0x00000016, 0x0004003D, 0x0000003A, -0x0000005A, 0x0000003C, 0x0007004F, 0x00000011, 0x0000005B, 0x0000005A, 0x0000005A, 0x00000003, -0x00000001, 0x00050083, 0x00000011, 0x0000005C, 0x00000059, 0x0000005B, 0x0004003D, 0x00000006, -0x0000005D, 0x00000015, 0x00070058, 0x0000003A, 0x0000005E, 0x00000058, 0x0000005C, 0x00000002, -0x0000005D, 0x0008004F, 0x00000007, 0x0000005F, 0x0000005E, 0x0000005E, 0x00000000, 0x00000001, -0x00000002, 0x0005008E, 0x00000007, 0x00000061, 0x0000005F, 0x00000060, 0x0004003D, 0x00000007, -0x00000062, 0x00000046, 0x00050081, 0x00000007, 0x00000063, 0x00000062, 0x00000061, 0x0003003E, -0x00000046, 0x00000063, 0x0004003D, 0x0000000E, 0x00000064, 0x00000014, 0x0004003D, 0x00000011, -0x00000065, 0x00000016, 0x0004003D, 0x0000003A, 0x00000066, 0x0000003C, 0x0007004F, 0x00000011, -0x00000067, 0x00000066, 0x00000066, 0x00000002, 0x00000001, 0x00050083, 0x00000011, 0x00000068, -0x00000065, 0x00000067, 0x0004003D, 0x00000006, 0x00000069, 0x00000015, 0x00070058, 0x0000003A, -0x0000006A, 0x00000064, 0x00000068, 0x00000002, 0x00000069, 0x0008004F, 0x00000007, 0x0000006B, -0x0000006A, 0x0000006A, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x0000006C, -0x00000046, 0x00050081, 0x00000007, 0x0000006D, 0x0000006C, 0x0000006B, 0x0003003E, 0x00000046, -0x0000006D, 0x0004003D, 0x0000000E, 0x0000006E, 0x00000014, 0x0004003D, 0x00000011, 0x0000006F, -0x00000016, 0x0004003D, 0x0000003A, 0x00000070, 0x0000003C, 0x0007004F, 0x00000011, 0x00000071, -0x00000070, 0x00000070, 0x00000002, 0x00000003, 0x00050081, 0x00000011, 0x00000072, 0x0000006F, -0x00000071, 0x0004003D, 0x00000006, 0x00000073, 0x00000015, 0x00070058, 0x0000003A, 0x00000074, -0x0000006E, 0x00000072, 0x00000002, 0x00000073, 0x0008004F, 0x00000007, 0x00000075, 0x00000074, -0x00000074, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000007, 0x00000076, 0x00000075, -0x00000060, 0x0004003D, 0x00000007, 0x00000077, 0x00000046, 0x00050081, 0x00000007, 0x00000078, -0x00000077, 0x00000076, 0x0003003E, 0x00000046, 0x00000078, 0x0004003D, 0x0000000E, 0x00000079, -0x00000014, 0x0004003D, 0x00000011, 0x0000007A, 0x00000016, 0x0004003D, 0x0000003A, 0x0000007B, -0x0000003C, 0x0007004F, 0x00000011, 0x0000007C, 0x0000007B, 0x0000007B, 0x00000000, 0x00000003, -0x00050081, 0x00000011, 0x0000007D, 0x0000007A, 0x0000007C, 0x0004003D, 0x00000006, 0x0000007E, -0x00000015, 0x00070058, 0x0000003A, 0x0000007F, 0x00000079, 0x0000007D, 0x00000002, 0x0000007E, -0x0008004F, 0x00000007, 0x00000080, 0x0000007F, 0x0000007F, 0x00000000, 0x00000001, 0x00000002, -0x0005008E, 0x00000007, 0x00000081, 0x00000080, 0x00000060, 0x0004003D, 0x00000007, 0x00000082, -0x00000046, 0x00050081, 0x00000007, 0x00000083, 0x00000082, 0x00000081, 0x0003003E, 0x00000046, -0x00000083, 0x0004003D, 0x0000000E, 0x00000084, 0x00000014, 0x0004003D, 0x00000011, 0x00000085, -0x00000016, 0x0004003D, 0x0000003A, 0x00000086, 0x0000003C, 0x0007004F, 0x00000011, 0x00000087, -0x00000086, 0x00000086, 0x00000002, 0x00000001, 0x00050081, 0x00000011, 0x00000088, 0x00000085, -0x00000087, 0x0004003D, 0x00000006, 0x00000089, 0x00000015, 0x00070058, 0x0000003A, 0x0000008A, -0x00000084, 0x00000088, 0x00000002, 0x00000089, 0x0008004F, 0x00000007, 0x0000008B, 0x0000008A, -0x0000008A, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x0000008C, 0x00000046, -0x00050081, 0x00000007, 0x0000008D, 0x0000008C, 0x0000008B, 0x0003003E, 0x00000046, 0x0000008D, -0x0004003D, 0x0000000E, 0x0000008E, 0x00000014, 0x0004003D, 0x00000011, 0x0000008F, 0x00000016, -0x0004003D, 0x0000003A, 0x00000090, 0x0000003C, 0x0007004F, 0x00000011, 0x00000091, 0x00000090, -0x00000090, 0x00000003, 0x00000001, 0x00050081, 0x00000011, 0x00000092, 0x0000008F, 0x00000091, -0x0004003D, 0x00000006, 0x00000093, 0x00000015, 0x00070058, 0x0000003A, 0x00000094, 0x0000008E, -0x00000092, 0x00000002, 0x00000093, 0x0008004F, 0x00000007, 0x00000095, 0x00000094, 0x00000094, -0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000007, 0x00000096, 0x00000095, 0x00000060, -0x0004003D, 0x00000007, 0x00000097, 0x00000046, 0x00050081, 0x00000007, 0x00000098, 0x00000097, -0x00000096, 0x0003003E, 0x00000046, 0x00000098, 0x0004003D, 0x0000000E, 0x00000099, 0x00000014, -0x0004003D, 0x00000011, 0x0000009A, 0x00000016, 0x0004003D, 0x0000003A, 0x0000009B, 0x0000003C, -0x0007004F, 0x00000011, 0x0000009C, 0x0000009B, 0x0000009B, 0x00000000, 0x00000001, 0x00050081, -0x00000011, 0x0000009D, 0x0000009A, 0x0000009C, 0x0004003D, 0x00000006, 0x0000009E, 0x00000015, -0x00070058, 0x0000003A, 0x0000009F, 0x00000099, 0x0000009D, 0x00000002, 0x0000009E, 0x0008004F, -0x00000007, 0x000000A0, 0x0000009F, 0x0000009F, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, -0x00000007, 0x000000A1, 0x00000046, 0x00050081, 0x00000007, 0x000000A2, 0x000000A1, 0x000000A0, -0x0003003E, 0x00000046, 0x000000A2, 0x0004003D, 0x00000007, 0x000000A3, 0x00000046, 0x0005008E, -0x00000007, 0x000000A5, 0x000000A3, 0x000000A4, 0x000200FE, 0x000000A5, 0x00010038, 0x00050036, -0x00000007, 0x0000001C, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x0000001B, 0x000200F8, -0x0000001D, 0x0004003B, 0x000000A9, 0x000000AA, 0x00000007, 0x0004003B, 0x000000A9, 0x000000B8, -0x00000007, 0x0004003B, 0x00000008, 0x000000C6, 0x00000007, 0x0004003B, 0x00000008, 0x000000CA, -0x00000007, 0x0004003B, 0x00000008, 0x000000D4, 0x00000007, 0x0003003E, 0x000000AA, 0x000000B7, -0x0003003E, 0x000000B8, 0x000000C5, 0x0004003D, 0x000000A8, 0x000000C7, 0x000000AA, 0x0004003D, -0x00000007, 0x000000C8, 0x0000001B, 0x00050091, 0x00000007, 0x000000C9, 0x000000C7, 0x000000C8, -0x0003003E, 0x000000C6, 0x000000C9, 0x0004003D, 0x00000007, 0x000000CB, 0x000000C6, 0x0004003D, -0x00000007, 0x000000CC, 0x000000C6, 0x00060050, 0x00000007, 0x000000CE, 0x000000CD, 0x000000CD, -0x000000CD, 0x00050081, 0x00000007, 0x000000CF, 0x000000CC, 0x000000CE, 0x00050085, 0x00000007, -0x000000D0, 0x000000CB, 0x000000CF, 0x00060050, 0x00000007, 0x000000D2, 0x000000D1, 0x000000D1, -0x000000D1, 0x00050083, 0x00000007, 0x000000D3, 0x000000D0, 0x000000D2, 0x0003003E, 0x000000CA, -0x000000D3, 0x0004003D, 0x00000007, 0x000000D5, 0x000000C6, 0x0004003D, 0x00000007, 0x000000D7, -0x000000C6, 0x0005008E, 0x00000007, 0x000000D8, 0x000000D7, 0x000000D6, 0x00060050, 0x00000007, -0x000000DA, 0x000000D9, 0x000000D9, 0x000000D9, 0x00050081, 0x00000007, 0x000000DB, 0x000000D8, -0x000000DA, 0x00050085, 0x00000007, 0x000000DC, 0x000000D5, 0x000000DB, 0x00060050, 0x00000007, -0x000000DE, 0x000000DD, 0x000000DD, 0x000000DD, 0x00050081, 0x00000007, 0x000000DF, 0x000000DC, -0x000000DE, 0x0003003E, 0x000000D4, 0x000000DF, 0x0004003D, 0x000000A8, 0x000000E0, 0x000000B8, -0x0004003D, 0x00000007, 0x000000E1, 0x000000CA, 0x0004003D, 0x00000007, 0x000000E2, 0x000000D4, -0x00050088, 0x00000007, 0x000000E3, 0x000000E1, 0x000000E2, 0x00050091, 0x00000007, 0x000000E4, -0x000000E0, 0x000000E3, 0x00060050, 0x00000007, 0x000000E5, 0x00000041, 0x00000041, 0x00000041, -0x00060050, 0x00000007, 0x000000E6, 0x0000003F, 0x0000003F, 0x0000003F, 0x0008000C, 0x00000007, -0x000000E7, 0x00000001, 0x0000002B, 0x000000E4, 0x000000E5, 0x000000E6, 0x000200FE, 0x000000E7, -0x00010038, 0x00050036, 0x00000007, 0x0000001F, 0x00000000, 0x00000009, 0x00030037, 0x00000008, -0x0000001E, 0x000200F8, 0x00000020, 0x0004003D, 0x00000007, 0x000000EA, 0x0000001E, 0x00060050, -0x00000007, 0x000000EB, 0x00000041, 0x00000041, 0x00000041, 0x00060050, 0x00000007, 0x000000EC, -0x0000003F, 0x0000003F, 0x0000003F, 0x0008000C, 0x00000007, 0x000000ED, 0x00000001, 0x0000002B, -0x000000EA, 0x000000EB, 0x000000EC, 0x0003003E, 0x0000001E, 0x000000ED, 0x0004003D, 0x00000007, -0x000000EE, 0x0000001E, 0x000200FE, 0x000000EE, 0x00010038, 0x00050036, 0x00000007, 0x00000022, -0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x00000021, 0x000200F8, 0x00000023, 0x0004003B, -0x00000010, 0x000000F1, 0x00000007, 0x0004003B, 0x00000010, 0x000000F8, 0x00000007, 0x0004003D, -0x00000007, 0x000000F2, 0x00000021, 0x00050094, 0x00000006, 0x000000F7, 0x000000F2, 0x000000F6, -0x0003003E, 0x000000F1, 0x000000F7, 0x0004003D, 0x00000006, 0x000000F9, 0x000000F1, 0x0004003D, -0x00000006, 0x000000FA, 0x000000F1, 0x00050081, 0x00000006, 0x000000FB, 0x0000003F, 0x000000FA, -0x00050088, 0x00000006, 0x000000FC, 0x000000F9, 0x000000FB, 0x0003003E, 0x000000F8, 0x000000FC, -0x0004003D, 0x00000006, 0x000000FD, 0x000000F8, 0x0004003D, 0x00000006, 0x000000FE, 0x000000F1, -0x00050088, 0x00000006, 0x000000FF, 0x000000FD, 0x000000FE, 0x0004003D, 0x00000007, 0x00000100, -0x00000021, 0x0005008E, 0x00000007, 0x00000101, 0x00000100, 0x000000FF, 0x0003003E, 0x00000021, -0x00000101, 0x0004003D, 0x00000007, 0x00000102, 0x00000021, 0x000200FE, 0x00000102, 0x00010038, +0x000200F8, 0x0000000C, 0x0004003D, 0x00000007, 0x0000003A, 0x0000000A, 0x0007000C, 0x00000007, +0x0000003D, 0x00000001, 0x0000001A, 0x0000003A, 0x0000003C, 0x000200FE, 0x0000003D, 0x00010038, +0x00050036, 0x0000000F, 0x00000012, 0x00000000, 0x00000010, 0x00030037, 0x0000000D, 0x00000011, +0x000200F8, 0x00000013, 0x0004003B, 0x00000008, 0x00000040, 0x00000007, 0x0004003B, 0x0000000D, +0x00000045, 0x00000007, 0x0004003B, 0x00000008, 0x00000049, 0x00000007, 0x0004003B, 0x00000008, +0x00000056, 0x00000007, 0x0004003B, 0x00000008, 0x00000061, 0x00000007, 0x0003003E, 0x00000040, +0x00000044, 0x0004003D, 0x00000006, 0x00000047, 0x00000011, 0x00050083, 0x00000006, 0x00000048, +0x00000046, 0x00000047, 0x0003003E, 0x00000045, 0x00000048, 0x00050041, 0x0000000D, 0x0000004C, +0x00000040, 0x0000004B, 0x0004003D, 0x00000006, 0x0000004D, 0x0000004C, 0x0004003D, 0x00000006, +0x0000004E, 0x00000045, 0x00050085, 0x00000006, 0x0000004F, 0x0000004D, 0x0000004E, 0x00060050, +0x00000007, 0x00000050, 0x0000004F, 0x0000004F, 0x0000004F, 0x0003003E, 0x00000049, 0x00000050, +0x0004003D, 0x00000006, 0x00000051, 0x00000011, 0x00060050, 0x00000007, 0x00000053, 0x00000051, +0x00000052, 0x00000052, 0x0004003D, 0x00000007, 0x00000054, 0x00000049, 0x00050081, 0x00000007, +0x00000055, 0x00000054, 0x00000053, 0x0003003E, 0x00000049, 0x00000055, 0x00050041, 0x0000000D, +0x00000058, 0x00000040, 0x00000057, 0x0004003D, 0x00000006, 0x00000059, 0x00000058, 0x0004003D, +0x00000006, 0x0000005A, 0x00000045, 0x00050085, 0x00000006, 0x0000005B, 0x00000059, 0x0000005A, +0x00060050, 0x00000007, 0x0000005C, 0x0000005B, 0x0000005B, 0x0000005B, 0x0003003E, 0x00000056, +0x0000005C, 0x0004003D, 0x00000006, 0x0000005D, 0x00000011, 0x00060050, 0x00000007, 0x0000005E, +0x00000052, 0x0000005D, 0x00000052, 0x0004003D, 0x00000007, 0x0000005F, 0x00000056, 0x00050081, +0x00000007, 0x00000060, 0x0000005F, 0x0000005E, 0x0003003E, 0x00000056, 0x00000060, 0x00050041, +0x0000000D, 0x00000063, 0x00000040, 0x00000062, 0x0004003D, 0x00000006, 0x00000064, 0x00000063, +0x0004003D, 0x00000006, 0x00000065, 0x00000045, 0x00050085, 0x00000006, 0x00000066, 0x00000064, +0x00000065, 0x00060050, 0x00000007, 0x00000067, 0x00000066, 0x00000066, 0x00000066, 0x0003003E, +0x00000061, 0x00000067, 0x0004003D, 0x00000006, 0x00000068, 0x00000011, 0x00060050, 0x00000007, +0x00000069, 0x00000052, 0x00000052, 0x00000068, 0x0004003D, 0x00000007, 0x0000006A, 0x00000061, +0x00050081, 0x00000007, 0x0000006B, 0x0000006A, 0x00000069, 0x0003003E, 0x00000061, 0x0000006B, +0x0004003D, 0x00000007, 0x0000006C, 0x00000049, 0x0004003D, 0x00000007, 0x0000006D, 0x00000056, +0x0004003D, 0x00000007, 0x0000006E, 0x00000061, 0x00050051, 0x00000006, 0x0000006F, 0x0000006C, +0x00000000, 0x00050051, 0x00000006, 0x00000070, 0x0000006C, 0x00000001, 0x00050051, 0x00000006, +0x00000071, 0x0000006C, 0x00000002, 0x00050051, 0x00000006, 0x00000072, 0x0000006D, 0x00000000, +0x00050051, 0x00000006, 0x00000073, 0x0000006D, 0x00000001, 0x00050051, 0x00000006, 0x00000074, +0x0000006D, 0x00000002, 0x00050051, 0x00000006, 0x00000075, 0x0000006E, 0x00000000, 0x00050051, +0x00000006, 0x00000076, 0x0000006E, 0x00000001, 0x00050051, 0x00000006, 0x00000077, 0x0000006E, +0x00000002, 0x00070050, 0x0000000E, 0x00000078, 0x0000006F, 0x00000070, 0x00000071, 0x00000052, +0x00070050, 0x0000000E, 0x00000079, 0x00000072, 0x00000073, 0x00000074, 0x00000052, 0x00070050, +0x0000000E, 0x0000007A, 0x00000075, 0x00000076, 0x00000077, 0x00000052, 0x00070050, 0x0000000E, +0x0000007B, 0x00000052, 0x00000052, 0x00000052, 0x00000046, 0x00070050, 0x0000000F, 0x0000007C, +0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x000200FE, 0x0000007C, 0x00010038, 0x00050036, +0x00000007, 0x0000001F, 0x00000000, 0x00000019, 0x00030037, 0x00000016, 0x0000001A, 0x00030037, +0x0000000D, 0x0000001B, 0x00030037, 0x00000018, 0x0000001C, 0x00030037, 0x00000018, 0x0000001D, +0x00030037, 0x0000000D, 0x0000001E, 0x000200F8, 0x00000020, 0x0004003B, 0x0000007F, 0x00000080, +0x00000007, 0x0004003B, 0x00000008, 0x00000088, 0x00000007, 0x0004003D, 0x00000017, 0x00000081, +0x0000001D, 0x0009004F, 0x0000000E, 0x00000082, 0x00000081, 0x00000081, 0x00000000, 0x00000001, +0x00000000, 0x00000001, 0x00050085, 0x0000000E, 0x00000085, 0x00000082, 0x00000084, 0x0004003D, +0x00000006, 0x00000086, 0x0000001E, 0x0005008E, 0x0000000E, 0x00000087, 0x00000085, 0x00000086, +0x0003003E, 0x00000080, 0x00000087, 0x0004003D, 0x00000015, 0x00000089, 0x0000001A, 0x0004003D, +0x00000017, 0x0000008A, 0x0000001C, 0x0004003D, 0x00000006, 0x0000008B, 0x0000001B, 0x00070058, +0x0000000E, 0x0000008C, 0x00000089, 0x0000008A, 0x00000002, 0x0000008B, 0x0008004F, 0x00000007, +0x0000008D, 0x0000008C, 0x0000008C, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000007, +0x0000008F, 0x0000008D, 0x0000008E, 0x0003003E, 0x00000088, 0x0000008F, 0x0004003D, 0x00000015, +0x00000090, 0x0000001A, 0x0004003D, 0x00000017, 0x00000091, 0x0000001C, 0x0004003D, 0x0000000E, +0x00000092, 0x00000080, 0x0007004F, 0x00000017, 0x00000093, 0x00000092, 0x00000092, 0x00000000, +0x00000001, 0x00050083, 0x00000017, 0x00000094, 0x00000091, 0x00000093, 0x0004003D, 0x00000006, +0x00000095, 0x0000001B, 0x00070058, 0x0000000E, 0x00000096, 0x00000090, 0x00000094, 0x00000002, +0x00000095, 0x0008004F, 0x00000007, 0x00000097, 0x00000096, 0x00000096, 0x00000000, 0x00000001, +0x00000002, 0x0004003D, 0x00000007, 0x00000098, 0x00000088, 0x00050081, 0x00000007, 0x00000099, +0x00000098, 0x00000097, 0x0003003E, 0x00000088, 0x00000099, 0x0004003D, 0x00000015, 0x0000009A, +0x0000001A, 0x0004003D, 0x00000017, 0x0000009B, 0x0000001C, 0x0004003D, 0x0000000E, 0x0000009C, +0x00000080, 0x0007004F, 0x00000017, 0x0000009D, 0x0000009C, 0x0000009C, 0x00000003, 0x00000001, +0x00050083, 0x00000017, 0x0000009E, 0x0000009B, 0x0000009D, 0x0004003D, 0x00000006, 0x0000009F, +0x0000001B, 0x00070058, 0x0000000E, 0x000000A0, 0x0000009A, 0x0000009E, 0x00000002, 0x0000009F, +0x0008004F, 0x00000007, 0x000000A1, 0x000000A0, 0x000000A0, 0x00000000, 0x00000001, 0x00000002, +0x0005008E, 0x00000007, 0x000000A3, 0x000000A1, 0x000000A2, 0x0004003D, 0x00000007, 0x000000A4, +0x00000088, 0x00050081, 0x00000007, 0x000000A5, 0x000000A4, 0x000000A3, 0x0003003E, 0x00000088, +0x000000A5, 0x0004003D, 0x00000015, 0x000000A6, 0x0000001A, 0x0004003D, 0x00000017, 0x000000A7, +0x0000001C, 0x0004003D, 0x0000000E, 0x000000A8, 0x00000080, 0x0007004F, 0x00000017, 0x000000A9, +0x000000A8, 0x000000A8, 0x00000002, 0x00000001, 0x00050083, 0x00000017, 0x000000AA, 0x000000A7, +0x000000A9, 0x0004003D, 0x00000006, 0x000000AB, 0x0000001B, 0x00070058, 0x0000000E, 0x000000AC, +0x000000A6, 0x000000AA, 0x00000002, 0x000000AB, 0x0008004F, 0x00000007, 0x000000AD, 0x000000AC, +0x000000AC, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x000000AE, 0x00000088, +0x00050081, 0x00000007, 0x000000AF, 0x000000AE, 0x000000AD, 0x0003003E, 0x00000088, 0x000000AF, +0x0004003D, 0x00000015, 0x000000B0, 0x0000001A, 0x0004003D, 0x00000017, 0x000000B1, 0x0000001C, +0x0004003D, 0x0000000E, 0x000000B2, 0x00000080, 0x0007004F, 0x00000017, 0x000000B3, 0x000000B2, +0x000000B2, 0x00000002, 0x00000003, 0x00050081, 0x00000017, 0x000000B4, 0x000000B1, 0x000000B3, +0x0004003D, 0x00000006, 0x000000B5, 0x0000001B, 0x00070058, 0x0000000E, 0x000000B6, 0x000000B0, +0x000000B4, 0x00000002, 0x000000B5, 0x0008004F, 0x00000007, 0x000000B7, 0x000000B6, 0x000000B6, +0x00000000, 0x00000001, 0x00000002, 0x0005008E, 0x00000007, 0x000000B8, 0x000000B7, 0x000000A2, +0x0004003D, 0x00000007, 0x000000B9, 0x00000088, 0x00050081, 0x00000007, 0x000000BA, 0x000000B9, +0x000000B8, 0x0003003E, 0x00000088, 0x000000BA, 0x0004003D, 0x00000015, 0x000000BB, 0x0000001A, +0x0004003D, 0x00000017, 0x000000BC, 0x0000001C, 0x0004003D, 0x0000000E, 0x000000BD, 0x00000080, +0x0007004F, 0x00000017, 0x000000BE, 0x000000BD, 0x000000BD, 0x00000000, 0x00000003, 0x00050081, +0x00000017, 0x000000BF, 0x000000BC, 0x000000BE, 0x0004003D, 0x00000006, 0x000000C0, 0x0000001B, +0x00070058, 0x0000000E, 0x000000C1, 0x000000BB, 0x000000BF, 0x00000002, 0x000000C0, 0x0008004F, +0x00000007, 0x000000C2, 0x000000C1, 0x000000C1, 0x00000000, 0x00000001, 0x00000002, 0x0005008E, +0x00000007, 0x000000C3, 0x000000C2, 0x000000A2, 0x0004003D, 0x00000007, 0x000000C4, 0x00000088, +0x00050081, 0x00000007, 0x000000C5, 0x000000C4, 0x000000C3, 0x0003003E, 0x00000088, 0x000000C5, +0x0004003D, 0x00000015, 0x000000C6, 0x0000001A, 0x0004003D, 0x00000017, 0x000000C7, 0x0000001C, +0x0004003D, 0x0000000E, 0x000000C8, 0x00000080, 0x0007004F, 0x00000017, 0x000000C9, 0x000000C8, +0x000000C8, 0x00000002, 0x00000001, 0x00050081, 0x00000017, 0x000000CA, 0x000000C7, 0x000000C9, +0x0004003D, 0x00000006, 0x000000CB, 0x0000001B, 0x00070058, 0x0000000E, 0x000000CC, 0x000000C6, +0x000000CA, 0x00000002, 0x000000CB, 0x0008004F, 0x00000007, 0x000000CD, 0x000000CC, 0x000000CC, +0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, 0x000000CE, 0x00000088, 0x00050081, +0x00000007, 0x000000CF, 0x000000CE, 0x000000CD, 0x0003003E, 0x00000088, 0x000000CF, 0x0004003D, +0x00000015, 0x000000D0, 0x0000001A, 0x0004003D, 0x00000017, 0x000000D1, 0x0000001C, 0x0004003D, +0x0000000E, 0x000000D2, 0x00000080, 0x0007004F, 0x00000017, 0x000000D3, 0x000000D2, 0x000000D2, +0x00000003, 0x00000001, 0x00050081, 0x00000017, 0x000000D4, 0x000000D1, 0x000000D3, 0x0004003D, +0x00000006, 0x000000D5, 0x0000001B, 0x00070058, 0x0000000E, 0x000000D6, 0x000000D0, 0x000000D4, +0x00000002, 0x000000D5, 0x0008004F, 0x00000007, 0x000000D7, 0x000000D6, 0x000000D6, 0x00000000, +0x00000001, 0x00000002, 0x0005008E, 0x00000007, 0x000000D8, 0x000000D7, 0x000000A2, 0x0004003D, +0x00000007, 0x000000D9, 0x00000088, 0x00050081, 0x00000007, 0x000000DA, 0x000000D9, 0x000000D8, +0x0003003E, 0x00000088, 0x000000DA, 0x0004003D, 0x00000015, 0x000000DB, 0x0000001A, 0x0004003D, +0x00000017, 0x000000DC, 0x0000001C, 0x0004003D, 0x0000000E, 0x000000DD, 0x00000080, 0x0007004F, +0x00000017, 0x000000DE, 0x000000DD, 0x000000DD, 0x00000000, 0x00000001, 0x00050081, 0x00000017, +0x000000DF, 0x000000DC, 0x000000DE, 0x0004003D, 0x00000006, 0x000000E0, 0x0000001B, 0x00070058, +0x0000000E, 0x000000E1, 0x000000DB, 0x000000DF, 0x00000002, 0x000000E0, 0x0008004F, 0x00000007, +0x000000E2, 0x000000E1, 0x000000E1, 0x00000000, 0x00000001, 0x00000002, 0x0004003D, 0x00000007, +0x000000E3, 0x00000088, 0x00050081, 0x00000007, 0x000000E4, 0x000000E3, 0x000000E2, 0x0003003E, +0x00000088, 0x000000E4, 0x0004003D, 0x00000007, 0x000000E5, 0x00000088, 0x0005008E, 0x00000007, +0x000000E7, 0x000000E5, 0x000000E6, 0x000200FE, 0x000000E7, 0x00010038, 0x00050036, 0x00000007, +0x00000022, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x00000021, 0x000200F8, 0x00000023, +0x0004003B, 0x000000EB, 0x000000EC, 0x00000007, 0x0004003B, 0x000000EB, 0x000000FA, 0x00000007, +0x0004003B, 0x00000008, 0x00000108, 0x00000007, 0x0004003B, 0x00000008, 0x0000010C, 0x00000007, +0x0004003B, 0x00000008, 0x00000116, 0x00000007, 0x0003003E, 0x000000EC, 0x000000F9, 0x0003003E, +0x000000FA, 0x00000107, 0x0004003D, 0x000000EA, 0x00000109, 0x000000EC, 0x0004003D, 0x00000007, +0x0000010A, 0x00000021, 0x00050091, 0x00000007, 0x0000010B, 0x00000109, 0x0000010A, 0x0003003E, +0x00000108, 0x0000010B, 0x0004003D, 0x00000007, 0x0000010D, 0x00000108, 0x0004003D, 0x00000007, +0x0000010E, 0x00000108, 0x00060050, 0x00000007, 0x00000110, 0x0000010F, 0x0000010F, 0x0000010F, +0x00050081, 0x00000007, 0x00000111, 0x0000010E, 0x00000110, 0x00050085, 0x00000007, 0x00000112, +0x0000010D, 0x00000111, 0x00060050, 0x00000007, 0x00000114, 0x00000113, 0x00000113, 0x00000113, +0x00050083, 0x00000007, 0x00000115, 0x00000112, 0x00000114, 0x0003003E, 0x0000010C, 0x00000115, +0x0004003D, 0x00000007, 0x00000117, 0x00000108, 0x0004003D, 0x00000007, 0x00000119, 0x00000108, +0x0005008E, 0x00000007, 0x0000011A, 0x00000119, 0x00000118, 0x00060050, 0x00000007, 0x0000011C, +0x0000011B, 0x0000011B, 0x0000011B, 0x00050081, 0x00000007, 0x0000011D, 0x0000011A, 0x0000011C, +0x00050085, 0x00000007, 0x0000011E, 0x00000117, 0x0000011D, 0x00060050, 0x00000007, 0x00000120, +0x0000011F, 0x0000011F, 0x0000011F, 0x00050081, 0x00000007, 0x00000121, 0x0000011E, 0x00000120, +0x0003003E, 0x00000116, 0x00000121, 0x0004003D, 0x000000EA, 0x00000122, 0x000000FA, 0x0004003D, +0x00000007, 0x00000123, 0x0000010C, 0x0004003D, 0x00000007, 0x00000124, 0x00000116, 0x00050088, +0x00000007, 0x00000125, 0x00000123, 0x00000124, 0x00050091, 0x00000007, 0x00000126, 0x00000122, +0x00000125, 0x00060050, 0x00000007, 0x00000127, 0x00000052, 0x00000052, 0x00000052, 0x00060050, +0x00000007, 0x00000128, 0x00000046, 0x00000046, 0x00000046, 0x0008000C, 0x00000007, 0x00000129, +0x00000001, 0x0000002B, 0x00000126, 0x00000127, 0x00000128, 0x000200FE, 0x00000129, 0x00010038, 0x00050036, 0x00000007, 0x00000025, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x00000024, -0x000200F8, 0x00000026, 0x0004003B, 0x00000010, 0x00000105, 0x00000007, 0x0004003B, 0x00000010, -0x00000106, 0x00000007, 0x0004003B, 0x00000010, 0x00000109, 0x00000007, 0x0003003E, 0x00000105, -0x00000060, 0x0004003D, 0x00000007, 0x00000107, 0x00000024, 0x00050094, 0x00000006, 0x00000108, -0x00000107, 0x000000F6, 0x0003003E, 0x00000106, 0x00000108, 0x0004003D, 0x00000006, 0x0000010A, -0x00000106, 0x0004003D, 0x00000006, 0x0000010B, 0x00000106, 0x0004003D, 0x00000006, 0x0000010C, -0x00000105, 0x0004003D, 0x00000006, 0x0000010D, 0x00000105, 0x00050085, 0x00000006, 0x0000010E, -0x0000010C, 0x0000010D, 0x00050088, 0x00000006, 0x0000010F, 0x0000010B, 0x0000010E, 0x00050081, -0x00000006, 0x00000110, 0x0000003F, 0x0000010F, 0x00050085, 0x00000006, 0x00000111, 0x0000010A, -0x00000110, 0x0004003D, 0x00000006, 0x00000112, 0x00000106, 0x00050081, 0x00000006, 0x00000113, -0x0000003F, 0x00000112, 0x00050088, 0x00000006, 0x00000114, 0x00000111, 0x00000113, 0x0003003E, -0x00000109, 0x00000114, 0x0004003D, 0x00000006, 0x00000115, 0x00000109, 0x0004003D, 0x00000006, -0x00000116, 0x00000106, 0x00050088, 0x00000006, 0x00000117, 0x00000115, 0x00000116, 0x0004003D, -0x00000007, 0x00000118, 0x00000024, 0x0005008E, 0x00000007, 0x00000119, 0x00000118, 0x00000117, -0x0003003E, 0x00000024, 0x00000119, 0x0004003D, 0x00000007, 0x0000011A, 0x00000024, 0x000200FE, -0x0000011A, 0x00010038, 0x00050036, 0x00000007, 0x00000028, 0x00000000, 0x00000009, 0x00030037, -0x00000008, 0x00000027, 0x000200F8, 0x00000029, 0x0004003B, 0x00000010, 0x0000011D, 0x00000007, -0x0004003B, 0x00000010, 0x0000011F, 0x00000007, 0x0004003B, 0x00000010, 0x00000121, 0x00000007, -0x0004003B, 0x00000010, 0x00000123, 0x00000007, 0x0004003B, 0x00000010, 0x00000125, 0x00000007, -0x0004003B, 0x00000010, 0x00000127, 0x00000007, 0x0003003E, 0x0000011D, 0x0000011E, 0x0003003E, -0x0000011F, 0x00000120, 0x0003003E, 0x00000121, 0x00000122, 0x0003003E, 0x00000123, 0x00000124, -0x0003003E, 0x00000125, 0x00000126, 0x0003003E, 0x00000127, 0x00000128, 0x0004003D, 0x00000007, -0x00000129, 0x00000027, 0x0004003D, 0x00000006, 0x0000012A, 0x0000011D, 0x0004003D, 0x00000007, -0x0000012B, 0x00000027, 0x0005008E, 0x00000007, 0x0000012C, 0x0000012B, 0x0000012A, 0x0004003D, -0x00000006, 0x0000012D, 0x00000121, 0x0004003D, 0x00000006, 0x0000012E, 0x0000011F, 0x00050085, -0x00000006, 0x0000012F, 0x0000012D, 0x0000012E, 0x00060050, 0x00000007, 0x00000130, 0x0000012F, -0x0000012F, 0x0000012F, 0x00050081, 0x00000007, 0x00000131, 0x0000012C, 0x00000130, 0x00050085, -0x00000007, 0x00000132, 0x00000129, 0x00000131, 0x0004003D, 0x00000006, 0x00000133, 0x00000123, -0x0004003D, 0x00000006, 0x00000134, 0x00000125, 0x00050085, 0x00000006, 0x00000135, 0x00000133, -0x00000134, 0x00060050, 0x00000007, 0x00000136, 0x00000135, 0x00000135, 0x00000135, 0x00050081, -0x00000007, 0x00000137, 0x00000132, 0x00000136, 0x0004003D, 0x00000007, 0x00000138, 0x00000027, -0x0004003D, 0x00000006, 0x00000139, 0x0000011D, 0x0004003D, 0x00000007, 0x0000013A, 0x00000027, -0x0005008E, 0x00000007, 0x0000013B, 0x0000013A, 0x00000139, 0x0004003D, 0x00000006, 0x0000013C, -0x0000011F, 0x00060050, 0x00000007, 0x0000013D, 0x0000013C, 0x0000013C, 0x0000013C, 0x00050081, -0x00000007, 0x0000013E, 0x0000013B, 0x0000013D, 0x00050085, 0x00000007, 0x0000013F, 0x00000138, -0x0000013E, 0x0004003D, 0x00000006, 0x00000140, 0x00000123, 0x0004003D, 0x00000006, 0x00000141, -0x00000127, 0x00050085, 0x00000006, 0x00000142, 0x00000140, 0x00000141, 0x00060050, 0x00000007, -0x00000143, 0x00000142, 0x00000142, 0x00000142, 0x00050081, 0x00000007, 0x00000144, 0x0000013F, -0x00000143, 0x00050088, 0x00000007, 0x00000145, 0x00000137, 0x00000144, 0x0004003D, 0x00000006, -0x00000146, 0x00000125, 0x0004003D, 0x00000006, 0x00000147, 0x00000127, 0x00050088, 0x00000006, -0x00000148, 0x00000146, 0x00000147, 0x00060050, 0x00000007, 0x00000149, 0x00000148, 0x00000148, -0x00000148, 0x00050083, 0x00000007, 0x0000014A, 0x00000145, 0x00000149, 0x000200FE, 0x0000014A, -0x00010038, 0x00050036, 0x00000007, 0x0000002B, 0x00000000, 0x00000009, 0x00030037, 0x00000008, -0x0000002A, 0x000200F8, 0x0000002C, 0x0004003B, 0x00000010, 0x0000014D, 0x00000007, 0x0004003B, -0x00000008, 0x0000014E, 0x00000007, 0x0004003B, 0x00000008, 0x00000152, 0x00000007, 0x0004003B, -0x00000008, 0x00000154, 0x00000007, 0x0004003B, 0x00000008, 0x00000157, 0x00000007, 0x0004003B, -0x00000008, 0x00000159, 0x00000007, 0x0003003E, 0x0000014D, 0x00000060, 0x0004003D, 0x00000007, -0x0000014F, 0x0000002A, 0x0004003D, 0x00000006, 0x00000150, 0x0000014D, 0x0005008E, 0x00000007, -0x00000151, 0x0000014F, 0x00000150, 0x0003003E, 0x00000152, 0x00000151, 0x00050039, 0x00000007, -0x00000153, 0x00000028, 0x00000152, 0x0003003E, 0x0000014E, 0x00000153, 0x0003003E, 0x00000154, -0x00000156, 0x0004003D, 0x00000007, 0x0000015A, 0x00000154, 0x0003003E, 0x00000159, 0x0000015A, -0x00050039, 0x00000007, 0x0000015B, 0x00000028, 0x00000159, 0x00050088, 0x00000007, 0x0000015C, -0x00000158, 0x0000015B, 0x0003003E, 0x00000157, 0x0000015C, 0x0004003D, 0x00000007, 0x0000015D, -0x0000014E, 0x0004003D, 0x00000007, 0x0000015E, 0x00000157, 0x00050085, 0x00000007, 0x0000015F, -0x0000015D, 0x0000015E, 0x000200FE, 0x0000015F, 0x00010038, 0x00050036, 0x00000006, 0x0000002F, -0x00000000, 0x0000002D, 0x00030037, 0x00000008, 0x0000002E, 0x000200F8, 0x00000030, 0x0004003D, -0x00000007, 0x00000162, 0x0000002E, 0x00050094, 0x00000006, 0x00000163, 0x00000162, 0x000000F6, -0x000200FE, 0x00000163, 0x00010038, 0x00050036, 0x00000007, 0x00000032, 0x00000000, 0x00000009, -0x00030037, 0x00000008, 0x00000031, 0x000200F8, 0x00000033, 0x0004003B, 0x00000010, 0x00000166, -0x00000007, 0x0004003B, 0x00000008, 0x00000167, 0x00000007, 0x0004003B, 0x00000008, 0x0000016A, -0x00000007, 0x0004003D, 0x00000007, 0x00000168, 0x00000031, 0x0003003E, 0x00000167, 0x00000168, -0x00050039, 0x00000006, 0x00000169, 0x0000002F, 0x00000167, 0x0003003E, 0x00000166, 0x00000169, -0x0004003D, 0x00000007, 0x0000016B, 0x00000031, 0x0004003D, 0x00000007, 0x0000016C, 0x00000031, -0x00060050, 0x00000007, 0x0000016D, 0x0000003F, 0x0000003F, 0x0000003F, 0x00050081, 0x00000007, -0x0000016E, 0x0000016D, 0x0000016C, 0x00050088, 0x00000007, 0x0000016F, 0x0000016B, 0x0000016E, -0x0003003E, 0x0000016A, 0x0000016F, 0x0004003D, 0x00000007, 0x00000170, 0x00000031, 0x0004003D, -0x00000006, 0x00000171, 0x00000166, 0x00050081, 0x00000006, 0x00000172, 0x0000003F, 0x00000171, -0x00060050, 0x00000007, 0x00000173, 0x00000172, 0x00000172, 0x00000172, 0x00050088, 0x00000007, -0x00000174, 0x00000170, 0x00000173, 0x0004003D, 0x00000007, 0x00000175, 0x0000016A, 0x0004003D, -0x00000007, 0x00000176, 0x0000016A, 0x0008000C, 0x00000007, 0x00000177, 0x00000001, 0x0000002E, -0x00000174, 0x00000175, 0x00000176, 0x000200FE, 0x00000177, 0x00010038, +0x000200F8, 0x00000026, 0x0004003D, 0x00000007, 0x0000012C, 0x00000024, 0x00060050, 0x00000007, +0x0000012D, 0x00000052, 0x00000052, 0x00000052, 0x00060050, 0x00000007, 0x0000012E, 0x00000046, +0x00000046, 0x00000046, 0x0008000C, 0x00000007, 0x0000012F, 0x00000001, 0x0000002B, 0x0000012C, +0x0000012D, 0x0000012E, 0x0003003E, 0x00000024, 0x0000012F, 0x0004003D, 0x00000007, 0x00000130, +0x00000024, 0x000200FE, 0x00000130, 0x00010038, 0x00050036, 0x00000007, 0x00000028, 0x00000000, +0x00000009, 0x00030037, 0x00000008, 0x00000027, 0x000200F8, 0x00000029, 0x0004003B, 0x0000000D, +0x00000133, 0x00000007, 0x0004003B, 0x0000000D, 0x0000013A, 0x00000007, 0x0004003D, 0x00000007, +0x00000134, 0x00000027, 0x00050094, 0x00000006, 0x00000139, 0x00000134, 0x00000138, 0x0003003E, +0x00000133, 0x00000139, 0x0004003D, 0x00000006, 0x0000013B, 0x00000133, 0x0004003D, 0x00000006, +0x0000013C, 0x00000133, 0x00050081, 0x00000006, 0x0000013D, 0x00000046, 0x0000013C, 0x00050088, +0x00000006, 0x0000013E, 0x0000013B, 0x0000013D, 0x0003003E, 0x0000013A, 0x0000013E, 0x0004003D, +0x00000006, 0x0000013F, 0x0000013A, 0x0004003D, 0x00000006, 0x00000140, 0x00000133, 0x00050088, +0x00000006, 0x00000141, 0x0000013F, 0x00000140, 0x0004003D, 0x00000007, 0x00000142, 0x00000027, +0x0005008E, 0x00000007, 0x00000143, 0x00000142, 0x00000141, 0x0003003E, 0x00000027, 0x00000143, +0x0004003D, 0x00000007, 0x00000144, 0x00000027, 0x000200FE, 0x00000144, 0x00010038, 0x00050036, +0x00000007, 0x0000002B, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x0000002A, 0x000200F8, +0x0000002C, 0x0004003B, 0x0000000D, 0x00000147, 0x00000007, 0x0004003B, 0x0000000D, 0x00000148, +0x00000007, 0x0004003B, 0x0000000D, 0x0000014B, 0x00000007, 0x0003003E, 0x00000147, 0x000000A2, +0x0004003D, 0x00000007, 0x00000149, 0x0000002A, 0x00050094, 0x00000006, 0x0000014A, 0x00000149, +0x00000138, 0x0003003E, 0x00000148, 0x0000014A, 0x0004003D, 0x00000006, 0x0000014C, 0x00000148, +0x0004003D, 0x00000006, 0x0000014D, 0x00000148, 0x0004003D, 0x00000006, 0x0000014E, 0x00000147, +0x0004003D, 0x00000006, 0x0000014F, 0x00000147, 0x00050085, 0x00000006, 0x00000150, 0x0000014E, +0x0000014F, 0x00050088, 0x00000006, 0x00000151, 0x0000014D, 0x00000150, 0x00050081, 0x00000006, +0x00000152, 0x00000046, 0x00000151, 0x00050085, 0x00000006, 0x00000153, 0x0000014C, 0x00000152, +0x0004003D, 0x00000006, 0x00000154, 0x00000148, 0x00050081, 0x00000006, 0x00000155, 0x00000046, +0x00000154, 0x00050088, 0x00000006, 0x00000156, 0x00000153, 0x00000155, 0x0003003E, 0x0000014B, +0x00000156, 0x0004003D, 0x00000006, 0x00000157, 0x0000014B, 0x0004003D, 0x00000006, 0x00000158, +0x00000148, 0x00050088, 0x00000006, 0x00000159, 0x00000157, 0x00000158, 0x0004003D, 0x00000007, +0x0000015A, 0x0000002A, 0x0005008E, 0x00000007, 0x0000015B, 0x0000015A, 0x00000159, 0x0003003E, +0x0000002A, 0x0000015B, 0x0004003D, 0x00000007, 0x0000015C, 0x0000002A, 0x000200FE, 0x0000015C, +0x00010038, 0x00050036, 0x00000007, 0x0000002E, 0x00000000, 0x00000009, 0x00030037, 0x00000008, +0x0000002D, 0x000200F8, 0x0000002F, 0x0004003B, 0x0000000D, 0x0000015F, 0x00000007, 0x0004003B, +0x0000000D, 0x00000161, 0x00000007, 0x0004003B, 0x0000000D, 0x00000163, 0x00000007, 0x0004003B, +0x0000000D, 0x00000165, 0x00000007, 0x0004003B, 0x0000000D, 0x00000167, 0x00000007, 0x0004003B, +0x0000000D, 0x00000169, 0x00000007, 0x0003003E, 0x0000015F, 0x00000160, 0x0003003E, 0x00000161, +0x00000162, 0x0003003E, 0x00000163, 0x00000164, 0x0003003E, 0x00000165, 0x00000166, 0x0003003E, +0x00000167, 0x00000168, 0x0003003E, 0x00000169, 0x0000016A, 0x0004003D, 0x00000007, 0x0000016B, +0x0000002D, 0x0004003D, 0x00000006, 0x0000016C, 0x0000015F, 0x0004003D, 0x00000007, 0x0000016D, +0x0000002D, 0x0005008E, 0x00000007, 0x0000016E, 0x0000016D, 0x0000016C, 0x0004003D, 0x00000006, +0x0000016F, 0x00000163, 0x0004003D, 0x00000006, 0x00000170, 0x00000161, 0x00050085, 0x00000006, +0x00000171, 0x0000016F, 0x00000170, 0x00060050, 0x00000007, 0x00000172, 0x00000171, 0x00000171, +0x00000171, 0x00050081, 0x00000007, 0x00000173, 0x0000016E, 0x00000172, 0x00050085, 0x00000007, +0x00000174, 0x0000016B, 0x00000173, 0x0004003D, 0x00000006, 0x00000175, 0x00000165, 0x0004003D, +0x00000006, 0x00000176, 0x00000167, 0x00050085, 0x00000006, 0x00000177, 0x00000175, 0x00000176, +0x00060050, 0x00000007, 0x00000178, 0x00000177, 0x00000177, 0x00000177, 0x00050081, 0x00000007, +0x00000179, 0x00000174, 0x00000178, 0x0004003D, 0x00000007, 0x0000017A, 0x0000002D, 0x0004003D, +0x00000006, 0x0000017B, 0x0000015F, 0x0004003D, 0x00000007, 0x0000017C, 0x0000002D, 0x0005008E, +0x00000007, 0x0000017D, 0x0000017C, 0x0000017B, 0x0004003D, 0x00000006, 0x0000017E, 0x00000161, +0x00060050, 0x00000007, 0x0000017F, 0x0000017E, 0x0000017E, 0x0000017E, 0x00050081, 0x00000007, +0x00000180, 0x0000017D, 0x0000017F, 0x00050085, 0x00000007, 0x00000181, 0x0000017A, 0x00000180, +0x0004003D, 0x00000006, 0x00000182, 0x00000165, 0x0004003D, 0x00000006, 0x00000183, 0x00000169, +0x00050085, 0x00000006, 0x00000184, 0x00000182, 0x00000183, 0x00060050, 0x00000007, 0x00000185, +0x00000184, 0x00000184, 0x00000184, 0x00050081, 0x00000007, 0x00000186, 0x00000181, 0x00000185, +0x00050088, 0x00000007, 0x00000187, 0x00000179, 0x00000186, 0x0004003D, 0x00000006, 0x00000188, +0x00000167, 0x0004003D, 0x00000006, 0x00000189, 0x00000169, 0x00050088, 0x00000006, 0x0000018A, +0x00000188, 0x00000189, 0x00060050, 0x00000007, 0x0000018B, 0x0000018A, 0x0000018A, 0x0000018A, +0x00050083, 0x00000007, 0x0000018C, 0x00000187, 0x0000018B, 0x000200FE, 0x0000018C, 0x00010038, +0x00050036, 0x00000007, 0x00000031, 0x00000000, 0x00000009, 0x00030037, 0x00000008, 0x00000030, +0x000200F8, 0x00000032, 0x0004003B, 0x0000000D, 0x0000018F, 0x00000007, 0x0004003B, 0x00000008, +0x00000190, 0x00000007, 0x0004003B, 0x00000008, 0x00000194, 0x00000007, 0x0004003B, 0x00000008, +0x00000196, 0x00000007, 0x0004003B, 0x00000008, 0x00000199, 0x00000007, 0x0004003B, 0x00000008, +0x0000019B, 0x00000007, 0x0003003E, 0x0000018F, 0x00000046, 0x0004003D, 0x00000007, 0x00000191, +0x00000030, 0x0004003D, 0x00000006, 0x00000192, 0x0000018F, 0x0005008E, 0x00000007, 0x00000193, +0x00000191, 0x00000192, 0x0003003E, 0x00000194, 0x00000193, 0x00050039, 0x00000007, 0x00000195, +0x0000002E, 0x00000194, 0x0003003E, 0x00000190, 0x00000195, 0x0003003E, 0x00000196, 0x00000198, +0x0004003D, 0x00000007, 0x0000019C, 0x00000196, 0x0003003E, 0x0000019B, 0x0000019C, 0x00050039, +0x00000007, 0x0000019D, 0x0000002E, 0x0000019B, 0x00050088, 0x00000007, 0x0000019E, 0x0000019A, +0x0000019D, 0x0003003E, 0x00000199, 0x0000019E, 0x0004003D, 0x00000007, 0x0000019F, 0x00000190, +0x0004003D, 0x00000007, 0x000001A0, 0x00000199, 0x00050085, 0x00000007, 0x000001A1, 0x0000019F, +0x000001A0, 0x000200FE, 0x000001A1, 0x00010038, 0x00050036, 0x00000006, 0x00000035, 0x00000000, +0x00000033, 0x00030037, 0x00000008, 0x00000034, 0x000200F8, 0x00000036, 0x0004003D, 0x00000007, +0x000001A4, 0x00000034, 0x00050094, 0x00000006, 0x000001A5, 0x000001A4, 0x00000138, 0x000200FE, +0x000001A5, 0x00010038, 0x00050036, 0x00000007, 0x00000038, 0x00000000, 0x00000009, 0x00030037, +0x00000008, 0x00000037, 0x000200F8, 0x00000039, 0x0004003B, 0x0000000D, 0x000001A8, 0x00000007, +0x0004003B, 0x00000008, 0x000001A9, 0x00000007, 0x0004003B, 0x00000008, 0x000001AC, 0x00000007, +0x0004003D, 0x00000007, 0x000001AA, 0x00000037, 0x0003003E, 0x000001A9, 0x000001AA, 0x00050039, +0x00000006, 0x000001AB, 0x00000035, 0x000001A9, 0x0003003E, 0x000001A8, 0x000001AB, 0x0004003D, +0x00000007, 0x000001AD, 0x00000037, 0x0004003D, 0x00000007, 0x000001AE, 0x00000037, 0x00060050, +0x00000007, 0x000001AF, 0x00000046, 0x00000046, 0x00000046, 0x00050081, 0x00000007, 0x000001B0, +0x000001AF, 0x000001AE, 0x00050088, 0x00000007, 0x000001B1, 0x000001AD, 0x000001B0, 0x0003003E, +0x000001AC, 0x000001B1, 0x0004003D, 0x00000007, 0x000001B2, 0x00000037, 0x0004003D, 0x00000006, +0x000001B3, 0x000001A8, 0x00050081, 0x00000006, 0x000001B4, 0x00000046, 0x000001B3, 0x00060050, +0x00000007, 0x000001B5, 0x000001B4, 0x000001B4, 0x000001B4, 0x00050088, 0x00000007, 0x000001B6, +0x000001B2, 0x000001B5, 0x0004003D, 0x00000007, 0x000001B7, 0x000001AC, 0x0004003D, 0x00000007, +0x000001B8, 0x000001AC, 0x0008000C, 0x00000007, 0x000001B9, 0x00000001, 0x0000002E, 0x000001B6, +0x000001B7, 0x000001B8, 0x000200FE, 0x000001B9, 0x00010038, }; \ No newline at end of file diff --git a/Lumos/Assets/Shaders/CompiledSPV/SSAO.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/SSAO.frag.spv index 85f6652e6..829b1596b 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/SSAO.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/SSAO.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/SSAOBlur.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/SSAOBlur.frag.spv new file mode 100644 index 000000000..0dab3dca8 Binary files /dev/null and b/Lumos/Assets/Shaders/CompiledSPV/SSAOBlur.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/ScreenPass.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/ScreenPass.vert.spv index fda27a193..ab0242d82 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/ScreenPass.vert.spv and b/Lumos/Assets/Shaders/CompiledSPV/ScreenPass.vert.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Shadow.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/Shadow.vert.spv index 8e943ddd6..b79aadbe8 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/Shadow.vert.spv and b/Lumos/Assets/Shaders/CompiledSPV/Shadow.vert.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Sharpen.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/Sharpen.frag.spv new file mode 100644 index 000000000..7dde2861d Binary files /dev/null and b/Lumos/Assets/Shaders/CompiledSPV/Sharpen.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Skybox.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/Skybox.frag.spv index 53e630853..79f10e21b 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/Skybox.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/Skybox.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/Skybox.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/Skybox.vert.spv index cb333ea77..673ecde63 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/Skybox.vert.spv and b/Lumos/Assets/Shaders/CompiledSPV/Skybox.vert.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/ToneMapping.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/ToneMapping.frag.spv index 834ef1233..7c70e2108 100644 Binary files a/Lumos/Assets/Shaders/CompiledSPV/ToneMapping.frag.spv and b/Lumos/Assets/Shaders/CompiledSPV/ToneMapping.frag.spv differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/shader.frag.spv b/Lumos/Assets/Shaders/CompiledSPV/shader.frag.spv deleted file mode 100644 index 9d8335ba4..000000000 Binary files a/Lumos/Assets/Shaders/CompiledSPV/shader.frag.spv and /dev/null differ diff --git a/Lumos/Assets/Shaders/CompiledSPV/shader.vert.spv b/Lumos/Assets/Shaders/CompiledSPV/shader.vert.spv deleted file mode 100644 index 3edf846f2..000000000 Binary files a/Lumos/Assets/Shaders/CompiledSPV/shader.vert.spv and /dev/null differ diff --git a/Lumos/Assets/Shaders/CreateEnvironmentMap.frag b/Lumos/Assets/Shaders/CreateEnvironmentMap.frag index 78ade7e74..3dfdcd020 100644 --- a/Lumos/Assets/Shaders/CreateEnvironmentMap.frag +++ b/Lumos/Assets/Shaders/CreateEnvironmentMap.frag @@ -2,39 +2,32 @@ #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable +#include "EnvironmentMapping.glslh" + layout(location = 0) in vec2 outTexCoord; +layout(set = 0, binding = 0) uniform sampler2D u_Texture; +layout(set = 0, binding = 1) uniform UniformBuffer +{ + vec4 u_Parameters; +} +ubo; + layout(push_constant) uniform PushConsts { uint cubeFaceIndex; } pushConsts; -layout(set = 0, binding = 0) uniform sampler2D u_Texture; layout(location = 0) out vec4 outFrag; -#define MATH_PI 3.1415926535897932384626433832795 - - -vec3 uvToXYZ(int face, vec2 uv) -{ - if(face == 0) - return vec3( 1.f, uv.y, -uv.x); - - else if(face == 1) - return vec3( -1.f, uv.y, uv.x); - - else if(face == 2) - return vec3( +uv.x, -1.f, +uv.y); +const float coeiff = 0.3; +const vec3 totalSkyLight = vec3(0.3, 0.5, 1.0); - else if(face == 3) - return vec3( +uv.x, 1.f, -uv.y); +const float blurLevel = 1.0f; +const float timeCounter = 0.0f; - else if(face == 4) - return vec3( +uv.x, uv.y, 1.f); +#define MATH_PI 3.1415926535897932384626433832795 - else //if(face == 5) - { return vec3( -uv.x, +uv.y, -1.f);} -} vec2 dirToUV(vec3 dir) { @@ -43,57 +36,37 @@ vec2 dirToUV(vec3 dir) 1.f - acos(dir.y) / MATH_PI); } -vec3 panoramaToCubeMap(int face, vec2 texCoord) +vec3 uvToXYZ() { - vec2 texCoordNew = texCoord*2.0-1.0; //< mapping vom 0,1 to -1,1 coords - vec3 scan = uvToXYZ(face, texCoordNew); - vec3 direction = normalize(scan); - vec2 src = dirToUV(direction); - - return texture(u_Texture, src).rgb; //< get the color from the panorama + vec2 uv = outTexCoord; + uv = 2.0 * vec2(uv.x, uv.y) - vec2(1.0); + + int face = int(pushConsts.cubeFaceIndex); + + if(face == 0) return vec3( 1.f, uv.y, -uv.x); + else if(face == 1) return vec3( -1.f, uv.y, uv.x); + else if(face == 2) return vec3( +uv.x, -1.f, +uv.y); + else if(face == 3) return vec3( +uv.x, 1.f, -uv.y); + else if(face == 4) return vec3( +uv.x, uv.y, 1.f); + else return vec3( -uv.x, +uv.y, -1.f); //if(face == 5) } -const float coeiff = 0.3; -const vec3 totalSkyLight = vec3(0.3, 0.5, 1.0); - -const float PI = 3.14159265359; -const float blurLevel = 1.0f; -const float timeCounter = 0.0f; - -vec3 mie(float dist, vec3 sunL) +vec3 panoramaToCubeMap() { - return max(exp(-pow(dist, 0.25)) * sunL - 0.4, 0.0); -} + vec3 cubeTC = GetCubeMapTexCoord(int(pushConsts.cubeFaceIndex), outTexCoord); -vec3 GetCubeMapTexCoord() -{ - vec2 uv = outTexCoord; - uv = 2.0 * vec2(uv.x, 1.0 - uv.y) - vec2(1.0); - - vec3 ret; - int face = int(pushConsts.cubeFaceIndex); - vec3 GlobalInvocationID = vec3(0.0,0.0,face); - if (GlobalInvocationID.z == 0) ret = vec3( 1.0, uv.y, -uv.x); - else if (GlobalInvocationID.z == 1) ret = vec3( -1.0, uv.y, uv.x); - else if (GlobalInvocationID.z == 2) ret = vec3( uv.x, 1.0, -uv.y); - else if (GlobalInvocationID.z == 3) ret = vec3( uv.x, -1.0, uv.y); - else if (GlobalInvocationID.z == 4) ret = vec3( uv.x, uv.y, 1.0); - else if (GlobalInvocationID.z == 5) ret = vec3(-uv.x, uv.y, -1.0); - return normalize(ret); + //vec3 scan = uvToXYZ(); + vec3 direction = normalize(cubeTC); + vec2 src = dirToUV(direction); + + return texture(u_Texture, src).rgb; //< get the color from the panorama } vec3 getSky() { - int face = int(pushConsts.cubeFaceIndex); - vec2 texCoordNew = outTexCoord*2.0-1.0; //< mapping vom 0,1 to -1,1 coords - vec3 scan = uvToXYZ(face, texCoordNew); - vec3 direction = normalize(scan); - vec2 src = dirToUV(direction); - vec3 uv = GetCubeMapTexCoord();//vec3(src, face); - //vec3 uv = normalize(outPosition.xyz); - + vec3 uv = GetCubeMapTexCoord2(int(pushConsts.cubeFaceIndex), outTexCoord); vec3 sunPos; - float radian = PI * 2.0 *((timeCounter / 86400.0) - 0.333333); + float radian = MATH_PI * 2.0 *((timeCounter / 86400.0) - 0.333333); sunPos.x = cos(radian); sunPos.y = sin(radian); sunPos.z = 0.0; @@ -101,35 +74,139 @@ vec3 getSky() float sunDistance = length(uv - normalize(sunPos));// clamp(sunPos, -1.0, 1.0)); float scatterMult = clamp(sunDistance, 0.0, 1.0); - //float sun = clamp(1.0 - smoothstep(0.01, 0.011, scatterMult), 0.0, 1.0); float dist = uv.y + 0.1; // reduce horizon level dist = (coeiff * mix(scatterMult, 1.0, dist)) / dist; - //vec3 mieScatter = mie(sunDistance, vec3(1.0)); - vec3 colour = dist * totalSkyLight; colour = max(colour, 0.0); colour = max(mix(pow(colour, 1.0 - colour), colour / (2.0 * colour + 0.5 - colour), - clamp(sunPos.y * 2.0, 0.0, 1.0)), 0.0) - ;// +mieScatter;// +sun; - - // colour *= 1.0 + pow(1.0 - scatterMult, 10.0) * 10.0; - - //float underscatter = (sunPos.y * 0.5 + 0.5 - 0.8); - - //vec3 nightcolour = texture(cubeTex, uv).xyz; - - //colour = mix(colour, nightcolour, clamp(underscatter, 0.0, 1.0)); + clamp(sunPos.y * 2.0, 0.0, 1.0)), 0.0); return colour; } +vec3 mie(float dist, vec3 sunL) +{ + return max(exp(-pow(dist, 0.25)) * sunL - 0.4, 0.0); +} + +vec3 YxyToXYZ( in vec3 Yxy ) +{ + float Y = Yxy.r; + float x = Yxy.g; + float y = Yxy.b; + + float X = x * ( Y / y ); + + float Z = ( 1.0 - x - y ) * ( Y / y ); + + return vec3(X,Y,Z); +} + +vec3 XYZToRGB( in vec3 XYZ ) +{ + // CIE/E + mat3 M = mat3 + ( + 2.3706743, -0.9000405, -0.4706338, + -0.5138850, 1.4253036, 0.0885814, + 0.0052982, -0.0146949, 1.0093968 + ); + + return XYZ * M; +} + + +vec3 YxyToRGB( in vec3 Yxy ) +{ + vec3 XYZ = YxyToXYZ( Yxy ); + vec3 RGB = XYZToRGB( XYZ ); + return RGB; +} + +float saturatedDot( in vec3 a, in vec3 b ) +{ + return max( dot( a, b ), 0.01 ); +} + +void calculatePerezDistribution( in float t, out vec3 A, out vec3 B, out vec3 C, out vec3 D, out vec3 E ) +{ + A = vec3( 0.1787 * t - 1.4630, -0.0193 * t - 0.2592, -0.0167 * t - 0.2608 ); + B = vec3( -0.3554 * t + 0.4275, -0.0665 * t + 0.0008, -0.0950 * t + 0.0092 ); + C = vec3( -0.0227 * t + 5.3251, -0.0004 * t + 0.2125, -0.0079 * t + 0.2102 ); + D = vec3( 0.1206 * t - 2.5771, -0.0641 * t - 0.8989, -0.0441 * t - 1.6537 ); + E = vec3( -0.0670 * t + 0.3703, -0.0033 * t + 0.0452, -0.0109 * t + 0.0529 ); +} + +vec3 calculateZenithLuminanceYxy( in float t, in float thetaS ) +{ + float chi = ( 4.0 / 9.0 - t / 120.0 ) * ( MATH_PI - 2.0 * thetaS ); + float Yz = ( 4.0453 * t - 4.9710 ) * tan( chi ) - 0.2155 * t + 2.4192; + + float theta2 = thetaS * thetaS; + float theta3 = theta2 * thetaS; + float T = t; + float T2 = t * t; + + float xz = + ( 0.00165 * theta3 - 0.00375 * theta2 + 0.00209 * thetaS + 0.0) * T2 + + (-0.02903 * theta3 + 0.06377 * theta2 - 0.03202 * thetaS + 0.00394) * T + + ( 0.11693 * theta3 - 0.21196 * theta2 + 0.06052 * thetaS + 0.25886); + + float yz = + ( 0.00275 * theta3 - 0.00610 * theta2 + 0.00317 * thetaS + 0.0) * T2 + + (-0.04214 * theta3 + 0.08970 * theta2 - 0.04153 * thetaS + 0.00516) * T + + ( 0.15346 * theta3 - 0.26756 * theta2 + 0.06670 * thetaS + 0.26688); + + return vec3( Yz, xz, yz ); +} + +vec3 calculatePerezLuminanceYxy( in float theta, in float gamma, in vec3 A, in vec3 B, in vec3 C, in vec3 D, in vec3 E ) +{ + return ( 1.0 + A * exp( B / cos( theta ) ) ) * ( 1.0 + C * exp( D * gamma ) + E * cos( gamma ) * cos( gamma ) ); +} + +vec3 calculateSkyLuminanceRGB( in vec3 s, in vec3 e, in float t ) +{ + vec3 A, B, C, D, E; + calculatePerezDistribution( t, A, B, C, D, E ); + + float thetaS = acos( saturatedDot( s, vec3(0,1,0) ) ); + float thetaE = acos( saturatedDot( e, vec3(0,1,0) ) ); + float gammaE = acos( saturatedDot( s, e ) ); + + vec3 Yz = calculateZenithLuminanceYxy( t, thetaS ); + + vec3 fThetaGamma = calculatePerezLuminanceYxy( thetaE, gammaE, A, B, C, D, E ); + vec3 fZeroThetaS = calculatePerezLuminanceYxy( 0.0, thetaS, A, B, C, D, E ); + vec3 Yp = Yz * ( fThetaGamma / fZeroThetaS ); + + return YxyToRGB( Yp ); +} + +vec3 PreethamSky() +{ + vec3 cubeTexCoords = normalize(GetCubeMapTexCoord(int(pushConsts.cubeFaceIndex), outTexCoord));//uvToXYZ()); + + float turbidity = ubo.u_Parameters.x; + float azimuth = ubo.u_Parameters.y; + float inclination = ubo.u_Parameters.z; + vec3 sunDir = normalize( vec3( sin(inclination) * cos(azimuth), cos(inclination), sin(inclination) * sin(azimuth) ) ); + vec3 viewDir = -cubeTexCoords; + vec3 skyLuminance = calculateSkyLuminanceRGB( sunDir, viewDir, turbidity ); + + return skyLuminance * 0.04; +} + void main() { - //vec3 colour = panoramaToCubeMap(int(pushConsts.cubeFaceIndex), outTexCoord); - vec3 colour = getSky(); - outFrag = vec4(colour, 1.0); + if(ubo.u_Parameters.w < 0.5) + outFrag = vec4(clamp(panoramaToCubeMap(), 0.0, 50.0), 1.0); + else if(ubo.u_Parameters.w < 1.5) + outFrag = vec4(DeGamma(PreethamSky()), 1.0); + else + outFrag = vec4(getSky(), 1.0); } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/DepthPrePass.frag b/Lumos/Assets/Shaders/DepthPrePass.frag index 8a0d8dac3..e668e452d 100644 --- a/Lumos/Assets/Shaders/DepthPrePass.frag +++ b/Lumos/Assets/Shaders/DepthPrePass.frag @@ -8,8 +8,7 @@ struct VertexData vec2 TexCoord; vec4 Position; vec3 Normal; - vec3 Tangent; - vec4 ShadowMapCoords[4]; + mat3 WorldNormal; }; layout(location = 0) in VertexData VertexOutput; @@ -38,12 +37,13 @@ layout(set = 1,binding = 6) uniform UniformMaterialData float padding; } materialProperties; - +layout(location = 0) out vec4 OutNormal; void main(void) { - const float alphaCutOut = 0.4; float alpha = texture(u_AlbedoMap, VertexOutput.TexCoord).a; if(alpha < materialProperties.AlphaCutOff) discard; + + OutNormal = vec4(normalize(VertexOutput.Normal * 0.5 + 0.5), 1.0f); } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/EnvironmentIrradiance.frag b/Lumos/Assets/Shaders/EnvironmentIrradiance.frag new file mode 100644 index 000000000..95debf64a --- /dev/null +++ b/Lumos/Assets/Shaders/EnvironmentIrradiance.frag @@ -0,0 +1,78 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable +#include "EnvironmentMapping.glslh" + +layout(location = 0) in vec2 outTexCoord; + +layout(set = 0, binding = 0) uniform samplerCube u_Texture; +layout(set = 0, binding = 1) uniform UniformBuffer +{ + uint Samples; +} +ubo; + +layout(push_constant) uniform PushConsts +{ + uint cubeFaceIndex; +} pushConsts; + +layout(location = 0) out vec4 outFrag; + +// vec3 GetCubeMapTexCoord() +// { +// vec2 uv = outTexCoord; +// uv = 2.0 * vec2(uv.x, 1.0 - uv.y) - vec2(1.0); + +// vec3 ret = vec3(0.0, 0.0, 0.0); +// int face = int(pushConsts.cubeFaceIndex); + +// if (face == 0) ret = vec3( 1.0, uv.y, -uv.x); +// else if (face == 1) ret = vec3( -1.0, uv.y, uv.x); +// else if (face == 2) ret = vec3( uv.x, 1.0, uv.y); +// else if (face == 3) ret = vec3( uv.x, -1.0, -uv.y); +// else if (face == 4) ret = vec3( uv.x, uv.y, 1.0); +// else ret = vec3(-uv.x, uv.y, -1.0); //if (face == 5) +// return normalize(ret); +// } + +vec3 uvToXYZ() +{ + vec2 uv = outTexCoord; + uv = 2.0 * vec2(uv.x, uv.y) - vec2(1.0); + + int face = int(pushConsts.cubeFaceIndex); + + if(face == 0) return vec3( 1.f, uv.y, -uv.x); + else if(face == 1) return vec3( -1.f, uv.y, uv.x); + else if(face == 2) return vec3( +uv.x, -1.f, +uv.y); + else if(face == 3) return vec3( +uv.x, 1.f, -uv.y); + else if(face == 4) return vec3( +uv.x, uv.y, 1.f); + else return vec3( -uv.x, +uv.y, -1.f); //if(face == 5) +} + +void main() +{ + vec3 N = normalize(GetCubeMapTexCoord(int(pushConsts.cubeFaceIndex), outTexCoord)); + vec3 S, T; + ComputeBasisVectors(N, S, T); + + uint samples = 64 * ubo.Samples; + + // Monte Carlo integration of hemispherical irradiance. + // As a small optimization this also includes Lambertian BRDF assuming perfectly white surface (albedo of 1.0) + // so we don't need to normalize in PBR fragment shader (so technically it encodes exitant radiance rather than irradiance). + vec3 irradiance = vec3(0); + for(uint i = 0; i < samples; i++) + { + vec2 u = SampleHammersley(i, samples); + vec3 Li = TangentToWorld(SampleHemisphere(u.x, u.y), N, S, T); + float cosTheta = max(0.0, dot(Li, N)); + + // PIs here cancel out because of division by pdf. + irradiance += 2.0 * textureLod(u_Texture, Li, 0).rgb * cosTheta; + } + irradiance /= vec3(samples); + + outFrag = vec4(irradiance, 1.0); +} \ No newline at end of file diff --git a/Lumos/Assets/Shaders/EnvironmentIrradiance.shader b/Lumos/Assets/Shaders/EnvironmentIrradiance.shader new file mode 100644 index 000000000..090b47228 --- /dev/null +++ b/Lumos/Assets/Shaders/EnvironmentIrradiance.shader @@ -0,0 +1,7 @@ +#shader vertex +CompiledSPV/ScreenPass.vert.spv +#shader end + +#shader fragment +CompiledSPV/EnvironmentIrradiance.frag.spv +#shader end diff --git a/Lumos/Assets/Shaders/EnvironmentMapping.glslh b/Lumos/Assets/Shaders/EnvironmentMapping.glslh new file mode 100644 index 000000000..0a5639c3e --- /dev/null +++ b/Lumos/Assets/Shaders/EnvironmentMapping.glslh @@ -0,0 +1,111 @@ +#include "Common.glslh" +const uint NumSamples = 1024; +const float InvNumSamples = 1.0 / float(NumSamples); + + +float D_GGX(float NoH, float a) +{ + float a2 = a * a; + float f = (NoH * a2 - NoH) * NoH + 1.0; + return a2 / (PI * f * f); +} + +vec3 GetCubeMapTexCoord(int face, vec2 outTexCoord) +{ + vec2 uv = outTexCoord; + uv = 2.0 * vec2(uv.x, uv.y) - vec2(1.0); + + if(face == 0) return vec3( 1.f, uv.y, -uv.x); + else if(face == 1) return vec3( -1.f, uv.y, uv.x); + else if(face == 2) return vec3( +uv.x, -1.f, +uv.y); + else if(face == 3) return vec3( +uv.x, 1.f, -uv.y); + else if(face == 4) return vec3( +uv.x, uv.y, 1.f); + else return vec3( -uv.x, +uv.y, -1.f); //if(face == 5) +} + +vec3 GetCubeMapTexCoord2(int cubeFaceIndex, vec2 texCoord) +{ + vec2 uv = texCoord; + uv = 2.0 * vec2(uv.x, 1.0 - uv.y) - vec2(1.0); + + vec3 ret = vec3(0.0, 0.0, 0.0); + int face = cubeFaceIndex; + + if (face == 0) ret = vec3( 1.0, uv.y, -uv.x); + else if (face == 1) ret = vec3( -1.0, uv.y, uv.x); + else if (face == 2) ret = vec3( uv.x, 1.0, -uv.y); + else if (face == 3) ret = vec3( uv.x, -1.0, uv.y); + else if (face == 4) ret = vec3( uv.x, uv.y, 1.0); + else ret = vec3(-uv.x, uv.y, -1.0); //if (face == 5) + return normalize(ret); +} + +float RadicalInverse_VdC(uint bits) +{ + bits = (bits << 16u) | (bits >> 16u); + bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); + bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); + bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); + bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); + return float(bits) * 2.3283064365386963e-10; // / 0x100000000 +} + +vec2 SampleHammersley(uint i) +{ + return vec2(i * InvNumSamples, RadicalInverse_VdC(i)); +} + + +void ComputeBasisVectors(const vec3 N, out vec3 S, out vec3 T) +{ + // Branchless select non-degenerate T. + T = cross(N, vec3(0.0, 1.0, 0.0)); + T = mix(cross(N, vec3(1.0, 0.0, 0.0)), T, step(Epsilon, dot(T, T))); + + T = normalize(T); + S = normalize(cross(N, T)); +} + +// Importance sample GGX normal distribution function for a fixed roughness value. +// This returns normalized half-vector between Li & Lo. +// For derivation see: http://blog.tobias-franke.eu/2014/03/30/notes_on_importance_sampling.html +vec3 SampleGGX(float u1, float u2, float roughness) +{ + float alpha = roughness * roughness; + + float cosTheta = sqrt((1.0 - u2) / (1.0 + (alpha*alpha - 1.0) * u2)); + float sinTheta = sqrt(1.0 - cosTheta*cosTheta); // Trig. identity + float phi = TwoPI * u1; + + // Convert to Cartesian upon return. + return vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); +} + +// GGX/Towbridge-Reitz normal distribution function. +// Uses Disney's reparametrization of alpha = roughness^2 +float NdfGGX(float cosLh, float roughness) +{ + float alpha = roughness * roughness; + float alphaSq = alpha * alpha; + + float denom = (cosLh * cosLh) * (alphaSq - 1.0) + 1.0; + return alphaSq / (PI * denom * denom); +} + +vec2 SampleHammersley(uint i, uint samples) +{ + float invSamples = 1.0 / float(samples); + return vec2(i * invSamples, RadicalInverse_VdC(i)); +} + +vec3 SampleHemisphere(float u1, float u2) +{ + const float u1p = sqrt(max(0.0, 1.0 - u1*u1)); + return vec3(cos(TwoPI*u2) * u1p, sin(TwoPI*u2) * u1p, u1); +} + +vec3 TangentToWorld(const vec3 v, const vec3 N, const vec3 S, const vec3 T) +{ + return S * v.x + T * v.y + N * v.z; +} + diff --git a/Lumos/Assets/Shaders/EnvironmentMipFilter.frag b/Lumos/Assets/Shaders/EnvironmentMipFilter.frag new file mode 100644 index 000000000..cffef3f83 --- /dev/null +++ b/Lumos/Assets/Shaders/EnvironmentMipFilter.frag @@ -0,0 +1,106 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable +#include "EnvironmentMapping.glslh" + +layout(location = 0) in vec2 outTexCoord; + +layout(set = 0, binding = 0) uniform samplerCube u_Texture; + +layout(push_constant) uniform PushConsts +{ + float Roughness; + uint cubeFaceIndex; + float p0; + float p1; +} pushConsts; + + +#define PARAM_ROUGHNESS pushConsts.Roughness + +// ---------------------------------------------------------------------------- +vec2 Hammersley(uint i, uint N) +{ + return vec2(float(i)/float(N), RadicalInverse_VdC(i)); +} + +vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness) +{ + float a = roughness*roughness; + + float phi = 2.0 * PI * Xi.x; + float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y)); + float sinTheta = sqrt(1.0 - cosTheta*cosTheta); + + // from spherical coordinates to cartesian coordinates + vec3 H; + H.x = cos(phi) * sinTheta; + H.y = sin(phi) * sinTheta; + H.z = cosTheta; + + // from tangent-space vector to world-space sample vector + vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); + vec3 tangent = normalize(cross(up, N)); + vec3 bitangent = cross(N, tangent); + + vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z; + return normalize(sampleVec); +} + +layout(location = 0) out vec4 FragColour; + +void main() +{ + vec3 N = normalize(GetCubeMapTexCoord2(int(pushConsts.cubeFaceIndex), outTexCoord)); + + vec3 R = N; + vec3 V = R; + + const uint SAMPLE_COUNT = 1024u; + float totalWeight = 0.0; + vec3 prefilteredColor = vec3(0.0); + + if(PARAM_ROUGHNESS < 0.06) + { + FragColour = vec4(texture(u_Texture, N, 0).rgb, 1.0); + } + else + { + float EnvMapSize = float(textureSize(u_Texture, 0).s); + + for(uint i = 0u; i < SAMPLE_COUNT; ++i) + { + vec2 Xi = Hammersley(i, SAMPLE_COUNT); + vec3 H = ImportanceSampleGGX(Xi, N, PARAM_ROUGHNESS); + vec3 L = normalize(2.0 * dot(V, H) * H - V); + + float NdotL = max(dot(N, L), 0.0); + if(NdotL > 0.0) + { + // Vectors to evaluate pdf + float fNdotH = saturate(dot(N, H)); + float fVdotH = saturate(dot(V, H)); + + // Probability Distribution Function + float fPdf = D_GGX(fNdotH, PARAM_ROUGHNESS) * fNdotH / (4.0f * fVdotH); + + // Solid angle represented by this sample + //float fOmegaS = 1.0 / (SAMPLE_COUNT * fPdf); + float fOmegaS = 1.0 / (max(SAMPLE_COUNT * fPdf, 0.00001f)); + // Solid angle covered by 1 pixel with 6 faces that are EnvMapSize X EnvMapSize + float fOmegaP = 4.0 * PI / (6.0 * EnvMapSize * EnvMapSize); + // Original paper suggest biasing the mip to improve the results + float fMipBias = 1.0f; + float fMipLevel = max(0.5 * log2(fOmegaS / fOmegaP) + fMipBias, 0.0f); + + prefilteredColor += texture(u_Texture, L, fMipLevel).rgb * NdotL; + totalWeight += NdotL; + } + } + prefilteredColor = prefilteredColor / max(totalWeight, 0.0001f); + + FragColour = vec4(prefilteredColor, 1.0); + } + + +} \ No newline at end of file diff --git a/Lumos/Assets/Shaders/EnvironmentMipFilter.shader b/Lumos/Assets/Shaders/EnvironmentMipFilter.shader new file mode 100644 index 000000000..ff33be8c8 --- /dev/null +++ b/Lumos/Assets/Shaders/EnvironmentMipFilter.shader @@ -0,0 +1,7 @@ +#shader vertex +CompiledSPV/ScreenPass.vert.spv +#shader end + +#shader fragment +CompiledSPV/EnvironmentMipFilter.frag.spv +#shader end diff --git a/Lumos/Assets/Shaders/ForwardPBR.frag b/Lumos/Assets/Shaders/ForwardPBR.frag index 89ad78b7c..c4999cce8 100644 --- a/Lumos/Assets/Shaders/ForwardPBR.frag +++ b/Lumos/Assets/Shaders/ForwardPBR.frag @@ -1,5 +1,5 @@ #version 450 -#include "Common.glslh" +#include "PBR.glslh" #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable @@ -9,18 +9,16 @@ struct VertexData vec2 TexCoord; vec4 Position; vec3 Normal; - vec3 Tangent; - vec4 ShadowMapCoords[4]; + mat3 WorldNormal; }; layout(location = 0) in VertexData VertexOutput; #define MAX_LIGHTS 32 #define MAX_SHADOWMAPS 4 -#define BLEND_SHADOW_CASCADES 0 +#define BLEND_SHADOW_CASCADES 1 +#define FILTER_SHADOWS 1 #define NUM_PCF_SAMPLES 8 - -const float Epsilon = 0.00001; float ShadowFade = 1.0; struct Light @@ -46,6 +44,7 @@ layout(set = 1,binding = 6) uniform UniformMaterialData vec4 AlbedoColour; float Roughness; float Metallic; + float Reflectance; float Emissive; float AlbedoMapFactor; float MetallicMapFactor; @@ -55,7 +54,6 @@ layout(set = 1,binding = 6) uniform UniformMaterialData float AOMapFactor; float AlphaCutOff; float workflow; - float padding; } materialProperties; layout(set = 2, binding = 0) uniform sampler2D uBRDFLUT; @@ -82,9 +80,9 @@ layout(set = 2, binding = 5) uniform UBOLight int Mode; int EnvMipCount; float InitialBias; - float p0; - float p1; - float p2; + float Width; + float Height; + int shadowEnabled; } ubo; layout(location = 0) out vec4 outColor; @@ -96,55 +94,67 @@ const float PBR_WORKFLOW_SPECULAR_GLOSINESS = 2.0f; struct Material { vec4 Albedo; - vec3 Metallic; + float Metallic; float Roughness; + float PerceptualRoughness; + float Reflectance; vec3 Emissive; vec3 Normal; float AO; vec3 View; float NDotV; + vec3 F0; + vec3 EnergyCompensation; + vec2 dfg; }; vec4 GetAlbedo() { + if(materialProperties.AlbedoMapFactor < 0.05) + return materialProperties.AlbedoColour; + return (1.0 - materialProperties.AlbedoMapFactor) * materialProperties.AlbedoColour + materialProperties.AlbedoMapFactor * DeGamma(texture(u_AlbedoMap, VertexOutput.TexCoord)); } vec3 GetMetallic() { + if(materialProperties.MetallicMapFactor < 0.05) + return materialProperties.Metallic.rrr; + return (1.0 - materialProperties.MetallicMapFactor) * materialProperties.Metallic + materialProperties.MetallicMapFactor * texture(u_MetallicMap, VertexOutput.TexCoord).rgb; } float GetRoughness() { + if(materialProperties.RoughnessMapFactor < 0.05) + return materialProperties.Roughness; return (1.0 - materialProperties.RoughnessMapFactor) * materialProperties.Roughness + materialProperties.RoughnessMapFactor * texture(u_RoughnessMap, VertexOutput.TexCoord).r; } float GetAO() { + if(materialProperties.AOMapFactor < 0.05) + return 1.0; + return (1.0 - materialProperties.AOMapFactor) + materialProperties.AOMapFactor * texture(u_AOMap, VertexOutput.TexCoord).r; } vec3 GetEmissive(vec3 albedo) { + if(materialProperties.EmissiveMapFactor < 0.05) + return (materialProperties.Emissive * albedo); return (materialProperties.Emissive * albedo) + materialProperties.EmissiveMapFactor * DeGamma(texture(u_EmissiveMap, VertexOutput.TexCoord).rgb); } vec3 GetNormalFromMap() { - if (materialProperties.NormalMapFactor < 0.1) + if (materialProperties.NormalMapFactor < 0.05) return normalize(VertexOutput.Normal); - - vec3 tangentNormal = texture(u_NormalMap, VertexOutput.TexCoord).xyz * 2.0 - 1.0; - - vec3 N = normalize(VertexOutput.Normal); - vec3 T = normalize(VertexOutput.Tangent.xyz); - vec3 B = normalize(cross(N, T)); - mat3 TBN = mat3(T, B, N); - return normalize(TBN * tangentNormal); + + vec3 Normal = normalize(texture(u_NormalMap, VertexOutput.TexCoord).rgb * 2.0f - 1.0f); + return normalize(VertexOutput.WorldNormal * Normal); } - const mat4 BiasMatrix = mat4( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, @@ -249,7 +259,7 @@ float PCFShadowDirectionalLight(sampler2DArray shadowMap, vec4 shadowCoords, flo { float bias = GetShadowBias(lightDirection, normal, cascadeIndex); float sum = 0; - float noise = Noise(gl_FragCoord.xy); + float noise = Noise(wsPos.xy); for (int i = 0; i < NUM_PCF_SAMPLES; i++) { @@ -259,7 +269,7 @@ float PCFShadowDirectionalLight(sampler2DArray shadowMap, vec4 shadowCoords, flo //int index = int(float(NUM_PCF_SAMPLES)*Random(vec4(floor(wsPos*1000.0), 1)))%NUM_PCF_SAMPLES; //int index = int(NUM_PCF_SAMPLES*Random(vec4(floor(wsPos.xyz*1000.0), i)))%NUM_PCF_SAMPLES; - //int index = int(NUM_PCF_SAMPLES*Random(vec4(gl_FragCoord.xyy, i)))%NUM_PCF_SAMPLES; + //int index = int(NUM_PCF_SAMPLES*Random(vec4(wsPos.xyy, i)))%NUM_PCF_SAMPLES; //vec2 offset = (SamplePoisson(index) / 700.0f); vec2 offset = VogelDiskSample(i, NUM_PCF_SAMPLES, noise) / 700.0f; @@ -296,91 +306,53 @@ float CalculateShadow(vec3 wsPos, int cascadeIndex, vec3 lightDirection, vec3 no vec4 viewPos = ubo.ViewMatrix * vec4(wsPos, 1.0); float shadowAmount = 1.0; - -#if (BLEND_SHADOW_CASCADES == 1) - float c0 = smoothstep(ubo.SplitDepths[0].x + ubo.CascadeFade * 0.5f, ubo.SplitDepths[0].x - ubo.CascadeFade * 0.5f, viewPos.z); - float c1 = smoothstep(ubo.SplitDepths[1].x + ubo.CascadeFade * 0.5f, ubo.SplitDepths[1].x - ubo.CascadeFade * 0.5f, viewPos.z); - float c2 = smoothstep(ubo.SplitDepths[2].x + ubo.CascadeFade * 0.5f, ubo.SplitDepths[2].x - ubo.CascadeFade * 0.5f, viewPos.z); - if (c0 > 0.0 && c0 < 1.0) - { - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[0] * vec4(wsPos, 1.0); - float shadowAmount0 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 0); - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[1] * vec4(wsPos, 1.0); - float shadowAmount1 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 1); - - shadowAmount = mix(shadowAmount0, shadowAmount1, c0); - } - else if (c1 > 0.0 && c1 < 1.0) - { - // Sample 1 & 2 - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[1] * vec4(wsPos, 1.0); - float shadowAmount1 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 1); - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[2] * vec4(wsPos, 1.0); - float shadowAmount2 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 2); - - shadowAmount = mix(shadowAmount1, shadowAmount2, c1); - } - else if (c2 > 0.0 && c2 < 1.0) +#if (FILTER_SHADOWS == 1) + shadowAmount = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, cascadeIndex); +#else + float bias = GetShadowBias(lightDirection, normal, cascadeIndex); + float z = texture(uShadowMap, vec3(shadowCoord.xy, cascadeIndex)).r; + shadowAmount = step(shadowCoord.z - bias, z); +#endif + +#if (BLEND_SHADOW_CASCADES == 1) + float cascadeFade = smoothstep(ubo.SplitDepths[cascadeIndex].x + ubo.CascadeFade, ubo.SplitDepths[cascadeIndex].x, viewPos.z); + int cascadeNext = cascadeIndex + 1; + if (cascadeFade > 0.0 && cascadeNext < ubo.ShadowCount) { - // Sample 2 & 3 - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[2] * vec4(wsPos, 1.0); - float shadowAmount2 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 2); - shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[3] * vec4(wsPos, 1.0); - float shadowAmount3 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, 3); + shadowCoord = ubo.BiasMatrix * ubo.ShadowTransform[cascadeNext] * vec4(wsPos, 1.0); + float shadowAmount1 = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, cascadeNext); - shadowAmount = mix(shadowAmount2, shadowAmount3, c2); + shadowAmount = mix(shadowAmount, shadowAmount1, cascadeFade); } - else - { - shadowAmount = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, cascadeIndex); - } -#else - shadowAmount = PCFShadowDirectionalLight(uShadowMap, shadowCoord, uvRadius, lightDirection, normal, wsPos, cascadeIndex); -#endif + #endif return 1.0 - ((1.0 - shadowAmount) * ShadowFade); } -// Constant normal incidence Fresnel factor for all dielectrics. -const vec3 Fdielectric = vec3(0.04); -// GGX/Towbridge-Reitz normal distribution function. -// Uses Disney's reparametrization of alpha = roughness^2 -float ndfGGX(float cosLh, float roughness) -{ - float alpha = roughness * roughness; - float alphaSq = alpha * alpha; - - float denom = (cosLh * cosLh) * (alphaSq - 1.0) + 1.0; - return alphaSq / (PI * denom * denom); -} +vec3 IsotropicLobe(const Material material, const Light light, const vec3 h, + float NoV, float NoL, float NoH, float LoH) { -// Single term for separable Schlick-GGX below. -float gaSchlickG1(float cosTheta, float k) -{ - return cosTheta / (cosTheta * (1.0 - k) + k); -} + float D = distribution(material.Roughness, NoH, material.Normal, h); + float V = visibility(material.Roughness, NoV, NoL); + vec3 F = fresnel(material.F0, LoH); -// Schlick-GGX approximation of geometric attenuation function using Smith's method. -float gaSchlickGGX(float cosLi, float NdotV, float roughness) -{ - float r = roughness + 1.0; - float k = (r * r) / 8.0; // Epic suggests using this roughness remapping for analytic lights. - return gaSchlickG1(cosLi, k) * gaSchlickG1(NdotV, k); + return (D * V) * F; } -// Shlick's approximation of the Fresnel factor. -vec3 fresnelSchlick(vec3 F0, float cosTheta) +vec3 DiffuseLobe(const Material material, float NoV, float NoL, float LoH) { - return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0); + return material.Albedo.xyz * Diffuse(material.Roughness, NoV, NoL, LoH); } -vec3 fresnelSchlickRoughness(vec3 F0, float cosTheta, float roughness) +vec3 SpecularLobe(const Material material, const Light light, const vec3 h, float NoV, float NoL, float NoH, float LoH) { - return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0); + return IsotropicLobe(material, light, h, NoV, NoL, NoH, LoH); } +#define NEW_LIGHTING 1 + vec3 Lighting(vec3 F0, vec3 wsPos, Material material) { vec3 result = vec3(0.0); @@ -402,8 +374,9 @@ vec3 Lighting(vec3 F0, vec3 wsPos, Material material) // Attenuation float atten = light.radius / (pow(dist, 2.0) + 1.0); - - value = atten; + float attenuation = clamp(1.0 - (dist * dist) / (light.radius * light.radius), 0.0, 1.0); + + value = attenuation; light.direction = vec4(L,1.0); } @@ -419,7 +392,6 @@ vec3 Lighting(vec3 F0, vec3 wsPos, Material material) attenuation *= light.radius / (pow(dist, 2.0) + 1.0);//saturate(1.0f - dist / light.range); //float intensity = attenuation * attenuation; - // Erase light if there is no need to compute it //intensity *= step(theta, cutoffAngle); @@ -428,12 +400,17 @@ vec3 Lighting(vec3 F0, vec3 wsPos, Material material) else { int cascadeIndex = CalculateCascadeIndex(wsPos); - value = CalculateShadow(wsPos,cascadeIndex, light.direction.xyz, material.Normal); + if(ubo.shadowEnabled > 0) + value = CalculateShadow(wsPos,cascadeIndex, light.direction.xyz, material.Normal); + else + value = 1.0; } vec3 Li = light.direction.xyz; vec3 Lradiance = light.colour.xyz * light.intensity; vec3 Lh = normalize(Li + material.View); + + #ifndef NEW_LIGHTING // Calculate angles between surface normal and various light vectors. float cosLi = max(0.0, dot(material.Normal, Li)); @@ -450,8 +427,26 @@ vec3 Lighting(vec3 F0, vec3 wsPos, Material material) // Cook-Torrance vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * material.NDotV); - specularBRDF = clamp(specularBRDF, vec3(0.0f), vec3(10.0f)); - result += (diffuseBRDF + specularBRDF) * Lradiance * cosLi * value * material.AO; + specularBRDF = clamp(specularBRDF, vec3(0.0f), vec3(10.0f));//; + result += (diffuseBRDF + specularBRDF) * Lradiance * cosLi * value * ComputeMicroShadowing(saturate(cosLi), material.AO); + +#else + float lightNoL = saturate(dot(material.Normal, Li)); + vec3 h = normalize(material.View + Li); + + float shading_NoV = clampNoV(dot(material.Normal, material.View)); + float NoV = shading_NoV; + float NoL = saturate(lightNoL); + float NoH = saturate(dot(material.Normal, h)); + float LoH = saturate(dot(Li, h)); + + vec3 Fd = DiffuseLobe(material, NoV, NoL, LoH); + vec3 Fr = SpecularLobe(material, light, h, NoV, NoL, NoH, LoH);; + + vec3 colour = Fd + Fr;// * material.EnergyCompensation; + + result += (colour * Lradiance.rgb) * (value * NoL * ComputeMicroShadowing(NoL, material.AO)); +#endif } return result; } @@ -459,27 +454,41 @@ vec3 Lighting(vec3 F0, vec3 wsPos, Material material) vec3 IBL(vec3 F0, vec3 Lr, Material material) { vec3 irradiance = texture(uIrrMap, material.Normal).rgb; - irradiance = DeGamma(irradiance); vec3 F = fresnelSchlickRoughness(F0, material.NDotV, material.Roughness); vec3 kd = (1.0 - F) * (1.0 - material.Metallic.x); vec3 diffuseIBL = material.Albedo.xyz * irradiance; int u_EnvRadianceTexLevels = ubo.EnvMipCount;// textureQueryLevels(uBRDFLUT); - vec3 specularIrradiance = textureLod(uEnvMap, Lr, material.Roughness * u_EnvRadianceTexLevels).rgb; - - specularIrradiance = DeGamma(specularIrradiance); + vec3 specularIrradiance = textureLod(uEnvMap, Lr, material.PerceptualRoughness * u_EnvRadianceTexLevels).rgb; - vec2 specularBRDF = texture(uBRDFLUT, vec2(material.NDotV, material.Roughness.x)).rg; - vec3 specularIBL = specularIrradiance * (F * specularBRDF.x + specularBRDF.y); + vec3 specularIBL = specularIrradiance * (F * material.dfg.x + material.dfg.y); return kd * diffuseIBL + specularIBL; } -float Attentuate( vec3 lightData, float dist ) +vec3 IBLNew(vec3 F0, vec3 Lr, Material material) { - float att = 1.0 / ( lightData.x + lightData.y*dist + lightData.z*dist*dist ); - float damping = 1.0;// - (dist/lightData.w); - return max(att * damping, 0.0); + // specular layer + vec3 Fr = vec3(0.0); + + vec3 E = mix(material.dfg.xxx, material.dfg.yyy, material.F0); //specularDFG(pixel); + vec3 r = Lr;//getReflectedVector(pixel, material.Normal); + + int u_EnvRadianceTexLevels = ubo.EnvMipCount; + material.Roughness * u_EnvRadianceTexLevels; + vec3 specularIrradiance = textureLod(uEnvMap, Lr, material.PerceptualRoughness * u_EnvRadianceTexLevels).rgb; + //specularIrradiance = DeGamma(specularIrradiance); + + Fr = E * specularIrradiance; + + vec3 irradiance = texture(uIrrMap, material.Normal).rgb; + //irradiance = DeGamma(irradiance); + + //vec3 diffuseIrradiance = diffuseIrradiance(shading_normal); + vec3 Fd = material.Albedo.xyz * irradiance * (1.0 - E);// * diffuseBRDF; + + vec3 color = Fr + Fd; + return color; } void main() @@ -512,29 +521,44 @@ void main() Material material; material.Albedo = texColour; - material.Metallic = vec3(metallic); - material.Roughness = roughness; + material.Metallic = metallic; + material.PerceptualRoughness = roughness; + material.Reflectance = materialProperties.Reflectance; material.Normal = GetNormalFromMap(); material.AO = GetAO(); material.Emissive = GetEmissive(material.Albedo.rgb); - //material.Roughness = max(material.Roughness, 0.06); + + vec2 uv = gl_FragCoord.xy / vec2(ubo.Width, ubo.Height); + float ssao = texture(uSSAOMap, uv).r; + material.Albedo *= ssao; + + material.PerceptualRoughness = clamp(material.PerceptualRoughness, MIN_PERCEPTUAL_ROUGHNESS, 1.0); + material.Roughness = perceptualRoughnessToRoughness(material.Roughness); // Specular anti-aliasing - // { - // const float strength = 1.0f; - // const float maxRoughnessGain = 0.02f; - - // float roughness2 = roughness * roughness; - // vec3 dndu = dFdx(material.Normal), dndv = dFdy(material.Normal); - // float variance = (dot(dndu, dndu) + dot(dndv, dndv)); - // float kernelRoughness2 = min(variance * strength, maxRoughnessGain); - // float filteredRoughness2 = saturate(roughness2 + kernelRoughness2); - // material.Roughness = sqrt(filteredRoughness2); - // } - + { + const float strength = 1.0f; + const float maxRoughnessGain = 0.02f; + float roughness2 = roughness * roughness; + vec3 dndu = dFdx(material.Normal); + vec3 dndv = dFdy(material.Normal); + float variance = (dot(dndu, dndu) + dot(dndv, dndv)); + float kernelRoughness2 = min(variance * strength, maxRoughnessGain); + float filteredRoughness2 = saturate(roughness2 + kernelRoughness2); + material.Roughness = sqrt(filteredRoughness2); + } + vec3 wsPos = VertexOutput.Position.xyz; material.View = normalize(ubo.cameraPosition.xyz - wsPos); - material.NDotV = max(dot(material.Normal, material.View), 0.0); + material.NDotV = max(dot(material.Normal, material.View), 1e-4); + + material.dfg = texture(uBRDFLUT, vec2(material.NDotV, material.PerceptualRoughness)).rg; + float reflectance = computeDielectricF0(material.Reflectance); + //vec3 F0 = mix(Fdielectric, material.Albedo.xyz, material.Metallic.x); + vec3 F0 = computeF0(material.Albedo, material.Metallic.x, reflectance); + material.F0 = F0; + material.EnergyCompensation = 1.0 + material.F0 * (1.0 / max(0.1, material.dfg.y) - 1.0); + material.Albedo.xyz = computeDiffuseColor(material.Albedo, material.Metallic.x); float shadowDistance = ubo.MaxShadowDist; float transitionDistance = ubo.ShadowFade; @@ -546,15 +570,11 @@ void main() ShadowFade /= transitionDistance; ShadowFade = clamp(1.0 - ShadowFade, 0.0, 1.0); - vec3 Lr = 2.0 * material.NDotV * material.Normal - material.View; - // Fresnel reflectance, metals use albedo - vec3 F0 = mix(Fdielectric, material.Albedo.xyz, material.Metallic.x); - - vec3 lightContribution = Lighting(F0, wsPos, material); - vec3 iblContribution = IBL(F0, Lr, material); + vec3 Lr = 2.0 * material.NDotV * material.Normal - material.View; + vec3 lightContribution = Lighting(material.F0, wsPos, material); + vec3 iblContribution = IBL(material.F0, Lr, material); vec3 finalColour = lightContribution + iblContribution + material.Emissive; - outColor = vec4(finalColour, 1.0); if(ubo.Mode > 0) @@ -565,13 +585,13 @@ void main() outColor = material.Albedo; break; case 2: - outColor = vec4(material.Metallic, 1.0); + outColor = vec4(material.Metallic.rrr, 1.0); break; case 3: - outColor = vec4(material.Roughness, material.Roughness, material.Roughness,1.0); + outColor = vec4(material.PerceptualRoughness.xxx,1.0); break; case 4: - outColor = vec4(material.AO, material.AO, material.AO, 1.0); + outColor = vec4(material.AO.xxx, 1.0); break; case 5: outColor = vec4(material.Emissive, 1.0); diff --git a/Lumos/Assets/Shaders/ForwardPBR.vert b/Lumos/Assets/Shaders/ForwardPBR.vert index 9964b325e..481848b9d 100644 --- a/Lumos/Assets/Shaders/ForwardPBR.vert +++ b/Lumos/Assets/Shaders/ForwardPBR.vert @@ -17,6 +17,7 @@ layout(location = 1) in vec4 inColor; layout(location = 2) in vec2 inTexCoord; layout(location = 3) in vec3 inNormal; layout(location = 4) in vec3 inTangent; +layout(location = 5) in vec3 inBitangent; struct VertexData { @@ -24,8 +25,7 @@ struct VertexData vec2 TexCoord; vec4 Position; vec3 Normal; - vec3 Tangent; - vec4 ShadowMapCoords[4]; + mat3 WorldNormal; }; layout(location = 0) out VertexData VertexOutput; @@ -42,6 +42,10 @@ void main() VertexOutput.Colour = inColor.xyz; VertexOutput.TexCoord = inTexCoord; - VertexOutput.Normal = transpose(inverse(mat3(pushConsts.transform))) * normalize(inNormal); - VertexOutput.Tangent = inTangent; + //VertexOutput.Normal = mat3(pushConsts.transform) * inNormal; + mat3 transposeInv = transpose(inverse(mat3(pushConsts.transform))); + VertexOutput.Normal = transposeInv * inNormal; + + VertexOutput.WorldNormal = transposeInv * mat3(inTangent, inBitangent, inNormal); + } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/Grid.vert b/Lumos/Assets/Shaders/Grid.vert index d86a49c40..4d0cc8aaf 100644 --- a/Lumos/Assets/Shaders/Grid.vert +++ b/Lumos/Assets/Shaders/Grid.vert @@ -7,6 +7,7 @@ layout(location = 1) in vec4 inColour; layout(location = 2) in vec2 inTexCoord; layout(location = 3) in vec3 inNormal; layout(location = 4) in vec3 inTangent; +layout(location = 5) in vec3 inBitangent; layout(set = 0,binding = 0) uniform UBO { diff --git a/Lumos/Assets/Shaders/PBR.glslh b/Lumos/Assets/Shaders/PBR.glslh new file mode 100644 index 000000000..e40726e68 --- /dev/null +++ b/Lumos/Assets/Shaders/PBR.glslh @@ -0,0 +1,220 @@ +#include "Common.glslh" + +//From https://github.com/google/filament + +#define MEDIUMP_FLT_MAX 65504.0 +#define saturateMediump(x) min(x, MEDIUMP_FLT_MAX) + +float D_GGX(float roughness, float NoH, const vec3 n, const vec3 h) +{ + vec3 NxH = cross(n, h); + float a = NoH * roughness; + float k = roughness / (dot(NxH, NxH) + a * a); + float d = k * k * (1.0 / PI); + return saturateMediump(d); +} + +float D_GGX(float NoH, float a) +{ + float a2 = a * a; + float f = (NoH * a2 - NoH) * NoH + 1.0; + return a2 / (PI * f * f); +} + +float V_SmithGGXCorrelatedFast(float NoV, float NoL, float roughness) +{ + float a = roughness; + float GGXV = NoL * (NoV * (1.0 - a) + a); + float GGXL = NoV * (NoL * (1.0 - a) + a); + return 0.5 / (GGXV + GGXL); +} + +vec3 F_Schlick(const vec3 f0, float f90, float VoH) { + // Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" + return f0 + (f90 - f0) * pow5(1.0 - VoH); +} + +vec3 F_Schlick(float u, vec3 f0) +{ + return f0 + (vec3(1.0) - f0) * pow(1.0 - u, 5.0); +} + +float F_Schlick(float u, float f0, float f90) { + return f0 + (f90 - f0) * pow(1.0 - u, 5.0); +} + +float Fd_Burley(float roughness, float NoV, float NoL, float LoH) +{ + // Burley 2012, "Physically-Based Shading at Disney" + float f90 = 0.5 + 2.0 * roughness * LoH * LoH; + float lightScatter = F_Schlick(1.0, f90, NoL); + float viewScatter = F_Schlick(1.0, f90, NoV); + return lightScatter * viewScatter * (1.0 / PI); +} + + +float V_SmithGGXCorrelated(float NoV, float NoL, float a) +{ + float a2 = a * a; + float GGXL = NoV * sqrt((-NoL * a2 + NoL) * NoL + a2); + float GGXV = NoL * sqrt((-NoV * a2 + NoV) * NoV + a2); + return 0.5 / (GGXV + GGXL); +} + +float Fd_Lambert() +{ + return 1.0 / PI; +} + + +float ComputeMicroShadowing(float NoL, float visibility) +{ + // Chan 2018, "Material Advances in Call of Duty: WWII" + float aperture = inversesqrt(1.0 - min(visibility, 0.9999)); + float microShadow = saturate(NoL * aperture); + return microShadow * microShadow; +} + +float Diffuse(float roughness, float NoV, float NoL, float LoH) +{ + #if QUALITY_LOW + return Fd_Lambert(); + #else + return Fd_Burley(roughness, NoV, NoL, LoH); + #endif +} + +vec3 ComputeF0(const vec4 baseColor, float metallic, float reflectance) +{ + return baseColor.rgb * metallic + (reflectance * (1.0 - metallic)); +} + +#if QUALITY_LOW + // min roughness such that (MIN_PERCEPTUAL_ROUGHNESS^4) > 0 in fp16 (i.e. 2^(-14/4), rounded up) + #define MIN_PERCEPTUAL_ROUGHNESS 0.089 + #define MIN_ROUGHNESS 0.007921 +#else + #define MIN_PERCEPTUAL_ROUGHNESS 0.045 + #define MIN_ROUGHNESS 0.002025 +#endif + +#define MIN_N_DOT_V 1e-4 + +float clampNoV(float NoV) { + // Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886" + return max(NoV, MIN_N_DOT_V); +} + +vec3 computeDiffuseColor(const vec4 baseColor, float metallic) { + return baseColor.rgb * (1.0 - metallic); +} + +vec3 computeF0(const vec4 baseColor, float metallic, float reflectance) { + return baseColor.rgb * metallic + (reflectance * (1.0 - metallic)); +} + +float computeDielectricF0(float reflectance) { + return 0.16 * reflectance * reflectance; +} + +float computeMetallicFromSpecularColor(const vec3 specularColor) { + return max3(specularColor); +} + +float computeRoughnessFromGlossiness(float glossiness) { + return 1.0 - glossiness; +} + +float perceptualRoughnessToRoughness(float perceptualRoughness) { + return perceptualRoughness * perceptualRoughness; +} + +float roughnessToPerceptualRoughness(float roughness) { + return sqrt(roughness); +} + +float iorToF0(float transmittedIor, float incidentIor) { + return sq((transmittedIor - incidentIor) / (transmittedIor + incidentIor)); +} + +float f0ToIor(float f0) { + float r = sqrt(f0); + return (1.0 + r) / (1.0 - r); +} + +vec3 f0ClearCoatToSurface(const vec3 f0) { + // Approximation of iorTof0(f0ToIor(f0), 1.5) + // This assumes that the clear coat layer has an IOR of 1.5 +#if QUALITY_LOW + return saturate(f0 * (f0 * 0.526868 + 0.529324) - 0.0482256); +#else + return saturate(f0 * (f0 * (0.941892 - 0.263008 * f0) + 0.346479) - 0.0285998); +#endif +} + +//------------------------------------------------------------------------------ +// Specular BRDF dispatch +//------------------------------------------------------------------------------ + +float distribution(float roughness, float NoH, const vec3 h, const vec3 normal) +{ + return D_GGX(roughness, NoH, normal, h); +} + +float visibility(float roughness, float NoV, float NoL) { +#if QUALITY_LOW + return V_SmithGGXCorrelated_Fast(roughness, NoV, NoL); +#else + return V_SmithGGXCorrelated(roughness, NoV, NoL); +#endif +} + +vec3 fresnel(const vec3 f0, float LoH) { +#if QUALITY_LOW + return F_Schlick(f0, LoH); // f90 = 1.0 +#else + float f90 = saturate(dot(f0, vec3(50.0 * 0.33))); + return F_Schlick(f0, f90, LoH); +#endif +} + +//OLD + +// Constant normal incidence Fresnel factor for all dielectrics. +const vec3 Fdielectric = vec3(0.04); + +// GGX/Towbridge-Reitz normal distribution function. +// Uses Disney's reparametrization of alpha = roughness^2 +float ndfGGX(float cosLh, float roughness) +{ + float alpha = roughness * roughness; + float alphaSq = alpha * alpha; + + float denom = (cosLh * cosLh) * (alphaSq - 1.0) + 1.0; + return alphaSq / (PI * denom * denom); +} + +// Single term for separable Schlick-GGX below. +float gaSchlickG1(float cosTheta, float k) +{ + return cosTheta / (cosTheta * (1.0 - k) + k); +} + +// Schlick-GGX approximation of geometric attenuation function using Smith's method. +float gaSchlickGGX(float cosLi, float NdotV, float roughness) +{ + float r = roughness + 1.0; + float k = (r * r) / 8.0; // Epic suggests using this roughness remapping for analytic lights. + return gaSchlickG1(cosLi, k) * gaSchlickG1(NdotV, k); +} + +// Shlick's approximation of the Fresnel factor. +vec3 fresnelSchlick(vec3 F0, float cosTheta) +{ + return F0 + (1.0 - F0) * pow(max(1.0 - cosTheta, 0.0), 5.0); +} + +vec3 fresnelSchlickRoughness(vec3 F0, float cosTheta, float roughness) +{ + return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(max(1.0 - cosTheta, 0.0), 5.0); +} \ No newline at end of file diff --git a/Lumos/Assets/Shaders/SSAO.frag b/Lumos/Assets/Shaders/SSAO.frag index f530e317a..4af5e6fd7 100644 --- a/Lumos/Assets/Shaders/SSAO.frag +++ b/Lumos/Assets/Shaders/SSAO.frag @@ -6,119 +6,112 @@ layout(location = 0) in vec2 outTexCoord; -layout(set = 0, binding = 1) uniform sampler2D DepthTextureSampler; -layout(set = 0, binding = 2) uniform sampler2D NoiseSampler; +layout (set = 0, binding = 1) uniform sampler2D in_Depth; +layout (set = 0, binding = 2) uniform sampler2D in_Normal; +layout (set = 0, binding = 3) uniform sampler2D in_Noise; -layout(location = 0) out vec4 outFrag; +layout(location = 0) out vec4 fragColour; layout(set = 0, binding = 0) uniform UniformBuffer { - mat4 invProj; - float near; - float far; - float p0; - float p1; + mat4 projection; + mat4 invProj; + mat4 view; + // SSAO Gen Data + vec4 samples[64]; + float ssaoRadius; + float near; + float far; + float strength; } ubo; -float readDepth( in vec2 coord ) +float LinearizeDepth(float depth) { - return texture( DepthTextureSampler, coord ).x; - vec2 cameraRange = vec2(0.01, 1000.0); - return (2.0 * cameraRange.x) / (cameraRange.y + cameraRange.x - texture( DepthTextureSampler, coord ).x * (cameraRange.y - cameraRange.x)); + float z = depth * 2.0 - 1.0; // back to NDC + return z;//(2.0 * ubo.near * ubo.far) / (ubo.far + ubo.near - z * (ubo.far - ubo.near)); } - vec3 reconstruct_position(in vec2 uv, in float z, in mat4 inverse_view_projection) + // TODO: Crytek's view frustum ray method +vec3 reconstructVSPosFromDepth(vec2 uv) { - float x = uv.x * 2 - 1; - float y = (1 - uv.y) * 2 - 1; - vec4 position_s = vec4(x, y, z, 1); - vec4 position_v = inverse_view_projection * position_s; - return position_v.xyz / position_v.w; + float depth = texture(in_Depth, uv).r; + depth = LinearizeDepth(depth); // Remap depth from [0, 1] to [-1, 1] + float x = uv.x * 2.0 - 1.0; + float y = (uv.y) * 2.0 - 1.0; + vec4 pos = vec4(x, y, depth, 1.0); + vec4 posVS = ubo.invProj * pos; + return posVS.xyz / posVS.w; } -vec3 normalFromDepth(in float depth, in vec2 texCoords) -{ - const vec2 offset1 = vec2(0.0, 0.001); - const vec2 offset2 = vec2(0.001, 0.0); - - float depth1 = readDepth(texCoords + offset1); - float depth2 = readDepth(texCoords + offset2); - - vec3 p1 = vec3(offset1, depth1 - depth); - vec3 p2 = vec3(offset2, depth2 - depth); - - vec3 normal = cross(p1, p2); - normal.z = -normal.z; +const int MAX_KERNEL_SIZE = 32; +const float INV_MAX_KERNEL_SIZE_F = 1.0/float(MAX_KERNEL_SIZE); +const vec2 HALF_2 = vec2(0.5); + +#define MAX_DISTANCE 1.0 + +void main() +{ + float depth = texture(in_Depth, outTexCoord).r; - return normalize(normal); -} + if (depth < 0.0001f) + { + fragColour = vec4(1.0); + return; + } + vec3 normal = normalize(mat3(ubo.view) * (texture(in_Normal, outTexCoord).xyz * 2.0f - 1.0f)); + vec3 posVS = reconstructVSPosFromDepth(outTexCoord); -vec3 reflection(vec3 v1,vec3 v2) -{ - vec3 result = 2.0 * dot(v2, v1) * v2; - result = v1 - result; - return result; -} + ivec2 depthTexSize = textureSize(in_Depth, 0); + ivec2 noiseTexSize = textureSize(in_Noise, 0); + float renderScale = 0.5; // SSAO is rendered at 0.5x scale + vec2 noiseUV = vec2(float(depthTexSize.x)/float(noiseTexSize.x), float(depthTexSize.y)/float(noiseTexSize.y)) * outTexCoord * renderScale; -const float near = 0.1f; -const float far = 1000.f; -float linearDepth(float depth) -{ - float z = depth * 2.0 - 1.0; - return depth; - return (2.0 * near * far) / (far + near - z * (far - near)); -} + vec3 randomVec = texture(in_Noise, noiseUV).xyz; + vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal)); + vec3 bitangent = cross(tangent, normal); + mat3 TBN = mat3(tangent, bitangent, normal); -void main() -{ - const float total_strength = 1.0; - const float base = 0.2; - - const float area = 0.0075; - const float falloff = 0.000001; - - const float radius = 0.0002; - - const int samples = 16; - vec3 sample_sphere[samples] = { - vec3( 0.5381, 0.1856,-0.4319), vec3( 0.1379, 0.2486, 0.4430), - vec3( 0.3371, 0.5679,-0.0057), vec3(-0.6999,-0.0451,-0.0019), - vec3( 0.0689,-0.1598,-0.8547), vec3( 0.0560, 0.0069,-0.1843), - vec3(-0.0146, 0.1402, 0.0762), vec3( 0.0100,-0.1924,-0.0344), - vec3(-0.3577,-0.5301,-0.4358), vec3(-0.3169, 0.1063, 0.0158), - vec3( 0.0103,-0.5869, 0.0046), vec3(-0.0897,-0.4940, 0.3287), - vec3( 0.7119,-0.0154,-0.0918), vec3(-0.0533, 0.0596,-0.5411), - vec3( 0.0352,-0.0631, 0.5460), vec3(-0.4776, 0.2847,-0.0271) - }; - - float depth = readDepth(outTexCoord); - - vec3 random = normalize( texture(NoiseSampler, outTexCoord * 4.0).rgb ); - vec3 position = reconstruct_position(outTexCoord, depth, ubo.invProj); - + //float bias = 0.001f; + float bias = 0.01f; - //vec3 position = vec3(outTexCoord, depth); - vec3 normal = normalFromDepth(depth, outTexCoord); - normal = clamp(normal, 0.0, 1.0); - - float radius_depth = radius/depth; - float occlusion = 0.0; - for(int i=0; i < samples; i++) - { - vec3 ray = radius_depth * reflection(sample_sphere[i], random); - vec3 hemi_ray = position + sign(dot(ray,normal)) * ray; - - float occ_depth = readDepth(saturate(hemi_ray.xy)); - float difference = depth - occ_depth; - - occlusion += step(falloff, difference) * (1.0-smoothstep(falloff, area, difference)); - } - - float ao = 1.0 - total_strength * occlusion * (1.0 / samples); - float final = clamp(ao + base,0.0,1.0); - vec4 ssao = vec4(final,final,final,1); - - outFrag = vec4(position, 1.0f);//saturate(ao + base).xxxx; + float occlusion = 0.0f; + int sampleCount = 0; + for (uint i = 0; i < MAX_KERNEL_SIZE; i++) + { + vec3 samplePos = TBN * ubo.samples[i].xyz; + samplePos = posVS + samplePos * ubo.ssaoRadius; + + vec4 offset = vec4(samplePos, 1.0f); + offset = ubo.projection * offset; + offset.xy /= offset.w; + offset.xy = offset.xy * 0.5f + HALF_2; + + vec3 sampledNormal = normalize(mat3(ubo.view) * (texture(in_Normal, offset.xy).xyz * 2.0f - 1.0f)); + vec3 reconstructedPos = reconstructVSPosFromDepth(offset.xy); + + if (dot(sampledNormal, normal) > 0.99) + { + ++sampleCount; + } + else + { + //float rangeCheck = smoothstep(0.0f, 1.0f, ubo.ssaoRadius / abs(reconstructedPos.z - samplePos.z - bias)); + //occlusion += (reconstructedPos.z <= samplePos.z - bias ? 1.0f : 0.0f) * rangeCheck; + + vec3 diff = posVS - reconstructedPos; + float l = length(diff); + + float rangeCheck = smoothstep(0.0f, 1.0f, ubo.ssaoRadius / abs(reconstructedPos.z - samplePos.z - bias));//abs(diff.z - bias)); + occlusion += (reconstructedPos.z >= samplePos.z + bias ? 1.0f : 0.0f) * rangeCheck; + //occlusion *= smoothstep(MAX_DISTANCE,MAX_DISTANCE * 0.5, l); + + ++sampleCount; + } + } + occlusion = 1.0f - (occlusion * INV_MAX_KERNEL_SIZE_F) / ubo.strength;// / float(max(sampleCount,1))); + //occlusion = pow(occlusion, 2.0f); + //fragColour = vec4(posVS,1.0); + fragColour = occlusion.xxxx; } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/SSAOBlur.frag b/Lumos/Assets/Shaders/SSAOBlur.frag new file mode 100644 index 000000000..274eb3791 --- /dev/null +++ b/Lumos/Assets/Shaders/SSAOBlur.frag @@ -0,0 +1,39 @@ +#version 450 + +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable + +layout(location = 0) out vec4 fragColour; +layout (location = 0) in vec2 outTexCoord; + +layout (set = 0, binding = 0) uniform UniformBuffer +{ + vec2 ssaoTexelOffset; + int ssaoBlurRadius; + int pad; +} ubo; + +layout (set = 0,binding = 1) uniform sampler2D in_Depth; +layout (set = 0,binding = 2) uniform sampler2D in_SSAO; +layout (set = 0,binding = 3) uniform sampler2D in_Normal; + +void main() +{ + float ourDepth = texture(in_Depth, outTexCoord).r; + vec3 ourNormal = normalize(texture(in_Normal, outTexCoord).rgb * 2.0f - 1.0f); + + int sampleCount = 0; + float sum = 0.0f; + for (int i = -ubo.ssaoBlurRadius; i <= ubo.ssaoBlurRadius; i++) + { + vec2 offset = ubo.ssaoTexelOffset * float(i); + float depth = texture(in_Depth, outTexCoord + offset).r; + vec3 normal = normalize(texture(in_Normal, outTexCoord + offset).rgb * 2.0f - 1.0f); + if (abs(ourDepth - depth) < 0.00002f && dot(ourNormal, normal) > 0.85f) + { + sum += texture(in_SSAO, outTexCoord + offset).r; + ++sampleCount; + } + } + fragColour = clamp(sum / float(sampleCount), 0.0f, 1.0f).xxxx; +} \ No newline at end of file diff --git a/Lumos/Assets/Shaders/SSAOBlur.shader b/Lumos/Assets/Shaders/SSAOBlur.shader new file mode 100644 index 000000000..417846d46 --- /dev/null +++ b/Lumos/Assets/Shaders/SSAOBlur.shader @@ -0,0 +1,7 @@ +#shader vertex +CompiledSPV/ScreenPass.vert.spv +#shader end + +#shader fragment +CompiledSPV/SSAOBlur.frag.spv +#shader end \ No newline at end of file diff --git a/Lumos/Assets/Shaders/ScreenPass.frag b/Lumos/Assets/Shaders/ScreenPass.frag index c6a6a5e21..5c46e8afa 100644 --- a/Lumos/Assets/Shaders/ScreenPass.frag +++ b/Lumos/Assets/Shaders/ScreenPass.frag @@ -7,7 +7,6 @@ layout(location = 0) in vec2 outTexCoord; layout(set = 0, binding = 1) uniform sampler2D u_Texture; layout(location = 0) out vec4 outFrag; - void main() { vec3 colour = texture(u_Texture, outTexCoord).rgb; diff --git a/Lumos/Assets/Shaders/ScreenPass.vert b/Lumos/Assets/Shaders/ScreenPass.vert index 9ed0a21b3..3405b496d 100644 --- a/Lumos/Assets/Shaders/ScreenPass.vert +++ b/Lumos/Assets/Shaders/ScreenPass.vert @@ -12,6 +12,6 @@ out gl_PerVertex void main() { vec2 position = vec2(gl_VertexIndex % 2, gl_VertexIndex / 2) * 4.0 - 1 ; - outTexCoord = (position + 1) * 0.5; + outTexCoord = position * 0.5 + 0.5; gl_Position = vec4(position, 1.0, 1.0); } diff --git a/Lumos/Assets/Shaders/Shadow.vert b/Lumos/Assets/Shaders/Shadow.vert index de50da5d2..23b3a61f1 100644 --- a/Lumos/Assets/Shaders/Shadow.vert +++ b/Lumos/Assets/Shaders/Shadow.vert @@ -26,7 +26,8 @@ layout(location = 1) in vec4 inColor; layout(location = 2) in vec2 inTexCoord; layout(location = 3) in vec3 inNormal; layout(location = 4) in vec3 inTangent; - +layout(location = 5) in vec3 inBitangent; + layout(location = 0) out vec2 uv; void main() @@ -51,5 +52,9 @@ void main() vec3 test = inPosition; //SPV vertex layout incorrect when not used vec4 test2 = inColor; //SPV vertex layout incorrect when not used - uv = inTexCoord; + vec3 test3 = inTangent; //SPV vertex layout incorrect when not used + vec3 test4 = inBitangent; //SPV vertex layout incorrect when not used + vec3 test5 = inNormal; //SPV vertex layout incorrect when not used + + uv = inTexCoord; } \ No newline at end of file diff --git a/Lumos/Assets/Shaders/Sharpen.frag b/Lumos/Assets/Shaders/Sharpen.frag new file mode 100644 index 000000000..e06dc38b4 --- /dev/null +++ b/Lumos/Assets/Shaders/Sharpen.frag @@ -0,0 +1,35 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable + +layout(location = 0) in vec2 outTexCoord; + +layout(set = 0, binding = 1) uniform sampler2D u_Texture; +layout(location = 0) out vec4 outFrag; + + +void main() +{ + float amount = 0.7; + + vec4 colourTex = texture(u_Texture, outTexCoord); + vec2 texSize = textureSize(u_Texture, 0).xy; + + float neighbour = amount * -1.0; + float centre = amount * 4.0 + 1.0; + + vec3 colour = + texture(u_Texture, outTexCoord + vec2( 0, 1) / texSize).rgb + * neighbour + + texture(u_Texture, outTexCoord + vec2(-1, 0) / texSize).rgb + * neighbour + + colourTex.rgb + * centre + + texture(u_Texture, outTexCoord + vec2( 1, 0) / texSize).rgb + * neighbour + + texture(u_Texture, outTexCoord + vec2( 0, -1) / texSize).rgb + * neighbour; + + + outFrag = vec4(colour, colourTex.a); +} \ No newline at end of file diff --git a/Lumos/Assets/Shaders/Sharpen.shader b/Lumos/Assets/Shaders/Sharpen.shader new file mode 100644 index 000000000..cf2106034 --- /dev/null +++ b/Lumos/Assets/Shaders/Sharpen.shader @@ -0,0 +1,7 @@ +#shader vertex +CompiledSPV/ScreenPass.vert.spv +#shader end + +#shader fragment +CompiledSPV/Sharpen.frag.spv +#shader end \ No newline at end of file diff --git a/Lumos/Assets/Shaders/Skybox.frag b/Lumos/Assets/Shaders/Skybox.frag index 0d18dbbbe..d5603ada6 100644 --- a/Lumos/Assets/Shaders/Skybox.frag +++ b/Lumos/Assets/Shaders/Skybox.frag @@ -3,7 +3,7 @@ #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable -layout(location = 0) in vec4 outPosition; +layout(location = 0) in vec3 outPosition; layout(set = 0, binding = 1) uniform samplerCube u_CubeMap; layout(set = 0, binding = 2) uniform UniformBuffer @@ -60,7 +60,7 @@ void main() if(data.Mode == 0) { - colour = DeGamma(textureLod(u_CubeMap, outPosition.xyz, data.BlurLevel).xyz); + colour = textureLod(u_CubeMap, outPosition, data.BlurLevel).xyz; } else { diff --git a/Lumos/Assets/Shaders/Skybox.vert b/Lumos/Assets/Shaders/Skybox.vert index 584751c98..d09749e35 100644 --- a/Lumos/Assets/Shaders/Skybox.vert +++ b/Lumos/Assets/Shaders/Skybox.vert @@ -4,7 +4,8 @@ layout(set = 0,binding = 0) uniform UBO { - mat4 invprojview; + mat4 invProjection; + mat4 invView; } ubo; layout(location = 0) in vec3 inPosition; @@ -12,8 +13,9 @@ layout(location = 1) in vec4 inColor; layout(location = 2) in vec2 inTexCoord; layout(location = 3) in vec3 inNormal; layout(location = 4) in vec3 inTangent; +layout(location = 5) in vec3 inBitangent; -layout(location = 0) out vec4 outPosition; +layout(location = 0) out vec3 outPosition; out gl_PerVertex { @@ -22,8 +24,8 @@ out gl_PerVertex void main() { - vec4 pos = vec4(inPosition,1.0); - pos.z = 1.0f; - gl_Position = pos; - outPosition = ubo.invprojview * pos; + vec4 pos = vec4(inPosition.xy, 1.0 ,1.0); + gl_Position = pos; + + outPosition = mat3(ubo.invView) * vec3(ubo.invProjection * pos); } diff --git a/Lumos/Assets/Shaders/ToneMapping.frag b/Lumos/Assets/Shaders/ToneMapping.frag index be80f49e6..dc24cad01 100755 --- a/Lumos/Assets/Shaders/ToneMapping.frag +++ b/Lumos/Assets/Shaders/ToneMapping.frag @@ -10,14 +10,38 @@ layout(set = 0, binding = 0) uniform UniformBuffer { float BloomIntensity; int ToneMapIndex; + float Saturation; + float Contrast; + float Brightness; float p0; float p1; + float p2; } ubo; layout(set = 0, binding = 1) uniform sampler2D u_Texture; layout(set = 0, binding = 2) uniform sampler2D u_BloomTexture; layout(location = 0) out vec4 outFrag; +mat4 SaturationMatrix( float saturation ) +{ + vec3 luminance = vec3( 0.3086, 0.6094, 0.0820 ); + float oneMinusSat = 1.0 - saturation; + + vec3 red = vec3( luminance.x * oneMinusSat ); + red+= vec3( saturation, 0, 0 ); + + vec3 green = vec3( luminance.y * oneMinusSat ); + green += vec3( 0, saturation, 0 ); + + vec3 blue = vec3( luminance.z * oneMinusSat ); + blue += vec3( 0, 0, saturation ); + + return mat4( red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 ); +} + vec3 UpsampleTent9(sampler2D tex, float lod, vec2 uv, vec2 texelSize, float radius) { vec4 offset = texelSize.xyxy * vec4(1.0f, 1.0f, -1.0f, 0.0f) * radius; @@ -136,7 +160,7 @@ vec3 uncharted2_tonemap_partial(vec3 x) vec3 uncharted2_filmic(vec3 v) { - float exposure_bias = 2.0f; + float exposure_bias = 1.0f; vec3 curr = uncharted2_tonemap_partial(v * exposure_bias); vec3 W = vec3(11.2f); @@ -202,5 +226,9 @@ void main() else if (i == 6) colour = ACESTonemap(colour); colour = Gamma(colour); + + colour.rgb = (colour.rgb - 0.5f) * ubo.Contrast + 0.5f + ubo.Brightness; + colour.rgb = (SaturationMatrix(ubo.Saturation) * vec4(colour, 1.0)).xyz; + outFrag = vec4(colour, 1.0); } \ No newline at end of file diff --git a/Lumos/External/GLFWpremake5.lua b/Lumos/External/GLFWpremake5.lua index 70e07fa21..5f943f178 100644 --- a/Lumos/External/GLFWpremake5.lua +++ b/Lumos/External/GLFWpremake5.lua @@ -63,7 +63,7 @@ project "glfw" "_CRT_SECURE_NO_WARNINGS" } - staticruntime "On" + staticruntime "Off" buildoptions { "/MP" } diff --git a/Lumos/External/ModelLoaders/meshoptimizer/premake5.lua b/Lumos/External/ModelLoaders/meshoptimizer/premake5.lua index 32bf16fde..086b23e63 100644 --- a/Lumos/External/ModelLoaders/meshoptimizer/premake5.lua +++ b/Lumos/External/ModelLoaders/meshoptimizer/premake5.lua @@ -1,6 +1,6 @@ project( "meshoptimizer" ) kind "StaticLib" - staticruntime "On" + staticruntime "Off" files { "src/*.h", "src/*.cpp" } diff --git a/Lumos/External/OpenFBX/ofbx.h b/Lumos/External/OpenFBX/ofbx.h index 80516ca85..af0b10f6c 100644 --- a/Lumos/External/OpenFBX/ofbx.h +++ b/Lumos/External/OpenFBX/ofbx.h @@ -451,8 +451,8 @@ enum UpVector // Vector with origin at the screen pointing toward the camera. enum FrontVector { - FrontVector_ParityEven = 0, - FrontVector_ParityOdd = 1 + FrontVector_ParityEven = 1, + FrontVector_ParityOdd = 2 }; diff --git a/Lumos/External/OpenXR-SDK/.appveyor.yml b/Lumos/External/OpenXR-SDK/.appveyor.yml new file mode 100644 index 000000000..f9bae8e25 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/.appveyor.yml @@ -0,0 +1,53 @@ +# Copyright (c) 2017-2023 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +version: 1.0.27.{build} +image: Visual Studio 2017 + + +environment: + VULKAN_SDK: c:\VulkanSDK\1.1.114.0 + VKSDKURL: https://people.collabora.com/~rpavlik/ci_resources/vksdk-1.1.114.0-lite.7z + VKSDKPKG: c:\VulkanSDK\vksdk-1.1.114.0-lite.7z + matrix: +# 32-bit + - VCVARS: vcvarsamd64_x86 + VCPKG_PLATFORM: x86-windows +# 64-bit + - VCVARS: vcvars64 + VCPKG_PLATFORM: x64-windows + +matrix: + fast_finish: true # finish immediately once one of the jobs fails + +# fetch repository as zip archive +shallow_clone: true # default is "false" + + +cache: + - c:\VulkanSDK\1.1.114.0 +install: + - choco install -y ninja + # - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + # Download and extract a stripped-down Vulkan SDK if not cached - the "Start-Process" is to not continue until extraction is done + - ps: >- + if (-not (Test-Path "$env:VULKAN_SDK/Include/vulkan/vulkan.h")) { + mkdir c:\VulkanSDK + $wc = New-Object System.Net.WebClient + $wc.DownloadFile($env:VKSDKURL, $env:VKSDKPKG) + Start-Process "c:\Program Files\7-Zip\7z" -ArgumentList "x", $env:VKSDKPKG, "-oC:\VulkanSDK" -Wait + } + +# for future use if we need vcpkg +# -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake + +build_script: +- cmd: >- + call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\%VCVARS%.bat" && + cmake -GNinja -Bbuild -H. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPYTHON_EXECUTABLE=C:/Python37-x64/python.exe -DBUILD_ALL_EXTENSIONS=ON && + ninja -C build +- cmd: >- + call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\%VCVARS%.bat" && + cmake -GNinja -Bbuild -H. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDYNAMIC_LOADER=ON -DPYTHON_EXECUTABLE=C:/Python37-x64/python.exe -DBUILD_ALL_EXTENSIONS=ON && + ninja -C build diff --git a/Lumos/External/OpenXR-SDK/.editorconfig b/Lumos/External/OpenXR-SDK/.editorconfig new file mode 100644 index 000000000..0220ac21a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/.editorconfig @@ -0,0 +1,33 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = true + +[*.xml,*.rnc] +trim_trailing_whitespace = true + +[*.xml] +indent_style = space +trim_trailing_whitespace = true +indent_size = 4 + +[*.cmake,CMakeLists.txt] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.sh] +trim_trailing_whitespace = true +end_of_line = lf + +[*.adoc] +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 diff --git a/Lumos/External/OpenXR-SDK/.git-blame-ignore-revs b/Lumos/External/OpenXR-SDK/.git-blame-ignore-revs new file mode 100644 index 000000000..5519b09d8 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/.git-blame-ignore-revs @@ -0,0 +1,63 @@ +# Copyright 2021-2023, The Khronos Group Inc. Inc. +# +# SPDX-License-Identifier: CC-BY-4.0 + +# This file contains the commit IDs (on all OpenXR repos!) +# of "bulk" commits that should be excluded from blame, etc. to +# make it more useful. +# When adding new bulk changes, please follow the existing style, +# and do try to make sure that the bulk change is made +# **separate from a release commit** on all repos. +# See +# for how to use this. + + +## 1.0.17 - Fix XML indentation + +# Khronos GitLab +ae6fe8a4f2cfc3e5e0bb7da3de4d9067e861b5a3 + +# OpenXR-Docs +e8ddebd3c7ff6978e84c73e49c41c36ce4a01464 + +# OpenXR-SDK-Source +cc8e70f69de3ec536d5bd7cdebcd6e30d36dfcae + +# OpenXR-CTS +e28085d027d0e3b215858906b1ad7d98fb0483ff + + +## 1.0.17 - Sort return codes + +# Khronos GitLab +755ac4d86eb33340289fc0765391c31ce17959fc + +# OpenXR-Docs +bd1f05a6f5da8662c6969996177063a5a98bf0ea + +# OpenXR-SDK-Source +114c3a2829f51eb0e2508a99f98b2e14760ba2c2 + +# OpenXR-CTS +1224c0ba88b6f000a5f00f56c0dbb8265a6c6350 + + +## 1.0.27 - Bulk-apply PrettyRegistryXML + +# Khronos GitLab (commit also includes adding an extension) +ff2037bc6aa951610f4e21d133056d3f547d2374 + +# Khronos GitLab (finishing formatting) +4bb0766ec6d7101b17b0bc02ba04c86c4159bd16 + +# OpenXR-Docs +09b6b4bae7d691e1406ee6951e5ab8ed4e620ff3 + +# OpenXR-SDK-Source +2c1b77dcdc6ace701e4b08477e5fae5312a866b4 + +# OpenXR-CTS +e774b36cfc7bfc721e97de6c8435fcb14866e6fa + +# OpenXR-SDK +db11d03216666f2b574da46a39c4b565dbe90124 diff --git a/Lumos/External/OpenXR-SDK/.gitattributes b/Lumos/External/OpenXR-SDK/.gitattributes new file mode 100644 index 000000000..892b854b9 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/.gitattributes @@ -0,0 +1,36 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +* text=auto + +*.txt text +*.c text +*.cpp text +*.h text +*.hpp text +*.inl text +*.adoc text +*.in text +*.json text + +*.bat eol=crlf +*.cmd eol=crlf +*.vcproj eol=crlf +*.vcxproj eol=crlf +*.sln eol=crlf + +*.sh eol=lf + +*.png binary +*.pdf binary + +# Shell/python scripts that don't end in .sh +specification/makeAllExts eol=lf +specification/makeExt eol=lf +specification/makeKHR eol=lf +specification/makeKHRAndKHX eol=lf +specification/makeReleaseArtifacts eol=lf +specification/makeSpec eol=lf +specification/checkMarkup eol=lf +specification/checkSpecLinks eol=lf diff --git a/Lumos/External/OpenXR-SDK/.gitignore b/Lumos/External/OpenXR-SDK/.gitignore new file mode 100644 index 000000000..03c1a0d79 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/.gitignore @@ -0,0 +1,77 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +/build/ +build*/ +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +*/CMakeFiles +*.orig +.* +*~ +*.tar +*.tar.gz +*.log +pregen/ +generated-includes +cmake_install.cmake +cmake_uninstall.cmake + +# Marker file for a snapshot build +SNAPSHOT + +# Cached python scripts in bytecode form +*.pyc +applyfixes.sh + +# Files related to building examples +specification/**/*.c +specification/**/*.cpp +specification/**/*.o +specification/examples.mk + +# Files related to pytest +specification/scripts/.cache + +# VS 2019 CMake artifacts +out/build/ + +# VS misc +*.sln +*.pyproj +*.vcxproj +*.vcxproj.filters +CMakeSettings.json +CppProperties.json + +# Gradle +.cxx/ +.gradle/ +local.properties + +# Don't ignore these things +!.*.license +!.appveyor.yml +!.azure-pipelines/ +!.azure-pipelines/nuget/NugetTemplate/build +!.clang-format +!.clang-tidy +!.cmake-format.json +!.editorconfig +!.git-blame-ignore-revs +!.git-keep +!.gitattributes +!.github +!.gitignore +!.gitlab +!.gitlab-ci.yml +!.mailmap +!.markdownlint.yaml +!.proclamation.json +!.reuse + +# Output artifact +*.aar +*.pom diff --git a/Lumos/External/OpenXR-SDK/CHANGELOG.SDK.md b/Lumos/External/OpenXR-SDK/CHANGELOG.SDK.md new file mode 100644 index 000000000..6f31c2ffd --- /dev/null +++ b/Lumos/External/OpenXR-SDK/CHANGELOG.SDK.md @@ -0,0 +1,1768 @@ +# Changelog for OpenXR-SDK-Source and OpenXR-SDK Repo + + + +Update log for the OpenXR-SDK-Source and OpenXR-SDK repo on GitHub. Updates are +in reverse chronological order starting with the latest public release. + +Note that only changes relating to the loader and some of the build changes will +affect the OpenXR-SDK repository. + +This summarizes the periodic public updates, not individual commits. Updates +on GitHub are generally done as single large patches at the release point, +collecting together the resolution of many Khronos internal issues, +along with any public pull requests that have been accepted. +In this repository in particular, since it is primarily software, +pull requests may be integrated as they are accepted even between periodic updates. + +## OpenXR SDK 1.0.27 (2023-03-21) + +This release contains a large list of improvements, including interaction +profile definitions in machine-readable format in the XML, consistent tool-based +formatting of the XML, a new `list_json` tool to ease updates to +[OpenXR-Inventory][], and a wide variety of new vendor and multi-vendor +extensions, in addition to a collection of smaller improvements. + +[OpenXR-Inventory]: https://github.com/KhronosGroup/OpenXR-Inventory + +- Registry + - Add interaction profile definitions to `xr.xml` + ([internal MR 2485](https://gitlab.khronos.org/openxr/openxr/merge_requests/2485)) + - Chore: Format the full XML API registry with + [PrettyRegistryXML](https://github.com/rpavlik/PrettyRegistryXml), making some + small changes by hand to clean up. + ([internal MR 2540](https://gitlab.khronos.org/openxr/openxr/merge_requests/2540), + [internal MR 2329](https://gitlab.khronos.org/openxr/openxr/merge_requests/2329), + [OpenXR-SDK-Source PR 373](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/373), + [OpenXR-Docs PR 14](https://github.com/KhronosGroup/OpenXR-Docs/pull/14), + [OpenXR-CTS PR 50](https://github.com/KhronosGroup/OpenXR-CTS/pull/50), + [OpenXR-SDK PR 12](https://github.com/KhronosGroup/OpenXR-SDK/pull/12)) + - Document how to generate a standalone header file for an extension. + ([internal MR 2627](https://gitlab.khronos.org/openxr/openxr/merge_requests/2627)) + - Extension reservation: Register author ID and reserve vendor extensions for + Logitech. + ([internal MR 2504](https://gitlab.khronos.org/openxr/openxr/merge_requests/2504)) + - Extension reservation: Reserve an extension number for a multi-vendor + extension. + ([internal MR 2520](https://gitlab.khronos.org/openxr/openxr/merge_requests/2520)) + - Extension reservation: Reserve an extension for `XR_EXT_hand_tracking_usage` + ([internal MR 2550](https://gitlab.khronos.org/openxr/openxr/merge_requests/2550)) + - Extension reservation: Reserve extension id 430 for `XR_EXT_plane_detection` + ([internal MR 2565](https://gitlab.khronos.org/openxr/openxr/merge_requests/2565)) + - Extension reservation: Reserve vendor extensions for Monado. + ([internal MR 2613](https://gitlab.khronos.org/openxr/openxr/merge_requests/2613)) + - Extension reservation: Reserve vendor extensions for ACER. + ([OpenXR-Docs PR 142](https://github.com/KhronosGroup/OpenXR-Docs/pull/142)) + - Extension reservation: Reserve a vendor extension for OPPO. + ([OpenXR-Docs PR 145](https://github.com/KhronosGroup/OpenXR-Docs/pull/145)) + - New vendor extension: `XR_FB_composition_layer_depth_test` + ([internal MR 2208](https://gitlab.khronos.org/openxr/openxr/merge_requests/2208), + [internal issue 1657](https://gitlab.khronos.org/openxr/openxr/issues/1657)) + - New vendor extension: `XR_META_foveation_eye_tracked` + ([internal MR 2239](https://gitlab.khronos.org/openxr/openxr/merge_requests/2239), + [internal MR 2273](https://gitlab.khronos.org/openxr/openxr/merge_requests/2273), + [internal MR 2332](https://gitlab.khronos.org/openxr/openxr/merge_requests/2332)) + - New vendor extension: `XR_QCOM_tracking_optimization_settings` + ([internal MR 2261](https://gitlab.khronos.org/openxr/openxr/merge_requests/2261), + [internal issue 1703](https://gitlab.khronos.org/openxr/openxr/issues/1703)) + - New vendor extension: `XR_META_local_dimming` + ([internal MR 2267](https://gitlab.khronos.org/openxr/openxr/merge_requests/2267), + [internal MR 2595](https://gitlab.khronos.org/openxr/openxr/merge_requests/2595)) + - New vendor extension: `XR_FB_spatial_entity_sharing` + ([internal MR 2274](https://gitlab.khronos.org/openxr/openxr/merge_requests/2274)) + - New vendor extension: `XR_FB_scene_capture` + ([internal MR 2286](https://gitlab.khronos.org/openxr/openxr/merge_requests/2286)) + - New vendor extension: `XR_FB_spatial_entity_storage_batch` + ([internal MR 2312](https://gitlab.khronos.org/openxr/openxr/merge_requests/2312)) + - New vendor extension: `XR_FB_haptic_amplitude_envelope` + ([internal MR 2326](https://gitlab.khronos.org/openxr/openxr/merge_requests/2326)) + - New vendor extension: `XR_FB_touch_controller_pro` + ([internal MR 2327](https://gitlab.khronos.org/openxr/openxr/merge_requests/2327), + [internal issue 1916](https://gitlab.khronos.org/openxr/openxr/issues/1916)) + - New vendor extension: `XR_FB_haptic_pcm` + ([internal MR 2329](https://gitlab.khronos.org/openxr/openxr/merge_requests/2329)) + - New vendor extension: `FB_face_tracking` + ([internal MR 2334](https://gitlab.khronos.org/openxr/openxr/merge_requests/2334), + [internal MR 2539](https://gitlab.khronos.org/openxr/openxr/merge_requests/2539)) + - New vendor extension: `XR_FB_eye_tracking_social` + ([internal MR 2336](https://gitlab.khronos.org/openxr/openxr/merge_requests/2336), + [internal MR 2576](https://gitlab.khronos.org/openxr/openxr/merge_requests/2576)) + - New vendor extension: `XR_FB_body_tracking` + ([internal MR 2339](https://gitlab.khronos.org/openxr/openxr/merge_requests/2339), + [internal MR 2575](https://gitlab.khronos.org/openxr/openxr/merge_requests/2575)) + - New vendor extension: `XR_OCULUS_external_camera` + ([internal MR 2397](https://gitlab.khronos.org/openxr/openxr/merge_requests/2397), + [internal MR 2344](https://gitlab.khronos.org/openxr/openxr/merge_requests/2344)) + - New vendor extension: `XR_FB_spatial_entity_user` + ([internal MR 2407](https://gitlab.khronos.org/openxr/openxr/merge_requests/2407)) + - New vendor extension: `XR_FB_touch_controller_proximity` + ([internal MR 2412](https://gitlab.khronos.org/openxr/openxr/merge_requests/2412)) + - New vendor extension: `XR_ML_global_dimmer` + ([internal MR 2461](https://gitlab.khronos.org/openxr/openxr/merge_requests/2461)) + - New vendor extension: `XR_ML_frame_end_info` + ([internal MR 2462](https://gitlab.khronos.org/openxr/openxr/merge_requests/2462), + [internal MR 2536](https://gitlab.khronos.org/openxr/openxr/merge_requests/2536)) + - New vendor extension: `XR_ML_compat` + ([internal MR 2473](https://gitlab.khronos.org/openxr/openxr/merge_requests/2473)) + - New vendor extension: `XR_EXT_local_floor` + ([internal MR 2503](https://gitlab.khronos.org/openxr/openxr/merge_requests/2503), + [internal issue 746](https://gitlab.khronos.org/openxr/openxr/issues/746), + [internal issue 1606](https://gitlab.khronos.org/openxr/openxr/issues/1606), + [OpenXR-Docs issue 103](https://github.com/KhronosGroup/OpenXR-Docs/issues/103)) + - New vendor extension: `XR_BD_controller_interaction` + ([internal MR 2527](https://gitlab.khronos.org/openxr/openxr/merge_requests/2527)) + - New vendor extension: `XR_MNDX_force_feedback_curl` + ([OpenXR-Docs PR 136](https://github.com/KhronosGroup/OpenXR-Docs/pull/136)) + - Register author ID for Matthieu Bucchianeri. + ([OpenXR-Docs PR 143](https://github.com/KhronosGroup/OpenXR-Docs/pull/143)) + - Rename tag name to a short one for ByteDance. + ([internal MR 2502](https://gitlab.khronos.org/openxr/openxr/merge_requests/2502)) + - Schema: Add initial tests for Schematron rules. + ([internal MR 2512](https://gitlab.khronos.org/openxr/openxr/merge_requests/2512)) + - Schema: Add author ID schematron checks and change duplicate name/number report + to an assert + ([internal MR 2514](https://gitlab.khronos.org/openxr/openxr/merge_requests/2514)) + - Schema: Fix Relax-NG checks of naming convention, and add naming convention + checks to Schematron. + ([internal MR 2538](https://gitlab.khronos.org/openxr/openxr/merge_requests/2538)) + - Schematron: Update extension naming rule to allow for vendor tags to be + followed by an X for experimental and a version number + ([internal MR 2518](https://gitlab.khronos.org/openxr/openxr/merge_requests/2518)) + - scripts: Let `deprecated` override `provisional` when choosing extension table + of contents section. + ([internal MR 2547](https://gitlab.khronos.org/openxr/openxr/merge_requests/2547)) + - scripts: Fix leftover exclusion of `extensions/meta` from `checkMarkup` now + that it no longer generated files. + ([internal MR 2560](https://gitlab.khronos.org/openxr/openxr/merge_requests/2560)) +- SDK + - Experimental Extension Naming: Allow vendor tags to be followed by an "X" for + experimental and an optional version number (e.g. XR_EXTX2_hand_tracking). + Update source generator vendor checks accordingly + ([internal MR 2518](https://gitlab.khronos.org/openxr/openxr/merge_requests/2518)) + - Fix typo in API Dump generation script + ([internal MR 2608](https://gitlab.khronos.org/openxr/openxr/merge_requests/2608)) + - Loader: Fix dynamic build on MinGW. + ([OpenXR-SDK-Source PR 362](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/362), + [OpenXR-SDK-Source issue 367](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/367)) + - Loader and layers: In debug builds, log when non-empty environment variables + are being ignored due to executing with elevated privilege. + ([OpenXR-SDK-Source PR 336](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/336)) + - Loader doc: Minor cleanups to API layer section. + ([internal MR 2581](https://gitlab.khronos.org/openxr/openxr/merge_requests/2581)) + - Loader doc: Fix incorrect markup/dead links. + ([internal MR 2598](https://gitlab.khronos.org/openxr/openxr/merge_requests/2598)) + - Remove third-party dependencies in `external/include/utils`. + ([internal MR 2528](https://gitlab.khronos.org/openxr/openxr/merge_requests/2528)) + - Update all XrStructureType initialization to use standard OpenXR style. + ([internal MR 2557](https://gitlab.khronos.org/openxr/openxr/merge_requests/2557)) + - Update URLs with branch names in manpages. + ([internal MR 2648](https://gitlab.khronos.org/openxr/openxr/merge_requests/2648)) + - Validation layer: Fix function signature for xrNegotiateLoaderApiLayerInterface + in core validation api layer + ([internal MR 2607](https://gitlab.khronos.org/openxr/openxr/merge_requests/2607), + [OpenXR-SDK-Source issue 378](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/378), + [internal issue 1929](https://gitlab.khronos.org/openxr/openxr/issues/1929)) + - clang-format: Add clang-format-15 as acceptable clang formats + ([OpenXR-SDK-Source PR 359](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/359)) + - doc: Add VS 2022 version code to BUILDING.md + ([OpenXR-SDK-Source PR 381](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/381)) + - headers: Remove spurious space in preprocessor conditional, that was causing + `defined` to be treated as an operator. + ([internal MR 2491](https://gitlab.khronos.org/openxr/openxr/merge_requests/2491)) + - hello_xr: Correct domain in Android package identifier. + ([internal MR 2513](https://gitlab.khronos.org/openxr/openxr/merge_requests/2513)) + - hello_xr: Update Vulkan plugin to use the newer `VK_EXT_debug_utils` extension, + and provide names for most Vulkan objects used by the app to aid in debugging. + (Utility code shared with CTS.) + ([internal MR 2524](https://gitlab.khronos.org/openxr/openxr/merge_requests/2524), + [internal MR 2579](https://gitlab.khronos.org/openxr/openxr/merge_requests/2579), + [internal MR 2637](https://gitlab.khronos.org/openxr/openxr/merge_requests/2637)) + - hello_xr: Zero initialize XrSwapchainImage* structs + ([internal MR 2551](https://gitlab.khronos.org/openxr/openxr/merge_requests/2551)) + - hello_xr: Export built-in NativeActivity + ([OpenXR-SDK-Source PR 358](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/358)) + - hello_xr: Use correct lost event count + ([OpenXR-SDK-Source PR 359](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/359)) + - loader: Prefer cstdio and cstdlib for c++ files + ([OpenXR-SDK-Source PR 357](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/357)) + - loader,api_layers: Fix finding wayland-client.h on linux + ([OpenXR-SDK-Source PR 346](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/346)) + - sdk-source: Add `list_json`, a small app to print json similar to the schema + used by [OpenXR-Inventory](https://github.com/KhronosGroup/OpenXR-Inventory). + ([internal MR 2541](https://gitlab.khronos.org/openxr/openxr/merge_requests/2541), + [internal MR 2658](https://gitlab.khronos.org/openxr/openxr/merge_requests/2658)) + - xr_linear.h: Add some extra linear algebra functions + ([internal MR 2532](https://gitlab.khronos.org/openxr/openxr/merge_requests/2532)) + +## OpenXR SDK 1.0.26 (2022-11-18) + +This release contains new reflection headers, fixes and improvements to the +loader and hello_xr (especially on Android), some spec clarifications, +improvements to tooling, and a variety of new vendor and multi-vendor +extensions. + +- Registry + - Add new `XR_EXT_active_action_set_priority` vendor extension. + ([internal MR 2288](https://gitlab.khronos.org/openxr/openxr/merge_requests/2288), + [internal issue 1699](https://gitlab.khronos.org/openxr/openxr/issues/1699)) + - Add new `XR_HTC_passthrough` vendor extension. + ([internal MR 2349](https://gitlab.khronos.org/openxr/openxr/merge_requests/2349)) + - Add new `XR_HTC_foveation` vendor extension. + ([internal MR 2377](https://gitlab.khronos.org/openxr/openxr/merge_requests/2377)) + - Add a warning to `XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT` saying + that it is not in use and planned for deprecation + ([internal MR 2378](https://gitlab.khronos.org/openxr/openxr/merge_requests/2378), + [internal issue 1751](https://gitlab.khronos.org/openxr/openxr/issues/1751)) + - Add new `XR_META_headset_id` vendor extension. + ([internal MR 2410](https://gitlab.khronos.org/openxr/openxr/merge_requests/2410)) + - Improve Schematron rules for the registry XML and update the tool version used. + ([internal MR 2418](https://gitlab.khronos.org/openxr/openxr/merge_requests/2418), + [internal MR 2426](https://gitlab.khronos.org/openxr/openxr/merge_requests/2426), + [internal MR 2457](https://gitlab.khronos.org/openxr/openxr/merge_requests/2457), + [internal MR 2460](https://gitlab.khronos.org/openxr/openxr/merge_requests/2460), + [internal MR 2465](https://gitlab.khronos.org/openxr/openxr/merge_requests/2465)) + - Register author ID and reserve vendor extensions for ByteDance. + ([internal MR 2482](https://gitlab.khronos.org/openxr/openxr/merge_requests/2482), + [OpenXR-Docs PR 137](https://github.com/KhronosGroup/OpenXR-Docs/pull/137)) + - Register author ID for danwillm and reserve vendor extensions. + ([OpenXR-Docs PR 138](https://github.com/KhronosGroup/OpenXR-Docs/pull/138)) + - Reserve vendor extensions for Microsoft. + ([internal MR 2478](https://gitlab.khronos.org/openxr/openxr/merge_requests/2478)) + - `XR_EXTX_overlay`: Fix XML markup to correct generated valid usage for the + event structure. + ([internal MR 2307](https://gitlab.khronos.org/openxr/openxr/merge_requests/2307)) + - `XR_EXT_performance_settings`: Fix XML markup to correct generated valid usage, + bump revision. + ([internal MR 2306](https://gitlab.khronos.org/openxr/openxr/merge_requests/2306)) + - `XR_HTCX_vive_tracker_interaction`: Fix XML markup to correct generated valid + usage for the event structure. + ([internal MR 2310](https://gitlab.khronos.org/openxr/openxr/merge_requests/2310)) + - `XR_HTC_facial_tracking`: Update vendor extension to version 2. + ([internal MR 2416](https://gitlab.khronos.org/openxr/openxr/merge_requests/2416)) + - specification/scripts: Added new functionality in codegen scripts to support + creating single extension headers. Usage: `python3 scripts/genxr.py -registry + registry/xr.xml -standaloneExtension XR_FB_color_space standalone_header` + ([internal MR 2417](https://gitlab.khronos.org/openxr/openxr/merge_requests/2417)) +- SDK + - In-line comments added to `openxr_reflection.h` + ([internal MR 2357](https://gitlab.khronos.org/openxr/openxr/merge_requests/2357)) + - New `openxr_reflection_structs.h` and `openxr_reflection_parent_structs.h` + reflection headers, containing additional, limited reflection expansion macro + definitions. + ([internal MR 2357](https://gitlab.khronos.org/openxr/openxr/merge_requests/2357)) + - loader: Add missing `RegCloseKey` call. + ([internal MR 2433](https://gitlab.khronos.org/openxr/openxr/merge_requests/2433)) + - loader: Report STL usage as "none" in script-built Android AAR because we + expose no C++ symbols. + ([OpenXR-SDK-Source PR 332](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/332), + [internal issue 1829](https://gitlab.khronos.org/openxr/openxr/issues/1829), + [internal issue 1831](https://gitlab.khronos.org/openxr/openxr/issues/1831)) + - loader: Minor changes to fix a missing-prototypes warning/error. + ([OpenXR-SDK-Source PR 345](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/345)) + - hello_xr: Correctly handle the case of 0 items returned in the Vulkan plugin. + ([internal MR 2363](https://gitlab.khronos.org/openxr/openxr/merge_requests/2363)) + - hello_xr: Android exit should use `ANativeActivity_finish`. + ([internal MR 2409](https://gitlab.khronos.org/openxr/openxr/merge_requests/2409), + [OpenXR-SDK-Source issue 329](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/329), + [internal issue 1820](https://gitlab.khronos.org/openxr/openxr/issues/1820)) + - hello_xr: Simplify platform plugin for POSIX platforms. + ([internal MR 2443](https://gitlab.khronos.org/openxr/openxr/merge_requests/2443), + [internal MR 2436](https://gitlab.khronos.org/openxr/openxr/merge_requests/2436)) + - hello_xr: Minor tidy up of initialization code. + ([internal MR 2449](https://gitlab.khronos.org/openxr/openxr/merge_requests/2449)) + - hello_xr: Add `android.permission.VIBRATE` permission needed by some runtimes + for the controller haptics. + ([internal MR 2486](https://gitlab.khronos.org/openxr/openxr/merge_requests/2486)) + - hello_xr: Bump Android Gradle Plugin usage to 7.0.4 to fix building of hello_xr + on M1 device + ([OpenXR-SDK-Source PR 334](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/334)) + - cmake: Use standard `CMAKE_INSTALL_INCLUDEDIR` to specify included directories. + ([OpenXR-SDK-Source PR 347](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/347)) + - Android: Remove Gradle build files from loader directory: they were unused + because the Android Gradle Plugin could not build our AAR file correctly as + desired. + ([internal MR 2453](https://gitlab.khronos.org/openxr/openxr/merge_requests/2453)) + - Android: Upgrade to gradle version 7. + ([internal MR 2474](https://gitlab.khronos.org/openxr/openxr/merge_requests/2474)) + - Enable dependabot for GitHub Actions. + ([OpenXR-SDK-Source PR 351](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/351), + [OpenXR-SDK-Source PR 352](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/352), + [OpenXR-SDK-Source PR 256](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/256)) + - Fix CI generation of NuGet packages. + ([OpenXR-SDK-Source PR 350](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/350)) + - Improve GitHub CI for OpenXR-SDK-Source. + ([OpenXR-SDK-Source PR 351](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/351), + [OpenXR-SDK-Source PR 352](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/352), + [OpenXR-SDK-Source PR 256](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/256)) + +## OpenXR SDK 1.0.25 (2022-09-02) + +This release contains a few specification clarifications and consistency +improvements, as well as some new vendor extensions. The OpenXR loader for +Android now supports API layers packaged in the application APK, which is +important for running the conformance tests, and which may also be used for +running with the validation layer enabled during application development, for +example. The loader design doc has been updated accordingly. The spec generation +toolchain scripts have been synchronized with Vulkan. Hello_XR now models the +recommended approach for selecting an environment blend mode, among other fixes. + +- Registry + - Add new `XR_ML_ml2_controller_interaction` vendor extension. + ([internal MR 2344](https://gitlab.khronos.org/openxr/openxr/merge_requests/2344)) + - Clarification: Note that all specialized swapchain image structures are + "returnedonly", which removes some unneeded generated implicit valid usage. + ([internal MR 2303](https://gitlab.khronos.org/openxr/openxr/merge_requests/2303)) + - Clarification: Note that all event structs are "returnedonly", which removes + some unneeded generated implicit valid usage. + ([internal MR 2305](https://gitlab.khronos.org/openxr/openxr/merge_requests/2305)) + - Register author ID for Oppo. + ([OpenXR-Docs PR 129](https://github.com/KhronosGroup/OpenXR-Docs/pull/129)) + - Register author ID for Fred Emmott. + ([OpenXR-Docs PR 131](https://github.com/KhronosGroup/OpenXR-Docs/pull/131)) + - Register author ID for Acer. + ([OpenXR-Docs PR 132](https://github.com/KhronosGroup/OpenXR-Docs/pull/132)) + - Reserve extension numbers for anticipated cross-vendor and Khronos extensions. + ([internal MR 2337](https://gitlab.khronos.org/openxr/openxr/merge_requests/2337), + [internal MR 2338](https://gitlab.khronos.org/openxr/openxr/merge_requests/2338), + [internal MR 2389](https://gitlab.khronos.org/openxr/openxr/merge_requests/2389)) + - Reserve a vendor extension for Huawei. + ([internal MR 2356](https://gitlab.khronos.org/openxr/openxr/merge_requests/2356)) + - Reserve vendor extensions for MNDX. + ([OpenXR-Docs PR 133](https://github.com/KhronosGroup/OpenXR-Docs/pull/133)) + - Update `XR_MSFT_scene_understanding` and + `XR_MSFT_scene_understanding_serialization` vendor extensions to list error + codes that may be returned by functions. + ([internal MR 2316](https://gitlab.khronos.org/openxr/openxr/merge_requests/2316)) + - `XR_FB_color_space`: Mark `XrSystemColorSpacePropertiesFB` as "returned-only" + for consistency and to correct the implicit valid usage. + ([internal MR 2304](https://gitlab.khronos.org/openxr/openxr/merge_requests/2304)) + - `XR_FB_display_refresh_rate`: Mark `XrEventDataDisplayRefreshRateChangedFB` as + "returned only" for consistency. + ([internal MR 2308](https://gitlab.khronos.org/openxr/openxr/merge_requests/2308)) + - `XR_FB_hand_tracking_mesh`: Fix two-call-idiom markup for + `XrHandTrackingMeshFB`, affecting implicit valid usage, and increment the + revision. + ([internal MR 2311](https://gitlab.khronos.org/openxr/openxr/merge_requests/2311)) + - `XR_FB_passthrough`: Add `XrSystemPassthroughProperties2FB` and + `XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB`, update spec version to 3. + ([internal MR 2333](https://gitlab.khronos.org/openxr/openxr/merge_requests/2333)) + - `XR_FB_render_model`: Mark `XrRenderModelCapabilitiesRequestFB` as "returned- + only" for consistency and to correct the implicit valid usage. + ([internal MR 2309](https://gitlab.khronos.org/openxr/openxr/merge_requests/2309)) +- SDK + - Loader design doc: Correct a wrong description of extension implementation + chosen by the loader when duplicates. + ([internal MR 2324](https://gitlab.khronos.org/openxr/openxr/merge_requests/2324), + [internal issue 1731](https://gitlab.khronos.org/openxr/openxr/issues/1731)) + - hello_xr: Model the recommended behavior of choosing first blend mode + enumerated by xrEnumerateEnvironmentBlendModes that is supported by the app. + ([internal MR 2352](https://gitlab.khronos.org/openxr/openxr/merge_requests/2352)) + - hello_xr: Fix exit on Android. + ([internal MR 2403](https://gitlab.khronos.org/openxr/openxr/merge_requests/2403)) + - loader: Add Android support for API Layers bundled in the application APK. + ([internal MR 2350](https://gitlab.khronos.org/openxr/openxr/merge_requests/2350)) + - loader: Move validation checks before initialization to avoid potential nullptr + dereference + ([internal MR 2365](https://gitlab.khronos.org/openxr/openxr/merge_requests/2365)) + - loader: On Android, make sure we always build with the same C++ standard + library (static) whether using shell script or gradle. + ([internal MR 2366](https://gitlab.khronos.org/openxr/openxr/merge_requests/2366)) + - loader: add -DXR_OS_APPLE define on macOS (fixes compilation on macOS) + ([OpenXR-SDK-Source PR 323](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/323)) + - scripts: Synchronize scripts with Vulkan, and move all generated files into a + single target directory. + ([internal MR 2335](https://gitlab.khronos.org/openxr/openxr/merge_requests/2335), + [internal issue 1693](https://gitlab.khronos.org/openxr/openxr/issues/1693), + [internal MR 2393](https://gitlab.khronos.org/openxr/openxr/merge_requests/2393), + [internal MR 2400](https://gitlab.khronos.org/openxr/openxr/merge_requests/2400)) + - scripts: Remove spurious warning from codegen script. + ([internal MR 2341](https://gitlab.khronos.org/openxr/openxr/merge_requests/2341)) + - validation layer: Fix output to `XR_EXT_debug_utils` when no labels/names have + been defined. + ([internal MR 2375](https://gitlab.khronos.org/openxr/openxr/merge_requests/2375)) + +## OpenXR SDK 1.0.24 (2022-06-23) + +- Registry + - Add new `XR_EXT_palm_pose` multi-vendor extension. + ([internal MR 2112](https://gitlab.khronos.org/openxr/openxr/merge_requests/2112)) + - Add new `XR_FB_scene` vendor extension. + ([internal MR 2237](https://gitlab.khronos.org/openxr/openxr/merge_requests/2237)) + - Fix structure definition in `XR_FB_spatial_entity_container`. + ([internal MR 2278](https://gitlab.khronos.org/openxr/openxr/merge_requests/2278)) + - scripts: Teach xr_conventions that 2D, 3D, etc. are words for the purposes of + structure type enum generation. + ([internal MR 2237](https://gitlab.khronos.org/openxr/openxr/merge_requests/2237)) +- SDK + - Loader: Fix filename and native lib dir sequence for log + ([OpenXR-SDK-Source PR 311](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/311)) + - Loader: Fix loader building with Gradle and add CI checking for loader building + with Gradle + ([OpenXR-SDK-Source PR 312](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/312)) + - hello_xr: Pick background clear color based on the selected environment blend + mode. + ([internal MR 2275](https://gitlab.khronos.org/openxr/openxr/merge_requests/2275)) + - hello_xr: Defer Vulkan CPU sync until the next frame begins. + ([OpenXR-SDK-Source PR 277](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/277)) + - hello_xr: Fix shader compile on Mali driver + ([OpenXR-SDK-Source PR 310](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/310)) + - scripts: Delegate generating structure types to the conventions object as done + elsewhere in the repo. + ([internal MR 2237](https://gitlab.khronos.org/openxr/openxr/merge_requests/2237)) + +## OpenXR SDK 1.0.23 (2022-05-27) + +This release primarily features a large number of new vendor and multi-vendor +extensions, as well as some updates to existing extensions. Some improvements +and fixes were made in SDK as well. + +- Registry + - Add new `XR_ULTRALEAP_hand_tracking_forearm` vendor extension. + ([internal MR 2154](https://gitlab.khronos.org/openxr/openxr/merge_requests/2154)) + - Add new `XR_EXT_dpad_binding` multi-vendor extension. + ([internal MR 2159](https://gitlab.khronos.org/openxr/openxr/merge_requests/2159)) + - Add "externally synchronized" markup for `xrBeginFrame` and `xrEndFrame` so + they get the matching box and their session parameters are included in the list + of externally-synchronized parameters in the "Threading" section. + ([internal MR 2179](https://gitlab.khronos.org/openxr/openxr/merge_requests/2179), + [OpenXR-Docs issue 23](https://github.com/KhronosGroup/OpenXR-Docs/issues/23), + [internal issue 1216](https://gitlab.khronos.org/openxr/openxr/issues/1216)) + - Add new `XR_FB_spatial_entity` vendor extension. + ([internal MR 2194](https://gitlab.khronos.org/openxr/openxr/merge_requests/2194)) + - Add new `XR_FB_spatial_entity_storage` vendor extension. + ([internal MR 2194](https://gitlab.khronos.org/openxr/openxr/merge_requests/2194)) + - Add new `XR_FB_spatial_entity_query` vendor extension. + ([internal MR 2194](https://gitlab.khronos.org/openxr/openxr/merge_requests/2194)) + - Add new `XR_FB_composition_layer_settings` vendor extension. + ([internal MR 2221](https://gitlab.khronos.org/openxr/openxr/merge_requests/2221)) + - Add new `XR_FB_spatial_entity_container` vendor extension. + ([internal MR 2236](https://gitlab.khronos.org/openxr/openxr/merge_requests/2236)) + - Add new `XR_HTC_vive_wrist_tracker_interaction` vendor extension. + ([internal MR 2252](https://gitlab.khronos.org/openxr/openxr/merge_requests/2252)) + - Add XR_HTC_hand_interaction extension. + ([internal MR 2254](https://gitlab.khronos.org/openxr/openxr/merge_requests/2254)) + - Add new `XR_VARJO_view_offset` vendor extension. + ([internal MR 2255](https://gitlab.khronos.org/openxr/openxr/merge_requests/2255)) + - Add new `XR_META_performance_metrics` vendor extension. + ([internal MR 2256](https://gitlab.khronos.org/openxr/openxr/merge_requests/2256)) + - Add new `XR_META_vulkan_swapchain_create_info` vendor extension. + ([internal MR 2257](https://gitlab.khronos.org/openxr/openxr/merge_requests/2257)) + - Change the XML type of `XR_MIN_COMPOSITION_LAYERS_SUPPORTED` so it outputs an + includable snippet for the spec text. + ([internal MR 2201](https://gitlab.khronos.org/openxr/openxr/merge_requests/2201), + [internal issue 1652](https://gitlab.khronos.org/openxr/openxr/issues/1652), + [OpenXR-Docs issue 117](https://github.com/KhronosGroup/OpenXR-Docs/issues/117)) + - Fix registry consistency script and codegen scripts to allow extension of KHR + and EXT enumerations with vendor-specific members. + ([internal MR 2213](https://gitlab.khronos.org/openxr/openxr/merge_requests/2213), + [internal MR 2243](https://gitlab.khronos.org/openxr/openxr/merge_requests/2243)) + - Fix warning print statement arguments in header generation/validation script. + ([internal MR 2244](https://gitlab.khronos.org/openxr/openxr/merge_requests/2244)) + - Reserve the extension number for multi-vendor hand interaction profile + extension. + ([internal MR 2206](https://gitlab.khronos.org/openxr/openxr/merge_requests/2206)) + - Reserve vendor extensions 304-317 for Qualcomm + ([internal MR 2258](https://gitlab.khronos.org/openxr/openxr/merge_requests/2258)) + - Reserve vendor extensions 318-370 for HTC. + ([internal MR 2266](https://gitlab.khronos.org/openxr/openxr/merge_requests/2266)) + - `KHR_composition_layer_depth`: Update spec version to 6 for updated spec text. + ([internal MR 2207](https://gitlab.khronos.org/openxr/openxr/merge_requests/2207), + [internal issue 1651](https://gitlab.khronos.org/openxr/openxr/issues/1651)) + - `XR_EXT_eye_gaze_interaction`: Update the spec version for spec text change. + ([internal MR 2227](https://gitlab.khronos.org/openxr/openxr/merge_requests/2227)) + - `XR_EXT_uuid`: Add enum tags to `XR_UUID_SIZE_EXT` to ensure it is defined + before `XrUuidEXT` in generated header + ([internal MR 2234](https://gitlab.khronos.org/openxr/openxr/merge_requests/2234), + [internal issue 1673](https://gitlab.khronos.org/openxr/openxr/issues/1673)) + - `XR_FB_hand_aim_tracking`, `XR_FB_hand_tracking_capsule`, + `XR_FB_hand_tracking_mesh`: Fix documentation to specify correct `next` chain + usage. + ([internal MR 2229](https://gitlab.khronos.org/openxr/openxr/merge_requests/2229)) + - `XR_FB_hand_tracking_capsules`: Update `XrHandCapsuleFB` and + `XrHandTrackingCapsulesStateFB` to use + `XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB` and + `XR_HAND_TRACKING_CAPSULE_COUNT_FB` enums when defining arrays so they match + the usual practice for vendor extensions + ([internal MR 2216](https://gitlab.khronos.org/openxr/openxr/merge_requests/2216)) + - `XR_FB_passthrough_keyboard_hands`: Add + `XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB`, update spec + version to 2. + ([internal MR 2270](https://gitlab.khronos.org/openxr/openxr/merge_requests/2270)) + - `XR_FB_passthrough`: add `XrPassthroughBrightnessContrastSaturationFB`, update + spec version to 2 + ([internal MR 2222](https://gitlab.khronos.org/openxr/openxr/merge_requests/2222)) + - `XR_FB_render_model`: Add capability support levels, bump spec version to 2. + ([internal MR 2264](https://gitlab.khronos.org/openxr/openxr/merge_requests/2264)) + - `XR_FB_space_warp`: Add + `XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB` into + `XrCompositionLayerSpaceWarpInfoFlagBitsFB`, update spec version to 2. + ([internal MR 2193](https://gitlab.khronos.org/openxr/openxr/merge_requests/2193)) + - `XR_HTC_vive_focus3_controller_interaction`: Support component path + "/input/squeeze/value", update spec version to 2. + ([internal MR 2253](https://gitlab.khronos.org/openxr/openxr/merge_requests/2253)) + - `XR_KHR_D3D11_enable` and `XR_KHR_D3D12_enable`: Update to describe error + conditions for `XR_ERROR_GRAPHICS_DEVICE_INVALID`. + ([internal MR 2176](https://gitlab.khronos.org/openxr/openxr/merge_requests/2176), + [internal issue 1617](https://gitlab.khronos.org/openxr/openxr/issues/1617)) + - `XR_MSFT_spatial_graph_bridge`: Update to revision 2. + ([internal MR 2182](https://gitlab.khronos.org/openxr/openxr/merge_requests/2182)) +- SDK + - Add `org.khronos.openxr.intent.category.IMMERSIVE_HMD` category to intent- + filter for `AndroidManifest.xml`, to indicate immersive application + ([internal MR 2219](https://gitlab.khronos.org/openxr/openxr/merge_requests/2219)) + - Common: Fix definitions in `xr_linear.h` so that it can be compiled as C or + C++. + ([internal MR 2217](https://gitlab.khronos.org/openxr/openxr/merge_requests/2217)) + - Fix warnings raised by Clang on various platforms. + ([internal MR 2197](https://gitlab.khronos.org/openxr/openxr/merge_requests/2197)) + - Fix source-generation script and codegen scripts to allow extension of KHR and + EXT enumerations with vendor-specific members. + ([internal MR 2240](https://gitlab.khronos.org/openxr/openxr/merge_requests/2240), + [internal MR 2243](https://gitlab.khronos.org/openxr/openxr/merge_requests/2243)) + - Fix warning print statement arguments in header generation/validation script. + ([internal MR 2244](https://gitlab.khronos.org/openxr/openxr/merge_requests/2244)) + - Loader: Adjust Android loader build to use the static C++ runtime, since we do + not expose any C++ interfaces. + ([OpenXR-SDK-Source PR 307](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/307), + [internal issue 1712](https://gitlab.khronos.org/openxr/openxr/issues/1712)) + - Remove "Draft" status accidentally left on the loader design doc/spec. + ([OpenXR-SDK-Source PR 300](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/300), + [internal issue 1688](https://gitlab.khronos.org/openxr/openxr/issues/1688)) + - Validation Layer: Functions that start with `xrTryCreate` will receive the same + warnings as functions that start with`xrCreate`. + ([internal MR 2182](https://gitlab.khronos.org/openxr/openxr/merge_requests/2182)) + - cmake: Install pkgconfig file in mingw + ([OpenXR-SDK-Source PR 308](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/308)) + - hello_xr: Shutdown OpenGL graphics to allow it to be restarted + ([internal MR 2241](https://gitlab.khronos.org/openxr/openxr/merge_requests/2241)) + - hello_xr: remove call to swapbuffers to fix OpenGL frame timing. + ([internal MR 2249](https://gitlab.khronos.org/openxr/openxr/merge_requests/2249)) + - hello_xr: Fix typo in declspec keyword + ([OpenXR-SDK-Source PR 302](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/302), + [internal issue 1691](https://gitlab.khronos.org/openxr/openxr/issues/1691)) + +## OpenXR SDK 1.0.22 (2022-01-12) + +This release features a number of new extensions, as well as some software +updates and fixes, especially for Android. If you are using the bundled jsoncpp, +this is also a security release as the bundled jsoncpp was upgraded to +incorporate security improvements from upstream. + +- Registry + - Add new `XR_FB_render_model` vendor extension. + ([internal MR 2117](https://gitlab.khronos.org/openxr/openxr/merge_requests/2117), + [internal MR 2169](https://gitlab.khronos.org/openxr/openxr/merge_requests/2169)) + - Add new `XR_HTC_facial_expression` vendor extension. + ([internal MR 2120](https://gitlab.khronos.org/openxr/openxr/merge_requests/2120)) + - Add new `XR_FB_keyboard_tracking` vendor extension. + ([internal MR 2128](https://gitlab.khronos.org/openxr/openxr/merge_requests/2128)) + - Add new `XR_EXT_uuid` multi-vendor extension. + ([internal MR 2152](https://gitlab.khronos.org/openxr/openxr/merge_requests/2152)) + - Add new `XR_FB_passthrough_keyboard_hands` vendor extension. + ([internal MR 2162](https://gitlab.khronos.org/openxr/openxr/merge_requests/2162)) + - Add new `XR_HTC_vive_focus3_controller_interaction` vendor extension. + ([internal MR 2178](https://gitlab.khronos.org/openxr/openxr/merge_requests/2178)) + - Add new `XR_ALMALENCE_digital_lens_control` vendor extension. + ([OpenXR-Docs PR 104](https://github.com/KhronosGroup/OpenXR-Docs/pull/104), + [internal issue 1615](https://gitlab.khronos.org/openxr/openxr/issues/1615)) + - Correct winding order for `XR_MSFT_hand_tracking_mesh` extension to clockwise + to match runtime behavior. + ([internal MR 2151](https://gitlab.khronos.org/openxr/openxr/merge_requests/2151)) + - Fix typos/naming convention errors in `XR_FB_hand_tracking_capsules`: rename + `XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT` to + `XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB` and + `XR_FB_HAND_TRACKING_CAPSULE_COUNT` to `XR_HAND_TRACKING_CAPSULE_COUNT_FB`, + providing the old names as compatibility aliases. + ([internal MR 1547](https://gitlab.khronos.org/openxr/openxr/merge_requests/1547), + [internal issue 1519](https://gitlab.khronos.org/openxr/openxr/issues/1519)) + - Reserve vendor extensions 208 - 299 for Facebook. + ([internal MR 2158](https://gitlab.khronos.org/openxr/openxr/merge_requests/2158)) + - Reserve extension numbers for anticipated multi-vendor extensions. + ([internal MR 2173](https://gitlab.khronos.org/openxr/openxr/merge_requests/2173)) +- SDK + - Android loader: Update vendored jnipp project, including crash/exception fixes + if an application manually attached or detached a thread. + ([OpenXR-SDK-Source PR 286](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/286), + [OpenXR-SDK-Source PR 285](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/285)) + - Docs: Fixed typo in docs. + ([OpenXR-SDK-Source PR 284](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/284)) + - Fix detection of std::filesystem options on GCC 11 and newer. + ([OpenXR-SDK-Source PR 276](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/276), + [OpenXR-SDK-Source issue 260](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/260), + [internal issue 1571](https://gitlab.khronos.org/openxr/openxr/issues/1571)) + - Loader: Add `ifdef` guards around contents of Android-specific files so all + platforms may still glob all source files in OpenXR-SDK to build the loader + with a custom build system. + ([OpenXR-SDK-Source PR 274](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/274)) + - Loader: Fixed incorrect return value when no broker is present on Android but + runtime defined via `active_runtime.json`. + ([OpenXR-SDK-Source PR 284](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/284)) + - Loader: Added `/system` to the search path on Android as per documentation. + ([OpenXR-SDK-Source PR 284](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/284)) + - Loader doc: Use `nativeLibraryDir` (property, part of API) instead of + `getNativeLibraryDir()` (function generated by wrapping library) + ([OpenXR-SDK-Source PR 278](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/278)) + - Update vendored copy of jsoncpp from 1.8.4 to 1.9.5 for security and other + fixes. + ([internal MR 2168](https://gitlab.khronos.org/openxr/openxr/merge_requests/2168), + [OpenXR-SDK-Source issue 265](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/265), + [internal issue 1582](https://gitlab.khronos.org/openxr/openxr/issues/1582)) + - Update android-jni-wrappers to fix missing include. + ([OpenXR-SDK-Source PR 280](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/280), + [OpenXR-SDK-Source issue 275](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/275), + [internal issue 1616](https://gitlab.khronos.org/openxr/openxr/issues/1616)) + - Update jnipp to fix crash on Android if app detaches thread from JVM (e.g. on + shutdown). + ([OpenXR-SDK-Source PR 280](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/280)) + - scripts: Populate `ext_name` in `HandleData` too, for use by language wrapper + generation scripts. + ([internal MR 2184](https://gitlab.khronos.org/openxr/openxr/merge_requests/2184)) + +## OpenXR SDK 1.0.21 (2022-01-10) + +This release was withdrawn due to a typo noticed after initial publication. +All changes are now listed under 1.0.22. + +## OpenXR SDK 1.0.20 (2021-10-04) + +This release includes a proposed cross-vendor OpenXR loader for Android, Android +build system for hello_xr, and a number of new vendor extensions. + +- Registry + - Add new `XR_HTCX_vive_tracker_interaction` provisional vendor extension. + ([internal MR 1983](https://gitlab.khronos.org/openxr/openxr/merge_requests/1983)) + - Add new `XR_VARJO_marker_tracking` vendor extension. + ([internal MR 2129](https://gitlab.khronos.org/openxr/openxr/merge_requests/2129)) + - Add new `XR_FB_triangle_mesh` vendor extension. + ([internal MR 2130](https://gitlab.khronos.org/openxr/openxr/merge_requests/2130)) + - Add new `XR_FB_passthrough` vendor extension. + ([internal MR 2130](https://gitlab.khronos.org/openxr/openxr/merge_requests/2130)) + - Reserve vendor extensions for Facebook. + ([internal MR 2131](https://gitlab.khronos.org/openxr/openxr/merge_requests/2131)) + - Reserve a vendor extension for Almalence. + ([OpenXR-Docs PR 99](https://github.com/KhronosGroup/OpenXR-Docs/pull/99)) + - XR_FB_color_space: Fix XML markup to indicate that + `XrSystemColorSpacePropertiesFB` is chained to `XrSystemProperties`. + ([internal MR 2143](https://gitlab.khronos.org/openxr/openxr/merge_requests/2143)) +- SDK + - Loader specification: Describe a cross-vendor loader for use on Android. + ([internal MR 1949](https://gitlab.khronos.org/openxr/openxr/merge_requests/1949), + [internal issue 1425](https://gitlab.khronos.org/openxr/openxr/issues/1425)) + - hello_xr: Add Android build system, using new cross-vendor loader, and make + some improvements/fixes. + ([internal MR 1949](https://gitlab.khronos.org/openxr/openxr/merge_requests/1949), + [internal issue 1425](https://gitlab.khronos.org/openxr/openxr/issues/1425)) + - loader: Implement cross-vendor loader for Android, with AAR Prefab packaging. + ([internal MR 1949](https://gitlab.khronos.org/openxr/openxr/merge_requests/1949), + [internal issue 1425](https://gitlab.khronos.org/openxr/openxr/issues/1425)) + +## OpenXR SDK 1.0.19 (2021-08-24) + +This release features a number of new or updated vendor extensions, as well as +some minor cleanups and bug fixes in the SDK. + +- Registry + - Add `XR_SESSION_NOT_FOCUSED` as a possible success return code to + `xrApplyHapticFeedback` and `xrStopHapticFeedback`. + ([internal MR 2106](https://gitlab.khronos.org/openxr/openxr/merge_requests/2106), + [internal issue 1270](https://gitlab.khronos.org/openxr/openxr/issues/1270)) + - Add new `XR_FB_hand_tracking_mesh` vendor extension. + ([internal MR 2089](https://gitlab.khronos.org/openxr/openxr/merge_requests/2089)) + - Add new `XR_FB_hand_tracking_capsules` vendor extension. + ([internal MR 2089](https://gitlab.khronos.org/openxr/openxr/merge_requests/2089)) + - Add new `XR_FB_hand_tracking_aim` vendor extension. + ([internal MR 2089](https://gitlab.khronos.org/openxr/openxr/merge_requests/2089)) + - Add version 1 of new `XR_FB_space_warp` vendor extension. + ([internal MR 2115](https://gitlab.khronos.org/openxr/openxr/merge_requests/2115)) + - Register new Author ID for Almalence. + ([OpenXR-Docs PR 92](https://github.com/KhronosGroup/OpenXR-Docs/pull/92), + [OpenXR-Docs PR 93](https://github.com/KhronosGroup/OpenXR-Docs/pull/93)) + - Update to version 2 of `XR_VALVE_analog_threshold`. + ([internal MR 2113](https://gitlab.khronos.org/openxr/openxr/merge_requests/2113)) +- SDK + - scripts: Some typing annotations and type-related cleanup found by using type- + aware Python editors. + ([internal MR 2100](https://gitlab.khronos.org/openxr/openxr/merge_requests/2100)) + - `xr_linear.h`: Fix bug in `XrVector3f_Cross` + ([internal MR 2111](https://gitlab.khronos.org/openxr/openxr/merge_requests/2111)) + +## OpenXR SDK 1.0.18 (2021-07-30) + +This release mostly adds new extensions. It also includes some fixes to the +included layers, as well as text in the loader documentation describing how +runtimes can register themselves for manual selection. This is not used by the +loader itself and does not require any changes to the loader, but it may be +useful to developer-focused supporting software. + +- Registry + - Add ratified `XR_KHR_swapchain_usage_input_attachment_bit` Khronos extension. + (Promotion of `XR_MND_swapchain_usage_input_attachment_bit`, which is now + deprecated.) + ([internal MR 2045](https://gitlab.khronos.org/openxr/openxr/merge_requests/2045)) + - Add new `XR_FB_foveation`, `XR_FB_foveation_configuration`, and + `XR_FB_foveation_vulkan` vendor extensions. + ([internal MR 2050](https://gitlab.khronos.org/openxr/openxr/merge_requests/2050)) + - Add additional extension dependencies to `XR_FB_swapchain_update_state`. + ([internal MR 2072](https://gitlab.khronos.org/openxr/openxr/merge_requests/2072), + [internal issue 1572](https://gitlab.khronos.org/openxr/openxr/issues/1572)) + - Add new `XR_FB_composition_layer_secure_content` vendor extension. + ([internal MR 2075](https://gitlab.khronos.org/openxr/openxr/merge_requests/2075)) + - Add new `XR_FB_composition_layer_alpha_blend` vendor extension. + ([internal MR 2078](https://gitlab.khronos.org/openxr/openxr/merge_requests/2078)) + - Add new `XR_FB_composition_layer_image_layout` vendor extension. + ([internal MR 2090](https://gitlab.khronos.org/openxr/openxr/merge_requests/2090)) + - Add new `XR_MSFT_spatial_anchor_persistence` vendor extension. + ([internal MR 2093](https://gitlab.khronos.org/openxr/openxr/merge_requests/2093)) + - Add some simple [Schematron](https://schematron.com) rules and a script to + check the XML registry against them. + ([internal MR 2103](https://gitlab.khronos.org/openxr/openxr/merge_requests/2103)) + - Register author ID and Reserve vendor extensions for Unity. + ([internal MR 2105](https://gitlab.khronos.org/openxr/openxr/merge_requests/2105)) + - Reserve extension ID range 187-196 for LIV Inc. + ([internal MR 2102](https://gitlab.khronos.org/openxr/openxr/merge_requests/2102)) +- SDK + - Describe how runtimes may register themselves at installation time for manual + selection. + ([internal MR 2081](https://gitlab.khronos.org/openxr/openxr/merge_requests/2081), + [internal MR 2109](https://gitlab.khronos.org/openxr/openxr/merge_requests/2109), + [internal issue 1574](https://gitlab.khronos.org/openxr/openxr/issues/1574)) + - Include sRGB in list of supported swapchain texture formats for the HelloXR + OpenGLES plugin. + ([internal MR 2066](https://gitlab.khronos.org/openxr/openxr/merge_requests/2066)) + - layers: Refactor generated `xrGetInstanceProcAddr` implementations to avoid + deeply-nested `if ... else` blocks. (Some compilers have limits we were nearing + or hitting.) + ([internal MR 2050](https://gitlab.khronos.org/openxr/openxr/merge_requests/2050)) + - validation layer: Set default logging mode to stdout ("text") instead of none. + ([OpenXR-SDK-Source PR 262](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/262)) + - validation layer: Fix invalid struct type error message to show the expected + type instead of the actual type. + ([OpenXR-SDK-Source PR 263](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/263)) + +## OpenXR SDK 1.0.17 (2021-06-08) + +This release features an important fix to the loader for an invalid-iterator bug +introduced in 1.0.16. All developers shipping the loader are strongly encouraged +to upgrade. It also includes a variety of new vendor extensions. + +- Registry + - Add `XR_MSFT_scene_understanding` vendor extension. + ([internal MR 2032](https://gitlab.khronos.org/openxr/openxr/merge_requests/2032)) + - Add `XR_MSFT_scene_understanding_serialization` vendor extension. + ([internal MR 2032](https://gitlab.khronos.org/openxr/openxr/merge_requests/2032)) + - Add `XR_MSFT_composition_layer_reprojection` vendor extension. + ([internal MR 2033](https://gitlab.khronos.org/openxr/openxr/merge_requests/2033)) + - Add `XR_OCULUS_audio_device_guid` vendor extension. + ([internal MR 2053](https://gitlab.khronos.org/openxr/openxr/merge_requests/2053)) + - Add version 3 of `XR_FB_swapchain_update_state` vendor extension, which splits + platform and graphics API specific structs into separate extensions. + ([internal MR 2059](https://gitlab.khronos.org/openxr/openxr/merge_requests/2059)) + - Apply formatting to registry XML by selectively committing changes made by + . + ([internal MR 2070](https://gitlab.khronos.org/openxr/openxr/merge_requests/2070), + [OpenXR-SDK-Source/#256](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/256)) + - Enforce that all `xrCreate` functions must be able to return + `XR_ERROR_LIMIT_REACHED` and `XR_ERROR_OUT_OF_MEMORY`, and adjust lists of + error codes accordingly. + ([internal MR 2064](https://gitlab.khronos.org/openxr/openxr/merge_requests/2064)) + - Fix a usage of `>` without escaping as an XML entity. + ([internal MR 2064](https://gitlab.khronos.org/openxr/openxr/merge_requests/2064)) + - Fix all cases of a success code (most often `XR_SESSION_LOSS_PENDING`) + appearing in the `errorcodes` attribute of a command. + ([internal MR 2064](https://gitlab.khronos.org/openxr/openxr/merge_requests/2064), + [internal issue 1566](https://gitlab.khronos.org/openxr/openxr/issues/1566)) + - Improve comments for several enum values. + ([internal MR 1982](https://gitlab.khronos.org/openxr/openxr/merge_requests/1982)) + - Perform some script clean-up and refactoring, including selective type + annotation and moving the Conventions abstract base class to `spec_tools`. + ([internal MR 2064](https://gitlab.khronos.org/openxr/openxr/merge_requests/2064)) + - Sort return codes, with some general, popular codes made to be early. Script + `sort_codes.py` can be used to maintain this, though it mangles other XML + formatting, so use it with care. + can format, and eventually sort return codes (currently sort order does not + match). + ([internal MR 2064](https://gitlab.khronos.org/openxr/openxr/merge_requests/2064), + [OpenXR-SDK-Source/#256](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/256)) +- SDK + - Loader: Fix iteration over explicit layer manifests. + ([OpenXR-SDK-Source/#256](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/256)) + - validation layer: Don't try to apply `strlen` to `wchar_t`-based output + buffers. + ([internal MR 2053](https://gitlab.khronos.org/openxr/openxr/merge_requests/2053)) + +## OpenXR SDK 1.0.16 (2021-05-11) + +This release contains an update to define a new error code, +`XR_ERROR_RUNTIME_UNAVAILABLE`, now returned by the loader at `xrCreateInstance` +and `xrEnumerateInstanceProperties` when it cannot find or load a runtime for +some reason. This should be more clear for developers when encountering it, as +well as helpful when troubleshooting errors hit by users. (The +previously-returned error was typically `XR_ERROR_INSTANCE_LOST`, which is +confusing when returned when trying to create an instance.) This release also +includes a new multi-vendor extension, a new vendor extension, and improved +concurrency handling in the loader, among smaller fixes. + +- Registry + - Add new `XR_ERROR_RUNTIME_UNAVAILABLE` error code, add + `XR_ERROR_RUNTIME_UNAVAILABLE` as a supported error code to `xrCreateInstance` + and `xrEnumerateInstanceProperties`, and remove `XR_ERROR_INSTANCE_LOST` as a + supported error code from `xrCreateInstance`. + ([internal MR 2024](https://gitlab.khronos.org/openxr/openxr/merge_requests/2024), + [internal issue 1552](https://gitlab.khronos.org/openxr/openxr/issues/1552), + [OpenXR-SDK-Source/#177](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/177)) + - Add `XR_EXT_hand_joint_motion_range` multi-vendor extension. + ([internal MR 1995](https://gitlab.khronos.org/openxr/openxr/merge_requests/1995)) + - Add `XR_FB_swapchain_update_state` vendor extension. + ([internal MR 1997](https://gitlab.khronos.org/openxr/openxr/merge_requests/1997)) + - Fix missing `XR_ERROR_INSTANCE_LOST` return codes for extension functions in + `XR_EXT_performance_settings`, `XR_EXT_debug_utils`, + `XR_EXT_conformance_automation`, and `XR_EXT_thermal_query`. + ([internal MR 2023](https://gitlab.khronos.org/openxr/openxr/merge_requests/2023), + [OpenXR-Docs/#10](https://github.com/KhronosGroup/OpenXR-Docs/issues/10), + [internal issue 1256](https://gitlab.khronos.org/openxr/openxr/issues/1256)) + - Reserve extension 166 for working group use. + ([internal MR 2025](https://gitlab.khronos.org/openxr/openxr/merge_requests/2025)) +- SDK + - Loader: Change runtime part to return `XR_ERROR_RUNTIME_UNAVAILABLE` when + there is an error loading a runtime. + ([internal MR 2024](https://gitlab.khronos.org/openxr/openxr/merge_requests/2024), + [internal issue 1552](https://gitlab.khronos.org/openxr/openxr/issues/1552), + [OpenXR-SDK-Source/#177](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/177)) + - Loader: Simplify in areas where code paths were dead. + ([internal MR 2024](https://gitlab.khronos.org/openxr/openxr/merge_requests/2024)) + - Loader: Improved locking around a few areas of the loader that aren't robust + against usual concurrent calls. + ([OpenXR-SDK-Source/#252](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/252)) + - validation layer: Fix generated code when a protected extension contains a base + header type. + ([internal MR 1997](https://gitlab.khronos.org/openxr/openxr/merge_requests/1997)) + +## OpenXR SDK 1.0.15 (2021-04-13) + +The main SDK change in this release is that the OpenXR headers **no longer +expose extension function prototypes** because extension functions are not +exported by the loader. This should prevent some confusion during development +without affecting code that correctly compiles and links with older SDKs. Code +that was compiled but not linked (for instance, the automated tests of example +source in the specification) and that would not have successfully linked may +have their defects highlighted by this change, however. If you need those +prototypes still available, there is a preprocessor define that can re-enable +them. The function pointer definitions are always available. + +In addition to that header change, this release contains three new vendor +extensions plus an assortment of SDK fixes. + +- Registry + - Add `XR_VARJO_foveated_rendering` vendor extension. + ([internal MR 1981](https://gitlab.khronos.org/openxr/openxr/merge_requests/1981)) + - Add `XR_VARJO_composition_layer_depth_test` vendor extension. + ([internal MR 1998](https://gitlab.khronos.org/openxr/openxr/merge_requests/1998)) + - Add `XR_VARJO_environment_depth_estimation` vendor extension. + ([internal MR 1998](https://gitlab.khronos.org/openxr/openxr/merge_requests/1998)) + - Add `uint16_t` to `openxr_platform_defines` (and associated scripts) so it may + be used easily by extensions. + ([internal MR 2017](https://gitlab.khronos.org/openxr/openxr/merge_requests/2017)) + - Reserve extension 149 for working group use. + ([internal MR 1999](https://gitlab.khronos.org/openxr/openxr/merge_requests/1999)) + - Reserve extension numbers 150 to 155 for ULTRALEAP extensions + ([internal MR 2006](https://gitlab.khronos.org/openxr/openxr/merge_requests/2006)) + - Reserve extension numbers 156-165 for Facebook. + ([internal MR 2018](https://gitlab.khronos.org/openxr/openxr/merge_requests/2018)) +- SDK + - Hide prototypes for extension functions unless explicitly requested by defining + `XR_EXTENSION_PROTOTYPES`. These functions are not exported from the loader, so + having their prototypes available is confusing and leads to link errors, etc. + ([OpenXR-SDK-Source/#251](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/251), + [OpenXR-SDK-Source/#174](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/174), + [internal issue 1554](https://gitlab.khronos.org/openxr/openxr/issues/1554), + [internal issue 1338](https://gitlab.khronos.org/openxr/openxr/issues/1338)) + - Also list API layers in list tool. + ([internal MR 1991](https://gitlab.khronos.org/openxr/openxr/merge_requests/1991)) + - Ensure we expose the OpenXR headers in the build-time interface of the loader, + as well as the install-time interface, for use with FetchContent.cmake. + ([OpenXR-SDK-Source/#242](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/242), + [OpenXR-SDK-Source/#195](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/195), + [internal issue 1409](https://gitlab.khronos.org/openxr/openxr/issues/1409)) + - Improve `BUILDING.md`, including adding details on how to specify architecture + for VS2019. + ([OpenXR-SDK-Source/#245](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/245), + [OpenXR-SDK-Source/#253](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/253)) + - Loader: Fix loader failing to load on Windows 7 due to `pathcch` dependency. + ([OpenXR-SDK-Source/#239](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/239), + [OpenXR-SDK-Source/#214](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/214), + [internal issue 1471](https://gitlab.khronos.org/openxr/openxr/issues/1471), + [OpenXR-SDK-Source/#236](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/236), + [internal issue 1519](https://gitlab.khronos.org/openxr/openxr/issues/1519)) + - Loader: Fix conflicting filename in `openxr_loader.def` causing a linker warning + when building debug for Windows. + ([OpenXR-SDK-Source/#246](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/246)) + - Update `cgenerator.py` to generate header comments in `openxr.h` to show when a + struct extends another struct + ([internal MR 2005](https://gitlab.khronos.org/openxr/openxr/merge_requests/2005)) + - hello_xr: Check for `shaderStorageImageMultisample` feature in Vulkan plugin + before using it. + ([OpenXR-SDK-Source/#234](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/234), + [OpenXR-SDK-Source/#233](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/233), + [internal issue 1518](https://gitlab.khronos.org/openxr/openxr/issues/1518)) + - hello_xr: Make sure `common.h` includes the reflection header that it uses. + ([OpenXR-SDK-Source/#247](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/247)) + - layers: Revise documentation, re-formatting and updating to refer to real + functions and URLs. + ([internal MR 2012](https://gitlab.khronos.org/openxr/openxr/merge_requests/2012)) + - loader: Check the instance handle passed to `xrGetInstanceProcAddr`. + ([internal MR 1980](https://gitlab.khronos.org/openxr/openxr/merge_requests/1980)) + - loader: Fix building OpenXR-SDK with CMake's multi-config Ninja generator. + ([OpenXR-SDK-Source/#249](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/249), + [OpenXR-SDK-Source/#231](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/231)) + - `openxr_reflection.h`: Make reproducible/deterministic by sorting protection + defines in the script. + ([internal MR 1993](https://gitlab.khronos.org/openxr/openxr/merge_requests/1993), + [internal issue 1424](https://gitlab.khronos.org/openxr/openxr/issues/1424)) + - xr_dependencies (shared utility): Include `unknwn.h` on Windows, even without + D3D enabled. + ([OpenXR-SDK-Source/#250](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/250), + [OpenXR-SDK-Source/#237](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/237)) + +## OpenXR SDK 1.0.14 (2021-01-27) + +This release contains a collection of fixes and improvements, including one new +vendor extension. Notably, we have relicensed all files that become part of the +loader, so the loader may be "Apache-2.0 OR MIT" for downstream license +compatibility. + +- Registry + - Add new `XR_FB_android_surface_swapchain_create` vendor extension. + ([internal MR 1939](https://gitlab.khronos.org/openxr/openxr/merge_requests/1939), + [internal issue 1493](https://gitlab.khronos.org/openxr/openxr/issues/1493), + [internal MR 1968](https://gitlab.khronos.org/openxr/openxr/merge_requests/1968)) + - Add missing `optional` attributes to `XR_KHR_vulkan_enable2` structs. Fixes + validation layer. + ([OpenXR-Docs/#72](https://github.com/KhronosGroup/OpenXR-Docs/pull/72)) + - Correction to `locationFlags` field in `XrHandJointLocationEXT` to be optional. + ([internal MR 1945](https://gitlab.khronos.org/openxr/openxr/merge_requests/1945)) + - Reserve vendor extensions for Varjo. + ([internal MR 1935](https://gitlab.khronos.org/openxr/openxr/merge_requests/1935)) + - Reserve vendor extensions for Magic Leap. + ([internal MR 1967](https://gitlab.khronos.org/openxr/openxr/merge_requests/1967), + [internal MR 1970](https://gitlab.khronos.org/openxr/openxr/merge_requests/1970)) + - Reserve extension number 143 to 148 for MSFT extensions. + ([internal MR 1969](https://gitlab.khronos.org/openxr/openxr/merge_requests/1969)) + - Update Magic Leap ID and contact information. + ([internal MR 1967](https://gitlab.khronos.org/openxr/openxr/merge_requests/1967)) +- SDK + - Add `./` to the start of the library name in API layer manifests on Windows, so + they are treated as a relative path. + ([internal MR 1975](https://gitlab.khronos.org/openxr/openxr/merge_requests/1975)) + - Fix searching for prerequisites in generated CMake config files. + ([internal MR 1963](https://gitlab.khronos.org/openxr/openxr/merge_requests/1963)) + - Start shipping the OpenXR API layers with the release artifacts. + ([internal MR 1975](https://gitlab.khronos.org/openxr/openxr/merge_requests/1975)) + - cmake: Debug library uses d suffix on Windows. CMake `OPENXR_DEBUG_POSTFIX` + variable can be set to something else to change it. + ([OpenXR-SDK-Source/#229](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/229)) + - hello_xr: Remove redundant call to `xrInitializeLoaderKHR`. + ([internal MR 1933](https://gitlab.khronos.org/openxr/openxr/merge_requests/1933)) + - hello_xr: Return supported sample count as 1 for GLES, GL and D3D11. + ([internal MR 1962](https://gitlab.khronos.org/openxr/openxr/merge_requests/1962)) + - hello_xr: Use `android.app.NativeActivity` correctly in place of NativeActivity + subclass. + ([internal MR 1976](https://gitlab.khronos.org/openxr/openxr/merge_requests/1976)) + - hello_xr: On Vulkan, explicitly add surface extensions for mirror window. + ([OpenXR-SDK-Source/#230](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/230), + [internal MR 1934](https://gitlab.khronos.org/openxr/openxr/merge_requests/1934)) + - loader: Relicense all files that become part of the loader, so the loader may + be "Apache-2.0 OR MIT" for downstream license compatibility. + ([internal MR 1937](https://gitlab.khronos.org/openxr/openxr/merge_requests/1937), + [internal issue 1449](https://gitlab.khronos.org/openxr/openxr/issues/1449), + [OpenXR-SDK-Source/#205](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/205)) + - loader: Protect against the application overriding loader symbols. + ([internal MR 1961](https://gitlab.khronos.org/openxr/openxr/merge_requests/1961)) + - loader: Handle JSON files in the search path that are not objects. + ([internal MR 1979](https://gitlab.khronos.org/openxr/openxr/merge_requests/1979)) + +## OpenXR SDK 1.0.13 (2020-11-24) + +The SDK in this release features some fixes to the loader's layer parsing: +upgrading is recommended. The hello_xr example has also been improved. The +registry for this release features a new ratified Khronos extension which will +serve as the basis of other extensions, as well as a number of new vendor +extensions. + +- Registry + - Add `XR_HTC_vive_cosmos_controller_interaction` vendor extension. + ([internal MR 1907](https://gitlab.khronos.org/openxr/openxr/merge_requests/1907)) + - Add `XR_FB_display_refresh_rate` vendor extension. + ([internal MR 1909](https://gitlab.khronos.org/openxr/openxr/merge_requests/1909)) + - Add `XR_MSFT_perception_anchor_interop` vendor extension. + ([internal MR 1929](https://gitlab.khronos.org/openxr/openxr/merge_requests/1929)) + - Added ratified `KHR_binding_modifications` Khronos extension. + ([internal MR 1878](https://gitlab.khronos.org/openxr/openxr/merge_requests/1878), + [internal issue 1413](https://gitlab.khronos.org/openxr/openxr/issues/1413)) + - Reserve vendor extensions for HTC. + ([internal MR 1907](https://gitlab.khronos.org/openxr/openxr/merge_requests/1907)) + - Reserve vendor extension numbers 109-120 for Facebook extensions. + ([internal MR 1913](https://gitlab.khronos.org/openxr/openxr/merge_requests/1913)) +- SDK + - Fix build errors under mingw-w64. + ([OpenXR-SDK-Source/#212](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/212)) + - Include PDB symbols to go along with the openxr_loader.dll Windows artifacts. + ([OpenXR-SDK-Source/#225](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/225)) + - `XrMatrix4x4f_CreateProjection`: Explicitly define matrix values as floats. + Prevents potential division by zero. + ([OpenXR-SDK-Source/#219](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/219)) + - build: Normalize how we detect and utilize threading libraries in the build + process. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - build: Search for OpenGL ES and other things needed on Android. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - build: Normalize how we detect and utilize Vulkan in the build process. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - build/ci: Have Windows loader artifacts organize themselves by + architecture/platform, and bundle the CMake config files and a "meta" CMake + config. + ([OpenXR-SDK-Source/#224](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/224), + [OpenXR-SDK-Source/#185](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/185)) + - documentation: Make API Layer manifest example for "disable_environment" and + "enable_environment" match the loader behavior + ([internal MR 1917](https://gitlab.khronos.org/openxr/openxr/merge_requests/1917), + [OpenXR-SDK-Source/#213](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/213)) + - hello_xr: Don't use subaction paths for quit_session action, it's unnecessary. + ([internal MR 1898](https://gitlab.khronos.org/openxr/openxr/merge_requests/1898)) + - hello_xr: Add initial build system support for building for Android. (No gradle + support yet.) + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - hello_xr: Call `xrInitializeLoaderKHR` and dynamically load `openxr_loader` on + Android. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - hello_xr: Fix printing of action bindings and make it prettier. + ([internal MR 1914](https://gitlab.khronos.org/openxr/openxr/merge_requests/1914)) + - hello_xr: Fix break on Oculus Quest. + ([internal MR 1921](https://gitlab.khronos.org/openxr/openxr/merge_requests/1921)) + - hello_xr: The D3D12 and Vulkan graphics plugins sometimes did not update their + swapchain image context maps due to rare key collisions. + ([OpenXR-SDK-Source/#217](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/217)) + - loader: Stub in some preliminary code for Android loader support - not a + complete port. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - loader: Add Android logcat logger. + ([internal MR 1910](https://gitlab.khronos.org/openxr/openxr/merge_requests/1910)) + - loader: Fix parsing of XR_ENABLE_API_LAYERS environment variable + ([internal MR 1912](https://gitlab.khronos.org/openxr/openxr/merge_requests/1912)) + - loader: Fix issues around `xrInitializeLoaderKHR`. + ([internal MR 1922](https://gitlab.khronos.org/openxr/openxr/merge_requests/1922)) + - loader: Replace `#if _WIN32` with `#ifdef _WIN32`. + ([OpenXR-SDK-Source/#215](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/215)) + +## OpenXR SDK 1.0.12 (2020-09-25) + +This release features a number of new ratified KHR extensions, as well as a new +vendor extension. + +- Registry + - Add ratified `XR_KHR_vulkan_enable2` Khronos extension. + ([internal MR 1627](https://gitlab.khronos.org/openxr/openxr/merge_requests/1627), + [internal issue 1249](https://gitlab.khronos.org/openxr/openxr/issues/1249), + [internal issue 1283](https://gitlab.khronos.org/openxr/openxr/issues/1283), + [internal MR 1863](https://gitlab.khronos.org/openxr/openxr/merge_requests/1863)) + - Add ratified `XR_KHR_loader_init` Khronos extension. + ([internal MR 1744](https://gitlab.khronos.org/openxr/openxr/merge_requests/1744)) + - Add ratified `XR_KHR_loader_init_android` Khronos extension. + ([internal MR 1744](https://gitlab.khronos.org/openxr/openxr/merge_requests/1744)) + - Add ratified `XR_KHR_composition_layer_equirect2` Khronos extension. + ([internal MR 1746](https://gitlab.khronos.org/openxr/openxr/merge_requests/1746)) + - Add ratified `XR_KHR_composition_layer_color_scale_bias` Khronos extension. + ([internal MR 1762](https://gitlab.khronos.org/openxr/openxr/merge_requests/1762)) + - Add `XR_MSFT_controller_model` extension. + ([internal MR 1832](https://gitlab.khronos.org/openxr/openxr/merge_requests/1832)) + - Add vendor tag `LIV` for LIV Inc. + ([internal MR 1896](https://gitlab.khronos.org/openxr/openxr/merge_requests/1896)) + - Fix `structextends` attribute of `XrHandPoseTypeInfoMSFT`. + ([OpenXR-SDK-Source/#207](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/207)) + - schema: Update to permit aliases for commands and struct types. (Already + supported by tooling.) + ([internal MR 1627](https://gitlab.khronos.org/openxr/openxr/merge_requests/1627)) +- SDK + - cmake: fix openxr_loader target export when installing both Release and Debug + config on Windows. + ([OpenXR-SDK-Source/#206](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/206)) + - hello_xr: Support the new `XR_KHR_vulkan_enable2` extension. + ([internal MR 1627](https://gitlab.khronos.org/openxr/openxr/merge_requests/1627)) + - hello_xr: Use the `XR_KHR_loader_init_android` extension on Android. + ([internal MR 1903](https://gitlab.khronos.org/openxr/openxr/merge_requests/1903)) + - layers: Fix ARM builds by re-adding function attributes. + ([OpenXR-SDK-Source/#193](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/193)) +- Misc + - Clean up trailing whitespace, byte-order marks, anda ensure trailing newlines. + ([OpenXR-SDK-Source/#208](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/208)) + +## OpenXR SDK 1.0.11 (2020-08-14) + +This release is mainly for SDK improvements, with only small changes to the +docs. A new error code is provided for `xrCreateSession` for developers +convenience. + +- Registry + - Register `ULTRALEAP` author ID for Ultraleap. + ([internal MR 1877](https://gitlab.khronos.org/openxr/openxr/merge_requests/1877)) + - Reserve the extension number 98 to 101 for future MSFT extensions. + ([internal MR 1879](https://gitlab.khronos.org/openxr/openxr/merge_requests/1879)) + - schema: Distinguish `parentstruct` and `structextends` attributes in comments. + ([internal MR 1881](https://gitlab.khronos.org/openxr/openxr/merge_requests/1881), + [OpenXR-Docs/#51](https://github.com/KhronosGroup/OpenXR-Docs/issues/51), + [internal issue 1396](https://gitlab.khronos.org/openxr/openxr/issues/1396)) + - Add a new result code, `XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING`, for + runtimes to return if `xrBeginSession` is called before calling one of the + `xrGetGraphicsRequirements` calls. + ([internal MR 1882](https://gitlab.khronos.org/openxr/openxr/merge_requests/1882), + [OpenXR-Docs/#53](https://github.com/KhronosGroup/OpenXR-Docs/issues/53), + [internal issue 1397](https://gitlab.khronos.org/openxr/openxr/issues/1397)) +- SDK + - Improve language usage in code and comments to be more respectful. + ([internal MR 1881](https://gitlab.khronos.org/openxr/openxr/merge_requests/1881)) + - Loader: Correct type of "extension_version" in API layer manifest files to + string, while maintaining backwards compatibility. Remove undocumented and + unused "device_extensions" and "entrypoints" keys. + ([internal MR 1867](https://gitlab.khronos.org/openxr/openxr/merge_requests/1867), + [internal issue 1411](https://gitlab.khronos.org/openxr/openxr/issues/1411)) + - Replace usage of `std::filesystem::canonical` with `PathCchCanonicalize` on + Windows platform to work around bug on UWP platforms. This also replaces + `PathCanonicalize` with `PathCchCanonicalize` and adds the appropriate library + for linking in. + ([OpenXR-SDK-Source/#198](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/198)) + - Support for building more projects when targeting UWP, and support for all + architectures when targeting Win32. + ([OpenXR-SDK-Source/#199](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/199)) + - hello_xr: fix Vulkan image layout transitions. + ([internal MR 1876](https://gitlab.khronos.org/openxr/openxr/merge_requests/1876)) + - validation: Enable three additional checks (on optional arrays with non- + optional counts) that were missing because of a script error. + ([internal MR 1881](https://gitlab.khronos.org/openxr/openxr/merge_requests/1881)) + +## OpenXR SDK 1.0.10 (2020-07-28) + +Note the relicensing of the registry XML file and some include files provided by +or generated by this repository (first item in each changelog section). Each +file's header, or an adjacent file with `.license` appended to the filename, is +the best reference for its license terms. We are currently working on ensuring +all files have an SPDX license identifier tag either in them or in an adjacent +file. This is still in progress but mostly complete. + +- Registry + - Relicense registry XML from MIT-like "Khronos Free Use License for Software and + Documentation" to, at your option, either the Apache License, Version 2.0, + found at + , or the MIT License, found at + , for broader license compatibility with + downstream projects. (SPDX License Identifier expression "Apache-2.0 OR MIT") + ([internal MR 1814](https://gitlab.khronos.org/openxr/openxr/merge_requests/1814), + [OpenXR-Docs/#3](https://github.com/KhronosGroup/OpenXR-Docs/issues/3), + [internal issue 958](https://gitlab.khronos.org/openxr/openxr/issues/958)) + - Add `XR_MSFT_holographic_window_attachment` vendor extension. + ([internal MR 1833](https://gitlab.khronos.org/openxr/openxr/merge_requests/1833)) + - Add `XR_EXT_hp_mixed_reality_controller` multi-vendor extension. + ([internal MR 1834](https://gitlab.khronos.org/openxr/openxr/merge_requests/1834)) + - Add `XR_EXT_samsung_odyssey_controller` multi-vendor extension. + ([internal MR 1835](https://gitlab.khronos.org/openxr/openxr/merge_requests/1835)) + - Add `XR_VALVE_analog_threshold` vendor extension. + ([internal MR 1859](https://gitlab.khronos.org/openxr/openxr/merge_requests/1859)) + - Add `XR_MND_swapchain_usage_input_attachment_bit` vendor extension. + ([internal MR 1865](https://gitlab.khronos.org/openxr/openxr/merge_requests/1865)) + - Reserve extension numbers 71 to 78 for Facebook extensions. + ([internal MR 1839](https://gitlab.khronos.org/openxr/openxr/merge_requests/1839)) + - Reserve extension numbers 79 to 88 for Valve extensions. + ([internal MR 1842](https://gitlab.khronos.org/openxr/openxr/merge_requests/1842)) + - Reserve extension numbers 89 to 92 for Khronos extensions. + ([internal MR 1844](https://gitlab.khronos.org/openxr/openxr/merge_requests/1844)) + - Reserve extension numbers 93 to 94 for `EXT_unbounded_reference_space` and + `EXT_spatial_anchor`. + ([internal MR 1854](https://gitlab.khronos.org/openxr/openxr/merge_requests/1854)) + - `XR_EPIC_view_configuration_fov`: Fix `recommendedFov` incorrectly being named + `recommendedMutableFov`. This is a **source-incompatible change** to a vendor + extension. + ([internal MR 1812](https://gitlab.khronos.org/openxr/openxr/merge_requests/1812)) + - schema: Adjust to permit bitmask expansion in extensions, already supported by + toolchain thanks to Vulkan. + ([internal MR 1865](https://gitlab.khronos.org/openxr/openxr/merge_requests/1865)) + - scripts: Teach xml-consistency to handle bitmask values defined in extensions. + ([internal MR 1865](https://gitlab.khronos.org/openxr/openxr/merge_requests/1865)) +- SDK + - Relicense generated headers `openxr.h`, `openxr_platform.h`, + `openxr_reflection.h`, and static header `openxr_platform_defines.h` from the + Apache License, version 2.0, to, at your option, either the Apache License, + Version 2.0, found at + , or the MIT License, found at + , for broader license compatibility with + downstream projects. (SPDX License Identifier expression "Apache-2.0 OR MIT") + ([internal MR 1814](https://gitlab.khronos.org/openxr/openxr/merge_requests/1814), + [OpenXR-Docs/#3](https://github.com/KhronosGroup/OpenXR-Docs/issues/3), + [internal issue 958](https://gitlab.khronos.org/openxr/openxr/issues/958)) + - Loader: Fix loading relative runtime libraries on Linux. + ([internal MR 1817](https://gitlab.khronos.org/openxr/openxr/merge_requests/1817)) + - Loader: Fix error on xrCreateInstance when explicitly trying to enable an + implicit API layer. + ([internal MR 1858](https://gitlab.khronos.org/openxr/openxr/merge_requests/1858)) + - Modify Azure DevOps build pipeline to automatically generate a NuGet package. + ([OpenXR-SDK-Source/#196](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/196)) + - Partially revert build system changes related to detecting Direct3D, to fix + builds. + ([internal MR 1802](https://gitlab.khronos.org/openxr/openxr/merge_requests/1802)) + - Portability fixes, including checking for `timespec_get` before enabling + `XR_USE_TIMESPEC`. + ([internal MR 1804](https://gitlab.khronos.org/openxr/openxr/merge_requests/1804)) + - cmake: export `OpenXRConfig.cmake` during install. Two targets can be imported + by another CMake application: `OpenXR::openxr_loader` and `OpenXR::headers`. + ([OpenXR-SDK-Source/#191](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/191), + [OpenXR-SDK-Source/#185](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/185)) + - hello_xr: Fix disparity between swapchain and render pass sample count in + Vulkan in the case where implementation recommends a value higher than one. + ([internal MR 1794](https://gitlab.khronos.org/openxr/openxr/merge_requests/1794)) + - hello_xr: Fix build on a minimal Linux install by ensuring we check for all + dependencies we use. We had missed checking for xcb_glx. + ([internal MR 1799](https://gitlab.khronos.org/openxr/openxr/merge_requests/1799), + [internal issue 1360](https://gitlab.khronos.org/openxr/openxr/issues/1360)) + - hello_xr: Fix a Vulkan crash on Windows related to the mirror window. + ([internal MR 1823](https://gitlab.khronos.org/openxr/openxr/merge_requests/1823)) + - hello_xr: Use more proper linear formats + ([internal MR 1840](https://gitlab.khronos.org/openxr/openxr/merge_requests/1840)) + - hello_xr: Enable use of glslangValidator to compile shaders if shaderc is not + available. + ([internal MR 1857](https://gitlab.khronos.org/openxr/openxr/merge_requests/1857)) + - hello_xr: Fix verbose per-layer information. + ([internal MR 1866](https://gitlab.khronos.org/openxr/openxr/merge_requests/1866)) + - hello_xr: Add Valve Index Controller bindings. Also use trigger value instead + of squeeze click for grab action on Vive Wand controller. + ([OpenXR-SDK-Source/#163](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/163)) + - openxr_reflection: Add `XR_LIST_STRUCT_` expansion macros for structure types, + as well as `XR_LIST_STRUCTURE_TYPES` macro associating types with + `XrStructureType` values. + ([internal MR 1495](https://gitlab.khronos.org/openxr/openxr/merge_requests/1495)) + - openxr_reflection: Adds `XR_LIST_EXTENSIONS()` macro, which will call your + supplied macro name with the name and extension number of all known extensions. + ([internal MR 1864](https://gitlab.khronos.org/openxr/openxr/merge_requests/1864)) + +## OpenXR SDK 1.0.9 (2020-05-29) + +- Registry + - Add an author ID, and reserve a vendor extension for Huawei. + ([OpenXR-Docs/#46](https://github.com/KhronosGroup/OpenXR-Docs/pull/46)) + - Reserve vendor extensions for future LunarG overlay and input focus + functionality. + ([internal MR 1720](https://gitlab.khronos.org/openxr/openxr/merge_requests/1720)) + - Reserve vendor extensions for Microsoft. + ([internal MR 1723](https://gitlab.khronos.org/openxr/openxr/merge_requests/1723)) + - Add `XR_EXT_hand_tracking` multi-vendor extension. + ([internal MR 1554](https://gitlab.khronos.org/openxr/openxr/merge_requests/1554), + [internal issue 1266](https://gitlab.khronos.org/openxr/openxr/issues/1266), + [internal issue 1267](https://gitlab.khronos.org/openxr/openxr/issues/1267), + [internal issue 1268](https://gitlab.khronos.org/openxr/openxr/issues/1268), + [internal issue 1269](https://gitlab.khronos.org/openxr/openxr/issues/1269)) + - Add `XR_HUAWEI_controller_interaction` vendor extension. + ([OpenXR-Docs/#47](https://github.com/KhronosGroup/OpenXR-Docs/pull/47)) + - Add `XR_MNDX_egl_enable` provisional vendor extension. + ([OpenXR-Docs/#48](https://github.com/KhronosGroup/OpenXR-Docs/pull/48)) + - Add `XR_MSFT_spatial_graph_bridge` vendor extension. + ([internal MR 1730](https://gitlab.khronos.org/openxr/openxr/merge_requests/1730)) + - Add `XR_MSFT_secondary_view_configuration` and `XR_MSFT_first_person_observer` + vendor extensions. + ([internal MR 1731](https://gitlab.khronos.org/openxr/openxr/merge_requests/1731)) + - Add `XR_MSFT_hand_mesh_tracking` vendor extension. + ([internal MR 1736](https://gitlab.khronos.org/openxr/openxr/merge_requests/1736)) + - Fix missing space in XML definition of `XrSpatialAnchorCreateInfoMSFT`. + ([internal MR 1742](https://gitlab.khronos.org/openxr/openxr/merge_requests/1742), + [internal issue 1351](https://gitlab.khronos.org/openxr/openxr/issues/1351), + [OpenXR-SDK-Source/#187](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/187)) + - Update a number of contacts for author/vendor tags. + ([internal MR 1788](https://gitlab.khronos.org/openxr/openxr/merge_requests/1788), + [internal issue 1326](https://gitlab.khronos.org/openxr/openxr/issues/1326)) +- SDK + - Replaced usage of the `_DEBUG` macro with `NDEBUG`. + ([internal MR 1756](https://gitlab.khronos.org/openxr/openxr/merge_requests/1756)) + - Allow disabling of `std::filesystem` usage via CMake, and detect if it's + available and what its requirements are. + ([OpenXR-SDK-Source/#192](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/192), + [OpenXR-SDK-Source/#188](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/188)) + - CI: Modifications to Azure DevOps build pipeline. Now builds UWP loader DLLs in + addition to Win32 loader DLLs. No longer builds static loader libraries due to + linkability concerns. Re-arranged release artifact zip to distinguish + architecture from 32-bit or 64-bit. + - Loader: Replace global static initializers with functions that return static + locals. With this change, code that includes OpenXR doesn't have to page in + this code and initialize these during startup. + ([OpenXR-SDK-Source/#173](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/173)) + - Loader: Unload runtime when `xrCreateInstance` fails. + ([internal MR 1778](https://gitlab.khronos.org/openxr/openxr/merge_requests/1778)) + - Loader: Add "info"-level debug messages listing all the places that we look for + the OpenXR active runtime manifest. + ([OpenXR-SDK-Source/#190](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/190)) + - Validation Layer: Fix crash in dereferencing a nullptr optional array handle + when the `count > 0`. + ([internal MR 1709](https://gitlab.khronos.org/openxr/openxr/merge_requests/1709), + [OpenXR-SDK-Source/#161](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/161), + [internal issue 1322](https://gitlab.khronos.org/openxr/openxr/issues/1322)) + - Validation Layer: Fix static analysis error and possible loss of validation + error. + ([internal MR 1715](https://gitlab.khronos.org/openxr/openxr/merge_requests/1715), + [OpenXR-SDK-Source/#160](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/160), + [internal issue 1321](https://gitlab.khronos.org/openxr/openxr/issues/1321)) + - Validation Layer: Simplify some generated code, and minor performance + improvements. + ([OpenXR-SDK-Source/#176](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/176)) + - API Dump Layer: Fix crash in dereferencing a `nullptr` while constructing a + `std::string`. + ([internal MR 1712](https://gitlab.khronos.org/openxr/openxr/merge_requests/1712), + [OpenXR-SDK-Source/#162](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/162), + [internal issue 1323](https://gitlab.khronos.org/openxr/openxr/issues/1323)) + - hello_xr: Fix releasing a swapchain image with the incorrect image layout. + ([internal MR 1755](https://gitlab.khronos.org/openxr/openxr/merge_requests/1755)) + - hello_xr: Prefer `VK_LAYER_KHRONOS_validation` over + `VK_LAYER_LUNARG_standard_validation` when available. + ([internal MR 1755](https://gitlab.khronos.org/openxr/openxr/merge_requests/1755)) + - hello_xr: Optimizations to D3D12 plugin to avoid GPU pipeline stall. + ([internal MR 1770](https://gitlab.khronos.org/openxr/openxr/merge_requests/1770)) + ([OpenXR-SDK-Source/#175](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/175)) + - hello_xr: Fix build with Vulkan headers 1.2.136. + ([OpenXR-SDK-Source/#181](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/181), + [OpenXR-SDK-Source/#180](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/180), + [internal issue 1347](https://gitlab.khronos.org/openxr/openxr/issues/1347)) + - hello_xr: Fix build with Visual Studio 16.6. + ([OpenXR-SDK-Source/#186](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/186), + [OpenXR-SDK-Source/#184](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/184)) + +## OpenXR SDK 1.0.8 (2020-03-27) + +Patch release for the 1.0 series. + +- Registry + - `XR_EXTX_overlay`: upgrade overlay bit names to match the convention, and + increase extension version number. This is a **source-incompatible change** to + a provisional multi-vendor extension. + ([internal MR 1697](https://gitlab.khronos.org/openxr/openxr/merge_requests/1697), + [internal issue 1318](https://gitlab.khronos.org/openxr/openxr/issues/1318), + [internal issue 42](https://gitlab.khronos.org/openxr/openxr/issues/42), + [internal MR 171](https://gitlab.khronos.org/openxr/openxr/merge_requests/171)) + - Introduce `XR_EXT_eye_gaze_interaction` extension for eye gaze interaction + profile. + ([internal MR 1556](https://gitlab.khronos.org/openxr/openxr/merge_requests/1556)) + - Add SPDX license identifier tag to registry schema. + ([internal MR 1686](https://gitlab.khronos.org/openxr/openxr/merge_requests/1686)) + - Add missing error codes to `xrCreateActionSet`, `xrCreateAction`, and + `xrGetInputSourceLocalizedName`. + ([internal MR 1698](https://gitlab.khronos.org/openxr/openxr/merge_requests/1698)) +- SDK + - Add SPDX license identifier tags to nearly all (code) files, including + generated files. + ([internal MR 1686](https://gitlab.khronos.org/openxr/openxr/merge_requests/1686)) + - Fix build system behavior with MSVC building in Release mode: only attempt + to copy PDB files if they exist. + ([internal MR 1701](https://gitlab.khronos.org/openxr/openxr/merge_requests/1701)) + +## OpenXR SDK 1.0.7 (2020-03-20) + +Patch release for the 1.0 series. + +Note: Changelogs are now being assembled with the help of the +[Proclamation](https://pypi.org/project/proclamation/) tool, so the format has +changed somewhat. + +- Registry + - Introduce `XR_MSFT_hand_interaction` extension for hand interaction profile. + ([internal MR 1601](https://gitlab.khronos.org/openxr/openxr/merge_requests/1601)) + - Introduce `XR_EPIC_view_configuration_fov` extension for system field-of-view + queries. + ([internal MR 1170](https://gitlab.khronos.org/openxr/openxr/merge_requests/1170)) + - Indicate that `xrBeginFrame` returns `XR_ERROR_CALL_ORDER_INVALID` when not + paired with a corresponding `xrWaitFrame` call. + ([internal MR 1673](https://gitlab.khronos.org/openxr/openxr/merge_requests/1673)) + - Update the version number of `XR_KHR_D3D12_enable` extension. + ([internal MR 1681](https://gitlab.khronos.org/openxr/openxr/merge_requests/1681)) + - Introduce `XR_EXTX_overlay` extension for Overlay sessions (which can + provide overlay composition layers). + ([internal MR 1665](https://gitlab.khronos.org/openxr/openxr/merge_requests/1665)) +- SDK + - loader: Add linker export map/version script to avoid exporting implementation + symbols from C++ on non-MSVC platforms. + ([internal MR 1641](https://gitlab.khronos.org/openxr/openxr/merge_requests/1641), + [OpenXR-SDK-Source/#159](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/159)) + - Add tracking and destruction of debug messengers in the loader. + ([internal MR 1668](https://gitlab.khronos.org/openxr/openxr/merge_requests/1668), + [OpenXR-SDK-Source/#29](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/29), + [internal issue 1284](https://gitlab.khronos.org/openxr/openxr/issues/1284)) + - Fix issue in `hello_xr` breaking the build in certain limited conditions. + ([OpenXR-SDK-Source/#170](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/170)) + - Add initial (partial) Android support for `hello_xr`. + ([internal MR 1680](https://gitlab.khronos.org/openxr/openxr/merge_requests/1680)) + - Fix a mismatched type signature, breaking compiles of hello_xr in at least some + Linux environments. + ([OpenXR-SDK-Source/#164](https://github.com/KhronosGroup/OpenXR-SDK-Source/issues/164), + [internal MR 166](https://gitlab.khronos.org/openxr/openxr/merge_requests/166)) + - Explicitly link in `advapi32` for many of the APIs the loader uses on Windows, + needed when building for ARM/ARM64 (non-UWP only). + ([internal MR 1664](https://gitlab.khronos.org/openxr/openxr/merge_requests/1664)) + - Remove "Dev Build" string from loader resources and fix version. ([internal MR + 1664](https://gitlab.khronos.org/openxr/openxr/merge_requests/1664)) + - Add manual pages for `openxr_runtime_list` and `hello_xr` (based on their + `--help`), and install in the standard location on non-Windows platforms. + ([OpenXR-SDK-Source/#169](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/169)) + - Silence some noisy warnings in hello_xr and the layers. + ([OpenXR-SDK-Source/#165](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/165)) + +## OpenXR 1.0.6 release (24-January-2020) + +Patch release for the 1.0 series. + +This release contains, among other things, a substantial simplification and +cleanup of the loader, which should fix a number of issues and also make it +forward compatible with extensions newer than the loader itself. As a part of +this change, the loader itself now only supports a single `XrInstance` active at +a time per process. If you attempt to create a new instance while an existing +one remains (such as in the case of application code leaking an `XrInstance` +handle), the loader will now return `XR_ERROR_LIMIT_REACHED`. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- hello_xr + - Initialize hand_scale to 1.0 + + - Fix Vulkan CHECK_CBSTATE build under newer MSVC + + - Initialize hand_scale to 1.0 to still show controller cubes even if + grabAction not available on startup. + +- Loader + - Single instance loader refactor with forward compatibility + (and internal + MRs 1599, 1621) + - Fix bug in loading API layers that could result in not loading an available + and enabled layer + +- Build + - Clean up linking, build loader and layers with all available + platform/presentation support, fix pkg-config file, rename `runtime_list` + test executable to `openxr_runtime_list` + + +### Internal issues + +- Registry + - Fix typo in visibility mesh enum comment. + - Add `XR_EXT_win32_appcontainer_compatible` extension. +- Scripts + - Fix comment typos. + - Sync scripts with Vulkan. (internal MR 1625) +- Loader + - Allow use of `/` in paths in FileSysUtils on Windows. +- Build + - Improve messages +- hello_xr + - Add D3D12 graphics plugin (internal MR 1616) + - Fix comment typo. + +## OpenXR 1.0.5 release (6-December-2019) + +Patch release for the 1.0 series. + +This release primarily contains extension reservations and small specification +clarifications/fixes. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- Loader tests + - #147 - Small bugfix and output extension + +### Internal issues + +- Registry + - Reserve Microsoft extension numbers (Internal MR 1613) + +## OpenXR 1.0.4 release (21-November-2019) + +Patch release for the 1.0 series. + +This release includes some fixes, extensions, and a small build system change: +the build system is now configured to use C++14. No code changes in the loader +or layers have yet taken place that require C++14. **Please file an issue** in +OpenXR-SDK-Source if there is some deployment platform where you would be unable +to use a loader making use of C++14 features. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #141 - Support system libs better (permit system jsoncpp, etc. for easier + packaging) +- hello_xr + - #144 - Fix hello_xr when running under Linux OpenGL X11 +- Registry + - Reserve a Monado EGL extension + + +### Internal issues + +- General, Build, Other + - Switch C++ standard version to C++14 (internal MR 1602) + - Remove unused/unneeded files (internal MR 1609) +- Loader + - Fix typo in parameter/member names (internal MR 1607, internal issue 1233) + - Fix deprecated usage of JsonCpp (internal MR 1604, internal issue 1212) +- hello_xr + - Resolve misleading use of `xrLocateViews` before `xrWaitFrame` in helloXR + and spec (internal MR 1584, internal issue 1227, public issue + ) +- Registry + - Add `XR_EXT_conformance_automation` extension, for use **only** by + conformance testing (internal MR 1577, 1608) + +## OpenXR 1.0.3 release (7-October-2019) + +Patch release for the 1.0 series. + +Note that this release includes changes to adjust the symbol exports from +dynamic library versions of the loader to align with the specification. Only +**core** symbols are currently exported. All extension symbols must be retrieved +using `xrGetInstanceProcAddr`. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #139 - Write output atomically at the end of generator scripts + - #119 - Loader test updates. + - #116 - Static analysis cleanups. +- Loader + - #140 - Permit broader valid usage re: layers + - #133 - Remove shwapi dependency + - #132 - Fix directory searching for layers + - #130 - Fix exporting of symbols on Windows. + - #129 - Remove debug ext only when added by loader - fixes usage of debug ext + on runtimes that do not provide it themselves. + - #125 - Include a `OutputDebugString` logger for Win32 +- Layers + - #138 - Don't validate output enum buffer values + - #137 - Fix incorrect filenames in the generated API layer JSON + +### Internal issues + +- General, Build, Other + - Fix warnings in MSVC static code analysis mode (internal MR 1574) + - Validation layer improvements and fixes (internal MR 1568) + - Update vendored jsoncpp to 1.9.1 (internal MR 1523) +- Loader + - Add ability to quiet the loader's default output (internal MR 1576) + - Fix conformance of loader in + `xrEnumerateApiLayerProperties`/`xrEnumerateInstanceExtensionProperties` +- hello_xr + - Simplify action usage in hello_xr (internal MR 1553) +- Registry + - Add `XR_EXT_view_configuration_depth_range` extension (internal MR 1502, + internal issue 1201) + - Reserve a Monado extension (internal MR 1541) + +## OpenXR 1.0.2 release (27-August-2019) + +Patch release for the 1.0 series. + +Note that the loader on Windows has a **security fix**: All developers incorporating +the OpenXR loader should update immediately. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #112 - Update active runtime search documentation + - #106 - List app changes + - #114 - Support for building WindowsStore loader and layers, and simplified + filename + - #96 - Misc cleanup: build simplification, install hello_xr, + allow building as subproject, fix null deref in validation layer. +- Loader + - #102 - Default to catching exceptions, since not being able to catch + (and having a non-throwing standard library) is less common + - #109 - Factor out some debug-utils related code from the loader, + and migrate validation layer to that shared code. + - #108 - Update json_stream initialization to improve compatibility + - #118 - Fix logic error in Linux active runtime search + - #115, #117 - Simplification and refactoring. +- Layers + - #111 - Some fixes to Validation Layer (as found applying to the UE4 OpenXR + plugin) + - #110 - Fix cleaning up session labels in validation layer +- From OpenXR-Docs: + - #26 - Proposal for unbounded space and spatial anchor extensions (vendor + extensions) + +### Internal issues + +- General, Build, Other + - Allow project to be included in a parent project. (Internal MR 1512) +- hello_xr + - Fix OpenGL version number to be XrVersion. (Internal MR 1515) + - Make D3D11 debug device handling more friendly. (Internal MR 1504) +- Registry + - Fix error in extension-added function. (Internal MR 1510) + - Add Oculus Android extension. (Internal MR 1518) + - Reserve additional extension number for Oculus. (Internal MR 1517) +- Loader + - **Security fix**: Do not use HKEY_CURRENT_USER or environment variables when + the process is running higher than medium-integrity on Windows. + (Internal issue 1205, internal MR 1511) + - Small updates to the loader documentation. + +### New extension + +- `XR_OCULUS_android_session_state_enable` + +## OpenXR 1.0.1 release (2-August-2019) + +Patch release for the 1.0 series. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #87 - Fix makefiles + - #88 - Remove unneeded generation (corresponds to issue #74, internal issue + 1139, internal MR 1491) + - #101 - Fix install of header and loader. +- Loader + - #91 - Fix a loader bug which prevented Layers from not implementing all XR + functions + - #95 - Guard config includes/defines (relates to #81, #92) + - #97 - Remove a constant static std::vector, use a std::array instead. +- Layers + - #84 - Fix Linux warning for apidump +- From OpenXR-Docs: + - #26 - Proposal for unbounded space and spatial anchor extensions (vendor + extensions) + +### Internal issues + +- General, Build, Other + - Makefile cleanups (internal MR 1469, 1489) + - Add release scripts (internal MR 1496) +- Registry + - Reserve Oculus extension numbers (internal MR 1493) + - Add Monado headless (vendor extension) (internal MR 1482) +- Loader + - Remove unnecessary `#ifdef _WIN32` in loader. (internal MR 1487) + +### New extensions + +- `XR_MND_headless` +- `XR_MSFT_spatial_anchor` +- `XR_MSFT_unbounded_reference_space` + +## OpenXR 1.0.0 release (29-July-2019) + +Incorporates spec changes from OpenXR 1.0, +all public pull requests incorporated in the 0.90 series, +and additional fixes and improvements not previously published. + +## Change log for OpenXR 0.90 provisional spec updates post-0.90.1 + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #40 - Update BUILDING.md with some Linux pre-requisites + - #43 - Make manifest file more compatible + - #44 - Remove pkg-config dependency from xlib backend + - #46 - Support building with "embedded" Python + - #48 - Install layers and pkg-config file on Linux + - #66 - Install the layers libraries on Linux + - #71 - Validation layer: fix logic error +- hello_xr + - #49 - Fix hello_xr to properly use two call idiom +- Loader + - #38 - Remove dead file-locking code + - #51 - Idiomatic Linux active_runtime.json search logic + - #55, #58, #68 - Purge std::map bracket operations that might do inadvertent + insertions + - #56 - Make `filesystem_util.cc` `#define UNICODE`-compatible + - #57 - Make it possible to bypass macro that checks which `filesystem` to use + - #60 - Fix build error with shlwapi function + - #62 - Don't limit contents of `XristanceCreateInfo` next chain + - #65 - Fix minor substr error + - #69 - Simplify loader + - #70, #76 - Make loader exception free + - #72 - filesystem: fix theoretical bug on Linux + - #73 - Loader proper UNICODE support + - #75 - Clang tidy + - #80 - Switchable exceptions + - #82 - Add folder properties to all CMake targets. + +## Change log for OpenXR 0.90.1 provisional spec update (8-May-2019) + +No API changes, and only minimal consistency changes to the spec/registry. +Mostly an update for tooling, layers, loader, and sample code. Header version +has been bumped to 43, but no symbols that should have actually been in use have +changed. + +### GitHub Pull Requests + +These had been integrated into the public repo incrementally. + +- General, Build, Other + - #8, #11, #12 - Improve BUILDING and README + - #9 - Make Vulkan SDK dependency optional + - #17 - Add install target to CMake files + - #17 - API dump layer, build: timespec extension fixes + - #19 - build: fix CMAKE_PRESENTATION_BACKEND default on linux + - #34 - list: Fix list test output +- validation layer + - #18, #22, #23 - Fix build and execution + - #24 - Fix crash and refactor +- hello_xr + - #13 - Do not query GL context API version before creating context + - #26 - Fix a warning +- Loader + - #3 - Don't cross 32/64 registry silos + - #14 - Initialize XrExtensionProperties array parameter for + rt_xrEnumerateInstanceExtensionProperties + - #20 - Fix Linux manifest file search + - #30 - Add default implementations of API functions to dispatch chains + - #32 - Avoid crash when evaluating layer disable environment vars + - #35 - Add 'unknown' strings to loader's *ToString fallback functions + - #36 - Allow null instance in xrGetInstanceProcAddr() for certain entry + points + - #39 - Default to static loader only on Windows + +### Internal Issues + +- General, Build, Other + - Unify (for the most part) the OpenXR and Vulkan generator scripts. (internal + MR 1166) + - List instance extensions in the "list" test. (internal MR 1169) + - Avoid dllexport for all apps compiled with `openxr_platform_defines.h` + (internal MR 1187) + - Don't offer `BUILD_SPECIFICATION` unless the spec makefile is there. + (internal MR 1179) + - Add simple input example to hello_xr. (internal MR 1178) + - Add a clang-format script for ease of development. +- API Registry and Headers + - Remove impossible and undocumented error codes. (internal MR 1185 and 1189) + - Mark layers in `XrFrameEndInfo` as optional. (internal MR 1151, internal + issue 899) + - Remove unused windows types from `openxr_platform.h` (internal MR 1197) + - Make `openxr_platform.h` include `openxr.h` on which it depends. (internal + MR 1140, internal issue 918) + - Remove unused, undocumented defines. (internal MR 1238, internal issue 1012) +- Loader + - Fix loader regkey search logic so 64bit application loads 64bit regkey + value. (internal MR 1180) + - Modify loader to be friendly to UWP (Universal Windows Platform) build + target. (internal MR 1198) + +## OpenXR 0.90.0 - Initial public provisional release at GDC diff --git a/Lumos/External/OpenXR-SDK/CMakeLists.txt b/Lumos/External/OpenXR-SDK/CMakeLists.txt new file mode 100644 index 000000000..44255b71d --- /dev/null +++ b/Lumos/External/OpenXR-SDK/CMakeLists.txt @@ -0,0 +1,134 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Author: +# + +# Note: This is the top-level CMake file for the OpenXR project. +# It should contain only definitions that are applicable to the +# entire project and includes for the sub-directories. + +cmake_minimum_required(VERSION 3.0) +project(OPENXR) + +find_package(PythonInterp 3) + +# Enable IDE GUI folders. "Helper targets" that don't have interesting source code should set their FOLDER property to this +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake predefined targets") +set(LOADER_FOLDER "Loader") +set(HELPER_FOLDER "Helpers") +set(CODEGEN_FOLDER "Generated") +set(TESTS_FOLDER "Tests") +set(API_LAYERS_FOLDER "Layers") +set(SAMPLES_FOLDER "Samples") + +option(BUILD_FORCE_GENERATION "Force re-generation of files even in the presence of pre-generated copies, replacing those copies." OFF) + +if(BUILD_FORCE_GENERATION AND NOT PYTHON_EXECUTABLE) + message(FATAL_ERROR "BUILD_FORCE_GENERATION requires Python") +endif() + +string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" CMAKE_GENERATOR_PLATFORM_UPPER) + +# Artifact organization +if(WIN32 OR ANDROID) + option(INSTALL_TO_ARCHITECTURE_PREFIXES "Install platform-specific files to architecture-specific directories, for packaging" OFF) +endif() + +if(WIN32 AND INSTALL_TO_ARCHITECTURE_PREFIXES) + unset(_UWP_SUFFIX) + if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(_UWP_SUFFIX _uwp) + endif() + if(CMAKE_GENERATOR_PLATFORM_UPPER MATCHES "ARM.*") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_PLATFORM ARM64) + else() + set(_PLATFORM ARM) + endif() + else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_PLATFORM x64) + else() + set(_PLATFORM Win32) + endif() + endif() + + include(GNUInstallDirs) + set(CMAKE_INSTALL_BINDIR ${_PLATFORM}${_UWP_SUFFIX}/${CMAKE_INSTALL_BINDIR}) + set(CMAKE_INSTALL_LIBDIR ${_PLATFORM}${_UWP_SUFFIX}/${CMAKE_INSTALL_LIBDIR}) + +elseif(ANDROID AND INSTALL_TO_ARCHITECTURE_PREFIXES) + # This organizes things like a prefab module + set(PREFAB_INSTALL_DIR prefab) + set(PREFAB_MODULE_INSTALL_DIR ${PREFAB_INSTALL_DIR}/modules/openxr_loader) + set(CMAKE_INSTALL_LIBDIR ${PREFAB_MODULE_INSTALL_DIR}/libs/android.${ANDROID_ABI} CACHE STRING "Where to install libraries") + set(CMAKE_INSTALL_BINDIR ${CMAKE_INSTALL_LIBDIR}) + set(CMAKE_INSTALL_INCLUDEDIR ${PREFAB_MODULE_INSTALL_DIR}/include) + + unset(NDK_MAJOR_VERSION) + if(CMAKE_ANDROID_NDK) + file(STRINGS "${CMAKE_ANDROID_NDK}/source.properties" NDK_PROPERTIES) + foreach(_line ${NDK_PROPERTIES}) + if("${_line}" MATCHES "Pkg.Revision = ([0-9]+)[.]([0-9]+)[.]([0-9]+)") + set(NDK_MAJOR_VERSION ${CMAKE_MATCH_1}) + endif() + endforeach() + else() + message(FATAL_ERROR "Please set CMAKE_ANDROID_NDK to your NDK root!") + endif() + if(NDK_MAJOR_VERSION) + message(STATUS "Building using NDK major version ${NDK_MAJOR_VERSION}") + else() + message(FATAL_ERROR "Could not parse the major version from ${CMAKE_ANDROID_NDK}/source.properties") + endif() + +elseif(NOT ANDROID) + include(GNUInstallDirs) +endif() + +add_subdirectory(include) +add_subdirectory(src) + +# uninstall target +if(NOT TARGET uninstall) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE + @ONLY) + add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) + set_target_properties(uninstall PROPERTIES FOLDER ${HELPER_FOLDER}) +endif() + +find_program(BASH_COMMAND NAMES bash) +if(BASH_COMMAND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/specification/Makefile") + option(BUILD_SPECIFICATION "Run './makeAllExts all' in the specification directory as part of the build - intended for one-step checking of spec changes" OFF) + if(BUILD_SPECIFICATION) + add_custom_target(spec-all ALL + ${BASH_COMMAND} ./makeAllExts all + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/specification" + VERBATIM + COMMENT "Running './makeAllExts all' in the specification directory" + USES_TERMINAL) + endif() +endif() + +if(ANDROID AND INSTALL_TO_ARCHITECTURE_PREFIXES) + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" DESTINATION META-INF COMPONENT License) +else() + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" DESTINATION share/doc/openxr COMPONENT License) +endif() diff --git a/Lumos/External/OpenXR-SDK/CODE_OF_CONDUCT.md b/Lumos/External/OpenXR-SDK/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..3742f93d2 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/CODE_OF_CONDUCT.md @@ -0,0 +1,12 @@ + + + +A reminder that this issue tracker is managed by the Khronos Group. +Interactions here should follow the Khronos Code of Conduct +([https://www.khronos.org/developers/code-of-conduct](https://www.khronos.org/developers/code-of-conduct)), +which prohibits aggressive or derogatory language. +Please keep the discussion friendly and civil. diff --git a/Lumos/External/OpenXR-SDK/COPYING.adoc b/Lumos/External/OpenXR-SDK/COPYING.adoc new file mode 100644 index 000000000..473e7fdc5 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/COPYING.adoc @@ -0,0 +1,123 @@ += COPYING.adoc for the Khronos Group OpenXR projects + +// Copyright (c) 2020-2023, The Khronos Group Inc. +// +// SPDX-License-Identifier: CC-BY-4.0 + +This document is shared across a number of OpenXR GitHub projects, as the +set of files in those projects is partially overlapping. +(There is a single "source of truth" internal Khronos GitLab repo these +GitHub repositories interact with.) + +== Licenses + +The OpenXR GitHub projects use several licenses. +In general, we work to maintain compliance with the +https://reuse.software/spec/[REUSE 3.0 specification] with clear copyright +holders and license identifier listed for each file, preferably in each +file. +Where this is not possible, or e.g. when we are using files unmodified from +other open-source projects, license data is listed: + +* in an adjacent file of the same name, with the additional extension + "`.license`" +* in the repository-wide "`.reuse/dep5`" copyright description + https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/["DEP5" + machine-readable copyright data] file. + +The https://github.com/fsfe/reuse-tool["`reuse`" command line tool] can be +used to create a software bill of materials in SPDX format from this data. +Note that this tool will typically exclude the generated files, so if the +BOM is important to you, you may consider using the +https://github.com/KhronosGroup/OpenXR-SDK[OpenXR-SDK] repository that +contains the API headers and the loader source with all generated files +pre-generated. + +The data in/adjacent to each file is the authoritative license and copyright +data. +However, for ease of understanding, the following general practices can be +observed. +(If in doubt, or if the following summary conflicts with the per-file data, +the per-file data remains authoritative.) + +* The source files (in asciidoctor and other formats) for the OpenXR + Specification, reference pages, and supporting documentation are licensed + under the Creative Commons Attribution 4.0 International License (SPDX + license identifier "`CC-BY-4.0`"). +* Header files, scripts, programs, XML files, and other tooling used or + generated as part of the build process is licensed under the Apache + License, Version 2.0. +* For compatibility with external developers working in GPLed projects who + have requested it, the main OpenXR headers, XML registry, and loader + source are licensed under a dual license with the SPDX license identifier + "`Apache-2.0 OR MIT`" . + Relevant files include: +** "`specification/registry/xr.xml`" +** "`include/openxr/openxr_platform_defines.h`" +** The generated OpenXR headers "`openxr.h`", "`openxr_platform.h`", and + "`openxr_reflection.h`". +** Source files in "`src/loader/`", and a few files in "`src/common/`". +** Generated source files used by the loader (including pre-generated in + OpenXR-SDK): "`common_config.h`", "`xr_generated_loader.cpp`", and + "`xr_generated_loader.hpp`". +* There are a few files adopted from other open source projects. + Such files continue under their original licenses, and appropriately + annotated in accordance with REUSE. +* Some generated, transient files produced during the course of building the + specification, headers, or other targets may not have copyrights. + These are typically very short asciidoc fragments describing parts of the + OpenXR API, and are incorporated by reference into specification or + reference page builds. + +Users outside Khronos who create and post OpenXR Specifications, whether +modified or not, should use the CC-BY-4.0 license on the output documents +(HTML, PDF, etc.) they generate. + + +== Frequently Asked Questions + +Q: Why are the HTML and PDF Specifications posted on Khronos' website under +a license which is neither CC-BY-4.0 nor Apache 2.0? + +A: The Specifications posted by Khronos in the OpenXR Registry are licensed +under the proprietary Khronos Specification License. +Only these Specifications are Ratified by the Khronos Board of Promoters, +and therefore they are the only Specifications covered by the Khronos +Intellectual Property Rights Policy. + + +Q: Does Khronos allow the creation and distribution of modified versions of +the OpenXR Specification, such as translations to other languages? + +A: Yes. +Such modified Specifications, since they are not created by Khronos, should +be placed under the CC-BY-4.0 license. +If you believe your modifications are of general interest, consider +contributing them back by making a pull request (PR) on the OpenXR-Docs +project. + + +Q: Can I contribute changes to the OpenXR Specification? + +A: Yes, by opening an Issue or Pull Request (PR) on the +link:https://github.com/KhronosGroup/OpenXR-Docs/[OpenXR-Docs] GitHub +project. +You must execute a click-through Contributor License Agreement, which brings +your changes under the umbrella of the Khronos IP policy. + + +Q: Can you change the license on your files so they're compatible with my +license? + +A: We are using a dual license license on `xr.xml`, the main API headers, +and the loader source files, to make them compatible with GPL-2.0- and +LGPL-2.0/2.1-licensed projects. +This replaces earlier approaches of an MIT-like license on the XML and +Apache 2.0 on all headers, and allows use of the SPDX license identifier +"`Apache-2.0 OR MIT`" to denote the license. + +If you *require* this same compatibility for use of other Apache-2.0 +licensed files in our repository, please raise an issue identifying the +files and we will consider changing those specific files to the dual license +as well. + diff --git a/Lumos/External/OpenXR-SDK/LICENSE b/Lumos/External/OpenXR-SDK/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/Apache-2.0.txt b/Lumos/External/OpenXR-SDK/LICENSES/Apache-2.0.txt new file mode 100644 index 000000000..527a83a23 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/Apache-2.0.txt @@ -0,0 +1,208 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, +AND DISTRIBUTION + + 1. Definitions. + + + +"License" shall mean the terms and conditions for use, reproduction, and distribution +as defined by Sections 1 through 9 of this document. + + + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + + + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct +or indirect, to cause the direction or management of such entity, whether +by contract or otherwise, or (ii) ownership of fifty percent (50%) or more +of the outstanding shares, or (iii) beneficial ownership of such entity. + + + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions +granted by this License. + + + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + + + +"Object" form shall mean any form resulting from mechanical transformation +or translation of a Source form, including but not limited to compiled object +code, generated documentation, and conversions to other media types. + + + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice that +is included in or attached to the work (an example is provided in the Appendix +below). + + + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative +Works shall not include works that remain separable from, or merely link (or +bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative +Works thereof, that is intentionally submitted to Licensor for inclusion in +the Work by the copyright owner or by an individual or Legal Entity authorized +to submit on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication +sent to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + + + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently incorporated +within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this +License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable copyright license to reproduce, prepare +Derivative Works of, publicly display, publicly perform, sublicense, and distribute +the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, +each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and otherwise +transfer the Work, where such license applies only to those patent claims +licensable by such Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work to which such +Contribution(s) was submitted. If You institute patent litigation against +any entity (including a cross-claim or counterclaim in a lawsuit) alleging +that the Work or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses granted to You +under this License for that Work shall terminate as of the date such litigation +is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or +Derivative Works thereof in any medium, with or without modifications, and +in Source or Object form, provided that You meet the following conditions: + +(a) You must give any other recipients of the Work or Derivative Works a copy +of this License; and + +(b) You must cause any modified files to carry prominent notices stating that +You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source +form of the Work, excluding those notices that do not pertain to any part +of the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its distribution, +then any Derivative Works that You distribute must include a readable copy +of the attribution notices contained within such NOTICE file, excluding those +notices that do not pertain to any part of the Derivative Works, in at least +one of the following places: within a NOTICE text file distributed as part +of the Derivative Works; within the Source form or documentation, if provided +along with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works +that You distribute, alongside or as an addendum to the NOTICE text from the +Work, provided that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, +or distribution of Your modifications, or for any such Derivative Works as +a whole, provided Your use, reproduction, and distribution of the Work otherwise +complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any +Contribution intentionally submitted for inclusion in the Work by You to the +Licensor shall be under the terms and conditions of this License, without +any additional terms or conditions. Notwithstanding the above, nothing herein +shall supersede or modify the terms of any separate license agreement you +may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, +trademarks, service marks, or product names of the Licensor, except as required +for reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to +in writing, Licensor provides the Work (and each Contributor provides its +Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied, including, without limitation, any warranties +or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR +A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness +of using or redistributing the Work and assume any risks associated with Your +exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether +in tort (including negligence), contract, or otherwise, unless required by +applicable law (such as deliberate and grossly negligent acts) or agreed to +in writing, shall any Contributor be liable to You for damages, including +any direct, indirect, special, incidental, or consequential damages of any +character arising as a result of this License or out of the use or inability +to use the Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all other commercial +damages or losses), even if such Contributor has been advised of the possibility +of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work +or Derivative Works thereof, You may choose to offer, and charge a fee for, +acceptance of support, warranty, indemnity, or other liability obligations +and/or rights consistent with this License. However, in accepting such obligations, +You may act only on Your own behalf and on Your sole responsibility, not on +behalf of any other Contributor, and only if You agree to indemnify, defend, +and hold each Contributor harmless for any liability incurred by, or claims +asserted against, such Contributor by reason of your accepting any such warranty +or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own identifying +information. (Don't include the brackets!) The text should be enclosed in +the appropriate comment syntax for the file format. We also recommend that +a file or class name and description of purpose be included on the same "printed +page" as the copyright notice for easier identification within third-party +archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/BSD-3-Clause.txt b/Lumos/External/OpenXR-SDK/LICENSES/BSD-3-Clause.txt new file mode 100644 index 000000000..0741db789 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,26 @@ +Copyright (c) . All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/BSL-1.0.txt b/Lumos/External/OpenXR-SDK/LICENSES/BSL-1.0.txt new file mode 100644 index 000000000..cff35365a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/BSL-1.0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, execute, +and transmit the Software, and to prepare derivative works of the Software, +and to permit third-parties to whom the Software is furnished to do so, all +subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, must +be included in all copies of the Software, in whole or in part, and all derivative +works of the Software, unless such copies or derivative works are solely in +the form of machine-executable object code generated by a source language +processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES +OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/CC-BY-4.0.txt b/Lumos/External/OpenXR-SDK/LICENSES/CC-BY-4.0.txt new file mode 100644 index 000000000..3f92dfc5f --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,324 @@ +Creative Commons Attribution 4.0 International Creative Commons Corporation +("Creative Commons") is not a law firm and does not provide legal services +or legal advice. Distribution of Creative Commons public licenses does not +create a lawyer-client or other relationship. Creative Commons makes its licenses +and related information available on an "as-is" basis. Creative Commons gives +no warranties regarding its licenses, any material licensed under their terms +and conditions, or any related information. Creative Commons disclaims all +liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions +that creators and other rights holders may use to share original works of +authorship and other material subject to copyright and certain other rights +specified in the public license below. The following considerations are for +informational purposes only, are not exhaustive, and do not form part of our +licenses. + +Considerations for licensors: Our public licenses are intended for use by +those authorized to give the public permission to use material in ways otherwise +restricted by copyright and certain other rights. Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license +they choose before applying it. Licensors should also secure all rights necessary +before applying our licenses so that the public can reuse the material as +expected. Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception +or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor +grants the public permission to use the licensed material under specified +terms and conditions. If the licensor's permission is not necessary for any +reason–for example, because of any applicable exception or limitation to copyright–then +that use is not regulated by the license. Our licenses grant only permissions +under copyright and certain other rights that a licensor has authority to +grant. Use of the licensed material may still be restricted for other reasons, +including because others have copyright or other rights in the material. A +licensor may make special requests, such as asking that all changes be marked +or described. Although not required by our licenses, you are encouraged to +respect those requests where reasonable. More considerations for the public +: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution +4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to +be bound by the terms and conditions of this Creative Commons Attribution +4.0 International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights +that is derived from or based upon the Licensed Material and in which the +Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar +Rights held by the Licensor. For purposes of this Public License, where the +Licensed Material is a musical work, performance, or sound recording, Adapted +Material is always produced where the Licensed Material is synched in timed +relation with a moving image. + +b. Adapter's License means the license You apply to Your Copyright and Similar +Rights in Your contributions to Adapted Material in accordance with the terms +and conditions of this Public License. + +c. Copyright and Similar Rights means copyright and/or similar rights closely +related to copyright including, without limitation, performance, broadcast, +sound recording, and Sui Generis Database Rights, without regard to how the +rights are labeled or categorized. For purposes of this Public License, the +rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. Effective Technological Measures means those measures that, in the absence +of proper authority, may not be circumvented under laws fulfilling obligations +under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, +and/or similar international agreements. + +e. Exceptions and Limitations means fair use, fair dealing, and/or any other +exception or limitation to Copyright and Similar Rights that applies to Your +use of the Licensed Material. + +f. Licensed Material means the artistic or literary work, database, or other +material to which the Licensor applied this Public License. + +g. Licensed Rights means the rights granted to You subject to the terms and +conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license. + +h. Licensor means the individual(s) or entity(ies) granting rights under this +Public License. + +i. Share means to provide material to the public by any means or process that +requires permission under the Licensed Rights, such as reproduction, public +display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways +that members of the public may access the material from a place and at a time +individually chosen by them. + +j. Sui Generis Database Rights means rights other than copyright resulting +from Directive 96/9/EC of the European Parliament and of the Council of 11 +March 1996 on the legal protection of databases, as amended and/or succeeded, +as well as other essentially equivalent rights anywhere in the world. + +k. You means the individual or entity exercising the Licensed Rights under +this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + +1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, +irrevocable license to exercise the Licensed Rights in the Licensed Material +to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions +and Limitations apply to Your use, this Public License does not apply, and +You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + +4. Media and formats; technical modifications allowed. The Licensor authorizes +You to exercise the Licensed Rights in all media and formats whether now known +or hereafter created, and to make technical modifications necessary to do +so. The Licensor waives and/or agrees not to assert any right or authority +to forbid You from making technical modifications necessary to exercise the +Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. For purposes of this Public License, simply +making modifications authorized by this Section 2(a)(4) never produces Adapted +Material. + + 5. Downstream recipients. + +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed +Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License. + +B. No downstream restrictions. You may not offer or impose any additional +or different terms or conditions on, or apply any Effective Technological +Measures to, the Licensed Material if doing so restricts exercise of the Licensed +Rights by any recipient of the Licensed Material. + +6. No endorsement. Nothing in this Public License constitutes or may be construed +as permission to assert or imply that You are, or that Your use of the Licensed +Material is, connected with, or sponsored, endorsed, or granted official status +by, the Licensor or others designated to receive attribution as provided in +Section 3(a)(1)(A)(i). + + b. Other rights. + +1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar personality +rights; however, to the extent possible, the Licensor waives and/or agrees +not to assert any such rights held by the Licensor to the limited extent necessary +to allow You to exercise the Licensed Rights, but not otherwise. + +2. Patent and trademark rights are not licensed under this Public License. + +3. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or through +a collecting society under any voluntary or waivable statutory or compulsory +licensing scheme. In all other cases the Licensor expressly reserves any right +to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following +conditions. + + a. Attribution. + +1. If You Share the Licensed Material (including in modified form), You must: + +A. retain the following if it is supplied by the Licensor with the Licensed +Material: + +i. identification of the creator(s) of the Licensed Material and any others +designated to receive attribution, in any reasonable manner requested by the +Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + +B. indicate if You modified the Licensed Material and retain an indication +of any previous modifications; and + +C. indicate the Licensed Material is licensed under this Public License, and +include the text of, or the URI or hyperlink to, this Public License. + +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a +URI or hyperlink to a resource that includes the required information. + +3. If requested by the Licensor, You must remove any of the information required +by Section 3(a)(1)(A) to the extent reasonably practicable. + +4. If You Share Adapted Material You produce, the Adapter's License You apply +must not prevent recipients of the Adapted Material from complying with this +Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to +Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database; + +b. if You include all or a substantial portion of the database contents in +a database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual contents) +is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or +a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, +the Licensor offers the Licensed Material as-is and as-available, and makes +no representations or warranties of any kind concerning the Licensed Material, +whether express, implied, statutory, or other. This includes, without limitation, +warranties of title, merchantability, fitness for a particular purpose, non-infringement, +absence of latent or other defects, accuracy, or the presence or absence of +errors, whether or not known or discoverable. Where disclaimers of warranties +are not allowed in full or in part, this disclaimer may not apply to You. + +b. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or otherwise +for any direct, special, indirect, incidental, consequential, punitive, exemplary, +or other losses, costs, expenses, or damages arising out of this Public License +or use of the Licensed Material, even if the Licensor has been advised of +the possibility of such losses, costs, expenses, or damages. Where a limitation +of liability is not allowed in full or in part, this limitation may not apply +to You. + +c. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most closely +approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section +6(a), it reinstates: + +1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + +c. For the avoidance of doubt, this Section 6(b) does not affect any right +the Licensor may have to seek remedies for Your violations of this Public +License. + +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License. + +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not +be interpreted to, reduce, limit, restrict, or impose conditions on any use +of the Licensed Material that could lawfully be made without permission under +this Public License. + +b. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent necessary +to make it enforceable. If the provision cannot be reformed, it shall be severed +from this Public License without affecting the enforceability of the remaining +terms and conditions. + +c. No term or condition of this Public License will be waived and no failure +to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation +upon, or waiver of, any privileges and immunities that apply to the Licensor +or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative +Commons may elect to apply one of its public licenses to material it publishes +and in those instances will be considered the "Licensor." The text of the +Creative Commons public licenses is dedicated to the public domain under the +CC0 Public Domain Dedication. Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative Commons" +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, +or agreements concerning use of licensed material. For the avoidance of doubt, +this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/CC0-1.0.txt b/Lumos/External/OpenXR-SDK/LICENSES/CC0-1.0.txt new file mode 100644 index 000000000..a343ccd43 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/CC0-1.0.txt @@ -0,0 +1,119 @@ +Creative Commons Legal Code + +CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES +NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE +AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION +ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE +OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS +LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION +OR WORKS PROVIDED HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive +Copyright and Related Rights (defined below) upon the creator and subsequent +owner(s) (each and all, an "owner") of an original work of authorship and/or +a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later claims +of infringement build upon, modify, incorporate in other works, reuse and +redistribute as freely as possible in any form whatsoever and for any purposes, +including without limitation commercial purposes. These owners may contribute +to the Commons to promote the ideal of a free culture and the further production +of creative, cultural and scientific works, or to gain reputation or greater +distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with +a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or +her Copyright and Related Rights in the Work and the meaning and intended +legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be protected +by copyright and related or neighboring rights ("Copyright and Related Rights"). +Copyright and Related Rights include, but are not limited to, the following: + +i. the right to reproduce, adapt, distribute, perform, display, communicate, +and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + +iii. publicity and privacy rights pertaining to a person's image or likeness +depicted in a Work; + +iv. rights protecting against unfair competition in regards to a Work, subject +to the limitations in paragraph 4(a), below; + +v. rights protecting the extraction, dissemination, use and reuse of data +in a Work; + +vi. database rights (such as those arising under Directive 96/9/EC of the +European Parliament and of the Council of 11 March 1996 on the legal protection +of databases, and under any national implementation thereof, including any +amended or successor version of such directive); and + +vii. other similar, equivalent or corresponding rights throughout the world +based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time extensions), +(iii) in any current or future medium and for any number of copies, and (iv) +for any purpose whatsoever, including without limitation commercial, advertising +or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the +benefit of each member of the public at large and to the detriment of Affirmer's +heirs and successors, fully intending that such Waiver shall not be subject +to revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account Affirmer's +express Statement of Purpose. In addition, to the extent the Waiver is so +judged Affirmer hereby grants to each affected person a royalty-free, non +transferable, non sublicensable, non exclusive, irrevocable and unconditional +license to exercise Affirmer's Copyright and Related Rights in the Work (i) +in all territories worldwide, (ii) for the maximum duration provided by applicable +law or treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional purposes +(the "License"). The License shall be deemed effective as of the date CC0 +was applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder of +the License, and in such case Affirmer hereby affirms that he or she will +not (i) exercise any of his or her remaining Copyright and Related Rights +in the Work or (ii) assert any associated claims and causes of action with +respect to the Work, in either case contrary to Affirmer's express Statement +of Purpose. + + 4. Limitations and Disclaimers. + +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, +licensed or otherwise affected by this document. + +b. Affirmer offers the Work as-is and makes no representations or warranties +of any kind concerning the Work, express, implied, statutory or otherwise, +including without limitation warranties of title, merchantability, fitness +for a particular purpose, non infringement, or the absence of latent or other +defects, accuracy, or the present or absence of errors, whether or not discoverable, +all to the greatest extent permissible under applicable law. + +c. Affirmer disclaims responsibility for clearing rights of other persons +that may apply to the Work or any use thereof, including without limitation +any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims +responsibility for obtaining any necessary consents, permissions or other +rights required for any use of the Work. + +d. Affirmer understands and acknowledges that Creative Commons is not a party +to this document and has no duty or obligation with respect to this CC0 or +use of the Work. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/ISC.txt b/Lumos/External/OpenXR-SDK/LICENSES/ISC.txt new file mode 100644 index 000000000..b9c199c98 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/ISC.txt @@ -0,0 +1,8 @@ +ISC License: + +Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") +Copyright (c) 1995-2003 by Internet Software Consortium + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-Khronos-Free-Use-License-for-Software-and-Documentation.txt b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-Khronos-Free-Use-License-for-Software-and-Documentation.txt new file mode 100644 index 000000000..31ca8feb5 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-Khronos-Free-Use-License-for-Software-and-Documentation.txt @@ -0,0 +1,18 @@ +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-KhronosSpecCopyright-WithNormativeWording-v10.txt b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-KhronosSpecCopyright-WithNormativeWording-v10.txt new file mode 100644 index 000000000..c0154fe30 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-KhronosSpecCopyright-WithNormativeWording-v10.txt @@ -0,0 +1,53 @@ +Copyright (c) 2017-2023, The Khronos Group Inc. + +This Specification is protected by copyright laws and contains material +proprietary to Khronos. +Except as described by these terms, it or any components may not be +reproduced, republished, distributed, transmitted, displayed, broadcast or +otherwise exploited in any manner without the express prior written +permission of Khronos. + +Khronos grants a conditional copyright license to use and reproduce the +unmodified Specification for any purpose, without fee or royalty, EXCEPT no +licenses to any patent, trademark or other intellectual property rights are +granted under these terms. + +Khronos makes no, and expressly disclaims any, representations or +warranties, express or implied, regarding this Specification, including, +without limitation: merchantability, fitness for a particular purpose, +non-infringement of any intellectual property, correctness, accuracy, +completeness, timeliness, and reliability. +Under no circumstances will Khronos, or any of its Promoters, Contributors +or Members, or their respective partners, officers, directors, employees, +agents or representatives be liable for any damages, whether direct, +indirect, special or consequential damages for lost revenues, lost profits, +or otherwise, arising from or in connection with these materials. + +The Khronos Intellectual Property Rights Policy defines the terms 'Scope', +'Compliant Portion', and 'Necessary Patent Claims'. + +Some parts of this Specification are purely informative and so are EXCLUDED +from the Scope of this Specification. +The <> section of +the <> defines how these parts of the Specification are +identified. + +Where this Specification uses technical terminology, defined in the +<> or otherwise, that refer to enabling technologies +that are not expressly set forth in this Specification, those enabling +technologies are EXCLUDED from the Scope of this Specification. +For clarity, enabling technologies not disclosed with particularity in this +Specification (e.g. semiconductor manufacturing technology, hardware +architecture, processor architecture or microarchitecture, memory +architecture, compiler technology, object oriented technology, basic +operating system technology, compression technology, algorithms, and so on) +are NOT to be considered expressly set forth; only those application program +interfaces and data structures disclosed with particularity are included in +the Scope of this Specification. + +For purposes of the Khronos Intellectual Property Rights Policy as it +relates to the definition of Necessary Patent Claims, all recommended or +optional features, behaviors and functionality set forth in this +Specification, if implemented, are considered to be included as Compliant +Portions. + diff --git a/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-jsoncpp-public-domain.txt b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-jsoncpp-public-domain.txt new file mode 100644 index 000000000..01681784f --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/LicenseRef-jsoncpp-public-domain.txt @@ -0,0 +1,16 @@ +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/MIT.txt b/Lumos/External/OpenXR-SDK/LICENSES/MIT.txt new file mode 100644 index 000000000..204b93da4 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/MIT.txt @@ -0,0 +1,19 @@ +MIT License Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/OFL-1.1-RFN.txt b/Lumos/External/OpenXR-SDK/LICENSES/OFL-1.1-RFN.txt new file mode 100644 index 000000000..084c9628a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/OFL-1.1-RFN.txt @@ -0,0 +1,90 @@ +Copyright (c) , (), + +with Reserved Font Name . This Font Software is licensed +under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +SIL OPEN FONT LICENSE + +Version 1.1 - 26 February 2007 + +PREAMBLE + +The goals of the Open Font License (OFL) are to stimulate worldwide development +of collaborative font projects, to support the font creation efforts of academic +and linguistic communities, and to provide a free and open framework in which +fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed +freely as long as they are not sold by themselves. The fonts, including any +derivative works, can be bundled, embedded, redistributed and/or sold with +any software provided that any reserved names are not used by derivative works. +The fonts and derivatives, however, cannot be released under any other type +of license. The requirement for fonts to remain under this license does not +apply to any document created using the fonts or their derivatives. + +DEFINITIONS + +"Font Software" refers to the set of files released by the Copyright Holder(s) +under this license and clearly marked as such. This may include source files, +build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright +statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting — in part or in whole — any of the components of the Original +Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in Original +or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, redistributed +and/or sold with any software, provided that each copy contains the above +copyright notice and this license. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine-readable +metadata fields within text or binary files as long as those fields can be +easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software +shall not be used to promote, endorse or advertise any Modified Version, except +to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) +or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION + +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Lumos/External/OpenXR-SDK/LICENSES/Unlicense.txt b/Lumos/External/OpenXR-SDK/LICENSES/Unlicense.txt new file mode 100644 index 000000000..24a8f9019 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/LICENSES/Unlicense.txt @@ -0,0 +1,20 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute +this software, either in source code form or as a compiled binary, for any +purpose, commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and +to the detriment of our heirs and successors. We intend this dedication to +be an overt act of relinquishment in perpetuity of all present and future +rights to this software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH +THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, +please refer to diff --git a/Lumos/External/OpenXR-SDK/README.md b/Lumos/External/OpenXR-SDK/README.md new file mode 100644 index 000000000..c3cd2289b --- /dev/null +++ b/Lumos/External/OpenXR-SDK/README.md @@ -0,0 +1,126 @@ +# OpenXR™ Software Development Kit (SDK) Project + + + +This repository contains OpenXR headers, as well as source code and build scripts +for the OpenXR loader. +It contains all generated source files and headers pre-generated for minimum dependencies. + +The authoritative public repository for this project is located at +. + +The public repository containing the scripts that generate the files in this repository +is located at +. +It hosts the public Issue tracker, and accepts patches (Pull Requests) from the +general public. +That repository is also where sample code (hello_xr) and API layer source can be found. + +**Note that this repo is effectively read-only: changes to this repo should be made in the [OpenXR-SDK-Source](https://github.com/KhronosGroup/OpenXR-SDK-Source) repo instead** + +## Directory Structure + +- `BUILDING.md` - Instructions for building the projects +- `README.md` - This file +- `COPYING.md` - Copyright and licensing information +- `CODE_OF_CONDUCT.md` - Code of Conduct +- `external/` - External code for projects in the repo +- `include/` - OpenXR header files +- `src/external/jsoncpp` - The jsoncpp project source code, an included dependency of the loader. +- `src/loader` - OpenXR loader code, **including generated code** + +## Building + +The project is set up to build using CMake. + +### (Optional) Building the OpenXR Loader as a DLL + +By default, the OpenXR loader is built as a static library on Windows and a dynamic library on other platforms. +To specify alternate behavior, define the CMake option `DYNAMIC_LOADER`, +e.g. by adding `-DDYNAMIC_LOADER=ON` or `-DDYNAMIC_LOADER=OFF` to your CMake command line. + +### Windows + +Building the OpenXR components in this tree on Windows is supported using +Visual Studio 2013 and newer. Before beginning, make sure the appropriate +"msbuild.exe" is in your PATH. Also, when generating the solutions/projects +using CMake, be sure to use the correct compiler version number. The +following table is provided to help you: + +| Visual Studio | Version Number | +| -------------------- |:--------------:| +| Visual Studio 2013 | 12 | +| Visual Studio 2015 | 14 | +| Visual Studio 2017 | 15 | + +Specific sample command lines for building follow. +If you're already familiar with the process of building a project with +CMake, you may skim or skip these instructions. + +#### Windows 64-bit + +First, generate the 64-bit solution and project files using CMake: + +```cmd +mkdir build\win64 +cd build\win64 +cmake -G "Visual Studio [Version Number] Win64" ..\.. +``` + +Finally, open the `build\win64\OPENXR.sln` in the Visual Studio to build the loader. + +#### Windows 32-bit + +First, generate the 32-bit solution and project files using CMake: + +```cmd +mkdir build\win32 +cd build\win32 +cmake -G "Visual Studio [Version Number]" ..\.. +``` + +Open the `build\win32\OPENXR.sln` in the Visual Studio to build the loader. + +### Linux + +The following set of Debian/Ubuntu packages provides all required libs for building for xlib or xcb with OpenGL and Vulkan support. + +- `build-essential` +- `cmake` (of _somewhat_ recent vintage, 3.10+ known working) +- `libgl1-mesa-dev` +- `libvulkan-dev` +- `libx11-xcb-dev` +- `libxcb-dri2-0-dev` +- `libxcb-glx0-dev` +- `libxcb-icccm4-dev` +- `libxcb-keysyms1-dev` +- `libxcb-randr0-dev` +- `libxrandr-dev` +- `libxxf86vm-dev` +- `mesa-common-dev` + +Specific sample command lines for building follow. +If you're already familiar with the process of building a project with +CMake, you may skim or skip these instructions. + +#### Linux Debug + +```sh +mkdir -p build/linux_debug +cd build/linux_debug +cmake -DCMAKE_BUILD_TYPE=Debug ../.. +make +``` + +#### Linux Release + +```sh +mkdir -p build/linux_release +cd build/linux_release +cmake -DCMAKE_BUILD_TYPE=Release ../.. +make +``` diff --git a/Lumos/External/OpenXR-SDK/include/CMakeLists.txt b/Lumos/External/OpenXR-SDK/include/CMakeLists.txt new file mode 100644 index 000000000..46f615acd --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (c) 2017 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Author: +# + +add_subdirectory(openxr) diff --git a/Lumos/External/OpenXR-SDK/include/generated_header_list.txt b/Lumos/External/OpenXR-SDK/include/generated_header_list.txt new file mode 100644 index 000000000..291d99b3e --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/generated_header_list.txt @@ -0,0 +1,5 @@ +openxr.h +openxr_platform.h +openxr_reflection.h +openxr_reflection_structs.h +openxr_reflection_parent_structs.h diff --git a/Lumos/External/OpenXR-SDK/include/generated_header_list.txt.license b/Lumos/External/OpenXR-SDK/include/generated_header_list.txt.license new file mode 100644 index 000000000..f19e71604 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/generated_header_list.txt.license @@ -0,0 +1,5 @@ +Copyright (c) 2017-2023, The Khronos Group Inc. + +SPDX-License-Identifier: Apache-2.0 + +License is being kept in a separate file here because the txt file is parsed by multiple scripts. diff --git a/Lumos/External/OpenXR-SDK/include/openxr/CMakeLists.txt b/Lumos/External/OpenXR-SDK/include/openxr/CMakeLists.txt new file mode 100644 index 000000000..b1718f60e --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/CMakeLists.txt @@ -0,0 +1,105 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Author: +# + +# Copy the openxr_platform_defines.h file and place it in the binary (build) directory. +configure_file(openxr_platform_defines.h ${CMAKE_CURRENT_BINARY_DIR}/openxr_platform_defines.h COPYONLY) + +# Generate OpenXR header files. +# Get the list of generated headers from the common single-point-of-truth +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/../generated_header_list.txt HEADERS LENGTH_MINIMUM 8) + +set(HAVE_PREGENERATED TRUE) +set(SOURCE_HEADERS) +foreach(output ${HEADERS}) + list(APPEND SOURCE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${output}) + if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${output}) + set(HAVE_PREGENERATED FALSE) + endif() +endforeach() + +set(XR_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) +if(HAVE_PREGENERATED AND NOT BUILD_FORCE_GENERATION) + add_custom_target(generate_openxr_header + COMMENT "Using found pre-generated OpenXR headers.") + + set(INSTALL_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/openxr_platform_defines.h + ${SOURCE_HEADERS}) +else() + + set(GENERATED_HEADERS) + set(OUTPUT_STAMPS) + # Copy the openxr_platform_defines.h file and place it in the binary (build) directory. + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/openxr_platform_defines.h + ${CMAKE_CURRENT_BINARY_DIR}/openxr_platform_defines.h + COPYONLY) + + # Generate the header files and place it in the binary (build) directory. + file(GLOB _templates LIST_DIRECTORIES false CONFIGURE_DEPENDS ${XR_ROOT}/specification/scripts/template_*) + foreach(output ${HEADERS}) + if("${output}" MATCHES "reflection") + set(_extra_deps ${XR_ROOT}/specification/scripts/jinja_helpers.py ${_templates}) + else() + unset(_extra_deps) + endif() + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${output} + COMMAND ${PYTHON_EXECUTABLE} ${XR_ROOT}/specification/scripts/genxr.py + -registry ${XR_ROOT}/specification/registry/xr.xml + -o ${CMAKE_CURRENT_BINARY_DIR} ${output} + DEPENDS + ${XR_ROOT}/specification/scripts/genxr.py + ${XR_ROOT}/specification/scripts/cgenerator.py + ${XR_ROOT}/specification/scripts/creflectiongenerator.py + ${XR_ROOT}/specification/scripts/generator.py + ${XR_ROOT}/specification/scripts/reg.py + ${XR_ROOT}/specification/registry/xr.xml + ${_extra_deps} + COMMENT "Generating ${CMAKE_CURRENT_BINARY_DIR}/${output}" + ) + list(APPEND GENERATED_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/${output}") + endforeach() + + set_source_files_properties( + ${GENERATED_HEADERS} + PROPERTIES GENERATED TRUE + ) + + set(INSTALL_HEADERS + ${CMAKE_CURRENT_BINARY_DIR}/openxr_platform_defines.h + ${GENERATED_HEADERS}) + + + # Define generate_openxr_header target to generate the OpenXR header files. + # Other targets that need the OpenXR headers should use generate_openxr_header as a dependency. + add_custom_target(generate_openxr_header + SOURCES ${XR_ROOT}/specification/registry/xr.xml + DEPENDS + ${GENERATED_HEADERS} + ${OUTPUT_STAMPS} + ) +endif() +set_target_properties(generate_openxr_header PROPERTIES FOLDER ${CODEGEN_FOLDER}) + +# make cache variables for install destinations +include(GNUInstallDirs) + +INSTALL(FILES ${INSTALL_HEADERS} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/openxr + COMPONENT Headers +) diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr.h new file mode 100644 index 000000000..01c32cb27 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr.h @@ -0,0 +1,5613 @@ +#ifndef OPENXR_H_ +#define OPENXR_H_ 1 + +/* +** Copyright 2017-2023 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +/* +** This header is generated from the Khronos OpenXR XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +#define XR_VERSION_1_0 1 +#include "openxr_platform_defines.h" +#define XR_MAKE_VERSION(major, minor, patch) \ + ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL)) + +// OpenXR current version number. +#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 27) + +#define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL) +#define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL) +#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL) + +#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16 + + +#if !defined(XR_NULL_HANDLE) +#if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED + #define XR_NULL_HANDLE nullptr +#else + #define XR_NULL_HANDLE 0 +#endif +#endif + + + +#define XR_NULL_SYSTEM_ID 0 + + +#define XR_NULL_PATH 0 + + +#define XR_SUCCEEDED(result) ((result) >= 0) + + +#define XR_FAILED(result) ((result) < 0) + + +#define XR_UNQUALIFIED_SUCCESS(result) ((result) == 0) + + +#define XR_NO_DURATION 0 + + +#define XR_INFINITE_DURATION 0x7fffffffffffffffLL + + +#define XR_MIN_HAPTIC_DURATION -1 + + +#define XR_FREQUENCY_UNSPECIFIED 0 + + +#define XR_MAX_EVENT_DATA_SIZE sizeof(XrEventDataBuffer) + + +#if !defined(XR_MAY_ALIAS) +#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4)) +#define XR_MAY_ALIAS __attribute__((__may_alias__)) +#else +#define XR_MAY_ALIAS +#endif +#endif + + +#if !defined(XR_DEFINE_HANDLE) +#if (XR_PTR_SIZE == 8) + #define XR_DEFINE_HANDLE(object) typedef struct object##_T* object; +#else + #define XR_DEFINE_HANDLE(object) typedef uint64_t object; +#endif +#endif + + + +#if !defined(XR_DEFINE_ATOM) + #define XR_DEFINE_ATOM(object) typedef uint64_t object; +#endif + + +typedef uint64_t XrVersion; +typedef uint64_t XrFlags64; +XR_DEFINE_ATOM(XrSystemId) +typedef uint32_t XrBool32; +XR_DEFINE_ATOM(XrPath) +typedef int64_t XrTime; +typedef int64_t XrDuration; +XR_DEFINE_HANDLE(XrInstance) +XR_DEFINE_HANDLE(XrSession) +XR_DEFINE_HANDLE(XrSpace) +XR_DEFINE_HANDLE(XrAction) +XR_DEFINE_HANDLE(XrSwapchain) +XR_DEFINE_HANDLE(XrActionSet) +#define XR_TRUE 1 +#define XR_FALSE 0 +#define XR_MAX_EXTENSION_NAME_SIZE 128 +#define XR_MAX_API_LAYER_NAME_SIZE 256 +#define XR_MAX_API_LAYER_DESCRIPTION_SIZE 256 +#define XR_MAX_SYSTEM_NAME_SIZE 256 +#define XR_MAX_APPLICATION_NAME_SIZE 128 +#define XR_MAX_ENGINE_NAME_SIZE 128 +#define XR_MAX_RUNTIME_NAME_SIZE 128 +#define XR_MAX_PATH_LENGTH 256 +#define XR_MAX_STRUCTURE_NAME_SIZE 64 +#define XR_MAX_RESULT_STRING_SIZE 64 +#define XR_MAX_ACTION_SET_NAME_SIZE 64 +#define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128 +#define XR_MAX_ACTION_NAME_SIZE 64 +#define XR_MAX_LOCALIZED_ACTION_NAME_SIZE 128 + +typedef enum XrResult { + XR_SUCCESS = 0, + XR_TIMEOUT_EXPIRED = 1, + XR_SESSION_LOSS_PENDING = 3, + XR_EVENT_UNAVAILABLE = 4, + XR_SPACE_BOUNDS_UNAVAILABLE = 7, + XR_SESSION_NOT_FOCUSED = 8, + XR_FRAME_DISCARDED = 9, + XR_ERROR_VALIDATION_FAILURE = -1, + XR_ERROR_RUNTIME_FAILURE = -2, + XR_ERROR_OUT_OF_MEMORY = -3, + XR_ERROR_API_VERSION_UNSUPPORTED = -4, + XR_ERROR_INITIALIZATION_FAILED = -6, + XR_ERROR_FUNCTION_UNSUPPORTED = -7, + XR_ERROR_FEATURE_UNSUPPORTED = -8, + XR_ERROR_EXTENSION_NOT_PRESENT = -9, + XR_ERROR_LIMIT_REACHED = -10, + XR_ERROR_SIZE_INSUFFICIENT = -11, + XR_ERROR_HANDLE_INVALID = -12, + XR_ERROR_INSTANCE_LOST = -13, + XR_ERROR_SESSION_RUNNING = -14, + XR_ERROR_SESSION_NOT_RUNNING = -16, + XR_ERROR_SESSION_LOST = -17, + XR_ERROR_SYSTEM_INVALID = -18, + XR_ERROR_PATH_INVALID = -19, + XR_ERROR_PATH_COUNT_EXCEEDED = -20, + XR_ERROR_PATH_FORMAT_INVALID = -21, + XR_ERROR_PATH_UNSUPPORTED = -22, + XR_ERROR_LAYER_INVALID = -23, + XR_ERROR_LAYER_LIMIT_EXCEEDED = -24, + XR_ERROR_SWAPCHAIN_RECT_INVALID = -25, + XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26, + XR_ERROR_ACTION_TYPE_MISMATCH = -27, + XR_ERROR_SESSION_NOT_READY = -28, + XR_ERROR_SESSION_NOT_STOPPING = -29, + XR_ERROR_TIME_INVALID = -30, + XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31, + XR_ERROR_FILE_ACCESS_ERROR = -32, + XR_ERROR_FILE_CONTENTS_INVALID = -33, + XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34, + XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35, + XR_ERROR_API_LAYER_NOT_PRESENT = -36, + XR_ERROR_CALL_ORDER_INVALID = -37, + XR_ERROR_GRAPHICS_DEVICE_INVALID = -38, + XR_ERROR_POSE_INVALID = -39, + XR_ERROR_INDEX_OUT_OF_RANGE = -40, + XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41, + XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42, + XR_ERROR_NAME_DUPLICATED = -44, + XR_ERROR_NAME_INVALID = -45, + XR_ERROR_ACTIONSET_NOT_ATTACHED = -46, + XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47, + XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48, + XR_ERROR_LOCALIZED_NAME_INVALID = -49, + XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50, + XR_ERROR_RUNTIME_UNAVAILABLE = -51, + XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000, + XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001, + XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001, + XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000, + XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000, + XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000, + XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000, + XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001, + XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002, + XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003, + XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004, + XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005, + XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000, + XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000, + XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB = -1000113000, + XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB = -1000113001, + XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB = -1000113002, + XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB = -1000113003, + XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000, + XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001, + XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002, + XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB = -1000118003, + XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB = -1000118004, + XR_ERROR_UNKNOWN_PASSTHROUGH_FB = -1000118050, + XR_ERROR_RENDER_MODEL_KEY_INVALID_FB = -1000119000, + XR_RENDER_MODEL_UNAVAILABLE_FB = 1000119020, + XR_ERROR_MARKER_NOT_TRACKED_VARJO = -1000124000, + XR_ERROR_MARKER_ID_INVALID_VARJO = -1000124001, + XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001, + XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002, + XR_ERROR_SPACE_MAPPING_INSUFFICIENT_FB = -1000169000, + XR_ERROR_SPACE_LOCALIZATION_FAILED_FB = -1000169001, + XR_ERROR_SPACE_NETWORK_TIMEOUT_FB = -1000169002, + XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB = -1000169003, + XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB = -1000169004, + XR_ERROR_HINT_ALREADY_SET_QCOM = -1000306000, + XR_RESULT_MAX_ENUM = 0x7FFFFFFF +} XrResult; + +typedef enum XrStructureType { + XR_TYPE_UNKNOWN = 0, + XR_TYPE_API_LAYER_PROPERTIES = 1, + XR_TYPE_EXTENSION_PROPERTIES = 2, + XR_TYPE_INSTANCE_CREATE_INFO = 3, + XR_TYPE_SYSTEM_GET_INFO = 4, + XR_TYPE_SYSTEM_PROPERTIES = 5, + XR_TYPE_VIEW_LOCATE_INFO = 6, + XR_TYPE_VIEW = 7, + XR_TYPE_SESSION_CREATE_INFO = 8, + XR_TYPE_SWAPCHAIN_CREATE_INFO = 9, + XR_TYPE_SESSION_BEGIN_INFO = 10, + XR_TYPE_VIEW_STATE = 11, + XR_TYPE_FRAME_END_INFO = 12, + XR_TYPE_HAPTIC_VIBRATION = 13, + XR_TYPE_EVENT_DATA_BUFFER = 16, + XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17, + XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18, + XR_TYPE_ACTION_STATE_BOOLEAN = 23, + XR_TYPE_ACTION_STATE_FLOAT = 24, + XR_TYPE_ACTION_STATE_VECTOR2F = 25, + XR_TYPE_ACTION_STATE_POSE = 27, + XR_TYPE_ACTION_SET_CREATE_INFO = 28, + XR_TYPE_ACTION_CREATE_INFO = 29, + XR_TYPE_INSTANCE_PROPERTIES = 32, + XR_TYPE_FRAME_WAIT_INFO = 33, + XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35, + XR_TYPE_COMPOSITION_LAYER_QUAD = 36, + XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37, + XR_TYPE_ACTION_SPACE_CREATE_INFO = 38, + XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40, + XR_TYPE_VIEW_CONFIGURATION_VIEW = 41, + XR_TYPE_SPACE_LOCATION = 42, + XR_TYPE_SPACE_VELOCITY = 43, + XR_TYPE_FRAME_STATE = 44, + XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45, + XR_TYPE_FRAME_BEGIN_INFO = 46, + XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48, + XR_TYPE_EVENT_DATA_EVENTS_LOST = 49, + XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51, + XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52, + XR_TYPE_INTERACTION_PROFILE_STATE = 53, + XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55, + XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56, + XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57, + XR_TYPE_ACTION_STATE_GET_INFO = 58, + XR_TYPE_HAPTIC_ACTION_INFO = 59, + XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60, + XR_TYPE_ACTIONS_SYNC_INFO = 61, + XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62, + XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63, + XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000, + XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000, + XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000, + XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR = 1000014000, + XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT = 1000015000, + XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000, + XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000, + XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000019000, + XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000019001, + XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000019002, + XR_TYPE_DEBUG_UTILS_LABEL_EXT = 1000019003, + XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR = 1000023000, + XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR = 1000023001, + XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR = 1000023002, + XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR = 1000023003, + XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR = 1000023004, + XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR = 1000023005, + XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR = 1000024001, + XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR = 1000024002, + XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR = 1000024003, + XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000, + XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001, + XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002, + XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000, + XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001, + XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002, + XR_TYPE_GRAPHICS_BINDING_D3D12_KHR = 1000028000, + XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR = 1000028001, + XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR = 1000028002, + XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT = 1000030000, + XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT = 1000030001, + XR_TYPE_VISIBILITY_MASK_KHR = 1000031000, + XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR = 1000031001, + XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX = 1000033000, + XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX = 1000033003, + XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000, + XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000, + XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001, + XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB = 1000040000, + XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB = 1000041001, + XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000, + XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004, + XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000, + XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT = 1000049001, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT = 1000049002, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT = 1000049003, + XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000, + XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001, + XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002, + XR_TYPE_HAND_JOINT_LOCATIONS_EXT = 1000051003, + XR_TYPE_HAND_JOINT_VELOCITIES_EXT = 1000051004, + XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT = 1000052000, + XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT = 1000052001, + XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT = 1000052002, + XR_TYPE_HAND_MESH_MSFT = 1000052003, + XR_TYPE_HAND_POSE_TYPE_INFO_MSFT = 1000052004, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT = 1000053000, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT = 1000053001, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT = 1000053002, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT = 1000053003, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT = 1000053004, + XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT = 1000053005, + XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT = 1000055000, + XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT = 1000055001, + XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT = 1000055002, + XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT = 1000055003, + XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004, + XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000, + XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000, + XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT = 1000066000, + XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001, + XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000, + XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000, + XR_TYPE_BODY_TRACKER_CREATE_INFO_FB = 1000076001, + XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB = 1000076002, + XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB = 1000076004, + XR_TYPE_BODY_JOINT_LOCATIONS_FB = 1000076005, + XR_TYPE_BODY_SKELETON_FB = 1000076006, + XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT = 1000078000, + XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000, + XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000, + XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000, + XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000, + XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001, + XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003, + XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000, + XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000, + XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001, + XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002, + XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003, + XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004, + XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005, + XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006, + XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007, + XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008, + XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009, + XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010, + XR_TYPE_SCENE_PLANES_MSFT = 1000097011, + XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012, + XR_TYPE_SCENE_MESHES_MSFT = 1000097013, + XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014, + XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015, + XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016, + XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017, + XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018, + XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000, + XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001, + XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000, + XR_TYPE_VIVE_TRACKER_PATHS_HTCX = 1000103000, + XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX = 1000103001, + XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000, + XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001, + XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002, + XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000, + XR_TYPE_HAND_TRACKING_MESH_FB = 1000110001, + XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003, + XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001, + XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000, + XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB = 1000113004, + XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB = 1000113003, + XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB = 1000113007, + XR_TYPE_SPACE_COMPONENT_STATUS_FB = 1000113001, + XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB = 1000113005, + XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB = 1000113006, + XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000, + XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001, + XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002, + XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB = 1000115000, + XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB = 1000116009, + XR_TYPE_KEYBOARD_TRACKING_QUERY_FB = 1000116004, + XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB = 1000116002, + XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB = 1000117001, + XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB = 1000118000, + XR_TYPE_PASSTHROUGH_CREATE_INFO_FB = 1000118001, + XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB = 1000118002, + XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB = 1000118003, + XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB = 1000118004, + XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB = 1000118005, + XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB = 1000118006, + XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020, + XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021, + XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022, + XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB = 1000118023, + XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030, + XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000, + XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001, + XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002, + XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003, + XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004, + XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB = 1000119005, + XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000, + XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000, + XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001, + XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002, + XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000, + XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO = 1000124000, + XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO = 1000124001, + XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002, + XR_TYPE_FRAME_END_INFO_ML = 1000135000, + XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML = 1000136000, + XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML = 1000137000, + XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000, + XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001, + XR_TYPE_SPACE_QUERY_INFO_FB = 1000156001, + XR_TYPE_SPACE_QUERY_RESULTS_FB = 1000156002, + XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB = 1000156003, + XR_TYPE_SPACE_UUID_FILTER_INFO_FB = 1000156054, + XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB = 1000156052, + XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB = 1000156103, + XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB = 1000156104, + XR_TYPE_SPACE_SAVE_INFO_FB = 1000158000, + XR_TYPE_SPACE_ERASE_INFO_FB = 1000158001, + XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB = 1000158106, + XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB = 1000158107, + XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000, + XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000, + XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000, + XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB = 1000163000, + XR_TYPE_SPACE_SHARE_INFO_FB = 1000169001, + XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB = 1000169002, + XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000, + XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001, + XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB = 1000173001, + XR_TYPE_SEMANTIC_LABELS_FB = 1000175000, + XR_TYPE_ROOM_LAYOUT_FB = 1000175001, + XR_TYPE_BOUNDARY_2D_FB = 1000175002, + XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000, + XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB = 1000198001, + XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB = 1000198050, + XR_TYPE_SPACE_CONTAINER_FB = 1000199000, + XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META = 1000200000, + XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META = 1000200001, + XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META = 1000200002, + XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB = 1000201004, + XR_TYPE_FACE_TRACKER_CREATE_INFO_FB = 1000201005, + XR_TYPE_FACE_EXPRESSION_INFO_FB = 1000201002, + XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB = 1000201006, + XR_TYPE_EYE_TRACKER_CREATE_INFO_FB = 1000202001, + XR_TYPE_EYE_GAZES_INFO_FB = 1000202002, + XR_TYPE_EYE_GAZES_FB = 1000202003, + XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB = 1000202004, + XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002, + XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB = 1000204000, + XR_TYPE_HAPTIC_PCM_VIBRATION_FB = 1000209001, + XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB = 1000209002, + XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB = 1000212000, + XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META = 1000216000, + XR_TYPE_EXTERNAL_CAMERA_OCULUS = 1000226000, + XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META = 1000227000, + XR_TYPE_PERFORMANCE_METRICS_STATE_META = 1000232001, + XR_TYPE_PERFORMANCE_METRICS_COUNTER_META = 1000232002, + XR_TYPE_SPACE_LIST_SAVE_INFO_FB = 1000238000, + XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB = 1000238001, + XR_TYPE_SPACE_USER_CREATE_INFO_FB = 1000241001, + XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META = 1000245000, + XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC = 1000317001, + XR_TYPE_PASSTHROUGH_COLOR_HTC = 1000317002, + XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC = 1000317003, + XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC = 1000317004, + XR_TYPE_FOVEATION_APPLY_INFO_HTC = 1000318000, + XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC = 1000318001, + XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC = 1000318002, + XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT = 1000373000, + XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX = 1000375000, + XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX = 1000375001, + XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, + XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, + XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, + XR_TYPE_DEVICE_PCM_SAMPLE_RATE_GET_INFO_FB = XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB, + XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} XrStructureType; + +typedef enum XrFormFactor { + XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY = 1, + XR_FORM_FACTOR_HANDHELD_DISPLAY = 2, + XR_FORM_FACTOR_MAX_ENUM = 0x7FFFFFFF +} XrFormFactor; + +typedef enum XrViewConfigurationType { + XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO = 1, + XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO = 2, + XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO = 1000037000, + XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT = 1000054000, + XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} XrViewConfigurationType; + +typedef enum XrEnvironmentBlendMode { + XR_ENVIRONMENT_BLEND_MODE_OPAQUE = 1, + XR_ENVIRONMENT_BLEND_MODE_ADDITIVE = 2, + XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND = 3, + XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM = 0x7FFFFFFF +} XrEnvironmentBlendMode; + +typedef enum XrReferenceSpaceType { + XR_REFERENCE_SPACE_TYPE_VIEW = 1, + XR_REFERENCE_SPACE_TYPE_LOCAL = 2, + XR_REFERENCE_SPACE_TYPE_STAGE = 3, + XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000, + XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000, + XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT = 1000426000, + XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF +} XrReferenceSpaceType; + +typedef enum XrActionType { + XR_ACTION_TYPE_BOOLEAN_INPUT = 1, + XR_ACTION_TYPE_FLOAT_INPUT = 2, + XR_ACTION_TYPE_VECTOR2F_INPUT = 3, + XR_ACTION_TYPE_POSE_INPUT = 4, + XR_ACTION_TYPE_VIBRATION_OUTPUT = 100, + XR_ACTION_TYPE_MAX_ENUM = 0x7FFFFFFF +} XrActionType; + +typedef enum XrEyeVisibility { + XR_EYE_VISIBILITY_BOTH = 0, + XR_EYE_VISIBILITY_LEFT = 1, + XR_EYE_VISIBILITY_RIGHT = 2, + XR_EYE_VISIBILITY_MAX_ENUM = 0x7FFFFFFF +} XrEyeVisibility; + +typedef enum XrSessionState { + XR_SESSION_STATE_UNKNOWN = 0, + XR_SESSION_STATE_IDLE = 1, + XR_SESSION_STATE_READY = 2, + XR_SESSION_STATE_SYNCHRONIZED = 3, + XR_SESSION_STATE_VISIBLE = 4, + XR_SESSION_STATE_FOCUSED = 5, + XR_SESSION_STATE_STOPPING = 6, + XR_SESSION_STATE_LOSS_PENDING = 7, + XR_SESSION_STATE_EXITING = 8, + XR_SESSION_STATE_MAX_ENUM = 0x7FFFFFFF +} XrSessionState; + +typedef enum XrObjectType { + XR_OBJECT_TYPE_UNKNOWN = 0, + XR_OBJECT_TYPE_INSTANCE = 1, + XR_OBJECT_TYPE_SESSION = 2, + XR_OBJECT_TYPE_SWAPCHAIN = 3, + XR_OBJECT_TYPE_SPACE = 4, + XR_OBJECT_TYPE_ACTION_SET = 5, + XR_OBJECT_TYPE_ACTION = 6, + XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000, + XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000, + XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT = 1000049000, + XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000, + XR_OBJECT_TYPE_BODY_TRACKER_FB = 1000076000, + XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000, + XR_OBJECT_TYPE_SCENE_MSFT = 1000097001, + XR_OBJECT_TYPE_FACIAL_TRACKER_HTC = 1000104000, + XR_OBJECT_TYPE_FOVEATION_PROFILE_FB = 1000114000, + XR_OBJECT_TYPE_TRIANGLE_MESH_FB = 1000117000, + XR_OBJECT_TYPE_PASSTHROUGH_FB = 1000118000, + XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB = 1000118002, + XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB = 1000118004, + XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT = 1000142000, + XR_OBJECT_TYPE_FACE_TRACKER_FB = 1000201000, + XR_OBJECT_TYPE_EYE_TRACKER_FB = 1000202000, + XR_OBJECT_TYPE_SPACE_USER_FB = 1000241000, + XR_OBJECT_TYPE_PASSTHROUGH_HTC = 1000317000, + XR_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF +} XrObjectType; +typedef XrFlags64 XrInstanceCreateFlags; + +// Flag bits for XrInstanceCreateFlags + +typedef XrFlags64 XrSessionCreateFlags; + +// Flag bits for XrSessionCreateFlags + +typedef XrFlags64 XrSpaceVelocityFlags; + +// Flag bits for XrSpaceVelocityFlags +static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_LINEAR_VALID_BIT = 0x00000001; +static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_ANGULAR_VALID_BIT = 0x00000002; + +typedef XrFlags64 XrSpaceLocationFlags; + +// Flag bits for XrSpaceLocationFlags +static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001; +static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002; +static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004; +static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008; + +typedef XrFlags64 XrSwapchainCreateFlags; + +// Flag bits for XrSwapchainCreateFlags +static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT = 0x00000001; +static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT = 0x00000002; + +typedef XrFlags64 XrSwapchainUsageFlags; + +// Flag bits for XrSwapchainUsageFlags +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT = 0x00000001; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000002; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT = 0x00000004; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT = 0x00000008; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT = 0x00000010; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_SAMPLED_BIT = 0x00000020; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT = 0x00000040; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND = 0x00000080; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR = 0x00000080; // alias of XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND + +typedef XrFlags64 XrCompositionLayerFlags; + +// Flag bits for XrCompositionLayerFlags +static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT = 0x00000001; +static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT = 0x00000002; +static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT = 0x00000004; + +typedef XrFlags64 XrViewStateFlags; + +// Flag bits for XrViewStateFlags +static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_VALID_BIT = 0x00000001; +static const XrViewStateFlags XR_VIEW_STATE_POSITION_VALID_BIT = 0x00000002; +static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_TRACKED_BIT = 0x00000004; +static const XrViewStateFlags XR_VIEW_STATE_POSITION_TRACKED_BIT = 0x00000008; + +typedef XrFlags64 XrInputSourceLocalizedNameFlags; + +// Flag bits for XrInputSourceLocalizedNameFlags +static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT = 0x00000001; +static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT = 0x00000002; +static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT = 0x00000004; + +typedef void (XRAPI_PTR *PFN_xrVoidFunction)(void); +typedef struct XrApiLayerProperties { + XrStructureType type; + void* XR_MAY_ALIAS next; + char layerName[XR_MAX_API_LAYER_NAME_SIZE]; + XrVersion specVersion; + uint32_t layerVersion; + char description[XR_MAX_API_LAYER_DESCRIPTION_SIZE]; +} XrApiLayerProperties; + +typedef struct XrExtensionProperties { + XrStructureType type; + void* XR_MAY_ALIAS next; + char extensionName[XR_MAX_EXTENSION_NAME_SIZE]; + uint32_t extensionVersion; +} XrExtensionProperties; + +typedef struct XrApplicationInfo { + char applicationName[XR_MAX_APPLICATION_NAME_SIZE]; + uint32_t applicationVersion; + char engineName[XR_MAX_ENGINE_NAME_SIZE]; + uint32_t engineVersion; + XrVersion apiVersion; +} XrApplicationInfo; + +typedef struct XrInstanceCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrInstanceCreateFlags createFlags; + XrApplicationInfo applicationInfo; + uint32_t enabledApiLayerCount; + const char* const* enabledApiLayerNames; + uint32_t enabledExtensionCount; + const char* const* enabledExtensionNames; +} XrInstanceCreateInfo; + +typedef struct XrInstanceProperties { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVersion runtimeVersion; + char runtimeName[XR_MAX_RUNTIME_NAME_SIZE]; +} XrInstanceProperties; + +typedef struct XrEventDataBuffer { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint8_t varying[4000]; +} XrEventDataBuffer; + +typedef struct XrSystemGetInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFormFactor formFactor; +} XrSystemGetInfo; + +typedef struct XrSystemGraphicsProperties { + uint32_t maxSwapchainImageHeight; + uint32_t maxSwapchainImageWidth; + uint32_t maxLayerCount; +} XrSystemGraphicsProperties; + +typedef struct XrSystemTrackingProperties { + XrBool32 orientationTracking; + XrBool32 positionTracking; +} XrSystemTrackingProperties; + +typedef struct XrSystemProperties { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSystemId systemId; + uint32_t vendorId; + char systemName[XR_MAX_SYSTEM_NAME_SIZE]; + XrSystemGraphicsProperties graphicsProperties; + XrSystemTrackingProperties trackingProperties; +} XrSystemProperties; + +typedef struct XrSessionCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSessionCreateFlags createFlags; + XrSystemId systemId; +} XrSessionCreateInfo; + +typedef struct XrVector3f { + float x; + float y; + float z; +} XrVector3f; + +// XrSpaceVelocity extends XrSpaceLocation +typedef struct XrSpaceVelocity { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSpaceVelocityFlags velocityFlags; + XrVector3f linearVelocity; + XrVector3f angularVelocity; +} XrSpaceVelocity; + +typedef struct XrQuaternionf { + float x; + float y; + float z; + float w; +} XrQuaternionf; + +typedef struct XrPosef { + XrQuaternionf orientation; + XrVector3f position; +} XrPosef; + +typedef struct XrReferenceSpaceCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrReferenceSpaceType referenceSpaceType; + XrPosef poseInReferenceSpace; +} XrReferenceSpaceCreateInfo; + +typedef struct XrExtent2Df { + float width; + float height; +} XrExtent2Df; + +typedef struct XrActionSpaceCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAction action; + XrPath subactionPath; + XrPosef poseInActionSpace; +} XrActionSpaceCreateInfo; + +typedef struct XrSpaceLocation { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSpaceLocationFlags locationFlags; + XrPosef pose; +} XrSpaceLocation; + +typedef struct XrViewConfigurationProperties { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrViewConfigurationType viewConfigurationType; + XrBool32 fovMutable; +} XrViewConfigurationProperties; + +typedef struct XrViewConfigurationView { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t recommendedImageRectWidth; + uint32_t maxImageRectWidth; + uint32_t recommendedImageRectHeight; + uint32_t maxImageRectHeight; + uint32_t recommendedSwapchainSampleCount; + uint32_t maxSwapchainSampleCount; +} XrViewConfigurationView; + +typedef struct XrSwapchainCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSwapchainCreateFlags createFlags; + XrSwapchainUsageFlags usageFlags; + int64_t format; + uint32_t sampleCount; + uint32_t width; + uint32_t height; + uint32_t faceCount; + uint32_t arraySize; + uint32_t mipCount; +} XrSwapchainCreateInfo; + +typedef struct XR_MAY_ALIAS XrSwapchainImageBaseHeader { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrSwapchainImageBaseHeader; + +typedef struct XrSwapchainImageAcquireInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSwapchainImageAcquireInfo; + +typedef struct XrSwapchainImageWaitInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDuration timeout; +} XrSwapchainImageWaitInfo; + +typedef struct XrSwapchainImageReleaseInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSwapchainImageReleaseInfo; + +typedef struct XrSessionBeginInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViewConfigurationType primaryViewConfigurationType; +} XrSessionBeginInfo; + +typedef struct XrFrameWaitInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrFrameWaitInfo; + +typedef struct XrFrameState { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrTime predictedDisplayTime; + XrDuration predictedDisplayPeriod; + XrBool32 shouldRender; +} XrFrameState; + +typedef struct XrFrameBeginInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrFrameBeginInfo; + +typedef struct XR_MAY_ALIAS XrCompositionLayerBaseHeader { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; +} XrCompositionLayerBaseHeader; + +typedef struct XrFrameEndInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTime displayTime; + XrEnvironmentBlendMode environmentBlendMode; + uint32_t layerCount; + const XrCompositionLayerBaseHeader* const* layers; +} XrFrameEndInfo; + +typedef struct XrViewLocateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViewConfigurationType viewConfigurationType; + XrTime displayTime; + XrSpace space; +} XrViewLocateInfo; + +typedef struct XrViewState { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrViewStateFlags viewStateFlags; +} XrViewState; + +typedef struct XrFovf { + float angleLeft; + float angleRight; + float angleUp; + float angleDown; +} XrFovf; + +typedef struct XrView { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPosef pose; + XrFovf fov; +} XrView; + +typedef struct XrActionSetCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + char actionSetName[XR_MAX_ACTION_SET_NAME_SIZE]; + char localizedActionSetName[XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE]; + uint32_t priority; +} XrActionSetCreateInfo; + +typedef struct XrActionCreateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + char actionName[XR_MAX_ACTION_NAME_SIZE]; + XrActionType actionType; + uint32_t countSubactionPaths; + const XrPath* subactionPaths; + char localizedActionName[XR_MAX_LOCALIZED_ACTION_NAME_SIZE]; +} XrActionCreateInfo; + +typedef struct XrActionSuggestedBinding { + XrAction action; + XrPath binding; +} XrActionSuggestedBinding; + +typedef struct XrInteractionProfileSuggestedBinding { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPath interactionProfile; + uint32_t countSuggestedBindings; + const XrActionSuggestedBinding* suggestedBindings; +} XrInteractionProfileSuggestedBinding; + +typedef struct XrSessionActionSetsAttachInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t countActionSets; + const XrActionSet* actionSets; +} XrSessionActionSetsAttachInfo; + +typedef struct XrInteractionProfileState { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPath interactionProfile; +} XrInteractionProfileState; + +typedef struct XrActionStateGetInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAction action; + XrPath subactionPath; +} XrActionStateGetInfo; + +typedef struct XrActionStateBoolean { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 currentState; + XrBool32 changedSinceLastSync; + XrTime lastChangeTime; + XrBool32 isActive; +} XrActionStateBoolean; + +typedef struct XrActionStateFloat { + XrStructureType type; + void* XR_MAY_ALIAS next; + float currentState; + XrBool32 changedSinceLastSync; + XrTime lastChangeTime; + XrBool32 isActive; +} XrActionStateFloat; + +typedef struct XrVector2f { + float x; + float y; +} XrVector2f; + +typedef struct XrActionStateVector2f { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVector2f currentState; + XrBool32 changedSinceLastSync; + XrTime lastChangeTime; + XrBool32 isActive; +} XrActionStateVector2f; + +typedef struct XrActionStatePose { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 isActive; +} XrActionStatePose; + +typedef struct XrActiveActionSet { + XrActionSet actionSet; + XrPath subactionPath; +} XrActiveActionSet; + +typedef struct XrActionsSyncInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t countActiveActionSets; + const XrActiveActionSet* activeActionSets; +} XrActionsSyncInfo; + +typedef struct XrBoundSourcesForActionEnumerateInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAction action; +} XrBoundSourcesForActionEnumerateInfo; + +typedef struct XrInputSourceLocalizedNameGetInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPath sourcePath; + XrInputSourceLocalizedNameFlags whichComponents; +} XrInputSourceLocalizedNameGetInfo; + +typedef struct XrHapticActionInfo { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAction action; + XrPath subactionPath; +} XrHapticActionInfo; + +typedef struct XR_MAY_ALIAS XrHapticBaseHeader { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrHapticBaseHeader; + +typedef struct XR_MAY_ALIAS XrBaseInStructure { + XrStructureType type; + const struct XrBaseInStructure* next; +} XrBaseInStructure; + +typedef struct XR_MAY_ALIAS XrBaseOutStructure { + XrStructureType type; + struct XrBaseOutStructure* next; +} XrBaseOutStructure; + +typedef struct XrOffset2Di { + int32_t x; + int32_t y; +} XrOffset2Di; + +typedef struct XrExtent2Di { + int32_t width; + int32_t height; +} XrExtent2Di; + +typedef struct XrRect2Di { + XrOffset2Di offset; + XrExtent2Di extent; +} XrRect2Di; + +typedef struct XrSwapchainSubImage { + XrSwapchain swapchain; + XrRect2Di imageRect; + uint32_t imageArrayIndex; +} XrSwapchainSubImage; + +typedef struct XrCompositionLayerProjectionView { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPosef pose; + XrFovf fov; + XrSwapchainSubImage subImage; +} XrCompositionLayerProjectionView; + +typedef struct XrCompositionLayerProjection { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + uint32_t viewCount; + const XrCompositionLayerProjectionView* views; +} XrCompositionLayerProjection; + +typedef struct XrCompositionLayerQuad { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrEyeVisibility eyeVisibility; + XrSwapchainSubImage subImage; + XrPosef pose; + XrExtent2Df size; +} XrCompositionLayerQuad; + +typedef struct XR_MAY_ALIAS XrEventDataBaseHeader { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrEventDataBaseHeader; + +typedef struct XrEventDataEventsLost { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t lostEventCount; +} XrEventDataEventsLost; + +typedef struct XrEventDataInstanceLossPending { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTime lossTime; +} XrEventDataInstanceLossPending; + +typedef struct XrEventDataSessionStateChanged { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSession session; + XrSessionState state; + XrTime time; +} XrEventDataSessionStateChanged; + +typedef struct XrEventDataReferenceSpaceChangePending { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSession session; + XrReferenceSpaceType referenceSpaceType; + XrTime changeTime; + XrBool32 poseValid; + XrPosef poseInPreviousSpace; +} XrEventDataReferenceSpaceChangePending; + +typedef struct XrEventDataInteractionProfileChanged { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSession session; +} XrEventDataInteractionProfileChanged; + +typedef struct XrHapticVibration { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDuration duration; + float frequency; + float amplitude; +} XrHapticVibration; + +typedef struct XrOffset2Df { + float x; + float y; +} XrOffset2Df; + +typedef struct XrRect2Df { + XrOffset2Df offset; + XrExtent2Df extent; +} XrRect2Df; + +typedef struct XrVector4f { + float x; + float y; + float z; + float w; +} XrVector4f; + +typedef struct XrColor4f { + float r; + float g; + float b; + float a; +} XrColor4f; + +typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProcAddr)(XrInstance instance, const char* name, PFN_xrVoidFunction* function); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateApiLayerProperties)(uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrApiLayerProperties* properties); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateInstanceExtensionProperties)(const char* layerName, uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrExtensionProperties* properties); +typedef XrResult (XRAPI_PTR *PFN_xrCreateInstance)(const XrInstanceCreateInfo* createInfo, XrInstance* instance); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyInstance)(XrInstance instance); +typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProperties)(XrInstance instance, XrInstanceProperties* instanceProperties); +typedef XrResult (XRAPI_PTR *PFN_xrPollEvent)(XrInstance instance, XrEventDataBuffer* eventData); +typedef XrResult (XRAPI_PTR *PFN_xrResultToString)(XrInstance instance, XrResult value, char buffer[XR_MAX_RESULT_STRING_SIZE]); +typedef XrResult (XRAPI_PTR *PFN_xrStructureTypeToString)(XrInstance instance, XrStructureType value, char buffer[XR_MAX_STRUCTURE_NAME_SIZE]); +typedef XrResult (XRAPI_PTR *PFN_xrGetSystem)(XrInstance instance, const XrSystemGetInfo* getInfo, XrSystemId* systemId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSystemProperties)(XrInstance instance, XrSystemId systemId, XrSystemProperties* properties); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateEnvironmentBlendModes)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t environmentBlendModeCapacityInput, uint32_t* environmentBlendModeCountOutput, XrEnvironmentBlendMode* environmentBlendModes); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSession)(XrInstance instance, const XrSessionCreateInfo* createInfo, XrSession* session); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySession)(XrSession session); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReferenceSpaces)(XrSession session, uint32_t spaceCapacityInput, uint32_t* spaceCountOutput, XrReferenceSpaceType* spaces); +typedef XrResult (XRAPI_PTR *PFN_xrCreateReferenceSpace)(XrSession session, const XrReferenceSpaceCreateInfo* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrGetReferenceSpaceBoundsRect)(XrSession session, XrReferenceSpaceType referenceSpaceType, XrExtent2Df* bounds); +typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSpace)(XrSession session, const XrActionSpaceCreateInfo* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrLocateSpace)(XrSpace space, XrSpace baseSpace, XrTime time, XrSpaceLocation* location); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpace)(XrSpace space); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurations)(XrInstance instance, XrSystemId systemId, uint32_t viewConfigurationTypeCapacityInput, uint32_t* viewConfigurationTypeCountOutput, XrViewConfigurationType* viewConfigurationTypes); +typedef XrResult (XRAPI_PTR *PFN_xrGetViewConfigurationProperties)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, XrViewConfigurationProperties* configurationProperties); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurationViews)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrViewConfigurationView* views); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainFormats)(XrSession session, uint32_t formatCapacityInput, uint32_t* formatCountOutput, int64_t* formats); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchain)(XrSession session, const XrSwapchainCreateInfo* createInfo, XrSwapchain* swapchain); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySwapchain)(XrSwapchain swapchain); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainImages)(XrSwapchain swapchain, uint32_t imageCapacityInput, uint32_t* imageCountOutput, XrSwapchainImageBaseHeader* images); +typedef XrResult (XRAPI_PTR *PFN_xrAcquireSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageAcquireInfo* acquireInfo, uint32_t* index); +typedef XrResult (XRAPI_PTR *PFN_xrWaitSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageWaitInfo* waitInfo); +typedef XrResult (XRAPI_PTR *PFN_xrReleaseSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo* releaseInfo); +typedef XrResult (XRAPI_PTR *PFN_xrBeginSession)(XrSession session, const XrSessionBeginInfo* beginInfo); +typedef XrResult (XRAPI_PTR *PFN_xrEndSession)(XrSession session); +typedef XrResult (XRAPI_PTR *PFN_xrRequestExitSession)(XrSession session); +typedef XrResult (XRAPI_PTR *PFN_xrWaitFrame)(XrSession session, const XrFrameWaitInfo* frameWaitInfo, XrFrameState* frameState); +typedef XrResult (XRAPI_PTR *PFN_xrBeginFrame)(XrSession session, const XrFrameBeginInfo* frameBeginInfo); +typedef XrResult (XRAPI_PTR *PFN_xrEndFrame)(XrSession session, const XrFrameEndInfo* frameEndInfo); +typedef XrResult (XRAPI_PTR *PFN_xrLocateViews)(XrSession session, const XrViewLocateInfo* viewLocateInfo, XrViewState* viewState, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrView* views); +typedef XrResult (XRAPI_PTR *PFN_xrStringToPath)(XrInstance instance, const char* pathString, XrPath* path); +typedef XrResult (XRAPI_PTR *PFN_xrPathToString)(XrInstance instance, XrPath path, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer); +typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSet)(XrInstance instance, const XrActionSetCreateInfo* createInfo, XrActionSet* actionSet); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyActionSet)(XrActionSet actionSet); +typedef XrResult (XRAPI_PTR *PFN_xrCreateAction)(XrActionSet actionSet, const XrActionCreateInfo* createInfo, XrAction* action); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyAction)(XrAction action); +typedef XrResult (XRAPI_PTR *PFN_xrSuggestInteractionProfileBindings)(XrInstance instance, const XrInteractionProfileSuggestedBinding* suggestedBindings); +typedef XrResult (XRAPI_PTR *PFN_xrAttachSessionActionSets)(XrSession session, const XrSessionActionSetsAttachInfo* attachInfo); +typedef XrResult (XRAPI_PTR *PFN_xrGetCurrentInteractionProfile)(XrSession session, XrPath topLevelUserPath, XrInteractionProfileState* interactionProfile); +typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateBoolean)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateBoolean* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateFloat)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateFloat* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateVector2f)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateVector2f* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetActionStatePose)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStatePose* state); +typedef XrResult (XRAPI_PTR *PFN_xrSyncActions)(XrSession session, const XrActionsSyncInfo* syncInfo); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateBoundSourcesForAction)(XrSession session, const XrBoundSourcesForActionEnumerateInfo* enumerateInfo, uint32_t sourceCapacityInput, uint32_t* sourceCountOutput, XrPath* sources); +typedef XrResult (XRAPI_PTR *PFN_xrGetInputSourceLocalizedName)(XrSession session, const XrInputSourceLocalizedNameGetInfo* getInfo, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer); +typedef XrResult (XRAPI_PTR *PFN_xrApplyHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo, const XrHapticBaseHeader* hapticFeedback); +typedef XrResult (XRAPI_PTR *PFN_xrStopHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo); + +#ifndef XR_NO_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProcAddr( + XrInstance instance, + const char* name, + PFN_xrVoidFunction* function); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateApiLayerProperties( + uint32_t propertyCapacityInput, + uint32_t* propertyCountOutput, + XrApiLayerProperties* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateInstanceExtensionProperties( + const char* layerName, + uint32_t propertyCapacityInput, + uint32_t* propertyCountOutput, + XrExtensionProperties* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateInstance( + const XrInstanceCreateInfo* createInfo, + XrInstance* instance); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyInstance( + XrInstance instance); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties( + XrInstance instance, + XrInstanceProperties* instanceProperties); + +XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent( + XrInstance instance, + XrEventDataBuffer* eventData); + +XRAPI_ATTR XrResult XRAPI_CALL xrResultToString( + XrInstance instance, + XrResult value, + char buffer[XR_MAX_RESULT_STRING_SIZE]); + +XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString( + XrInstance instance, + XrStructureType value, + char buffer[XR_MAX_STRUCTURE_NAME_SIZE]); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem( + XrInstance instance, + const XrSystemGetInfo* getInfo, + XrSystemId* systemId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties( + XrInstance instance, + XrSystemId systemId, + XrSystemProperties* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes( + XrInstance instance, + XrSystemId systemId, + XrViewConfigurationType viewConfigurationType, + uint32_t environmentBlendModeCapacityInput, + uint32_t* environmentBlendModeCountOutput, + XrEnvironmentBlendMode* environmentBlendModes); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession( + XrInstance instance, + const XrSessionCreateInfo* createInfo, + XrSession* session); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession( + XrSession session); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces( + XrSession session, + uint32_t spaceCapacityInput, + uint32_t* spaceCountOutput, + XrReferenceSpaceType* spaces); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace( + XrSession session, + const XrReferenceSpaceCreateInfo* createInfo, + XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect( + XrSession session, + XrReferenceSpaceType referenceSpaceType, + XrExtent2Df* bounds); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace( + XrSession session, + const XrActionSpaceCreateInfo* createInfo, + XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace( + XrSpace space, + XrSpace baseSpace, + XrTime time, + XrSpaceLocation* location); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace( + XrSpace space); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations( + XrInstance instance, + XrSystemId systemId, + uint32_t viewConfigurationTypeCapacityInput, + uint32_t* viewConfigurationTypeCountOutput, + XrViewConfigurationType* viewConfigurationTypes); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties( + XrInstance instance, + XrSystemId systemId, + XrViewConfigurationType viewConfigurationType, + XrViewConfigurationProperties* configurationProperties); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews( + XrInstance instance, + XrSystemId systemId, + XrViewConfigurationType viewConfigurationType, + uint32_t viewCapacityInput, + uint32_t* viewCountOutput, + XrViewConfigurationView* views); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats( + XrSession session, + uint32_t formatCapacityInput, + uint32_t* formatCountOutput, + int64_t* formats); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain( + XrSession session, + const XrSwapchainCreateInfo* createInfo, + XrSwapchain* swapchain); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain( + XrSwapchain swapchain); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages( + XrSwapchain swapchain, + uint32_t imageCapacityInput, + uint32_t* imageCountOutput, + XrSwapchainImageBaseHeader* images); + +XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage( + XrSwapchain swapchain, + const XrSwapchainImageAcquireInfo* acquireInfo, + uint32_t* index); + +XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage( + XrSwapchain swapchain, + const XrSwapchainImageWaitInfo* waitInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage( + XrSwapchain swapchain, + const XrSwapchainImageReleaseInfo* releaseInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession( + XrSession session, + const XrSessionBeginInfo* beginInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrEndSession( + XrSession session); + +XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession( + XrSession session); + +XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame( + XrSession session, + const XrFrameWaitInfo* frameWaitInfo, + XrFrameState* frameState); + +XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame( + XrSession session, + const XrFrameBeginInfo* frameBeginInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame( + XrSession session, + const XrFrameEndInfo* frameEndInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews( + XrSession session, + const XrViewLocateInfo* viewLocateInfo, + XrViewState* viewState, + uint32_t viewCapacityInput, + uint32_t* viewCountOutput, + XrView* views); + +XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath( + XrInstance instance, + const char* pathString, + XrPath* path); + +XRAPI_ATTR XrResult XRAPI_CALL xrPathToString( + XrInstance instance, + XrPath path, + uint32_t bufferCapacityInput, + uint32_t* bufferCountOutput, + char* buffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet( + XrInstance instance, + const XrActionSetCreateInfo* createInfo, + XrActionSet* actionSet); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet( + XrActionSet actionSet); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction( + XrActionSet actionSet, + const XrActionCreateInfo* createInfo, + XrAction* action); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction( + XrAction action); + +XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings( + XrInstance instance, + const XrInteractionProfileSuggestedBinding* suggestedBindings); + +XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets( + XrSession session, + const XrSessionActionSetsAttachInfo* attachInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile( + XrSession session, + XrPath topLevelUserPath, + XrInteractionProfileState* interactionProfile); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean( + XrSession session, + const XrActionStateGetInfo* getInfo, + XrActionStateBoolean* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat( + XrSession session, + const XrActionStateGetInfo* getInfo, + XrActionStateFloat* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f( + XrSession session, + const XrActionStateGetInfo* getInfo, + XrActionStateVector2f* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose( + XrSession session, + const XrActionStateGetInfo* getInfo, + XrActionStatePose* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions( + XrSession session, + const XrActionsSyncInfo* syncInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction( + XrSession session, + const XrBoundSourcesForActionEnumerateInfo* enumerateInfo, + uint32_t sourceCapacityInput, + uint32_t* sourceCountOutput, + XrPath* sources); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName( + XrSession session, + const XrInputSourceLocalizedNameGetInfo* getInfo, + uint32_t bufferCapacityInput, + uint32_t* bufferCountOutput, + char* buffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback( + XrSession session, + const XrHapticActionInfo* hapticActionInfo, + const XrHapticBaseHeader* hapticFeedback); + +XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback( + XrSession session, + const XrHapticActionInfo* hapticActionInfo); +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_KHR_composition_layer_cube 1 +#define XR_KHR_composition_layer_cube_SPEC_VERSION 8 +#define XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME "XR_KHR_composition_layer_cube" +typedef struct XrCompositionLayerCubeKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrEyeVisibility eyeVisibility; + XrSwapchain swapchain; + uint32_t imageArrayIndex; + XrQuaternionf orientation; +} XrCompositionLayerCubeKHR; + + + +#define XR_KHR_composition_layer_depth 1 +#define XR_KHR_composition_layer_depth_SPEC_VERSION 6 +#define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth" +// XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView +typedef struct XrCompositionLayerDepthInfoKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSwapchainSubImage subImage; + float minDepth; + float maxDepth; + float nearZ; + float farZ; +} XrCompositionLayerDepthInfoKHR; + + + +#define XR_KHR_composition_layer_cylinder 1 +#define XR_KHR_composition_layer_cylinder_SPEC_VERSION 4 +#define XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME "XR_KHR_composition_layer_cylinder" +typedef struct XrCompositionLayerCylinderKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrEyeVisibility eyeVisibility; + XrSwapchainSubImage subImage; + XrPosef pose; + float radius; + float centralAngle; + float aspectRatio; +} XrCompositionLayerCylinderKHR; + + + +#define XR_KHR_composition_layer_equirect 1 +#define XR_KHR_composition_layer_equirect_SPEC_VERSION 3 +#define XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME "XR_KHR_composition_layer_equirect" +typedef struct XrCompositionLayerEquirectKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrEyeVisibility eyeVisibility; + XrSwapchainSubImage subImage; + XrPosef pose; + float radius; + XrVector2f scale; + XrVector2f bias; +} XrCompositionLayerEquirectKHR; + + + +#define XR_KHR_visibility_mask 1 +#define XR_KHR_visibility_mask_SPEC_VERSION 2 +#define XR_KHR_VISIBILITY_MASK_EXTENSION_NAME "XR_KHR_visibility_mask" + +typedef enum XrVisibilityMaskTypeKHR { + XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR = 1, + XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR = 2, + XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR = 3, + XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} XrVisibilityMaskTypeKHR; +typedef struct XrVisibilityMaskKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector2f* vertices; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint32_t* indices; +} XrVisibilityMaskKHR; + +typedef struct XrEventDataVisibilityMaskChangedKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSession session; + XrViewConfigurationType viewConfigurationType; + uint32_t viewIndex; +} XrEventDataVisibilityMaskChangedKHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetVisibilityMaskKHR)(XrSession session, XrViewConfigurationType viewConfigurationType, uint32_t viewIndex, XrVisibilityMaskTypeKHR visibilityMaskType, XrVisibilityMaskKHR* visibilityMask); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetVisibilityMaskKHR( + XrSession session, + XrViewConfigurationType viewConfigurationType, + uint32_t viewIndex, + XrVisibilityMaskTypeKHR visibilityMaskType, + XrVisibilityMaskKHR* visibilityMask); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_KHR_composition_layer_color_scale_bias 1 +#define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5 +#define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias" +// XrCompositionLayerColorScaleBiasKHR extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerColorScaleBiasKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrColor4f colorScale; + XrColor4f colorBias; +} XrCompositionLayerColorScaleBiasKHR; + + + +#define XR_KHR_loader_init 1 +#define XR_KHR_loader_init_SPEC_VERSION 1 +#define XR_KHR_LOADER_INIT_EXTENSION_NAME "XR_KHR_loader_init" +typedef struct XR_MAY_ALIAS XrLoaderInitInfoBaseHeaderKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrLoaderInitInfoBaseHeaderKHR; + +typedef XrResult (XRAPI_PTR *PFN_xrInitializeLoaderKHR)(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR( + const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_KHR_composition_layer_equirect2 1 +#define XR_KHR_composition_layer_equirect2_SPEC_VERSION 1 +#define XR_KHR_COMPOSITION_LAYER_EQUIRECT2_EXTENSION_NAME "XR_KHR_composition_layer_equirect2" +typedef struct XrCompositionLayerEquirect2KHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrEyeVisibility eyeVisibility; + XrSwapchainSubImage subImage; + XrPosef pose; + float radius; + float centralHorizontalAngle; + float upperVerticalAngle; + float lowerVerticalAngle; +} XrCompositionLayerEquirect2KHR; + + + +#define XR_KHR_binding_modification 1 +#define XR_KHR_binding_modification_SPEC_VERSION 1 +#define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification" +typedef struct XR_MAY_ALIAS XrBindingModificationBaseHeaderKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrBindingModificationBaseHeaderKHR; + +// XrBindingModificationsKHR extends XrInteractionProfileSuggestedBinding +typedef struct XrBindingModificationsKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t bindingModificationCount; + const XrBindingModificationBaseHeaderKHR* const* bindingModifications; +} XrBindingModificationsKHR; + + + +#define XR_KHR_swapchain_usage_input_attachment_bit 1 +#define XR_KHR_swapchain_usage_input_attachment_bit_SPEC_VERSION 3 +#define XR_KHR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_KHR_swapchain_usage_input_attachment_bit" + + +#define XR_EXT_performance_settings 1 +#define XR_EXT_performance_settings_SPEC_VERSION 4 +#define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings" + +typedef enum XrPerfSettingsDomainEXT { + XR_PERF_SETTINGS_DOMAIN_CPU_EXT = 1, + XR_PERF_SETTINGS_DOMAIN_GPU_EXT = 2, + XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF +} XrPerfSettingsDomainEXT; + +typedef enum XrPerfSettingsSubDomainEXT { + XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT = 1, + XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT = 2, + XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT = 3, + XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF +} XrPerfSettingsSubDomainEXT; + +typedef enum XrPerfSettingsLevelEXT { + XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT = 0, + XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT = 25, + XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT = 50, + XR_PERF_SETTINGS_LEVEL_BOOST_EXT = 75, + XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF +} XrPerfSettingsLevelEXT; + +typedef enum XrPerfSettingsNotificationLevelEXT { + XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT = 0, + XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT = 25, + XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT = 75, + XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF +} XrPerfSettingsNotificationLevelEXT; +typedef struct XrEventDataPerfSettingsEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPerfSettingsDomainEXT domain; + XrPerfSettingsSubDomainEXT subDomain; + XrPerfSettingsNotificationLevelEXT fromLevel; + XrPerfSettingsNotificationLevelEXT toLevel; +} XrEventDataPerfSettingsEXT; + +typedef XrResult (XRAPI_PTR *PFN_xrPerfSettingsSetPerformanceLevelEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsLevelEXT level); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrPerfSettingsSetPerformanceLevelEXT( + XrSession session, + XrPerfSettingsDomainEXT domain, + XrPerfSettingsLevelEXT level); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_thermal_query 1 +#define XR_EXT_thermal_query_SPEC_VERSION 2 +#define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query" +typedef XrResult (XRAPI_PTR *PFN_xrThermalGetTemperatureTrendEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsNotificationLevelEXT* notificationLevel, float* tempHeadroom, float* tempSlope); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrThermalGetTemperatureTrendEXT( + XrSession session, + XrPerfSettingsDomainEXT domain, + XrPerfSettingsNotificationLevelEXT* notificationLevel, + float* tempHeadroom, + float* tempSlope); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_debug_utils 1 +XR_DEFINE_HANDLE(XrDebugUtilsMessengerEXT) +#define XR_EXT_debug_utils_SPEC_VERSION 4 +#define XR_EXT_DEBUG_UTILS_EXTENSION_NAME "XR_EXT_debug_utils" +typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT; + +// Flag bits for XrDebugUtilsMessageSeverityFlagsEXT +static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001; +static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010; +static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100; +static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000; + +typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT; + +// Flag bits for XrDebugUtilsMessageTypeFlagsEXT +static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001; +static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002; +static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004; +static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT = 0x00000008; + +typedef struct XrDebugUtilsObjectNameInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrObjectType objectType; + uint64_t objectHandle; + const char* objectName; +} XrDebugUtilsObjectNameInfoEXT; + +typedef struct XrDebugUtilsLabelEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + const char* labelName; +} XrDebugUtilsLabelEXT; + +typedef struct XrDebugUtilsMessengerCallbackDataEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + const char* messageId; + const char* functionName; + const char* message; + uint32_t objectCount; + XrDebugUtilsObjectNameInfoEXT* objects; + uint32_t sessionLabelCount; + XrDebugUtilsLabelEXT* sessionLabels; +} XrDebugUtilsMessengerCallbackDataEXT; + +typedef XrBool32 (XRAPI_PTR *PFN_xrDebugUtilsMessengerCallbackEXT)( + XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, + XrDebugUtilsMessageTypeFlagsEXT messageTypes, + const XrDebugUtilsMessengerCallbackDataEXT* callbackData, + void* userData); + + +// XrDebugUtilsMessengerCreateInfoEXT extends XrInstanceCreateInfo +typedef struct XrDebugUtilsMessengerCreateInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDebugUtilsMessageSeverityFlagsEXT messageSeverities; + XrDebugUtilsMessageTypeFlagsEXT messageTypes; + PFN_xrDebugUtilsMessengerCallbackEXT userCallback; + void* XR_MAY_ALIAS userData; +} XrDebugUtilsMessengerCreateInfoEXT; + +typedef XrResult (XRAPI_PTR *PFN_xrSetDebugUtilsObjectNameEXT)(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT* nameInfo); +typedef XrResult (XRAPI_PTR *PFN_xrCreateDebugUtilsMessengerEXT)(XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT* createInfo, XrDebugUtilsMessengerEXT* messenger); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyDebugUtilsMessengerEXT)(XrDebugUtilsMessengerEXT messenger); +typedef XrResult (XRAPI_PTR *PFN_xrSubmitDebugUtilsMessageEXT)(XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes, const XrDebugUtilsMessengerCallbackDataEXT* callbackData); +typedef XrResult (XRAPI_PTR *PFN_xrSessionBeginDebugUtilsLabelRegionEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo); +typedef XrResult (XRAPI_PTR *PFN_xrSessionEndDebugUtilsLabelRegionEXT)(XrSession session); +typedef XrResult (XRAPI_PTR *PFN_xrSessionInsertDebugUtilsLabelEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetDebugUtilsObjectNameEXT( + XrInstance instance, + const XrDebugUtilsObjectNameInfoEXT* nameInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateDebugUtilsMessengerEXT( + XrInstance instance, + const XrDebugUtilsMessengerCreateInfoEXT* createInfo, + XrDebugUtilsMessengerEXT* messenger); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyDebugUtilsMessengerEXT( + XrDebugUtilsMessengerEXT messenger); + +XRAPI_ATTR XrResult XRAPI_CALL xrSubmitDebugUtilsMessageEXT( + XrInstance instance, + XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, + XrDebugUtilsMessageTypeFlagsEXT messageTypes, + const XrDebugUtilsMessengerCallbackDataEXT* callbackData); + +XRAPI_ATTR XrResult XRAPI_CALL xrSessionBeginDebugUtilsLabelRegionEXT( + XrSession session, + const XrDebugUtilsLabelEXT* labelInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrSessionEndDebugUtilsLabelRegionEXT( + XrSession session); + +XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT( + XrSession session, + const XrDebugUtilsLabelEXT* labelInfo); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_eye_gaze_interaction 1 +#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 2 +#define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction" +// XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties +typedef struct XrSystemEyeGazeInteractionPropertiesEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsEyeGazeInteraction; +} XrSystemEyeGazeInteractionPropertiesEXT; + +// XrEyeGazeSampleTimeEXT extends XrSpaceLocation +typedef struct XrEyeGazeSampleTimeEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrTime time; +} XrEyeGazeSampleTimeEXT; + + + +#define XR_EXTX_overlay 1 +#define XR_EXTX_overlay_SPEC_VERSION 5 +#define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay" +typedef XrFlags64 XrOverlaySessionCreateFlagsEXTX; + +// Flag bits for XrOverlaySessionCreateFlagsEXTX + +typedef XrFlags64 XrOverlayMainSessionFlagsEXTX; + +// Flag bits for XrOverlayMainSessionFlagsEXTX +static const XrOverlayMainSessionFlagsEXTX XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX = 0x00000001; + +// XrSessionCreateInfoOverlayEXTX extends XrSessionCreateInfo +typedef struct XrSessionCreateInfoOverlayEXTX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrOverlaySessionCreateFlagsEXTX createFlags; + uint32_t sessionLayersPlacement; +} XrSessionCreateInfoOverlayEXTX; + +typedef struct XrEventDataMainSessionVisibilityChangedEXTX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 visible; + XrOverlayMainSessionFlagsEXTX flags; +} XrEventDataMainSessionVisibilityChangedEXTX; + + + +#define XR_VARJO_quad_views 1 +#define XR_VARJO_quad_views_SPEC_VERSION 1 +#define XR_VARJO_QUAD_VIEWS_EXTENSION_NAME "XR_VARJO_quad_views" + + +#define XR_MSFT_unbounded_reference_space 1 +#define XR_MSFT_unbounded_reference_space_SPEC_VERSION 1 +#define XR_MSFT_UNBOUNDED_REFERENCE_SPACE_EXTENSION_NAME "XR_MSFT_unbounded_reference_space" + + +#define XR_MSFT_spatial_anchor 1 +XR_DEFINE_HANDLE(XrSpatialAnchorMSFT) +#define XR_MSFT_spatial_anchor_SPEC_VERSION 2 +#define XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME "XR_MSFT_spatial_anchor" +typedef struct XrSpatialAnchorCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef pose; + XrTime time; +} XrSpatialAnchorCreateInfoMSFT; + +typedef struct XrSpatialAnchorSpaceCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialAnchorMSFT anchor; + XrPosef poseInAnchorSpace; +} XrSpatialAnchorSpaceCreateInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorMSFT)(XrSession session, const XrSpatialAnchorCreateInfoMSFT* createInfo, XrSpatialAnchorMSFT* anchor); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorSpaceMSFT)(XrSession session, const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorMSFT)(XrSpatialAnchorMSFT anchor); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorMSFT( + XrSession session, + const XrSpatialAnchorCreateInfoMSFT* createInfo, + XrSpatialAnchorMSFT* anchor); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorSpaceMSFT( + XrSession session, + const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo, + XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorMSFT( + XrSpatialAnchorMSFT anchor); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_image_layout 1 +#define XR_FB_composition_layer_image_layout_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_IMAGE_LAYOUT_EXTENSION_NAME "XR_FB_composition_layer_image_layout" +typedef XrFlags64 XrCompositionLayerImageLayoutFlagsFB; + +// Flag bits for XrCompositionLayerImageLayoutFlagsFB +static const XrCompositionLayerImageLayoutFlagsFB XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB = 0x00000001; + +// XrCompositionLayerImageLayoutFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerImageLayoutFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrCompositionLayerImageLayoutFlagsFB flags; +} XrCompositionLayerImageLayoutFB; + + + +#define XR_FB_composition_layer_alpha_blend 1 +#define XR_FB_composition_layer_alpha_blend_SPEC_VERSION 2 +#define XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME "XR_FB_composition_layer_alpha_blend" + +typedef enum XrBlendFactorFB { + XR_BLEND_FACTOR_ZERO_FB = 0, + XR_BLEND_FACTOR_ONE_FB = 1, + XR_BLEND_FACTOR_SRC_ALPHA_FB = 2, + XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB = 3, + XR_BLEND_FACTOR_DST_ALPHA_FB = 4, + XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB = 5, + XR_BLEND_FACTOR_MAX_ENUM_FB = 0x7FFFFFFF +} XrBlendFactorFB; +// XrCompositionLayerAlphaBlendFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerAlphaBlendFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBlendFactorFB srcFactorColor; + XrBlendFactorFB dstFactorColor; + XrBlendFactorFB srcFactorAlpha; + XrBlendFactorFB dstFactorAlpha; +} XrCompositionLayerAlphaBlendFB; + + + +#define XR_MND_headless 1 +#define XR_MND_headless_SPEC_VERSION 2 +#define XR_MND_HEADLESS_EXTENSION_NAME "XR_MND_headless" + + +#define XR_OCULUS_android_session_state_enable 1 +#define XR_OCULUS_android_session_state_enable_SPEC_VERSION 1 +#define XR_OCULUS_ANDROID_SESSION_STATE_ENABLE_EXTENSION_NAME "XR_OCULUS_android_session_state_enable" + + +#define XR_EXT_view_configuration_depth_range 1 +#define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1 +#define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range" +// XrViewConfigurationDepthRangeEXT extends XrViewConfigurationView +typedef struct XrViewConfigurationDepthRangeEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + float recommendedNearZ; + float minNearZ; + float recommendedFarZ; + float maxFarZ; +} XrViewConfigurationDepthRangeEXT; + + + +#define XR_EXT_conformance_automation 1 +#define XR_EXT_conformance_automation_SPEC_VERSION 3 +#define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation" +typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive); +typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state); +typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateFloatEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, float state); +typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateVector2fEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrVector2f state); +typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceActiveEXT( + XrSession session, + XrPath interactionProfile, + XrPath topLevelPath, + XrBool32 isActive); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateBoolEXT( + XrSession session, + XrPath topLevelPath, + XrPath inputSourcePath, + XrBool32 state); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateFloatEXT( + XrSession session, + XrPath topLevelPath, + XrPath inputSourcePath, + float state); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateVector2fEXT( + XrSession session, + XrPath topLevelPath, + XrPath inputSourcePath, + XrVector2f state); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT( + XrSession session, + XrPath topLevelPath, + XrPath inputSourcePath, + XrSpace space, + XrPosef pose); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_spatial_graph_bridge 1 +XR_DEFINE_HANDLE(XrSpatialGraphNodeBindingMSFT) +#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 2 +#define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge" +#define XR_GUID_SIZE_MSFT 16 + +typedef enum XrSpatialGraphNodeTypeMSFT { + XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1, + XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT = 2, + XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSpatialGraphNodeTypeMSFT; +typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialGraphNodeTypeMSFT nodeType; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; + XrPosef pose; +} XrSpatialGraphNodeSpaceCreateInfoMSFT; + +typedef struct XrSpatialGraphStaticNodeBindingCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialGraphStaticNodeBindingCreateInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpatialGraphNodeBindingPropertiesGetInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; + XrPosef poseInNodeSpace; +} XrSpatialGraphNodeBindingPropertiesMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT)(XrSession session, const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, XrSpatialGraphNodeBindingMSFT* nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialGraphNodeBindingMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding, const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, XrSpatialGraphNodeBindingPropertiesMSFT* properties); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT( + XrSession session, + const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, + XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrTryCreateSpatialGraphStaticNodeBindingMSFT( + XrSession session, + const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, + XrSpatialGraphNodeBindingMSFT* nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialGraphNodeBindingMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpatialGraphNodeBindingPropertiesMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding, + const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, + XrSpatialGraphNodeBindingPropertiesMSFT* properties); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_hand_interaction 1 +#define XR_MSFT_hand_interaction_SPEC_VERSION 1 +#define XR_MSFT_HAND_INTERACTION_EXTENSION_NAME "XR_MSFT_hand_interaction" + + +#define XR_EXT_hand_tracking 1 + +#define XR_HAND_JOINT_COUNT_EXT 26 + +XR_DEFINE_HANDLE(XrHandTrackerEXT) +#define XR_EXT_hand_tracking_SPEC_VERSION 4 +#define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking" + +typedef enum XrHandEXT { + XR_HAND_LEFT_EXT = 1, + XR_HAND_RIGHT_EXT = 2, + XR_HAND_MAX_ENUM_EXT = 0x7FFFFFFF +} XrHandEXT; + +typedef enum XrHandJointEXT { + XR_HAND_JOINT_PALM_EXT = 0, + XR_HAND_JOINT_WRIST_EXT = 1, + XR_HAND_JOINT_THUMB_METACARPAL_EXT = 2, + XR_HAND_JOINT_THUMB_PROXIMAL_EXT = 3, + XR_HAND_JOINT_THUMB_DISTAL_EXT = 4, + XR_HAND_JOINT_THUMB_TIP_EXT = 5, + XR_HAND_JOINT_INDEX_METACARPAL_EXT = 6, + XR_HAND_JOINT_INDEX_PROXIMAL_EXT = 7, + XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT = 8, + XR_HAND_JOINT_INDEX_DISTAL_EXT = 9, + XR_HAND_JOINT_INDEX_TIP_EXT = 10, + XR_HAND_JOINT_MIDDLE_METACARPAL_EXT = 11, + XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT = 12, + XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT = 13, + XR_HAND_JOINT_MIDDLE_DISTAL_EXT = 14, + XR_HAND_JOINT_MIDDLE_TIP_EXT = 15, + XR_HAND_JOINT_RING_METACARPAL_EXT = 16, + XR_HAND_JOINT_RING_PROXIMAL_EXT = 17, + XR_HAND_JOINT_RING_INTERMEDIATE_EXT = 18, + XR_HAND_JOINT_RING_DISTAL_EXT = 19, + XR_HAND_JOINT_RING_TIP_EXT = 20, + XR_HAND_JOINT_LITTLE_METACARPAL_EXT = 21, + XR_HAND_JOINT_LITTLE_PROXIMAL_EXT = 22, + XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT = 23, + XR_HAND_JOINT_LITTLE_DISTAL_EXT = 24, + XR_HAND_JOINT_LITTLE_TIP_EXT = 25, + XR_HAND_JOINT_MAX_ENUM_EXT = 0x7FFFFFFF +} XrHandJointEXT; + +typedef enum XrHandJointSetEXT { + XR_HAND_JOINT_SET_DEFAULT_EXT = 0, + XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP = 1000149000, + XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF +} XrHandJointSetEXT; +// XrSystemHandTrackingPropertiesEXT extends XrSystemProperties +typedef struct XrSystemHandTrackingPropertiesEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsHandTracking; +} XrSystemHandTrackingPropertiesEXT; + +typedef struct XrHandTrackerCreateInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrHandEXT hand; + XrHandJointSetEXT handJointSet; +} XrHandTrackerCreateInfoEXT; + +typedef struct XrHandJointsLocateInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; +} XrHandJointsLocateInfoEXT; + +typedef struct XrHandJointLocationEXT { + XrSpaceLocationFlags locationFlags; + XrPosef pose; + float radius; +} XrHandJointLocationEXT; + +typedef struct XrHandJointVelocityEXT { + XrSpaceVelocityFlags velocityFlags; + XrVector3f linearVelocity; + XrVector3f angularVelocity; +} XrHandJointVelocityEXT; + +typedef struct XrHandJointLocationsEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 isActive; + uint32_t jointCount; + XrHandJointLocationEXT* jointLocations; +} XrHandJointLocationsEXT; + +// XrHandJointVelocitiesEXT extends XrHandJointLocationsEXT +typedef struct XrHandJointVelocitiesEXT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t jointCount; + XrHandJointVelocityEXT* jointVelocities; +} XrHandJointVelocitiesEXT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateHandTrackerEXT)(XrSession session, const XrHandTrackerCreateInfoEXT* createInfo, XrHandTrackerEXT* handTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyHandTrackerEXT)(XrHandTrackerEXT handTracker); +typedef XrResult (XRAPI_PTR *PFN_xrLocateHandJointsEXT)(XrHandTrackerEXT handTracker, const XrHandJointsLocateInfoEXT* locateInfo, XrHandJointLocationsEXT* locations); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandTrackerEXT( + XrSession session, + const XrHandTrackerCreateInfoEXT* createInfo, + XrHandTrackerEXT* handTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyHandTrackerEXT( + XrHandTrackerEXT handTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateHandJointsEXT( + XrHandTrackerEXT handTracker, + const XrHandJointsLocateInfoEXT* locateInfo, + XrHandJointLocationsEXT* locations); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_hand_tracking_mesh 1 +#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 4 +#define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh" + +typedef enum XrHandPoseTypeMSFT { + XR_HAND_POSE_TYPE_TRACKED_MSFT = 0, + XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT = 1, + XR_HAND_POSE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrHandPoseTypeMSFT; +// XrSystemHandTrackingMeshPropertiesMSFT extends XrSystemProperties +typedef struct XrSystemHandTrackingMeshPropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsHandTrackingMesh; + uint32_t maxHandMeshIndexCount; + uint32_t maxHandMeshVertexCount; +} XrSystemHandTrackingMeshPropertiesMSFT; + +typedef struct XrHandMeshSpaceCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrHandPoseTypeMSFT handPoseType; + XrPosef poseInHandMeshSpace; +} XrHandMeshSpaceCreateInfoMSFT; + +typedef struct XrHandMeshUpdateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTime time; + XrHandPoseTypeMSFT handPoseType; +} XrHandMeshUpdateInfoMSFT; + +typedef struct XrHandMeshIndexBufferMSFT { + uint32_t indexBufferKey; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint32_t* indices; +} XrHandMeshIndexBufferMSFT; + +typedef struct XrHandMeshVertexMSFT { + XrVector3f position; + XrVector3f normal; +} XrHandMeshVertexMSFT; + +typedef struct XrHandMeshVertexBufferMSFT { + XrTime vertexUpdateTime; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrHandMeshVertexMSFT* vertices; +} XrHandMeshVertexBufferMSFT; + +typedef struct XrHandMeshMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 isActive; + XrBool32 indexBufferChanged; + XrBool32 vertexBufferChanged; + XrHandMeshIndexBufferMSFT indexBuffer; + XrHandMeshVertexBufferMSFT vertexBuffer; +} XrHandMeshMSFT; + +// XrHandPoseTypeInfoMSFT extends XrHandTrackerCreateInfoEXT +typedef struct XrHandPoseTypeInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrHandPoseTypeMSFT handPoseType; +} XrHandPoseTypeInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateHandMeshSpaceMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshSpaceCreateInfoMSFT* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrUpdateHandMeshMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshUpdateInfoMSFT* updateInfo, XrHandMeshMSFT* handMesh); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandMeshSpaceMSFT( + XrHandTrackerEXT handTracker, + const XrHandMeshSpaceCreateInfoMSFT* createInfo, + XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrUpdateHandMeshMSFT( + XrHandTrackerEXT handTracker, + const XrHandMeshUpdateInfoMSFT* updateInfo, + XrHandMeshMSFT* handMesh); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_secondary_view_configuration 1 +#define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1 +#define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration" +// XrSecondaryViewConfigurationSessionBeginInfoMSFT extends XrSessionBeginInfo +typedef struct XrSecondaryViewConfigurationSessionBeginInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t viewConfigurationCount; + const XrViewConfigurationType* enabledViewConfigurationTypes; +} XrSecondaryViewConfigurationSessionBeginInfoMSFT; + +typedef struct XrSecondaryViewConfigurationStateMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrViewConfigurationType viewConfigurationType; + XrBool32 active; +} XrSecondaryViewConfigurationStateMSFT; + +// XrSecondaryViewConfigurationFrameStateMSFT extends XrFrameState +typedef struct XrSecondaryViewConfigurationFrameStateMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t viewConfigurationCount; + XrSecondaryViewConfigurationStateMSFT* viewConfigurationStates; +} XrSecondaryViewConfigurationFrameStateMSFT; + +typedef struct XrSecondaryViewConfigurationLayerInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViewConfigurationType viewConfigurationType; + XrEnvironmentBlendMode environmentBlendMode; + uint32_t layerCount; + const XrCompositionLayerBaseHeader* const* layers; +} XrSecondaryViewConfigurationLayerInfoMSFT; + +// XrSecondaryViewConfigurationFrameEndInfoMSFT extends XrFrameEndInfo +typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t viewConfigurationCount; + const XrSecondaryViewConfigurationLayerInfoMSFT* viewConfigurationLayersInfo; +} XrSecondaryViewConfigurationFrameEndInfoMSFT; + +// XrSecondaryViewConfigurationSwapchainCreateInfoMSFT extends XrSwapchainCreateInfo +typedef struct XrSecondaryViewConfigurationSwapchainCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViewConfigurationType viewConfigurationType; +} XrSecondaryViewConfigurationSwapchainCreateInfoMSFT; + + + +#define XR_MSFT_first_person_observer 1 +#define XR_MSFT_first_person_observer_SPEC_VERSION 1 +#define XR_MSFT_FIRST_PERSON_OBSERVER_EXTENSION_NAME "XR_MSFT_first_person_observer" + + +#define XR_MSFT_controller_model 1 + +#define XR_NULL_CONTROLLER_MODEL_KEY_MSFT 0 + +XR_DEFINE_ATOM(XrControllerModelKeyMSFT) +#define XR_MSFT_controller_model_SPEC_VERSION 2 +#define XR_MSFT_CONTROLLER_MODEL_EXTENSION_NAME "XR_MSFT_controller_model" +#define XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT 64 +typedef struct XrControllerModelKeyStateMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrControllerModelKeyMSFT modelKey; +} XrControllerModelKeyStateMSFT; + +typedef struct XrControllerModelNodePropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + char parentNodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT]; + char nodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT]; +} XrControllerModelNodePropertiesMSFT; + +typedef struct XrControllerModelPropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t nodeCapacityInput; + uint32_t nodeCountOutput; + XrControllerModelNodePropertiesMSFT* nodeProperties; +} XrControllerModelPropertiesMSFT; + +typedef struct XrControllerModelNodeStateMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPosef nodePose; +} XrControllerModelNodeStateMSFT; + +typedef struct XrControllerModelStateMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t nodeCapacityInput; + uint32_t nodeCountOutput; + XrControllerModelNodeStateMSFT* nodeStates; +} XrControllerModelStateMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelKeyMSFT)(XrSession session, XrPath topLevelUserPath, XrControllerModelKeyStateMSFT* controllerModelKeyState); +typedef XrResult (XRAPI_PTR *PFN_xrLoadControllerModelMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, uint8_t* buffer); +typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelPropertiesMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelPropertiesMSFT* properties); +typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelStateMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelStateMSFT* state); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelKeyMSFT( + XrSession session, + XrPath topLevelUserPath, + XrControllerModelKeyStateMSFT* controllerModelKeyState); + +XRAPI_ATTR XrResult XRAPI_CALL xrLoadControllerModelMSFT( + XrSession session, + XrControllerModelKeyMSFT modelKey, + uint32_t bufferCapacityInput, + uint32_t* bufferCountOutput, + uint8_t* buffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelPropertiesMSFT( + XrSession session, + XrControllerModelKeyMSFT modelKey, + XrControllerModelPropertiesMSFT* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelStateMSFT( + XrSession session, + XrControllerModelKeyMSFT modelKey, + XrControllerModelStateMSFT* state); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_win32_appcontainer_compatible 1 +#define XR_EXT_win32_appcontainer_compatible_SPEC_VERSION 1 +#define XR_EXT_WIN32_APPCONTAINER_COMPATIBLE_EXTENSION_NAME "XR_EXT_win32_appcontainer_compatible" + + +#define XR_EPIC_view_configuration_fov 1 +#define XR_EPIC_view_configuration_fov_SPEC_VERSION 2 +#define XR_EPIC_VIEW_CONFIGURATION_FOV_EXTENSION_NAME "XR_EPIC_view_configuration_fov" +// XrViewConfigurationViewFovEPIC extends XrViewConfigurationView +typedef struct XrViewConfigurationViewFovEPIC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFovf recommendedFov; + XrFovf maxMutableFov; +} XrViewConfigurationViewFovEPIC; + + + +#define XR_MSFT_composition_layer_reprojection 1 +#define XR_MSFT_composition_layer_reprojection_SPEC_VERSION 1 +#define XR_MSFT_COMPOSITION_LAYER_REPROJECTION_EXTENSION_NAME "XR_MSFT_composition_layer_reprojection" + +typedef enum XrReprojectionModeMSFT { + XR_REPROJECTION_MODE_DEPTH_MSFT = 1, + XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT = 2, + XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT = 3, + XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT = 4, + XR_REPROJECTION_MODE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrReprojectionModeMSFT; +// XrCompositionLayerReprojectionInfoMSFT extends XrCompositionLayerProjection +typedef struct XrCompositionLayerReprojectionInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrReprojectionModeMSFT reprojectionMode; +} XrCompositionLayerReprojectionInfoMSFT; + +// XrCompositionLayerReprojectionPlaneOverrideMSFT extends XrCompositionLayerProjection +typedef struct XrCompositionLayerReprojectionPlaneOverrideMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrVector3f position; + XrVector3f normal; + XrVector3f velocity; +} XrCompositionLayerReprojectionPlaneOverrideMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReprojectionModesMSFT)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t modeCapacityInput, uint32_t* modeCountOutput, XrReprojectionModeMSFT* modes); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReprojectionModesMSFT( + XrInstance instance, + XrSystemId systemId, + XrViewConfigurationType viewConfigurationType, + uint32_t modeCapacityInput, + uint32_t* modeCountOutput, + XrReprojectionModeMSFT* modes); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HUAWEI_controller_interaction 1 +#define XR_HUAWEI_controller_interaction_SPEC_VERSION 1 +#define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction" + + +#define XR_FB_swapchain_update_state 1 +#define XR_FB_swapchain_update_state_SPEC_VERSION 3 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_EXTENSION_NAME "XR_FB_swapchain_update_state" +typedef struct XR_MAY_ALIAS XrSwapchainStateBaseHeaderFB { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrSwapchainStateBaseHeaderFB; + +typedef XrResult (XRAPI_PTR *PFN_xrUpdateSwapchainFB)(XrSwapchain swapchain, const XrSwapchainStateBaseHeaderFB* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetSwapchainStateFB)(XrSwapchain swapchain, XrSwapchainStateBaseHeaderFB* state); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrUpdateSwapchainFB( + XrSwapchain swapchain, + const XrSwapchainStateBaseHeaderFB* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSwapchainStateFB( + XrSwapchain swapchain, + XrSwapchainStateBaseHeaderFB* state); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_secure_content 1 +#define XR_FB_composition_layer_secure_content_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_SECURE_CONTENT_EXTENSION_NAME "XR_FB_composition_layer_secure_content" +typedef XrFlags64 XrCompositionLayerSecureContentFlagsFB; + +// Flag bits for XrCompositionLayerSecureContentFlagsFB +static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB = 0x00000001; +static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB = 0x00000002; + +// XrCompositionLayerSecureContentFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerSecureContentFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSecureContentFlagsFB flags; +} XrCompositionLayerSecureContentFB; + + + +#define XR_FB_body_tracking 1 +XR_DEFINE_HANDLE(XrBodyTrackerFB) +#define XR_FB_body_tracking_SPEC_VERSION 1 +#define XR_FB_BODY_TRACKING_EXTENSION_NAME "XR_FB_body_tracking" + +typedef enum XrBodyJointFB { + XR_BODY_JOINT_ROOT_FB = 0, + XR_BODY_JOINT_HIPS_FB = 1, + XR_BODY_JOINT_SPINE_LOWER_FB = 2, + XR_BODY_JOINT_SPINE_MIDDLE_FB = 3, + XR_BODY_JOINT_SPINE_UPPER_FB = 4, + XR_BODY_JOINT_CHEST_FB = 5, + XR_BODY_JOINT_NECK_FB = 6, + XR_BODY_JOINT_HEAD_FB = 7, + XR_BODY_JOINT_LEFT_SHOULDER_FB = 8, + XR_BODY_JOINT_LEFT_SCAPULA_FB = 9, + XR_BODY_JOINT_LEFT_ARM_UPPER_FB = 10, + XR_BODY_JOINT_LEFT_ARM_LOWER_FB = 11, + XR_BODY_JOINT_LEFT_HAND_WRIST_TWIST_FB = 12, + XR_BODY_JOINT_RIGHT_SHOULDER_FB = 13, + XR_BODY_JOINT_RIGHT_SCAPULA_FB = 14, + XR_BODY_JOINT_RIGHT_ARM_UPPER_FB = 15, + XR_BODY_JOINT_RIGHT_ARM_LOWER_FB = 16, + XR_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_FB = 17, + XR_BODY_JOINT_LEFT_HAND_PALM_FB = 18, + XR_BODY_JOINT_LEFT_HAND_WRIST_FB = 19, + XR_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_FB = 20, + XR_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_FB = 21, + XR_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_FB = 22, + XR_BODY_JOINT_LEFT_HAND_THUMB_TIP_FB = 23, + XR_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_FB = 24, + XR_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_FB = 25, + XR_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_FB = 26, + XR_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_FB = 27, + XR_BODY_JOINT_LEFT_HAND_INDEX_TIP_FB = 28, + XR_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_FB = 29, + XR_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_FB = 30, + XR_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_FB = 31, + XR_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_FB = 32, + XR_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_FB = 33, + XR_BODY_JOINT_LEFT_HAND_RING_METACARPAL_FB = 34, + XR_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_FB = 35, + XR_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_FB = 36, + XR_BODY_JOINT_LEFT_HAND_RING_DISTAL_FB = 37, + XR_BODY_JOINT_LEFT_HAND_RING_TIP_FB = 38, + XR_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_FB = 39, + XR_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_FB = 40, + XR_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_FB = 41, + XR_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_FB = 42, + XR_BODY_JOINT_LEFT_HAND_LITTLE_TIP_FB = 43, + XR_BODY_JOINT_RIGHT_HAND_PALM_FB = 44, + XR_BODY_JOINT_RIGHT_HAND_WRIST_FB = 45, + XR_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_FB = 46, + XR_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_FB = 47, + XR_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_FB = 48, + XR_BODY_JOINT_RIGHT_HAND_THUMB_TIP_FB = 49, + XR_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_FB = 50, + XR_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_FB = 51, + XR_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_FB = 52, + XR_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_FB = 53, + XR_BODY_JOINT_RIGHT_HAND_INDEX_TIP_FB = 54, + XR_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_FB = 55, + XR_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_FB = 56, + XR_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_FB = 57, + XR_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_FB = 58, + XR_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_FB = 59, + XR_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_FB = 60, + XR_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_FB = 61, + XR_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_FB = 62, + XR_BODY_JOINT_RIGHT_HAND_RING_DISTAL_FB = 63, + XR_BODY_JOINT_RIGHT_HAND_RING_TIP_FB = 64, + XR_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_FB = 65, + XR_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_FB = 66, + XR_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_FB = 67, + XR_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_FB = 68, + XR_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_FB = 69, + XR_BODY_JOINT_COUNT_FB = 70, + XR_BODY_JOINT_NONE_FB = -1, + XR_BODY_JOINT_MAX_ENUM_FB = 0x7FFFFFFF +} XrBodyJointFB; + +typedef enum XrBodyJointSetFB { + XR_BODY_JOINT_SET_DEFAULT_FB = 0, + XR_BODY_JOINT_SET_MAX_ENUM_FB = 0x7FFFFFFF +} XrBodyJointSetFB; +typedef struct XrBodyJointLocationFB { + XrSpaceLocationFlags locationFlags; + XrPosef pose; +} XrBodyJointLocationFB; + +// XrSystemBodyTrackingPropertiesFB extends XrSystemProperties +typedef struct XrSystemBodyTrackingPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsBodyTracking; +} XrSystemBodyTrackingPropertiesFB; + +typedef struct XrBodyTrackerCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBodyJointSetFB bodyJointSet; +} XrBodyTrackerCreateInfoFB; + +typedef struct XrBodySkeletonJointFB { + int32_t joint; + int32_t parentJoint; + XrPosef pose; +} XrBodySkeletonJointFB; + +typedef struct XrBodySkeletonFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t jointCount; + XrBodySkeletonJointFB* joints; +} XrBodySkeletonFB; + +typedef struct XrBodyJointsLocateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; +} XrBodyJointsLocateInfoFB; + +typedef struct XrBodyJointLocationsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 isActive; + float confidence; + uint32_t jointCount; + XrBodyJointLocationFB* jointLocations; + uint32_t skeletonChangedCount; + XrTime time; +} XrBodyJointLocationsFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateBodyTrackerFB)(XrSession session, const XrBodyTrackerCreateInfoFB* createInfo, XrBodyTrackerFB* bodyTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyBodyTrackerFB)(XrBodyTrackerFB bodyTracker); +typedef XrResult (XRAPI_PTR *PFN_xrLocateBodyJointsFB)(XrBodyTrackerFB bodyTracker, const XrBodyJointsLocateInfoFB* locateInfo, XrBodyJointLocationsFB* locations); +typedef XrResult (XRAPI_PTR *PFN_xrGetBodySkeletonFB)(XrBodyTrackerFB bodyTracker, XrBodySkeletonFB* skeleton); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateBodyTrackerFB( + XrSession session, + const XrBodyTrackerCreateInfoFB* createInfo, + XrBodyTrackerFB* bodyTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyBodyTrackerFB( + XrBodyTrackerFB bodyTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateBodyJointsFB( + XrBodyTrackerFB bodyTracker, + const XrBodyJointsLocateInfoFB* locateInfo, + XrBodyJointLocationsFB* locations); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetBodySkeletonFB( + XrBodyTrackerFB bodyTracker, + XrBodySkeletonFB* skeleton); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_dpad_binding 1 +#define XR_EXT_dpad_binding_SPEC_VERSION 1 +#define XR_EXT_DPAD_BINDING_EXTENSION_NAME "XR_EXT_dpad_binding" +typedef struct XrInteractionProfileDpadBindingEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPath binding; + XrActionSet actionSet; + float forceThreshold; + float forceThresholdReleased; + float centerRegion; + float wedgeAngle; + XrBool32 isSticky; + const XrHapticBaseHeader* onHaptic; + const XrHapticBaseHeader* offHaptic; +} XrInteractionProfileDpadBindingEXT; + + + +#define XR_VALVE_analog_threshold 1 +#define XR_VALVE_analog_threshold_SPEC_VERSION 2 +#define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold" +typedef struct XrInteractionProfileAnalogThresholdVALVE { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAction action; + XrPath binding; + float onThreshold; + float offThreshold; + const XrHapticBaseHeader* onHaptic; + const XrHapticBaseHeader* offHaptic; +} XrInteractionProfileAnalogThresholdVALVE; + + + +#define XR_EXT_hand_joints_motion_range 1 +#define XR_EXT_hand_joints_motion_range_SPEC_VERSION 1 +#define XR_EXT_HAND_JOINTS_MOTION_RANGE_EXTENSION_NAME "XR_EXT_hand_joints_motion_range" + +typedef enum XrHandJointsMotionRangeEXT { + XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT = 1, + XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT = 2, + XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT = 0x7FFFFFFF +} XrHandJointsMotionRangeEXT; +// XrHandJointsMotionRangeInfoEXT extends XrHandJointsLocateInfoEXT +typedef struct XrHandJointsMotionRangeInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrHandJointsMotionRangeEXT handJointsMotionRange; +} XrHandJointsMotionRangeInfoEXT; + + + +#define XR_EXT_samsung_odyssey_controller 1 +#define XR_EXT_samsung_odyssey_controller_SPEC_VERSION 1 +#define XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME "XR_EXT_samsung_odyssey_controller" + + +#define XR_EXT_hp_mixed_reality_controller 1 +#define XR_EXT_hp_mixed_reality_controller_SPEC_VERSION 1 +#define XR_EXT_HP_MIXED_REALITY_CONTROLLER_EXTENSION_NAME "XR_EXT_hp_mixed_reality_controller" + + +#define XR_MND_swapchain_usage_input_attachment_bit 1 +#define XR_MND_swapchain_usage_input_attachment_bit_SPEC_VERSION 2 +#define XR_MND_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_MND_swapchain_usage_input_attachment_bit" + + +#define XR_MSFT_scene_understanding 1 + + XR_DEFINE_HANDLE(XrSceneObserverMSFT) + + + XR_DEFINE_HANDLE(XrSceneMSFT) + +#define XR_MSFT_scene_understanding_SPEC_VERSION 2 +#define XR_MSFT_SCENE_UNDERSTANDING_EXTENSION_NAME "XR_MSFT_scene_understanding" + +typedef enum XrSceneComputeFeatureMSFT { + XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT = 1, + XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT = 2, + XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT = 3, + XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT = 4, + XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT = 1000098000, + XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeFeatureMSFT; + +typedef enum XrSceneComputeConsistencyMSFT { + XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT = 1, + XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT = 2, + XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT = 3, + XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeConsistencyMSFT; + +typedef enum XrMeshComputeLodMSFT { + XR_MESH_COMPUTE_LOD_COARSE_MSFT = 1, + XR_MESH_COMPUTE_LOD_MEDIUM_MSFT = 2, + XR_MESH_COMPUTE_LOD_FINE_MSFT = 3, + XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT = 4, + XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrMeshComputeLodMSFT; + +typedef enum XrSceneComponentTypeMSFT { + XR_SCENE_COMPONENT_TYPE_INVALID_MSFT = -1, + XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT = 1, + XR_SCENE_COMPONENT_TYPE_PLANE_MSFT = 2, + XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT = 3, + XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT = 4, + XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT = 1000098000, + XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComponentTypeMSFT; + +typedef enum XrSceneObjectTypeMSFT { + XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT = -1, + XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT = 1, + XR_SCENE_OBJECT_TYPE_WALL_MSFT = 2, + XR_SCENE_OBJECT_TYPE_FLOOR_MSFT = 3, + XR_SCENE_OBJECT_TYPE_CEILING_MSFT = 4, + XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT = 5, + XR_SCENE_OBJECT_TYPE_INFERRED_MSFT = 6, + XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneObjectTypeMSFT; + +typedef enum XrScenePlaneAlignmentTypeMSFT { + XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT = 0, + XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT = 1, + XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT = 2, + XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrScenePlaneAlignmentTypeMSFT; + +typedef enum XrSceneComputeStateMSFT { + XR_SCENE_COMPUTE_STATE_NONE_MSFT = 0, + XR_SCENE_COMPUTE_STATE_UPDATING_MSFT = 1, + XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT = 2, + XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT = 3, + XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeStateMSFT; +typedef struct XrUuidMSFT { + uint8_t bytes[16]; +} XrUuidMSFT; + +typedef struct XrSceneObserverCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSceneObserverCreateInfoMSFT; + +typedef struct XrSceneCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSceneCreateInfoMSFT; + +typedef struct XrSceneSphereBoundMSFT { + XrVector3f center; + float radius; +} XrSceneSphereBoundMSFT; + +typedef struct XrSceneOrientedBoxBoundMSFT { + XrPosef pose; + XrVector3f extents; +} XrSceneOrientedBoxBoundMSFT; + +typedef struct XrSceneFrustumBoundMSFT { + XrPosef pose; + XrFovf fov; + float farDistance; +} XrSceneFrustumBoundMSFT; + +typedef struct XrSceneBoundsMSFT { + XrSpace space; + XrTime time; + uint32_t sphereCount; + const XrSceneSphereBoundMSFT* spheres; + uint32_t boxCount; + const XrSceneOrientedBoxBoundMSFT* boxes; + uint32_t frustumCount; + const XrSceneFrustumBoundMSFT* frustums; +} XrSceneBoundsMSFT; + +typedef struct XrNewSceneComputeInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t requestedFeatureCount; + const XrSceneComputeFeatureMSFT* requestedFeatures; + XrSceneComputeConsistencyMSFT consistency; + XrSceneBoundsMSFT bounds; +} XrNewSceneComputeInfoMSFT; + +// XrVisualMeshComputeLodInfoMSFT extends XrNewSceneComputeInfoMSFT +typedef struct XrVisualMeshComputeLodInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrMeshComputeLodMSFT lod; +} XrVisualMeshComputeLodInfoMSFT; + +typedef struct XrSceneComponentMSFT { + XrSceneComponentTypeMSFT componentType; + XrUuidMSFT id; + XrUuidMSFT parentId; + XrTime updateTime; +} XrSceneComponentMSFT; + +typedef struct XrSceneComponentsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t componentCapacityInput; + uint32_t componentCountOutput; + XrSceneComponentMSFT* components; +} XrSceneComponentsMSFT; + +typedef struct XrSceneComponentsGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSceneComponentTypeMSFT componentType; +} XrSceneComponentsGetInfoMSFT; + +typedef struct XrSceneComponentLocationMSFT { + XrSpaceLocationFlags flags; + XrPosef pose; +} XrSceneComponentLocationMSFT; + +typedef struct XrSceneComponentLocationsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t locationCount; + XrSceneComponentLocationMSFT* locations; +} XrSceneComponentLocationsMSFT; + +typedef struct XrSceneComponentsLocateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; + uint32_t componentIdCount; + const XrUuidMSFT* componentIds; +} XrSceneComponentsLocateInfoMSFT; + +typedef struct XrSceneObjectMSFT { + XrSceneObjectTypeMSFT objectType; +} XrSceneObjectMSFT; + +// XrSceneObjectsMSFT extends XrSceneComponentsMSFT +typedef struct XrSceneObjectsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t sceneObjectCount; + XrSceneObjectMSFT* sceneObjects; +} XrSceneObjectsMSFT; + +// XrSceneComponentParentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrSceneComponentParentFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidMSFT parentId; +} XrSceneComponentParentFilterInfoMSFT; + +// XrSceneObjectTypesFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrSceneObjectTypesFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t objectTypeCount; + const XrSceneObjectTypeMSFT* objectTypes; +} XrSceneObjectTypesFilterInfoMSFT; + +typedef struct XrScenePlaneMSFT { + XrScenePlaneAlignmentTypeMSFT alignment; + XrExtent2Df size; + uint64_t meshBufferId; + XrBool32 supportsIndicesUint16; +} XrScenePlaneMSFT; + +// XrScenePlanesMSFT extends XrSceneComponentsMSFT +typedef struct XrScenePlanesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t scenePlaneCount; + XrScenePlaneMSFT* scenePlanes; +} XrScenePlanesMSFT; + +// XrScenePlaneAlignmentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrScenePlaneAlignmentFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t alignmentCount; + const XrScenePlaneAlignmentTypeMSFT* alignments; +} XrScenePlaneAlignmentFilterInfoMSFT; + +typedef struct XrSceneMeshMSFT { + uint64_t meshBufferId; + XrBool32 supportsIndicesUint16; +} XrSceneMeshMSFT; + +// XrSceneMeshesMSFT extends XrSceneComponentsMSFT +typedef struct XrSceneMeshesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t sceneMeshCount; + XrSceneMeshMSFT* sceneMeshes; +} XrSceneMeshesMSFT; + +typedef struct XrSceneMeshBuffersGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t meshBufferId; +} XrSceneMeshBuffersGetInfoMSFT; + +typedef struct XrSceneMeshBuffersMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrSceneMeshBuffersMSFT; + +typedef struct XrSceneMeshVertexBufferMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector3f* vertices; +} XrSceneMeshVertexBufferMSFT; + +typedef struct XrSceneMeshIndicesUint32MSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint32_t* indices; +} XrSceneMeshIndicesUint32MSFT; + +typedef struct XrSceneMeshIndicesUint16MSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint16_t* indices; +} XrSceneMeshIndicesUint16MSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSceneComputeFeaturesMSFT)(XrInstance instance, XrSystemId systemId, uint32_t featureCapacityInput, uint32_t* featureCountOutput, XrSceneComputeFeatureMSFT* features); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneObserverMSFT)(XrSession session, const XrSceneObserverCreateInfoMSFT* createInfo, XrSceneObserverMSFT* sceneObserver); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneObserverMSFT)(XrSceneObserverMSFT sceneObserver); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneCreateInfoMSFT* createInfo, XrSceneMSFT* scene); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneMSFT)(XrSceneMSFT scene); +typedef XrResult (XRAPI_PTR *PFN_xrComputeNewSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrNewSceneComputeInfoMSFT* computeInfo); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComputeStateMSFT)(XrSceneObserverMSFT sceneObserver, XrSceneComputeStateMSFT* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsGetInfoMSFT* getInfo, XrSceneComponentsMSFT* components); +typedef XrResult (XRAPI_PTR *PFN_xrLocateSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsLocateInfoMSFT* locateInfo, XrSceneComponentLocationsMSFT* locations); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneMeshBuffersMSFT)(XrSceneMSFT scene, const XrSceneMeshBuffersGetInfoMSFT* getInfo, XrSceneMeshBuffersMSFT* buffers); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSceneComputeFeaturesMSFT( + XrInstance instance, + XrSystemId systemId, + uint32_t featureCapacityInput, + uint32_t* featureCountOutput, + XrSceneComputeFeatureMSFT* features); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneObserverMSFT( + XrSession session, + const XrSceneObserverCreateInfoMSFT* createInfo, + XrSceneObserverMSFT* sceneObserver); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneObserverMSFT( + XrSceneObserverMSFT sceneObserver); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrSceneCreateInfoMSFT* createInfo, + XrSceneMSFT* scene); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneMSFT( + XrSceneMSFT scene); + +XRAPI_ATTR XrResult XRAPI_CALL xrComputeNewSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrNewSceneComputeInfoMSFT* computeInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComputeStateMSFT( + XrSceneObserverMSFT sceneObserver, + XrSceneComputeStateMSFT* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComponentsMSFT( + XrSceneMSFT scene, + const XrSceneComponentsGetInfoMSFT* getInfo, + XrSceneComponentsMSFT* components); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateSceneComponentsMSFT( + XrSceneMSFT scene, + const XrSceneComponentsLocateInfoMSFT* locateInfo, + XrSceneComponentLocationsMSFT* locations); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneMeshBuffersMSFT( + XrSceneMSFT scene, + const XrSceneMeshBuffersGetInfoMSFT* getInfo, + XrSceneMeshBuffersMSFT* buffers); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_scene_understanding_serialization 1 +#define XR_MSFT_scene_understanding_serialization_SPEC_VERSION 2 +#define XR_MSFT_SCENE_UNDERSTANDING_SERIALIZATION_EXTENSION_NAME "XR_MSFT_scene_understanding_serialization" +typedef struct XrSerializedSceneFragmentDataGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidMSFT sceneFragmentId; +} XrSerializedSceneFragmentDataGetInfoMSFT; + +typedef struct XrDeserializeSceneFragmentMSFT { + uint32_t bufferSize; + const uint8_t* buffer; +} XrDeserializeSceneFragmentMSFT; + +typedef struct XrSceneDeserializeInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t fragmentCount; + const XrDeserializeSceneFragmentMSFT* fragments; +} XrSceneDeserializeInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrDeserializeSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneDeserializeInfoMSFT* deserializeInfo); +typedef XrResult (XRAPI_PTR *PFN_xrGetSerializedSceneFragmentDataMSFT)(XrSceneMSFT scene, const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, uint32_t countInput, uint32_t* readOutput, uint8_t* buffer); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrDeserializeSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrSceneDeserializeInfoMSFT* deserializeInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSerializedSceneFragmentDataMSFT( + XrSceneMSFT scene, + const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, + uint32_t countInput, + uint32_t* readOutput, + uint8_t* buffer); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_display_refresh_rate 1 +#define XR_FB_display_refresh_rate_SPEC_VERSION 1 +#define XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME "XR_FB_display_refresh_rate" +typedef struct XrEventDataDisplayRefreshRateChangedFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float fromDisplayRefreshRate; + float toDisplayRefreshRate; +} XrEventDataDisplayRefreshRateChangedFB; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateDisplayRefreshRatesFB)(XrSession session, uint32_t displayRefreshRateCapacityInput, uint32_t* displayRefreshRateCountOutput, float* displayRefreshRates); +typedef XrResult (XRAPI_PTR *PFN_xrGetDisplayRefreshRateFB)(XrSession session, float* displayRefreshRate); +typedef XrResult (XRAPI_PTR *PFN_xrRequestDisplayRefreshRateFB)(XrSession session, float displayRefreshRate); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateDisplayRefreshRatesFB( + XrSession session, + uint32_t displayRefreshRateCapacityInput, + uint32_t* displayRefreshRateCountOutput, + float* displayRefreshRates); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetDisplayRefreshRateFB( + XrSession session, + float* displayRefreshRate); + +XRAPI_ATTR XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB( + XrSession session, + float displayRefreshRate); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_vive_cosmos_controller_interaction 1 +#define XR_HTC_vive_cosmos_controller_interaction_SPEC_VERSION 1 +#define XR_HTC_VIVE_COSMOS_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_cosmos_controller_interaction" + + +#define XR_HTCX_vive_tracker_interaction 1 +#define XR_HTCX_vive_tracker_interaction_SPEC_VERSION 2 +#define XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTCX_vive_tracker_interaction" +typedef struct XrViveTrackerPathsHTCX { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPath persistentPath; + XrPath rolePath; +} XrViveTrackerPathsHTCX; + +typedef struct XrEventDataViveTrackerConnectedHTCX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViveTrackerPathsHTCX* paths; +} XrEventDataViveTrackerConnectedHTCX; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViveTrackerPathsHTCX)(XrInstance instance, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrViveTrackerPathsHTCX* paths); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViveTrackerPathsHTCX( + XrInstance instance, + uint32_t pathCapacityInput, + uint32_t* pathCountOutput, + XrViveTrackerPathsHTCX* paths); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_facial_tracking 1 + +#define XR_FACIAL_EXPRESSION_EYE_COUNT_HTC 14 + + +#define XR_FACIAL_EXPRESSION_LIP_COUNT_HTC 37 + +XR_DEFINE_HANDLE(XrFacialTrackerHTC) +#define XR_HTC_facial_tracking_SPEC_VERSION 2 +#define XR_HTC_FACIAL_TRACKING_EXTENSION_NAME "XR_HTC_facial_tracking" + +typedef enum XrEyeExpressionHTC { + XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0, + XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1, + XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2, + XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3, + XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4, + XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5, + XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6, + XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7, + XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8, + XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9, + XR_EYE_EXPRESSION_LEFT_IN_HTC = 10, + XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11, + XR_EYE_EXPRESSION_LEFT_UP_HTC = 12, + XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13, + XR_EYE_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF +} XrEyeExpressionHTC; + +typedef enum XrLipExpressionHTC { + XR_LIP_EXPRESSION_JAW_RIGHT_HTC = 0, + XR_LIP_EXPRESSION_JAW_LEFT_HTC = 1, + XR_LIP_EXPRESSION_JAW_FORWARD_HTC = 2, + XR_LIP_EXPRESSION_JAW_OPEN_HTC = 3, + XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4, + XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5, + XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6, + XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7, + XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8, + XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9, + XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10, + XR_LIP_EXPRESSION_MOUTH_POUT_HTC = 11, + XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12, + XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13, + XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14, + XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15, + XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16, + XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17, + XR_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18, + XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19, + XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20, + XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21, + XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22, + XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23, + XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24, + XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25, + XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26, + XR_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27, + XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28, + XR_LIP_EXPRESSION_TONGUE_UP_HTC = 29, + XR_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30, + XR_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31, + XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32, + XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33, + XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34, + XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35, + XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36, + XR_LIP_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF +} XrLipExpressionHTC; + +typedef enum XrFacialTrackingTypeHTC { + XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1, + XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2, + XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC = 0x7FFFFFFF +} XrFacialTrackingTypeHTC; +// XrSystemFacialTrackingPropertiesHTC extends XrSystemProperties +typedef struct XrSystemFacialTrackingPropertiesHTC { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportEyeFacialTracking; + XrBool32 supportLipFacialTracking; +} XrSystemFacialTrackingPropertiesHTC; + +typedef struct XrFacialExpressionsHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 isActive; + XrTime sampleTime; + uint32_t expressionCount; + float* expressionWeightings; +} XrFacialExpressionsHTC; + +typedef struct XrFacialTrackerCreateInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFacialTrackingTypeHTC facialTrackingType; +} XrFacialTrackerCreateInfoHTC; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateFacialTrackerHTC)(XrSession session, const XrFacialTrackerCreateInfoHTC* createInfo, XrFacialTrackerHTC* facialTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyFacialTrackerHTC)(XrFacialTrackerHTC facialTracker); +typedef XrResult (XRAPI_PTR *PFN_xrGetFacialExpressionsHTC)(XrFacialTrackerHTC facialTracker, XrFacialExpressionsHTC* facialExpressions); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateFacialTrackerHTC( + XrSession session, + const XrFacialTrackerCreateInfoHTC* createInfo, + XrFacialTrackerHTC* facialTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFacialTrackerHTC( + XrFacialTrackerHTC facialTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC( + XrFacialTrackerHTC facialTracker, + XrFacialExpressionsHTC* facialExpressions); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_vive_focus3_controller_interaction 1 +#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 2 +#define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction" + + +#define XR_HTC_hand_interaction 1 +#define XR_HTC_hand_interaction_SPEC_VERSION 1 +#define XR_HTC_HAND_INTERACTION_EXTENSION_NAME "XR_HTC_hand_interaction" + + +#define XR_HTC_vive_wrist_tracker_interaction 1 +#define XR_HTC_vive_wrist_tracker_interaction_SPEC_VERSION 1 +#define XR_HTC_VIVE_WRIST_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_wrist_tracker_interaction" + + +#define XR_FB_color_space 1 +#define XR_FB_color_space_SPEC_VERSION 3 +#define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space" + +typedef enum XrColorSpaceFB { + XR_COLOR_SPACE_UNMANAGED_FB = 0, + XR_COLOR_SPACE_REC2020_FB = 1, + XR_COLOR_SPACE_REC709_FB = 2, + XR_COLOR_SPACE_RIFT_CV1_FB = 3, + XR_COLOR_SPACE_RIFT_S_FB = 4, + XR_COLOR_SPACE_QUEST_FB = 5, + XR_COLOR_SPACE_P3_FB = 6, + XR_COLOR_SPACE_ADOBE_RGB_FB = 7, + XR_COLOR_SPACE_MAX_ENUM_FB = 0x7FFFFFFF +} XrColorSpaceFB; +// XrSystemColorSpacePropertiesFB extends XrSystemProperties +typedef struct XrSystemColorSpacePropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrColorSpaceFB colorSpace; +} XrSystemColorSpacePropertiesFB; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateColorSpacesFB)(XrSession session, uint32_t colorSpaceCapacityInput, uint32_t* colorSpaceCountOutput, XrColorSpaceFB* colorSpaces); +typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession session, const XrColorSpaceFB colorspace); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateColorSpacesFB( + XrSession session, + uint32_t colorSpaceCapacityInput, + uint32_t* colorSpaceCountOutput, + XrColorSpaceFB* colorSpaces); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB( + XrSession session, + const XrColorSpaceFB colorspace); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_hand_tracking_mesh 1 +#define XR_FB_hand_tracking_mesh_SPEC_VERSION 3 +#define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh" +typedef struct XrVector4sFB { + int16_t x; + int16_t y; + int16_t z; + int16_t w; +} XrVector4sFB; + +typedef struct XrHandTrackingMeshFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t jointCapacityInput; + uint32_t jointCountOutput; + XrPosef* jointBindPoses; + float* jointRadii; + XrHandJointEXT* jointParents; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector3f* vertexPositions; + XrVector3f* vertexNormals; + XrVector2f* vertexUVs; + XrVector4sFB* vertexBlendIndices; + XrVector4f* vertexBlendWeights; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + int16_t* indices; +} XrHandTrackingMeshFB; + +// XrHandTrackingScaleFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingScaleFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + float sensorOutput; + float currentOutput; + XrBool32 overrideHandScale; + float overrideValueInput; +} XrHandTrackingScaleFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetHandMeshFB)(XrHandTrackerEXT handTracker, XrHandTrackingMeshFB* mesh); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB( + XrHandTrackerEXT handTracker, + XrHandTrackingMeshFB* mesh); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_hand_tracking_aim 1 +#define XR_FB_hand_tracking_aim_SPEC_VERSION 2 +#define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim" +typedef XrFlags64 XrHandTrackingAimFlagsFB; + +// Flag bits for XrHandTrackingAimFlagsFB +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB = 0x00000001; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_VALID_BIT_FB = 0x00000002; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB = 0x00000004; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB = 0x00000008; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB = 0x00000010; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB = 0x00000020; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB = 0x00000040; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100; + +// XrHandTrackingAimStateFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingAimStateFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrHandTrackingAimFlagsFB status; + XrPosef aimPose; + float pinchStrengthIndex; + float pinchStrengthMiddle; + float pinchStrengthRing; + float pinchStrengthLittle; +} XrHandTrackingAimStateFB; + + + +#define XR_FB_hand_tracking_capsules 1 +#define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2 +#define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19 +#define XR_FB_hand_tracking_capsules_SPEC_VERSION 3 +#define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules" +#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB +#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB +typedef struct XrHandCapsuleFB { + XrVector3f points[XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB]; + float radius; + XrHandJointEXT joint; +} XrHandCapsuleFB; + +// XrHandTrackingCapsulesStateFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingCapsulesStateFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrHandCapsuleFB capsules[XR_HAND_TRACKING_CAPSULE_COUNT_FB]; +} XrHandTrackingCapsulesStateFB; + + + +#define XR_FB_spatial_entity 1 +XR_DEFINE_ATOM(XrAsyncRequestIdFB) +#define XR_UUID_SIZE_EXT 16 +#define XR_FB_spatial_entity_SPEC_VERSION 2 +#define XR_FB_SPATIAL_ENTITY_EXTENSION_NAME "XR_FB_spatial_entity" + +typedef enum XrSpaceComponentTypeFB { + XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB = 0, + XR_SPACE_COMPONENT_TYPE_STORABLE_FB = 1, + XR_SPACE_COMPONENT_TYPE_SHARABLE_FB = 2, + XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB = 3, + XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB = 4, + XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB = 5, + XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB = 6, + XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB = 7, + XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceComponentTypeFB; +// XrSystemSpatialEntityPropertiesFB extends XrSystemProperties +typedef struct XrSystemSpatialEntityPropertiesFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 supportsSpatialEntity; +} XrSystemSpatialEntityPropertiesFB; + +typedef struct XrSpatialAnchorCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialAnchorCreateInfoFB; + +typedef struct XrSpaceComponentStatusSetInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; + XrDuration timeout; +} XrSpaceComponentStatusSetInfoFB; + +typedef struct XrSpaceComponentStatusFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 enabled; + XrBool32 changePending; +} XrSpaceComponentStatusFB; + +typedef struct XrUuidEXT { + uint8_t data[XR_UUID_SIZE_EXT]; +} XrUuidEXT; + +typedef struct XrEventDataSpatialAnchorCreateCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; +} XrEventDataSpatialAnchorCreateCompleteFB; + +typedef struct XrEventDataSpaceSetStatusCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; +} XrEventDataSpaceSetStatusCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFB)(XrSession session, const XrSpatialAnchorCreateInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceUuidFB)(XrSpace space, XrUuidEXT* uuid); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSpaceSupportedComponentsFB)(XrSpace space, uint32_t componentTypeCapacityInput, uint32_t* componentTypeCountOutput, XrSpaceComponentTypeFB* componentTypes); +typedef XrResult (XRAPI_PTR *PFN_xrSetSpaceComponentStatusFB)(XrSpace space, const XrSpaceComponentStatusSetInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceComponentStatusFB)(XrSpace space, XrSpaceComponentTypeFB componentType, XrSpaceComponentStatusFB* status); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFB( + XrSession session, + const XrSpatialAnchorCreateInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceUuidFB( + XrSpace space, + XrUuidEXT* uuid); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSpaceSupportedComponentsFB( + XrSpace space, + uint32_t componentTypeCapacityInput, + uint32_t* componentTypeCountOutput, + XrSpaceComponentTypeFB* componentTypes); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetSpaceComponentStatusFB( + XrSpace space, + const XrSpaceComponentStatusSetInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceComponentStatusFB( + XrSpace space, + XrSpaceComponentTypeFB componentType, + XrSpaceComponentStatusFB* status); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_foveation 1 +XR_DEFINE_HANDLE(XrFoveationProfileFB) +#define XR_FB_foveation_SPEC_VERSION 1 +#define XR_FB_FOVEATION_EXTENSION_NAME "XR_FB_foveation" +typedef XrFlags64 XrSwapchainCreateFoveationFlagsFB; + +// Flag bits for XrSwapchainCreateFoveationFlagsFB +static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB = 0x00000001; +static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB = 0x00000002; + +typedef XrFlags64 XrSwapchainStateFoveationFlagsFB; + +// Flag bits for XrSwapchainStateFoveationFlagsFB + +typedef struct XrFoveationProfileCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrFoveationProfileCreateInfoFB; + +// XrSwapchainCreateInfoFoveationFB extends XrSwapchainCreateInfo +typedef struct XrSwapchainCreateInfoFoveationFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSwapchainCreateFoveationFlagsFB flags; +} XrSwapchainCreateInfoFoveationFB; + +typedef struct XrSwapchainStateFoveationFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSwapchainStateFoveationFlagsFB flags; + XrFoveationProfileFB profile; +} XrSwapchainStateFoveationFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateFoveationProfileFB)(XrSession session, const XrFoveationProfileCreateInfoFB* createInfo, XrFoveationProfileFB* profile); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyFoveationProfileFB)(XrFoveationProfileFB profile); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateFoveationProfileFB( + XrSession session, + const XrFoveationProfileCreateInfoFB* createInfo, + XrFoveationProfileFB* profile); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFoveationProfileFB( + XrFoveationProfileFB profile); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_foveation_configuration 1 +#define XR_FB_foveation_configuration_SPEC_VERSION 1 +#define XR_FB_FOVEATION_CONFIGURATION_EXTENSION_NAME "XR_FB_foveation_configuration" + +typedef enum XrFoveationLevelFB { + XR_FOVEATION_LEVEL_NONE_FB = 0, + XR_FOVEATION_LEVEL_LOW_FB = 1, + XR_FOVEATION_LEVEL_MEDIUM_FB = 2, + XR_FOVEATION_LEVEL_HIGH_FB = 3, + XR_FOVEATION_LEVEL_MAX_ENUM_FB = 0x7FFFFFFF +} XrFoveationLevelFB; + +typedef enum XrFoveationDynamicFB { + XR_FOVEATION_DYNAMIC_DISABLED_FB = 0, + XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB = 1, + XR_FOVEATION_DYNAMIC_MAX_ENUM_FB = 0x7FFFFFFF +} XrFoveationDynamicFB; +// XrFoveationLevelProfileCreateInfoFB extends XrFoveationProfileCreateInfoFB +typedef struct XrFoveationLevelProfileCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrFoveationLevelFB level; + float verticalOffset; + XrFoveationDynamicFB dynamic; +} XrFoveationLevelProfileCreateInfoFB; + + + +#define XR_FB_keyboard_tracking 1 +#define XR_FB_keyboard_tracking_SPEC_VERSION 1 +#define XR_FB_KEYBOARD_TRACKING_EXTENSION_NAME "XR_FB_keyboard_tracking" +#define XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB 128 +typedef XrFlags64 XrKeyboardTrackingFlagsFB; + +// Flag bits for XrKeyboardTrackingFlagsFB +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_EXISTS_BIT_FB = 0x00000001; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_LOCAL_BIT_FB = 0x00000002; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_REMOTE_BIT_FB = 0x00000004; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB = 0x00000008; + +typedef XrFlags64 XrKeyboardTrackingQueryFlagsFB; + +// Flag bits for XrKeyboardTrackingQueryFlagsFB +static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB = 0x00000002; +static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB = 0x00000004; + +// XrSystemKeyboardTrackingPropertiesFB extends XrSystemProperties +typedef struct XrSystemKeyboardTrackingPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsKeyboardTracking; +} XrSystemKeyboardTrackingPropertiesFB; + +typedef struct XrKeyboardTrackingDescriptionFB { + uint64_t trackedKeyboardId; + XrVector3f size; + XrKeyboardTrackingFlagsFB flags; + char name[XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB]; +} XrKeyboardTrackingDescriptionFB; + +typedef struct XrKeyboardSpaceCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint64_t trackedKeyboardId; +} XrKeyboardSpaceCreateInfoFB; + +typedef struct XrKeyboardTrackingQueryFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrKeyboardTrackingQueryFlagsFB flags; +} XrKeyboardTrackingQueryFB; + +typedef XrResult (XRAPI_PTR *PFN_xrQuerySystemTrackedKeyboardFB)(XrSession session, const XrKeyboardTrackingQueryFB* queryInfo, XrKeyboardTrackingDescriptionFB* keyboard); +typedef XrResult (XRAPI_PTR *PFN_xrCreateKeyboardSpaceFB)(XrSession session, const XrKeyboardSpaceCreateInfoFB* createInfo, XrSpace* keyboardSpace); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrQuerySystemTrackedKeyboardFB( + XrSession session, + const XrKeyboardTrackingQueryFB* queryInfo, + XrKeyboardTrackingDescriptionFB* keyboard); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB( + XrSession session, + const XrKeyboardSpaceCreateInfoFB* createInfo, + XrSpace* keyboardSpace); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_triangle_mesh 1 +XR_DEFINE_HANDLE(XrTriangleMeshFB) +#define XR_FB_triangle_mesh_SPEC_VERSION 2 +#define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh" + +typedef enum XrWindingOrderFB { + XR_WINDING_ORDER_UNKNOWN_FB = 0, + XR_WINDING_ORDER_CW_FB = 1, + XR_WINDING_ORDER_CCW_FB = 2, + XR_WINDING_ORDER_MAX_ENUM_FB = 0x7FFFFFFF +} XrWindingOrderFB; +typedef XrFlags64 XrTriangleMeshFlagsFB; + +// Flag bits for XrTriangleMeshFlagsFB +static const XrTriangleMeshFlagsFB XR_TRIANGLE_MESH_MUTABLE_BIT_FB = 0x00000001; + +typedef struct XrTriangleMeshCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTriangleMeshFlagsFB flags; + XrWindingOrderFB windingOrder; + uint32_t vertexCount; + const XrVector3f* vertexBuffer; + uint32_t triangleCount; + const uint32_t* indexBuffer; +} XrTriangleMeshCreateInfoFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateTriangleMeshFB)(XrSession session, const XrTriangleMeshCreateInfoFB* createInfo, XrTriangleMeshFB* outTriangleMesh); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyTriangleMeshFB)(XrTriangleMeshFB mesh); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetVertexBufferFB)(XrTriangleMeshFB mesh, XrVector3f** outVertexBuffer); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetIndexBufferFB)(XrTriangleMeshFB mesh, uint32_t** outIndexBuffer); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginUpdateFB)(XrTriangleMeshFB mesh); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndUpdateFB)(XrTriangleMeshFB mesh, uint32_t vertexCount, uint32_t triangleCount); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginVertexBufferUpdateFB)(XrTriangleMeshFB mesh, uint32_t* outVertexCount); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndVertexBufferUpdateFB)(XrTriangleMeshFB mesh); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateTriangleMeshFB( + XrSession session, + const XrTriangleMeshCreateInfoFB* createInfo, + XrTriangleMeshFB* outTriangleMesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyTriangleMeshFB( + XrTriangleMeshFB mesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetVertexBufferFB( + XrTriangleMeshFB mesh, + XrVector3f** outVertexBuffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetIndexBufferFB( + XrTriangleMeshFB mesh, + uint32_t** outIndexBuffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginUpdateFB( + XrTriangleMeshFB mesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndUpdateFB( + XrTriangleMeshFB mesh, + uint32_t vertexCount, + uint32_t triangleCount); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginVertexBufferUpdateFB( + XrTriangleMeshFB mesh, + uint32_t* outVertexCount); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB( + XrTriangleMeshFB mesh); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_passthrough 1 +XR_DEFINE_HANDLE(XrPassthroughFB) +XR_DEFINE_HANDLE(XrPassthroughLayerFB) +XR_DEFINE_HANDLE(XrGeometryInstanceFB) +#define XR_FB_passthrough_SPEC_VERSION 3 +#define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough" +#define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256 + +typedef enum XrPassthroughLayerPurposeFB { + XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0, + XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1, + XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001, + XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB = 1000203002, + XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF +} XrPassthroughLayerPurposeFB; +typedef XrFlags64 XrPassthroughCapabilityFlagsFB; + +// Flag bits for XrPassthroughCapabilityFlagsFB +static const XrPassthroughCapabilityFlagsFB XR_PASSTHROUGH_CAPABILITY_BIT_FB = 0x00000001; +static const XrPassthroughCapabilityFlagsFB XR_PASSTHROUGH_CAPABILITY_COLOR_BIT_FB = 0x00000002; +static const XrPassthroughCapabilityFlagsFB XR_PASSTHROUGH_CAPABILITY_LAYER_DEPTH_BIT_FB = 0x00000004; + +typedef XrFlags64 XrPassthroughFlagsFB; + +// Flag bits for XrPassthroughFlagsFB +static const XrPassthroughFlagsFB XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB = 0x00000001; +static const XrPassthroughFlagsFB XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB = 0x00000002; + +typedef XrFlags64 XrPassthroughStateChangedFlagsFB; + +// Flag bits for XrPassthroughStateChangedFlagsFB +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB = 0x00000001; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB = 0x00000002; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB = 0x00000004; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB = 0x00000008; + +// XrSystemPassthroughPropertiesFB extends XrSystemProperties +typedef struct XrSystemPassthroughPropertiesFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 supportsPassthrough; +} XrSystemPassthroughPropertiesFB; + +// XrSystemPassthroughProperties2FB extends XrSystemProperties +typedef struct XrSystemPassthroughProperties2FB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughCapabilityFlagsFB capabilities; +} XrSystemPassthroughProperties2FB; + +typedef struct XrPassthroughCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughFlagsFB flags; +} XrPassthroughCreateInfoFB; + +typedef struct XrPassthroughLayerCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughFB passthrough; + XrPassthroughFlagsFB flags; + XrPassthroughLayerPurposeFB purpose; +} XrPassthroughLayerCreateInfoFB; + +// XrCompositionLayerPassthroughFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerPassthroughFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags flags; + XrSpace space; + XrPassthroughLayerFB layerHandle; +} XrCompositionLayerPassthroughFB; + +typedef struct XrGeometryInstanceCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughLayerFB layer; + XrTriangleMeshFB mesh; + XrSpace baseSpace; + XrPosef pose; + XrVector3f scale; +} XrGeometryInstanceCreateInfoFB; + +typedef struct XrGeometryInstanceTransformFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; + XrPosef pose; + XrVector3f scale; +} XrGeometryInstanceTransformFB; + +typedef struct XrPassthroughStyleFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float textureOpacityFactor; + XrColor4f edgeColor; +} XrPassthroughStyleFB; + +// XrPassthroughColorMapMonoToRgbaFB extends XrPassthroughStyleFB +typedef struct XrPassthroughColorMapMonoToRgbaFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; +} XrPassthroughColorMapMonoToRgbaFB; + +// XrPassthroughColorMapMonoToMonoFB extends XrPassthroughStyleFB +typedef struct XrPassthroughColorMapMonoToMonoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; +} XrPassthroughColorMapMonoToMonoFB; + +// XrPassthroughBrightnessContrastSaturationFB extends XrPassthroughStyleFB +typedef struct XrPassthroughBrightnessContrastSaturationFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float brightness; + float contrast; + float saturation; +} XrPassthroughBrightnessContrastSaturationFB; + +typedef struct XrEventDataPassthroughStateChangedFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughStateChangedFlagsFB flags; +} XrEventDataPassthroughStateChangedFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughFB)(XrSession session, const XrPassthroughCreateInfoFB* createInfo, XrPassthroughFB* outPassthrough); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughStartFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughPauseFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughLayerFB)(XrSession session, const XrPassthroughLayerCreateInfoFB* createInfo, XrPassthroughLayerFB* outLayer); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughLayerFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerPauseFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerResumeFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetStyleFB)(XrPassthroughLayerFB layer, const XrPassthroughStyleFB* style); +typedef XrResult (XRAPI_PTR *PFN_xrCreateGeometryInstanceFB)(XrSession session, const XrGeometryInstanceCreateInfoFB* createInfo, XrGeometryInstanceFB* outGeometryInstance); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyGeometryInstanceFB)(XrGeometryInstanceFB instance); +typedef XrResult (XRAPI_PTR *PFN_xrGeometryInstanceSetTransformFB)(XrGeometryInstanceFB instance, const XrGeometryInstanceTransformFB* transformation); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughFB( + XrSession session, + const XrPassthroughCreateInfoFB* createInfo, + XrPassthroughFB* outPassthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughStartFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughPauseFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughLayerFB( + XrSession session, + const XrPassthroughLayerCreateInfoFB* createInfo, + XrPassthroughLayerFB* outLayer); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughLayerFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerPauseFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerResumeFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetStyleFB( + XrPassthroughLayerFB layer, + const XrPassthroughStyleFB* style); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateGeometryInstanceFB( + XrSession session, + const XrGeometryInstanceCreateInfoFB* createInfo, + XrGeometryInstanceFB* outGeometryInstance); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyGeometryInstanceFB( + XrGeometryInstanceFB instance); + +XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB( + XrGeometryInstanceFB instance, + const XrGeometryInstanceTransformFB* transformation); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_render_model 1 + +#define XR_NULL_RENDER_MODEL_KEY_FB 0 + +XR_DEFINE_ATOM(XrRenderModelKeyFB) +#define XR_FB_render_model_SPEC_VERSION 3 +#define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model" +#define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64 +typedef XrFlags64 XrRenderModelFlagsFB; + +// Flag bits for XrRenderModelFlagsFB +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB = 0x00000001; +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB = 0x00000002; + +typedef struct XrRenderModelPathInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPath path; +} XrRenderModelPathInfoFB; + +typedef struct XrRenderModelPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t vendorId; + char modelName[XR_MAX_RENDER_MODEL_NAME_SIZE_FB]; + XrRenderModelKeyFB modelKey; + uint32_t modelVersion; + XrRenderModelFlagsFB flags; +} XrRenderModelPropertiesFB; + +typedef struct XrRenderModelBufferFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t bufferCapacityInput; + uint32_t bufferCountOutput; + uint8_t* buffer; +} XrRenderModelBufferFB; + +typedef struct XrRenderModelLoadInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrRenderModelKeyFB modelKey; +} XrRenderModelLoadInfoFB; + +// XrSystemRenderModelPropertiesFB extends XrSystemProperties +typedef struct XrSystemRenderModelPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsRenderModelLoading; +} XrSystemRenderModelPropertiesFB; + +// XrRenderModelCapabilitiesRequestFB extends XrSystemProperties +typedef struct XrRenderModelCapabilitiesRequestFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrRenderModelFlagsFB flags; +} XrRenderModelCapabilitiesRequestFB; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths); +typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties); +typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateRenderModelPathsFB( + XrSession session, + uint32_t pathCapacityInput, + uint32_t* pathCountOutput, + XrRenderModelPathInfoFB* paths); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetRenderModelPropertiesFB( + XrSession session, + XrPath path, + XrRenderModelPropertiesFB* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrLoadRenderModelFB( + XrSession session, + const XrRenderModelLoadInfoFB* info, + XrRenderModelBufferFB* buffer); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_foveated_rendering 1 +#define XR_VARJO_foveated_rendering_SPEC_VERSION 3 +#define XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME "XR_VARJO_foveated_rendering" +// XrViewLocateFoveatedRenderingVARJO extends XrViewLocateInfo +typedef struct XrViewLocateFoveatedRenderingVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 foveatedRenderingActive; +} XrViewLocateFoveatedRenderingVARJO; + +// XrFoveatedViewConfigurationViewVARJO extends XrViewConfigurationView +typedef struct XrFoveatedViewConfigurationViewVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 foveatedRenderingActive; +} XrFoveatedViewConfigurationViewVARJO; + +// XrSystemFoveatedRenderingPropertiesVARJO extends XrSystemProperties +typedef struct XrSystemFoveatedRenderingPropertiesVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsFoveatedRendering; +} XrSystemFoveatedRenderingPropertiesVARJO; + + + +#define XR_VARJO_composition_layer_depth_test 1 +#define XR_VARJO_composition_layer_depth_test_SPEC_VERSION 2 +#define XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_VARJO_composition_layer_depth_test" +// XrCompositionLayerDepthTestVARJO extends XrCompositionLayerProjection +typedef struct XrCompositionLayerDepthTestVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float depthTestRangeNearZ; + float depthTestRangeFarZ; +} XrCompositionLayerDepthTestVARJO; + + + +#define XR_VARJO_environment_depth_estimation 1 +#define XR_VARJO_environment_depth_estimation_SPEC_VERSION 1 +#define XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME "XR_VARJO_environment_depth_estimation" +typedef XrResult (XRAPI_PTR *PFN_xrSetEnvironmentDepthEstimationVARJO)(XrSession session, XrBool32 enabled); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetEnvironmentDepthEstimationVARJO( + XrSession session, + XrBool32 enabled); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_marker_tracking 1 +#define XR_VARJO_marker_tracking_SPEC_VERSION 1 +#define XR_VARJO_MARKER_TRACKING_EXTENSION_NAME "XR_VARJO_marker_tracking" +// XrSystemMarkerTrackingPropertiesVARJO extends XrSystemProperties +typedef struct XrSystemMarkerTrackingPropertiesVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsMarkerTracking; +} XrSystemMarkerTrackingPropertiesVARJO; + +typedef struct XrEventDataMarkerTrackingUpdateVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t markerId; + XrBool32 isActive; + XrBool32 isPredicted; + XrTime time; +} XrEventDataMarkerTrackingUpdateVARJO; + +typedef struct XrMarkerSpaceCreateInfoVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t markerId; + XrPosef poseInMarkerSpace; +} XrMarkerSpaceCreateInfoVARJO; + +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingVARJO)(XrSession session, XrBool32 enabled); +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingTimeoutVARJO)(XrSession session, uint64_t markerId, XrDuration timeout); +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingPredictionVARJO)(XrSession session, uint64_t markerId, XrBool32 enabled); +typedef XrResult (XRAPI_PTR *PFN_xrGetMarkerSizeVARJO)(XrSession session, uint64_t markerId, XrExtent2Df* size); +typedef XrResult (XRAPI_PTR *PFN_xrCreateMarkerSpaceVARJO)(XrSession session, const XrMarkerSpaceCreateInfoVARJO* createInfo, XrSpace* space); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingVARJO( + XrSession session, + XrBool32 enabled); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingTimeoutVARJO( + XrSession session, + uint64_t markerId, + XrDuration timeout); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingPredictionVARJO( + XrSession session, + uint64_t markerId, + XrBool32 enabled); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetMarkerSizeVARJO( + XrSession session, + uint64_t markerId, + XrExtent2Df* size); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO( + XrSession session, + const XrMarkerSpaceCreateInfoVARJO* createInfo, + XrSpace* space); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_view_offset 1 +#define XR_VARJO_view_offset_SPEC_VERSION 1 +#define XR_VARJO_VIEW_OFFSET_EXTENSION_NAME "XR_VARJO_view_offset" +typedef XrResult (XRAPI_PTR *PFN_xrSetViewOffsetVARJO)(XrSession session, float offset); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetViewOffsetVARJO( + XrSession session, + float offset); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_ML_ml2_controller_interaction 1 +#define XR_ML_ml2_controller_interaction_SPEC_VERSION 1 +#define XR_ML_ML2_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_ML_ml2_controller_interaction" + + +#define XR_ML_frame_end_info 1 +#define XR_ML_frame_end_info_SPEC_VERSION 1 +#define XR_ML_FRAME_END_INFO_EXTENSION_NAME "XR_ML_frame_end_info" +typedef XrFlags64 XrFrameEndInfoFlagsML; + +// Flag bits for XrFrameEndInfoFlagsML +static const XrFrameEndInfoFlagsML XR_FRAME_END_INFO_PROTECTED_BIT_ML = 0x00000001; +static const XrFrameEndInfoFlagsML XR_FRAME_END_INFO_VIGNETTE_BIT_ML = 0x00000002; + +// XrFrameEndInfoML extends XrFrameEndInfo +typedef struct XrFrameEndInfoML { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float focusDistance; + XrFrameEndInfoFlagsML flags; +} XrFrameEndInfoML; + + + +#define XR_ML_global_dimmer 1 +#define XR_ML_global_dimmer_SPEC_VERSION 1 +#define XR_ML_GLOBAL_DIMMER_EXTENSION_NAME "XR_ML_global_dimmer" +typedef XrFlags64 XrGlobalDimmerFrameEndInfoFlagsML; + +// Flag bits for XrGlobalDimmerFrameEndInfoFlagsML +static const XrGlobalDimmerFrameEndInfoFlagsML XR_GLOBAL_DIMMER_FRAME_END_INFO_ENABLED_BIT_ML = 0x00000001; + +// XrGlobalDimmerFrameEndInfoML extends XrFrameEndInfo +typedef struct XrGlobalDimmerFrameEndInfoML { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float dimmerValue; + XrGlobalDimmerFrameEndInfoFlagsML flags; +} XrGlobalDimmerFrameEndInfoML; + + + +#define XR_MSFT_spatial_anchor_persistence 1 +XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT) +#define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256 +#define XR_MSFT_spatial_anchor_persistence_SPEC_VERSION 2 +#define XR_MSFT_SPATIAL_ANCHOR_PERSISTENCE_EXTENSION_NAME "XR_MSFT_spatial_anchor_persistence" +typedef struct XrSpatialAnchorPersistenceNameMSFT { + char name[XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT]; +} XrSpatialAnchorPersistenceNameMSFT; + +typedef struct XrSpatialAnchorPersistenceInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName; + XrSpatialAnchorMSFT spatialAnchor; +} XrSpatialAnchorPersistenceInfoMSFT; + +typedef struct XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore; + XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName; +} XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorStoreConnectionMSFT)(XrSession session, XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorStoreConnectionMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); +typedef XrResult (XRAPI_PTR *PFN_xrPersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo); +typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, uint32_t spatialAnchorNamesCapacityInput, uint32_t* spatialAnchorNamesCountOutput, XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPersistedNameMSFT)(XrSession session, const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, XrSpatialAnchorMSFT* spatialAnchor); +typedef XrResult (XRAPI_PTR *PFN_xrUnpersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName); +typedef XrResult (XRAPI_PTR *PFN_xrClearSpatialAnchorStoreMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorStoreConnectionMSFT( + XrSession session, + XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorStoreConnectionMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); + +XRAPI_ATTR XrResult XRAPI_CALL xrPersistSpatialAnchorMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePersistedSpatialAnchorNamesMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + uint32_t spatialAnchorNamesCapacityInput, + uint32_t* spatialAnchorNamesCountOutput, + XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPersistedNameMSFT( + XrSession session, + const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, + XrSpatialAnchorMSFT* spatialAnchor); + +XRAPI_ATTR XrResult XRAPI_CALL xrUnpersistSpatialAnchorMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName); + +XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_ULTRALEAP_hand_tracking_forearm 1 + +#define XR_HAND_FOREARM_JOINT_COUNT_ULTRALEAP 27 + +#define XR_ULTRALEAP_hand_tracking_forearm_SPEC_VERSION 1 +#define XR_ULTRALEAP_HAND_TRACKING_FOREARM_EXTENSION_NAME "XR_ULTRALEAP_hand_tracking_forearm" + +typedef enum XrHandForearmJointULTRALEAP { + XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP = 0, + XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP = 1, + XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP = 2, + XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP = 3, + XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP = 4, + XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP = 5, + XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP = 6, + XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP = 7, + XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP = 8, + XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP = 9, + XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP = 10, + XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP = 11, + XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP = 12, + XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP = 13, + XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP = 14, + XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP = 15, + XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP = 16, + XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP = 17, + XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP = 18, + XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP = 19, + XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP = 20, + XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP = 21, + XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP = 22, + XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP = 23, + XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP = 24, + XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP = 25, + XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP = 26, + XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP = 0x7FFFFFFF +} XrHandForearmJointULTRALEAP; + + +#define XR_FB_spatial_entity_query 1 +#define XR_FB_spatial_entity_query_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_QUERY_EXTENSION_NAME "XR_FB_spatial_entity_query" + +typedef enum XrSpaceQueryActionFB { + XR_SPACE_QUERY_ACTION_LOAD_FB = 0, + XR_SPACE_QUERY_ACTION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceQueryActionFB; + +typedef enum XrSpaceStorageLocationFB { + XR_SPACE_STORAGE_LOCATION_INVALID_FB = 0, + XR_SPACE_STORAGE_LOCATION_LOCAL_FB = 1, + XR_SPACE_STORAGE_LOCATION_CLOUD_FB = 2, + XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceStorageLocationFB; +typedef struct XR_MAY_ALIAS XrSpaceQueryInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceQueryInfoBaseHeaderFB; + +typedef struct XR_MAY_ALIAS XrSpaceFilterInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceFilterInfoBaseHeaderFB; + +typedef struct XrSpaceQueryInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceQueryActionFB queryAction; + uint32_t maxResultCount; + XrDuration timeout; + const XrSpaceFilterInfoBaseHeaderFB* filter; + const XrSpaceFilterInfoBaseHeaderFB* excludeFilter; +} XrSpaceQueryInfoFB; + +// XrSpaceStorageLocationFilterInfoFB extends XrSpaceFilterInfoBaseHeaderFB +typedef struct XrSpaceStorageLocationFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceStorageLocationFB location; +} XrSpaceStorageLocationFilterInfoFB; + +typedef struct XrSpaceUuidFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCount; + XrUuidEXT* uuids; +} XrSpaceUuidFilterInfoFB; + +typedef struct XrSpaceComponentFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; +} XrSpaceComponentFilterInfoFB; + +typedef struct XrSpaceQueryResultFB { + XrSpace space; + XrUuidEXT uuid; +} XrSpaceQueryResultFB; + +typedef struct XrSpaceQueryResultsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t resultCapacityInput; + uint32_t resultCountOutput; + XrSpaceQueryResultFB* results; +} XrSpaceQueryResultsFB; + +typedef struct XrEventDataSpaceQueryResultsAvailableFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; +} XrEventDataSpaceQueryResultsAvailableFB; + +typedef struct XrEventDataSpaceQueryCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSpaceQueryCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrQuerySpacesFB)(XrSession session, const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrRetrieveSpaceQueryResultsFB)(XrSession session, XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrQuerySpacesFB( + XrSession session, + const XrSpaceQueryInfoBaseHeaderFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrRetrieveSpaceQueryResultsFB( + XrSession session, + XrAsyncRequestIdFB requestId, + XrSpaceQueryResultsFB* results); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_storage 1 +#define XR_FB_spatial_entity_storage_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_STORAGE_EXTENSION_NAME "XR_FB_spatial_entity_storage" + +typedef enum XrSpacePersistenceModeFB { + XR_SPACE_PERSISTENCE_MODE_INVALID_FB = 0, + XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB = 1, + XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpacePersistenceModeFB; +typedef struct XrSpaceSaveInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; + XrSpacePersistenceModeFB persistenceMode; +} XrSpaceSaveInfoFB; + +typedef struct XrSpaceEraseInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; +} XrSpaceEraseInfoFB; + +typedef struct XrEventDataSpaceSaveCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceSaveCompleteFB; + +typedef struct XrEventDataSpaceEraseCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceEraseCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrSaveSpaceFB)(XrSession session, const XrSpaceSaveInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrEraseSpaceFB)(XrSession session, const XrSpaceEraseInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSaveSpaceFB( + XrSession session, + const XrSpaceSaveInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrEraseSpaceFB( + XrSession session, + const XrSpaceEraseInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_touch_controller_pro 1 +#define XR_FB_touch_controller_pro_SPEC_VERSION 1 +#define XR_FB_TOUCH_CONTROLLER_PRO_EXTENSION_NAME "XR_FB_touch_controller_pro" + + +#define XR_FB_spatial_entity_sharing 1 +XR_DEFINE_HANDLE(XrSpaceUserFB) +#define XR_FB_spatial_entity_sharing_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_SHARING_EXTENSION_NAME "XR_FB_spatial_entity_sharing" +typedef struct XrSpaceShareInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t spaceCount; + XrSpace* spaces; + uint32_t userCount; + XrSpaceUserFB* users; +} XrSpaceShareInfoFB; + +typedef struct XrEventDataSpaceShareCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSpaceShareCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrShareSpacesFB)(XrSession session, const XrSpaceShareInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrShareSpacesFB( + XrSession session, + const XrSpaceShareInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_space_warp 1 +#define XR_FB_space_warp_SPEC_VERSION 2 +#define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp" +typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB; + +// Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB +static const XrCompositionLayerSpaceWarpInfoFlagsFB XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB = 0x00000001; + +// XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView +typedef struct XrCompositionLayerSpaceWarpInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSpaceWarpInfoFlagsFB layerFlags; + XrSwapchainSubImage motionVectorSubImage; + XrPosef appSpaceDeltaPose; + XrSwapchainSubImage depthSubImage; + float minDepth; + float maxDepth; + float nearZ; + float farZ; +} XrCompositionLayerSpaceWarpInfoFB; + +// XrSystemSpaceWarpPropertiesFB extends XrSystemProperties +typedef struct XrSystemSpaceWarpPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t recommendedMotionVectorImageRectWidth; + uint32_t recommendedMotionVectorImageRectHeight; +} XrSystemSpaceWarpPropertiesFB; + + + +#define XR_FB_haptic_amplitude_envelope 1 + +#define XR_MAX_HAPTIC_AMPLITUDE_ENVELOPE_SAMPLES_FB 4000u + +#define XR_FB_haptic_amplitude_envelope_SPEC_VERSION 1 +#define XR_FB_HAPTIC_AMPLITUDE_ENVELOPE_EXTENSION_NAME "XR_FB_haptic_amplitude_envelope" +typedef struct XrHapticAmplitudeEnvelopeVibrationFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDuration duration; + uint32_t amplitudeCount; + const float* amplitudes; +} XrHapticAmplitudeEnvelopeVibrationFB; + + + +#define XR_FB_scene 1 +#define XR_FB_scene_SPEC_VERSION 1 +#define XR_FB_SCENE_EXTENSION_NAME "XR_FB_scene" +typedef struct XrExtent3DfFB { + float width; + float height; + float depth; +} XrExtent3DfFB; + +typedef struct XrOffset3DfFB { + float x; + float y; + float z; +} XrOffset3DfFB; + +typedef struct XrRect3DfFB { + XrOffset3DfFB offset; + XrExtent3DfFB extent; +} XrRect3DfFB; + +typedef struct XrSemanticLabelsFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t bufferCapacityInput; + uint32_t bufferCountOutput; + char* buffer; +} XrSemanticLabelsFB; + +typedef struct XrRoomLayoutFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidEXT floorUuid; + XrUuidEXT ceilingUuid; + uint32_t wallUuidCapacityInput; + uint32_t wallUuidCountOutput; + XrUuidEXT* wallUuids; +} XrRoomLayoutFB; + +typedef struct XrBoundary2DFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector2f* vertices; +} XrBoundary2DFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundingBox2DFB)(XrSession session, XrSpace space, XrRect2Df* boundingBox2DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundingBox3DFB)(XrSession session, XrSpace space, XrRect3DfFB* boundingBox3DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceSemanticLabelsFB)(XrSession session, XrSpace space, XrSemanticLabelsFB* semanticLabelsOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundary2DFB)(XrSession session, XrSpace space, XrBoundary2DFB* boundary2DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceRoomLayoutFB)(XrSession session, XrSpace space, XrRoomLayoutFB* roomLayoutOutput); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundingBox2DFB( + XrSession session, + XrSpace space, + XrRect2Df* boundingBox2DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundingBox3DFB( + XrSession session, + XrSpace space, + XrRect3DfFB* boundingBox3DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceSemanticLabelsFB( + XrSession session, + XrSpace space, + XrSemanticLabelsFB* semanticLabelsOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundary2DFB( + XrSession session, + XrSpace space, + XrBoundary2DFB* boundary2DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceRoomLayoutFB( + XrSession session, + XrSpace space, + XrRoomLayoutFB* roomLayoutOutput); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_palm_pose 1 +#define XR_EXT_palm_pose_SPEC_VERSION 2 +#define XR_EXT_PALM_POSE_EXTENSION_NAME "XR_EXT_palm_pose" + + +#define XR_ALMALENCE_digital_lens_control 1 +#define XR_ALMALENCE_digital_lens_control_SPEC_VERSION 1 +#define XR_ALMALENCE_DIGITAL_LENS_CONTROL_EXTENSION_NAME "XR_ALMALENCE_digital_lens_control" +typedef XrFlags64 XrDigitalLensControlFlagsALMALENCE; + +// Flag bits for XrDigitalLensControlFlagsALMALENCE +static const XrDigitalLensControlFlagsALMALENCE XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE = 0x00000001; + +typedef struct XrDigitalLensControlALMALENCE { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDigitalLensControlFlagsALMALENCE flags; +} XrDigitalLensControlALMALENCE; + +typedef XrResult (XRAPI_PTR *PFN_xrSetDigitalLensControlALMALENCE)(XrSession session, const XrDigitalLensControlALMALENCE* digitalLensControl); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE( + XrSession session, + const XrDigitalLensControlALMALENCE* digitalLensControl); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_scene_capture 1 +#define XR_FB_scene_capture_SPEC_VERSION 1 +#define XR_FB_SCENE_CAPTURE_EXTENSION_NAME "XR_FB_scene_capture" +typedef struct XrEventDataSceneCaptureCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSceneCaptureCompleteFB; + +typedef struct XrSceneCaptureRequestInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t requestByteCount; + const char* request; +} XrSceneCaptureRequestInfoFB; + +typedef XrResult (XRAPI_PTR *PFN_xrRequestSceneCaptureFB)(XrSession session, const XrSceneCaptureRequestInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrRequestSceneCaptureFB( + XrSession session, + const XrSceneCaptureRequestInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_container 1 +#define XR_FB_spatial_entity_container_SPEC_VERSION 2 +#define XR_FB_SPATIAL_ENTITY_CONTAINER_EXTENSION_NAME "XR_FB_spatial_entity_container" +typedef struct XrSpaceContainerFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCapacityInput; + uint32_t uuidCountOutput; + XrUuidEXT* uuids; +} XrSpaceContainerFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceContainerFB)(XrSession session, XrSpace space, XrSpaceContainerFB* spaceContainerOutput); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceContainerFB( + XrSession session, + XrSpace space, + XrSpaceContainerFB* spaceContainerOutput); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_META_foveation_eye_tracked 1 +#define XR_FOVEATION_CENTER_SIZE_META 2 +#define XR_META_foveation_eye_tracked_SPEC_VERSION 1 +#define XR_META_FOVEATION_EYE_TRACKED_EXTENSION_NAME "XR_META_foveation_eye_tracked" +typedef XrFlags64 XrFoveationEyeTrackedProfileCreateFlagsMETA; + +// Flag bits for XrFoveationEyeTrackedProfileCreateFlagsMETA + +typedef XrFlags64 XrFoveationEyeTrackedStateFlagsMETA; + +// Flag bits for XrFoveationEyeTrackedStateFlagsMETA +static const XrFoveationEyeTrackedStateFlagsMETA XR_FOVEATION_EYE_TRACKED_STATE_VALID_BIT_META = 0x00000001; + +// XrFoveationEyeTrackedProfileCreateInfoMETA extends XrFoveationLevelProfileCreateInfoFB +typedef struct XrFoveationEyeTrackedProfileCreateInfoMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFoveationEyeTrackedProfileCreateFlagsMETA flags; +} XrFoveationEyeTrackedProfileCreateInfoMETA; + +typedef struct XrFoveationEyeTrackedStateMETA { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVector2f foveationCenter[XR_FOVEATION_CENTER_SIZE_META]; + XrFoveationEyeTrackedStateFlagsMETA flags; +} XrFoveationEyeTrackedStateMETA; + +// XrSystemFoveationEyeTrackedPropertiesMETA extends XrSystemProperties +typedef struct XrSystemFoveationEyeTrackedPropertiesMETA { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsFoveationEyeTracked; +} XrSystemFoveationEyeTrackedPropertiesMETA; + +typedef XrResult (XRAPI_PTR *PFN_xrGetFoveationEyeTrackedStateMETA)(XrSession session, XrFoveationEyeTrackedStateMETA* foveationState); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetFoveationEyeTrackedStateMETA( + XrSession session, + XrFoveationEyeTrackedStateMETA* foveationState); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_face_tracking 1 + +#define XR_FACE_EXPRESSSION_SET_DEFAULT_FB XR_FACE_EXPRESSION_SET_DEFAULT_FB + +XR_DEFINE_HANDLE(XrFaceTrackerFB) +#define XR_FB_face_tracking_SPEC_VERSION 1 +#define XR_FB_FACE_TRACKING_EXTENSION_NAME "XR_FB_face_tracking" + +typedef enum XrFaceExpressionFB { + XR_FACE_EXPRESSION_BROW_LOWERER_L_FB = 0, + XR_FACE_EXPRESSION_BROW_LOWERER_R_FB = 1, + XR_FACE_EXPRESSION_CHEEK_PUFF_L_FB = 2, + XR_FACE_EXPRESSION_CHEEK_PUFF_R_FB = 3, + XR_FACE_EXPRESSION_CHEEK_RAISER_L_FB = 4, + XR_FACE_EXPRESSION_CHEEK_RAISER_R_FB = 5, + XR_FACE_EXPRESSION_CHEEK_SUCK_L_FB = 6, + XR_FACE_EXPRESSION_CHEEK_SUCK_R_FB = 7, + XR_FACE_EXPRESSION_CHIN_RAISER_B_FB = 8, + XR_FACE_EXPRESSION_CHIN_RAISER_T_FB = 9, + XR_FACE_EXPRESSION_DIMPLER_L_FB = 10, + XR_FACE_EXPRESSION_DIMPLER_R_FB = 11, + XR_FACE_EXPRESSION_EYES_CLOSED_L_FB = 12, + XR_FACE_EXPRESSION_EYES_CLOSED_R_FB = 13, + XR_FACE_EXPRESSION_EYES_LOOK_DOWN_L_FB = 14, + XR_FACE_EXPRESSION_EYES_LOOK_DOWN_R_FB = 15, + XR_FACE_EXPRESSION_EYES_LOOK_LEFT_L_FB = 16, + XR_FACE_EXPRESSION_EYES_LOOK_LEFT_R_FB = 17, + XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_L_FB = 18, + XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_R_FB = 19, + XR_FACE_EXPRESSION_EYES_LOOK_UP_L_FB = 20, + XR_FACE_EXPRESSION_EYES_LOOK_UP_R_FB = 21, + XR_FACE_EXPRESSION_INNER_BROW_RAISER_L_FB = 22, + XR_FACE_EXPRESSION_INNER_BROW_RAISER_R_FB = 23, + XR_FACE_EXPRESSION_JAW_DROP_FB = 24, + XR_FACE_EXPRESSION_JAW_SIDEWAYS_LEFT_FB = 25, + XR_FACE_EXPRESSION_JAW_SIDEWAYS_RIGHT_FB = 26, + XR_FACE_EXPRESSION_JAW_THRUST_FB = 27, + XR_FACE_EXPRESSION_LID_TIGHTENER_L_FB = 28, + XR_FACE_EXPRESSION_LID_TIGHTENER_R_FB = 29, + XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_L_FB = 30, + XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_R_FB = 31, + XR_FACE_EXPRESSION_LIP_CORNER_PULLER_L_FB = 32, + XR_FACE_EXPRESSION_LIP_CORNER_PULLER_R_FB = 33, + XR_FACE_EXPRESSION_LIP_FUNNELER_LB_FB = 34, + XR_FACE_EXPRESSION_LIP_FUNNELER_LT_FB = 35, + XR_FACE_EXPRESSION_LIP_FUNNELER_RB_FB = 36, + XR_FACE_EXPRESSION_LIP_FUNNELER_RT_FB = 37, + XR_FACE_EXPRESSION_LIP_PRESSOR_L_FB = 38, + XR_FACE_EXPRESSION_LIP_PRESSOR_R_FB = 39, + XR_FACE_EXPRESSION_LIP_PUCKER_L_FB = 40, + XR_FACE_EXPRESSION_LIP_PUCKER_R_FB = 41, + XR_FACE_EXPRESSION_LIP_STRETCHER_L_FB = 42, + XR_FACE_EXPRESSION_LIP_STRETCHER_R_FB = 43, + XR_FACE_EXPRESSION_LIP_SUCK_LB_FB = 44, + XR_FACE_EXPRESSION_LIP_SUCK_LT_FB = 45, + XR_FACE_EXPRESSION_LIP_SUCK_RB_FB = 46, + XR_FACE_EXPRESSION_LIP_SUCK_RT_FB = 47, + XR_FACE_EXPRESSION_LIP_TIGHTENER_L_FB = 48, + XR_FACE_EXPRESSION_LIP_TIGHTENER_R_FB = 49, + XR_FACE_EXPRESSION_LIPS_TOWARD_FB = 50, + XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_L_FB = 51, + XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_R_FB = 52, + XR_FACE_EXPRESSION_MOUTH_LEFT_FB = 53, + XR_FACE_EXPRESSION_MOUTH_RIGHT_FB = 54, + XR_FACE_EXPRESSION_NOSE_WRINKLER_L_FB = 55, + XR_FACE_EXPRESSION_NOSE_WRINKLER_R_FB = 56, + XR_FACE_EXPRESSION_OUTER_BROW_RAISER_L_FB = 57, + XR_FACE_EXPRESSION_OUTER_BROW_RAISER_R_FB = 58, + XR_FACE_EXPRESSION_UPPER_LID_RAISER_L_FB = 59, + XR_FACE_EXPRESSION_UPPER_LID_RAISER_R_FB = 60, + XR_FACE_EXPRESSION_UPPER_LIP_RAISER_L_FB = 61, + XR_FACE_EXPRESSION_UPPER_LIP_RAISER_R_FB = 62, + XR_FACE_EXPRESSION_COUNT_FB = 63, + XR_FACE_EXPRESSION_MAX_ENUM_FB = 0x7FFFFFFF +} XrFaceExpressionFB; + +typedef enum XrFaceExpressionSetFB { + XR_FACE_EXPRESSION_SET_DEFAULT_FB = 0, + XR_FACE_EXPRESSION_SET_MAX_ENUM_FB = 0x7FFFFFFF +} XrFaceExpressionSetFB; + +typedef enum XrFaceConfidenceFB { + XR_FACE_CONFIDENCE_LOWER_FACE_FB = 0, + XR_FACE_CONFIDENCE_UPPER_FACE_FB = 1, + XR_FACE_CONFIDENCE_COUNT_FB = 2, + XR_FACE_CONFIDENCE_MAX_ENUM_FB = 0x7FFFFFFF +} XrFaceConfidenceFB; +// XrSystemFaceTrackingPropertiesFB extends XrSystemProperties +typedef struct XrSystemFaceTrackingPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsFaceTracking; +} XrSystemFaceTrackingPropertiesFB; + +typedef struct XrFaceTrackerCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFaceExpressionSetFB faceExpressionSet; +} XrFaceTrackerCreateInfoFB; + +typedef struct XrFaceExpressionInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTime time; +} XrFaceExpressionInfoFB; + +typedef struct XrFaceExpressionStatusFB { + XrBool32 isValid; + XrBool32 isEyeFollowingBlendshapesValid; +} XrFaceExpressionStatusFB; + +typedef struct XrFaceExpressionWeightsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t weightCount; + float* weights; + uint32_t confidenceCount; + float* confidences; + XrFaceExpressionStatusFB status; + XrTime time; +} XrFaceExpressionWeightsFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateFaceTrackerFB)(XrSession session, const XrFaceTrackerCreateInfoFB* createInfo, XrFaceTrackerFB* faceTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyFaceTrackerFB)(XrFaceTrackerFB faceTracker); +typedef XrResult (XRAPI_PTR *PFN_xrGetFaceExpressionWeightsFB)(XrFaceTrackerFB faceTracker, const XrFaceExpressionInfoFB* expressionInfo, XrFaceExpressionWeightsFB* expressionWeights); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateFaceTrackerFB( + XrSession session, + const XrFaceTrackerCreateInfoFB* createInfo, + XrFaceTrackerFB* faceTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFaceTrackerFB( + XrFaceTrackerFB faceTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetFaceExpressionWeightsFB( + XrFaceTrackerFB faceTracker, + const XrFaceExpressionInfoFB* expressionInfo, + XrFaceExpressionWeightsFB* expressionWeights); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_eye_tracking_social 1 +XR_DEFINE_HANDLE(XrEyeTrackerFB) +#define XR_FB_eye_tracking_social_SPEC_VERSION 1 +#define XR_FB_EYE_TRACKING_SOCIAL_EXTENSION_NAME "XR_FB_eye_tracking_social" + +typedef enum XrEyePositionFB { + XR_EYE_POSITION_LEFT_FB = 0, + XR_EYE_POSITION_RIGHT_FB = 1, + XR_EYE_POSITION_COUNT_FB = 2, + XR_EYE_POSITION_MAX_ENUM_FB = 0x7FFFFFFF +} XrEyePositionFB; +typedef struct XrEyeGazeFB { + XrBool32 isValid; + XrPosef gazePose; + float gazeConfidence; +} XrEyeGazeFB; + +typedef struct XrEyeTrackerCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrEyeTrackerCreateInfoFB; + +typedef struct XrEyeGazesInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; +} XrEyeGazesInfoFB; + +// XrSystemEyeTrackingPropertiesFB extends XrSystemProperties +typedef struct XrSystemEyeTrackingPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsEyeTracking; +} XrSystemEyeTrackingPropertiesFB; + +typedef struct XrEyeGazesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrEyeGazeFB gaze[XR_EYE_POSITION_COUNT_FB]; + XrTime time; +} XrEyeGazesFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateEyeTrackerFB)(XrSession session, const XrEyeTrackerCreateInfoFB* createInfo, XrEyeTrackerFB* eyeTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyEyeTrackerFB)(XrEyeTrackerFB eyeTracker); +typedef XrResult (XRAPI_PTR *PFN_xrGetEyeGazesFB)(XrEyeTrackerFB eyeTracker, const XrEyeGazesInfoFB* gazeInfo, XrEyeGazesFB* eyeGazes); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateEyeTrackerFB( + XrSession session, + const XrEyeTrackerCreateInfoFB* createInfo, + XrEyeTrackerFB* eyeTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyEyeTrackerFB( + XrEyeTrackerFB eyeTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetEyeGazesFB( + XrEyeTrackerFB eyeTracker, + const XrEyeGazesInfoFB* gazeInfo, + XrEyeGazesFB* eyeGazes); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_passthrough_keyboard_hands 1 +#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 2 +#define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands" +typedef struct XrPassthroughKeyboardHandsIntensityFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float leftHandIntensity; + float rightHandIntensity; +} XrPassthroughKeyboardHandsIntensityFB; + +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB)(XrPassthroughLayerFB layer, const XrPassthroughKeyboardHandsIntensityFB* intensity); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB( + XrPassthroughLayerFB layer, + const XrPassthroughKeyboardHandsIntensityFB* intensity); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_settings 1 +#define XR_FB_composition_layer_settings_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_SETTINGS_EXTENSION_NAME "XR_FB_composition_layer_settings" +typedef XrFlags64 XrCompositionLayerSettingsFlagsFB; + +// Flag bits for XrCompositionLayerSettingsFlagsFB +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB = 0x00000001; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB = 0x00000002; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB = 0x00000004; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB = 0x00000008; + +// XrCompositionLayerSettingsFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerSettingsFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSettingsFlagsFB layerFlags; +} XrCompositionLayerSettingsFB; + + + +#define XR_FB_touch_controller_proximity 1 +#define XR_FB_touch_controller_proximity_SPEC_VERSION 1 +#define XR_FB_TOUCH_CONTROLLER_PROXIMITY_EXTENSION_NAME "XR_FB_touch_controller_proximity" + + +#define XR_FB_haptic_pcm 1 + +#define XR_MAX_HAPTIC_PCM_BUFFER_SIZE_FB 4000 + +#define XR_FB_haptic_pcm_SPEC_VERSION 1 +#define XR_FB_HAPTIC_PCM_EXTENSION_NAME "XR_FB_haptic_pcm" +typedef struct XrHapticPcmVibrationFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t bufferSize; + const float* buffer; + float sampleRate; + XrBool32 append; + uint32_t* samplesConsumed; +} XrHapticPcmVibrationFB; + +typedef struct XrDevicePcmSampleRateStateFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + float sampleRate; +} XrDevicePcmSampleRateStateFB; + +typedef XrDevicePcmSampleRateStateFB XrDevicePcmSampleRateGetInfoFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetDeviceSampleRateFB)(XrSession session, const XrHapticActionInfo* hapticActionInfo, XrDevicePcmSampleRateGetInfoFB* deviceSampleRate); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetDeviceSampleRateFB( + XrSession session, + const XrHapticActionInfo* hapticActionInfo, + XrDevicePcmSampleRateGetInfoFB* deviceSampleRate); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_depth_test 1 +#define XR_FB_composition_layer_depth_test_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_FB_composition_layer_depth_test" + +typedef enum XrCompareOpFB { + XR_COMPARE_OP_NEVER_FB = 0, + XR_COMPARE_OP_LESS_FB = 1, + XR_COMPARE_OP_EQUAL_FB = 2, + XR_COMPARE_OP_LESS_OR_EQUAL_FB = 3, + XR_COMPARE_OP_GREATER_FB = 4, + XR_COMPARE_OP_NOT_EQUAL_FB = 5, + XR_COMPARE_OP_GREATER_OR_EQUAL_FB = 6, + XR_COMPARE_OP_ALWAYS_FB = 7, + XR_COMPARE_OP_MAX_ENUM_FB = 0x7FFFFFFF +} XrCompareOpFB; +// XrCompositionLayerDepthTestFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerDepthTestFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 depthMask; + XrCompareOpFB compareOp; +} XrCompositionLayerDepthTestFB; + + + +#define XR_META_local_dimming 1 +#define XR_META_local_dimming_SPEC_VERSION 1 +#define XR_META_LOCAL_DIMMING_EXTENSION_NAME "XR_META_local_dimming" + +typedef enum XrLocalDimmingModeMETA { + XR_LOCAL_DIMMING_MODE_OFF_META = 0, + XR_LOCAL_DIMMING_MODE_ON_META = 1, + XR_LOCAL_DIMMING_MODE_MAX_ENUM_META = 0x7FFFFFFF +} XrLocalDimmingModeMETA; +// XrLocalDimmingFrameEndInfoMETA extends XrFrameEndInfo +typedef struct XrLocalDimmingFrameEndInfoMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrLocalDimmingModeMETA localDimmingMode; +} XrLocalDimmingFrameEndInfoMETA; + + + +#define XR_OCULUS_external_camera 1 +#define XR_MAX_EXTERNAL_CAMERA_NAME_SIZE_OCULUS 32 +#define XR_OCULUS_external_camera_SPEC_VERSION 1 +#define XR_OCULUS_EXTERNAL_CAMERA_EXTENSION_NAME "XR_OCULUS_external_camera" + +typedef enum XrExternalCameraAttachedToDeviceOCULUS { + XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_NONE_OCULUS = 0, + XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_HMD_OCULUS = 1, + XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_LTOUCH_OCULUS = 2, + XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_RTOUCH_OCULUS = 3, + XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_MAX_ENUM_OCULUS = 0x7FFFFFFF +} XrExternalCameraAttachedToDeviceOCULUS; +typedef XrFlags64 XrExternalCameraStatusFlagsOCULUS; + +// Flag bits for XrExternalCameraStatusFlagsOCULUS +static const XrExternalCameraStatusFlagsOCULUS XR_EXTERNAL_CAMERA_STATUS_CONNECTED_BIT_OCULUS = 0x00000001; +static const XrExternalCameraStatusFlagsOCULUS XR_EXTERNAL_CAMERA_STATUS_CALIBRATING_BIT_OCULUS = 0x00000002; +static const XrExternalCameraStatusFlagsOCULUS XR_EXTERNAL_CAMERA_STATUS_CALIBRATION_FAILED_BIT_OCULUS = 0x00000004; +static const XrExternalCameraStatusFlagsOCULUS XR_EXTERNAL_CAMERA_STATUS_CALIBRATED_BIT_OCULUS = 0x00000008; +static const XrExternalCameraStatusFlagsOCULUS XR_EXTERNAL_CAMERA_STATUS_CAPTURING_BIT_OCULUS = 0x00000010; + +typedef struct XrExternalCameraIntrinsicsOCULUS { + XrTime lastChangeTime; + XrFovf fov; + float virtualNearPlaneDistance; + float virtualFarPlaneDistance; + XrExtent2Di imageSensorPixelResolution; +} XrExternalCameraIntrinsicsOCULUS; + +typedef struct XrExternalCameraExtrinsicsOCULUS { + XrTime lastChangeTime; + XrExternalCameraStatusFlagsOCULUS cameraStatusFlags; + XrExternalCameraAttachedToDeviceOCULUS attachedToDevice; + XrPosef relativePose; +} XrExternalCameraExtrinsicsOCULUS; + +typedef struct XrExternalCameraOCULUS { + XrStructureType type; + const void* XR_MAY_ALIAS next; + char name[XR_MAX_EXTERNAL_CAMERA_NAME_SIZE_OCULUS]; + XrExternalCameraIntrinsicsOCULUS intrinsics; + XrExternalCameraExtrinsicsOCULUS extrinsics; +} XrExternalCameraOCULUS; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateExternalCamerasOCULUS)(XrSession session, uint32_t cameraCapacityInput, uint32_t* cameraCountOutput, XrExternalCameraOCULUS* cameras); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateExternalCamerasOCULUS( + XrSession session, + uint32_t cameraCapacityInput, + uint32_t* cameraCountOutput, + XrExternalCameraOCULUS* cameras); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_META_performance_metrics 1 +#define XR_META_performance_metrics_SPEC_VERSION 2 +#define XR_META_PERFORMANCE_METRICS_EXTENSION_NAME "XR_META_performance_metrics" + +typedef enum XrPerformanceMetricsCounterUnitMETA { + XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META = 0, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META = 1, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META = 2, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META = 3, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META = 4, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META = 0x7FFFFFFF +} XrPerformanceMetricsCounterUnitMETA; +typedef XrFlags64 XrPerformanceMetricsCounterFlagsMETA; + +// Flag bits for XrPerformanceMetricsCounterFlagsMETA +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META = 0x00000001; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META = 0x00000002; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META = 0x00000004; + +typedef struct XrPerformanceMetricsStateMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 enabled; +} XrPerformanceMetricsStateMETA; + +typedef struct XrPerformanceMetricsCounterMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPerformanceMetricsCounterFlagsMETA counterFlags; + XrPerformanceMetricsCounterUnitMETA counterUnit; + uint32_t uintValue; + float floatValue; +} XrPerformanceMetricsCounterMETA; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePerformanceMetricsCounterPathsMETA)(XrInstance instance, uint32_t counterPathCapacityInput, uint32_t* counterPathCountOutput, XrPath* counterPaths); +typedef XrResult (XRAPI_PTR *PFN_xrSetPerformanceMetricsStateMETA)(XrSession session, const XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetPerformanceMetricsStateMETA)(XrSession session, XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrQueryPerformanceMetricsCounterMETA)(XrSession session, XrPath counterPath, XrPerformanceMetricsCounterMETA* counter); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePerformanceMetricsCounterPathsMETA( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetPerformanceMetricsStateMETA( + XrSession session, + const XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetPerformanceMetricsStateMETA( + XrSession session, + XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrQueryPerformanceMetricsCounterMETA( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_storage_batch 1 +#define XR_FB_spatial_entity_storage_batch_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_STORAGE_BATCH_EXTENSION_NAME "XR_FB_spatial_entity_storage_batch" +typedef struct XrSpaceListSaveInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t spaceCount; + XrSpace* spaces; + XrSpaceStorageLocationFB location; +} XrSpaceListSaveInfoFB; + +typedef struct XrEventDataSpaceListSaveCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSpaceListSaveCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrSaveSpaceListFB)(XrSession session, const XrSpaceListSaveInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSaveSpaceListFB( + XrSession session, + const XrSpaceListSaveInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_user 1 +typedef uint64_t XrSpaceUserIdFB; +#define XR_FB_spatial_entity_user_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_USER_EXTENSION_NAME "XR_FB_spatial_entity_user" +typedef struct XrSpaceUserCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceUserIdFB userId; +} XrSpaceUserCreateInfoFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpaceUserFB)(XrSession session, const XrSpaceUserCreateInfoFB* info, XrSpaceUserFB* user); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceUserIdFB)(XrSpaceUserFB user, XrSpaceUserIdFB* userId); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpaceUserFB)(XrSpaceUserFB user); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpaceUserFB( + XrSession session, + const XrSpaceUserCreateInfoFB* info, + XrSpaceUserFB* user); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceUserIdFB( + XrSpaceUserFB user, + XrSpaceUserIdFB* userId); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpaceUserFB( + XrSpaceUserFB user); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_META_headset_id 1 +#define XR_META_headset_id_SPEC_VERSION 1 +#define XR_META_HEADSET_ID_EXTENSION_NAME "XR_META_headset_id" +// XrSystemHeadsetIdPropertiesMETA extends XrSystemProperties +typedef struct XrSystemHeadsetIdPropertiesMETA { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrUuidEXT id; +} XrSystemHeadsetIdPropertiesMETA; + + + +#define XR_EXT_uuid 1 +#define XR_EXT_uuid_SPEC_VERSION 1 +#define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid" + + +#define XR_QCOM_tracking_optimization_settings 1 +#define XR_QCOM_tracking_optimization_settings_SPEC_VERSION 1 +#define XR_QCOM_TRACKING_OPTIMIZATION_SETTINGS_EXTENSION_NAME "XR_QCOM_tracking_optimization_settings" + +typedef enum XrTrackingOptimizationSettingsDomainQCOM { + XR_TRACKING_OPTIMIZATION_SETTINGS_DOMAIN_ALL_QCOM = 1, + XR_TRACKING_OPTIMIZATION_SETTINGS_DOMAIN_MAX_ENUM_QCOM = 0x7FFFFFFF +} XrTrackingOptimizationSettingsDomainQCOM; + +typedef enum XrTrackingOptimizationSettingsHintQCOM { + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_NONE_QCOM = 0, + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LONG_RANGE_PRIORIZATION_QCOM = 1, + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_CLOSE_RANGE_PRIORIZATION_QCOM = 2, + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LOW_POWER_PRIORIZATION_QCOM = 3, + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_HIGH_POWER_PRIORIZATION_QCOM = 4, + XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_MAX_ENUM_QCOM = 0x7FFFFFFF +} XrTrackingOptimizationSettingsHintQCOM; +typedef XrResult (XRAPI_PTR *PFN_xrSetTrackingOptimizationSettingsHintQCOM)(XrSession session, XrTrackingOptimizationSettingsDomainQCOM domain, XrTrackingOptimizationSettingsHintQCOM hint); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetTrackingOptimizationSettingsHintQCOM( + XrSession session, + XrTrackingOptimizationSettingsDomainQCOM domain, + XrTrackingOptimizationSettingsHintQCOM hint); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_passthrough 1 +XR_DEFINE_HANDLE(XrPassthroughHTC) +#define XR_HTC_passthrough_SPEC_VERSION 1 +#define XR_HTC_PASSTHROUGH_EXTENSION_NAME "XR_HTC_passthrough" + +typedef enum XrPassthroughFormHTC { + XR_PASSTHROUGH_FORM_PLANAR_HTC = 0, + XR_PASSTHROUGH_FORM_PROJECTED_HTC = 1, + XR_PASSTHROUGH_FORM_MAX_ENUM_HTC = 0x7FFFFFFF +} XrPassthroughFormHTC; +typedef struct XrPassthroughCreateInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughFormHTC form; +} XrPassthroughCreateInfoHTC; + +typedef struct XrPassthroughColorHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float alpha; +} XrPassthroughColorHTC; + +// XrPassthroughMeshTransformInfoHTC extends XrCompositionLayerPassthroughHTC +typedef struct XrPassthroughMeshTransformInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t vertexCount; + const XrVector3f* vertices; + uint32_t indexCount; + const uint32_t* indices; + XrSpace baseSpace; + XrTime time; + XrPosef pose; + XrVector3f scale; +} XrPassthroughMeshTransformInfoHTC; + +typedef struct XrCompositionLayerPassthroughHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags layerFlags; + XrSpace space; + XrPassthroughHTC passthrough; + XrPassthroughColorHTC color; +} XrCompositionLayerPassthroughHTC; + +typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughHTC)(XrSession session, const XrPassthroughCreateInfoHTC* createInfo, XrPassthroughHTC* passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughHTC)(XrPassthroughHTC passthrough); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughHTC( + XrSession session, + const XrPassthroughCreateInfoHTC* createInfo, + XrPassthroughHTC* passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughHTC( + XrPassthroughHTC passthrough); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_foveation 1 +#define XR_HTC_foveation_SPEC_VERSION 1 +#define XR_HTC_FOVEATION_EXTENSION_NAME "XR_HTC_foveation" + +typedef enum XrFoveationModeHTC { + XR_FOVEATION_MODE_DISABLE_HTC = 0, + XR_FOVEATION_MODE_FIXED_HTC = 1, + XR_FOVEATION_MODE_DYNAMIC_HTC = 2, + XR_FOVEATION_MODE_CUSTOM_HTC = 3, + XR_FOVEATION_MODE_MAX_ENUM_HTC = 0x7FFFFFFF +} XrFoveationModeHTC; + +typedef enum XrFoveationLevelHTC { + XR_FOVEATION_LEVEL_NONE_HTC = 0, + XR_FOVEATION_LEVEL_LOW_HTC = 1, + XR_FOVEATION_LEVEL_MEDIUM_HTC = 2, + XR_FOVEATION_LEVEL_HIGH_HTC = 3, + XR_FOVEATION_LEVEL_MAX_ENUM_HTC = 0x7FFFFFFF +} XrFoveationLevelHTC; +typedef XrFlags64 XrFoveationDynamicFlagsHTC; + +// Flag bits for XrFoveationDynamicFlagsHTC +static const XrFoveationDynamicFlagsHTC XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_BIT_HTC = 0x00000001; +static const XrFoveationDynamicFlagsHTC XR_FOVEATION_DYNAMIC_CLEAR_FOV_ENABLED_BIT_HTC = 0x00000002; +static const XrFoveationDynamicFlagsHTC XR_FOVEATION_DYNAMIC_FOCAL_CENTER_OFFSET_ENABLED_BIT_HTC = 0x00000004; + +typedef struct XrFoveationApplyInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFoveationModeHTC mode; + uint32_t subImageCount; + XrSwapchainSubImage* subImages; +} XrFoveationApplyInfoHTC; + +typedef struct XrFoveationConfigurationHTC { + XrFoveationLevelHTC level; + float clearFovDegree; + XrVector2f focalCenterOffset; +} XrFoveationConfigurationHTC; + +// XrFoveationDynamicModeInfoHTC extends XrFoveationApplyInfoHTC +typedef struct XrFoveationDynamicModeInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFoveationDynamicFlagsHTC dynamicFlags; +} XrFoveationDynamicModeInfoHTC; + +// XrFoveationCustomModeInfoHTC extends XrFoveationApplyInfoHTC +typedef struct XrFoveationCustomModeInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t configCount; + const XrFoveationConfigurationHTC* configs; +} XrFoveationCustomModeInfoHTC; + +typedef XrResult (XRAPI_PTR *PFN_xrApplyFoveationHTC)(XrSession session, const XrFoveationApplyInfoHTC* applyInfo); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrApplyFoveationHTC( + XrSession session, + const XrFoveationApplyInfoHTC* applyInfo); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_active_action_set_priority 1 +#define XR_EXT_active_action_set_priority_SPEC_VERSION 1 +#define XR_EXT_ACTIVE_ACTION_SET_PRIORITY_EXTENSION_NAME "XR_EXT_active_action_set_priority" +typedef struct XrActiveActionSetPriorityEXT { + XrActionSet actionSet; + uint32_t priorityOverride; +} XrActiveActionSetPriorityEXT; + +// XrActiveActionSetPrioritiesEXT extends XrActionsSyncInfo +typedef struct XrActiveActionSetPrioritiesEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t actionSetPriorityCount; + const XrActiveActionSetPriorityEXT* actionSetPriorities; +} XrActiveActionSetPrioritiesEXT; + + + +#define XR_MNDX_force_feedback_curl 1 +#define XR_MNDX_force_feedback_curl_SPEC_VERSION 1 +#define XR_MNDX_FORCE_FEEDBACK_CURL_EXTENSION_NAME "XR_MNDX_force_feedback_curl" + +typedef enum XrForceFeedbackCurlLocationMNDX { + XR_FORCE_FEEDBACK_CURL_LOCATION_THUMB_CURL_MNDX = 0, + XR_FORCE_FEEDBACK_CURL_LOCATION_INDEX_CURL_MNDX = 1, + XR_FORCE_FEEDBACK_CURL_LOCATION_MIDDLE_CURL_MNDX = 2, + XR_FORCE_FEEDBACK_CURL_LOCATION_RING_CURL_MNDX = 3, + XR_FORCE_FEEDBACK_CURL_LOCATION_LITTLE_CURL_MNDX = 4, + XR_FORCE_FEEDBACK_CURL_LOCATION_MAX_ENUM_MNDX = 0x7FFFFFFF +} XrForceFeedbackCurlLocationMNDX; +// XrSystemForceFeedbackCurlPropertiesMNDX extends XrSystemProperties +typedef struct XrSystemForceFeedbackCurlPropertiesMNDX { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsForceFeedbackCurl; +} XrSystemForceFeedbackCurlPropertiesMNDX; + +typedef struct XrForceFeedbackCurlApplyLocationMNDX { + XrForceFeedbackCurlLocationMNDX location; + float value; +} XrForceFeedbackCurlApplyLocationMNDX; + +typedef struct XrForceFeedbackCurlApplyLocationsMNDX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t locationCount; + XrForceFeedbackCurlApplyLocationMNDX* locations; +} XrForceFeedbackCurlApplyLocationsMNDX; + +typedef XrResult (XRAPI_PTR *PFN_xrApplyForceFeedbackCurlMNDX)(XrHandTrackerEXT handTracker, const XrForceFeedbackCurlApplyLocationsMNDX* locations); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrApplyForceFeedbackCurlMNDX( + XrHandTrackerEXT handTracker, + const XrForceFeedbackCurlApplyLocationsMNDX* locations); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_BD_controller_interaction 1 +#define XR_BD_controller_interaction_SPEC_VERSION 1 +#define XR_BD_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_BD_controller_interaction" + + +#define XR_EXT_local_floor 1 +#define XR_EXT_local_floor_SPEC_VERSION 1 +#define XR_EXT_LOCAL_FLOOR_EXTENSION_NAME "XR_EXT_local_floor" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform.h new file mode 100644 index 000000000..8685de3c5 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform.h @@ -0,0 +1,714 @@ +#ifndef OPENXR_PLATFORM_H_ +#define OPENXR_PLATFORM_H_ 1 + +/* +** Copyright 2017-2023 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +/* +** This header is generated from the Khronos OpenXR XML API Registry. +** +*/ + +#include "openxr.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_KHR_android_thread_settings 1 +#define XR_KHR_android_thread_settings_SPEC_VERSION 5 +#define XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME "XR_KHR_android_thread_settings" + +typedef enum XrAndroidThreadTypeKHR { + XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR = 1, + XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR = 2, + XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR = 3, + XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR = 4, + XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} XrAndroidThreadTypeKHR; +typedef XrResult (XRAPI_PTR *PFN_xrSetAndroidApplicationThreadKHR)(XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR( + XrSession session, + XrAndroidThreadTypeKHR threadType, + uint32_t threadId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_KHR_android_surface_swapchain 1 +#define XR_KHR_android_surface_swapchain_SPEC_VERSION 4 +#define XR_KHR_ANDROID_SURFACE_SWAPCHAIN_EXTENSION_NAME "XR_KHR_android_surface_swapchain" +typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchainAndroidSurfaceKHR)(XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR( + XrSession session, + const XrSwapchainCreateInfo* info, + XrSwapchain* swapchain, + jobject* surface); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_KHR_android_create_instance 1 +#define XR_KHR_android_create_instance_SPEC_VERSION 3 +#define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance" +// XrInstanceCreateInfoAndroidKHR extends XrInstanceCreateInfo +typedef struct XrInstanceCreateInfoAndroidKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + void* XR_MAY_ALIAS applicationVM; + void* XR_MAY_ALIAS applicationActivity; +} XrInstanceCreateInfoAndroidKHR; + +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_KHR_vulkan_swapchain_format_list 1 +#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4 +#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list" +typedef struct XrVulkanSwapchainFormatListCreateInfoKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t viewFormatCount; + const VkFormat* viewFormats; +} XrVulkanSwapchainFormatListCreateInfoKHR; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_GRAPHICS_API_OPENGL + +#define XR_KHR_opengl_enable 1 +#define XR_KHR_opengl_enable_SPEC_VERSION 10 +#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable" +#ifdef XR_USE_PLATFORM_WIN32 +// XrGraphicsBindingOpenGLWin32KHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingOpenGLWin32KHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + HDC hDC; + HGLRC hGLRC; +} XrGraphicsBindingOpenGLWin32KHR; +#endif // XR_USE_PLATFORM_WIN32 + +#ifdef XR_USE_PLATFORM_XLIB +// XrGraphicsBindingOpenGLXlibKHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingOpenGLXlibKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + Display* xDisplay; + uint32_t visualid; + GLXFBConfig glxFBConfig; + GLXDrawable glxDrawable; + GLXContext glxContext; +} XrGraphicsBindingOpenGLXlibKHR; +#endif // XR_USE_PLATFORM_XLIB + +#ifdef XR_USE_PLATFORM_XCB +// XrGraphicsBindingOpenGLXcbKHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingOpenGLXcbKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + xcb_connection_t* connection; + uint32_t screenNumber; + xcb_glx_fbconfig_t fbconfigid; + xcb_visualid_t visualid; + xcb_glx_drawable_t glxDrawable; + xcb_glx_context_t glxContext; +} XrGraphicsBindingOpenGLXcbKHR; +#endif // XR_USE_PLATFORM_XCB + +#ifdef XR_USE_PLATFORM_WAYLAND +// XrGraphicsBindingOpenGLWaylandKHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingOpenGLWaylandKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + struct wl_display* display; +} XrGraphicsBindingOpenGLWaylandKHR; +#endif // XR_USE_PLATFORM_WAYLAND + +typedef struct XrSwapchainImageOpenGLKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t image; +} XrSwapchainImageOpenGLKHR; + +typedef struct XrGraphicsRequirementsOpenGLKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVersion minApiVersionSupported; + XrVersion maxApiVersionSupported; +} XrGraphicsRequirementsOpenGLKHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsOpenGLKHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_OPENGL */ + +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES + +#define XR_KHR_opengl_es_enable 1 +#define XR_KHR_opengl_es_enable_SPEC_VERSION 8 +#define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable" +#ifdef XR_USE_PLATFORM_ANDROID +// XrGraphicsBindingOpenGLESAndroidKHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingOpenGLESAndroidKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + EGLDisplay display; + EGLConfig config; + EGLContext context; +} XrGraphicsBindingOpenGLESAndroidKHR; +#endif // XR_USE_PLATFORM_ANDROID + +typedef struct XrSwapchainImageOpenGLESKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t image; +} XrSwapchainImageOpenGLESKHR; + +typedef struct XrGraphicsRequirementsOpenGLESKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVersion minApiVersionSupported; + XrVersion maxApiVersionSupported; +} XrGraphicsRequirementsOpenGLESKHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLESGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_KHR_vulkan_enable 1 +#define XR_KHR_vulkan_enable_SPEC_VERSION 8 +#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable" +// XrGraphicsBindingVulkanKHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingVulkanKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + VkInstance instance; + VkPhysicalDevice physicalDevice; + VkDevice device; + uint32_t queueFamilyIndex; + uint32_t queueIndex; +} XrGraphicsBindingVulkanKHR; + +typedef struct XrSwapchainImageVulkanKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + VkImage image; +} XrSwapchainImageVulkanKHR; + +typedef struct XrGraphicsRequirementsVulkanKHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrVersion minApiVersionSupported; + XrVersion maxApiVersionSupported; +} XrGraphicsRequirementsVulkanKHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanInstanceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer); +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanDeviceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer); +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDeviceKHR)(XrInstance instance, XrSystemId systemId, VkInstance vkInstance, VkPhysicalDevice* vkPhysicalDevice); +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanInstanceExtensionsKHR( + XrInstance instance, + XrSystemId systemId, + uint32_t bufferCapacityInput, + uint32_t* bufferCountOutput, + char* buffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanDeviceExtensionsKHR( + XrInstance instance, + XrSystemId systemId, + uint32_t bufferCapacityInput, + uint32_t* bufferCountOutput, + char* buffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDeviceKHR( + XrInstance instance, + XrSystemId systemId, + VkInstance vkInstance, + VkPhysicalDevice* vkPhysicalDevice); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsVulkanKHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_GRAPHICS_API_D3D11 + +#define XR_KHR_D3D11_enable 1 +#define XR_KHR_D3D11_enable_SPEC_VERSION 9 +#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable" +// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingD3D11KHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + ID3D11Device* device; +} XrGraphicsBindingD3D11KHR; + +typedef struct XrSwapchainImageD3D11KHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + ID3D11Texture2D* texture; +} XrSwapchainImageD3D11KHR; + +typedef struct XrGraphicsRequirementsD3D11KHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + LUID adapterLuid; + D3D_FEATURE_LEVEL minFeatureLevel; +} XrGraphicsRequirementsD3D11KHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetD3D11GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsD3D11KHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_D3D11 */ + +#ifdef XR_USE_GRAPHICS_API_D3D12 + +#define XR_KHR_D3D12_enable 1 +#define XR_KHR_D3D12_enable_SPEC_VERSION 9 +#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable" +// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo +typedef struct XrGraphicsBindingD3D12KHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + ID3D12Device* device; + ID3D12CommandQueue* queue; +} XrGraphicsBindingD3D12KHR; + +typedef struct XrSwapchainImageD3D12KHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + ID3D12Resource* texture; +} XrSwapchainImageD3D12KHR; + +typedef struct XrGraphicsRequirementsD3D12KHR { + XrStructureType type; + void* XR_MAY_ALIAS next; + LUID adapterLuid; + D3D_FEATURE_LEVEL minFeatureLevel; +} XrGraphicsRequirementsD3D12KHR; + +typedef XrResult (XRAPI_PTR *PFN_xrGetD3D12GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsD3D12KHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_D3D12 */ + +#ifdef XR_USE_PLATFORM_WIN32 + +#define XR_KHR_win32_convert_performance_counter_time 1 +#define XR_KHR_win32_convert_performance_counter_time_SPEC_VERSION 1 +#define XR_KHR_WIN32_CONVERT_PERFORMANCE_COUNTER_TIME_EXTENSION_NAME "XR_KHR_win32_convert_performance_counter_time" +typedef XrResult (XRAPI_PTR *PFN_xrConvertWin32PerformanceCounterToTimeKHR)(XrInstance instance, const LARGE_INTEGER* performanceCounter, XrTime* time); +typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToWin32PerformanceCounterKHR)(XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrConvertWin32PerformanceCounterToTimeKHR( + XrInstance instance, + const LARGE_INTEGER* performanceCounter, + XrTime* time); + +XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR( + XrInstance instance, + XrTime time, + LARGE_INTEGER* performanceCounter); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_WIN32 */ + +#ifdef XR_USE_TIMESPEC + +#define XR_KHR_convert_timespec_time 1 +#define XR_KHR_convert_timespec_time_SPEC_VERSION 1 +#define XR_KHR_CONVERT_TIMESPEC_TIME_EXTENSION_NAME "XR_KHR_convert_timespec_time" +typedef XrResult (XRAPI_PTR *PFN_xrConvertTimespecTimeToTimeKHR)(XrInstance instance, const struct timespec* timespecTime, XrTime* time); +typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToTimespecTimeKHR)(XrInstance instance, XrTime time, struct timespec* timespecTime); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimespecTimeToTimeKHR( + XrInstance instance, + const struct timespec* timespecTime, + XrTime* time); + +XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR( + XrInstance instance, + XrTime time, + struct timespec* timespecTime); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_TIMESPEC */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_KHR_loader_init_android 1 +#define XR_KHR_loader_init_android_SPEC_VERSION 1 +#define XR_KHR_LOADER_INIT_ANDROID_EXTENSION_NAME "XR_KHR_loader_init_android" +typedef struct XrLoaderInitInfoAndroidKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + void* XR_MAY_ALIAS applicationVM; + void* XR_MAY_ALIAS applicationContext; +} XrLoaderInitInfoAndroidKHR; + +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_KHR_vulkan_enable2 1 +#define XR_KHR_vulkan_enable2_SPEC_VERSION 2 +#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2" +typedef XrFlags64 XrVulkanInstanceCreateFlagsKHR; + +// Flag bits for XrVulkanInstanceCreateFlagsKHR + +typedef XrFlags64 XrVulkanDeviceCreateFlagsKHR; + +// Flag bits for XrVulkanDeviceCreateFlagsKHR + +typedef struct XrVulkanInstanceCreateInfoKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSystemId systemId; + XrVulkanInstanceCreateFlagsKHR createFlags; + PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; + const VkInstanceCreateInfo* vulkanCreateInfo; + const VkAllocationCallbacks* vulkanAllocator; +} XrVulkanInstanceCreateInfoKHR; + +typedef struct XrVulkanDeviceCreateInfoKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSystemId systemId; + XrVulkanDeviceCreateFlagsKHR createFlags; + PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; + VkPhysicalDevice vulkanPhysicalDevice; + const VkDeviceCreateInfo* vulkanCreateInfo; + const VkAllocationCallbacks* vulkanAllocator; +} XrVulkanDeviceCreateInfoKHR; + +typedef XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkan2KHR; + +typedef struct XrVulkanGraphicsDeviceGetInfoKHR { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSystemId systemId; + VkInstance vulkanInstance; +} XrVulkanGraphicsDeviceGetInfoKHR; + +typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR; + +typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult); +typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult); +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice); +typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanInstanceKHR( + XrInstance instance, + const XrVulkanInstanceCreateInfoKHR* createInfo, + VkInstance* vulkanInstance, + VkResult* vulkanResult); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanDeviceKHR( + XrInstance instance, + const XrVulkanDeviceCreateInfoKHR* createInfo, + VkDevice* vulkanDevice, + VkResult* vulkanResult); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDevice2KHR( + XrInstance instance, + const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, + VkPhysicalDevice* vulkanPhysicalDevice); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR( + XrInstance instance, + XrSystemId systemId, + XrGraphicsRequirementsVulkanKHR* graphicsRequirements); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_PLATFORM_EGL + +#define XR_MNDX_egl_enable 1 +#define XR_MNDX_egl_enable_SPEC_VERSION 1 +#define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable" +// XrGraphicsBindingEGLMNDX extends XrSessionCreateInfo +typedef struct XrGraphicsBindingEGLMNDX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + PFNEGLGETPROCADDRESSPROC getProcAddress; + EGLDisplay display; + EGLConfig config; + EGLContext context; +} XrGraphicsBindingEGLMNDX; + +#endif /* XR_USE_PLATFORM_EGL */ + +#ifdef XR_USE_PLATFORM_WIN32 + +#define XR_MSFT_perception_anchor_interop 1 +#define XR_MSFT_perception_anchor_interop_SPEC_VERSION 1 +#define XR_MSFT_PERCEPTION_ANCHOR_INTEROP_EXTENSION_NAME "XR_MSFT_perception_anchor_interop" +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT)(XrSession session, IUnknown* perceptionAnchor, XrSpatialAnchorMSFT* anchor); +typedef XrResult (XRAPI_PTR *PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)(XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPerceptionAnchorMSFT( + XrSession session, + IUnknown* perceptionAnchor, + XrSpatialAnchorMSFT* anchor); + +XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT( + XrSession session, + XrSpatialAnchorMSFT anchor, + IUnknown** perceptionAnchor); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_WIN32 */ + +#ifdef XR_USE_PLATFORM_WIN32 + +#define XR_MSFT_holographic_window_attachment 1 +#define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1 +#define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment" +#ifdef XR_USE_PLATFORM_WIN32 +// XrHolographicWindowAttachmentMSFT extends XrSessionCreateInfo +typedef struct XrHolographicWindowAttachmentMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + IUnknown* holographicSpace; + IUnknown* coreWindow; +} XrHolographicWindowAttachmentMSFT; +#endif // XR_USE_PLATFORM_WIN32 + +#endif /* XR_USE_PLATFORM_WIN32 */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_FB_android_surface_swapchain_create 1 +#define XR_FB_android_surface_swapchain_create_SPEC_VERSION 1 +#define XR_FB_ANDROID_SURFACE_SWAPCHAIN_CREATE_EXTENSION_NAME "XR_FB_android_surface_swapchain_create" +typedef XrFlags64 XrAndroidSurfaceSwapchainFlagsFB; + +// Flag bits for XrAndroidSurfaceSwapchainFlagsFB +static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB = 0x00000001; +static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB = 0x00000002; + +#ifdef XR_USE_PLATFORM_ANDROID +// XrAndroidSurfaceSwapchainCreateInfoFB extends XrSwapchainCreateInfo +typedef struct XrAndroidSurfaceSwapchainCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAndroidSurfaceSwapchainFlagsFB createFlags; +} XrAndroidSurfaceSwapchainCreateInfoFB; +#endif // XR_USE_PLATFORM_ANDROID + +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_PLATFORM_ML + +#define XR_ML_compat 1 +#define XR_ML_compat_SPEC_VERSION 1 +#define XR_ML_COMPAT_EXTENSION_NAME "XR_ML_compat" +typedef struct XrCoordinateSpaceCreateInfoML { + XrStructureType type; + const void* XR_MAY_ALIAS next; + MLCoordinateFrameUID cfuid; + XrPosef poseInCoordinateSpace; +} XrCoordinateSpaceCreateInfoML; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpaceFromCoordinateFrameUIDML)(XrSession session, const XrCoordinateSpaceCreateInfoML *createInfo, XrSpace* space); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpaceFromCoordinateFrameUIDML( + XrSession session, + const XrCoordinateSpaceCreateInfoML * createInfo, + XrSpace* space); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_ML */ + +#ifdef XR_USE_PLATFORM_WIN32 + +#define XR_OCULUS_audio_device_guid 1 +#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1 +#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid" +#define XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS 128 +typedef XrResult (XRAPI_PTR *PFN_xrGetAudioOutputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); +typedef XrResult (XRAPI_PTR *PFN_xrGetAudioInputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioOutputDeviceGuidOculus( + XrInstance instance, + wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus( + XrInstance instance, + wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_WIN32 */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_FB_foveation_vulkan 1 +#define XR_FB_foveation_vulkan_SPEC_VERSION 1 +#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan" +// XrSwapchainImageFoveationVulkanFB extends XrSwapchainImageVulkanKHR +typedef struct XrSwapchainImageFoveationVulkanFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + VkImage image; + uint32_t width; + uint32_t height; +} XrSwapchainImageFoveationVulkanFB; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_FB_swapchain_update_state_android_surface 1 +#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface" +#ifdef XR_USE_PLATFORM_ANDROID +typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t width; + uint32_t height; +} XrSwapchainStateAndroidSurfaceDimensionsFB; +#endif // XR_USE_PLATFORM_ANDROID + +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES + +#define XR_FB_swapchain_update_state_opengl_es 1 +#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es" +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES +typedef struct XrSwapchainStateSamplerOpenGLESFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + EGLenum minFilter; + EGLenum magFilter; + EGLenum wrapModeS; + EGLenum wrapModeT; + EGLenum swizzleRed; + EGLenum swizzleGreen; + EGLenum swizzleBlue; + EGLenum swizzleAlpha; + float maxAnisotropy; + XrColor4f borderColor; +} XrSwapchainStateSamplerOpenGLESFB; +#endif // XR_USE_GRAPHICS_API_OPENGL_ES + +#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_FB_swapchain_update_state_vulkan 1 +#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan" +#ifdef XR_USE_GRAPHICS_API_VULKAN +typedef struct XrSwapchainStateSamplerVulkanFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + VkFilter minFilter; + VkFilter magFilter; + VkSamplerMipmapMode mipmapMode; + VkSamplerAddressMode wrapModeS; + VkSamplerAddressMode wrapModeT; + VkComponentSwizzle swizzleRed; + VkComponentSwizzle swizzleGreen; + VkComponentSwizzle swizzleBlue; + VkComponentSwizzle swizzleAlpha; + float maxAnisotropy; + XrColor4f borderColor; +} XrSwapchainStateSamplerVulkanFB; +#endif // XR_USE_GRAPHICS_API_VULKAN + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_META_vulkan_swapchain_create_info 1 +#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1 +#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info" +// XrVulkanSwapchainCreateInfoMETA extends XrSwapchainCreateInfo +typedef struct XrVulkanSwapchainCreateInfoMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + VkImageCreateFlags additionalCreateFlags; + VkImageUsageFlags additionalUsageFlags; +} XrVulkanSwapchainCreateInfoMETA; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform_defines.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform_defines.h new file mode 100644 index 000000000..9573c101e --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr_platform_defines.h @@ -0,0 +1,110 @@ +/* +** Copyright (c) 2017-2023, The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +#ifndef OPENXR_PLATFORM_DEFINES_H_ +#define OPENXR_PLATFORM_DEFINES_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Platform-specific calling convention macros. + * + * Platforms should define these so that OpenXR clients call OpenXR functions + * with the same calling conventions that the OpenXR implementation expects. + * + * XRAPI_ATTR - Placed before the return type in function declarations. + * Useful for C++11 and GCC/Clang-style function attribute syntax. + * XRAPI_CALL - Placed after the return type in function declarations. + * Useful for MSVC-style calling convention syntax. + * XRAPI_PTR - Placed between the '(' and '*' in function pointer types. + * + * Function declaration: XRAPI_ATTR void XRAPI_CALL xrFunction(void); + * Function pointer type: typedef void (XRAPI_PTR *PFN_xrFunction)(void); + */ +#if defined(_WIN32) +#define XRAPI_ATTR +// On Windows, functions use the stdcall convention +#define XRAPI_CALL __stdcall +#define XRAPI_PTR XRAPI_CALL +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 +#error "API not supported for the 'armeabi' NDK ABI" +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) +// On Android 32-bit ARM targets, functions use the "hardfloat" +// calling convention, i.e. float parameters are passed in registers. This +// is true even if the rest of the application passes floats on the stack, +// as it does by default when compiling for the armeabi-v7a NDK ABI. +#define XRAPI_ATTR __attribute__((pcs("aapcs-vfp"))) +#define XRAPI_CALL +#define XRAPI_PTR XRAPI_ATTR +#else +// On other platforms, use the default calling convention +#define XRAPI_ATTR +#define XRAPI_CALL +#define XRAPI_PTR +#endif + +#include + +#if !defined(XR_NO_STDINT_H) +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef signed __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef signed __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef signed __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +#include +#endif +#endif // !defined( XR_NO_STDINT_H ) + +// XR_PTR_SIZE (in bytes) +#if (defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)) +#define XR_PTR_SIZE 8 +#else +#define XR_PTR_SIZE 4 +#endif + +// Needed so we can use clang __has_feature portably. +#if !defined(XR_COMPILER_HAS_FEATURE) +#if defined(__clang__) +#define XR_COMPILER_HAS_FEATURE(x) __has_feature(x) +#else +#define XR_COMPILER_HAS_FEATURE(x) 0 +#endif +#endif + +// Identifies if the current compiler has C++11 support enabled. +// Does not by itself identify if any given C++11 feature is present. +#if !defined(XR_CPP11_ENABLED) && defined(__cplusplus) +#if defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) +#define XR_CPP11_ENABLED 1 +#elif defined(_MSC_VER) && (_MSC_VER >= 1600) +#define XR_CPP11_ENABLED 1 +#elif (__cplusplus >= 201103L) // 201103 is the first C++11 version. +#define XR_CPP11_ENABLED 1 +#endif +#endif + +// Identifies if the current compiler supports C++11 nullptr. +#if !defined(XR_CPP_NULLPTR_SUPPORTED) +#if defined(XR_CPP11_ENABLED) && \ + ((defined(__clang__) && XR_COMPILER_HAS_FEATURE(cxx_nullptr)) || \ + (defined(__GNUC__) && (((__GNUC__ * 1000) + __GNUC_MINOR__) >= 4006)) || \ + (defined(_MSC_VER) && (_MSC_VER >= 1600)) || \ + (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 403))) +#define XR_CPP_NULLPTR_SUPPORTED 1 +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection.h new file mode 100644 index 000000000..f6021cfca --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection.h @@ -0,0 +1,4207 @@ +#ifndef OPENXR_REFLECTION_H_ +#define OPENXR_REFLECTION_H_ 1 + +/* +** Copyright (c) 2017-2023, The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +/* +** This header is generated from the Khronos OpenXR XML API Registry. +** +*/ + +#include "openxr.h" + +/* +This file contains expansion macros (X Macros) for OpenXR enumerations and structures. +Example of how to use expansion macros to make an enum-to-string function: + +#define XR_ENUM_CASE_STR(name, val) case name: return #name; +#define XR_ENUM_STR(enumType) \ + constexpr const char* XrEnumStr(enumType e) { \ + switch (e) { \ + XR_LIST_ENUM_##enumType(XR_ENUM_CASE_STR) \ + default: return "Unknown"; \ + } \ + } \ + +XR_ENUM_STR(XrResult); +*/ + +#define XR_LIST_ENUM_XrResult(_) \ + _(XR_SUCCESS, 0) \ + _(XR_TIMEOUT_EXPIRED, 1) \ + _(XR_SESSION_LOSS_PENDING, 3) \ + _(XR_EVENT_UNAVAILABLE, 4) \ + _(XR_SPACE_BOUNDS_UNAVAILABLE, 7) \ + _(XR_SESSION_NOT_FOCUSED, 8) \ + _(XR_FRAME_DISCARDED, 9) \ + _(XR_ERROR_VALIDATION_FAILURE, -1) \ + _(XR_ERROR_RUNTIME_FAILURE, -2) \ + _(XR_ERROR_OUT_OF_MEMORY, -3) \ + _(XR_ERROR_API_VERSION_UNSUPPORTED, -4) \ + _(XR_ERROR_INITIALIZATION_FAILED, -6) \ + _(XR_ERROR_FUNCTION_UNSUPPORTED, -7) \ + _(XR_ERROR_FEATURE_UNSUPPORTED, -8) \ + _(XR_ERROR_EXTENSION_NOT_PRESENT, -9) \ + _(XR_ERROR_LIMIT_REACHED, -10) \ + _(XR_ERROR_SIZE_INSUFFICIENT, -11) \ + _(XR_ERROR_HANDLE_INVALID, -12) \ + _(XR_ERROR_INSTANCE_LOST, -13) \ + _(XR_ERROR_SESSION_RUNNING, -14) \ + _(XR_ERROR_SESSION_NOT_RUNNING, -16) \ + _(XR_ERROR_SESSION_LOST, -17) \ + _(XR_ERROR_SYSTEM_INVALID, -18) \ + _(XR_ERROR_PATH_INVALID, -19) \ + _(XR_ERROR_PATH_COUNT_EXCEEDED, -20) \ + _(XR_ERROR_PATH_FORMAT_INVALID, -21) \ + _(XR_ERROR_PATH_UNSUPPORTED, -22) \ + _(XR_ERROR_LAYER_INVALID, -23) \ + _(XR_ERROR_LAYER_LIMIT_EXCEEDED, -24) \ + _(XR_ERROR_SWAPCHAIN_RECT_INVALID, -25) \ + _(XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED, -26) \ + _(XR_ERROR_ACTION_TYPE_MISMATCH, -27) \ + _(XR_ERROR_SESSION_NOT_READY, -28) \ + _(XR_ERROR_SESSION_NOT_STOPPING, -29) \ + _(XR_ERROR_TIME_INVALID, -30) \ + _(XR_ERROR_REFERENCE_SPACE_UNSUPPORTED, -31) \ + _(XR_ERROR_FILE_ACCESS_ERROR, -32) \ + _(XR_ERROR_FILE_CONTENTS_INVALID, -33) \ + _(XR_ERROR_FORM_FACTOR_UNSUPPORTED, -34) \ + _(XR_ERROR_FORM_FACTOR_UNAVAILABLE, -35) \ + _(XR_ERROR_API_LAYER_NOT_PRESENT, -36) \ + _(XR_ERROR_CALL_ORDER_INVALID, -37) \ + _(XR_ERROR_GRAPHICS_DEVICE_INVALID, -38) \ + _(XR_ERROR_POSE_INVALID, -39) \ + _(XR_ERROR_INDEX_OUT_OF_RANGE, -40) \ + _(XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, -41) \ + _(XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED, -42) \ + _(XR_ERROR_NAME_DUPLICATED, -44) \ + _(XR_ERROR_NAME_INVALID, -45) \ + _(XR_ERROR_ACTIONSET_NOT_ATTACHED, -46) \ + _(XR_ERROR_ACTIONSETS_ALREADY_ATTACHED, -47) \ + _(XR_ERROR_LOCALIZED_NAME_DUPLICATED, -48) \ + _(XR_ERROR_LOCALIZED_NAME_INVALID, -49) \ + _(XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, -50) \ + _(XR_ERROR_RUNTIME_UNAVAILABLE, -51) \ + _(XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR, -1000003000) \ + _(XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR, -1000003001) \ + _(XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT, -1000039001) \ + _(XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT, -1000053000) \ + _(XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT, -1000055000) \ + _(XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT, -1000066000) \ + _(XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT, -1000097000) \ + _(XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT, -1000097001) \ + _(XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT, -1000097002) \ + _(XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT, -1000097003) \ + _(XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT, -1000097004) \ + _(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \ + _(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \ + _(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB, -1000113000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB, -1000113001) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB, -1000113002) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB, -1000113003) \ + _(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \ + _(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \ + _(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \ + _(XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB, -1000118003) \ + _(XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB, -1000118004) \ + _(XR_ERROR_UNKNOWN_PASSTHROUGH_FB, -1000118050) \ + _(XR_ERROR_RENDER_MODEL_KEY_INVALID_FB, -1000119000) \ + _(XR_RENDER_MODEL_UNAVAILABLE_FB, 1000119020) \ + _(XR_ERROR_MARKER_NOT_TRACKED_VARJO, -1000124000) \ + _(XR_ERROR_MARKER_ID_INVALID_VARJO, -1000124001) \ + _(XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT, -1000142001) \ + _(XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT, -1000142002) \ + _(XR_ERROR_SPACE_MAPPING_INSUFFICIENT_FB, -1000169000) \ + _(XR_ERROR_SPACE_LOCALIZATION_FAILED_FB, -1000169001) \ + _(XR_ERROR_SPACE_NETWORK_TIMEOUT_FB, -1000169002) \ + _(XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB, -1000169003) \ + _(XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB, -1000169004) \ + _(XR_ERROR_HINT_ALREADY_SET_QCOM, -1000306000) \ + _(XR_RESULT_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrStructureType(_) \ + _(XR_TYPE_UNKNOWN, 0) \ + _(XR_TYPE_API_LAYER_PROPERTIES, 1) \ + _(XR_TYPE_EXTENSION_PROPERTIES, 2) \ + _(XR_TYPE_INSTANCE_CREATE_INFO, 3) \ + _(XR_TYPE_SYSTEM_GET_INFO, 4) \ + _(XR_TYPE_SYSTEM_PROPERTIES, 5) \ + _(XR_TYPE_VIEW_LOCATE_INFO, 6) \ + _(XR_TYPE_VIEW, 7) \ + _(XR_TYPE_SESSION_CREATE_INFO, 8) \ + _(XR_TYPE_SWAPCHAIN_CREATE_INFO, 9) \ + _(XR_TYPE_SESSION_BEGIN_INFO, 10) \ + _(XR_TYPE_VIEW_STATE, 11) \ + _(XR_TYPE_FRAME_END_INFO, 12) \ + _(XR_TYPE_HAPTIC_VIBRATION, 13) \ + _(XR_TYPE_EVENT_DATA_BUFFER, 16) \ + _(XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, 17) \ + _(XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, 18) \ + _(XR_TYPE_ACTION_STATE_BOOLEAN, 23) \ + _(XR_TYPE_ACTION_STATE_FLOAT, 24) \ + _(XR_TYPE_ACTION_STATE_VECTOR2F, 25) \ + _(XR_TYPE_ACTION_STATE_POSE, 27) \ + _(XR_TYPE_ACTION_SET_CREATE_INFO, 28) \ + _(XR_TYPE_ACTION_CREATE_INFO, 29) \ + _(XR_TYPE_INSTANCE_PROPERTIES, 32) \ + _(XR_TYPE_FRAME_WAIT_INFO, 33) \ + _(XR_TYPE_COMPOSITION_LAYER_PROJECTION, 35) \ + _(XR_TYPE_COMPOSITION_LAYER_QUAD, 36) \ + _(XR_TYPE_REFERENCE_SPACE_CREATE_INFO, 37) \ + _(XR_TYPE_ACTION_SPACE_CREATE_INFO, 38) \ + _(XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, 40) \ + _(XR_TYPE_VIEW_CONFIGURATION_VIEW, 41) \ + _(XR_TYPE_SPACE_LOCATION, 42) \ + _(XR_TYPE_SPACE_VELOCITY, 43) \ + _(XR_TYPE_FRAME_STATE, 44) \ + _(XR_TYPE_VIEW_CONFIGURATION_PROPERTIES, 45) \ + _(XR_TYPE_FRAME_BEGIN_INFO, 46) \ + _(XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, 48) \ + _(XR_TYPE_EVENT_DATA_EVENTS_LOST, 49) \ + _(XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, 51) \ + _(XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, 52) \ + _(XR_TYPE_INTERACTION_PROFILE_STATE, 53) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, 55) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, 56) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, 57) \ + _(XR_TYPE_ACTION_STATE_GET_INFO, 58) \ + _(XR_TYPE_HAPTIC_ACTION_INFO, 59) \ + _(XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, 60) \ + _(XR_TYPE_ACTIONS_SYNC_INFO, 61) \ + _(XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO, 62) \ + _(XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO, 63) \ + _(XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, 1000006000) \ + _(XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR, 1000008000) \ + _(XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, 1000010000) \ + _(XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR, 1000014000) \ + _(XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, 1000015000) \ + _(XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, 1000017000) \ + _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, 1000018000) \ + _(XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, 1000019000) \ + _(XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, 1000019001) \ + _(XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, 1000019002) \ + _(XR_TYPE_DEBUG_UTILS_LABEL_EXT, 1000019003) \ + _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, 1000023000) \ + _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, 1000023001) \ + _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR, 1000023002) \ + _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR, 1000023003) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, 1000023004) \ + _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR, 1000023005) \ + _(XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, 1000024001) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, 1000024002) \ + _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR, 1000024003) \ + _(XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, 1000025000) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, 1000025001) \ + _(XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, 1000025002) \ + _(XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, 1000027000) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, 1000027001) \ + _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR, 1000027002) \ + _(XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, 1000028000) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, 1000028001) \ + _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR, 1000028002) \ + _(XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT, 1000030000) \ + _(XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT, 1000030001) \ + _(XR_TYPE_VISIBILITY_MASK_KHR, 1000031000) \ + _(XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, 1000031001) \ + _(XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX, 1000033000) \ + _(XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX, 1000033003) \ + _(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR, 1000034000) \ + _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, 1000039000) \ + _(XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, 1000039001) \ + _(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB, 1000040000) \ + _(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB, 1000041001) \ + _(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \ + _(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \ + _(XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT, 1000049001) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT, 1000049002) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT, 1000049003) \ + _(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \ + _(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \ + _(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \ + _(XR_TYPE_HAND_JOINT_LOCATIONS_EXT, 1000051003) \ + _(XR_TYPE_HAND_JOINT_VELOCITIES_EXT, 1000051004) \ + _(XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT, 1000052000) \ + _(XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT, 1000052001) \ + _(XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT, 1000052002) \ + _(XR_TYPE_HAND_MESH_MSFT, 1000052003) \ + _(XR_TYPE_HAND_POSE_TYPE_INFO_MSFT, 1000052004) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT, 1000053000) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT, 1000053001) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT, 1000053002) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT, 1000053003) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT, 1000053004) \ + _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT, 1000053005) \ + _(XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT, 1000055000) \ + _(XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT, 1000055001) \ + _(XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT, 1000055002) \ + _(XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT, 1000055003) \ + _(XR_TYPE_CONTROLLER_MODEL_STATE_MSFT, 1000055004) \ + _(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, 1000059000) \ + _(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT, 1000063000) \ + _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT, 1000066000) \ + _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \ + _(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \ + _(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \ + _(XR_TYPE_BODY_TRACKER_CREATE_INFO_FB, 1000076001) \ + _(XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB, 1000076002) \ + _(XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB, 1000076004) \ + _(XR_TYPE_BODY_JOINT_LOCATIONS_FB, 1000076005) \ + _(XR_TYPE_BODY_SKELETON_FB, 1000076006) \ + _(XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT, 1000078000) \ + _(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \ + _(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \ + _(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \ + _(XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, 1000090000) \ + _(XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, 1000090001) \ + _(XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, 1000090003) \ + _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR, 1000091000) \ + _(XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT, 1000097000) \ + _(XR_TYPE_SCENE_CREATE_INFO_MSFT, 1000097001) \ + _(XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT, 1000097002) \ + _(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT, 1000097003) \ + _(XR_TYPE_SCENE_COMPONENTS_MSFT, 1000097004) \ + _(XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT, 1000097005) \ + _(XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT, 1000097006) \ + _(XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT, 1000097007) \ + _(XR_TYPE_SCENE_OBJECTS_MSFT, 1000097008) \ + _(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT, 1000097009) \ + _(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT, 1000097010) \ + _(XR_TYPE_SCENE_PLANES_MSFT, 1000097011) \ + _(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT, 1000097012) \ + _(XR_TYPE_SCENE_MESHES_MSFT, 1000097013) \ + _(XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT, 1000097014) \ + _(XR_TYPE_SCENE_MESH_BUFFERS_MSFT, 1000097015) \ + _(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT, 1000097016) \ + _(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT, 1000097017) \ + _(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT, 1000097018) \ + _(XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT, 1000098000) \ + _(XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT, 1000098001) \ + _(XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB, 1000101000) \ + _(XR_TYPE_VIVE_TRACKER_PATHS_HTCX, 1000103000) \ + _(XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX, 1000103001) \ + _(XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC, 1000104000) \ + _(XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC, 1000104001) \ + _(XR_TYPE_FACIAL_EXPRESSIONS_HTC, 1000104002) \ + _(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB, 1000108000) \ + _(XR_TYPE_HAND_TRACKING_MESH_FB, 1000110001) \ + _(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \ + _(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \ + _(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \ + _(XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB, 1000113004) \ + _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB, 1000113003) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB, 1000113007) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_FB, 1000113001) \ + _(XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB, 1000113005) \ + _(XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB, 1000113006) \ + _(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \ + _(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \ + _(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \ + _(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB, 1000115000) \ + _(XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB, 1000116009) \ + _(XR_TYPE_KEYBOARD_TRACKING_QUERY_FB, 1000116004) \ + _(XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB, 1000116002) \ + _(XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB, 1000117001) \ + _(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB, 1000118000) \ + _(XR_TYPE_PASSTHROUGH_CREATE_INFO_FB, 1000118001) \ + _(XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB, 1000118002) \ + _(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB, 1000118003) \ + _(XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB, 1000118004) \ + _(XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB, 1000118005) \ + _(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB, 1000118006) \ + _(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \ + _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \ + _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \ + _(XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB, 1000118023) \ + _(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \ + _(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \ + _(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \ + _(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \ + _(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \ + _(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \ + _(XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB, 1000119005) \ + _(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \ + _(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \ + _(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \ + _(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO, 1000121002) \ + _(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO, 1000122000) \ + _(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO, 1000124000) \ + _(XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO, 1000124001) \ + _(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \ + _(XR_TYPE_FRAME_END_INFO_ML, 1000135000) \ + _(XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML, 1000136000) \ + _(XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML, 1000137000) \ + _(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \ + _(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \ + _(XR_TYPE_SPACE_QUERY_INFO_FB, 1000156001) \ + _(XR_TYPE_SPACE_QUERY_RESULTS_FB, 1000156002) \ + _(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB, 1000156003) \ + _(XR_TYPE_SPACE_UUID_FILTER_INFO_FB, 1000156054) \ + _(XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB, 1000156052) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB, 1000156103) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB, 1000156104) \ + _(XR_TYPE_SPACE_SAVE_INFO_FB, 1000158000) \ + _(XR_TYPE_SPACE_ERASE_INFO_FB, 1000158001) \ + _(XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB, 1000158106) \ + _(XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB, 1000158107) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \ + _(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \ + _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \ + _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB, 1000163000) \ + _(XR_TYPE_SPACE_SHARE_INFO_FB, 1000169001) \ + _(XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB, 1000169002) \ + _(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \ + _(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \ + _(XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB, 1000173001) \ + _(XR_TYPE_SEMANTIC_LABELS_FB, 1000175000) \ + _(XR_TYPE_ROOM_LAYOUT_FB, 1000175001) \ + _(XR_TYPE_BOUNDARY_2D_FB, 1000175002) \ + _(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \ + _(XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB, 1000198001) \ + _(XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB, 1000198050) \ + _(XR_TYPE_SPACE_CONTAINER_FB, 1000199000) \ + _(XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META, 1000200000) \ + _(XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META, 1000200001) \ + _(XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META, 1000200002) \ + _(XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB, 1000201004) \ + _(XR_TYPE_FACE_TRACKER_CREATE_INFO_FB, 1000201005) \ + _(XR_TYPE_FACE_EXPRESSION_INFO_FB, 1000201002) \ + _(XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB, 1000201006) \ + _(XR_TYPE_EYE_TRACKER_CREATE_INFO_FB, 1000202001) \ + _(XR_TYPE_EYE_GAZES_INFO_FB, 1000202002) \ + _(XR_TYPE_EYE_GAZES_FB, 1000202003) \ + _(XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB, 1000202004) \ + _(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \ + _(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, 1000204000) \ + _(XR_TYPE_HAPTIC_PCM_VIBRATION_FB, 1000209001) \ + _(XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB, 1000209002) \ + _(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB, 1000212000) \ + _(XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META, 1000216000) \ + _(XR_TYPE_EXTERNAL_CAMERA_OCULUS, 1000226000) \ + _(XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META, 1000227000) \ + _(XR_TYPE_PERFORMANCE_METRICS_STATE_META, 1000232001) \ + _(XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, 1000232002) \ + _(XR_TYPE_SPACE_LIST_SAVE_INFO_FB, 1000238000) \ + _(XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB, 1000238001) \ + _(XR_TYPE_SPACE_USER_CREATE_INFO_FB, 1000241001) \ + _(XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META, 1000245000) \ + _(XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC, 1000317001) \ + _(XR_TYPE_PASSTHROUGH_COLOR_HTC, 1000317002) \ + _(XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC, 1000317003) \ + _(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC, 1000317004) \ + _(XR_TYPE_FOVEATION_APPLY_INFO_HTC, 1000318000) \ + _(XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC, 1000318001) \ + _(XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC, 1000318002) \ + _(XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT, 1000373000) \ + _(XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX, 1000375000) \ + _(XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX, 1000375001) \ + _(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFormFactor(_) \ + _(XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY, 1) \ + _(XR_FORM_FACTOR_HANDHELD_DISPLAY, 2) \ + _(XR_FORM_FACTOR_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrViewConfigurationType(_) \ + _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO, 1) \ + _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO, 2) \ + _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO, 1000037000) \ + _(XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT, 1000054000) \ + _(XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrEnvironmentBlendMode(_) \ + _(XR_ENVIRONMENT_BLEND_MODE_OPAQUE, 1) \ + _(XR_ENVIRONMENT_BLEND_MODE_ADDITIVE, 2) \ + _(XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND, 3) \ + _(XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrReferenceSpaceType(_) \ + _(XR_REFERENCE_SPACE_TYPE_VIEW, 1) \ + _(XR_REFERENCE_SPACE_TYPE_LOCAL, 2) \ + _(XR_REFERENCE_SPACE_TYPE_STAGE, 3) \ + _(XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT, 1000038000) \ + _(XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO, 1000121000) \ + _(XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT, 1000426000) \ + _(XR_REFERENCE_SPACE_TYPE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrActionType(_) \ + _(XR_ACTION_TYPE_BOOLEAN_INPUT, 1) \ + _(XR_ACTION_TYPE_FLOAT_INPUT, 2) \ + _(XR_ACTION_TYPE_VECTOR2F_INPUT, 3) \ + _(XR_ACTION_TYPE_POSE_INPUT, 4) \ + _(XR_ACTION_TYPE_VIBRATION_OUTPUT, 100) \ + _(XR_ACTION_TYPE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrEyeVisibility(_) \ + _(XR_EYE_VISIBILITY_BOTH, 0) \ + _(XR_EYE_VISIBILITY_LEFT, 1) \ + _(XR_EYE_VISIBILITY_RIGHT, 2) \ + _(XR_EYE_VISIBILITY_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSessionState(_) \ + _(XR_SESSION_STATE_UNKNOWN, 0) \ + _(XR_SESSION_STATE_IDLE, 1) \ + _(XR_SESSION_STATE_READY, 2) \ + _(XR_SESSION_STATE_SYNCHRONIZED, 3) \ + _(XR_SESSION_STATE_VISIBLE, 4) \ + _(XR_SESSION_STATE_FOCUSED, 5) \ + _(XR_SESSION_STATE_STOPPING, 6) \ + _(XR_SESSION_STATE_LOSS_PENDING, 7) \ + _(XR_SESSION_STATE_EXITING, 8) \ + _(XR_SESSION_STATE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrObjectType(_) \ + _(XR_OBJECT_TYPE_UNKNOWN, 0) \ + _(XR_OBJECT_TYPE_INSTANCE, 1) \ + _(XR_OBJECT_TYPE_SESSION, 2) \ + _(XR_OBJECT_TYPE_SWAPCHAIN, 3) \ + _(XR_OBJECT_TYPE_SPACE, 4) \ + _(XR_OBJECT_TYPE_ACTION_SET, 5) \ + _(XR_OBJECT_TYPE_ACTION, 6) \ + _(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \ + _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \ + _(XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT, 1000049000) \ + _(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \ + _(XR_OBJECT_TYPE_BODY_TRACKER_FB, 1000076000) \ + _(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \ + _(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \ + _(XR_OBJECT_TYPE_FACIAL_TRACKER_HTC, 1000104000) \ + _(XR_OBJECT_TYPE_FOVEATION_PROFILE_FB, 1000114000) \ + _(XR_OBJECT_TYPE_TRIANGLE_MESH_FB, 1000117000) \ + _(XR_OBJECT_TYPE_PASSTHROUGH_FB, 1000118000) \ + _(XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB, 1000118002) \ + _(XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB, 1000118004) \ + _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT, 1000142000) \ + _(XR_OBJECT_TYPE_FACE_TRACKER_FB, 1000201000) \ + _(XR_OBJECT_TYPE_EYE_TRACKER_FB, 1000202000) \ + _(XR_OBJECT_TYPE_SPACE_USER_FB, 1000241000) \ + _(XR_OBJECT_TYPE_PASSTHROUGH_HTC, 1000317000) \ + _(XR_OBJECT_TYPE_MAX_ENUM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrAndroidThreadTypeKHR(_) \ + _(XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR, 1) \ + _(XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR, 2) \ + _(XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR, 3) \ + _(XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR, 4) \ + _(XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrVisibilityMaskTypeKHR(_) \ + _(XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR, 1) \ + _(XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR, 2) \ + _(XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR, 3) \ + _(XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerfSettingsDomainEXT(_) \ + _(XR_PERF_SETTINGS_DOMAIN_CPU_EXT, 1) \ + _(XR_PERF_SETTINGS_DOMAIN_GPU_EXT, 2) \ + _(XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerfSettingsSubDomainEXT(_) \ + _(XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT, 1) \ + _(XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT, 2) \ + _(XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT, 3) \ + _(XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerfSettingsLevelEXT(_) \ + _(XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT, 0) \ + _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT, 25) \ + _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT, 50) \ + _(XR_PERF_SETTINGS_LEVEL_BOOST_EXT, 75) \ + _(XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerfSettingsNotificationLevelEXT(_) \ + _(XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT, 0) \ + _(XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT, 25) \ + _(XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT, 75) \ + _(XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrBlendFactorFB(_) \ + _(XR_BLEND_FACTOR_ZERO_FB, 0) \ + _(XR_BLEND_FACTOR_ONE_FB, 1) \ + _(XR_BLEND_FACTOR_SRC_ALPHA_FB, 2) \ + _(XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB, 3) \ + _(XR_BLEND_FACTOR_DST_ALPHA_FB, 4) \ + _(XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB, 5) \ + _(XR_BLEND_FACTOR_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpatialGraphNodeTypeMSFT(_) \ + _(XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT, 1) \ + _(XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT, 2) \ + _(XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandEXT(_) \ + _(XR_HAND_LEFT_EXT, 1) \ + _(XR_HAND_RIGHT_EXT, 2) \ + _(XR_HAND_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandJointEXT(_) \ + _(XR_HAND_JOINT_PALM_EXT, 0) \ + _(XR_HAND_JOINT_WRIST_EXT, 1) \ + _(XR_HAND_JOINT_THUMB_METACARPAL_EXT, 2) \ + _(XR_HAND_JOINT_THUMB_PROXIMAL_EXT, 3) \ + _(XR_HAND_JOINT_THUMB_DISTAL_EXT, 4) \ + _(XR_HAND_JOINT_THUMB_TIP_EXT, 5) \ + _(XR_HAND_JOINT_INDEX_METACARPAL_EXT, 6) \ + _(XR_HAND_JOINT_INDEX_PROXIMAL_EXT, 7) \ + _(XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT, 8) \ + _(XR_HAND_JOINT_INDEX_DISTAL_EXT, 9) \ + _(XR_HAND_JOINT_INDEX_TIP_EXT, 10) \ + _(XR_HAND_JOINT_MIDDLE_METACARPAL_EXT, 11) \ + _(XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT, 12) \ + _(XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT, 13) \ + _(XR_HAND_JOINT_MIDDLE_DISTAL_EXT, 14) \ + _(XR_HAND_JOINT_MIDDLE_TIP_EXT, 15) \ + _(XR_HAND_JOINT_RING_METACARPAL_EXT, 16) \ + _(XR_HAND_JOINT_RING_PROXIMAL_EXT, 17) \ + _(XR_HAND_JOINT_RING_INTERMEDIATE_EXT, 18) \ + _(XR_HAND_JOINT_RING_DISTAL_EXT, 19) \ + _(XR_HAND_JOINT_RING_TIP_EXT, 20) \ + _(XR_HAND_JOINT_LITTLE_METACARPAL_EXT, 21) \ + _(XR_HAND_JOINT_LITTLE_PROXIMAL_EXT, 22) \ + _(XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT, 23) \ + _(XR_HAND_JOINT_LITTLE_DISTAL_EXT, 24) \ + _(XR_HAND_JOINT_LITTLE_TIP_EXT, 25) \ + _(XR_HAND_JOINT_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandJointSetEXT(_) \ + _(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \ + _(XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP, 1000149000) \ + _(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \ + _(XR_HAND_POSE_TYPE_TRACKED_MSFT, 0) \ + _(XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT, 1) \ + _(XR_HAND_POSE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrReprojectionModeMSFT(_) \ + _(XR_REPROJECTION_MODE_DEPTH_MSFT, 1) \ + _(XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT, 2) \ + _(XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT, 3) \ + _(XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT, 4) \ + _(XR_REPROJECTION_MODE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrBodyJointFB(_) \ + _(XR_BODY_JOINT_ROOT_FB, 0) \ + _(XR_BODY_JOINT_HIPS_FB, 1) \ + _(XR_BODY_JOINT_SPINE_LOWER_FB, 2) \ + _(XR_BODY_JOINT_SPINE_MIDDLE_FB, 3) \ + _(XR_BODY_JOINT_SPINE_UPPER_FB, 4) \ + _(XR_BODY_JOINT_CHEST_FB, 5) \ + _(XR_BODY_JOINT_NECK_FB, 6) \ + _(XR_BODY_JOINT_HEAD_FB, 7) \ + _(XR_BODY_JOINT_LEFT_SHOULDER_FB, 8) \ + _(XR_BODY_JOINT_LEFT_SCAPULA_FB, 9) \ + _(XR_BODY_JOINT_LEFT_ARM_UPPER_FB, 10) \ + _(XR_BODY_JOINT_LEFT_ARM_LOWER_FB, 11) \ + _(XR_BODY_JOINT_LEFT_HAND_WRIST_TWIST_FB, 12) \ + _(XR_BODY_JOINT_RIGHT_SHOULDER_FB, 13) \ + _(XR_BODY_JOINT_RIGHT_SCAPULA_FB, 14) \ + _(XR_BODY_JOINT_RIGHT_ARM_UPPER_FB, 15) \ + _(XR_BODY_JOINT_RIGHT_ARM_LOWER_FB, 16) \ + _(XR_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_FB, 17) \ + _(XR_BODY_JOINT_LEFT_HAND_PALM_FB, 18) \ + _(XR_BODY_JOINT_LEFT_HAND_WRIST_FB, 19) \ + _(XR_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_FB, 20) \ + _(XR_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_FB, 21) \ + _(XR_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_FB, 22) \ + _(XR_BODY_JOINT_LEFT_HAND_THUMB_TIP_FB, 23) \ + _(XR_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_FB, 24) \ + _(XR_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_FB, 25) \ + _(XR_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_FB, 26) \ + _(XR_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_FB, 27) \ + _(XR_BODY_JOINT_LEFT_HAND_INDEX_TIP_FB, 28) \ + _(XR_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_FB, 29) \ + _(XR_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_FB, 30) \ + _(XR_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_FB, 31) \ + _(XR_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_FB, 32) \ + _(XR_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_FB, 33) \ + _(XR_BODY_JOINT_LEFT_HAND_RING_METACARPAL_FB, 34) \ + _(XR_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_FB, 35) \ + _(XR_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_FB, 36) \ + _(XR_BODY_JOINT_LEFT_HAND_RING_DISTAL_FB, 37) \ + _(XR_BODY_JOINT_LEFT_HAND_RING_TIP_FB, 38) \ + _(XR_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_FB, 39) \ + _(XR_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_FB, 40) \ + _(XR_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_FB, 41) \ + _(XR_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_FB, 42) \ + _(XR_BODY_JOINT_LEFT_HAND_LITTLE_TIP_FB, 43) \ + _(XR_BODY_JOINT_RIGHT_HAND_PALM_FB, 44) \ + _(XR_BODY_JOINT_RIGHT_HAND_WRIST_FB, 45) \ + _(XR_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_FB, 46) \ + _(XR_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_FB, 47) \ + _(XR_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_FB, 48) \ + _(XR_BODY_JOINT_RIGHT_HAND_THUMB_TIP_FB, 49) \ + _(XR_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_FB, 50) \ + _(XR_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_FB, 51) \ + _(XR_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_FB, 52) \ + _(XR_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_FB, 53) \ + _(XR_BODY_JOINT_RIGHT_HAND_INDEX_TIP_FB, 54) \ + _(XR_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_FB, 55) \ + _(XR_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_FB, 56) \ + _(XR_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_FB, 57) \ + _(XR_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_FB, 58) \ + _(XR_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_FB, 59) \ + _(XR_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_FB, 60) \ + _(XR_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_FB, 61) \ + _(XR_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_FB, 62) \ + _(XR_BODY_JOINT_RIGHT_HAND_RING_DISTAL_FB, 63) \ + _(XR_BODY_JOINT_RIGHT_HAND_RING_TIP_FB, 64) \ + _(XR_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_FB, 65) \ + _(XR_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_FB, 66) \ + _(XR_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_FB, 67) \ + _(XR_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_FB, 68) \ + _(XR_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_FB, 69) \ + _(XR_BODY_JOINT_COUNT_FB, 70) \ + _(XR_BODY_JOINT_NONE_FB, -1) \ + _(XR_BODY_JOINT_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrBodyJointSetFB(_) \ + _(XR_BODY_JOINT_SET_DEFAULT_FB, 0) \ + _(XR_BODY_JOINT_SET_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandJointsMotionRangeEXT(_) \ + _(XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT, 1) \ + _(XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT, 2) \ + _(XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeFeatureMSFT(_) \ + _(XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT, 1) \ + _(XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT, 2) \ + _(XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT, 3) \ + _(XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT, 4) \ + _(XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT, 1000098000) \ + _(XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeConsistencyMSFT(_) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT, 1) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT, 2) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT, 3) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrMeshComputeLodMSFT(_) \ + _(XR_MESH_COMPUTE_LOD_COARSE_MSFT, 1) \ + _(XR_MESH_COMPUTE_LOD_MEDIUM_MSFT, 2) \ + _(XR_MESH_COMPUTE_LOD_FINE_MSFT, 3) \ + _(XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT, 4) \ + _(XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComponentTypeMSFT(_) \ + _(XR_SCENE_COMPONENT_TYPE_INVALID_MSFT, -1) \ + _(XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT, 1) \ + _(XR_SCENE_COMPONENT_TYPE_PLANE_MSFT, 2) \ + _(XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT, 3) \ + _(XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT, 4) \ + _(XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT, 1000098000) \ + _(XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneObjectTypeMSFT(_) \ + _(XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT, -1) \ + _(XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT, 1) \ + _(XR_SCENE_OBJECT_TYPE_WALL_MSFT, 2) \ + _(XR_SCENE_OBJECT_TYPE_FLOOR_MSFT, 3) \ + _(XR_SCENE_OBJECT_TYPE_CEILING_MSFT, 4) \ + _(XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT, 5) \ + _(XR_SCENE_OBJECT_TYPE_INFERRED_MSFT, 6) \ + _(XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrScenePlaneAlignmentTypeMSFT(_) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT, 0) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT, 1) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT, 2) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeStateMSFT(_) \ + _(XR_SCENE_COMPUTE_STATE_NONE_MSFT, 0) \ + _(XR_SCENE_COMPUTE_STATE_UPDATING_MSFT, 1) \ + _(XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT, 2) \ + _(XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT, 3) \ + _(XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrEyeExpressionHTC(_) \ + _(XR_EYE_EXPRESSION_LEFT_BLINK_HTC, 0) \ + _(XR_EYE_EXPRESSION_LEFT_WIDE_HTC, 1) \ + _(XR_EYE_EXPRESSION_RIGHT_BLINK_HTC, 2) \ + _(XR_EYE_EXPRESSION_RIGHT_WIDE_HTC, 3) \ + _(XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC, 4) \ + _(XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC, 5) \ + _(XR_EYE_EXPRESSION_LEFT_DOWN_HTC, 6) \ + _(XR_EYE_EXPRESSION_RIGHT_DOWN_HTC, 7) \ + _(XR_EYE_EXPRESSION_LEFT_OUT_HTC, 8) \ + _(XR_EYE_EXPRESSION_RIGHT_IN_HTC, 9) \ + _(XR_EYE_EXPRESSION_LEFT_IN_HTC, 10) \ + _(XR_EYE_EXPRESSION_RIGHT_OUT_HTC, 11) \ + _(XR_EYE_EXPRESSION_LEFT_UP_HTC, 12) \ + _(XR_EYE_EXPRESSION_RIGHT_UP_HTC, 13) \ + _(XR_EYE_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrLipExpressionHTC(_) \ + _(XR_LIP_EXPRESSION_JAW_RIGHT_HTC, 0) \ + _(XR_LIP_EXPRESSION_JAW_LEFT_HTC, 1) \ + _(XR_LIP_EXPRESSION_JAW_FORWARD_HTC, 2) \ + _(XR_LIP_EXPRESSION_JAW_OPEN_HTC, 3) \ + _(XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC, 4) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC, 5) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC, 6) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC, 7) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC, 8) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC, 9) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC, 10) \ + _(XR_LIP_EXPRESSION_MOUTH_POUT_HTC, 11) \ + _(XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC, 12) \ + _(XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC, 13) \ + _(XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC, 14) \ + _(XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC, 15) \ + _(XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC, 16) \ + _(XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC, 17) \ + _(XR_LIP_EXPRESSION_CHEEK_SUCK_HTC, 18) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC, 19) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC, 20) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC, 21) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC, 22) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC, 23) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC, 24) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC, 25) \ + _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC, 26) \ + _(XR_LIP_EXPRESSION_TONGUE_LEFT_HTC, 27) \ + _(XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC, 28) \ + _(XR_LIP_EXPRESSION_TONGUE_UP_HTC, 29) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWN_HTC, 30) \ + _(XR_LIP_EXPRESSION_TONGUE_ROLL_HTC, 31) \ + _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC, 32) \ + _(XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC, 33) \ + _(XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC, 34) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC, 35) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC, 36) \ + _(XR_LIP_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFacialTrackingTypeHTC(_) \ + _(XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC, 1) \ + _(XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC, 2) \ + _(XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrColorSpaceFB(_) \ + _(XR_COLOR_SPACE_UNMANAGED_FB, 0) \ + _(XR_COLOR_SPACE_REC2020_FB, 1) \ + _(XR_COLOR_SPACE_REC709_FB, 2) \ + _(XR_COLOR_SPACE_RIFT_CV1_FB, 3) \ + _(XR_COLOR_SPACE_RIFT_S_FB, 4) \ + _(XR_COLOR_SPACE_QUEST_FB, 5) \ + _(XR_COLOR_SPACE_P3_FB, 6) \ + _(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \ + _(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceComponentTypeFB(_) \ + _(XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB, 0) \ + _(XR_SPACE_COMPONENT_TYPE_STORABLE_FB, 1) \ + _(XR_SPACE_COMPONENT_TYPE_SHARABLE_FB, 2) \ + _(XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB, 3) \ + _(XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB, 4) \ + _(XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB, 5) \ + _(XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB, 6) \ + _(XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB, 7) \ + _(XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationLevelFB(_) \ + _(XR_FOVEATION_LEVEL_NONE_FB, 0) \ + _(XR_FOVEATION_LEVEL_LOW_FB, 1) \ + _(XR_FOVEATION_LEVEL_MEDIUM_FB, 2) \ + _(XR_FOVEATION_LEVEL_HIGH_FB, 3) \ + _(XR_FOVEATION_LEVEL_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationDynamicFB(_) \ + _(XR_FOVEATION_DYNAMIC_DISABLED_FB, 0) \ + _(XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB, 1) \ + _(XR_FOVEATION_DYNAMIC_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrWindingOrderFB(_) \ + _(XR_WINDING_ORDER_UNKNOWN_FB, 0) \ + _(XR_WINDING_ORDER_CW_FB, 1) \ + _(XR_WINDING_ORDER_CCW_FB, 2) \ + _(XR_WINDING_ORDER_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPassthroughLayerPurposeFB(_) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB, 1000203002) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandForearmJointULTRALEAP(_) \ + _(XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP, 0) \ + _(XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP, 1) \ + _(XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP, 2) \ + _(XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP, 3) \ + _(XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP, 4) \ + _(XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP, 5) \ + _(XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP, 6) \ + _(XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP, 7) \ + _(XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP, 8) \ + _(XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP, 9) \ + _(XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP, 10) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP, 11) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP, 12) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP, 13) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP, 14) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP, 15) \ + _(XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP, 16) \ + _(XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP, 17) \ + _(XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP, 18) \ + _(XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP, 19) \ + _(XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP, 20) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP, 21) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP, 22) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP, 23) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP, 24) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP, 25) \ + _(XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP, 26) \ + _(XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceQueryActionFB(_) \ + _(XR_SPACE_QUERY_ACTION_LOAD_FB, 0) \ + _(XR_SPACE_QUERY_ACTION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceStorageLocationFB(_) \ + _(XR_SPACE_STORAGE_LOCATION_INVALID_FB, 0) \ + _(XR_SPACE_STORAGE_LOCATION_LOCAL_FB, 1) \ + _(XR_SPACE_STORAGE_LOCATION_CLOUD_FB, 2) \ + _(XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpacePersistenceModeFB(_) \ + _(XR_SPACE_PERSISTENCE_MODE_INVALID_FB, 0) \ + _(XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB, 1) \ + _(XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFaceExpressionFB(_) \ + _(XR_FACE_EXPRESSION_BROW_LOWERER_L_FB, 0) \ + _(XR_FACE_EXPRESSION_BROW_LOWERER_R_FB, 1) \ + _(XR_FACE_EXPRESSION_CHEEK_PUFF_L_FB, 2) \ + _(XR_FACE_EXPRESSION_CHEEK_PUFF_R_FB, 3) \ + _(XR_FACE_EXPRESSION_CHEEK_RAISER_L_FB, 4) \ + _(XR_FACE_EXPRESSION_CHEEK_RAISER_R_FB, 5) \ + _(XR_FACE_EXPRESSION_CHEEK_SUCK_L_FB, 6) \ + _(XR_FACE_EXPRESSION_CHEEK_SUCK_R_FB, 7) \ + _(XR_FACE_EXPRESSION_CHIN_RAISER_B_FB, 8) \ + _(XR_FACE_EXPRESSION_CHIN_RAISER_T_FB, 9) \ + _(XR_FACE_EXPRESSION_DIMPLER_L_FB, 10) \ + _(XR_FACE_EXPRESSION_DIMPLER_R_FB, 11) \ + _(XR_FACE_EXPRESSION_EYES_CLOSED_L_FB, 12) \ + _(XR_FACE_EXPRESSION_EYES_CLOSED_R_FB, 13) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_DOWN_L_FB, 14) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_DOWN_R_FB, 15) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_LEFT_L_FB, 16) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_LEFT_R_FB, 17) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_L_FB, 18) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_R_FB, 19) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_UP_L_FB, 20) \ + _(XR_FACE_EXPRESSION_EYES_LOOK_UP_R_FB, 21) \ + _(XR_FACE_EXPRESSION_INNER_BROW_RAISER_L_FB, 22) \ + _(XR_FACE_EXPRESSION_INNER_BROW_RAISER_R_FB, 23) \ + _(XR_FACE_EXPRESSION_JAW_DROP_FB, 24) \ + _(XR_FACE_EXPRESSION_JAW_SIDEWAYS_LEFT_FB, 25) \ + _(XR_FACE_EXPRESSION_JAW_SIDEWAYS_RIGHT_FB, 26) \ + _(XR_FACE_EXPRESSION_JAW_THRUST_FB, 27) \ + _(XR_FACE_EXPRESSION_LID_TIGHTENER_L_FB, 28) \ + _(XR_FACE_EXPRESSION_LID_TIGHTENER_R_FB, 29) \ + _(XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_L_FB, 30) \ + _(XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_R_FB, 31) \ + _(XR_FACE_EXPRESSION_LIP_CORNER_PULLER_L_FB, 32) \ + _(XR_FACE_EXPRESSION_LIP_CORNER_PULLER_R_FB, 33) \ + _(XR_FACE_EXPRESSION_LIP_FUNNELER_LB_FB, 34) \ + _(XR_FACE_EXPRESSION_LIP_FUNNELER_LT_FB, 35) \ + _(XR_FACE_EXPRESSION_LIP_FUNNELER_RB_FB, 36) \ + _(XR_FACE_EXPRESSION_LIP_FUNNELER_RT_FB, 37) \ + _(XR_FACE_EXPRESSION_LIP_PRESSOR_L_FB, 38) \ + _(XR_FACE_EXPRESSION_LIP_PRESSOR_R_FB, 39) \ + _(XR_FACE_EXPRESSION_LIP_PUCKER_L_FB, 40) \ + _(XR_FACE_EXPRESSION_LIP_PUCKER_R_FB, 41) \ + _(XR_FACE_EXPRESSION_LIP_STRETCHER_L_FB, 42) \ + _(XR_FACE_EXPRESSION_LIP_STRETCHER_R_FB, 43) \ + _(XR_FACE_EXPRESSION_LIP_SUCK_LB_FB, 44) \ + _(XR_FACE_EXPRESSION_LIP_SUCK_LT_FB, 45) \ + _(XR_FACE_EXPRESSION_LIP_SUCK_RB_FB, 46) \ + _(XR_FACE_EXPRESSION_LIP_SUCK_RT_FB, 47) \ + _(XR_FACE_EXPRESSION_LIP_TIGHTENER_L_FB, 48) \ + _(XR_FACE_EXPRESSION_LIP_TIGHTENER_R_FB, 49) \ + _(XR_FACE_EXPRESSION_LIPS_TOWARD_FB, 50) \ + _(XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_L_FB, 51) \ + _(XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_R_FB, 52) \ + _(XR_FACE_EXPRESSION_MOUTH_LEFT_FB, 53) \ + _(XR_FACE_EXPRESSION_MOUTH_RIGHT_FB, 54) \ + _(XR_FACE_EXPRESSION_NOSE_WRINKLER_L_FB, 55) \ + _(XR_FACE_EXPRESSION_NOSE_WRINKLER_R_FB, 56) \ + _(XR_FACE_EXPRESSION_OUTER_BROW_RAISER_L_FB, 57) \ + _(XR_FACE_EXPRESSION_OUTER_BROW_RAISER_R_FB, 58) \ + _(XR_FACE_EXPRESSION_UPPER_LID_RAISER_L_FB, 59) \ + _(XR_FACE_EXPRESSION_UPPER_LID_RAISER_R_FB, 60) \ + _(XR_FACE_EXPRESSION_UPPER_LIP_RAISER_L_FB, 61) \ + _(XR_FACE_EXPRESSION_UPPER_LIP_RAISER_R_FB, 62) \ + _(XR_FACE_EXPRESSION_COUNT_FB, 63) \ + _(XR_FACE_EXPRESSION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFaceExpressionSetFB(_) \ + _(XR_FACE_EXPRESSION_SET_DEFAULT_FB, 0) \ + _(XR_FACE_EXPRESSION_SET_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFaceConfidenceFB(_) \ + _(XR_FACE_CONFIDENCE_LOWER_FACE_FB, 0) \ + _(XR_FACE_CONFIDENCE_UPPER_FACE_FB, 1) \ + _(XR_FACE_CONFIDENCE_COUNT_FB, 2) \ + _(XR_FACE_CONFIDENCE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrEyePositionFB(_) \ + _(XR_EYE_POSITION_LEFT_FB, 0) \ + _(XR_EYE_POSITION_RIGHT_FB, 1) \ + _(XR_EYE_POSITION_COUNT_FB, 2) \ + _(XR_EYE_POSITION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrCompareOpFB(_) \ + _(XR_COMPARE_OP_NEVER_FB, 0) \ + _(XR_COMPARE_OP_LESS_FB, 1) \ + _(XR_COMPARE_OP_EQUAL_FB, 2) \ + _(XR_COMPARE_OP_LESS_OR_EQUAL_FB, 3) \ + _(XR_COMPARE_OP_GREATER_FB, 4) \ + _(XR_COMPARE_OP_NOT_EQUAL_FB, 5) \ + _(XR_COMPARE_OP_GREATER_OR_EQUAL_FB, 6) \ + _(XR_COMPARE_OP_ALWAYS_FB, 7) \ + _(XR_COMPARE_OPFB_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrLocalDimmingModeMETA(_) \ + _(XR_LOCAL_DIMMING_MODE_OFF_META, 0) \ + _(XR_LOCAL_DIMMING_MODE_ON_META, 1) \ + _(XR_LOCAL_DIMMING_MODE_MAX_ENUM_META, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrExternalCameraAttachedToDeviceOCULUS(_) \ + _(XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_NONE_OCULUS, 0) \ + _(XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_HMD_OCULUS, 1) \ + _(XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_LTOUCH_OCULUS, 2) \ + _(XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_RTOUCH_OCULUS, 3) \ + _(XR_EXTERNAL_CAMERA_ATTACHED_TODEVICE_MAX_ENUM_OCULUS, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerformanceMetricsCounterUnitMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META, 0) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META, 1) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META, 2) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META, 3) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META, 4) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrTrackingOptimizationSettingsDomainQCOM(_) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_DOMAIN_ALL_QCOM, 1) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_DOMAIN_MAX_ENUM_QCOM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrTrackingOptimizationSettingsHintQCOM(_) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_NONE_QCOM, 0) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LONG_RANGE_PRIORIZATION_QCOM, 1) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_CLOSE_RANGE_PRIORIZATION_QCOM, 2) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LOW_POWER_PRIORIZATION_QCOM, 3) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_HIGH_POWER_PRIORIZATION_QCOM, 4) \ + _(XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_MAX_ENUM_QCOM, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPassthroughFormHTC(_) \ + _(XR_PASSTHROUGH_FORM_PLANAR_HTC, 0) \ + _(XR_PASSTHROUGH_FORM_PROJECTED_HTC, 1) \ + _(XR_PASSTHROUGH_FORM_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationModeHTC(_) \ + _(XR_FOVEATION_MODE_DISABLE_HTC, 0) \ + _(XR_FOVEATION_MODE_FIXED_HTC, 1) \ + _(XR_FOVEATION_MODE_DYNAMIC_HTC, 2) \ + _(XR_FOVEATION_MODE_CUSTOM_HTC, 3) \ + _(XR_FOVEATION_MODE_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationLevelHTC(_) \ + _(XR_FOVEATION_LEVEL_NONE_HTC, 0) \ + _(XR_FOVEATION_LEVEL_LOW_HTC, 1) \ + _(XR_FOVEATION_LEVEL_MEDIUM_HTC, 2) \ + _(XR_FOVEATION_LEVEL_HIGH_HTC, 3) \ + _(XR_FOVEATION_LEVEL_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrForceFeedbackCurlLocationMNDX(_) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_THUMB_CURL_MNDX, 0) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_INDEX_CURL_MNDX, 1) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_MIDDLE_CURL_MNDX, 2) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_RING_CURL_MNDX, 3) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_LITTLE_CURL_MNDX, 4) \ + _(XR_FORCE_FEEDBACK_CURL_LOCATION_MAX_ENUM_MNDX, 0x7FFFFFFF) + +#define XR_LIST_BITS_XrInstanceCreateFlags(_) + +#define XR_LIST_BITS_XrSessionCreateFlags(_) + +#define XR_LIST_BITS_XrSpaceVelocityFlags(_) \ + _(XR_SPACE_VELOCITY_LINEAR_VALID_BIT, 0x00000001) \ + _(XR_SPACE_VELOCITY_ANGULAR_VALID_BIT, 0x00000002) \ + +#define XR_LIST_BITS_XrSpaceLocationFlags(_) \ + _(XR_SPACE_LOCATION_ORIENTATION_VALID_BIT, 0x00000001) \ + _(XR_SPACE_LOCATION_POSITION_VALID_BIT, 0x00000002) \ + _(XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT, 0x00000004) \ + _(XR_SPACE_LOCATION_POSITION_TRACKED_BIT, 0x00000008) \ + +#define XR_LIST_BITS_XrSwapchainCreateFlags(_) \ + _(XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT, 0x00000001) \ + _(XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT, 0x00000002) \ + +#define XR_LIST_BITS_XrSwapchainUsageFlags(_) \ + _(XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, 0x00000001) \ + _(XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, 0x00000002) \ + _(XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT, 0x00000004) \ + _(XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT, 0x00000008) \ + _(XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT, 0x00000010) \ + _(XR_SWAPCHAIN_USAGE_SAMPLED_BIT, 0x00000020) \ + _(XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, 0x00000040) \ + _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND, 0x00000080) \ + _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND) \ + +#define XR_LIST_BITS_XrCompositionLayerFlags(_) \ + _(XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT, 0x00000001) \ + _(XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT, 0x00000002) \ + _(XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT, 0x00000004) \ + +#define XR_LIST_BITS_XrViewStateFlags(_) \ + _(XR_VIEW_STATE_ORIENTATION_VALID_BIT, 0x00000001) \ + _(XR_VIEW_STATE_POSITION_VALID_BIT, 0x00000002) \ + _(XR_VIEW_STATE_ORIENTATION_TRACKED_BIT, 0x00000004) \ + _(XR_VIEW_STATE_POSITION_TRACKED_BIT, 0x00000008) \ + +#define XR_LIST_BITS_XrInputSourceLocalizedNameFlags(_) \ + _(XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT, 0x00000001) \ + _(XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT, 0x00000002) \ + _(XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT, 0x00000004) \ + +#define XR_LIST_BITS_XrVulkanInstanceCreateFlagsKHR(_) + +#define XR_LIST_BITS_XrVulkanDeviceCreateFlagsKHR(_) + +#define XR_LIST_BITS_XrDebugUtilsMessageSeverityFlagsEXT(_) \ + _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, 0x00000001) \ + _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, 0x00000010) \ + _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, 0x00000100) \ + _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, 0x00001000) \ + +#define XR_LIST_BITS_XrDebugUtilsMessageTypeFlagsEXT(_) \ + _(XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, 0x00000001) \ + _(XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, 0x00000002) \ + _(XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, 0x00000004) \ + _(XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT, 0x00000008) \ + +#define XR_LIST_BITS_XrOverlaySessionCreateFlagsEXTX(_) + +#define XR_LIST_BITS_XrOverlayMainSessionFlagsEXTX(_) \ + _(XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX, 0x00000001) \ + +#define XR_LIST_BITS_XrCompositionLayerImageLayoutFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrAndroidSurfaceSwapchainFlagsFB(_) \ + _(XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB, 0x00000001) \ + _(XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrCompositionLayerSecureContentFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB, 0x00000001) \ + _(XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrHandTrackingAimFlagsFB(_) \ + _(XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB, 0x00000001) \ + _(XR_HAND_TRACKING_AIM_VALID_BIT_FB, 0x00000002) \ + _(XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB, 0x00000004) \ + _(XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB, 0x00000008) \ + _(XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB, 0x00000010) \ + _(XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB, 0x00000020) \ + _(XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB, 0x00000040) \ + _(XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB, 0x00000080) \ + _(XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB, 0x00000100) \ + +#define XR_LIST_BITS_XrSwapchainCreateFoveationFlagsFB(_) \ + _(XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB, 0x00000001) \ + _(XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrSwapchainStateFoveationFlagsFB(_) + +#define XR_LIST_BITS_XrKeyboardTrackingFlagsFB(_) \ + _(XR_KEYBOARD_TRACKING_EXISTS_BIT_FB, 0x00000001) \ + _(XR_KEYBOARD_TRACKING_LOCAL_BIT_FB, 0x00000002) \ + _(XR_KEYBOARD_TRACKING_REMOTE_BIT_FB, 0x00000004) \ + _(XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrKeyboardTrackingQueryFlagsFB(_) \ + _(XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB, 0x00000002) \ + _(XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB, 0x00000004) \ + +#define XR_LIST_BITS_XrTriangleMeshFlagsFB(_) \ + _(XR_TRIANGLE_MESH_MUTABLE_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrPassthroughCapabilityFlagsFB(_) \ + _(XR_PASSTHROUGH_CAPABILITY_BIT_FB, 0x00000001) \ + _(XR_PASSTHROUGH_CAPABILITY_COLOR_BIT_FB, 0x00000002) \ + _(XR_PASSTHROUGH_CAPABILITY_LAYER_DEPTH_BIT_FB, 0x00000004) \ + +#define XR_LIST_BITS_XrPassthroughFlagsFB(_) \ + _(XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB, 0x00000001) \ + _(XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrPassthroughStateChangedFlagsFB(_) \ + _(XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB, 0x00000001) \ + _(XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB, 0x00000002) \ + _(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \ + _(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrRenderModelFlagsFB(_) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB, 0x00000001) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrFrameEndInfoFlagsML(_) \ + _(XR_FRAME_END_INFO_PROTECTED_BIT_ML, 0x00000001) \ + _(XR_FRAME_END_INFO_VIGNETTE_BIT_ML, 0x00000002) \ + +#define XR_LIST_BITS_XrGlobalDimmerFrameEndInfoFlagsML(_) \ + _(XR_GLOBAL_DIMMER_FRAME_END_INFO_ENABLED_BIT_ML, 0x00000001) \ + +#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \ + _(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \ + +#define XR_LIST_BITS_XrFoveationEyeTrackedProfileCreateFlagsMETA(_) + +#define XR_LIST_BITS_XrFoveationEyeTrackedStateFlagsMETA(_) \ + _(XR_FOVEATION_EYE_TRACKED_STATE_VALID_BIT_META, 0x00000001) \ + +#define XR_LIST_BITS_XrCompositionLayerSettingsFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB, 0x00000001) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB, 0x00000002) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB, 0x00000004) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrExternalCameraStatusFlagsOCULUS(_) \ + _(XR_EXTERNAL_CAMERA_STATUS_CONNECTED_BIT_OCULUS, 0x00000001) \ + _(XR_EXTERNAL_CAMERA_STATUS_CALIBRATING_BIT_OCULUS, 0x00000002) \ + _(XR_EXTERNAL_CAMERA_STATUS_CALIBRATION_FAILED_BIT_OCULUS, 0x00000004) \ + _(XR_EXTERNAL_CAMERA_STATUS_CALIBRATED_BIT_OCULUS, 0x00000008) \ + _(XR_EXTERNAL_CAMERA_STATUS_CAPTURING_BIT_OCULUS, 0x00000010) \ + +#define XR_LIST_BITS_XrPerformanceMetricsCounterFlagsMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META, 0x00000001) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META, 0x00000002) \ + _(XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META, 0x00000004) \ + +#define XR_LIST_BITS_XrFoveationDynamicFlagsHTC(_) \ + _(XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_BIT_HTC, 0x00000001) \ + _(XR_FOVEATION_DYNAMIC_CLEAR_FOV_ENABLED_BIT_HTC, 0x00000002) \ + _(XR_FOVEATION_DYNAMIC_FOCAL_CENTER_OFFSET_ENABLED_BIT_HTC, 0x00000004) \ + +/// Calls your macro with the name of each member of XrApiLayerProperties, in order. +#define XR_LIST_STRUCT_XrApiLayerProperties(_) \ + _(type) \ + _(next) \ + _(layerName) \ + _(specVersion) \ + _(layerVersion) \ + _(description) \ + +/// Calls your macro with the name of each member of XrExtensionProperties, in order. +#define XR_LIST_STRUCT_XrExtensionProperties(_) \ + _(type) \ + _(next) \ + _(extensionName) \ + _(extensionVersion) \ + +/// Calls your macro with the name of each member of XrApplicationInfo, in order. +#define XR_LIST_STRUCT_XrApplicationInfo(_) \ + _(applicationName) \ + _(applicationVersion) \ + _(engineName) \ + _(engineVersion) \ + _(apiVersion) \ + +/// Calls your macro with the name of each member of XrInstanceCreateInfo, in order. +#define XR_LIST_STRUCT_XrInstanceCreateInfo(_) \ + _(type) \ + _(next) \ + _(createFlags) \ + _(applicationInfo) \ + _(enabledApiLayerCount) \ + _(enabledApiLayerNames) \ + _(enabledExtensionCount) \ + _(enabledExtensionNames) \ + +/// Calls your macro with the name of each member of XrInstanceProperties, in order. +#define XR_LIST_STRUCT_XrInstanceProperties(_) \ + _(type) \ + _(next) \ + _(runtimeVersion) \ + _(runtimeName) \ + +/// Calls your macro with the name of each member of XrEventDataBuffer, in order. +#define XR_LIST_STRUCT_XrEventDataBuffer(_) \ + _(type) \ + _(next) \ + _(varying) \ + +/// Calls your macro with the name of each member of XrSystemGetInfo, in order. +#define XR_LIST_STRUCT_XrSystemGetInfo(_) \ + _(type) \ + _(next) \ + _(formFactor) \ + +/// Calls your macro with the name of each member of XrSystemGraphicsProperties, in order. +#define XR_LIST_STRUCT_XrSystemGraphicsProperties(_) \ + _(maxSwapchainImageHeight) \ + _(maxSwapchainImageWidth) \ + _(maxLayerCount) \ + +/// Calls your macro with the name of each member of XrSystemTrackingProperties, in order. +#define XR_LIST_STRUCT_XrSystemTrackingProperties(_) \ + _(orientationTracking) \ + _(positionTracking) \ + +/// Calls your macro with the name of each member of XrSystemProperties, in order. +#define XR_LIST_STRUCT_XrSystemProperties(_) \ + _(type) \ + _(next) \ + _(systemId) \ + _(vendorId) \ + _(systemName) \ + _(graphicsProperties) \ + _(trackingProperties) \ + +/// Calls your macro with the name of each member of XrSessionCreateInfo, in order. +#define XR_LIST_STRUCT_XrSessionCreateInfo(_) \ + _(type) \ + _(next) \ + _(createFlags) \ + _(systemId) \ + +/// Calls your macro with the name of each member of XrVector3f, in order. +#define XR_LIST_STRUCT_XrVector3f(_) \ + _(x) \ + _(y) \ + _(z) \ + +/// Calls your macro with the name of each member of XrSpaceVelocity, in order. +#define XR_LIST_STRUCT_XrSpaceVelocity(_) \ + _(type) \ + _(next) \ + _(velocityFlags) \ + _(linearVelocity) \ + _(angularVelocity) \ + +/// Calls your macro with the name of each member of XrQuaternionf, in order. +#define XR_LIST_STRUCT_XrQuaternionf(_) \ + _(x) \ + _(y) \ + _(z) \ + _(w) \ + +/// Calls your macro with the name of each member of XrPosef, in order. +#define XR_LIST_STRUCT_XrPosef(_) \ + _(orientation) \ + _(position) \ + +/// Calls your macro with the name of each member of XrReferenceSpaceCreateInfo, in order. +#define XR_LIST_STRUCT_XrReferenceSpaceCreateInfo(_) \ + _(type) \ + _(next) \ + _(referenceSpaceType) \ + _(poseInReferenceSpace) \ + +/// Calls your macro with the name of each member of XrExtent2Df, in order. +#define XR_LIST_STRUCT_XrExtent2Df(_) \ + _(width) \ + _(height) \ + +/// Calls your macro with the name of each member of XrActionSpaceCreateInfo, in order. +#define XR_LIST_STRUCT_XrActionSpaceCreateInfo(_) \ + _(type) \ + _(next) \ + _(action) \ + _(subactionPath) \ + _(poseInActionSpace) \ + +/// Calls your macro with the name of each member of XrSpaceLocation, in order. +#define XR_LIST_STRUCT_XrSpaceLocation(_) \ + _(type) \ + _(next) \ + _(locationFlags) \ + _(pose) \ + +/// Calls your macro with the name of each member of XrViewConfigurationProperties, in order. +#define XR_LIST_STRUCT_XrViewConfigurationProperties(_) \ + _(type) \ + _(next) \ + _(viewConfigurationType) \ + _(fovMutable) \ + +/// Calls your macro with the name of each member of XrViewConfigurationView, in order. +#define XR_LIST_STRUCT_XrViewConfigurationView(_) \ + _(type) \ + _(next) \ + _(recommendedImageRectWidth) \ + _(maxImageRectWidth) \ + _(recommendedImageRectHeight) \ + _(maxImageRectHeight) \ + _(recommendedSwapchainSampleCount) \ + _(maxSwapchainSampleCount) \ + +/// Calls your macro with the name of each member of XrSwapchainCreateInfo, in order. +#define XR_LIST_STRUCT_XrSwapchainCreateInfo(_) \ + _(type) \ + _(next) \ + _(createFlags) \ + _(usageFlags) \ + _(format) \ + _(sampleCount) \ + _(width) \ + _(height) \ + _(faceCount) \ + _(arraySize) \ + _(mipCount) \ + +/// Calls your macro with the name of each member of XrSwapchainImageBaseHeader, in order. +#define XR_LIST_STRUCT_XrSwapchainImageBaseHeader(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSwapchainImageAcquireInfo, in order. +#define XR_LIST_STRUCT_XrSwapchainImageAcquireInfo(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSwapchainImageWaitInfo, in order. +#define XR_LIST_STRUCT_XrSwapchainImageWaitInfo(_) \ + _(type) \ + _(next) \ + _(timeout) \ + +/// Calls your macro with the name of each member of XrSwapchainImageReleaseInfo, in order. +#define XR_LIST_STRUCT_XrSwapchainImageReleaseInfo(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSessionBeginInfo, in order. +#define XR_LIST_STRUCT_XrSessionBeginInfo(_) \ + _(type) \ + _(next) \ + _(primaryViewConfigurationType) \ + +/// Calls your macro with the name of each member of XrFrameWaitInfo, in order. +#define XR_LIST_STRUCT_XrFrameWaitInfo(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrFrameState, in order. +#define XR_LIST_STRUCT_XrFrameState(_) \ + _(type) \ + _(next) \ + _(predictedDisplayTime) \ + _(predictedDisplayPeriod) \ + _(shouldRender) \ + +/// Calls your macro with the name of each member of XrFrameBeginInfo, in order. +#define XR_LIST_STRUCT_XrFrameBeginInfo(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrCompositionLayerBaseHeader, in order. +#define XR_LIST_STRUCT_XrCompositionLayerBaseHeader(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + +/// Calls your macro with the name of each member of XrFrameEndInfo, in order. +#define XR_LIST_STRUCT_XrFrameEndInfo(_) \ + _(type) \ + _(next) \ + _(displayTime) \ + _(environmentBlendMode) \ + _(layerCount) \ + _(layers) \ + +/// Calls your macro with the name of each member of XrViewLocateInfo, in order. +#define XR_LIST_STRUCT_XrViewLocateInfo(_) \ + _(type) \ + _(next) \ + _(viewConfigurationType) \ + _(displayTime) \ + _(space) \ + +/// Calls your macro with the name of each member of XrViewState, in order. +#define XR_LIST_STRUCT_XrViewState(_) \ + _(type) \ + _(next) \ + _(viewStateFlags) \ + +/// Calls your macro with the name of each member of XrFovf, in order. +#define XR_LIST_STRUCT_XrFovf(_) \ + _(angleLeft) \ + _(angleRight) \ + _(angleUp) \ + _(angleDown) \ + +/// Calls your macro with the name of each member of XrView, in order. +#define XR_LIST_STRUCT_XrView(_) \ + _(type) \ + _(next) \ + _(pose) \ + _(fov) \ + +/// Calls your macro with the name of each member of XrActionSetCreateInfo, in order. +#define XR_LIST_STRUCT_XrActionSetCreateInfo(_) \ + _(type) \ + _(next) \ + _(actionSetName) \ + _(localizedActionSetName) \ + _(priority) \ + +/// Calls your macro with the name of each member of XrActionCreateInfo, in order. +#define XR_LIST_STRUCT_XrActionCreateInfo(_) \ + _(type) \ + _(next) \ + _(actionName) \ + _(actionType) \ + _(countSubactionPaths) \ + _(subactionPaths) \ + _(localizedActionName) \ + +/// Calls your macro with the name of each member of XrActionSuggestedBinding, in order. +#define XR_LIST_STRUCT_XrActionSuggestedBinding(_) \ + _(action) \ + _(binding) \ + +/// Calls your macro with the name of each member of XrInteractionProfileSuggestedBinding, in order. +#define XR_LIST_STRUCT_XrInteractionProfileSuggestedBinding(_) \ + _(type) \ + _(next) \ + _(interactionProfile) \ + _(countSuggestedBindings) \ + _(suggestedBindings) \ + +/// Calls your macro with the name of each member of XrSessionActionSetsAttachInfo, in order. +#define XR_LIST_STRUCT_XrSessionActionSetsAttachInfo(_) \ + _(type) \ + _(next) \ + _(countActionSets) \ + _(actionSets) \ + +/// Calls your macro with the name of each member of XrInteractionProfileState, in order. +#define XR_LIST_STRUCT_XrInteractionProfileState(_) \ + _(type) \ + _(next) \ + _(interactionProfile) \ + +/// Calls your macro with the name of each member of XrActionStateGetInfo, in order. +#define XR_LIST_STRUCT_XrActionStateGetInfo(_) \ + _(type) \ + _(next) \ + _(action) \ + _(subactionPath) \ + +/// Calls your macro with the name of each member of XrActionStateBoolean, in order. +#define XR_LIST_STRUCT_XrActionStateBoolean(_) \ + _(type) \ + _(next) \ + _(currentState) \ + _(changedSinceLastSync) \ + _(lastChangeTime) \ + _(isActive) \ + +/// Calls your macro with the name of each member of XrActionStateFloat, in order. +#define XR_LIST_STRUCT_XrActionStateFloat(_) \ + _(type) \ + _(next) \ + _(currentState) \ + _(changedSinceLastSync) \ + _(lastChangeTime) \ + _(isActive) \ + +/// Calls your macro with the name of each member of XrVector2f, in order. +#define XR_LIST_STRUCT_XrVector2f(_) \ + _(x) \ + _(y) \ + +/// Calls your macro with the name of each member of XrActionStateVector2f, in order. +#define XR_LIST_STRUCT_XrActionStateVector2f(_) \ + _(type) \ + _(next) \ + _(currentState) \ + _(changedSinceLastSync) \ + _(lastChangeTime) \ + _(isActive) \ + +/// Calls your macro with the name of each member of XrActionStatePose, in order. +#define XR_LIST_STRUCT_XrActionStatePose(_) \ + _(type) \ + _(next) \ + _(isActive) \ + +/// Calls your macro with the name of each member of XrActiveActionSet, in order. +#define XR_LIST_STRUCT_XrActiveActionSet(_) \ + _(actionSet) \ + _(subactionPath) \ + +/// Calls your macro with the name of each member of XrActionsSyncInfo, in order. +#define XR_LIST_STRUCT_XrActionsSyncInfo(_) \ + _(type) \ + _(next) \ + _(countActiveActionSets) \ + _(activeActionSets) \ + +/// Calls your macro with the name of each member of XrBoundSourcesForActionEnumerateInfo, in order. +#define XR_LIST_STRUCT_XrBoundSourcesForActionEnumerateInfo(_) \ + _(type) \ + _(next) \ + _(action) \ + +/// Calls your macro with the name of each member of XrInputSourceLocalizedNameGetInfo, in order. +#define XR_LIST_STRUCT_XrInputSourceLocalizedNameGetInfo(_) \ + _(type) \ + _(next) \ + _(sourcePath) \ + _(whichComponents) \ + +/// Calls your macro with the name of each member of XrHapticActionInfo, in order. +#define XR_LIST_STRUCT_XrHapticActionInfo(_) \ + _(type) \ + _(next) \ + _(action) \ + _(subactionPath) \ + +/// Calls your macro with the name of each member of XrHapticBaseHeader, in order. +#define XR_LIST_STRUCT_XrHapticBaseHeader(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrBaseInStructure, in order. +#define XR_LIST_STRUCT_XrBaseInStructure(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrBaseOutStructure, in order. +#define XR_LIST_STRUCT_XrBaseOutStructure(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrOffset2Di, in order. +#define XR_LIST_STRUCT_XrOffset2Di(_) \ + _(x) \ + _(y) \ + +/// Calls your macro with the name of each member of XrExtent2Di, in order. +#define XR_LIST_STRUCT_XrExtent2Di(_) \ + _(width) \ + _(height) \ + +/// Calls your macro with the name of each member of XrRect2Di, in order. +#define XR_LIST_STRUCT_XrRect2Di(_) \ + _(offset) \ + _(extent) \ + +/// Calls your macro with the name of each member of XrSwapchainSubImage, in order. +#define XR_LIST_STRUCT_XrSwapchainSubImage(_) \ + _(swapchain) \ + _(imageRect) \ + _(imageArrayIndex) \ + +/// Calls your macro with the name of each member of XrCompositionLayerProjectionView, in order. +#define XR_LIST_STRUCT_XrCompositionLayerProjectionView(_) \ + _(type) \ + _(next) \ + _(pose) \ + _(fov) \ + _(subImage) \ + +/// Calls your macro with the name of each member of XrCompositionLayerProjection, in order. +#define XR_LIST_STRUCT_XrCompositionLayerProjection(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(viewCount) \ + _(views) \ + +/// Calls your macro with the name of each member of XrCompositionLayerQuad, in order. +#define XR_LIST_STRUCT_XrCompositionLayerQuad(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(eyeVisibility) \ + _(subImage) \ + _(pose) \ + _(size) \ + +/// Calls your macro with the name of each member of XrEventDataBaseHeader, in order. +#define XR_LIST_STRUCT_XrEventDataBaseHeader(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrEventDataEventsLost, in order. +#define XR_LIST_STRUCT_XrEventDataEventsLost(_) \ + _(type) \ + _(next) \ + _(lostEventCount) \ + +/// Calls your macro with the name of each member of XrEventDataInstanceLossPending, in order. +#define XR_LIST_STRUCT_XrEventDataInstanceLossPending(_) \ + _(type) \ + _(next) \ + _(lossTime) \ + +/// Calls your macro with the name of each member of XrEventDataSessionStateChanged, in order. +#define XR_LIST_STRUCT_XrEventDataSessionStateChanged(_) \ + _(type) \ + _(next) \ + _(session) \ + _(state) \ + _(time) \ + +/// Calls your macro with the name of each member of XrEventDataReferenceSpaceChangePending, in order. +#define XR_LIST_STRUCT_XrEventDataReferenceSpaceChangePending(_) \ + _(type) \ + _(next) \ + _(session) \ + _(referenceSpaceType) \ + _(changeTime) \ + _(poseValid) \ + _(poseInPreviousSpace) \ + +/// Calls your macro with the name of each member of XrEventDataInteractionProfileChanged, in order. +#define XR_LIST_STRUCT_XrEventDataInteractionProfileChanged(_) \ + _(type) \ + _(next) \ + _(session) \ + +/// Calls your macro with the name of each member of XrHapticVibration, in order. +#define XR_LIST_STRUCT_XrHapticVibration(_) \ + _(type) \ + _(next) \ + _(duration) \ + _(frequency) \ + _(amplitude) \ + +/// Calls your macro with the name of each member of XrOffset2Df, in order. +#define XR_LIST_STRUCT_XrOffset2Df(_) \ + _(x) \ + _(y) \ + +/// Calls your macro with the name of each member of XrRect2Df, in order. +#define XR_LIST_STRUCT_XrRect2Df(_) \ + _(offset) \ + _(extent) \ + +/// Calls your macro with the name of each member of XrVector4f, in order. +#define XR_LIST_STRUCT_XrVector4f(_) \ + _(x) \ + _(y) \ + _(z) \ + _(w) \ + +/// Calls your macro with the name of each member of XrColor4f, in order. +#define XR_LIST_STRUCT_XrColor4f(_) \ + _(r) \ + _(g) \ + _(b) \ + _(a) \ + +/// Calls your macro with the name of each member of XrCompositionLayerCubeKHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerCubeKHR(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(eyeVisibility) \ + _(swapchain) \ + _(imageArrayIndex) \ + _(orientation) \ + +/// Calls your macro with the name of each member of XrInstanceCreateInfoAndroidKHR, in order. +#define XR_LIST_STRUCT_XrInstanceCreateInfoAndroidKHR(_) \ + _(type) \ + _(next) \ + _(applicationVM) \ + _(applicationActivity) \ + +/// Calls your macro with the name of each member of XrCompositionLayerDepthInfoKHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerDepthInfoKHR(_) \ + _(type) \ + _(next) \ + _(subImage) \ + _(minDepth) \ + _(maxDepth) \ + _(nearZ) \ + _(farZ) \ + +/// Calls your macro with the name of each member of XrVulkanSwapchainFormatListCreateInfoKHR, in order. +#define XR_LIST_STRUCT_XrVulkanSwapchainFormatListCreateInfoKHR(_) \ + _(type) \ + _(next) \ + _(viewFormatCount) \ + _(viewFormats) \ + +/// Calls your macro with the name of each member of XrCompositionLayerCylinderKHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerCylinderKHR(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(eyeVisibility) \ + _(subImage) \ + _(pose) \ + _(radius) \ + _(centralAngle) \ + _(aspectRatio) \ + +/// Calls your macro with the name of each member of XrCompositionLayerEquirectKHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerEquirectKHR(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(eyeVisibility) \ + _(subImage) \ + _(pose) \ + _(radius) \ + _(scale) \ + _(bias) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingOpenGLWin32KHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWin32KHR(_) \ + _(type) \ + _(next) \ + _(hDC) \ + _(hGLRC) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingOpenGLXlibKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXlibKHR(_) \ + _(type) \ + _(next) \ + _(xDisplay) \ + _(visualid) \ + _(glxFBConfig) \ + _(glxDrawable) \ + _(glxContext) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingOpenGLXcbKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXcbKHR(_) \ + _(type) \ + _(next) \ + _(connection) \ + _(screenNumber) \ + _(fbconfigid) \ + _(visualid) \ + _(glxDrawable) \ + _(glxContext) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingOpenGLWaylandKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWaylandKHR(_) \ + _(type) \ + _(next) \ + _(display) \ + +/// Calls your macro with the name of each member of XrSwapchainImageOpenGLKHR, in order. +#define XR_LIST_STRUCT_XrSwapchainImageOpenGLKHR(_) \ + _(type) \ + _(next) \ + _(image) \ + +/// Calls your macro with the name of each member of XrGraphicsRequirementsOpenGLKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLKHR(_) \ + _(type) \ + _(next) \ + _(minApiVersionSupported) \ + _(maxApiVersionSupported) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingOpenGLESAndroidKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLESAndroidKHR(_) \ + _(type) \ + _(next) \ + _(display) \ + _(config) \ + _(context) \ + +/// Calls your macro with the name of each member of XrSwapchainImageOpenGLESKHR, in order. +#define XR_LIST_STRUCT_XrSwapchainImageOpenGLESKHR(_) \ + _(type) \ + _(next) \ + _(image) \ + +/// Calls your macro with the name of each member of XrGraphicsRequirementsOpenGLESKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLESKHR(_) \ + _(type) \ + _(next) \ + _(minApiVersionSupported) \ + _(maxApiVersionSupported) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingVulkanKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingVulkanKHR(_) \ + _(type) \ + _(next) \ + _(instance) \ + _(physicalDevice) \ + _(device) \ + _(queueFamilyIndex) \ + _(queueIndex) \ + +/// Calls your macro with the name of each member of XrSwapchainImageVulkanKHR, in order. +#define XR_LIST_STRUCT_XrSwapchainImageVulkanKHR(_) \ + _(type) \ + _(next) \ + _(image) \ + +/// Calls your macro with the name of each member of XrGraphicsRequirementsVulkanKHR, in order. +#define XR_LIST_STRUCT_XrGraphicsRequirementsVulkanKHR(_) \ + _(type) \ + _(next) \ + _(minApiVersionSupported) \ + _(maxApiVersionSupported) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingD3D11KHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingD3D11KHR(_) \ + _(type) \ + _(next) \ + _(device) \ + +/// Calls your macro with the name of each member of XrSwapchainImageD3D11KHR, in order. +#define XR_LIST_STRUCT_XrSwapchainImageD3D11KHR(_) \ + _(type) \ + _(next) \ + _(texture) \ + +/// Calls your macro with the name of each member of XrGraphicsRequirementsD3D11KHR, in order. +#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D11KHR(_) \ + _(type) \ + _(next) \ + _(adapterLuid) \ + _(minFeatureLevel) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingD3D12KHR, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingD3D12KHR(_) \ + _(type) \ + _(next) \ + _(device) \ + _(queue) \ + +/// Calls your macro with the name of each member of XrSwapchainImageD3D12KHR, in order. +#define XR_LIST_STRUCT_XrSwapchainImageD3D12KHR(_) \ + _(type) \ + _(next) \ + _(texture) \ + +/// Calls your macro with the name of each member of XrGraphicsRequirementsD3D12KHR, in order. +#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D12KHR(_) \ + _(type) \ + _(next) \ + _(adapterLuid) \ + _(minFeatureLevel) \ + +/// Calls your macro with the name of each member of XrVisibilityMaskKHR, in order. +#define XR_LIST_STRUCT_XrVisibilityMaskKHR(_) \ + _(type) \ + _(next) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +/// Calls your macro with the name of each member of XrEventDataVisibilityMaskChangedKHR, in order. +#define XR_LIST_STRUCT_XrEventDataVisibilityMaskChangedKHR(_) \ + _(type) \ + _(next) \ + _(session) \ + _(viewConfigurationType) \ + _(viewIndex) \ + +/// Calls your macro with the name of each member of XrCompositionLayerColorScaleBiasKHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerColorScaleBiasKHR(_) \ + _(type) \ + _(next) \ + _(colorScale) \ + _(colorBias) \ + +/// Calls your macro with the name of each member of XrLoaderInitInfoBaseHeaderKHR, in order. +#define XR_LIST_STRUCT_XrLoaderInitInfoBaseHeaderKHR(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrLoaderInitInfoAndroidKHR, in order. +#define XR_LIST_STRUCT_XrLoaderInitInfoAndroidKHR(_) \ + _(type) \ + _(next) \ + _(applicationVM) \ + _(applicationContext) \ + +/// Calls your macro with the name of each member of XrVulkanInstanceCreateInfoKHR, in order. +#define XR_LIST_STRUCT_XrVulkanInstanceCreateInfoKHR(_) \ + _(type) \ + _(next) \ + _(systemId) \ + _(createFlags) \ + _(pfnGetInstanceProcAddr) \ + _(vulkanCreateInfo) \ + _(vulkanAllocator) \ + +/// Calls your macro with the name of each member of XrVulkanDeviceCreateInfoKHR, in order. +#define XR_LIST_STRUCT_XrVulkanDeviceCreateInfoKHR(_) \ + _(type) \ + _(next) \ + _(systemId) \ + _(createFlags) \ + _(pfnGetInstanceProcAddr) \ + _(vulkanPhysicalDevice) \ + _(vulkanCreateInfo) \ + _(vulkanAllocator) \ + +/// Calls your macro with the name of each member of XrVulkanGraphicsDeviceGetInfoKHR, in order. +#define XR_LIST_STRUCT_XrVulkanGraphicsDeviceGetInfoKHR(_) \ + _(type) \ + _(next) \ + _(systemId) \ + _(vulkanInstance) \ + +/// Calls your macro with the name of each member of XrCompositionLayerEquirect2KHR, in order. +#define XR_LIST_STRUCT_XrCompositionLayerEquirect2KHR(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(eyeVisibility) \ + _(subImage) \ + _(pose) \ + _(radius) \ + _(centralHorizontalAngle) \ + _(upperVerticalAngle) \ + _(lowerVerticalAngle) \ + +/// Calls your macro with the name of each member of XrBindingModificationBaseHeaderKHR, in order. +#define XR_LIST_STRUCT_XrBindingModificationBaseHeaderKHR(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrBindingModificationsKHR, in order. +#define XR_LIST_STRUCT_XrBindingModificationsKHR(_) \ + _(type) \ + _(next) \ + _(bindingModificationCount) \ + _(bindingModifications) \ + +/// Calls your macro with the name of each member of XrEventDataPerfSettingsEXT, in order. +#define XR_LIST_STRUCT_XrEventDataPerfSettingsEXT(_) \ + _(type) \ + _(next) \ + _(domain) \ + _(subDomain) \ + _(fromLevel) \ + _(toLevel) \ + +/// Calls your macro with the name of each member of XrDebugUtilsObjectNameInfoEXT, in order. +#define XR_LIST_STRUCT_XrDebugUtilsObjectNameInfoEXT(_) \ + _(type) \ + _(next) \ + _(objectType) \ + _(objectHandle) \ + _(objectName) \ + +/// Calls your macro with the name of each member of XrDebugUtilsLabelEXT, in order. +#define XR_LIST_STRUCT_XrDebugUtilsLabelEXT(_) \ + _(type) \ + _(next) \ + _(labelName) \ + +/// Calls your macro with the name of each member of XrDebugUtilsMessengerCallbackDataEXT, in order. +#define XR_LIST_STRUCT_XrDebugUtilsMessengerCallbackDataEXT(_) \ + _(type) \ + _(next) \ + _(messageId) \ + _(functionName) \ + _(message) \ + _(objectCount) \ + _(objects) \ + _(sessionLabelCount) \ + _(sessionLabels) \ + +/// Calls your macro with the name of each member of XrDebugUtilsMessengerCreateInfoEXT, in order. +#define XR_LIST_STRUCT_XrDebugUtilsMessengerCreateInfoEXT(_) \ + _(type) \ + _(next) \ + _(messageSeverities) \ + _(messageTypes) \ + _(userCallback) \ + _(userData) \ + +/// Calls your macro with the name of each member of XrSystemEyeGazeInteractionPropertiesEXT, in order. +#define XR_LIST_STRUCT_XrSystemEyeGazeInteractionPropertiesEXT(_) \ + _(type) \ + _(next) \ + _(supportsEyeGazeInteraction) \ + +/// Calls your macro with the name of each member of XrEyeGazeSampleTimeEXT, in order. +#define XR_LIST_STRUCT_XrEyeGazeSampleTimeEXT(_) \ + _(type) \ + _(next) \ + _(time) \ + +/// Calls your macro with the name of each member of XrSessionCreateInfoOverlayEXTX, in order. +#define XR_LIST_STRUCT_XrSessionCreateInfoOverlayEXTX(_) \ + _(type) \ + _(next) \ + _(createFlags) \ + _(sessionLayersPlacement) \ + +/// Calls your macro with the name of each member of XrEventDataMainSessionVisibilityChangedEXTX, in order. +#define XR_LIST_STRUCT_XrEventDataMainSessionVisibilityChangedEXTX(_) \ + _(type) \ + _(next) \ + _(visible) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(space) \ + _(pose) \ + _(time) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorSpaceCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorSpaceCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(anchor) \ + _(poseInAnchorSpace) \ + +/// Calls your macro with the name of each member of XrCompositionLayerImageLayoutFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerImageLayoutFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrCompositionLayerAlphaBlendFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerAlphaBlendFB(_) \ + _(type) \ + _(next) \ + _(srcFactorColor) \ + _(dstFactorColor) \ + _(srcFactorAlpha) \ + _(dstFactorAlpha) \ + +/// Calls your macro with the name of each member of XrViewConfigurationDepthRangeEXT, in order. +#define XR_LIST_STRUCT_XrViewConfigurationDepthRangeEXT(_) \ + _(type) \ + _(next) \ + _(recommendedNearZ) \ + _(minNearZ) \ + _(recommendedFarZ) \ + _(maxFarZ) \ + +/// Calls your macro with the name of each member of XrGraphicsBindingEGLMNDX, in order. +#define XR_LIST_STRUCT_XrGraphicsBindingEGLMNDX(_) \ + _(type) \ + _(next) \ + _(getProcAddress) \ + _(display) \ + _(config) \ + _(context) \ + +/// Calls your macro with the name of each member of XrSpatialGraphNodeSpaceCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialGraphNodeSpaceCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(nodeType) \ + _(nodeId) \ + _(pose) \ + +/// Calls your macro with the name of each member of XrSpatialGraphStaticNodeBindingCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialGraphStaticNodeBindingCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +/// Calls your macro with the name of each member of XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesGetInfoMSFT(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSpatialGraphNodeBindingPropertiesMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(nodeId) \ + _(poseInNodeSpace) \ + +/// Calls your macro with the name of each member of XrSystemHandTrackingPropertiesEXT, in order. +#define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \ + _(type) \ + _(next) \ + _(supportsHandTracking) \ + +/// Calls your macro with the name of each member of XrHandTrackerCreateInfoEXT, in order. +#define XR_LIST_STRUCT_XrHandTrackerCreateInfoEXT(_) \ + _(type) \ + _(next) \ + _(hand) \ + _(handJointSet) \ + +/// Calls your macro with the name of each member of XrHandJointsLocateInfoEXT, in order. +#define XR_LIST_STRUCT_XrHandJointsLocateInfoEXT(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + +/// Calls your macro with the name of each member of XrHandJointLocationEXT, in order. +#define XR_LIST_STRUCT_XrHandJointLocationEXT(_) \ + _(locationFlags) \ + _(pose) \ + _(radius) \ + +/// Calls your macro with the name of each member of XrHandJointVelocityEXT, in order. +#define XR_LIST_STRUCT_XrHandJointVelocityEXT(_) \ + _(velocityFlags) \ + _(linearVelocity) \ + _(angularVelocity) \ + +/// Calls your macro with the name of each member of XrHandJointLocationsEXT, in order. +#define XR_LIST_STRUCT_XrHandJointLocationsEXT(_) \ + _(type) \ + _(next) \ + _(isActive) \ + _(jointCount) \ + _(jointLocations) \ + +/// Calls your macro with the name of each member of XrHandJointVelocitiesEXT, in order. +#define XR_LIST_STRUCT_XrHandJointVelocitiesEXT(_) \ + _(type) \ + _(next) \ + _(jointCount) \ + _(jointVelocities) \ + +/// Calls your macro with the name of each member of XrSystemHandTrackingMeshPropertiesMSFT, in order. +#define XR_LIST_STRUCT_XrSystemHandTrackingMeshPropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(supportsHandTrackingMesh) \ + _(maxHandMeshIndexCount) \ + _(maxHandMeshVertexCount) \ + +/// Calls your macro with the name of each member of XrHandMeshSpaceCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshSpaceCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(handPoseType) \ + _(poseInHandMeshSpace) \ + +/// Calls your macro with the name of each member of XrHandMeshUpdateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshUpdateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(time) \ + _(handPoseType) \ + +/// Calls your macro with the name of each member of XrHandMeshIndexBufferMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshIndexBufferMSFT(_) \ + _(indexBufferKey) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +/// Calls your macro with the name of each member of XrHandMeshVertexMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshVertexMSFT(_) \ + _(position) \ + _(normal) \ + +/// Calls your macro with the name of each member of XrHandMeshVertexBufferMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshVertexBufferMSFT(_) \ + _(vertexUpdateTime) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + +/// Calls your macro with the name of each member of XrHandMeshMSFT, in order. +#define XR_LIST_STRUCT_XrHandMeshMSFT(_) \ + _(type) \ + _(next) \ + _(isActive) \ + _(indexBufferChanged) \ + _(vertexBufferChanged) \ + _(indexBuffer) \ + _(vertexBuffer) \ + +/// Calls your macro with the name of each member of XrHandPoseTypeInfoMSFT, in order. +#define XR_LIST_STRUCT_XrHandPoseTypeInfoMSFT(_) \ + _(type) \ + _(next) \ + _(handPoseType) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationSessionBeginInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSessionBeginInfoMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationCount) \ + _(enabledViewConfigurationTypes) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationStateMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationStateMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationType) \ + _(active) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationFrameStateMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameStateMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationCount) \ + _(viewConfigurationStates) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationLayerInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationLayerInfoMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationType) \ + _(environmentBlendMode) \ + _(layerCount) \ + _(layers) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationFrameEndInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameEndInfoMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationCount) \ + _(viewConfigurationLayersInfo) \ + +/// Calls your macro with the name of each member of XrSecondaryViewConfigurationSwapchainCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSwapchainCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(viewConfigurationType) \ + +/// Calls your macro with the name of each member of XrControllerModelKeyStateMSFT, in order. +#define XR_LIST_STRUCT_XrControllerModelKeyStateMSFT(_) \ + _(type) \ + _(next) \ + _(modelKey) \ + +/// Calls your macro with the name of each member of XrControllerModelNodePropertiesMSFT, in order. +#define XR_LIST_STRUCT_XrControllerModelNodePropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(parentNodeName) \ + _(nodeName) \ + +/// Calls your macro with the name of each member of XrControllerModelPropertiesMSFT, in order. +#define XR_LIST_STRUCT_XrControllerModelPropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(nodeCapacityInput) \ + _(nodeCountOutput) \ + _(nodeProperties) \ + +/// Calls your macro with the name of each member of XrControllerModelNodeStateMSFT, in order. +#define XR_LIST_STRUCT_XrControllerModelNodeStateMSFT(_) \ + _(type) \ + _(next) \ + _(nodePose) \ + +/// Calls your macro with the name of each member of XrControllerModelStateMSFT, in order. +#define XR_LIST_STRUCT_XrControllerModelStateMSFT(_) \ + _(type) \ + _(next) \ + _(nodeCapacityInput) \ + _(nodeCountOutput) \ + _(nodeStates) \ + +/// Calls your macro with the name of each member of XrViewConfigurationViewFovEPIC, in order. +#define XR_LIST_STRUCT_XrViewConfigurationViewFovEPIC(_) \ + _(type) \ + _(next) \ + _(recommendedFov) \ + _(maxMutableFov) \ + +/// Calls your macro with the name of each member of XrHolographicWindowAttachmentMSFT, in order. +#define XR_LIST_STRUCT_XrHolographicWindowAttachmentMSFT(_) \ + _(type) \ + _(next) \ + _(holographicSpace) \ + _(coreWindow) \ + +/// Calls your macro with the name of each member of XrCompositionLayerReprojectionInfoMSFT, in order. +#define XR_LIST_STRUCT_XrCompositionLayerReprojectionInfoMSFT(_) \ + _(type) \ + _(next) \ + _(reprojectionMode) \ + +/// Calls your macro with the name of each member of XrCompositionLayerReprojectionPlaneOverrideMSFT, in order. +#define XR_LIST_STRUCT_XrCompositionLayerReprojectionPlaneOverrideMSFT(_) \ + _(type) \ + _(next) \ + _(position) \ + _(normal) \ + _(velocity) \ + +/// Calls your macro with the name of each member of XrAndroidSurfaceSwapchainCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrAndroidSurfaceSwapchainCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(createFlags) \ + +/// Calls your macro with the name of each member of XrSwapchainStateBaseHeaderFB, in order. +#define XR_LIST_STRUCT_XrSwapchainStateBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrCompositionLayerSecureContentFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerSecureContentFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrBodyJointLocationFB, in order. +#define XR_LIST_STRUCT_XrBodyJointLocationFB(_) \ + _(locationFlags) \ + _(pose) \ + +/// Calls your macro with the name of each member of XrSystemBodyTrackingPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemBodyTrackingPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsBodyTracking) \ + +/// Calls your macro with the name of each member of XrBodyTrackerCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrBodyTrackerCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(bodyJointSet) \ + +/// Calls your macro with the name of each member of XrBodySkeletonJointFB, in order. +#define XR_LIST_STRUCT_XrBodySkeletonJointFB(_) \ + _(joint) \ + _(parentJoint) \ + _(pose) \ + +/// Calls your macro with the name of each member of XrBodySkeletonFB, in order. +#define XR_LIST_STRUCT_XrBodySkeletonFB(_) \ + _(type) \ + _(next) \ + _(jointCount) \ + _(joints) \ + +/// Calls your macro with the name of each member of XrBodyJointsLocateInfoFB, in order. +#define XR_LIST_STRUCT_XrBodyJointsLocateInfoFB(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + +/// Calls your macro with the name of each member of XrBodyJointLocationsFB, in order. +#define XR_LIST_STRUCT_XrBodyJointLocationsFB(_) \ + _(type) \ + _(next) \ + _(isActive) \ + _(confidence) \ + _(jointCount) \ + _(jointLocations) \ + _(skeletonChangedCount) \ + _(time) \ + +/// Calls your macro with the name of each member of XrInteractionProfileDpadBindingEXT, in order. +#define XR_LIST_STRUCT_XrInteractionProfileDpadBindingEXT(_) \ + _(type) \ + _(next) \ + _(binding) \ + _(actionSet) \ + _(forceThreshold) \ + _(forceThresholdReleased) \ + _(centerRegion) \ + _(wedgeAngle) \ + _(isSticky) \ + _(onHaptic) \ + _(offHaptic) \ + +/// Calls your macro with the name of each member of XrInteractionProfileAnalogThresholdVALVE, in order. +#define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \ + _(type) \ + _(next) \ + _(action) \ + _(binding) \ + _(onThreshold) \ + _(offThreshold) \ + _(onHaptic) \ + _(offHaptic) \ + +/// Calls your macro with the name of each member of XrHandJointsMotionRangeInfoEXT, in order. +#define XR_LIST_STRUCT_XrHandJointsMotionRangeInfoEXT(_) \ + _(type) \ + _(next) \ + _(handJointsMotionRange) \ + +/// Calls your macro with the name of each member of XrUuidMSFT, in order. +#define XR_LIST_STRUCT_XrUuidMSFT(_) \ + _(bytes) \ + +/// Calls your macro with the name of each member of XrSceneObserverCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneObserverCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSceneCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSceneSphereBoundMSFT, in order. +#define XR_LIST_STRUCT_XrSceneSphereBoundMSFT(_) \ + _(center) \ + _(radius) \ + +/// Calls your macro with the name of each member of XrSceneOrientedBoxBoundMSFT, in order. +#define XR_LIST_STRUCT_XrSceneOrientedBoxBoundMSFT(_) \ + _(pose) \ + _(extents) \ + +/// Calls your macro with the name of each member of XrSceneFrustumBoundMSFT, in order. +#define XR_LIST_STRUCT_XrSceneFrustumBoundMSFT(_) \ + _(pose) \ + _(fov) \ + _(farDistance) \ + +/// Calls your macro with the name of each member of XrSceneBoundsMSFT, in order. +#define XR_LIST_STRUCT_XrSceneBoundsMSFT(_) \ + _(space) \ + _(time) \ + _(sphereCount) \ + _(spheres) \ + _(boxCount) \ + _(boxes) \ + _(frustumCount) \ + _(frustums) \ + +/// Calls your macro with the name of each member of XrNewSceneComputeInfoMSFT, in order. +#define XR_LIST_STRUCT_XrNewSceneComputeInfoMSFT(_) \ + _(type) \ + _(next) \ + _(requestedFeatureCount) \ + _(requestedFeatures) \ + _(consistency) \ + _(bounds) \ + +/// Calls your macro with the name of each member of XrVisualMeshComputeLodInfoMSFT, in order. +#define XR_LIST_STRUCT_XrVisualMeshComputeLodInfoMSFT(_) \ + _(type) \ + _(next) \ + _(lod) \ + +/// Calls your macro with the name of each member of XrSceneComponentMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentMSFT(_) \ + _(componentType) \ + _(id) \ + _(parentId) \ + _(updateTime) \ + +/// Calls your macro with the name of each member of XrSceneComponentsMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentsMSFT(_) \ + _(type) \ + _(next) \ + _(componentCapacityInput) \ + _(componentCountOutput) \ + _(components) \ + +/// Calls your macro with the name of each member of XrSceneComponentsGetInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentsGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(componentType) \ + +/// Calls your macro with the name of each member of XrSceneComponentLocationMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentLocationMSFT(_) \ + _(flags) \ + _(pose) \ + +/// Calls your macro with the name of each member of XrSceneComponentLocationsMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentLocationsMSFT(_) \ + _(type) \ + _(next) \ + _(locationCount) \ + _(locations) \ + +/// Calls your macro with the name of each member of XrSceneComponentsLocateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentsLocateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + _(componentIdCount) \ + _(componentIds) \ + +/// Calls your macro with the name of each member of XrSceneObjectMSFT, in order. +#define XR_LIST_STRUCT_XrSceneObjectMSFT(_) \ + _(objectType) \ + +/// Calls your macro with the name of each member of XrSceneObjectsMSFT, in order. +#define XR_LIST_STRUCT_XrSceneObjectsMSFT(_) \ + _(type) \ + _(next) \ + _(sceneObjectCount) \ + _(sceneObjects) \ + +/// Calls your macro with the name of each member of XrSceneComponentParentFilterInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneComponentParentFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(parentId) \ + +/// Calls your macro with the name of each member of XrSceneObjectTypesFilterInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneObjectTypesFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(objectTypeCount) \ + _(objectTypes) \ + +/// Calls your macro with the name of each member of XrScenePlaneMSFT, in order. +#define XR_LIST_STRUCT_XrScenePlaneMSFT(_) \ + _(alignment) \ + _(size) \ + _(meshBufferId) \ + _(supportsIndicesUint16) \ + +/// Calls your macro with the name of each member of XrScenePlanesMSFT, in order. +#define XR_LIST_STRUCT_XrScenePlanesMSFT(_) \ + _(type) \ + _(next) \ + _(scenePlaneCount) \ + _(scenePlanes) \ + +/// Calls your macro with the name of each member of XrScenePlaneAlignmentFilterInfoMSFT, in order. +#define XR_LIST_STRUCT_XrScenePlaneAlignmentFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(alignmentCount) \ + _(alignments) \ + +/// Calls your macro with the name of each member of XrSceneMeshMSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshMSFT(_) \ + _(meshBufferId) \ + _(supportsIndicesUint16) \ + +/// Calls your macro with the name of each member of XrSceneMeshesMSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshesMSFT(_) \ + _(type) \ + _(next) \ + _(sceneMeshCount) \ + _(sceneMeshes) \ + +/// Calls your macro with the name of each member of XrSceneMeshBuffersGetInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshBuffersGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(meshBufferId) \ + +/// Calls your macro with the name of each member of XrSceneMeshBuffersMSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshBuffersMSFT(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSceneMeshVertexBufferMSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshVertexBufferMSFT(_) \ + _(type) \ + _(next) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + +/// Calls your macro with the name of each member of XrSceneMeshIndicesUint32MSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshIndicesUint32MSFT(_) \ + _(type) \ + _(next) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +/// Calls your macro with the name of each member of XrSceneMeshIndicesUint16MSFT, in order. +#define XR_LIST_STRUCT_XrSceneMeshIndicesUint16MSFT(_) \ + _(type) \ + _(next) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +/// Calls your macro with the name of each member of XrSerializedSceneFragmentDataGetInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSerializedSceneFragmentDataGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(sceneFragmentId) \ + +/// Calls your macro with the name of each member of XrDeserializeSceneFragmentMSFT, in order. +#define XR_LIST_STRUCT_XrDeserializeSceneFragmentMSFT(_) \ + _(bufferSize) \ + _(buffer) \ + +/// Calls your macro with the name of each member of XrSceneDeserializeInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSceneDeserializeInfoMSFT(_) \ + _(type) \ + _(next) \ + _(fragmentCount) \ + _(fragments) \ + +/// Calls your macro with the name of each member of XrEventDataDisplayRefreshRateChangedFB, in order. +#define XR_LIST_STRUCT_XrEventDataDisplayRefreshRateChangedFB(_) \ + _(type) \ + _(next) \ + _(fromDisplayRefreshRate) \ + _(toDisplayRefreshRate) \ + +/// Calls your macro with the name of each member of XrViveTrackerPathsHTCX, in order. +#define XR_LIST_STRUCT_XrViveTrackerPathsHTCX(_) \ + _(type) \ + _(next) \ + _(persistentPath) \ + _(rolePath) \ + +/// Calls your macro with the name of each member of XrEventDataViveTrackerConnectedHTCX, in order. +#define XR_LIST_STRUCT_XrEventDataViveTrackerConnectedHTCX(_) \ + _(type) \ + _(next) \ + _(paths) \ + +/// Calls your macro with the name of each member of XrSystemFacialTrackingPropertiesHTC, in order. +#define XR_LIST_STRUCT_XrSystemFacialTrackingPropertiesHTC(_) \ + _(type) \ + _(next) \ + _(supportEyeFacialTracking) \ + _(supportLipFacialTracking) \ + +/// Calls your macro with the name of each member of XrFacialExpressionsHTC, in order. +#define XR_LIST_STRUCT_XrFacialExpressionsHTC(_) \ + _(type) \ + _(next) \ + _(isActive) \ + _(sampleTime) \ + _(expressionCount) \ + _(expressionWeightings) \ + +/// Calls your macro with the name of each member of XrFacialTrackerCreateInfoHTC, in order. +#define XR_LIST_STRUCT_XrFacialTrackerCreateInfoHTC(_) \ + _(type) \ + _(next) \ + _(facialTrackingType) \ + +/// Calls your macro with the name of each member of XrSystemColorSpacePropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemColorSpacePropertiesFB(_) \ + _(type) \ + _(next) \ + _(colorSpace) \ + +/// Calls your macro with the name of each member of XrVector4sFB, in order. +#define XR_LIST_STRUCT_XrVector4sFB(_) \ + _(x) \ + _(y) \ + _(z) \ + _(w) \ + +/// Calls your macro with the name of each member of XrHandTrackingMeshFB, in order. +#define XR_LIST_STRUCT_XrHandTrackingMeshFB(_) \ + _(type) \ + _(next) \ + _(jointCapacityInput) \ + _(jointCountOutput) \ + _(jointBindPoses) \ + _(jointRadii) \ + _(jointParents) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertexPositions) \ + _(vertexNormals) \ + _(vertexUVs) \ + _(vertexBlendIndices) \ + _(vertexBlendWeights) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +/// Calls your macro with the name of each member of XrHandTrackingScaleFB, in order. +#define XR_LIST_STRUCT_XrHandTrackingScaleFB(_) \ + _(type) \ + _(next) \ + _(sensorOutput) \ + _(currentOutput) \ + _(overrideHandScale) \ + _(overrideValueInput) \ + +/// Calls your macro with the name of each member of XrHandTrackingAimStateFB, in order. +#define XR_LIST_STRUCT_XrHandTrackingAimStateFB(_) \ + _(type) \ + _(next) \ + _(status) \ + _(aimPose) \ + _(pinchStrengthIndex) \ + _(pinchStrengthMiddle) \ + _(pinchStrengthRing) \ + _(pinchStrengthLittle) \ + +/// Calls your macro with the name of each member of XrHandCapsuleFB, in order. +#define XR_LIST_STRUCT_XrHandCapsuleFB(_) \ + _(points) \ + _(radius) \ + _(joint) \ + +/// Calls your macro with the name of each member of XrHandTrackingCapsulesStateFB, in order. +#define XR_LIST_STRUCT_XrHandTrackingCapsulesStateFB(_) \ + _(type) \ + _(next) \ + _(capsules) \ + +/// Calls your macro with the name of each member of XrSystemSpatialEntityPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemSpatialEntityPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsSpatialEntity) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +/// Calls your macro with the name of each member of XrSpaceComponentStatusSetInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceComponentStatusSetInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + _(enabled) \ + _(timeout) \ + +/// Calls your macro with the name of each member of XrSpaceComponentStatusFB, in order. +#define XR_LIST_STRUCT_XrSpaceComponentStatusFB(_) \ + _(type) \ + _(next) \ + _(enabled) \ + _(changePending) \ + +/// Calls your macro with the name of each member of XrUuidEXT, in order. +#define XR_LIST_STRUCT_XrUuidEXT(_) \ + _(data) \ + +/// Calls your macro with the name of each member of XrEventDataSpatialAnchorCreateCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpatialAnchorCreateCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceSetStatusCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceSetStatusCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(componentType) \ + _(enabled) \ + +/// Calls your macro with the name of each member of XrFoveationProfileCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSwapchainCreateInfoFoveationFB, in order. +#define XR_LIST_STRUCT_XrSwapchainCreateInfoFoveationFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrSwapchainStateFoveationFB, in order. +#define XR_LIST_STRUCT_XrSwapchainStateFoveationFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(profile) \ + +/// Calls your macro with the name of each member of XrFoveationLevelProfileCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrFoveationLevelProfileCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(level) \ + _(verticalOffset) \ + _(dynamic) \ + +/// Calls your macro with the name of each member of XrSystemKeyboardTrackingPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemKeyboardTrackingPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsKeyboardTracking) \ + +/// Calls your macro with the name of each member of XrKeyboardTrackingDescriptionFB, in order. +#define XR_LIST_STRUCT_XrKeyboardTrackingDescriptionFB(_) \ + _(trackedKeyboardId) \ + _(size) \ + _(flags) \ + _(name) \ + +/// Calls your macro with the name of each member of XrKeyboardSpaceCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrKeyboardSpaceCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(trackedKeyboardId) \ + +/// Calls your macro with the name of each member of XrKeyboardTrackingQueryFB, in order. +#define XR_LIST_STRUCT_XrKeyboardTrackingQueryFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrTriangleMeshCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrTriangleMeshCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(windingOrder) \ + _(vertexCount) \ + _(vertexBuffer) \ + _(triangleCount) \ + _(indexBuffer) \ + +/// Calls your macro with the name of each member of XrSystemPassthroughPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemPassthroughPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsPassthrough) \ + +/// Calls your macro with the name of each member of XrSystemPassthroughProperties2FB, in order. +#define XR_LIST_STRUCT_XrSystemPassthroughProperties2FB(_) \ + _(type) \ + _(next) \ + _(capabilities) \ + +/// Calls your macro with the name of each member of XrPassthroughCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrPassthroughCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrPassthroughLayerCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrPassthroughLayerCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(passthrough) \ + _(flags) \ + _(purpose) \ + +/// Calls your macro with the name of each member of XrCompositionLayerPassthroughFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerPassthroughFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(space) \ + _(layerHandle) \ + +/// Calls your macro with the name of each member of XrGeometryInstanceCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrGeometryInstanceCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(layer) \ + _(mesh) \ + _(baseSpace) \ + _(pose) \ + _(scale) \ + +/// Calls your macro with the name of each member of XrGeometryInstanceTransformFB, in order. +#define XR_LIST_STRUCT_XrGeometryInstanceTransformFB(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + _(pose) \ + _(scale) \ + +/// Calls your macro with the name of each member of XrPassthroughStyleFB, in order. +#define XR_LIST_STRUCT_XrPassthroughStyleFB(_) \ + _(type) \ + _(next) \ + _(textureOpacityFactor) \ + _(edgeColor) \ + +/// Calls your macro with the name of each member of XrPassthroughColorMapMonoToRgbaFB, in order. +#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToRgbaFB(_) \ + _(type) \ + _(next) \ + _(textureColorMap) \ + +/// Calls your macro with the name of each member of XrPassthroughColorMapMonoToMonoFB, in order. +#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToMonoFB(_) \ + _(type) \ + _(next) \ + _(textureColorMap) \ + +/// Calls your macro with the name of each member of XrPassthroughBrightnessContrastSaturationFB, in order. +#define XR_LIST_STRUCT_XrPassthroughBrightnessContrastSaturationFB(_) \ + _(type) \ + _(next) \ + _(brightness) \ + _(contrast) \ + _(saturation) \ + +/// Calls your macro with the name of each member of XrEventDataPassthroughStateChangedFB, in order. +#define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrRenderModelPathInfoFB, in order. +#define XR_LIST_STRUCT_XrRenderModelPathInfoFB(_) \ + _(type) \ + _(next) \ + _(path) \ + +/// Calls your macro with the name of each member of XrRenderModelPropertiesFB, in order. +#define XR_LIST_STRUCT_XrRenderModelPropertiesFB(_) \ + _(type) \ + _(next) \ + _(vendorId) \ + _(modelName) \ + _(modelKey) \ + _(modelVersion) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrRenderModelBufferFB, in order. +#define XR_LIST_STRUCT_XrRenderModelBufferFB(_) \ + _(type) \ + _(next) \ + _(bufferCapacityInput) \ + _(bufferCountOutput) \ + _(buffer) \ + +/// Calls your macro with the name of each member of XrRenderModelLoadInfoFB, in order. +#define XR_LIST_STRUCT_XrRenderModelLoadInfoFB(_) \ + _(type) \ + _(next) \ + _(modelKey) \ + +/// Calls your macro with the name of each member of XrSystemRenderModelPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemRenderModelPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsRenderModelLoading) \ + +/// Calls your macro with the name of each member of XrRenderModelCapabilitiesRequestFB, in order. +#define XR_LIST_STRUCT_XrRenderModelCapabilitiesRequestFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrViewLocateFoveatedRenderingVARJO, in order. +#define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \ + _(type) \ + _(next) \ + _(foveatedRenderingActive) \ + +/// Calls your macro with the name of each member of XrFoveatedViewConfigurationViewVARJO, in order. +#define XR_LIST_STRUCT_XrFoveatedViewConfigurationViewVARJO(_) \ + _(type) \ + _(next) \ + _(foveatedRenderingActive) \ + +/// Calls your macro with the name of each member of XrSystemFoveatedRenderingPropertiesVARJO, in order. +#define XR_LIST_STRUCT_XrSystemFoveatedRenderingPropertiesVARJO(_) \ + _(type) \ + _(next) \ + _(supportsFoveatedRendering) \ + +/// Calls your macro with the name of each member of XrCompositionLayerDepthTestVARJO, in order. +#define XR_LIST_STRUCT_XrCompositionLayerDepthTestVARJO(_) \ + _(type) \ + _(next) \ + _(depthTestRangeNearZ) \ + _(depthTestRangeFarZ) \ + +/// Calls your macro with the name of each member of XrSystemMarkerTrackingPropertiesVARJO, in order. +#define XR_LIST_STRUCT_XrSystemMarkerTrackingPropertiesVARJO(_) \ + _(type) \ + _(next) \ + _(supportsMarkerTracking) \ + +/// Calls your macro with the name of each member of XrEventDataMarkerTrackingUpdateVARJO, in order. +#define XR_LIST_STRUCT_XrEventDataMarkerTrackingUpdateVARJO(_) \ + _(type) \ + _(next) \ + _(markerId) \ + _(isActive) \ + _(isPredicted) \ + _(time) \ + +/// Calls your macro with the name of each member of XrMarkerSpaceCreateInfoVARJO, in order. +#define XR_LIST_STRUCT_XrMarkerSpaceCreateInfoVARJO(_) \ + _(type) \ + _(next) \ + _(markerId) \ + _(poseInMarkerSpace) \ + +/// Calls your macro with the name of each member of XrFrameEndInfoML, in order. +#define XR_LIST_STRUCT_XrFrameEndInfoML(_) \ + _(type) \ + _(next) \ + _(focusDistance) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrGlobalDimmerFrameEndInfoML, in order. +#define XR_LIST_STRUCT_XrGlobalDimmerFrameEndInfoML(_) \ + _(type) \ + _(next) \ + _(dimmerValue) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrCoordinateSpaceCreateInfoML, in order. +#define XR_LIST_STRUCT_XrCoordinateSpaceCreateInfoML(_) \ + _(type) \ + _(next) \ + _(cfuid) \ + _(poseInCoordinateSpace) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorPersistenceNameMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceNameMSFT(_) \ + _(name) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorPersistenceInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceInfoMSFT(_) \ + _(type) \ + _(next) \ + _(spatialAnchorPersistenceName) \ + _(spatialAnchor) \ + +/// Calls your macro with the name of each member of XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, in order. +#define XR_LIST_STRUCT_XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(spatialAnchorStore) \ + _(spatialAnchorPersistenceName) \ + +/// Calls your macro with the name of each member of XrSpaceQueryInfoBaseHeaderFB, in order. +#define XR_LIST_STRUCT_XrSpaceQueryInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSpaceFilterInfoBaseHeaderFB, in order. +#define XR_LIST_STRUCT_XrSpaceFilterInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrSpaceQueryInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceQueryInfoFB(_) \ + _(type) \ + _(next) \ + _(queryAction) \ + _(maxResultCount) \ + _(timeout) \ + _(filter) \ + _(excludeFilter) \ + +/// Calls your macro with the name of each member of XrSpaceStorageLocationFilterInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceStorageLocationFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(location) \ + +/// Calls your macro with the name of each member of XrSpaceUuidFilterInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceUuidFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(uuidCount) \ + _(uuids) \ + +/// Calls your macro with the name of each member of XrSpaceComponentFilterInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceComponentFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + +/// Calls your macro with the name of each member of XrSpaceQueryResultFB, in order. +#define XR_LIST_STRUCT_XrSpaceQueryResultFB(_) \ + _(space) \ + _(uuid) \ + +/// Calls your macro with the name of each member of XrSpaceQueryResultsFB, in order. +#define XR_LIST_STRUCT_XrSpaceQueryResultsFB(_) \ + _(type) \ + _(next) \ + _(resultCapacityInput) \ + _(resultCountOutput) \ + _(results) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceQueryResultsAvailableFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceQueryResultsAvailableFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceQueryCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceQueryCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +/// Calls your macro with the name of each member of XrSpaceSaveInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceSaveInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + _(persistenceMode) \ + +/// Calls your macro with the name of each member of XrSpaceEraseInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceEraseInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceSaveCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceSaveCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceEraseCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceEraseCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + +/// Calls your macro with the name of each member of XrSwapchainImageFoveationVulkanFB, in order. +#define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \ + _(type) \ + _(next) \ + _(image) \ + _(width) \ + _(height) \ + +/// Calls your macro with the name of each member of XrSwapchainStateAndroidSurfaceDimensionsFB, in order. +#define XR_LIST_STRUCT_XrSwapchainStateAndroidSurfaceDimensionsFB(_) \ + _(type) \ + _(next) \ + _(width) \ + _(height) \ + +/// Calls your macro with the name of each member of XrSwapchainStateSamplerOpenGLESFB, in order. +#define XR_LIST_STRUCT_XrSwapchainStateSamplerOpenGLESFB(_) \ + _(type) \ + _(next) \ + _(minFilter) \ + _(magFilter) \ + _(wrapModeS) \ + _(wrapModeT) \ + _(swizzleRed) \ + _(swizzleGreen) \ + _(swizzleBlue) \ + _(swizzleAlpha) \ + _(maxAnisotropy) \ + _(borderColor) \ + +/// Calls your macro with the name of each member of XrSwapchainStateSamplerVulkanFB, in order. +#define XR_LIST_STRUCT_XrSwapchainStateSamplerVulkanFB(_) \ + _(type) \ + _(next) \ + _(minFilter) \ + _(magFilter) \ + _(mipmapMode) \ + _(wrapModeS) \ + _(wrapModeT) \ + _(swizzleRed) \ + _(swizzleGreen) \ + _(swizzleBlue) \ + _(swizzleAlpha) \ + _(maxAnisotropy) \ + _(borderColor) \ + +/// Calls your macro with the name of each member of XrSpaceShareInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceShareInfoFB(_) \ + _(type) \ + _(next) \ + _(spaceCount) \ + _(spaces) \ + _(userCount) \ + _(users) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceShareCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceShareCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +/// Calls your macro with the name of each member of XrCompositionLayerSpaceWarpInfoFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerSpaceWarpInfoFB(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(motionVectorSubImage) \ + _(appSpaceDeltaPose) \ + _(depthSubImage) \ + _(minDepth) \ + _(maxDepth) \ + _(nearZ) \ + _(farZ) \ + +/// Calls your macro with the name of each member of XrSystemSpaceWarpPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemSpaceWarpPropertiesFB(_) \ + _(type) \ + _(next) \ + _(recommendedMotionVectorImageRectWidth) \ + _(recommendedMotionVectorImageRectHeight) \ + +/// Calls your macro with the name of each member of XrHapticAmplitudeEnvelopeVibrationFB, in order. +#define XR_LIST_STRUCT_XrHapticAmplitudeEnvelopeVibrationFB(_) \ + _(type) \ + _(next) \ + _(duration) \ + _(amplitudeCount) \ + _(amplitudes) \ + +/// Calls your macro with the name of each member of XrExtent3DfFB, in order. +#define XR_LIST_STRUCT_XrExtent3DfFB(_) \ + _(width) \ + _(height) \ + _(depth) \ + +/// Calls your macro with the name of each member of XrOffset3DfFB, in order. +#define XR_LIST_STRUCT_XrOffset3DfFB(_) \ + _(x) \ + _(y) \ + _(z) \ + +/// Calls your macro with the name of each member of XrRect3DfFB, in order. +#define XR_LIST_STRUCT_XrRect3DfFB(_) \ + _(offset) \ + _(extent) \ + +/// Calls your macro with the name of each member of XrSemanticLabelsFB, in order. +#define XR_LIST_STRUCT_XrSemanticLabelsFB(_) \ + _(type) \ + _(next) \ + _(bufferCapacityInput) \ + _(bufferCountOutput) \ + _(buffer) \ + +/// Calls your macro with the name of each member of XrRoomLayoutFB, in order. +#define XR_LIST_STRUCT_XrRoomLayoutFB(_) \ + _(type) \ + _(next) \ + _(floorUuid) \ + _(ceilingUuid) \ + _(wallUuidCapacityInput) \ + _(wallUuidCountOutput) \ + _(wallUuids) \ + +/// Calls your macro with the name of each member of XrBoundary2DFB, in order. +#define XR_LIST_STRUCT_XrBoundary2DFB(_) \ + _(type) \ + _(next) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + +/// Calls your macro with the name of each member of XrDigitalLensControlALMALENCE, in order. +#define XR_LIST_STRUCT_XrDigitalLensControlALMALENCE(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrEventDataSceneCaptureCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSceneCaptureCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +/// Calls your macro with the name of each member of XrSceneCaptureRequestInfoFB, in order. +#define XR_LIST_STRUCT_XrSceneCaptureRequestInfoFB(_) \ + _(type) \ + _(next) \ + _(requestByteCount) \ + _(request) \ + +/// Calls your macro with the name of each member of XrSpaceContainerFB, in order. +#define XR_LIST_STRUCT_XrSpaceContainerFB(_) \ + _(type) \ + _(next) \ + _(uuidCapacityInput) \ + _(uuidCountOutput) \ + _(uuids) \ + +/// Calls your macro with the name of each member of XrFoveationEyeTrackedProfileCreateInfoMETA, in order. +#define XR_LIST_STRUCT_XrFoveationEyeTrackedProfileCreateInfoMETA(_) \ + _(type) \ + _(next) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrFoveationEyeTrackedStateMETA, in order. +#define XR_LIST_STRUCT_XrFoveationEyeTrackedStateMETA(_) \ + _(type) \ + _(next) \ + _(foveationCenter) \ + _(flags) \ + +/// Calls your macro with the name of each member of XrSystemFoveationEyeTrackedPropertiesMETA, in order. +#define XR_LIST_STRUCT_XrSystemFoveationEyeTrackedPropertiesMETA(_) \ + _(type) \ + _(next) \ + _(supportsFoveationEyeTracked) \ + +/// Calls your macro with the name of each member of XrSystemFaceTrackingPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemFaceTrackingPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsFaceTracking) \ + +/// Calls your macro with the name of each member of XrFaceTrackerCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrFaceTrackerCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(faceExpressionSet) \ + +/// Calls your macro with the name of each member of XrFaceExpressionInfoFB, in order. +#define XR_LIST_STRUCT_XrFaceExpressionInfoFB(_) \ + _(type) \ + _(next) \ + _(time) \ + +/// Calls your macro with the name of each member of XrFaceExpressionStatusFB, in order. +#define XR_LIST_STRUCT_XrFaceExpressionStatusFB(_) \ + _(isValid) \ + _(isEyeFollowingBlendshapesValid) \ + +/// Calls your macro with the name of each member of XrFaceExpressionWeightsFB, in order. +#define XR_LIST_STRUCT_XrFaceExpressionWeightsFB(_) \ + _(type) \ + _(next) \ + _(weightCount) \ + _(weights) \ + _(confidenceCount) \ + _(confidences) \ + _(status) \ + _(time) \ + +/// Calls your macro with the name of each member of XrEyeGazeFB, in order. +#define XR_LIST_STRUCT_XrEyeGazeFB(_) \ + _(isValid) \ + _(gazePose) \ + _(gazeConfidence) \ + +/// Calls your macro with the name of each member of XrEyeTrackerCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrEyeTrackerCreateInfoFB(_) \ + _(type) \ + _(next) \ + +/// Calls your macro with the name of each member of XrEyeGazesInfoFB, in order. +#define XR_LIST_STRUCT_XrEyeGazesInfoFB(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + +/// Calls your macro with the name of each member of XrSystemEyeTrackingPropertiesFB, in order. +#define XR_LIST_STRUCT_XrSystemEyeTrackingPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsEyeTracking) \ + +/// Calls your macro with the name of each member of XrEyeGazesFB, in order. +#define XR_LIST_STRUCT_XrEyeGazesFB(_) \ + _(type) \ + _(next) \ + _(gaze) \ + _(time) \ + +/// Calls your macro with the name of each member of XrPassthroughKeyboardHandsIntensityFB, in order. +#define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \ + _(type) \ + _(next) \ + _(leftHandIntensity) \ + _(rightHandIntensity) \ + +/// Calls your macro with the name of each member of XrCompositionLayerSettingsFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerSettingsFB(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + +/// Calls your macro with the name of each member of XrHapticPcmVibrationFB, in order. +#define XR_LIST_STRUCT_XrHapticPcmVibrationFB(_) \ + _(type) \ + _(next) \ + _(bufferSize) \ + _(buffer) \ + _(sampleRate) \ + _(append) \ + _(samplesConsumed) \ + +/// Calls your macro with the name of each member of XrDevicePcmSampleRateStateFB, in order. +#define XR_LIST_STRUCT_XrDevicePcmSampleRateStateFB(_) \ + _(type) \ + _(next) \ + _(sampleRate) \ + +/// Calls your macro with the name of each member of XrCompositionLayerDepthTestFB, in order. +#define XR_LIST_STRUCT_XrCompositionLayerDepthTestFB(_) \ + _(type) \ + _(next) \ + _(depthMask) \ + _(compareOp) \ + +/// Calls your macro with the name of each member of XrLocalDimmingFrameEndInfoMETA, in order. +#define XR_LIST_STRUCT_XrLocalDimmingFrameEndInfoMETA(_) \ + _(type) \ + _(next) \ + _(localDimmingMode) \ + +/// Calls your macro with the name of each member of XrExternalCameraIntrinsicsOCULUS, in order. +#define XR_LIST_STRUCT_XrExternalCameraIntrinsicsOCULUS(_) \ + _(lastChangeTime) \ + _(fov) \ + _(virtualNearPlaneDistance) \ + _(virtualFarPlaneDistance) \ + _(imageSensorPixelResolution) \ + +/// Calls your macro with the name of each member of XrExternalCameraExtrinsicsOCULUS, in order. +#define XR_LIST_STRUCT_XrExternalCameraExtrinsicsOCULUS(_) \ + _(lastChangeTime) \ + _(cameraStatusFlags) \ + _(attachedToDevice) \ + _(relativePose) \ + +/// Calls your macro with the name of each member of XrExternalCameraOCULUS, in order. +#define XR_LIST_STRUCT_XrExternalCameraOCULUS(_) \ + _(type) \ + _(next) \ + _(name) \ + _(intrinsics) \ + _(extrinsics) \ + +/// Calls your macro with the name of each member of XrVulkanSwapchainCreateInfoMETA, in order. +#define XR_LIST_STRUCT_XrVulkanSwapchainCreateInfoMETA(_) \ + _(type) \ + _(next) \ + _(additionalCreateFlags) \ + _(additionalUsageFlags) \ + +/// Calls your macro with the name of each member of XrPerformanceMetricsStateMETA, in order. +#define XR_LIST_STRUCT_XrPerformanceMetricsStateMETA(_) \ + _(type) \ + _(next) \ + _(enabled) \ + +/// Calls your macro with the name of each member of XrPerformanceMetricsCounterMETA, in order. +#define XR_LIST_STRUCT_XrPerformanceMetricsCounterMETA(_) \ + _(type) \ + _(next) \ + _(counterFlags) \ + _(counterUnit) \ + _(uintValue) \ + _(floatValue) \ + +/// Calls your macro with the name of each member of XrSpaceListSaveInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceListSaveInfoFB(_) \ + _(type) \ + _(next) \ + _(spaceCount) \ + _(spaces) \ + _(location) \ + +/// Calls your macro with the name of each member of XrEventDataSpaceListSaveCompleteFB, in order. +#define XR_LIST_STRUCT_XrEventDataSpaceListSaveCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +/// Calls your macro with the name of each member of XrSpaceUserCreateInfoFB, in order. +#define XR_LIST_STRUCT_XrSpaceUserCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(userId) \ + +/// Calls your macro with the name of each member of XrSystemHeadsetIdPropertiesMETA, in order. +#define XR_LIST_STRUCT_XrSystemHeadsetIdPropertiesMETA(_) \ + _(type) \ + _(next) \ + _(id) \ + +/// Calls your macro with the name of each member of XrPassthroughCreateInfoHTC, in order. +#define XR_LIST_STRUCT_XrPassthroughCreateInfoHTC(_) \ + _(type) \ + _(next) \ + _(form) \ + +/// Calls your macro with the name of each member of XrPassthroughColorHTC, in order. +#define XR_LIST_STRUCT_XrPassthroughColorHTC(_) \ + _(type) \ + _(next) \ + _(alpha) \ + +/// Calls your macro with the name of each member of XrPassthroughMeshTransformInfoHTC, in order. +#define XR_LIST_STRUCT_XrPassthroughMeshTransformInfoHTC(_) \ + _(type) \ + _(next) \ + _(vertexCount) \ + _(vertices) \ + _(indexCount) \ + _(indices) \ + _(baseSpace) \ + _(time) \ + _(pose) \ + _(scale) \ + +/// Calls your macro with the name of each member of XrCompositionLayerPassthroughHTC, in order. +#define XR_LIST_STRUCT_XrCompositionLayerPassthroughHTC(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(space) \ + _(passthrough) \ + _(color) \ + +/// Calls your macro with the name of each member of XrFoveationApplyInfoHTC, in order. +#define XR_LIST_STRUCT_XrFoveationApplyInfoHTC(_) \ + _(type) \ + _(next) \ + _(mode) \ + _(subImageCount) \ + _(subImages) \ + +/// Calls your macro with the name of each member of XrFoveationConfigurationHTC, in order. +#define XR_LIST_STRUCT_XrFoveationConfigurationHTC(_) \ + _(level) \ + _(clearFovDegree) \ + _(focalCenterOffset) \ + +/// Calls your macro with the name of each member of XrFoveationDynamicModeInfoHTC, in order. +#define XR_LIST_STRUCT_XrFoveationDynamicModeInfoHTC(_) \ + _(type) \ + _(next) \ + _(dynamicFlags) \ + +/// Calls your macro with the name of each member of XrFoveationCustomModeInfoHTC, in order. +#define XR_LIST_STRUCT_XrFoveationCustomModeInfoHTC(_) \ + _(type) \ + _(next) \ + _(configCount) \ + _(configs) \ + +/// Calls your macro with the name of each member of XrActiveActionSetPriorityEXT, in order. +#define XR_LIST_STRUCT_XrActiveActionSetPriorityEXT(_) \ + _(actionSet) \ + _(priorityOverride) \ + +/// Calls your macro with the name of each member of XrActiveActionSetPrioritiesEXT, in order. +#define XR_LIST_STRUCT_XrActiveActionSetPrioritiesEXT(_) \ + _(type) \ + _(next) \ + _(actionSetPriorityCount) \ + _(actionSetPriorities) \ + +/// Calls your macro with the name of each member of XrSystemForceFeedbackCurlPropertiesMNDX, in order. +#define XR_LIST_STRUCT_XrSystemForceFeedbackCurlPropertiesMNDX(_) \ + _(type) \ + _(next) \ + _(supportsForceFeedbackCurl) \ + +/// Calls your macro with the name of each member of XrForceFeedbackCurlApplyLocationMNDX, in order. +#define XR_LIST_STRUCT_XrForceFeedbackCurlApplyLocationMNDX(_) \ + _(location) \ + _(value) \ + +/// Calls your macro with the name of each member of XrForceFeedbackCurlApplyLocationsMNDX, in order. +#define XR_LIST_STRUCT_XrForceFeedbackCurlApplyLocationsMNDX(_) \ + _(type) \ + _(next) \ + _(locationCount) \ + _(locations) \ + + + +/// Calls your macro with the structure type name and the XrStructureType constant for +/// each known/available structure type, excluding those unavailable due to preprocessor definitions. +#define XR_LIST_STRUCTURE_TYPES(_) \ + XR_LIST_STRUCTURE_TYPES_CORE(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \ + + +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() - structure types available without any preprocessor definitions +#define XR_LIST_STRUCTURE_TYPES_CORE(_) \ + _(XrApiLayerProperties, XR_TYPE_API_LAYER_PROPERTIES) \ + _(XrExtensionProperties, XR_TYPE_EXTENSION_PROPERTIES) \ + _(XrInstanceCreateInfo, XR_TYPE_INSTANCE_CREATE_INFO) \ + _(XrInstanceProperties, XR_TYPE_INSTANCE_PROPERTIES) \ + _(XrEventDataBuffer, XR_TYPE_EVENT_DATA_BUFFER) \ + _(XrSystemGetInfo, XR_TYPE_SYSTEM_GET_INFO) \ + _(XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES) \ + _(XrSessionCreateInfo, XR_TYPE_SESSION_CREATE_INFO) \ + _(XrSpaceVelocity, XR_TYPE_SPACE_VELOCITY) \ + _(XrReferenceSpaceCreateInfo, XR_TYPE_REFERENCE_SPACE_CREATE_INFO) \ + _(XrActionSpaceCreateInfo, XR_TYPE_ACTION_SPACE_CREATE_INFO) \ + _(XrSpaceLocation, XR_TYPE_SPACE_LOCATION) \ + _(XrViewConfigurationProperties, XR_TYPE_VIEW_CONFIGURATION_PROPERTIES) \ + _(XrViewConfigurationView, XR_TYPE_VIEW_CONFIGURATION_VIEW) \ + _(XrSwapchainCreateInfo, XR_TYPE_SWAPCHAIN_CREATE_INFO) \ + _(XrSwapchainImageAcquireInfo, XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO) \ + _(XrSwapchainImageWaitInfo, XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO) \ + _(XrSwapchainImageReleaseInfo, XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO) \ + _(XrSessionBeginInfo, XR_TYPE_SESSION_BEGIN_INFO) \ + _(XrFrameWaitInfo, XR_TYPE_FRAME_WAIT_INFO) \ + _(XrFrameState, XR_TYPE_FRAME_STATE) \ + _(XrFrameBeginInfo, XR_TYPE_FRAME_BEGIN_INFO) \ + _(XrFrameEndInfo, XR_TYPE_FRAME_END_INFO) \ + _(XrViewLocateInfo, XR_TYPE_VIEW_LOCATE_INFO) \ + _(XrViewState, XR_TYPE_VIEW_STATE) \ + _(XrView, XR_TYPE_VIEW) \ + _(XrActionSetCreateInfo, XR_TYPE_ACTION_SET_CREATE_INFO) \ + _(XrActionCreateInfo, XR_TYPE_ACTION_CREATE_INFO) \ + _(XrInteractionProfileSuggestedBinding, XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING) \ + _(XrSessionActionSetsAttachInfo, XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO) \ + _(XrInteractionProfileState, XR_TYPE_INTERACTION_PROFILE_STATE) \ + _(XrActionStateGetInfo, XR_TYPE_ACTION_STATE_GET_INFO) \ + _(XrActionStateBoolean, XR_TYPE_ACTION_STATE_BOOLEAN) \ + _(XrActionStateFloat, XR_TYPE_ACTION_STATE_FLOAT) \ + _(XrActionStateVector2f, XR_TYPE_ACTION_STATE_VECTOR2F) \ + _(XrActionStatePose, XR_TYPE_ACTION_STATE_POSE) \ + _(XrActionsSyncInfo, XR_TYPE_ACTIONS_SYNC_INFO) \ + _(XrBoundSourcesForActionEnumerateInfo, XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO) \ + _(XrInputSourceLocalizedNameGetInfo, XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO) \ + _(XrHapticActionInfo, XR_TYPE_HAPTIC_ACTION_INFO) \ + _(XrCompositionLayerProjectionView, XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW) \ + _(XrCompositionLayerProjection, XR_TYPE_COMPOSITION_LAYER_PROJECTION) \ + _(XrCompositionLayerQuad, XR_TYPE_COMPOSITION_LAYER_QUAD) \ + _(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST) \ + _(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) \ + _(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) \ + _(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \ + _(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \ + _(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \ + _(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \ + _(XrCompositionLayerDepthInfoKHR, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) \ + _(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \ + _(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \ + _(XrVisibilityMaskKHR, XR_TYPE_VISIBILITY_MASK_KHR) \ + _(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) \ + _(XrCompositionLayerColorScaleBiasKHR, XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR) \ + _(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \ + _(XrBindingModificationsKHR, XR_TYPE_BINDING_MODIFICATIONS_KHR) \ + _(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) \ + _(XrDebugUtilsObjectNameInfoEXT, XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT) \ + _(XrDebugUtilsLabelEXT, XR_TYPE_DEBUG_UTILS_LABEL_EXT) \ + _(XrDebugUtilsMessengerCallbackDataEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT) \ + _(XrDebugUtilsMessengerCreateInfoEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) \ + _(XrSystemEyeGazeInteractionPropertiesEXT, XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT) \ + _(XrEyeGazeSampleTimeEXT, XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT) \ + _(XrSessionCreateInfoOverlayEXTX, XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX) \ + _(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \ + _(XrSpatialAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) \ + _(XrSpatialAnchorSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) \ + _(XrCompositionLayerImageLayoutFB, XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) \ + _(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \ + _(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \ + _(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \ + _(XrSpatialGraphStaticNodeBindingCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) \ + _(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \ + _(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \ + _(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \ + _(XrHandJointLocationsEXT, XR_TYPE_HAND_JOINT_LOCATIONS_EXT) \ + _(XrHandJointVelocitiesEXT, XR_TYPE_HAND_JOINT_VELOCITIES_EXT) \ + _(XrSystemHandTrackingMeshPropertiesMSFT, XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT) \ + _(XrHandMeshSpaceCreateInfoMSFT, XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT) \ + _(XrHandMeshUpdateInfoMSFT, XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT) \ + _(XrHandMeshMSFT, XR_TYPE_HAND_MESH_MSFT) \ + _(XrHandPoseTypeInfoMSFT, XR_TYPE_HAND_POSE_TYPE_INFO_MSFT) \ + _(XrSecondaryViewConfigurationSessionBeginInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT) \ + _(XrSecondaryViewConfigurationStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT) \ + _(XrSecondaryViewConfigurationFrameStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT) \ + _(XrSecondaryViewConfigurationLayerInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT) \ + _(XrSecondaryViewConfigurationFrameEndInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT) \ + _(XrSecondaryViewConfigurationSwapchainCreateInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT) \ + _(XrControllerModelKeyStateMSFT, XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT) \ + _(XrControllerModelNodePropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT) \ + _(XrControllerModelPropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT) \ + _(XrControllerModelNodeStateMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) \ + _(XrControllerModelStateMSFT, XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) \ + _(XrViewConfigurationViewFovEPIC, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) \ + _(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \ + _(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \ + _(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \ + _(XrSystemBodyTrackingPropertiesFB, XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB) \ + _(XrBodyTrackerCreateInfoFB, XR_TYPE_BODY_TRACKER_CREATE_INFO_FB) \ + _(XrBodySkeletonFB, XR_TYPE_BODY_SKELETON_FB) \ + _(XrBodyJointsLocateInfoFB, XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB) \ + _(XrBodyJointLocationsFB, XR_TYPE_BODY_JOINT_LOCATIONS_FB) \ + _(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \ + _(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \ + _(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \ + _(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \ + _(XrSceneCreateInfoMSFT, XR_TYPE_SCENE_CREATE_INFO_MSFT) \ + _(XrNewSceneComputeInfoMSFT, XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) \ + _(XrVisualMeshComputeLodInfoMSFT, XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) \ + _(XrSceneComponentsMSFT, XR_TYPE_SCENE_COMPONENTS_MSFT) \ + _(XrSceneComponentsGetInfoMSFT, XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) \ + _(XrSceneComponentLocationsMSFT, XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) \ + _(XrSceneComponentsLocateInfoMSFT, XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) \ + _(XrSceneObjectsMSFT, XR_TYPE_SCENE_OBJECTS_MSFT) \ + _(XrSceneComponentParentFilterInfoMSFT, XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) \ + _(XrSceneObjectTypesFilterInfoMSFT, XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) \ + _(XrScenePlanesMSFT, XR_TYPE_SCENE_PLANES_MSFT) \ + _(XrScenePlaneAlignmentFilterInfoMSFT, XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) \ + _(XrSceneMeshesMSFT, XR_TYPE_SCENE_MESHES_MSFT) \ + _(XrSceneMeshBuffersGetInfoMSFT, XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) \ + _(XrSceneMeshBuffersMSFT, XR_TYPE_SCENE_MESH_BUFFERS_MSFT) \ + _(XrSceneMeshVertexBufferMSFT, XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) \ + _(XrSceneMeshIndicesUint32MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) \ + _(XrSceneMeshIndicesUint16MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) \ + _(XrSerializedSceneFragmentDataGetInfoMSFT, XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) \ + _(XrSceneDeserializeInfoMSFT, XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) \ + _(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \ + _(XrViveTrackerPathsHTCX, XR_TYPE_VIVE_TRACKER_PATHS_HTCX) \ + _(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \ + _(XrSystemFacialTrackingPropertiesHTC, XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) \ + _(XrFacialExpressionsHTC, XR_TYPE_FACIAL_EXPRESSIONS_HTC) \ + _(XrFacialTrackerCreateInfoHTC, XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) \ + _(XrSystemColorSpacePropertiesFB, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) \ + _(XrHandTrackingMeshFB, XR_TYPE_HAND_TRACKING_MESH_FB) \ + _(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \ + _(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \ + _(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \ + _(XrSystemSpatialEntityPropertiesFB, XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) \ + _(XrSpatialAnchorCreateInfoFB, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) \ + _(XrSpaceComponentStatusSetInfoFB, XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) \ + _(XrSpaceComponentStatusFB, XR_TYPE_SPACE_COMPONENT_STATUS_FB) \ + _(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \ + _(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \ + _(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \ + _(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \ + _(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \ + _(XrFoveationLevelProfileCreateInfoFB, XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) \ + _(XrSystemKeyboardTrackingPropertiesFB, XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) \ + _(XrKeyboardSpaceCreateInfoFB, XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) \ + _(XrKeyboardTrackingQueryFB, XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) \ + _(XrTriangleMeshCreateInfoFB, XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) \ + _(XrSystemPassthroughPropertiesFB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) \ + _(XrSystemPassthroughProperties2FB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB) \ + _(XrPassthroughCreateInfoFB, XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) \ + _(XrPassthroughLayerCreateInfoFB, XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) \ + _(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \ + _(XrGeometryInstanceCreateInfoFB, XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) \ + _(XrGeometryInstanceTransformFB, XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) \ + _(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \ + _(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \ + _(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \ + _(XrPassthroughBrightnessContrastSaturationFB, XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) \ + _(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \ + _(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \ + _(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \ + _(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \ + _(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \ + _(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \ + _(XrRenderModelCapabilitiesRequestFB, XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) \ + _(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \ + _(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \ + _(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \ + _(XrCompositionLayerDepthTestVARJO, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) \ + _(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \ + _(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \ + _(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \ + _(XrFrameEndInfoML, XR_TYPE_FRAME_END_INFO_ML) \ + _(XrGlobalDimmerFrameEndInfoML, XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML) \ + _(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \ + _(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \ + _(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \ + _(XrSpaceStorageLocationFilterInfoFB, XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) \ + _(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \ + _(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \ + _(XrSpaceQueryResultsFB, XR_TYPE_SPACE_QUERY_RESULTS_FB) \ + _(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \ + _(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \ + _(XrSpaceSaveInfoFB, XR_TYPE_SPACE_SAVE_INFO_FB) \ + _(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \ + _(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \ + _(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \ + _(XrSpaceShareInfoFB, XR_TYPE_SPACE_SHARE_INFO_FB) \ + _(XrEventDataSpaceShareCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) \ + _(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \ + _(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \ + _(XrHapticAmplitudeEnvelopeVibrationFB, XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) \ + _(XrSemanticLabelsFB, XR_TYPE_SEMANTIC_LABELS_FB) \ + _(XrRoomLayoutFB, XR_TYPE_ROOM_LAYOUT_FB) \ + _(XrBoundary2DFB, XR_TYPE_BOUNDARY_2D_FB) \ + _(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \ + _(XrEventDataSceneCaptureCompleteFB, XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB) \ + _(XrSceneCaptureRequestInfoFB, XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB) \ + _(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \ + _(XrFoveationEyeTrackedProfileCreateInfoMETA, XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META) \ + _(XrFoveationEyeTrackedStateMETA, XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META) \ + _(XrSystemFoveationEyeTrackedPropertiesMETA, XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META) \ + _(XrSystemFaceTrackingPropertiesFB, XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB) \ + _(XrFaceTrackerCreateInfoFB, XR_TYPE_FACE_TRACKER_CREATE_INFO_FB) \ + _(XrFaceExpressionInfoFB, XR_TYPE_FACE_EXPRESSION_INFO_FB) \ + _(XrFaceExpressionWeightsFB, XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB) \ + _(XrEyeTrackerCreateInfoFB, XR_TYPE_EYE_TRACKER_CREATE_INFO_FB) \ + _(XrEyeGazesInfoFB, XR_TYPE_EYE_GAZES_INFO_FB) \ + _(XrSystemEyeTrackingPropertiesFB, XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB) \ + _(XrEyeGazesFB, XR_TYPE_EYE_GAZES_FB) \ + _(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \ + _(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \ + _(XrHapticPcmVibrationFB, XR_TYPE_HAPTIC_PCM_VIBRATION_FB) \ + _(XrDevicePcmSampleRateStateFB, XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB) \ + _(XrCompositionLayerDepthTestFB, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB) \ + _(XrLocalDimmingFrameEndInfoMETA, XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META) \ + _(XrExternalCameraOCULUS, XR_TYPE_EXTERNAL_CAMERA_OCULUS) \ + _(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \ + _(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \ + _(XrSpaceListSaveInfoFB, XR_TYPE_SPACE_LIST_SAVE_INFO_FB) \ + _(XrEventDataSpaceListSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) \ + _(XrSpaceUserCreateInfoFB, XR_TYPE_SPACE_USER_CREATE_INFO_FB) \ + _(XrSystemHeadsetIdPropertiesMETA, XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META) \ + _(XrPassthroughCreateInfoHTC, XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC) \ + _(XrPassthroughColorHTC, XR_TYPE_PASSTHROUGH_COLOR_HTC) \ + _(XrPassthroughMeshTransformInfoHTC, XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC) \ + _(XrCompositionLayerPassthroughHTC, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) \ + _(XrFoveationApplyInfoHTC, XR_TYPE_FOVEATION_APPLY_INFO_HTC) \ + _(XrFoveationDynamicModeInfoHTC, XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC) \ + _(XrFoveationCustomModeInfoHTC, XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC) \ + _(XrActiveActionSetPrioritiesEXT, XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT) \ + _(XrSystemForceFeedbackCurlPropertiesMNDX, XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX) \ + _(XrForceFeedbackCurlApplyLocationsMNDX, XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX) \ + + +#if defined(XR_USE_GRAPHICS_API_D3D11) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_D3D11 is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \ + _(XrGraphicsBindingD3D11KHR, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) \ + _(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \ + _(XrGraphicsRequirementsD3D11KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_D3D12) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_D3D12 is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \ + _(XrGraphicsBindingD3D12KHR, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) \ + _(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \ + _(XrGraphicsRequirementsD3D12KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \ + _(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \ + _(XrGraphicsRequirementsOpenGLKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL and XR_USE_PLATFORM_WAYLAND are defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \ + _(XrGraphicsBindingOpenGLWaylandKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL and XR_USE_PLATFORM_WIN32 are defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \ + _(XrGraphicsBindingOpenGLWin32KHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL and XR_USE_PLATFORM_XCB are defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \ + _(XrGraphicsBindingOpenGLXcbKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL and XR_USE_PLATFORM_XLIB are defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \ + _(XrGraphicsBindingOpenGLXlibKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL_ES is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ + _(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ + _(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \ + _(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_OPENGL_ES and XR_USE_PLATFORM_ANDROID are defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \ + _(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) +#endif + +#if defined(XR_USE_GRAPHICS_API_VULKAN) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_GRAPHICS_API_VULKAN is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \ + _(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \ + _(XrGraphicsBindingVulkanKHR, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) \ + _(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \ + _(XrGraphicsRequirementsVulkanKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) \ + _(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \ + _(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \ + _(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \ + _(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \ + _(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + _(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) +#endif + +#if defined(XR_USE_PLATFORM_ANDROID) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_PLATFORM_ANDROID is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \ + _(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \ + _(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ + _(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \ + _(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) +#endif + +#if defined(XR_USE_PLATFORM_EGL) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_PLATFORM_EGL is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \ + _(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) +#endif + +#if defined(XR_USE_PLATFORM_ML) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_PLATFORM_ML is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_) \ + _(XrCoordinateSpaceCreateInfoML, XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_) +#endif + +#if defined(XR_USE_PLATFORM_WIN32) +/// Implementation detail of XR_LIST_STRUCTURE_TYPES() +/// Structure types available only when XR_USE_PLATFORM_WIN32 is defined +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \ + _(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \ + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) +#endif + + + +/// Calls your macro with the name and extension number of all known +/// extensions in this version of the spec. +#define XR_LIST_EXTENSIONS(_) \ + _(XR_KHR_android_thread_settings, 4) \ + _(XR_KHR_android_surface_swapchain, 5) \ + _(XR_KHR_composition_layer_cube, 7) \ + _(XR_KHR_android_create_instance, 9) \ + _(XR_KHR_composition_layer_depth, 11) \ + _(XR_KHR_vulkan_swapchain_format_list, 15) \ + _(XR_EXT_performance_settings, 16) \ + _(XR_EXT_thermal_query, 17) \ + _(XR_KHR_composition_layer_cylinder, 18) \ + _(XR_KHR_composition_layer_equirect, 19) \ + _(XR_EXT_debug_utils, 20) \ + _(XR_KHR_opengl_enable, 24) \ + _(XR_KHR_opengl_es_enable, 25) \ + _(XR_KHR_vulkan_enable, 26) \ + _(XR_KHR_D3D11_enable, 28) \ + _(XR_KHR_D3D12_enable, 29) \ + _(XR_EXT_eye_gaze_interaction, 31) \ + _(XR_KHR_visibility_mask, 32) \ + _(XR_EXTX_overlay, 34) \ + _(XR_KHR_composition_layer_color_scale_bias, 35) \ + _(XR_KHR_win32_convert_performance_counter_time, 36) \ + _(XR_KHR_convert_timespec_time, 37) \ + _(XR_VARJO_quad_views, 38) \ + _(XR_MSFT_unbounded_reference_space, 39) \ + _(XR_MSFT_spatial_anchor, 40) \ + _(XR_FB_composition_layer_image_layout, 41) \ + _(XR_FB_composition_layer_alpha_blend, 42) \ + _(XR_MND_headless, 43) \ + _(XR_OCULUS_android_session_state_enable, 45) \ + _(XR_EXT_view_configuration_depth_range, 47) \ + _(XR_EXT_conformance_automation, 48) \ + _(XR_MNDX_egl_enable, 49) \ + _(XR_MSFT_spatial_graph_bridge, 50) \ + _(XR_MSFT_hand_interaction, 51) \ + _(XR_EXT_hand_tracking, 52) \ + _(XR_MSFT_hand_tracking_mesh, 53) \ + _(XR_MSFT_secondary_view_configuration, 54) \ + _(XR_MSFT_first_person_observer, 55) \ + _(XR_MSFT_controller_model, 56) \ + _(XR_MSFT_perception_anchor_interop, 57) \ + _(XR_EXT_win32_appcontainer_compatible, 58) \ + _(XR_EPIC_view_configuration_fov, 60) \ + _(XR_MSFT_holographic_window_attachment, 64) \ + _(XR_MSFT_composition_layer_reprojection, 67) \ + _(XR_HUAWEI_controller_interaction, 70) \ + _(XR_FB_android_surface_swapchain_create, 71) \ + _(XR_FB_swapchain_update_state, 72) \ + _(XR_FB_composition_layer_secure_content, 73) \ + _(XR_FB_body_tracking, 77) \ + _(XR_EXT_dpad_binding, 79) \ + _(XR_VALVE_analog_threshold, 80) \ + _(XR_EXT_hand_joints_motion_range, 81) \ + _(XR_KHR_loader_init, 89) \ + _(XR_KHR_loader_init_android, 90) \ + _(XR_KHR_vulkan_enable2, 91) \ + _(XR_KHR_composition_layer_equirect2, 92) \ + _(XR_EXT_samsung_odyssey_controller, 95) \ + _(XR_EXT_hp_mixed_reality_controller, 96) \ + _(XR_MND_swapchain_usage_input_attachment_bit, 97) \ + _(XR_MSFT_scene_understanding, 98) \ + _(XR_MSFT_scene_understanding_serialization, 99) \ + _(XR_FB_display_refresh_rate, 102) \ + _(XR_HTC_vive_cosmos_controller_interaction, 103) \ + _(XR_HTCX_vive_tracker_interaction, 104) \ + _(XR_HTC_facial_tracking, 105) \ + _(XR_HTC_vive_focus3_controller_interaction, 106) \ + _(XR_HTC_hand_interaction, 107) \ + _(XR_HTC_vive_wrist_tracker_interaction, 108) \ + _(XR_FB_color_space, 109) \ + _(XR_FB_hand_tracking_mesh, 111) \ + _(XR_FB_hand_tracking_aim, 112) \ + _(XR_FB_hand_tracking_capsules, 113) \ + _(XR_FB_spatial_entity, 114) \ + _(XR_FB_foveation, 115) \ + _(XR_FB_foveation_configuration, 116) \ + _(XR_FB_keyboard_tracking, 117) \ + _(XR_FB_triangle_mesh, 118) \ + _(XR_FB_passthrough, 119) \ + _(XR_FB_render_model, 120) \ + _(XR_KHR_binding_modification, 121) \ + _(XR_VARJO_foveated_rendering, 122) \ + _(XR_VARJO_composition_layer_depth_test, 123) \ + _(XR_VARJO_environment_depth_estimation, 124) \ + _(XR_VARJO_marker_tracking, 125) \ + _(XR_VARJO_view_offset, 126) \ + _(XR_ML_ml2_controller_interaction, 135) \ + _(XR_ML_frame_end_info, 136) \ + _(XR_ML_global_dimmer, 137) \ + _(XR_ML_compat, 138) \ + _(XR_MSFT_spatial_anchor_persistence, 143) \ + _(XR_ULTRALEAP_hand_tracking_forearm, 150) \ + _(XR_FB_spatial_entity_query, 157) \ + _(XR_FB_spatial_entity_storage, 159) \ + _(XR_OCULUS_audio_device_guid, 160) \ + _(XR_FB_foveation_vulkan, 161) \ + _(XR_FB_swapchain_update_state_android_surface, 162) \ + _(XR_FB_swapchain_update_state_opengl_es, 163) \ + _(XR_FB_swapchain_update_state_vulkan, 164) \ + _(XR_KHR_swapchain_usage_input_attachment_bit, 166) \ + _(XR_FB_touch_controller_pro, 168) \ + _(XR_FB_spatial_entity_sharing, 170) \ + _(XR_FB_space_warp, 172) \ + _(XR_FB_haptic_amplitude_envelope, 174) \ + _(XR_FB_scene, 176) \ + _(XR_EXT_palm_pose, 177) \ + _(XR_ALMALENCE_digital_lens_control, 197) \ + _(XR_FB_scene_capture, 199) \ + _(XR_FB_spatial_entity_container, 200) \ + _(XR_META_foveation_eye_tracked, 201) \ + _(XR_FB_face_tracking, 202) \ + _(XR_FB_eye_tracking_social, 203) \ + _(XR_FB_passthrough_keyboard_hands, 204) \ + _(XR_FB_composition_layer_settings, 205) \ + _(XR_FB_touch_controller_proximity, 207) \ + _(XR_FB_haptic_pcm, 210) \ + _(XR_FB_composition_layer_depth_test, 213) \ + _(XR_META_local_dimming, 217) \ + _(XR_OCULUS_external_camera, 227) \ + _(XR_META_vulkan_swapchain_create_info, 228) \ + _(XR_META_performance_metrics, 233) \ + _(XR_FB_spatial_entity_storage_batch, 239) \ + _(XR_FB_spatial_entity_user, 242) \ + _(XR_META_headset_id, 246) \ + _(XR_EXT_uuid, 300) \ + _(XR_QCOM_tracking_optimization_settings, 307) \ + _(XR_HTC_passthrough, 318) \ + _(XR_HTC_foveation, 319) \ + _(XR_EXT_active_action_set_priority, 374) \ + _(XR_MNDX_force_feedback_curl, 376) \ + _(XR_BD_controller_interaction, 385) \ + _(XR_EXT_local_floor, 427) \ + + +#endif + diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_parent_structs.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_parent_structs.h new file mode 100644 index 000000000..d0d05e97d --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_parent_structs.h @@ -0,0 +1,265 @@ +#ifndef OPENXR_REFLECTION_PARENT_STRUCTS_H_ +#define OPENXR_REFLECTION_PARENT_STRUCTS_H_ 1 + +/* +** Copyright (c) 2017-2023, The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +/* +** This header is generated from the Khronos OpenXR XML API Registry. +** +*/ + +#include "openxr.h" + +/* +This file contains expansion macros (X Macros) for OpenXR structures that have a parent type. +*/ + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrCompositionLayerBaseHeader +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrCompositionLayerBaseHeader(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrCompositionLayerBaseHeader_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrCompositionLayerBaseHeader() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrCompositionLayerBaseHeader_CORE(_avail, _unavail) \ + _avail(XrCompositionLayerProjection, XR_TYPE_COMPOSITION_LAYER_PROJECTION) \ + _avail(XrCompositionLayerQuad, XR_TYPE_COMPOSITION_LAYER_QUAD) \ + _avail(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \ + _avail(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \ + _avail(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \ + _avail(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \ + _avail(XrCompositionLayerPassthroughHTC, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) \ + + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrEventDataBaseHeader +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrEventDataBaseHeader(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrEventDataBaseHeader_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrEventDataBaseHeader() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrEventDataBaseHeader_CORE(_avail, _unavail) \ + _avail(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST) \ + _avail(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) \ + _avail(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) \ + _avail(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \ + _avail(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \ + _avail(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) \ + _avail(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) \ + _avail(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \ + _avail(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \ + _avail(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \ + _avail(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \ + _avail(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \ + _avail(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \ + _avail(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \ + _avail(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \ + _avail(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \ + _avail(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \ + _avail(XrEventDataSpaceShareCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) \ + _avail(XrEventDataSpaceListSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) \ + + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrHapticBaseHeader +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader_CORE(_avail, _unavail) \ + _avail(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \ + _avail(XrHapticAmplitudeEnvelopeVibrationFB, XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) \ + _avail(XrHapticPcmVibrationFB, XR_TYPE_HAPTIC_PCM_VIBRATION_FB) \ + + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSwapchainImageBaseHeader +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_CORE(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_CORE(_avail, _unavail) \ + + +#if defined(XR_USE_GRAPHICS_API_D3D11) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _avail(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _unavail(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_D3D12) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _avail(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _unavail(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _avail(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _unavail(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _avail(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _unavail(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_VULKAN) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _avail(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainImageBaseHeader_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _unavail(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \ + +#endif + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrLoaderInitInfoBaseHeaderKHR +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR_CORE(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR_CORE(_avail, _unavail) \ + + +#if defined(XR_USE_PLATFORM_ANDROID) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _avail(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrLoaderInitInfoBaseHeaderKHR_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _unavail(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ + +#endif + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrBindingModificationBaseHeaderKHR +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrBindingModificationBaseHeaderKHR(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrBindingModificationBaseHeaderKHR_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrBindingModificationBaseHeaderKHR() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrBindingModificationBaseHeaderKHR_CORE(_avail, _unavail) \ + _avail(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \ + _avail(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \ + + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSwapchainStateBaseHeaderFB +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_CORE(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_CORE(_avail, _unavail) \ + _avail(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \ + + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _avail(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _unavail(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_VULKAN) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _avail(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _unavail(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + +#endif + +#if defined(XR_USE_PLATFORM_ANDROID) +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _avail(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ + +#else +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSwapchainStateBaseHeaderFB_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _unavail(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ + +#endif + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSpaceQueryInfoBaseHeaderFB +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB_CORE(_avail, _unavail) \ + _avail(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \ + + + + + +/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSpaceFilterInfoBaseHeaderFB +#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceFilterInfoBaseHeaderFB(_avail, _unavail) \ + _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceFilterInfoBaseHeaderFB_CORE(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceFilterInfoBaseHeaderFB() +#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceFilterInfoBaseHeaderFB_CORE(_avail, _unavail) \ + _avail(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \ + _avail(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \ + + + + + +#endif + diff --git a/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_structs.h b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_structs.h new file mode 100644 index 000000000..bc97cdc36 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/include/openxr/openxr_reflection_structs.h @@ -0,0 +1,471 @@ +#ifndef OPENXR_REFLECTION_STRUCTS_H_ +#define OPENXR_REFLECTION_STRUCTS_H_ 1 + +/* +** Copyright (c) 2017-2023, The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 OR MIT +*/ + +/* +** This header is generated from the Khronos OpenXR XML API Registry. +** +*/ + +#include "openxr.h" + +/* +This file contains expansion macros (X Macros) for OpenXR structures. +*/ + + + +/// Calls one of your macros with the structure type name and the XrStructureType constant for +/// each known structure type. The first macro (_avail) is called for those that are available, +/// while the second macro (_unavail) is called for those unavailable due to preprocessor definitions. +#define XR_LIST_ALL_STRUCTURE_TYPES(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_CORE(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \ + _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + + +// Implementation detail of XR_LIST_ALL_STRUCTURE_TYPES() +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_CORE(_avail, _unavail) \ + _avail(XrApiLayerProperties, XR_TYPE_API_LAYER_PROPERTIES) \ + _avail(XrExtensionProperties, XR_TYPE_EXTENSION_PROPERTIES) \ + _avail(XrInstanceCreateInfo, XR_TYPE_INSTANCE_CREATE_INFO) \ + _avail(XrInstanceProperties, XR_TYPE_INSTANCE_PROPERTIES) \ + _avail(XrEventDataBuffer, XR_TYPE_EVENT_DATA_BUFFER) \ + _avail(XrSystemGetInfo, XR_TYPE_SYSTEM_GET_INFO) \ + _avail(XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES) \ + _avail(XrSessionCreateInfo, XR_TYPE_SESSION_CREATE_INFO) \ + _avail(XrSpaceVelocity, XR_TYPE_SPACE_VELOCITY) \ + _avail(XrReferenceSpaceCreateInfo, XR_TYPE_REFERENCE_SPACE_CREATE_INFO) \ + _avail(XrActionSpaceCreateInfo, XR_TYPE_ACTION_SPACE_CREATE_INFO) \ + _avail(XrSpaceLocation, XR_TYPE_SPACE_LOCATION) \ + _avail(XrViewConfigurationProperties, XR_TYPE_VIEW_CONFIGURATION_PROPERTIES) \ + _avail(XrViewConfigurationView, XR_TYPE_VIEW_CONFIGURATION_VIEW) \ + _avail(XrSwapchainCreateInfo, XR_TYPE_SWAPCHAIN_CREATE_INFO) \ + _avail(XrSwapchainImageAcquireInfo, XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO) \ + _avail(XrSwapchainImageWaitInfo, XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO) \ + _avail(XrSwapchainImageReleaseInfo, XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO) \ + _avail(XrSessionBeginInfo, XR_TYPE_SESSION_BEGIN_INFO) \ + _avail(XrFrameWaitInfo, XR_TYPE_FRAME_WAIT_INFO) \ + _avail(XrFrameState, XR_TYPE_FRAME_STATE) \ + _avail(XrFrameBeginInfo, XR_TYPE_FRAME_BEGIN_INFO) \ + _avail(XrFrameEndInfo, XR_TYPE_FRAME_END_INFO) \ + _avail(XrViewLocateInfo, XR_TYPE_VIEW_LOCATE_INFO) \ + _avail(XrViewState, XR_TYPE_VIEW_STATE) \ + _avail(XrView, XR_TYPE_VIEW) \ + _avail(XrActionSetCreateInfo, XR_TYPE_ACTION_SET_CREATE_INFO) \ + _avail(XrActionCreateInfo, XR_TYPE_ACTION_CREATE_INFO) \ + _avail(XrInteractionProfileSuggestedBinding, XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING) \ + _avail(XrSessionActionSetsAttachInfo, XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO) \ + _avail(XrInteractionProfileState, XR_TYPE_INTERACTION_PROFILE_STATE) \ + _avail(XrActionStateGetInfo, XR_TYPE_ACTION_STATE_GET_INFO) \ + _avail(XrActionStateBoolean, XR_TYPE_ACTION_STATE_BOOLEAN) \ + _avail(XrActionStateFloat, XR_TYPE_ACTION_STATE_FLOAT) \ + _avail(XrActionStateVector2f, XR_TYPE_ACTION_STATE_VECTOR2F) \ + _avail(XrActionStatePose, XR_TYPE_ACTION_STATE_POSE) \ + _avail(XrActionsSyncInfo, XR_TYPE_ACTIONS_SYNC_INFO) \ + _avail(XrBoundSourcesForActionEnumerateInfo, XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO) \ + _avail(XrInputSourceLocalizedNameGetInfo, XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO) \ + _avail(XrHapticActionInfo, XR_TYPE_HAPTIC_ACTION_INFO) \ + _avail(XrCompositionLayerProjectionView, XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW) \ + _avail(XrCompositionLayerProjection, XR_TYPE_COMPOSITION_LAYER_PROJECTION) \ + _avail(XrCompositionLayerQuad, XR_TYPE_COMPOSITION_LAYER_QUAD) \ + _avail(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST) \ + _avail(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) \ + _avail(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) \ + _avail(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \ + _avail(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \ + _avail(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \ + _avail(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \ + _avail(XrCompositionLayerDepthInfoKHR, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) \ + _avail(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \ + _avail(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \ + _avail(XrVisibilityMaskKHR, XR_TYPE_VISIBILITY_MASK_KHR) \ + _avail(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) \ + _avail(XrCompositionLayerColorScaleBiasKHR, XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR) \ + _avail(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \ + _avail(XrBindingModificationsKHR, XR_TYPE_BINDING_MODIFICATIONS_KHR) \ + _avail(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) \ + _avail(XrDebugUtilsObjectNameInfoEXT, XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT) \ + _avail(XrDebugUtilsLabelEXT, XR_TYPE_DEBUG_UTILS_LABEL_EXT) \ + _avail(XrDebugUtilsMessengerCallbackDataEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT) \ + _avail(XrDebugUtilsMessengerCreateInfoEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) \ + _avail(XrSystemEyeGazeInteractionPropertiesEXT, XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT) \ + _avail(XrEyeGazeSampleTimeEXT, XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT) \ + _avail(XrSessionCreateInfoOverlayEXTX, XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX) \ + _avail(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \ + _avail(XrSpatialAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) \ + _avail(XrSpatialAnchorSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) \ + _avail(XrCompositionLayerImageLayoutFB, XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) \ + _avail(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \ + _avail(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \ + _avail(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \ + _avail(XrSpatialGraphStaticNodeBindingCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) \ + _avail(XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) \ + _avail(XrSpatialGraphNodeBindingPropertiesMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) \ + _avail(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \ + _avail(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \ + _avail(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \ + _avail(XrHandJointLocationsEXT, XR_TYPE_HAND_JOINT_LOCATIONS_EXT) \ + _avail(XrHandJointVelocitiesEXT, XR_TYPE_HAND_JOINT_VELOCITIES_EXT) \ + _avail(XrSystemHandTrackingMeshPropertiesMSFT, XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT) \ + _avail(XrHandMeshSpaceCreateInfoMSFT, XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT) \ + _avail(XrHandMeshUpdateInfoMSFT, XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT) \ + _avail(XrHandMeshMSFT, XR_TYPE_HAND_MESH_MSFT) \ + _avail(XrHandPoseTypeInfoMSFT, XR_TYPE_HAND_POSE_TYPE_INFO_MSFT) \ + _avail(XrSecondaryViewConfigurationSessionBeginInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT) \ + _avail(XrSecondaryViewConfigurationStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT) \ + _avail(XrSecondaryViewConfigurationFrameStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT) \ + _avail(XrSecondaryViewConfigurationLayerInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT) \ + _avail(XrSecondaryViewConfigurationFrameEndInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT) \ + _avail(XrSecondaryViewConfigurationSwapchainCreateInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT) \ + _avail(XrControllerModelKeyStateMSFT, XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT) \ + _avail(XrControllerModelNodePropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT) \ + _avail(XrControllerModelPropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT) \ + _avail(XrControllerModelNodeStateMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) \ + _avail(XrControllerModelStateMSFT, XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) \ + _avail(XrViewConfigurationViewFovEPIC, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) \ + _avail(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \ + _avail(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \ + _avail(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \ + _avail(XrSystemBodyTrackingPropertiesFB, XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB) \ + _avail(XrBodyTrackerCreateInfoFB, XR_TYPE_BODY_TRACKER_CREATE_INFO_FB) \ + _avail(XrBodySkeletonFB, XR_TYPE_BODY_SKELETON_FB) \ + _avail(XrBodyJointsLocateInfoFB, XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB) \ + _avail(XrBodyJointLocationsFB, XR_TYPE_BODY_JOINT_LOCATIONS_FB) \ + _avail(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \ + _avail(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \ + _avail(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \ + _avail(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \ + _avail(XrSceneCreateInfoMSFT, XR_TYPE_SCENE_CREATE_INFO_MSFT) \ + _avail(XrNewSceneComputeInfoMSFT, XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) \ + _avail(XrVisualMeshComputeLodInfoMSFT, XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) \ + _avail(XrSceneComponentsMSFT, XR_TYPE_SCENE_COMPONENTS_MSFT) \ + _avail(XrSceneComponentsGetInfoMSFT, XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) \ + _avail(XrSceneComponentLocationsMSFT, XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) \ + _avail(XrSceneComponentsLocateInfoMSFT, XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) \ + _avail(XrSceneObjectsMSFT, XR_TYPE_SCENE_OBJECTS_MSFT) \ + _avail(XrSceneComponentParentFilterInfoMSFT, XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) \ + _avail(XrSceneObjectTypesFilterInfoMSFT, XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) \ + _avail(XrScenePlanesMSFT, XR_TYPE_SCENE_PLANES_MSFT) \ + _avail(XrScenePlaneAlignmentFilterInfoMSFT, XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) \ + _avail(XrSceneMeshesMSFT, XR_TYPE_SCENE_MESHES_MSFT) \ + _avail(XrSceneMeshBuffersGetInfoMSFT, XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) \ + _avail(XrSceneMeshBuffersMSFT, XR_TYPE_SCENE_MESH_BUFFERS_MSFT) \ + _avail(XrSceneMeshVertexBufferMSFT, XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) \ + _avail(XrSceneMeshIndicesUint32MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) \ + _avail(XrSceneMeshIndicesUint16MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) \ + _avail(XrSerializedSceneFragmentDataGetInfoMSFT, XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) \ + _avail(XrSceneDeserializeInfoMSFT, XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) \ + _avail(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \ + _avail(XrViveTrackerPathsHTCX, XR_TYPE_VIVE_TRACKER_PATHS_HTCX) \ + _avail(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \ + _avail(XrSystemFacialTrackingPropertiesHTC, XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) \ + _avail(XrFacialExpressionsHTC, XR_TYPE_FACIAL_EXPRESSIONS_HTC) \ + _avail(XrFacialTrackerCreateInfoHTC, XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) \ + _avail(XrSystemColorSpacePropertiesFB, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) \ + _avail(XrHandTrackingMeshFB, XR_TYPE_HAND_TRACKING_MESH_FB) \ + _avail(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \ + _avail(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \ + _avail(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \ + _avail(XrSystemSpatialEntityPropertiesFB, XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) \ + _avail(XrSpatialAnchorCreateInfoFB, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) \ + _avail(XrSpaceComponentStatusSetInfoFB, XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) \ + _avail(XrSpaceComponentStatusFB, XR_TYPE_SPACE_COMPONENT_STATUS_FB) \ + _avail(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \ + _avail(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \ + _avail(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \ + _avail(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \ + _avail(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \ + _avail(XrFoveationLevelProfileCreateInfoFB, XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) \ + _avail(XrSystemKeyboardTrackingPropertiesFB, XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) \ + _avail(XrKeyboardSpaceCreateInfoFB, XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) \ + _avail(XrKeyboardTrackingQueryFB, XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) \ + _avail(XrTriangleMeshCreateInfoFB, XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) \ + _avail(XrSystemPassthroughPropertiesFB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) \ + _avail(XrSystemPassthroughProperties2FB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB) \ + _avail(XrPassthroughCreateInfoFB, XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) \ + _avail(XrPassthroughLayerCreateInfoFB, XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) \ + _avail(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \ + _avail(XrGeometryInstanceCreateInfoFB, XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) \ + _avail(XrGeometryInstanceTransformFB, XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) \ + _avail(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \ + _avail(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \ + _avail(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \ + _avail(XrPassthroughBrightnessContrastSaturationFB, XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) \ + _avail(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \ + _avail(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \ + _avail(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \ + _avail(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \ + _avail(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \ + _avail(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \ + _avail(XrRenderModelCapabilitiesRequestFB, XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) \ + _avail(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \ + _avail(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \ + _avail(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \ + _avail(XrCompositionLayerDepthTestVARJO, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) \ + _avail(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \ + _avail(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \ + _avail(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \ + _avail(XrFrameEndInfoML, XR_TYPE_FRAME_END_INFO_ML) \ + _avail(XrGlobalDimmerFrameEndInfoML, XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML) \ + _avail(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \ + _avail(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \ + _avail(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \ + _avail(XrSpaceStorageLocationFilterInfoFB, XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) \ + _avail(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \ + _avail(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \ + _avail(XrSpaceQueryResultsFB, XR_TYPE_SPACE_QUERY_RESULTS_FB) \ + _avail(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \ + _avail(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \ + _avail(XrSpaceSaveInfoFB, XR_TYPE_SPACE_SAVE_INFO_FB) \ + _avail(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \ + _avail(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \ + _avail(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \ + _avail(XrSpaceShareInfoFB, XR_TYPE_SPACE_SHARE_INFO_FB) \ + _avail(XrEventDataSpaceShareCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) \ + _avail(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \ + _avail(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \ + _avail(XrHapticAmplitudeEnvelopeVibrationFB, XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) \ + _avail(XrSemanticLabelsFB, XR_TYPE_SEMANTIC_LABELS_FB) \ + _avail(XrRoomLayoutFB, XR_TYPE_ROOM_LAYOUT_FB) \ + _avail(XrBoundary2DFB, XR_TYPE_BOUNDARY_2D_FB) \ + _avail(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \ + _avail(XrEventDataSceneCaptureCompleteFB, XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB) \ + _avail(XrSceneCaptureRequestInfoFB, XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB) \ + _avail(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \ + _avail(XrFoveationEyeTrackedProfileCreateInfoMETA, XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META) \ + _avail(XrFoveationEyeTrackedStateMETA, XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META) \ + _avail(XrSystemFoveationEyeTrackedPropertiesMETA, XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META) \ + _avail(XrSystemFaceTrackingPropertiesFB, XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB) \ + _avail(XrFaceTrackerCreateInfoFB, XR_TYPE_FACE_TRACKER_CREATE_INFO_FB) \ + _avail(XrFaceExpressionInfoFB, XR_TYPE_FACE_EXPRESSION_INFO_FB) \ + _avail(XrFaceExpressionWeightsFB, XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB) \ + _avail(XrEyeTrackerCreateInfoFB, XR_TYPE_EYE_TRACKER_CREATE_INFO_FB) \ + _avail(XrEyeGazesInfoFB, XR_TYPE_EYE_GAZES_INFO_FB) \ + _avail(XrSystemEyeTrackingPropertiesFB, XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB) \ + _avail(XrEyeGazesFB, XR_TYPE_EYE_GAZES_FB) \ + _avail(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \ + _avail(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \ + _avail(XrHapticPcmVibrationFB, XR_TYPE_HAPTIC_PCM_VIBRATION_FB) \ + _avail(XrDevicePcmSampleRateStateFB, XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB) \ + _avail(XrCompositionLayerDepthTestFB, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB) \ + _avail(XrLocalDimmingFrameEndInfoMETA, XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META) \ + _avail(XrExternalCameraOCULUS, XR_TYPE_EXTERNAL_CAMERA_OCULUS) \ + _avail(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \ + _avail(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \ + _avail(XrSpaceListSaveInfoFB, XR_TYPE_SPACE_LIST_SAVE_INFO_FB) \ + _avail(XrEventDataSpaceListSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) \ + _avail(XrSpaceUserCreateInfoFB, XR_TYPE_SPACE_USER_CREATE_INFO_FB) \ + _avail(XrSystemHeadsetIdPropertiesMETA, XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META) \ + _avail(XrPassthroughCreateInfoHTC, XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC) \ + _avail(XrPassthroughColorHTC, XR_TYPE_PASSTHROUGH_COLOR_HTC) \ + _avail(XrPassthroughMeshTransformInfoHTC, XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC) \ + _avail(XrCompositionLayerPassthroughHTC, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) \ + _avail(XrFoveationApplyInfoHTC, XR_TYPE_FOVEATION_APPLY_INFO_HTC) \ + _avail(XrFoveationDynamicModeInfoHTC, XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC) \ + _avail(XrFoveationCustomModeInfoHTC, XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC) \ + _avail(XrActiveActionSetPrioritiesEXT, XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT) \ + _avail(XrSystemForceFeedbackCurlPropertiesMNDX, XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX) \ + _avail(XrForceFeedbackCurlApplyLocationsMNDX, XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX) \ + + +#if defined(XR_USE_GRAPHICS_API_D3D11) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _avail(XrGraphicsBindingD3D11KHR, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) \ + _avail(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \ + _avail(XrGraphicsRequirementsD3D11KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \ + _unavail(XrGraphicsBindingD3D11KHR, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) \ + _unavail(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \ + _unavail(XrGraphicsRequirementsD3D11KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_D3D12) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _avail(XrGraphicsBindingD3D12KHR, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) \ + _avail(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \ + _avail(XrGraphicsRequirementsD3D12KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \ + _unavail(XrGraphicsBindingD3D12KHR, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) \ + _unavail(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \ + _unavail(XrGraphicsRequirementsD3D12KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _avail(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \ + _avail(XrGraphicsRequirementsOpenGLKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \ + _unavail(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \ + _unavail(XrGraphicsRequirementsOpenGLKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_avail, _unavail) \ + _avail(XrGraphicsBindingOpenGLWaylandKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_avail, _unavail) \ + _unavail(XrGraphicsBindingOpenGLWaylandKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + _avail(XrGraphicsBindingOpenGLWin32KHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + _unavail(XrGraphicsBindingOpenGLWin32KHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_avail, _unavail) \ + _avail(XrGraphicsBindingOpenGLXcbKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_avail, _unavail) \ + _unavail(XrGraphicsBindingOpenGLXcbKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_avail, _unavail) \ + _avail(XrGraphicsBindingOpenGLXlibKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_avail, _unavail) \ + _unavail(XrGraphicsBindingOpenGLXlibKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _avail(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ + _avail(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \ + _avail(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_avail, _unavail) \ + _unavail(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ + _unavail(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \ + _unavail(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _avail(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _unavail(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \ + +#endif + +#if defined(XR_USE_GRAPHICS_API_VULKAN) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _avail(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \ + _avail(XrGraphicsBindingVulkanKHR, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) \ + _avail(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \ + _avail(XrGraphicsRequirementsVulkanKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) \ + _avail(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \ + _avail(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \ + _avail(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \ + _avail(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \ + _avail(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + _avail(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \ + _unavail(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \ + _unavail(XrGraphicsBindingVulkanKHR, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) \ + _unavail(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \ + _unavail(XrGraphicsRequirementsVulkanKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) \ + _unavail(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \ + _unavail(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \ + _unavail(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \ + _unavail(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \ + _unavail(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + _unavail(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \ + +#endif + +#if defined(XR_USE_PLATFORM_ANDROID) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _avail(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \ + _avail(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ + _avail(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \ + _avail(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \ + _unavail(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \ + _unavail(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ + _unavail(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \ + _unavail(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ + +#endif + +#if defined(XR_USE_PLATFORM_EGL) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_avail, _unavail) \ + _avail(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_avail, _unavail) \ + _unavail(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \ + +#endif + +#if defined(XR_USE_PLATFORM_ML) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \ + _avail(XrCoordinateSpaceCreateInfoML, XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \ + _unavail(XrCoordinateSpaceCreateInfoML, XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) \ + +#endif + +#if defined(XR_USE_PLATFORM_WIN32) +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + _avail(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \ + +#else +#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_avail, _unavail) \ + _unavail(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \ + +#endif + + + + +#endif + diff --git a/Lumos/External/OpenXR-SDK/premake5.lua b/Lumos/External/OpenXR-SDK/premake5.lua new file mode 100644 index 000000000..63dbd6c84 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/premake5.lua @@ -0,0 +1,86 @@ +project "OpenXR-SDK" + kind "StaticLib" + language "C++" + staticruntime "off" + + targetdir ("bin/" .. outputdir .. "/%{prj.name}") + objdir ("bin-int/" .. outputdir .. "/%{prj.name}") + + files + { + "src/external/jsoncpp/include/json/**.h", + "src/external/jsoncpp/src/lib_json/**.h", + "src/external/jsoncpp/src/lib_json/**.cpp", + + "src/common/**.h", + "src/common/**.hpp", + "src/common/**.c", + "src/common/**.cpp", + + "include/**.h", + + "src/*.h", + "src/*.hpp", + "src/*.c", + "src/*.cpp", + + "src/loader/**.h", + "src/loader/**.hpp", + "src/loader/**.c", + "src/loader/**.cpp" + } + includedirs + { + "include", + "include/openxr", + "src", + "src/common", + "src/external/jsoncpp/include", + "%{IncludeDir.VulkanSDK}" + } + + links + { + "%{Library.Vulkan}", + "%{Library.VulkanUtils}" + } + + filter "system:windows" + systemversion "latest" + cppdialect "C++17" + staticruntime "Off" + + defines + { + "XR_OS_WINDOWS", + "XR_USE_PLATFORM_WIN32", + "XR_USE_GRAPHICS_API_VULKAN", + "_WINDOWS" + } + + filter "system:macosx" + systemversion "latest" + cppdialect "C++17" + staticruntime "Off" + + defines + { + "XR_OS_APPLE", + --"XR_USE_PLATFORM_XLIB", + "XR_USE_GRAPHICS_API_VULKAN", + } + + filter "system:linux" + pic "On" + systemversion "latest" + cppdialect "C++17" + staticruntime "Off" + + filter "configurations:Debug" + runtime "Debug" + symbols "on" + + + filter "configurations:Release" + runtime "Release" + optimize "on" diff --git a/Lumos/External/OpenXR-SDK/src/.clang-format b/Lumos/External/OpenXR-SDK/src/.clang-format new file mode 100644 index 000000000..cc6d80f7e --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/.clang-format @@ -0,0 +1,10 @@ +--- +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# Use defaults from the Google style with the following exceptions: +BasedOnStyle: Google +IndentWidth: 4 +ColumnLimit: 132 +SortIncludes: false +... diff --git a/Lumos/External/OpenXR-SDK/src/CMakeLists.txt b/Lumos/External/OpenXR-SDK/src/CMakeLists.txt new file mode 100644 index 000000000..124acb200 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/CMakeLists.txt @@ -0,0 +1,436 @@ +# Copyright (c) 2017 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Author: +# + +if(POLICY CMP0075) + cmake_policy(SET CMP0075 NEW) +endif() + +# Entire project uses C++14 +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include(StdFilesystemFlags) + +### Dependencies + +set(OPENGLES_INCOMPATIBLE TRUE) +set(OPENGL_INCOMPATIBLE FALSE) +set(VULKAN_INCOMPATIBLE FALSE) + +# CMake will detect OpenGL/Vulkan which are not compatible with UWP and ARM/ARM64 on Windows so skip it in these cases. +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR (WIN32 AND CMAKE_GENERATOR_PLATFORM_UPPER MATCHES "ARM.*")) + set(OPENGL_INCOMPATIBLE TRUE) + set(VULKAN_INCOMPATIBLE TRUE) + message(STATUS "OpenGL/Vulkan disabled due to incompatibility") +elseif(ANDROID) + set(OPENGL_INCOMPATIBLE TRUE) + find_path(ANDROID_NATIVE_APP_GLUE android_native_app_glue.h PATHS ${ANDROID_NDK}/sources/android/native_app_glue) + if(ANDROID_NATIVE_APP_GLUE) + # Needed by gfxwrapper + set(OPENGLES_INCOMPATIBLE FALSE) + endif() + if(ANDROID_PLATFORM_LEVEL LESS 24) + set(VULKAN_INCOMPATIBLE TRUE) + message(STATUS "Vulkan disabled due to incompatibility: need to target at least API 24") + endif() +endif() + +if(NOT OPENGL_INCOMPATIBLE) + set(OpenGL_GL_PREFERENCE GLVND) + find_package(OpenGL) + + if(OPENGL_FOUND) + add_definitions(-DXR_USE_GRAPHICS_API_OPENGL) + message(STATUS "Enabling OpenGL support") + elseif(BUILD_ALL_EXTENSIONS) + message(FATAL_ERROR "OpenGL not found") + endif() +endif() + +if(NOT OPENGLES_INCOMPATIBLE) + find_package(OpenGLES COMPONENTS V3 V2) + find_package(EGL) + if(OPENGLES_FOUND AND EGL_FOUND) + add_definitions(-DXR_USE_GRAPHICS_API_OPENGL_ES) + message(STATUS "Enabling OpenGL|ES support") + elseif(BUILD_ALL_EXTENSIONS) + message(FATAL_ERROR "OpenGL|ES not found") + endif() +endif() + +if(NOT VULKAN_INCOMPATIBLE) + if(NOT CMAKE_VERSION VERSION_LESS 3.7.0) + # Find the Vulkan headers + find_package(Vulkan) + endif() + if(Vulkan_FOUND) + add_definitions(-DXR_USE_GRAPHICS_API_VULKAN) + message(STATUS "Enabling Vulkan support") + elseif(BUILD_ALL_EXTENSIONS) + message(FATAL_ERROR "Vulkan headers not found") + endif() +endif() + +find_package(Threads REQUIRED) +find_package(JsonCpp) + +### All options defined here +option(BUILD_LOADER "Build loader" ON) +option(BUILD_ALL_EXTENSIONS "Build loader and layers with all extensions" OFF) +option( + BUILD_LOADER_WITH_EXCEPTION_HANDLING + "Enable exception handling in the loader. Leave this on unless your standard library is built to not throw." + ON +) + +if(WIN32) + set(OPENXR_DEBUG_POSTFIX d CACHE STRING "OpenXR loader debug postfix.") +else() + set(OPENXR_DEBUG_POSTFIX "" CACHE STRING "OpenXR loader debug postfix.") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + option(DYNAMIC_LOADER "Build the loader as a .dll library" OFF) +else() + option(DYNAMIC_LOADER "Build the loader as a .dll library" ON) +endif() +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/api_layers/CMakeLists.txt") + option(BUILD_API_LAYERS "Build API layers" ON) +endif() +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt") + option(BUILD_TESTS "Build tests" ON) +endif() +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/conformance/CMakeLists.txt") + option(BUILD_CONFORMANCE_TESTS "Build conformance tests" ON) +endif() +include(CMakeDependentOption) + +cmake_dependent_option( + BUILD_WITH_SYSTEM_JSONCPP "Use system jsoncpp instead of vendored source" ON "JSONCPP_FOUND" OFF +) +cmake_dependent_option( + BUILD_WITH_STD_FILESYSTEM "Use std::[experimental::]filesystem." ON + "HAVE_FILESYSTEM_WITHOUT_LIB OR HAVE_FILESYSTEM_NEEDING_LIBSTDCXXFS OR HAVE_FILESYSTEM_NEEDING_LIBCXXFS" + OFF +) + +# Several files use these compile time OS switches +if(WIN32) + add_definitions(-DXR_OS_WINDOWS) + add_definitions(-DNOMINMAX) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + add_definitions(-DXR_OS_LINUX) +elseif(ANDROID) + add_definitions(-DXR_OS_ANDROID) +elseif(APPLE) + add_definitions(-DXR_OS_APPLE) +endif() + +# /EHsc (support for C++ exceptions) is default in most configurations but seems missing when building arm/arm64. +if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") +endif() + +# This is a little helper library for setting up OpenGL +if((OPENGL_FOUND OR OpenGLES_FOUND) AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/common/gfxwrapper_opengl.c") + add_library(openxr-gfxwrapper STATIC common/gfxwrapper_opengl.c common/gfxwrapper_opengl.h) + target_include_directories(openxr-gfxwrapper PUBLIC ${PROJECT_SOURCE_DIR}/external/include) + if(OPENGL_FOUND) + if(TARGET OpenGL::OpenGL) + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::OpenGL) + elseif(TARGET OpenGL::GL) + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::GL) + else() + target_link_libraries(openxr-gfxwrapper PUBLIC ${OPENGL_LIBRARIES}) + endif() + endif() + if(OpenGLES_FOUND) + if(TARGET OpenGLES::OpenGLESv3) + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGLES::OpenGLESv3) + elseif(TARGET OpenGLES::OpenGLESv2) + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGLES::OpenGLESv2) + else() + message(FATAL_ERROR "Should not get here!") + endif() + target_link_libraries(openxr-gfxwrapper PUBLIC EGL::EGL) + endif() + if(ANDROID) + target_include_directories(openxr-gfxwrapper PUBLIC ${ANDROID_NATIVE_APP_GLUE}) + + # Note: For some reason, just adding this to the gfxwrapper library results in failure at load time. + # So, each consuming target must add $ to their sources + add_library(android_native_app_glue OBJECT "${ANDROID_NATIVE_APP_GLUE}/android_native_app_glue.c") + target_include_directories(android_native_app_glue PUBLIC ${ANDROID_NATIVE_APP_GLUE}) + target_compile_options(android_native_app_glue PRIVATE -Wno-unused-parameter) + endif() + message(STATUS "Enabling OpenGL support in hello_xr, loader_test, and conformance, if configured") +endif() + +# Determine the presentation backend for Linux systems. +# Use an include because the code is pretty big. +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + include(presentation) +endif() + +# Several files use these compile time platform switches +if(WIN32) + add_definitions(-DXR_USE_PLATFORM_WIN32) +elseif(ANDROID) + add_definitions(-DXR_USE_PLATFORM_ANDROID) + set(OPENXR_ANDROID_VERSION_SUFFIX "" CACHE STRING "Suffix for generated Android artifacts.") +elseif(PRESENTATION_BACKEND MATCHES "xlib") + add_definitions(-DXR_USE_PLATFORM_XLIB) +elseif(PRESENTATION_BACKEND MATCHES "xcb") + add_definitions(-DXR_USE_PLATFORM_XCB) + + # TODO remove once conformance supports XCB + set(BUILD_CONFORMANCE_TESTS OFF) +elseif(PRESENTATION_BACKEND MATCHES "wayland") + add_definitions(-DXR_USE_PLATFORM_WAYLAND) + + # TODO remove once conformance supports Wayland + set(BUILD_CONFORMANCE_TESTS OFF) +endif() + +if(BUILD_CONFORMANCE_TESTS AND NOT ANDROID) + set(BUILD_CONFORMANCE_CLI ON) +else() + set(BUILD_CONFORMANCE_CLI OFF) +endif() + +set(OPENXR_ALL_SUPPORTED_DEFINES) +if(BUILD_WITH_XLIB_HEADERS) + list(APPEND OPENXR_ALL_SUPPORTED_DEFINES XR_USE_PLATFORM_XLIB) +endif() + +if(BUILD_WITH_XCB_HEADERS) + list(APPEND OPENXR_ALL_SUPPORTED_DEFINES XR_USE_PLATFORM_XCB) +endif() + +if(BUILD_WITH_WAYLAND_HEADERS) + list(APPEND OPENXR_ALL_SUPPORTED_DEFINES XR_USE_PLATFORM_WAYLAND) +endif() + +# Find glslc shader compiler. +# On Android, the NDK includes the binary, so no external dependency. +if(ANDROID) + file(GLOB glslc_folders ${ANDROID_NDK}/shader-tools/*) + find_program( + GLSL_COMPILER glslc + PATHS ${glslc_folders} + NO_DEFAULT_PATH + ) +else() + file(GLOB glslc_folders $ENV{VULKAN_SDK}/*) + find_program(GLSL_COMPILER glslc PATHS ${glslc_folders}) +endif() +find_program(GLSLANG_VALIDATOR glslangValidator) +if(GLSL_COMPILER) + message(STATUS "Found glslc: ${GLSL_COMPILER}") +elseif(GLSLANG_VALIDATOR) + message(STATUS "Found glslangValidator: ${GLSLANG_VALIDATOR}") +else() + message(STATUS "Could NOT find glslc, using precompiled .spv files") +endif() + +function(compile_glsl run_target_name) + set(glsl_output_files "") + foreach(in_file IN LISTS ARGN) + get_filename_component(glsl_stage ${in_file} NAME_WE) + set(out_file ${CMAKE_CURRENT_BINARY_DIR}/${glsl_stage}.spv) + if(GLSL_COMPILER) + # Run glslc if we can find it + add_custom_command( + OUTPUT ${out_file} + COMMAND ${GLSL_COMPILER} -mfmt=c -fshader-stage=${glsl_stage} ${in_file} -o ${out_file} + DEPENDS ${in_file} + ) + elseif(GLSLANG_VALIDATOR) + # Run glslangValidator if we can find it + add_custom_command( + OUTPUT ${out_file} + COMMAND ${GLSLANG_VALIDATOR} -V -S ${glsl_stage} ${in_file} -x -o ${out_file} + DEPENDS ${in_file} + VERBATIM + ) + else() + # Use the precompiled .spv files + get_filename_component(glsl_src_dir ${in_file} DIRECTORY) + set(precompiled_file ${glsl_src_dir}/${glsl_stage}.spv) + configure_file(${precompiled_file} ${out_file} COPYONLY) + endif() + list(APPEND glsl_output_files ${out_file}) + endforeach() + add_custom_target(${run_target_name} ALL DEPENDS ${glsl_output_files}) + set_target_properties(${run_target_name} PROPERTIES FOLDER ${HELPER_FOLDER}) + +endfunction() + +if(WIN32) + add_definitions(-DXR_USE_GRAPHICS_API_D3D11) + if(MSVC) + # Not available in MinGW right now + add_definitions(-DXR_USE_GRAPHICS_API_D3D12) + endif() +endif() + +# Check for the existence of the secure_getenv or __secure_getenv commands +include(CheckFunctionExists) + +check_function_exists(secure_getenv HAVE_SECURE_GETENV) +check_function_exists(__secure_getenv HAVE___SECURE_GETENV) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/common_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/common_config.h) +add_definitions(-DOPENXR_HAVE_COMMON_CONFIG) + +# Be able to find pre-generated files, if used. +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include ${CMAKE_CURRENT_SOURCE_DIR}) + +include(CheckSymbolExists) +check_symbol_exists(timespec_get time.h HAVE_TIMESPEC_GET) +if(HAVE_TIMESPEC_GET) + add_definitions(-DXR_USE_TIMESPEC) +endif() + +# Set up the OpenXR version variables, used by several targets in this project. +include(${CMAKE_CURRENT_SOURCE_DIR}/version.cmake) + +# Path separators ( : or ; ) are not handled well in CMake. +# This seems like a reasonable approach. +if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) + set(CODEGEN_PYTHON_PATH + "${PROJECT_SOURCE_DIR}/specification/scripts;${PROJECT_SOURCE_DIR}/src/scripts;$ENV{PYTHONPATH}" + ) +else() + set(CODEGEN_PYTHON_PATH + "${PROJECT_SOURCE_DIR}/specification/scripts:${PROJECT_SOURCE_DIR}/src/scripts:$ENV{PYTHONPATH}" + ) +endif() + +# General code generation macro used by several targets. +macro(run_xr_xml_generate dependency output) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${output}" AND NOT BUILD_FORCE_GENERATION) + # pre-generated found + message(STATUS "Found and will use pre-generated ${output} in source tree") + list(APPEND GENERATED_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${output}") + else() + if(NOT PYTHON_EXECUTABLE) + message( + FATAL_ERROR + "Python 3 not found, but pre-generated ${CMAKE_CURRENT_SOURCE_DIR}/${output} not found" + ) + endif() + add_custom_command( + OUTPUT ${output} + COMMAND + ${CMAKE_COMMAND} -E env "PYTHONPATH=${CODEGEN_PYTHON_PATH}" + ${PYTHON_EXECUTABLE} + ${PROJECT_SOURCE_DIR}/src/scripts/src_genxr.py + -registry ${PROJECT_SOURCE_DIR}/specification/registry/xr.xml + ${output} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS "${PROJECT_SOURCE_DIR}/specification/registry/xr.xml" + "${PROJECT_SOURCE_DIR}/specification/scripts/generator.py" + "${PROJECT_SOURCE_DIR}/specification/scripts/reg.py" + "${PROJECT_SOURCE_DIR}/src/scripts/${dependency}" + "${PROJECT_SOURCE_DIR}/src/scripts/src_genxr.py" + ${ARGN} + COMMENT "Generating ${output} using ${PYTHON_EXECUTABLE} on ${dependency}" + ) + set_source_files_properties(${output} PROPERTIES GENERATED TRUE) + list(APPEND GENERATED_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${output}") + list(APPEND GENERATED_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${output}") + endif() +endmacro() + +# Layer JSON generation macro used by several targets. +macro(gen_xr_layer_json filename layername libfile version desc genbad) + add_custom_command( + OUTPUT ${filename} + COMMAND + ${CMAKE_COMMAND} -E env "PYTHONPATH=${CODEGEN_PYTHON_PATH}" + ${PYTHON_EXECUTABLE} + ${PROJECT_SOURCE_DIR}/src/scripts/generate_api_layer_manifest.py + -f ${filename} + -n ${layername} + -l ${libfile} + -a ${MAJOR}.${MINOR} + -v ${version} + ${genbad} + -d ${desc} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${PROJECT_SOURCE_DIR}/src/scripts/generate_api_layer_manifest.py + COMMENT + "Generating API Layer JSON ${filename} using -f ${filename} -n ${layername} -l ${libfile} -a ${MAJOR}.${MINOR} -v ${version} ${genbad} -d ${desc}" + ) +endmacro() + +# Custom target for generated dispatch table sources, used by several targets. +set(GENERATED_OUTPUT) +set(GENERATED_DEPENDS) +run_xr_xml_generate(utility_source_generator.py xr_generated_dispatch_table.h) +run_xr_xml_generate(utility_source_generator.py xr_generated_dispatch_table.c) +if(GENERATED_DEPENDS) + add_custom_target(xr_global_generated_files DEPENDS ${GENERATED_DEPENDS}) +else() + add_custom_target(xr_global_generated_files) +endif() + +set_target_properties(xr_global_generated_files PROPERTIES FOLDER ${CODEGEN_FOLDER}) + +set(COMMON_GENERATED_OUTPUT ${GENERATED_OUTPUT}) +set(COMMON_GENERATED_DEPENDS ${GENERATED_DEPENDS}) +if(NOT MSVC) + include(CheckCXXCompilerFlag) + include(CheckCCompilerFlag) + foreach(FLAG -Wall -Werror=unused-parameter -Werror=unused-argument -Wpointer-arith) + string(REGEX REPLACE "[^A-Za-z0-9]" "" _flagvar "${FLAG}") + check_cxx_compiler_flag(${FLAG} SUPPORTS_${_flagvar}) + if(SUPPORTS_${_flagvar}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}") + endif() + check_c_compiler_flag(${FLAG} SUPPORTS_C_${_flagvar}) + if(SUPPORTS_C_${_flagvar}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}") + endif() + endforeach() + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") +endif() + +if(ANDROID) + find_library(ANDROID_LIBRARY NAMES android) + find_library(ANDROID_LOG_LIBRARY NAMES log) +endif() + +if(BUILD_LOADER) + add_subdirectory(loader) +endif() + +if(BUILD_API_LAYERS) + add_subdirectory(api_layers) +endif() + +if(BUILD_TESTS) + add_subdirectory(tests) +endif() + +if(BUILD_CONFORMANCE_TESTS) + add_subdirectory(conformance) + add_subdirectory(external/catch2) +endif() diff --git a/Lumos/External/OpenXR-SDK/src/cmake/FindEGL.cmake b/Lumos/External/OpenXR-SDK/src/cmake/FindEGL.cmake new file mode 100644 index 000000000..160009277 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/FindEGL.cmake @@ -0,0 +1,171 @@ +#.rst: +# FindEGL +# ------- +# +# Try to find EGL. +# +# This will define the following variables: +# +# ``EGL_FOUND`` +# True if (the requested version of) EGL is available +# ``EGL_VERSION`` +# The version of EGL; note that this is the API version defined in the +# headers, rather than the version of the implementation (eg: Mesa) +# ``EGL_LIBRARIES`` +# This can be passed to target_link_libraries() instead of the ``EGL::EGL`` +# target +# ``EGL_INCLUDE_DIRS`` +# This should be passed to target_include_directories() if the target is not +# used for linking +# ``EGL_DEFINITIONS`` +# This should be passed to target_compile_options() if the target is not +# used for linking +# +# If ``EGL_FOUND`` is TRUE, it will also define the following imported target: +# +# ``EGL::EGL`` +# The EGL library +# +# In general we recommend using the imported target, as it is easier to use. +# Bear in mind, however, that if the target is in the link interface of an +# exported library, it must be made available by the package config file. +# +# Since pre-1.0.0. + +# SPDX-License-Identifier: BSD-3-Clause +#============================================================================= +# Copyright 2014 Alex Merry +# Copyright 2014 Martin Gräßlin +# Copyright 2019 Ryan Pavlik +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +include(CheckCXXSourceCompiles) +include(CMakePushCheckState) + +# Use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +find_package(PkgConfig) +pkg_check_modules(PKG_EGL QUIET egl) + +set(EGL_DEFINITIONS ${PKG_EGL_CFLAGS_OTHER}) + +find_path(EGL_INCLUDE_DIR + NAMES + EGL/egl.h + HINTS + ${PKG_EGL_INCLUDE_DIRS} +) +find_library(EGL_LIBRARY + NAMES + EGL + HINTS + ${PKG_EGL_LIBRARY_DIRS} +) + +# NB: We do *not* use the version information from pkg-config, as that +# is the implementation version (eg: the Mesa version) +if(EGL_INCLUDE_DIR) + # egl.h has defines of the form EGL_VERSION_x_y for each supported + # version; so the header for EGL 1.1 will define EGL_VERSION_1_0 and + # EGL_VERSION_1_1. Finding the highest supported version involves + # finding all these defines and selecting the highest numbered. + file(READ "${EGL_INCLUDE_DIR}/EGL/egl.h" _EGL_header_contents) + string(REGEX MATCHALL + "[ \t]EGL_VERSION_[0-9_]+" + _EGL_version_lines + "${_EGL_header_contents}" + ) + unset(_EGL_header_contents) + foreach(_EGL_version_line ${_EGL_version_lines}) + string(REGEX REPLACE + "[ \t]EGL_VERSION_([0-9_]+)" + "\\1" + _version_candidate + "${_EGL_version_line}" + ) + string(REPLACE "_" "." _version_candidate "${_version_candidate}") + if(NOT DEFINED EGL_VERSION OR EGL_VERSION VERSION_LESS _version_candidate) + set(EGL_VERSION "${_version_candidate}") + endif() + endforeach() + unset(_EGL_version_lines) +endif() + +cmake_push_check_state(RESET) +list(APPEND CMAKE_REQUIRED_LIBRARIES "${EGL_LIBRARY}") +list(APPEND CMAKE_REQUIRED_INCLUDES "${EGL_INCLUDE_DIR}") + +check_cxx_source_compiles(" +#include + +int main(int argc, char *argv[]) { + EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0; + eglDestroyContext(dpy, ctx); +}" HAVE_EGL) + +cmake_pop_check_state() + +set(required_vars EGL_INCLUDE_DIR HAVE_EGL) +if(NOT EMSCRIPTEN) + list(APPEND required_vars EGL_LIBRARY) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(EGL + FOUND_VAR + EGL_FOUND + REQUIRED_VARS + ${required_vars} + VERSION_VAR + EGL_VERSION +) + +if(EGL_FOUND AND NOT TARGET EGL::EGL) + if (EMSCRIPTEN) + add_library(EGL::EGL INTERFACE IMPORTED) + # Nothing further to be done, system include paths have headers and linkage is implicit. + else() + add_library(EGL::EGL UNKNOWN IMPORTED) + set_target_properties(EGL::EGL PROPERTIES + IMPORTED_LOCATION "${EGL_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${EGL_DEFINITIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${EGL_INCLUDE_DIR}" + ) + endif() +endif() + +mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR HAVE_EGL) + +# compatibility variables +set(EGL_LIBRARIES ${EGL_LIBRARY}) +set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR}) +set(EGL_VERSION_STRING ${EGL_VERSION}) + +include(FeatureSummary) +set_package_properties(EGL PROPERTIES + URL "https://www.khronos.org/egl/" + DESCRIPTION "A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG." +) diff --git a/Lumos/External/OpenXR-SDK/src/cmake/FindJsonCpp.cmake b/Lumos/External/OpenXR-SDK/src/cmake/FindJsonCpp.cmake new file mode 100644 index 000000000..9cd868472 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/FindJsonCpp.cmake @@ -0,0 +1,395 @@ +# - Find jsoncpp - Overarching find module +# This is a over-arching find module to find older jsoncpp versions and those sadly built +# without JSONCPP_WITH_CMAKE_PACKAGE=ON, as well as those built with the cmake config file. +# It also wraps the different versions of the module. +# +# On CMake 3.0 and newer: +# JsonCpp::JsonCpp - Imported target (possibly an interface/alias) to use: +# if anything is populated, this is. If both shared and static are found, then +# this will be the static version on DLL platforms and shared on non-DLL platforms. +# JsonCpp::JsonCppShared - Imported target (possibly an interface/alias) for a +# shared library version. +# JsonCpp::JsonCppStatic - Imported target (possibly an interface/alias) for a +# static library version. +# +# On all CMake versions: (Note that on CMake 2.8.10 and earlier, you may need to use JSONCPP_INCLUDE_DIRS) +# JSONCPP_LIBRARY - wraps JsonCpp::JsonCpp or equiv. +# JSONCPP_LIBRARY_IS_SHARED - if we know for sure JSONCPP_LIBRARY is shared, this is true-ish. We try to "un-set" it if we don't know one way or another. +# JSONCPP_LIBRARY_SHARED - wraps JsonCpp::JsonCppShared or equiv. +# JSONCPP_LIBRARY_STATIC - wraps JsonCpp::JsonCppStatic or equiv. +# JSONCPP_INCLUDE_DIRS - Include directories - should (generally?) not needed if you require CMake 2.8.11+ since it handles target include directories. +# +# JSONCPP_FOUND - True if JsonCpp was found. +# +# Original Author: +# 2016 Ryan Pavlik +# Incorporates work from the module contributed to VRPN under the same license: +# 2011 Philippe Crassous (ENSAM ParisTech / Institut Image) p.crassous _at_ free.fr +# +# Copyright Philippe Crassous 2011. +# Copyright Sensics, Inc. 2016. +# +# SPDX-License-Identifier: BSL-1.0 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +set(__jsoncpp_have_namespaced_targets OFF) +set(__jsoncpp_have_interface_support OFF) +if(NOT ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 3.0)) + set(__jsoncpp_have_namespaced_targets ON) + set(__jsoncpp_have_interface_support ON) +elseif(("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" EQUAL 2.8) AND "${CMAKE_PATCH_VERSION}" GREATER 10) + set(__jsoncpp_have_interface_support ON) +endif() + +# sets __jsoncpp_have_jsoncpplib based on whether or not we have a real imported jsoncpp_lib target. +macro(_jsoncpp_check_for_real_jsoncpplib) + set(__jsoncpp_have_jsoncpplib FALSE) + if(TARGET jsoncpp_lib) + get_property(__jsoncpp_lib_type TARGET jsoncpp_lib PROPERTY TYPE) + # We make interface libraries. If an actual config module made it, it would be an imported library. + if(NOT __jsoncpp_lib_type STREQUAL "INTERFACE_LIBRARY") + set(__jsoncpp_have_jsoncpplib TRUE) + endif() + endif() + #message(STATUS "__jsoncpp_have_jsoncpplib ${__jsoncpp_have_jsoncpplib}") +endmacro() + +include(FindPackageHandleStandardArgs) +# Ensure that if this is TRUE later, it's because we set it. +set(JSONCPP_FOUND FALSE) +set(__jsoncpp_have_jsoncpplib FALSE) + +# See if we find a CMake config file - there is no harm in calling this more than once, +# and we need to call it at least once every CMake invocation to create the original +# imported targets, since those don't stick around like cache variables. +find_package(jsoncpp QUIET NO_MODULE) + +if(jsoncpp_FOUND) + # Build a string to help us figure out when to invalidate our cache variables. + # start with where we found jsoncpp + set(__jsoncpp_info_string "[${jsoncpp_DIR}]") + + # part of the string to indicate if we found a real jsoncpp_lib (and what kind) + _jsoncpp_check_for_real_jsoncpplib() + + macro(_jsoncpp_apply_map_config target) + if(MSVC) + # Can't do this - different runtimes, incompatible ABI, etc. + set(_jsoncpp_debug_fallback) + else() + set(_jsoncpp_debug_fallback DEBUG) + #osvr_stash_map_config(DEBUG DEBUG RELWITHDEBINFO RELEASE MINSIZEREL NONE) + endif() + # Appending, just in case using project or upstream fixes this. + set_property(TARGET ${target} APPEND PROPERTY MAP_IMPORTED_CONFIG_RELEASE RELEASE RELWITHDEBINFO MINSIZEREL NONE ${_jsoncpp_debug_fallback}) + set_property(TARGET ${target} APPEND PROPERTY MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELWITHDEBINFO RELEASE MINSIZEREL NONE ${_jsoncpp_debug_fallback}) + set_property(TARGET ${target} APPEND PROPERTY MAP_IMPORTED_CONFIG_MINSIZEREL MINSIZEREL RELEASE RELWITHDEBINFO NONE ${_jsoncpp_debug_fallback}) + set_property(TARGET ${target} APPEND PROPERTY MAP_IMPORTED_CONFIG_NONE NONE RELEASE RELWITHDEBINFO MINSIZEREL ${_jsoncpp_debug_fallback}) + if(NOT MSVC) + set_property(TARGET ${target} APPEND PROPERTY MAP_IMPORTED_CONFIG_DEBUG DEBUG RELWITHDEBINFO RELEASE MINSIZEREL NONE) + endif() + endmacro() + if(__jsoncpp_have_jsoncpplib) + list(APPEND __jsoncpp_info_string "[${__jsoncpp_lib_type}]") + _jsoncpp_apply_map_config(jsoncpp_lib) + else() + list(APPEND __jsoncpp_info_string "[]") + endif() + # part of the string to indicate if we found jsoncpp_lib_static + if(TARGET jsoncpp_lib_static) + list(APPEND __jsoncpp_info_string "[T]") + _jsoncpp_apply_map_config(jsoncpp_lib_static) + else() + list(APPEND __jsoncpp_info_string "[]") + endif() +endif() + + +# If we found something, and it's not the exact same as what we've found before... +# NOTE: The contents of this "if" block update only (internal) cache variables! +# (since this will only get run the first CMake pass that finds jsoncpp or that finds a different/updated install) +if(jsoncpp_FOUND AND NOT __jsoncpp_info_string STREQUAL "${JSONCPP_CACHED_JSONCPP_DIR_DETAILS}") + #message("Updating jsoncpp cache variables! ${__jsoncpp_info_string}") + set(JSONCPP_CACHED_JSONCPP_DIR_DETAILS "${__jsoncpp_info_string}" CACHE INTERNAL "" FORCE) + unset(JSONCPP_IMPORTED_LIBRARY_SHARED) + unset(JSONCPP_IMPORTED_LIBRARY_STATIC) + unset(JSONCPP_IMPORTED_LIBRARY) + unset(JSONCPP_IMPORTED_INCLUDE_DIRS) + unset(JSONCPP_IMPORTED_LIBRARY_IS_SHARED) + + # if(__jsoncpp_have_jsoncpplib) is equivalent to if(TARGET jsoncpp_lib) except it excludes our + # "invented" jsoncpp_lib interface targets, made for convenience purposes after this block. + + if(__jsoncpp_have_jsoncpplib AND TARGET jsoncpp_lib_static) + + # A veritable cache of riches - we have both shared and static! + set(JSONCPP_IMPORTED_LIBRARY_SHARED jsoncpp_lib CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_STATIC jsoncpp_lib_static CACHE INTERNAL "" FORCE) + if(WIN32 OR CYGWIN OR MINGW) + # DLL platforms: static library should be default + set(JSONCPP_IMPORTED_LIBRARY ${JSONCPP_IMPORTED_LIBRARY_STATIC} CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_IS_SHARED FALSE CACHE INTERNAL "" FORCE) + else() + # Other platforms - might require PIC to be linked into shared libraries, so safest to prefer shared. + set(JSONCPP_IMPORTED_LIBRARY ${JSONCPP_IMPORTED_LIBRARY_SHARED} CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_IS_SHARED TRUE CACHE INTERNAL "" FORCE) + endif() + + elseif(TARGET jsoncpp_lib_static) + # Well, only one variant, but we know for sure that it's static. + set(JSONCPP_IMPORTED_LIBRARY_STATIC jsoncpp_lib_static CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY jsoncpp_lib_static CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_IS_SHARED FALSE CACHE INTERNAL "" FORCE) + + elseif(__jsoncpp_have_jsoncpplib AND __jsoncpp_lib_type STREQUAL "STATIC_LIBRARY") + # We were able to figure out the mystery library is static! + set(JSONCPP_IMPORTED_LIBRARY_STATIC jsoncpp_lib CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY jsoncpp_lib CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_IS_SHARED FALSE CACHE INTERNAL "" FORCE) + + elseif(__jsoncpp_have_jsoncpplib AND __jsoncpp_lib_type STREQUAL "SHARED_LIBRARY") + # We were able to figure out the mystery library is shared! + set(JSONCPP_IMPORTED_LIBRARY_SHARED jsoncpp_lib CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY jsoncpp_lib CACHE INTERNAL "" FORCE) + set(JSONCPP_IMPORTED_LIBRARY_IS_SHARED TRUE CACHE INTERNAL "" FORCE) + + elseif(__jsoncpp_have_jsoncpplib) + # One variant, and we have no idea if this is just an old version or if + # this is shared based on the target name alone. Hmm. + set(JSONCPP_IMPORTED_LIBRARY jsoncpp_lib CACHE INTERNAL "" FORCE) + endif() + + # Now, we need include directories. Can't just limit this to old CMakes, since + # new CMakes might be used to build projects designed to support older ones. + if(__jsoncpp_have_jsoncpplib) + get_property(__jsoncpp_interface_include_dirs TARGET jsoncpp_lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + if(__jsoncpp_interface_include_dirs) + set(JSONCPP_IMPORTED_INCLUDE_DIRS "${__jsoncpp_interface_include_dirs}" CACHE INTERNAL "" FORCE) + endif() + endif() + if(TARGET jsoncpp_lib_static AND NOT JSONCPP_IMPORTED_INCLUDE_DIRS) + get_property(__jsoncpp_interface_include_dirs TARGET jsoncpp_lib_static PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + if(__jsoncpp_interface_include_dirs) + set(JSONCPP_IMPORTED_INCLUDE_DIRS "${__jsoncpp_interface_include_dirs}" CACHE INTERNAL "" FORCE) + endif() + endif() +endif() + +# As a convenience... +if(TARGET jsoncpp_lib_static AND NOT TARGET jsoncpp_lib) + add_library(jsoncpp_lib INTERFACE) + target_link_libraries(jsoncpp_lib INTERFACE jsoncpp_lib_static) +endif() + +if(JSONCPP_IMPORTED_LIBRARY) + if(NOT JSONCPP_IMPORTED_INCLUDE_DIRS) + # OK, so we couldn't get it from the target... maybe we can figure it out from jsoncpp_DIR. + + # take off the jsoncpp component + get_filename_component(__jsoncpp_import_root "${jsoncpp_DIR}/.." ABSOLUTE) + set(__jsoncpp_hints "${__jsoncpp_import_root}") + # take off the cmake component + get_filename_component(__jsoncpp_import_root "${__jsoncpp_import_root}/.." ABSOLUTE) + list(APPEND __jsoncpp_hints "${__jsoncpp_import_root}") + # take off the lib component + get_filename_component(__jsoncpp_import_root "${__jsoncpp_import_root}/.." ABSOLUTE) + list(APPEND __jsoncpp_hints "${__jsoncpp_import_root}") + # take off one more component in case of multiarch lib + get_filename_component(__jsoncpp_import_root "${__jsoncpp_import_root}/.." ABSOLUTE) + list(APPEND __jsoncpp_hints "${__jsoncpp_import_root}") + + # Now, search. + find_path(JsonCpp_INCLUDE_DIR + NAMES + json/json.h + PATH_SUFFIXES include jsoncpp include/jsoncpp + HINTS ${__jsoncpp_hints}) + if(JsonCpp_INCLUDE_DIR) + mark_as_advanced(JsonCpp_INCLUDE_DIR) + # Note - this does not set it in the cache, in case we find it better at some point in the future! + set(JSONCPP_IMPORTED_INCLUDE_DIRS ${JsonCpp_INCLUDE_DIR}) + endif() + endif() + + find_package_handle_standard_args(JsonCpp + DEFAULT_MSG + jsoncpp_DIR + JSONCPP_IMPORTED_LIBRARY + JSONCPP_IMPORTED_INCLUDE_DIRS) +endif() + +if(JSONCPP_FOUND) + # Create any missing namespaced targets from the config module. + if(__jsoncpp_have_namespaced_targets) + if(JSONCPP_IMPORTED_LIBRARY AND NOT TARGET JsonCpp::JsonCpp) + add_library(JsonCpp::JsonCpp INTERFACE IMPORTED) + set_target_properties(JsonCpp::JsonCpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${JSONCPP_IMPORTED_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${JSONCPP_IMPORTED_LIBRARY}") + endif() + + if(JSONCPP_IMPORTED_LIBRARY_SHARED AND NOT TARGET JsonCpp::JsonCppShared) + add_library(JsonCpp::JsonCppShared INTERFACE IMPORTED) + set_target_properties(JsonCpp::JsonCppShared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${JSONCPP_IMPORTED_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${JSONCPP_IMPORTED_LIBRARY_SHARED}") + endif() + + if(JSONCPP_IMPORTED_LIBRARY_STATIC AND NOT TARGET JsonCpp::JsonCppStatic) + add_library(JsonCpp::JsonCppStatic INTERFACE IMPORTED) + set_target_properties(JsonCpp::JsonCppStatic PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${JSONCPP_IMPORTED_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${JSONCPP_IMPORTED_LIBRARY_STATIC}") + endif() + + # Hide the stuff we didn't, and no longer, need. + if(NOT JsonCpp_LIBRARY) + unset(JsonCpp_LIBRARY CACHE) + endif() + if(NOT JsonCpp_INCLUDE_DIR) + unset(JsonCpp_INCLUDE_DIR CACHE) + endif() + endif() + + set(JSONCPP_LIBRARY ${JSONCPP_IMPORTED_LIBRARY}) + set(JSONCPP_INCLUDE_DIRS ${JSONCPP_IMPORTED_INCLUDE_DIRS}) + if(DEFINED JSONCPP_IMPORTED_LIBRARY_IS_SHARED) + set(JSONCPP_LIBRARY_IS_SHARED ${JSONCPP_IMPORTED_LIBRARY_IS_SHARED}) + else() + unset(JSONCPP_LIBRARY_IS_SHARED) + endif() + + if(JSONCPP_IMPORTED_LIBRARY_SHARED) + set(JSONCPP_LIBRARY_SHARED ${JSONCPP_IMPORTED_LIBRARY_SHARED}) + endif() + + if(JSONCPP_IMPORTED_LIBRARY_STATIC) + set(JSONCPP_LIBRARY_STATIC ${JSONCPP_IMPORTED_LIBRARY_STATIC}) + endif() +endif() + +# Still nothing after looking for the config file: must go "old-school" +if(NOT JSONCPP_FOUND) + # Invoke pkgconfig for hints + find_package(PkgConfig QUIET) + set(_JSONCPP_INCLUDE_HINTS) + set(_JSONCPP_LIB_HINTS) + if(PKG_CONFIG_FOUND) + pkg_search_module(_JSONCPP_PC QUIET jsoncpp) + if(_JSONCPP_PC_INCLUDE_DIRS) + set(_JSONCPP_INCLUDE_HINTS ${_JSONCPP_PC_INCLUDE_DIRS}) + endif() + if(_JSONCPP_PC_LIBRARY_DIRS) + set(_JSONCPP_LIB_HINTS ${_JSONCPP_PC_LIBRARY_DIRS}) + endif() + if(_JSONCPP_PC_LIBRARIES) + set(_JSONCPP_LIB_NAMES ${_JSONCPP_PC_LIBRARIES}) + endif() + endif() + + if(NOT _JSONCPP_LIB_NAMES) + # OK, if pkg-config wasn't able to give us a library name suggestion, then we may + # have to resort to some intense old logic. + set(_JSONCPP_LIB_NAMES jsoncpp) + set(_JSONCPP_PATHSUFFIXES) + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + list(APPEND _JSONCPP_PATHSUFFIXES + linux-gcc) # bit of a generalization but close... + endif() + if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "Linux") + list(APPEND + _JSONCPP_LIB_NAMES + json_linux-gcc-${CMAKE_CXX_COMPILER_VERSION}_libmt + json_linux-gcc_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES + linux-gcc-${CMAKE_CXX_COMPILER_VERSION}) + + elseif(MSVC) + if(MSVC_VERSION EQUAL 1200) + list(APPEND _JSONCPP_LIB_NAMES json_vc6_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc6) + elseif(MSVC_VERSION EQUAL 1300) + list(APPEND _JSONCPP_LIB_NAMES json_vc7_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc7) + elseif(MSVC_VERSION EQUAL 1310) + list(APPEND _JSONCPP_LIB_NAMES json_vc71_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc71) + elseif(MSVC_VERSION EQUAL 1400) + list(APPEND _JSONCPP_LIB_NAMES json_vc8_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc80) + elseif(MSVC_VERSION EQUAL 1500) + list(APPEND _JSONCPP_LIB_NAMES json_vc9_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc90) + elseif(MSVC_VERSION EQUAL 1600) + list(APPEND _JSONCPP_LIB_NAMES json_vc10_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES msvc10 msvc100) + endif() + + elseif(MINGW) + list(APPEND _JSONCPP_LIB_NAMES + json_mingw_libmt) + list(APPEND _JSONCPP_PATHSUFFIXES mingw) + + else() + list(APPEND _JSONCPP_LIB_NAMES + json_suncc_libmt + json_vacpp_libmt) + endif() + endif() # end of old logic + + # Actually go looking. + find_path(JsonCpp_INCLUDE_DIR + NAMES + json/json.h + PATH_SUFFIXES jsoncpp + HINTS ${_JSONCPP_INCLUDE_HINTS}) + find_library(JsonCpp_LIBRARY + NAMES + ${_JSONCPP_LIB_NAMES} + PATHS libs + PATH_SUFFIXES ${_JSONCPP_PATHSUFFIXES} + HINTS ${_JSONCPP_LIB_HINTS}) + + find_package_handle_standard_args(JsonCpp + DEFAULT_MSG + JsonCpp_INCLUDE_DIR + JsonCpp_LIBRARY) + + if(JSONCPP_FOUND) + # We already know that the target doesn't exist, let's make it. + # TODO don't know why we get errors like: + # error: 'JsonCpp::JsonCpp-NOTFOUND', needed by 'bin/osvr_json_to_c', missing and no known rule to make it + # when we do the imported target commented out below. So, instead, we make an interface + # target with an alias. Hmm. + + #add_library(JsonCpp::JsonCpp UNKNOWN IMPORTED) + #set_target_properties(JsonCpp::JsonCpp PROPERTIES + # IMPORTED_LOCATION "${JsonCpp_LIBRARY}" + # INTERFACE_INCLUDE_DIRECTORIES "${JsonCpp_INCLUDE_DIR}" + # IMPORTED_LINK_INTERFACE_LANGUAGES "CXX") + + set(JSONCPP_LIBRARY "${JsonCpp_LIBRARY}") + set(JSONCPP_INCLUDE_DIRS "${JsonCpp_INCLUDE_DIR}") + unset(JSONCPP_LIBRARY_IS_SHARED) + + if(__jsoncpp_have_interface_support AND NOT TARGET jsoncpp_interface) + add_library(jsoncpp_interface INTERFACE) + set_target_properties(jsoncpp_interface PROPERTIES + INTERFACE_LINK_LIBRARIES "${JsonCpp_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${JsonCpp_INCLUDE_DIR}") + endif() + if(__jsoncpp_have_namespaced_targets) + if(NOT TARGET JsonCpp::JsonCpp) + add_library(JsonCpp::JsonCpp ALIAS jsoncpp_interface) + endif() + endif() + endif() +endif() + +if(JSONCPP_FOUND) + mark_as_advanced(jsoncpp_DIR JsonCpp_INCLUDE_DIR JsonCpp_LIBRARY) +endif() diff --git a/Lumos/External/OpenXR-SDK/src/cmake/FindOpenGLES.cmake b/Lumos/External/OpenXR-SDK/src/cmake/FindOpenGLES.cmake new file mode 100644 index 000000000..fc8aeb56c --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/FindOpenGLES.cmake @@ -0,0 +1,256 @@ +# Copyright 2020 Collabora, Ltd. +# SPDX-License-Identifier: BSL-1.0 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +# Original Author: +# 2020 Ryan Pavlik + +#[[.rst: +FindOpenGLES +--------------- + +Find the OpenGL ES graphics API. + +Components +^^^^^^^^^^ + +The following components are supported: + +* ``V1`` - OpenGL ES 1 (including emulation on OpenGL ES 2) +* ``V2`` - OpenGL ES 2 +* ``V3`` - OpenGL ES 3 +* ``V31` - OpenGL ES 3.1 - same as 3 but checking also for gl31.h +* ``V32` - OpenGL ES 3.2 - same as 3 but checking also for gl32.h + +If none are specified, the default is ``V2``. + +Targets +^^^^^^^ + +If successful, some subset of the following imported targets are created. + +* ``OpenGLES::OpenGLESv1`` +* ``OpenGLES::OpenGLESv2`` +* ``OpenGLES::OpenGLESv3`` +* ``OpenGLES::OpenGLESv31`` +* ``OpenGLES::OpenGLESv32`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variable may also be set to assist/control the operation of this module: + +``OpenGLES_ROOT_DIR`` + The root to search for OpenGLES. +#]] + +set(OpenGLES_ROOT_DIR + "${OpenGLES_ROOT_DIR}" + CACHE PATH "Root to search for OpenGLES") + +if(NOT OpenGLES_FIND_COMPONENTS) + set(OpenGLES_FIND_COMPONENTS V2) +endif() +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + set(_old_prefix_path "${CMAKE_PREFIX_PATH}") + # So pkg-config uses OpenGLES_ROOT_DIR too. + if(OpenGLES_ROOT_DIR) + list(APPEND CMAKE_PREFIX_PATH ${OpenGLES_ROOT_DIR}) + endif() + pkg_check_modules(PC_glesv1_cm QUIET glesv1_cm) + pkg_check_modules(PC_glesv2 QUIET glesv2) + # Restore + set(CMAKE_PREFIX_PATH "${_old_prefix_path}") +endif() +find_path( + OpenGLES_V1_INCLUDE_DIR + NAMES GLES/gl.h + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} + PATH_SUFFIXES include) +find_path( + OpenGLES_V2_INCLUDE_DIR + NAMES GLES2/gl2.h + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} + PATH_SUFFIXES include) +find_path( + OpenGLES_V3_INCLUDE_DIR + NAMES GLES3/gl3.h + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} + ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} + PATH_SUFFIXES include) +find_path( + OpenGLES_V31_INCLUDE_DIR + NAMES GLES3/gl31.h + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} + ${OpenGLES_V3_INCLUDE_DIR} ${PC_glesv2_INCLUDE_DIRS} + ${PC_glesv1_cm_INCLUDE_DIRS} + PATH_SUFFIXES include) +find_path( + OpenGLES_V32_INCLUDE_DIR + NAMES GLES3/gl32.h + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} + ${OpenGLES_V3_INCLUDE_DIR} ${OpenGLES_V31_INCLUDE_DIR} + ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} + PATH_SUFFIXES include) + +find_library( + OpenGLES_V1_LIBRARY + NAMES GLES GLESv1_CM + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${PC_glesv1_cm_LIBRARY_DIRS} + PATH_SUFFIXES lib) +find_library( + OpenGLES_V2_LIBRARY + NAMES GLESv2 OpenGLES # for Apple framework + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${PC_glesv2_LIBRARY_DIRS} + PATH_SUFFIXES lib) +find_library( + OpenGLES_V3_LIBRARY + NAMES GLESv3 + PATHS ${OpenGLES_ROOT_DIR} + HINTS ${PC_glesv2_LIBRARY_DIRS} + PATH_SUFFIXES lib) + +if(OpenGLES_V2_LIBRARY AND NOT OpenGLES_V3_LIBRARY) + set(OpenGLES_V3_LIBRARY ${OpenGLES_V2_LIBRARY}) +endif() + +set(_gles_required_vars) +foreach(_comp IN LISTS OpenGLES_FIND_COMPONENTS) + if(_comp STREQUAL "V1") + list(APPEND _gles_required_vars OpenGLES_V1_LIBRARY + OpenGLES_V1_INCLUDE_DIR) + if(OpenGLES_V1_INCLUDE_DIR AND OpenGLES_V1_LIBRARY) + set(OpenGLES_${_comp}_FOUND TRUE) + else() + set(OpenGLES_${_comp}_FOUND FALSE) + endif() + elseif(_comp STREQUAL "V2") + list(APPEND _gles_required_vars OpenGLES_V2_LIBRARY + OpenGLES_V2_INCLUDE_DIR) + if(OpenGLES_V2_INCLUDE_DIR AND OpenGLES_V2_LIBRARY) + set(OpenGLES_${_comp}_FOUND TRUE) + else() + set(OpenGLES_${_comp}_FOUND FALSE) + endif() + elseif(_comp STREQUAL "V3") + list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY + OpenGLES_V3_INCLUDE_DIR) + if(OpenGLES_V3_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) + set(OpenGLES_${_comp}_FOUND TRUE) + else() + set(OpenGLES_${_comp}_FOUND FALSE) + endif() + elseif(_comp STREQUAL "V31") + list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY + OpenGLES_V31_INCLUDE_DIR) + + if(OpenGLES_V31_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) + set(OpenGLES_${_comp}_FOUND TRUE) + else() + set(OpenGLES_${_comp}_FOUND FALSE) + endif() + elseif(_comp STREQUAL "V32") + list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY + OpenGLES_V32_INCLUDE_DIR) + if(OpenGLES_V32_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) + set(OpenGLES_${_comp}_FOUND TRUE) + else() + set(OpenGLES_${_comp}_FOUND FALSE) + endif() + else() + message( + WARNING "${_comp} is not a recognized OpenGL-ES component/version") + set(OpenGLES_${_comp}_FOUND FALSE) + endif() +endforeach() +if(_gles_required_vars) + list(REMOVE_DUPLICATES _gles_required_vars) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + OpenGLES + REQUIRED_VARS ${_gles_required_vars} + HANDLE_COMPONENTS) +if(OpenGLES_FOUND) + if(OpenGLES_V1_FOUND AND NOT TARGET OpenGLES::OpenGLESv1) + add_library(OpenGLES::OpenGLESv1 SHARED IMPORTED) + + set_target_properties( + OpenGLES::OpenGLESv1 + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${OpenGLES_V1_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OpenGLES_V1_LIBRARY}) + endif() + if(OpenGLES_V2_FOUND AND NOT TARGET OpenGLES::OpenGLESv2) + add_library(OpenGLES::OpenGLESv2 SHARED IMPORTED) + + set_target_properties( + OpenGLES::OpenGLESv2 + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${OpenGLES_V2_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OpenGLES_V2_LIBRARY}) + endif() + if(OpenGLES_V3_FOUND) + if(NOT TARGET OpenGLES::OpenGLESv3) + add_library(OpenGLES::OpenGLESv3 SHARED IMPORTED) + + set_target_properties( + OpenGLES::OpenGLESv3 + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${OpenGLES_V3_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) + endif() + if(OpenGLES_V31_FOUND AND NOT TARGET OpenGLES::OpenGLESv31) + add_library(OpenGLES::OpenGLESv31 SHARED IMPORTED) + + set_target_properties( + OpenGLES::OpenGLESv31 + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${OpenGLES_V31_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) + endif() + if(OpenGLES_V32_FOUND AND NOT TARGET OpenGLES::OpenGLESv32) + add_library(OpenGLES::OpenGLESv32 SHARED IMPORTED) + + set_target_properties( + OpenGLES::OpenGLESv32 + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${OpenGLES_V32_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) + endif() + endif() + mark_as_advanced( + OpenGLES_V1_LIBRARY + OpenGLES_V1_INCLUDE_DIR + OpenGLES_V2_LIBRARY + OpenGLES_V2_INCLUDE_DIR + OpenGLES_V3_LIBRARY + OpenGLES_V3_INCLUDE_DIR + OpenGLES_V31_INCLUDE_DIR + OpenGLES_V32_INCLUDE_DIR) +endif() +mark_as_advanced(OpenGLES_ROOT_DIR) + +include(FeatureSummary) +set_package_properties( + OpenGLES PROPERTIES + URL "https://www.khronos.org/opengles/" + DESCRIPTION + "A cross-platform graphics API, specialized for mobile and embedded, defined as a subset of desktop OpenGL." +) diff --git a/Lumos/External/OpenXR-SDK/src/cmake/FindVulkanHeaders.cmake b/Lumos/External/OpenXR-SDK/src/cmake/FindVulkanHeaders.cmake new file mode 100644 index 000000000..85f5bcd22 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/FindVulkanHeaders.cmake @@ -0,0 +1,88 @@ +# ~~~ +# Copyright (c) 2018-2019 Valve Corporation +# Copyright (c) 2018-2019 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ~~~ + +#.rst: +# FindVulkanHeaders +# ----------------- +# +# Try to find Vulkan Headers and Registry. +# +# This module is intended to be used by projects that build Vulkan +# "system" components such as the loader and layers. +# Vulkan applications should instead use the FindVulkan (or similar) +# find module that locates the headers and the loader library. +# +# When using this find module to locate the headers and registry +# in a Vulkan-Headers repository, the Vulkan-Headers repository +# should be built with 'install' target and the following environment +# or CMake variable set to the location of the install directory. +# +# VULKAN_HEADERS_INSTALL_DIR +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines no IMPORTED targets +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables:: +# +# VulkanHeaders_FOUND - True if VulkanHeaders was found +# VulkanHeaders_INCLUDE_DIRS - include directories for VulkanHeaders +# +# VulkanRegistry_FOUND - True if VulkanRegistry was found +# VulkanRegistry_DIRS - directories for VulkanRegistry +# +# The module will also define two cache variables:: +# +# VulkanHeaders_INCLUDE_DIR - the VulkanHeaders include directory +# VulkanRegistry_DIR - the VulkanRegistry directory +# + +# Use HINTS instead of PATH to search these locations before +# searching system environment variables like $PATH that may +# contain SDK directories. +find_path(VulkanHeaders_INCLUDE_DIR + NAMES vulkan/vulkan.h + HINTS + ${VULKAN_HEADERS_INSTALL_DIR}/include + "$ENV{VULKAN_HEADERS_INSTALL_DIR}/include" + "$ENV{VULKAN_SDK}/include") + +if(VulkanHeaders_INCLUDE_DIR) + get_filename_component(VULKAN_REGISTRY_PATH_HINT ${VulkanHeaders_INCLUDE_DIR} DIRECTORY) + find_path(VulkanRegistry_DIR + NAMES vk.xml + HINTS "${VULKAN_REGISTRY_PATH_HINT}/share/vulkan/registry") +endif() + +set(VulkanHeaders_INCLUDE_DIRS ${VulkanHeaders_INCLUDE_DIR}) +set(VulkanRegistry_DIRS ${VulkanRegistry_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(VulkanHeaders + DEFAULT_MSG + VulkanHeaders_INCLUDE_DIR) +find_package_handle_standard_args(VulkanRegistry + DEFAULT_MSG + VulkanRegistry_DIR) + +mark_as_advanced(VulkanHeaders_INCLUDE_DIR VulkanRegistry_DIR) diff --git a/Lumos/External/OpenXR-SDK/src/cmake/StdFilesystemFlags.cmake b/Lumos/External/OpenXR-SDK/src/cmake/StdFilesystemFlags.cmake new file mode 100644 index 000000000..e80d3919f --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/StdFilesystemFlags.cmake @@ -0,0 +1,183 @@ +# Copyright 2020, Collabora, Ltd. +# +# SPDX-License-Identifier: BSL-1.0 + +set(_FILESYSTEM_UTILS_DIR "${PROJECT_SOURCE_DIR}/src/common") + +if(MSVC AND MSVC_VERSION GREATER 1890) + set(HAVE_FILESYSTEM_WITHOUT_LIB + ON + CACHE INTERNAL "" FORCE + ) + if(MSVC_VERSION GREATER 1910) + # Visual Studio 2017 Update 3 added new filesystem impl, + # which only works in C++17 mode. + set(HAVE_FILESYSTEM_NEEDS_17 + ON + CACHE INTERNAL "" FORCE + ) + endif() +else() + include(CheckCXXSourceCompiles) + + ### + # Test Sources + ### + + # This is just example code that is known to not compile if std::filesystem isn't working right. + # It depends on having the proper includes and `using namespace` so it can use the `is_regular_file` + # function unqualified. + # It is at the end of every test file below. + set(_stdfs_test_source + "int main() { + (void)is_regular_file(\"/\"); + return 0; + } + " + ) + + # This is preprocessor code included in all test compiles, which pulls in the conditions + # originally found in filesystem_utils.cpp. + # + # It defines: + # USE_FINAL_FS = 1 if it thinks we have the full std::filesystem in as in C++17 + # USE_EXPERIMENTAL_FS = 1 if it thinks we don't have the full c++17 filesystem, but should have + # std::experimental::filesystem and + # + # Ideally the first condition (__cplusplus >= 201703L) would handle most cases, + # however you're not supposed to report that unless you're fully conformant with all + # of c++17, so you might have a c++17 build flag and the final filesystem library but + # a lower __cplusplus value if some other part of the standard is missing. + set(_stdfs_conditions "#include + ") + + # This should only compile if our common detection code decides on the + # **final** (non-experimental) filesystem library. + set(_stdfs_source + "${_stdfs_conditions} + #if defined(USE_FINAL_FS) && USE_FINAL_FS + #include + using namespace std::filesystem; + #endif + ${_stdfs_test_source} + " + ) + + # This should only compile if our common detection code decides on the + # **experimental** filesystem library. + set(_stdfs_experimental_source + "${_stdfs_conditions} + #if defined(USE_EXPERIMENTAL_FS) && USE_EXPERIMENTAL_FS + #include + using namespace std::experimental::filesystem; + #endif + ${_stdfs_test_source} + " + ) + + # This should compile if the common detection code decided that either + # the experimental or final filesystem library is available. + # We use this when trying to detect what library to link, if any: + # earlier checks are the ones that care about how we include the headers. + set(_stdfs_needlib_source + "${_stdfs_conditions} + #if defined(USE_FINAL_FS) && USE_FINAL_FS + #include + using namespace std::filesystem; + #endif + #if defined(USE_EXPERIMENTAL_FS) && USE_EXPERIMENTAL_FS + #include + using namespace std::experimental::filesystem; + #endif + ${_stdfs_test_source} + " + ) + + ### + # Identifying header/namespace and standards flags + ### + + # First, just look for the include. + # We're checking if it compiles, not if the include exists, + # because the source code uses the same conditionals to decide. + # (Static libraries are just object files, they don't get linked) + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + set(CMAKE_REQUIRED_INCLUDES "${_FILESYSTEM_UTILS_DIR}") + unset(CMAKE_REQUIRED_LIBRARIES) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0) + # GCC 11+ defaults to C++17 mode and acts badly in these tests if we tell it to use a different version. + set(HAVE_FILESYSTEM_IN_STD_17 ON) + set(HAVE_FILESYSTEM_IN_STD OFF) + else() + set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE") + check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD) + check_cxx_source_compiles("${_stdfs_experimental_source}" HAVE_FILESYSTEM_IN_STDEXPERIMENTAL) + + # See if the "final" version builds if we try to specify C++17 explicitly + set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE") + check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD_17) + unset(CMAKE_REQUIRED_FLAGS) + endif() + + # If we found the final version of filesystem when specifying C++17 explicitly, + # but found it no other way, then we record that we must use C++17 flags. + if(HAVE_FILESYSTEM_IN_STD_17 AND NOT HAVE_FILESYSTEM_IN_STD) + set(HAVE_FILESYSTEM_NEEDS_17 + ON + CACHE INTERNAL "" + ) + set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE") + else() + set(HAVE_FILESYSTEM_NEEDS_17 + OFF + CACHE INTERNAL "" + ) + endif() + + ### + # Identifying library to link + ### + + # Now, see if we need to link against libstdc++fs, and what it's called + # If we needed C++17 standard flags to find it, they've already been set above. + set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) + + # Try with no lib specified + check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_WITHOUT_LIB) + + # Try with stdc++fs + set(CMAKE_REQUIRED_LIBRARIES stdc++fs) + check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_NEEDING_LIBSTDCXXFS) + + # Try with c++fs (from clang's libc++) + set(CMAKE_REQUIRED_LIBRARIES c++fs) + check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_NEEDING_LIBCXXFS) + + # Clean up these variables before the next user. + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_TRY_COMPILE_TARGET_TYPE) + unset(CMAKE_REQUIRED_INCLUDES) +endif() + +# Use the observations of the code above to add the filesystem_utils.cpp +# file to a target, along with any required compiler settings and libraries. +# Also handles our BUILD_WITH_STD_FILESYSTEM option. +function(openxr_add_filesystem_utils TARGET_NAME) + target_sources(${TARGET_NAME} PRIVATE ${_FILESYSTEM_UTILS_DIR}/filesystem_utils.cpp) + target_include_directories(${TARGET_NAME} PRIVATE ${_FILESYSTEM_UTILS_DIR}) + if(NOT BUILD_WITH_STD_FILESYSTEM) + target_compile_definitions(${TARGET_NAME} PRIVATE DISABLE_STD_FILESYSTEM) + else() + if(HAVE_FILESYSTEM_NEEDS_17) + set_property(TARGET ${TARGET_NAME} PROPERTY CXX_STANDARD 17) + set_property(TARGET ${TARGET_NAME} PROPERTY CXX_STANDARD_REQUIRED TRUE) + endif() + if(NOT HAVE_FILESYSTEM_WITHOUT_LIB) + if(HAVE_FILESYSTEM_NEEDING_LIBSTDCXXFS) + target_link_libraries(${TARGET_NAME} PRIVATE stdc++fs) + elseif(HAVE_FILESYSTEM_NEEDING_LIBCXXFS) + target_link_libraries(${TARGET_NAME} PRIVATE c++fs) + endif() + endif() + endif() +endfunction() diff --git a/Lumos/External/OpenXR-SDK/src/cmake/cmake_uninstall.cmake.in b/Lumos/External/OpenXR-SDK/src/cmake/cmake_uninstall.cmake.in new file mode 100644 index 000000000..35f459a28 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,57 @@ +# Derived from the file in the CMake source code. +# Distributed under the OSI-approved BSD 3-Clause License. +# +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2020 Kitware, Inc. and Contributors +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Kitware, Inc. nor the names of Contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) diff --git a/Lumos/External/OpenXR-SDK/src/cmake/metaconfig.cmake.in b/Lumos/External/OpenXR-SDK/src/cmake/metaconfig.cmake.in new file mode 100644 index 000000000..462b0cc20 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/metaconfig.cmake.in @@ -0,0 +1,25 @@ +# Copyright (c) 2017 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# @WARNING@ + +unset(_UWP_SUFFIX) +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(_UWP_SUFFIX _uwp) +endif() +if(CMAKE_GENERATOR_PLATFORM_UPPER MATCHES "ARM.*") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_PLATFORM ARM64) + else() + set(_PLATFORM ARM) + endif() +else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_PLATFORM x64) + else() + set(_PLATFORM Win32) + endif() +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/${_PLATFORM}${_UWP_SUFFIX}/lib/@TARGET_SUBDIR@/@FN@.cmake") diff --git a/Lumos/External/OpenXR-SDK/src/cmake/presentation.cmake b/Lumos/External/OpenXR-SDK/src/cmake/presentation.cmake new file mode 100644 index 000000000..50c41803a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/cmake/presentation.cmake @@ -0,0 +1,152 @@ +# Copyright (c) 2017-2023, The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +set(PRESENTATION_BACKENDS xlib xcb wayland) +set(PRESENTATION_BACKEND + xlib + CACHE STRING "Presentation backend chosen at configure time" +) +set_property(CACHE PRESENTATION_BACKEND PROPERTY STRINGS ${PRESENTATION_BACKENDS}) + +list(FIND PRESENTATION_BACKENDS ${PRESENTATION_BACKEND} index) +if(index EQUAL -1) + message(FATAL_ERROR "Presentation backend must be one of ${PRESENTATION_BACKENDS}") +endif() + +message(STATUS "Presentation backend selected for hello_xr, loader_test, conformance: ${PRESENTATION_BACKEND}") + +find_package(X11) + +find_package(PkgConfig) + +if(PKG_CONFIG_FOUND) + pkg_search_module(XCB xcb xcb-glx) + + pkg_search_module(WAYLAND_CLIENT wayland-client) +endif() + +include(CMakeDependentOption) +cmake_dependent_option( + BUILD_WITH_XLIB_HEADERS "Build with support for X11/Xlib-related features." ON "X11_FOUND" OFF +) +cmake_dependent_option( + BUILD_WITH_XCB_HEADERS "Build with support for XCB-related features." ON "X11_FOUND AND XCB_FOUND" OFF +) +cmake_dependent_option( + BUILD_WITH_WAYLAND_HEADERS "Build with support for Wayland-related features." ON "WAYLAND_CLIENT_FOUND" + OFF +) + +message(STATUS "BUILD_WITH_XLIB_HEADERS: ${BUILD_WITH_XLIB_HEADERS}") +message(STATUS "BUILD_WITH_XCB_HEADERS: ${BUILD_WITH_XCB_HEADERS}") +message(STATUS "BUILD_WITH_WAYLAND_HEADERS: ${BUILD_WITH_WAYLAND_HEADERS}") + +if(PRESENTATION_BACKEND MATCHES "xlib") + if(NOT BUILD_WITH_XLIB_HEADERS) + message( + FATAL_ERROR + "xlib backend selected, but BUILD_WITH_XLIB_HEADERS either disabled or unavailable due to missing dependencies." + ) + endif() + if(BUILD_TESTS AND (NOT X11_Xxf86vm_LIB OR NOT X11_Xrandr_LIB)) + message(FATAL_ERROR "OpenXR tests using xlib backend requires Xxf86vm and Xrandr") + endif() + + if(TARGET openxr-gfxwrapper) + target_compile_definitions(openxr-gfxwrapper PUBLIC OS_LINUX_XLIB) + target_link_libraries(openxr-gfxwrapper PRIVATE ${X11_X11_LIB} ${X11_Xxf86vm_LIB} ${X11_Xrandr_LIB}) + + if(TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX) + # OpenGL::OpenGL already linked, we just need to add GLX. + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::GLX) + else() + target_link_libraries(openxr-gfxwrapper PUBLIC ${OPENGL_LIBRARIES} ${OPENGL_glx_LIBRARY}) + endif() + endif() +elseif(PRESENTATION_BACKEND MATCHES "xcb") + if(NOT BUILD_WITH_XCB_HEADERS) + message( + FATAL_ERROR + "xcb backend selected, but BUILD_WITH_XCB_HEADERS either disabled or unavailable due to missing dependencies." + ) + endif() + pkg_search_module(XCB_RANDR REQUIRED xcb-randr) + pkg_search_module(XCB_KEYSYMS REQUIRED xcb-keysyms) + pkg_search_module(XCB_GLX REQUIRED xcb-glx) + pkg_search_module(XCB_DRI2 REQUIRED xcb-dri2) + pkg_search_module(XCB_ICCCM REQUIRED xcb-icccm) + + if(TARGET openxr-gfxwrapper) + # XCB + XCB GLX is limited to OpenGL 2.1 + # target_compile_definitions(openxr-gfxwrapper PUBLIC OS_LINUX_XCB ) + # XCB + Xlib GLX 1.3 + target_compile_definitions(openxr-gfxwrapper PUBLIC OS_LINUX_XCB_GLX) + + target_link_libraries(openxr-gfxwrapper PRIVATE ${X11_X11_LIB} ${XCB_KEYSYMS_LIBRARIES} ${XCB_RANDR_LIBRARIES}) + + endif() +elseif(PRESENTATION_BACKEND MATCHES "wayland") + if(NOT BUILD_WITH_WAYLAND_HEADERS) + message( + FATAL_ERROR + "wayland backend selected, but BUILD_WITH_WAYLAND_HEADERS either disabled or unavailable due to missing dependencies." + ) + endif() + + pkg_search_module(WAYLAND_EGL REQUIRED wayland-egl) + pkg_search_module(WAYLAND_SCANNER REQUIRED wayland-scanner) + pkg_search_module(WAYLAND_PROTOCOLS REQUIRED wayland-protocols>=1.7) + pkg_search_module(EGL REQUIRED egl) + + if(TARGET openxr-gfxwrapper) + # generate wayland protocols + set(WAYLAND_PROTOCOLS_DIR ${PROJECT_BINARY_DIR}/wayland-protocols/) + file(MAKE_DIRECTORY ${WAYLAND_PROTOCOLS_DIR}) + + pkg_get_variable(WAYLAND_PROTOCOLS_DATADIR wayland-protocols pkgdatadir) + pkg_get_variable(WAYLAND_SCANNER wayland-scanner wayland_scanner) + + set(PROTOCOL xdg-shell-unstable-v6) + set(PROTOCOL_XML ${WAYLAND_PROTOCOLS_DATADIR}/unstable/xdg-shell/${PROTOCOL}.xml) + + if(NOT EXISTS ${PROTOCOL_XML}) + message(FATAL_ERROR "xdg-shell-unstable-v6.xml not found in " ${WAYLAND_PROTOCOLS_DATADIR} + "\nYour wayland-protocols package does not " "contain xdg-shell-unstable-v6." + ) + endif() + add_custom_command( + OUTPUT ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.c + COMMAND ${WAYLAND_SCANNER} code ${PROTOCOL_XML} ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.c + VERBATIM + ) + add_custom_command( + OUTPUT ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.h + COMMAND ${WAYLAND_SCANNER} client-header ${PROTOCOL_XML} ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.h + VERBATIM + ) + + target_sources(openxr-gfxwrapper + PRIVATE + ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.c + ${WAYLAND_PROTOCOLS_DIR}/${PROTOCOL}.h + ) + + target_include_directories(openxr-gfxwrapper PUBLIC ${WAYLAND_PROTOCOLS_DIR} ${WAYLAND_CLIENT_INCLUDE_DIRS}) + target_link_libraries( + openxr-gfxwrapper PRIVATE ${EGL_LIBRARIES} ${WAYLAND_CLIENT_LIBRARIES} ${WAYLAND_EGL_LIBRARIES} + ) + target_compile_definitions(openxr-gfxwrapper PUBLIC OS_LINUX_WAYLAND) + target_link_libraries(openxr-gfxwrapper PRIVATE ${EGL_LIBRARIES} ${WAYLAND_CLIENT_LIBRARIES}) + endif() +endif() + + +if(TARGET openxr-gfxwrapper AND NOT (PRESENTATION_BACKEND MATCHES "wayland")) + if(TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX) + # OpenGL::OpenGL already linked, we just need to add GLX. + target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::GLX) + else() + target_link_libraries(openxr-gfxwrapper PUBLIC ${OPENGL_LIBRARIES} ${OPENGL_glx_LIBRARY}) + endif() +endif() diff --git a/Lumos/External/OpenXR-SDK/src/common/extra_algorithms.h b/Lumos/External/OpenXR-SDK/src/common/extra_algorithms.h new file mode 100644 index 000000000..eec429e12 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/extra_algorithms.h @@ -0,0 +1,47 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017-2019 Valve Corporation +// Copyright (c) 2017-2019 LunarG, Inc. +// Copyright (c) 2019 Collabora, Ltd. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Author: Ryan Pavlik +// + +/*! + * @file + * + * Additional functions along the lines of the standard library algorithms. + */ + +#pragma once + +#include +#include + +/// Like std::remove_if, except it works on associative containers and it actually removes this. +/// +/// The iterator stuff in here is subtle - .erase() invalidates only that iterator, but it returns a non-invalidated iterator to the +/// next valid element which we can use instead of incrementing. +template +static inline void map_erase_if(T &container, Pred &&predicate) { + for (auto it = container.begin(); it != container.end();) { + if (predicate(*it)) { + it = container.erase(it); + } else { + ++it; + } + } +} + +/*! + * Moves all elements matching the predicate to the end of the vector then erases them. + * + * Combines the two parts of the erase-remove idiom to simplify things and avoid accidentally using the wrong erase overload. + */ +template +static inline void vector_remove_if_and_erase(std::vector &vec, Pred &&predicate) { + auto b = vec.begin(); + auto e = vec.end(); + vec.erase(std::remove_if(b, e, std::forward(predicate)), e); +} diff --git a/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.cpp b/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.cpp new file mode 100644 index 000000000..d3d4182fb --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.cpp @@ -0,0 +1,322 @@ +// Copyright (c) 2017 The Khronos Group Inc. +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Authors: Mark Young +// Nat Brown +// + +#include "filesystem_utils.hpp" + +#include "platform_utils.hpp" + +#include +#include + +#if defined DISABLE_STD_FILESYSTEM +#define USE_EXPERIMENTAL_FS 0 +#define USE_FINAL_FS 0 + +#else +#include "stdfs_conditions.h" +#endif + +#if USE_FINAL_FS == 1 +#include +#define FS_PREFIX std::filesystem +#elif USE_EXPERIMENTAL_FS == 1 +#include +#define FS_PREFIX std::experimental::filesystem +#elif defined(XR_USE_PLATFORM_WIN32) +// Windows fallback includes +#include +#include +#else +// Linux/Apple fallback includes +#include +#include +#include +#include +#include +#endif + +#if defined(XR_USE_PLATFORM_WIN32) +#define PATH_SEPARATOR ';' +#define DIRECTORY_SYMBOL '\\' +#define ALTERNATE_DIRECTORY_SYMBOL '/' +#else +#define PATH_SEPARATOR ':' +#define DIRECTORY_SYMBOL '/' +#endif + +#if (USE_FINAL_FS == 1) || (USE_EXPERIMENTAL_FS == 1) +// We can use one of the C++ filesystem packages + +bool FileSysUtilsIsRegularFile(const std::string& path) { return FS_PREFIX::is_regular_file(path); } + +bool FileSysUtilsIsDirectory(const std::string& path) { return FS_PREFIX::is_directory(path); } + +bool FileSysUtilsPathExists(const std::string& path) { return FS_PREFIX::exists(path); } + +bool FileSysUtilsIsAbsolutePath(const std::string& path) { + FS_PREFIX::path file_path(path); + return file_path.is_absolute(); +} + +bool FileSysUtilsGetCurrentPath(std::string& path) { + FS_PREFIX::path cur_path = FS_PREFIX::current_path(); + path = cur_path.string(); + return true; +} + +bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) { + FS_PREFIX::path path_var(file_path); + parent_path = path_var.parent_path().string(); + return true; +} + +bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) { + absolute = FS_PREFIX::absolute(path).string(); + return true; +} + +bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) { +#if defined(XR_USE_PLATFORM_WIN32) + // std::filesystem::canonical fails on UWP and must be avoided. Further, PathCchCanonicalize is not available on Windows 7 and + // PathCanonicalizeW is not available on UWP. However, symbolic links are not important on Windows since the loader uses the + // registry for indirection instead, and so this function can be a no-op on Windows. + canonical = path; +#else + canonical = FS_PREFIX::canonical(path).string(); +#endif + return true; +} + +bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) { + FS_PREFIX::path parent_path(parent); + FS_PREFIX::path child_path(child); + FS_PREFIX::path full_path = parent_path / child_path; + combined = full_path.string(); + return true; +} + +bool FileSysUtilsParsePathList(std::string& path_list, std::vector& paths) { + std::string::size_type start = 0; + std::string::size_type location = path_list.find(PATH_SEPARATOR); + while (location != std::string::npos) { + paths.push_back(path_list.substr(start, location)); + start = location + 1; + location = path_list.find(PATH_SEPARATOR, start); + } + paths.push_back(path_list.substr(start, location)); + return true; +} + +bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector& files) { + for (auto& dir_iter : FS_PREFIX::directory_iterator(path)) { + files.push_back(dir_iter.path().filename().string()); + } + return true; +} + +#elif defined(XR_OS_WINDOWS) + +// For pre C++17 compiler that doesn't support experimental filesystem + +bool FileSysUtilsIsRegularFile(const std::string& path) { + const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str()); + return attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY); +} + +bool FileSysUtilsIsDirectory(const std::string& path) { + const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str()); + return attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY); +} + +bool FileSysUtilsPathExists(const std::string& path) { + return (GetFileAttributesW(utf8_to_wide(path).c_str()) != INVALID_FILE_ATTRIBUTES); +} + +bool FileSysUtilsIsAbsolutePath(const std::string& path) { + bool pathStartsWithDir = (path.size() >= 1) && ((path[0] == DIRECTORY_SYMBOL) || (path[0] == ALTERNATE_DIRECTORY_SYMBOL)); + + bool pathStartsWithDrive = + (path.size() >= 3) && (path[1] == ':' && (path[2] == DIRECTORY_SYMBOL || path[2] == ALTERNATE_DIRECTORY_SYMBOL)); + + return pathStartsWithDir || pathStartsWithDrive; +} + +bool FileSysUtilsGetCurrentPath(std::string& path) { + wchar_t tmp_path[MAX_PATH]; + if (nullptr != _wgetcwd(tmp_path, MAX_PATH - 1)) { + path = wide_to_utf8(tmp_path); + return true; + } + return false; +} + +bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) { + std::string full_path; + if (FileSysUtilsGetAbsolutePath(file_path, full_path)) { + std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL); + parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator); + return true; + } + return false; +} + +bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) { + wchar_t tmp_path[MAX_PATH]; + if (0 != GetFullPathNameW(utf8_to_wide(path).c_str(), MAX_PATH, tmp_path, NULL)) { + absolute = wide_to_utf8(tmp_path); + return true; + } + return false; +} + +bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& absolute) { + // PathCchCanonicalize is not available on Windows 7 and PathCanonicalizeW is not available on UWP. However, symbolic links are + // not important on Windows since the loader uses the registry for indirection instead, and so this function can be a no-op on + // Windows. + absolute = path; + return true; +} + +bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) { + std::string::size_type parent_len = parent.length(); + if (0 == parent_len || "." == parent || ".\\" == parent || "./" == parent) { + combined = child; + return true; + } + char last_char = parent[parent_len - 1]; + if ((last_char == DIRECTORY_SYMBOL) || (last_char == ALTERNATE_DIRECTORY_SYMBOL)) { + parent_len--; + } + combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child; + return true; +} + +bool FileSysUtilsParsePathList(std::string& path_list, std::vector& paths) { + std::string::size_type start = 0; + std::string::size_type location = path_list.find(PATH_SEPARATOR); + while (location != std::string::npos) { + paths.push_back(path_list.substr(start, location)); + start = location + 1; + location = path_list.find(PATH_SEPARATOR, start); + } + paths.push_back(path_list.substr(start, location)); + return true; +} + +bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector& files) { + std::string searchPath; + FileSysUtilsCombinePaths(path, "*", searchPath); + + WIN32_FIND_DATAW file_data; + HANDLE file_handle = FindFirstFileW(utf8_to_wide(searchPath).c_str(), &file_data); + if (file_handle != INVALID_HANDLE_VALUE) { + do { + if (!(file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + files.push_back(wide_to_utf8(file_data.cFileName)); + } + } while (FindNextFileW(file_handle, &file_data)); + return true; + } + return false; +} + +#else // XR_OS_LINUX/XR_OS_APPLE fallback + +// simple POSIX-compatible implementation of the pieces used by OpenXR + +bool FileSysUtilsIsRegularFile(const std::string& path) { + struct stat path_stat; + stat(path.c_str(), &path_stat); + return S_ISREG(path_stat.st_mode); +} + +bool FileSysUtilsIsDirectory(const std::string& path) { + struct stat path_stat; + stat(path.c_str(), &path_stat); + return S_ISDIR(path_stat.st_mode); +} + +bool FileSysUtilsPathExists(const std::string& path) { return (access(path.c_str(), F_OK) != -1); } + +bool FileSysUtilsIsAbsolutePath(const std::string& path) { return (path[0] == DIRECTORY_SYMBOL); } + +bool FileSysUtilsGetCurrentPath(std::string& path) { + char tmp_path[PATH_MAX]; + if (nullptr != getcwd(tmp_path, PATH_MAX - 1)) { + path = tmp_path; + return true; + } + return false; +} + +bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) { + std::string full_path; + if (FileSysUtilsGetAbsolutePath(file_path, full_path)) { + std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL); + parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator); + return true; + } + return false; +} + +bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) { + // canonical path is absolute + return FileSysUtilsGetCanonicalPath(path, absolute); +} + +bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) { + char buf[PATH_MAX]; + if (nullptr != realpath(path.c_str(), buf)) { + canonical = buf; + return true; + } + return false; +} + +bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) { + std::string::size_type parent_len = parent.length(); + if (0 == parent_len || "." == parent || "./" == parent) { + combined = child; + return true; + } + char last_char = parent[parent_len - 1]; + if (last_char == DIRECTORY_SYMBOL) { + parent_len--; + } + combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child; + return true; +} + +bool FileSysUtilsParsePathList(std::string& path_list, std::vector& paths) { + std::string::size_type start = 0; + std::string::size_type location = path_list.find(PATH_SEPARATOR); + while (location != std::string::npos) { + paths.push_back(path_list.substr(start, location)); + start = location + 1; + location = path_list.find(PATH_SEPARATOR, start); + } + paths.push_back(path_list.substr(start, location)); + return true; +} + +bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector& files) { + DIR* dir = opendir(path.c_str()); + if (dir == nullptr) { + return false; + } + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + files.emplace_back(entry->d_name); + } + closedir(dir); + return true; +} + +#endif diff --git a/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.hpp b/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.hpp new file mode 100644 index 000000000..4a5c987e7 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/filesystem_utils.hpp @@ -0,0 +1,46 @@ +// Copyright (c) 2017 The Khronos Group Inc. +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Author: Mark Young +// + +#pragma once + +#include +#include + +// Determine if the path indicates a regular file (not a directory or symbolic link) +bool FileSysUtilsIsRegularFile(const std::string& path); + +// Determine if the path indicates a directory +bool FileSysUtilsIsDirectory(const std::string& path); + +// Determine if the provided path exists on the filesystem +bool FileSysUtilsPathExists(const std::string& path); + +// Get the current directory +bool FileSysUtilsGetCurrentPath(std::string& path); + +// Get the parent path of a file +bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path); + +// Determine if the provided path is an absolute path +bool FileSysUtilsIsAbsolutePath(const std::string& path); + +// Get the absolute path for a provided file +bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute); + +// Get the absolute path for a provided file +bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical); + +// Combine a parent and child directory +bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined); + +// Parse out individual paths in a path list +bool FileSysUtilsParsePathList(std::string& path_list, std::vector& paths); + +// Record all the filenames for files found in the provided path. +bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector& files); diff --git a/Lumos/External/OpenXR-SDK/src/common/hex_and_handles.h b/Lumos/External/OpenXR-SDK/src/common/hex_and_handles.h new file mode 100644 index 000000000..300669033 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/hex_and_handles.h @@ -0,0 +1,108 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017-2019 Valve Corporation +// Copyright (c) 2017-2019 LunarG, Inc. +// Copyright (c) 2019 Collabora, Ltd. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Author: Ryan Pavlik +// + +/*! + * @file + * + * Some utilities, primarily for working with OpenXR handles in a generic way. + */ + +#pragma once + +#include + +#include +#include + +inline std::string to_hex(const uint8_t* const data, size_t bytes) { + std::string out(2 + bytes * 2, '?'); + out[0] = '0'; + out[1] = 'x'; + static const char* hex = "0123456789abcdef"; + auto ch = out.end(); + for (size_t i = 0; i < bytes; ++i) { + auto b = data[i]; + *--ch = hex[(b >> 0) & 0xf]; + *--ch = hex[(b >> 4) & 0xf]; + } + return out; +} + +template +inline std::string to_hex(const T& data) { + return to_hex(reinterpret_cast(&data), sizeof(data)); +} + +#if XR_PTR_SIZE == 8 +/// Convert a handle into a same-sized integer. +template +static inline uint64_t MakeHandleGeneric(T handle) { + return reinterpret_cast(handle); +} + +/// Treat an integer as a handle +template +static inline T& TreatIntegerAsHandle(uint64_t& handle) { + return reinterpret_cast(handle); +} + +/// @overload +template +static inline T const& TreatIntegerAsHandle(uint64_t const& handle) { + return reinterpret_cast(handle); +} + +/// Does a correctly-sized integer represent a null handle? +static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == reinterpret_cast(handle); } + +#else + +/// Convert a handle into a same-sized integer: no-op on 32-bit systems +static inline uint64_t MakeHandleGeneric(uint64_t handle) { return handle; } + +/// Treat an integer as a handle: no-op on 32-bit systems +template +static inline T& TreatIntegerAsHandle(uint64_t& handle) { + return handle; +} + +/// @overload +template +static inline T const& TreatIntegerAsHandle(uint64_t const& handle) { + return handle; +} + +/// Does a correctly-sized integer represent a null handle? +static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == handle; } + +#endif + +/// Turns a uint64_t into a string formatted as hex. +/// +/// The core of the HandleToHexString implementation is in here. +inline std::string Uint64ToHexString(uint64_t val) { return to_hex(val); } + +/// Turns a uint32_t into a string formatted as hex. +inline std::string Uint32ToHexString(uint32_t val) { return to_hex(val); } + +/// Turns an OpenXR handle into a string formatted as hex. +template +inline std::string HandleToHexString(T handle) { + return to_hex(handle); +} + +/// Turns a pointer-sized integer into a string formatted as hex. +inline std::string UintptrToHexString(uintptr_t val) { return to_hex(val); } + +/// Convert a pointer to a string formatted as hex. +template +inline std::string PointerToHexString(T const* ptr) { + return to_hex(ptr); +} diff --git a/Lumos/External/OpenXR-SDK/src/common/loader_interfaces.h b/Lumos/External/OpenXR-SDK/src/common/loader_interfaces.h new file mode 100644 index 000000000..020c3456e --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/loader_interfaces.h @@ -0,0 +1,114 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Author: Mark Young +// + +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Forward declare. +typedef struct XrApiLayerCreateInfo XrApiLayerCreateInfo; + +// Function pointer prototype for the xrCreateApiLayerInstance function used in place of xrCreateInstance. +// This function allows us to pass special API layer information to each layer during the process of creating an Instance. +typedef XrResult(XRAPI_PTR *PFN_xrCreateApiLayerInstance)(const XrInstanceCreateInfo *info, + const XrApiLayerCreateInfo *apiLayerInfo, XrInstance *instance); + +// Loader/API Layer Interface versions +// 1 - First version, introduces negotiation structure and functions +#define XR_CURRENT_LOADER_API_LAYER_VERSION 1 + +// Loader/Runtime Interface versions +// 1 - First version, introduces negotiation structure and functions +#define XR_CURRENT_LOADER_RUNTIME_VERSION 1 + +// Version negotiation values +typedef enum XrLoaderInterfaceStructs { + XR_LOADER_INTERFACE_STRUCT_UNINTIALIZED = 0, + XR_LOADER_INTERFACE_STRUCT_LOADER_INFO, + XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST, + XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST, + XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO, + XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO, +} XrLoaderInterfaceStructs; + +#define XR_LOADER_INFO_STRUCT_VERSION 1 +typedef struct XrNegotiateLoaderInfo { + XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_LOADER_INFO + uint32_t structVersion; // XR_LOADER_INFO_STRUCT_VERSION + size_t structSize; // sizeof(XrNegotiateLoaderInfo) + uint32_t minInterfaceVersion; + uint32_t maxInterfaceVersion; + XrVersion minApiVersion; + XrVersion maxApiVersion; +} XrNegotiateLoaderInfo; + +#define XR_API_LAYER_INFO_STRUCT_VERSION 1 +typedef struct XrNegotiateApiLayerRequest { + XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST + uint32_t structVersion; // XR_API_LAYER_INFO_STRUCT_VERSION + size_t structSize; // sizeof(XrNegotiateApiLayerRequest) + uint32_t layerInterfaceVersion; // CURRENT_LOADER_API_LAYER_VERSION + XrVersion layerApiVersion; + PFN_xrGetInstanceProcAddr getInstanceProcAddr; + PFN_xrCreateApiLayerInstance createApiLayerInstance; +} XrNegotiateApiLayerRequest; + +#define XR_RUNTIME_INFO_STRUCT_VERSION 1 +typedef struct XrNegotiateRuntimeRequest { + XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST + uint32_t structVersion; // XR_RUNTIME_INFO_STRUCT_VERSION + size_t structSize; // sizeof(XrNegotiateRuntimeRequest) + uint32_t runtimeInterfaceVersion; // CURRENT_LOADER_RUNTIME_VERSION + XrVersion runtimeApiVersion; + PFN_xrGetInstanceProcAddr getInstanceProcAddr; +} XrNegotiateRuntimeRequest; + +// Function used to negotiate an interface betewen the loader and an API layer. Each library exposing one or +// more API layers needs to expose at least this function. +typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderApiLayerInterface)(const XrNegotiateLoaderInfo *loaderInfo, + const char *apiLayerName, + XrNegotiateApiLayerRequest *apiLayerRequest); + +// Function used to negotiate an interface betewen the loader and a runtime. Each runtime should expose +// at least this function. +typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderRuntimeInterface)(const XrNegotiateLoaderInfo *loaderInfo, + XrNegotiateRuntimeRequest *runtimeRequest); + +// Forward declare. +typedef struct XrApiLayerNextInfo XrApiLayerNextInfo; + +#define XR_API_LAYER_NEXT_INFO_STRUCT_VERSION 1 +struct XrApiLayerNextInfo { + XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO + uint32_t structVersion; // XR_API_LAYER_NEXT_INFO_STRUCT_VERSION + size_t structSize; // sizeof(XrApiLayerNextInfo) + char layerName[XR_MAX_API_LAYER_NAME_SIZE]; // Name of API layer which should receive this info + PFN_xrGetInstanceProcAddr nextGetInstanceProcAddr; // Pointer to next API layer's xrGetInstanceProcAddr + PFN_xrCreateApiLayerInstance nextCreateApiLayerInstance; // Pointer to next API layer's xrCreateApiLayerInstance + XrApiLayerNextInfo *next; // Pointer to the next API layer info in the sequence +}; + +#define XR_API_LAYER_MAX_SETTINGS_PATH_SIZE 512 +#define XR_API_LAYER_CREATE_INFO_STRUCT_VERSION 1 +typedef struct XrApiLayerCreateInfo { + XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO + uint32_t structVersion; // XR_API_LAYER_CREATE_INFO_STRUCT_VERSION + size_t structSize; // sizeof(XrApiLayerCreateInfo) + void *loaderInstance; // Pointer to the LoaderInstance class + char settings_file_location[XR_API_LAYER_MAX_SETTINGS_PATH_SIZE]; // Location to the found settings file (or empty '\0') + XrApiLayerNextInfo *nextInfo; // Pointer to the next API layer's Info +} XrApiLayerCreateInfo; + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/Lumos/External/OpenXR-SDK/src/common/object_info.cpp b/Lumos/External/OpenXR-SDK/src/common/object_info.cpp new file mode 100644 index 000000000..3f6b39c43 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/object_info.cpp @@ -0,0 +1,276 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017-2019 Valve Corporation +// Copyright (c) 2017-2019 LunarG, Inc. +// Copyright (c) 2019 Collabora, Ltd. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Authors: Mark Young +// Ryan Pavlik +// Dave Houlton +// + +#include "object_info.h" + +#include "extra_algorithms.h" +#include "hex_and_handles.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include "memory.h" + +std::string XrSdkLogObjectInfo::ToString() const { + std::ostringstream oss; + oss << Uint64ToHexString(handle); + if (!name.empty()) { + oss << " (" << name << ")"; + } + return oss.str(); +} + +void ObjectInfoCollection::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) { + // If name is empty, we should erase it + if (object_name.empty()) { + RemoveObject(object_handle, object_type); + return; + } + + // Otherwise, add it or update the name + XrSdkLogObjectInfo new_obj = {object_handle, object_type}; + + // If it already exists, update the name + auto lookup_info = LookUpStoredObjectInfo(new_obj); + if (lookup_info != nullptr) { + lookup_info->name = object_name; + return; + } + + // It doesn't exist, so add a new info block + new_obj.name = object_name; + object_info_.push_back(new_obj); +} + +void ObjectInfoCollection::RemoveObject(uint64_t object_handle, XrObjectType object_type) { + vector_remove_if_and_erase( + object_info_, [=](XrSdkLogObjectInfo const& info) { return info.handle == object_handle && info.type == object_type; }); +} + +XrSdkLogObjectInfo const* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const { + auto e = object_info_.end(); + auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); }); + if (it != e) { + return &(*it); + } + return nullptr; +} + +XrSdkLogObjectInfo* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) { + auto e = object_info_.end(); + auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); }); + if (it != e) { + return &(*it); + } + return nullptr; +} + +bool ObjectInfoCollection::LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const { + auto info_lookup = LookUpStoredObjectInfo(info.objectHandle, info.objectType); + if (info_lookup != nullptr) { + info.objectName = info_lookup->name.c_str(); + return true; + } + return false; +} + +bool ObjectInfoCollection::LookUpObjectName(XrSdkLogObjectInfo& info) const { + auto info_lookup = LookUpStoredObjectInfo(info); + if (info_lookup != nullptr) { + info.name = info_lookup->name; + return true; + } + return false; +} + +static std::vector PopulateObjectNameInfo(std::vector const& obj) { + std::vector ret; + ret.reserve(obj.size()); + std::transform(obj.begin(), obj.end(), std::back_inserter(ret), [](XrSdkLogObjectInfo const& info) { + return XrDebugUtilsObjectNameInfoEXT{XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, nullptr, info.type, info.handle, + info.name.c_str()}; + }); + return ret; +} + +NamesAndLabels::NamesAndLabels(std::vector obj, std::vector lab) + : sdk_objects(std::move(obj)), objects(PopulateObjectNameInfo(sdk_objects)), labels(std::move(lab)) {} + +void NamesAndLabels::PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& callback_data) const { + callback_data.objects = objects.empty() ? nullptr : const_cast(objects.data()); + callback_data.objectCount = static_cast(objects.size()); + callback_data.sessionLabels = labels.empty() ? nullptr : const_cast(labels.data()); + callback_data.sessionLabelCount = static_cast(labels.size()); +} + +void DebugUtilsData::LookUpSessionLabels(XrSession session, std::vector& labels) const { + auto session_label_iterator = session_labels_.find(session); + if (session_label_iterator != session_labels_.end()) { + auto& XrSdkSessionLabels = *session_label_iterator->second; + // Copy the debug utils labels in reverse order in the the labels vector. + std::transform(XrSdkSessionLabels.rbegin(), XrSdkSessionLabels.rend(), std::back_inserter(labels), + [](XrSdkSessionLabelPtr const& label) { return label->debug_utils_label; }); + } +} + +XrSdkSessionLabel::XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual) + : label_name(label_info.labelName), debug_utils_label(label_info), is_individual_label(individual) { + // Update the c string pointer to the one we hold. + debug_utils_label.labelName = label_name.c_str(); +} + +XrSdkSessionLabelPtr XrSdkSessionLabel::make(const XrDebugUtilsLabelEXT& label_info, bool individual) { + XrSdkSessionLabelPtr ret(new XrSdkSessionLabel(label_info, individual)); + return ret; +} +void DebugUtilsData::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) { + object_info_.AddObjectName(object_handle, object_type, object_name); +} + +// We always want to remove the old individual label before we do anything else. +// So, do that in it's own method +void DebugUtilsData::RemoveIndividualLabel(XrSdkSessionLabelList& label_vec) { + if (!label_vec.empty() && label_vec.back()->is_individual_label) { + label_vec.pop_back(); + } +} + +XrSdkSessionLabelList* DebugUtilsData::GetSessionLabelList(XrSession session) { + auto session_label_iterator = session_labels_.find(session); + if (session_label_iterator == session_labels_.end()) { + return nullptr; + } + return session_label_iterator->second.get(); +} + +XrSdkSessionLabelList& DebugUtilsData::GetOrCreateSessionLabelList(XrSession session) { + XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session); + if (vec_ptr == nullptr) { + std::unique_ptr vec(new XrSdkSessionLabelList); + vec_ptr = vec.get(); + session_labels_[session] = std::move(vec); + } + return *vec_ptr; +} + +void DebugUtilsData::BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info) { + auto& vec = GetOrCreateSessionLabelList(session); + + // Individual labels do not stay around in the transition into a new label region + RemoveIndividualLabel(vec); + + // Start the new label region + vec.emplace_back(XrSdkSessionLabel::make(label_info, false)); +} + +void DebugUtilsData::EndLabelRegion(XrSession session) { + XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session); + if (vec_ptr == nullptr) { + return; + } + + // Individual labels do not stay around in the transition out of label region + RemoveIndividualLabel(*vec_ptr); + + // Remove the last label region + if (!vec_ptr->empty()) { + vec_ptr->pop_back(); + } +} + +void DebugUtilsData::InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info) { + auto& vec = GetOrCreateSessionLabelList(session); + + // Remove any individual layer that might already be there + RemoveIndividualLabel(vec); + + // Insert a new individual label + vec.emplace_back(XrSdkSessionLabel::make(label_info, true)); +} + +void DebugUtilsData::DeleteObject(uint64_t object_handle, XrObjectType object_type) { + object_info_.RemoveObject(object_handle, object_type); + + if (object_type == XR_OBJECT_TYPE_SESSION) { + auto session = TreatIntegerAsHandle(object_handle); + XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session); + if (vec_ptr != nullptr) { + session_labels_.erase(session); + } + } +} + +void DebugUtilsData::DeleteSessionLabels(XrSession session) { session_labels_.erase(session); } + +NamesAndLabels DebugUtilsData::PopulateNamesAndLabels(std::vector objects) const { + std::vector labels; + for (auto& obj : objects) { + // Check for any names that have been associated with the objects and set them up here + object_info_.LookUpObjectName(obj); + // If this is a session, see if there are any labels associated with it for us to add + // to the callback content. + if (XR_OBJECT_TYPE_SESSION == obj.type) { + LookUpSessionLabels(obj.GetTypedHandle(), labels); + } + } + + return {objects, labels}; +} + +void DebugUtilsData::WrapCallbackData(AugmentedCallbackData* aug_data, + const XrDebugUtilsMessengerCallbackDataEXT* callback_data) const { + // If there's nothing to add, just return the original data as the augmented copy + aug_data->exported_data = callback_data; + if (object_info_.Empty() || callback_data->objectCount == 0) { + return; + } + + // Inspect each of the callback objects + bool name_found = false; + for (uint32_t obj = 0; obj < callback_data->objectCount; ++obj) { + auto& current_obj = callback_data->objects[obj]; + name_found |= (nullptr != object_info_.LookUpStoredObjectInfo(current_obj.objectHandle, current_obj.objectType)); + + // If this is a session, record any labels associated with it + if (XR_OBJECT_TYPE_SESSION == current_obj.objectType) { + XrSession session = TreatIntegerAsHandle(current_obj.objectHandle); + LookUpSessionLabels(session, aug_data->labels); + } + } + + // If we found nothing to add, return the original data + if (!name_found && aug_data->labels.empty()) { + return; + } + + // Found additional data - modify an internal copy and return that as the exported data + memcpy(&aug_data->modified_data, callback_data, sizeof(XrDebugUtilsMessengerCallbackDataEXT)); + aug_data->new_objects.assign(callback_data->objects, callback_data->objects + callback_data->objectCount); + + // Record (overwrite) the names of all incoming objects provided in our internal list + for (auto& obj : aug_data->new_objects) { + object_info_.LookUpObjectName(obj); + } + + // Update local copy & point export to it + aug_data->modified_data.objects = aug_data->new_objects.data(); + aug_data->modified_data.sessionLabelCount = static_cast(aug_data->labels.size()); + aug_data->modified_data.sessionLabels = aug_data->labels.empty() ? nullptr : aug_data->labels.data(); + aug_data->exported_data = &aug_data->modified_data; + return; +} diff --git a/Lumos/External/OpenXR-SDK/src/common/object_info.h b/Lumos/External/OpenXR-SDK/src/common/object_info.h new file mode 100644 index 000000000..247ede0dc --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/object_info.h @@ -0,0 +1,229 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017-2019 Valve Corporation +// Copyright (c) 2017-2019 LunarG, Inc. +// Copyright (c) 2019 Collabora, Ltd. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Authors: Mark Young , Ryan Pavlik + +#include +#include +#include +#include + +struct XrSdkGenericObject { + //! Type-erased handle value + uint64_t handle; + + //! Kind of object this handle refers to + XrObjectType type; + /// Un-erase the type of the handle and get it properly typed again. + /// + /// Note: Does not check the type before doing it! + template + HandleType& GetTypedHandle() { + return TreatIntegerAsHandle(handle); + } + + //! @overload + template + HandleType const& GetTypedHandle() const { + return TreatIntegerAsHandle(handle); + } + + //! Create from a typed handle and object type + template + XrSdkGenericObject(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {} + + //! Create from an untyped handle value (integer) and object type + XrSdkGenericObject(uint64_t h, XrObjectType t) : handle(h), type(t) {} +}; + +struct XrSdkLogObjectInfo { + //! Type-erased handle value + uint64_t handle; + + //! Kind of object this handle refers to + XrObjectType type; + + //! To be assigned by the application - not part of this object's identity + std::string name; + + /// Un-erase the type of the handle and get it properly typed again. + /// + /// Note: Does not check the type before doing it! + template + HandleType& GetTypedHandle() { + return TreatIntegerAsHandle(handle); + } + + //! @overload + template + HandleType const& GetTypedHandle() const { + return TreatIntegerAsHandle(handle); + } + + XrSdkLogObjectInfo() = default; + + //! Create from a typed handle and object type + template + XrSdkLogObjectInfo(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {} + + //! Create from an untyped handle value (integer) and object type + XrSdkLogObjectInfo(uint64_t h, XrObjectType t) : handle(h), type(t) {} + //! Create from an untyped handle value (integer), object type, and name + XrSdkLogObjectInfo(uint64_t h, XrObjectType t, const char* n) : handle(h), type(t), name(n == nullptr ? "" : n) {} + + std::string ToString() const; +}; + +//! True if the two object infos have the same handle value and handle type +static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrSdkLogObjectInfo const& b) { + return a.handle == b.handle && a.type == b.type; +} + +//! @overload +static inline bool Equivalent(XrDebugUtilsObjectNameInfoEXT const& a, XrSdkLogObjectInfo const& b) { + return a.objectHandle == b.handle && a.objectType == b.type; +} + +//! @overload +static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrDebugUtilsObjectNameInfoEXT const& b) { return Equivalent(b, a); } + +/// Object info registered with calls to xrSetDebugUtilsObjectNameEXT +class ObjectInfoCollection { + public: + void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name); + + void RemoveObject(uint64_t object_handle, XrObjectType object_type); + + //! Find the stored object info, if any, matching handle and type. + //! Return nullptr if not found. + XrSdkLogObjectInfo const* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const; + + //! Find the stored object info, if any, matching handle and type. + //! Return nullptr if not found. + XrSdkLogObjectInfo* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info); + + //! Find the stored object info, if any. + //! Return nullptr if not found. + XrSdkLogObjectInfo const* LookUpStoredObjectInfo(uint64_t handle, XrObjectType type) const { + return LookUpStoredObjectInfo({handle, type}); + } + + //! Find the object name, if any, and update debug utils info accordingly. + //! Return true if found and updated. + bool LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const; + + //! Find the object name, if any, and update logging info accordingly. + //! Return true if found and updated. + bool LookUpObjectName(XrSdkLogObjectInfo& info) const; + + //! Is the collection empty? + bool Empty() const { return object_info_.empty(); } + + private: + // Object names that have been set for given objects + std::vector object_info_; +}; + +struct XrSdkSessionLabel; +using XrSdkSessionLabelPtr = std::unique_ptr; +using XrSdkSessionLabelList = std::vector; + +struct XrSdkSessionLabel { + static XrSdkSessionLabelPtr make(const XrDebugUtilsLabelEXT& label_info, bool individual); + + std::string label_name; + XrDebugUtilsLabelEXT debug_utils_label; + bool is_individual_label; + + private: + XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual); +}; + +/// The metadata for a collection of objects. Must persist unmodified during the entire debug messenger call! +struct NamesAndLabels { + NamesAndLabels() = default; + NamesAndLabels(std::vector obj, std::vector lab); + /// C++ structure owning the data (strings) backing the objects vector. + std::vector sdk_objects; + + std::vector objects; + std::vector labels; + + /// Populate the debug utils callback data structure. + void PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& data) const; + // XrDebugUtilsMessengerCallbackDataEXT MakeCallbackData() const; +}; + +struct AugmentedCallbackData { + std::vector labels; + std::vector new_objects; + XrDebugUtilsMessengerCallbackDataEXT modified_data; + const XrDebugUtilsMessengerCallbackDataEXT* exported_data; +}; + +/// Tracks all the data (handle names and session labels) required to fully augment XR_EXT_debug_utils-related calls. +class DebugUtilsData { + public: + DebugUtilsData() = default; + + DebugUtilsData(const DebugUtilsData&) = delete; + DebugUtilsData& operator=(const DebugUtilsData&) = delete; + + bool Empty() const { return object_info_.Empty() && session_labels_.empty(); } + + //! Core of implementation for xrSetDebugUtilsObjectNameEXT + void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name); + + /// Core of implementation for xrSessionBeginDebugUtilsLabelRegionEXT + void BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info); + + /// Core of implementation for xrSessionEndDebugUtilsLabelRegionEXT + void EndLabelRegion(XrSession session); + + /// Core of implementation for xrSessionInsertDebugUtilsLabelEXT + void InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info); + + /// Removes all labels associated with a session - call in xrDestroySession and xrDestroyInstance (for all child sessions) + void DeleteSessionLabels(XrSession session); + + /// Retrieve labels for the given session, if any, and push them in reverse order on the vector. + void LookUpSessionLabels(XrSession session, std::vector& labels) const; + + /// Removes all data related to this object - including session labels if it's a session. + /// + /// Does not take care of handling child objects - you must do this yourself. + void DeleteObject(uint64_t object_handle, XrObjectType object_type); + + /// Given the collection of objects, populate their names and list of labels + NamesAndLabels PopulateNamesAndLabels(std::vector objects) const; + + void WrapCallbackData(AugmentedCallbackData* aug_data, + const XrDebugUtilsMessengerCallbackDataEXT* provided_callback_data) const; + + private: + void RemoveIndividualLabel(XrSdkSessionLabelList& label_vec); + XrSdkSessionLabelList* GetSessionLabelList(XrSession session); + XrSdkSessionLabelList& GetOrCreateSessionLabelList(XrSession session); + + // Session labels: one vector of them per session. + std::unordered_map> session_labels_; + + // Names for objects. + ObjectInfoCollection object_info_; +}; diff --git a/Lumos/External/OpenXR-SDK/src/common/platform_utils.hpp b/Lumos/External/OpenXR-SDK/src/common/platform_utils.hpp new file mode 100644 index 000000000..6ea95f4ef --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/platform_utils.hpp @@ -0,0 +1,356 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017-2019 Valve Corporation +// Copyright (c) 2017-2019 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Initial Authors: Mark Young , Dave Houlton +// + +#pragma once + +#include "xr_dependencies.h" +#include +#include + +// OpenXR paths and registry key locations +#define OPENXR_RELATIVE_PATH "openxr/" +#define OPENXR_IMPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/implicit.d" +#define OPENXR_EXPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/explicit.d" +#ifdef XR_OS_WINDOWS +#define OPENXR_REGISTRY_LOCATION "SOFTWARE\\Khronos\\OpenXR\\" +#define OPENXR_IMPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Implicit" +#define OPENXR_EXPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Explicit" +#endif + +// OpenXR Loader environment variables of interest +#define OPENXR_RUNTIME_JSON_ENV_VAR "XR_RUNTIME_JSON" +#define OPENXR_API_LAYER_PATH_ENV_VAR "XR_API_LAYER_PATH" + +// This is a CMake generated file with #defines for any functions/includes +// that it found present and build-time configuration. +// If you don't have this file, on non-Windows you'll need to define +// one of HAVE_SECURE_GETENV or HAVE___SECURE_GETENV depending on which +// of secure_getenv or __secure_getenv are present +#ifdef OPENXR_HAVE_COMMON_CONFIG +#include "common_config.h" +#endif // OPENXR_HAVE_COMMON_CONFIG + +// Consumers of this file must ensure this function is implemented. For example, the loader will implement this function so that it +// can route messages through the loader's logging system. +void LogPlatformUtilsError(const std::string& message); + +// Environment variables +#if defined(XR_OS_LINUX) || defined(XR_OS_APPLE) + +#include +#include +#include + +namespace detail { + +static inline char* ImplGetEnv(const char* name) { return getenv(name); } + +static inline int ImplSetEnv(const char* name, const char* value, int overwrite) { return setenv(name, value, overwrite); } + +static inline char* ImplGetSecureEnv(const char* name) { +#ifdef HAVE_SECURE_GETENV + return secure_getenv(name); +#elif defined(HAVE___SECURE_GETENV) + return __secure_getenv(name); +#else +#pragma message( \ + "Warning: Falling back to non-secure getenv for environmental" \ + "lookups! Consider updating to a different libc.") + + return ImplGetEnv(name); +#endif +} +} // namespace detail + +#endif // defined(XR_OS_LINUX) || defined(XR_OS_APPLE) +#if defined(XR_OS_LINUX) + +static inline std::string PlatformUtilsGetEnv(const char* name) { + auto str = detail::ImplGetEnv(name); + if (str == nullptr) { + return {}; + } + return str; +} + +static inline std::string PlatformUtilsGetSecureEnv(const char* name) { + auto str = detail::ImplGetSecureEnv(name); + if (str == nullptr) { + str = detail::ImplGetEnv(name); + if (str != nullptr && !std::string(str).empty()) { + LogPlatformUtilsError(std::string("!!! WARNING !!! Environment variable ") + name + + " is being ignored due to running with secure execution. The value '" + str + + "' will NOT be used."); + } + return {}; + } + return str; +} + +static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; } + +static inline bool PlatformUtilsSetEnv(const char* name, const char* value) { + const int shouldOverwrite = 1; + int result = detail::ImplSetEnv(name, value, shouldOverwrite); + return (result == 0); +} + +#elif defined(XR_OS_APPLE) + +static inline std::string PlatformUtilsGetEnv(const char* name) { + auto str = detail::ImplGetEnv(name); + if (str == nullptr) { + return {}; + } + return str; +} + +static inline std::string PlatformUtilsGetSecureEnv(const char* name) { + auto str = detail::ImplGetSecureEnv(name); + if (str == nullptr) { + return {}; + } + return str; +} + +static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; } + +static inline bool PlatformUtilsSetEnv(const char* name, const char* value) { + const int shouldOverwrite = 1; + int result = detail::ImplSetEnv(name, value, shouldOverwrite); + return (result == 0); +} + +// Prefix for the Apple global runtime JSON file name +static const std::string rt_dir_prefix = "/usr/local/share/openxr/"; +static const std::string rt_filename = "/active_runtime.json"; + +static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) { + file_name = rt_dir_prefix; + file_name += std::to_string(major_version); + file_name += rt_filename; + return true; +} + +#elif defined(XR_OS_WINDOWS) + +inline std::wstring utf8_to_wide(const std::string& utf8Text) { + if (utf8Text.empty()) { + return {}; + } + + std::wstring wideText; + const int wideLength = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), nullptr, 0); + if (wideLength == 0) { + LogPlatformUtilsError("utf8_to_wide get size error: " + std::to_string(::GetLastError())); + return {}; + } + + // MultiByteToWideChar returns number of chars of the input buffer, regardless of null terminitor + wideText.resize(wideLength, 0); + wchar_t* wideString = const_cast(wideText.data()); // mutable data() only exists in c++17 + const int length = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), wideString, wideLength); + if (length != wideLength) { + LogPlatformUtilsError("utf8_to_wide convert string error: " + std::to_string(::GetLastError())); + return {}; + } + + return wideText; +} + +inline std::string wide_to_utf8(const std::wstring& wideText) { + if (wideText.empty()) { + return {}; + } + + std::string narrowText; + int narrowLength = ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), nullptr, 0, nullptr, nullptr); + if (narrowLength == 0) { + LogPlatformUtilsError("wide_to_utf8 get size error: " + std::to_string(::GetLastError())); + return {}; + } + + // WideCharToMultiByte returns number of chars of the input buffer, regardless of null terminitor + narrowText.resize(narrowLength, 0); + char* narrowString = const_cast(narrowText.data()); // mutable data() only exists in c++17 + const int length = + ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), narrowString, narrowLength, nullptr, nullptr); + if (length != narrowLength) { + LogPlatformUtilsError("wide_to_utf8 convert string error: " + std::to_string(::GetLastError())); + return {}; + } + + return narrowText; +} + +// Returns true if the current process has an integrity level > SECURITY_MANDATORY_MEDIUM_RID. +static inline bool IsHighIntegrityLevel() { + // Execute this check once and save the value as a static bool. + static bool isHighIntegrityLevel = ([] { + HANDLE processToken; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_QUERY_SOURCE, &processToken)) { + // Maximum possible size of SID_AND_ATTRIBUTES is maximum size of a SID + size of attributes DWORD. + uint8_t mandatoryLabelBuffer[SECURITY_MAX_SID_SIZE + sizeof(DWORD)]{}; + DWORD bufferSize; + if (GetTokenInformation(processToken, TokenIntegrityLevel, mandatoryLabelBuffer, sizeof(mandatoryLabelBuffer), + &bufferSize) != 0) { + const auto mandatoryLabel = reinterpret_cast(mandatoryLabelBuffer); + if (mandatoryLabel->Label.Sid != 0) { + const DWORD subAuthorityCount = *GetSidSubAuthorityCount(mandatoryLabel->Label.Sid); + const DWORD integrityLevel = *GetSidSubAuthority(mandatoryLabel->Label.Sid, subAuthorityCount - 1); + CloseHandle(processToken); + return integrityLevel > SECURITY_MANDATORY_MEDIUM_RID; + } + } + + CloseHandle(processToken); + } + + return false; + })(); + + return isHighIntegrityLevel; +} + +// Returns true if the given environment variable exists. +// The name is a case-sensitive UTF8 string. +static inline bool PlatformUtilsGetEnvSet(const char* name) { + const std::wstring wname = utf8_to_wide(name); + const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0); + // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error. + return 0 != valSize; +} + +// Returns the environment variable value for the given name. +// Returns an empty string if the environment variable doesn't exist or if it exists but is empty. +// Use PlatformUtilsGetEnvSet to tell if it exists. +// The name is a case-sensitive UTF8 string. +static inline std::string PlatformUtilsGetEnv(const char* name) { + const std::wstring wname = utf8_to_wide(name); + const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0); + // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error. + // The size includes the null-terminator, so a size of 1 is means the variable was explicitly set to empty. + if (valSize == 0 || valSize == 1) { + return {}; + } + + // GetEnvironmentVariable returns size including null terminator for "query size" call. + std::wstring wValue(valSize, 0); + wchar_t* wValueData = &wValue[0]; + + // GetEnvironmentVariable returns string length, excluding null terminator for "get value" + // call if there was enough capacity. Else it returns the required capacity (including null terminator). + const DWORD length = ::GetEnvironmentVariableW(wname.c_str(), wValueData, (DWORD)wValue.size()); + if ((length == 0) || (length >= wValue.size())) { // If error or the variable increased length between calls... + LogPlatformUtilsError("GetEnvironmentVariable get value error: " + std::to_string(::GetLastError())); + return {}; + } + + wValue.resize(length); // Strip the null terminator. + + return wide_to_utf8(wValue); +} + +// Acts the same as PlatformUtilsGetEnv except returns an empty string if IsHighIntegrityLevel. +static inline std::string PlatformUtilsGetSecureEnv(const char* name) { + // No secure version for Windows so the below integrity check is needed. + const std::string envValue = PlatformUtilsGetEnv(name); + + // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes. + if (IsHighIntegrityLevel()) { + if (!envValue.empty()) { + LogPlatformUtilsError(std::string("!!! WARNING !!! Environment variable ") + name + + " is being ignored due to running from an elevated context. The value '" + envValue + + "' will NOT be used."); + } + return {}; + } + + return envValue; +} + +// Sets an environment variable via UTF8 strings. +// The name is case-sensitive. +// Overwrites the variable if it already exists. +// Returns true if it could be set. +static inline bool PlatformUtilsSetEnv(const char* name, const char* value) { + const std::wstring wname = utf8_to_wide(name); + const std::wstring wvalue = utf8_to_wide(value); + BOOL result = ::SetEnvironmentVariableW(wname.c_str(), wvalue.c_str()); + return (result != 0); +} + +#elif defined(XR_OS_ANDROID) + +static inline bool PlatformUtilsGetEnvSet(const char* /* name */) { + // Stub func + return false; +} + +static inline std::string PlatformUtilsGetEnv(const char* /* name */) { + // Stub func + return {}; +} + +static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) { + // Stub func + return {}; +} + +static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) { + // Stub func + return false; +} + +#include + +// Intended to be only used as a fallback on Android, with a more open, "native" technique used in most cases +static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) { + // Prefix for the runtime JSON file name + static const char* rt_dir_prefixes[] = {"/oem", "/vendor", "/system"}; + static const std::string rt_filename = "/active_runtime.json"; + static const std::string subdir = "/etc/openxr/"; + for (const auto prefix : rt_dir_prefixes) { + auto path = prefix + subdir + std::to_string(major_version) + rt_filename; + struct stat buf; + if (0 == stat(path.c_str(), &buf)) { + file_name = path; + return true; + } + } + return false; +} +#else // Not Linux, Apple, nor Windows + +static inline bool PlatformUtilsGetEnvSet(const char* /* name */) { + // Stub func + return false; +} + +static inline std::string PlatformUtilsGetEnv(const char* /* name */) { + // Stub func + return {}; +} + +static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) { + // Stub func + return {}; +} + +static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) { + // Stub func + return false; +} + +static inline bool PlatformGetGlobalRuntimeFileName(uint16_t /* major_version */, std::string const& /* file_name */) { + // Stub func + return false; +} + +#endif diff --git a/Lumos/External/OpenXR-SDK/src/common/stdfs_conditions.h b/Lumos/External/OpenXR-SDK/src/common/stdfs_conditions.h new file mode 100644 index 000000000..0a551f08c --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/stdfs_conditions.h @@ -0,0 +1,45 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT + +#ifndef _STDFS_CONDITIONS_H +#define _STDFS_CONDITIONS_H + +// If the C++ macro is set to the version containing C++17, it must support +// the final C++17 package +#if __cplusplus >= 201703L +#define USE_EXPERIMENTAL_FS 0 +#define USE_FINAL_FS 1 + +#elif defined(_MSC_VER) && _MSC_VER >= 1900 + +#if defined(_HAS_CXX17) && _HAS_CXX17 +// When MSC supports c++17 use package. +#define USE_EXPERIMENTAL_FS 0 +#define USE_FINAL_FS 1 +#endif // !_HAS_CXX17 + +// GCC supports the experimental filesystem items starting in GCC 6 +#elif (__GNUC__ >= 6) +#define USE_EXPERIMENTAL_FS 1 +#define USE_FINAL_FS 0 + +// If Clang, check for feature support +#elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem) +#if __cpp_lib_filesystem +#define USE_EXPERIMENTAL_FS 0 +#define USE_FINAL_FS 1 +#else +#define USE_EXPERIMENTAL_FS 1 +#define USE_FINAL_FS 0 +#endif + +// If all above fails, fall back to standard C++ and OS-specific items +#else +#define USE_EXPERIMENTAL_FS 0 +#define USE_FINAL_FS 0 +#endif + +#endif // !_STDFS_CONDITIONS_H diff --git a/Lumos/External/OpenXR-SDK/src/common/unique_asset.h b/Lumos/External/OpenXR-SDK/src/common/unique_asset.h new file mode 100644 index 000000000..a8ae8077b --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/unique_asset.h @@ -0,0 +1,33 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +#pragma once + +#ifdef XR_USE_PLATFORM_ANDROID + +#include +#include + +namespace deleters { +struct AAssetDeleter { + void operator()(AAsset* asset) const noexcept { + if (asset != nullptr) { + AAsset_close(asset); + } + } +}; + +struct AAssetDirDeleter { + void operator()(AAssetDir* dir) const noexcept { + if (dir != nullptr) { + AAssetDir_close(dir); + } + } +}; + +} // namespace deleters + +using UniqueAsset = std::unique_ptr; +using UniqueAssetDir = std::unique_ptr; + +#endif diff --git a/Lumos/External/OpenXR-SDK/src/common/vulkan_debug_object_namer.hpp b/Lumos/External/OpenXR-SDK/src/common/vulkan_debug_object_namer.hpp new file mode 100644 index 000000000..451219d20 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/vulkan_debug_object_namer.hpp @@ -0,0 +1,63 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#include +#include + +/// Utility class for assigning debug names to Vulkan objects we create. +class VulkanDebugObjectNamer { + public: + /// Construct without initializing + VulkanDebugObjectNamer() = default; + + /// Construct and initialize + VulkanDebugObjectNamer(VkInstance instance, VkDevice device) : m_vkDevice{device} { + vkSetDebugUtilsObjectNameEXT = + (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT"); + } + /// Copy constructor + VulkanDebugObjectNamer(const VulkanDebugObjectNamer&) = default; + /// Copy assignment operator + VulkanDebugObjectNamer& operator=(const VulkanDebugObjectNamer&) = default; + + /// Destructor + ~VulkanDebugObjectNamer() { Reset(); } + + /// (Re-) Initialize the namer: takes a valid `VkInstance` and `VkDevice` + void Init(VkInstance instance, VkDevice device) { + Reset(); + *this = VulkanDebugObjectNamer(instance, device); + } + + /// The main operation of the namer: actually set an object name. + /// + /// If the namer is not initialized, this exits silently. + VkResult SetName(VkObjectType objectType, uint64_t objectHandle, const char* pObjectName) const { + if (m_vkDevice == nullptr) { + return VK_SUCCESS; + } + if (vkSetDebugUtilsObjectNameEXT != nullptr) { + VkDebugUtilsObjectNameInfoEXT nameInfo{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, nullptr, objectType, + objectHandle, pObjectName}; + return vkSetDebugUtilsObjectNameEXT(m_vkDevice, &nameInfo); + } + return VK_SUCCESS; + } + + /// De-initialize the namer, forgetting the device and the function pointer loaded from the instance. + void Reset() { + vkSetDebugUtilsObjectNameEXT = nullptr; + m_vkDevice = VK_NULL_HANDLE; + } + + private: + VkDevice m_vkDevice{VK_NULL_HANDLE}; + PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT{nullptr}; +}; + +#endif diff --git a/Lumos/External/OpenXR-SDK/src/common/xr_dependencies.h b/Lumos/External/OpenXR-SDK/src/common/xr_dependencies.h new file mode 100644 index 000000000..5c7bd0477 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/xr_dependencies.h @@ -0,0 +1,93 @@ +// Copyright (c) 2018-2023, The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// This file includes headers with types which openxr.h depends on in order +// to compile when platforms, graphics apis, and the like are enabled. + +#pragma once + +#ifdef XR_USE_PLATFORM_ANDROID +#include +#include +#include +#endif // XR_USE_PLATFORM_ANDROID + +#ifdef XR_USE_PLATFORM_WIN32 + +#include +#if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)) +// Enable desktop partition APIs, such as RegOpenKeyEx, LoadLibraryEx, PathFileExists etc. +#undef WINAPI_PARTITION_DESKTOP +#define WINAPI_PARTITION_DESKTOP 1 +#endif + +#ifndef NOMINMAX +#define NOMINMAX +#endif // !NOMINMAX + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif // !WIN32_LEAN_AND_MEAN + +#include +#include + +#endif // XR_USE_PLATFORM_WIN32 + +#ifdef XR_USE_GRAPHICS_API_D3D11 +#include +#endif // XR_USE_GRAPHICS_API_D3D11 + +#ifdef XR_USE_GRAPHICS_API_D3D12 +#include +#endif // XR_USE_GRAPHICS_API_D3D12 + +#ifdef XR_USE_PLATFORM_XLIB +#include +#include +#endif // XR_USE_PLATFORM_XLIB + +#ifdef XR_USE_PLATFORM_XCB +#include +#endif // XR_USE_PLATFORM_XCB + +#ifdef XR_USE_GRAPHICS_API_OPENGL +#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB) +#include +#endif // (XR_USE_PLATFORM_XLIB || XR_USE_PLATFORM_XCB) +#ifdef XR_USE_PLATFORM_XCB +#include +#endif // XR_USE_PLATFORM_XCB +#ifdef XR_USE_PLATFORM_MACOS +#include +#endif // XR_USE_PLATFORM_MACOS +#endif // XR_USE_GRAPHICS_API_OPENGL + +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES +#include +#endif // XR_USE_GRAPHICS_API_OPENGL_ES + +#ifdef XR_USE_GRAPHICS_API_VULKAN +#include +#endif // XR_USE_GRAPHICS_API_VULKAN + +#ifdef XR_USE_PLATFORM_WAYLAND +#include "wayland-client.h" +#endif // XR_USE_PLATFORM_WAYLAND + +#ifdef XR_USE_GRAPHICS_API_OPENGL +#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB) +#ifdef Success +#undef Success +#endif // Success + +#ifdef Always +#undef Always +#endif // Always + +#ifdef None +#undef None +#endif // None +#endif // defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB) +#endif // XR_USE_GRAPHICS_API_OPENGL diff --git a/Lumos/External/OpenXR-SDK/src/common/xr_linear.h b/Lumos/External/OpenXR-SDK/src/common/xr_linear.h new file mode 100644 index 000000000..5b0da645a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common/xr_linear.h @@ -0,0 +1,865 @@ +// Copyright (c) 2017 The Khronos Group Inc. +// Copyright (c) 2016 Oculus VR, LLC. +// +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Author: J.M.P. van Waveren +// + +#ifndef XR_LINEAR_H_ +#define XR_LINEAR_H_ + +#include + +/* +================================================================================================ + +Description : Vector, matrix and quaternion math. +Author : J.M.P. van Waveren +Date : 12/10/2016 +Language : C99 +Format : Indent 4 spaces - no tabs. +Copyright : Copyright (c) 2016 Oculus VR, LLC. All Rights reserved. + + +DESCRIPTION +=========== + +All matrices are column-major. + +INTERFACE +========= + +XrVector2f +XrVector3f +XrVector4f +XrQuaternionf +XrPosef +XrMatrix4x4f + +inline static void XrVector3f_Set(XrVector3f* v, const float value); +inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b); +inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b); +inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b); +inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b); +inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value); +inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction); +inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor); +inline static void XrVector3f_Normalize(XrVector3f* v); +inline static float XrVector3f_Length(const XrVector3f* v); + +inline static void XrQuaternionf_CreateIdentity(XrQuaternionf* q); +inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians); +inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction); +inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b); +inline static void XrQuaternionf_Invert(XrQuaternionf* result, const XrQuaternionf* q); +inline static void XrQuaternionf_Normalize(XrQuaternionf* q); +inline static void XrQuaternionf_RotateVector3f(XrVector3f* result, const XrQuaternionf* a, const XrVector3f* v); + +inline static void XrPosef_CreateIdentity(XrPosef* result); +inline static void XrPosef_TransformVector3f(XrVector3f* result, const XrPosef* a, const XrVector3f* v); +inline static void XrPosef_Multiply(XrPosef* result, const XrPosef* a, const XrPosef* b); +inline static void XrPosef_Invert(XrPosef* result, const XrPosef* a); + +inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result); +inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z); +inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY, + const float degreesZ); +inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z); +inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation, + const XrQuaternionf* rotation, const XrVector3f* scale); +inline static void XrMatrix4x4f_CreateFromRigidTransform(XrMatrix4x4f* result, const XrPosef* s); +inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const float tanAngleLeft, + const float tanAngleRight, const float tanAngleUp, float const tanAngleDown, + const float nearZ, const float farZ); +inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const XrFovf fov, + const float nearZ, const float farZ); +inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* quat); +inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins, + const XrVector3f* maxs); + +inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon); +inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon); +inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon); +inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon); + +inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src); +inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src); +inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src); + +inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b); +inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src); +inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src); +inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src); + +inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v); +inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v); + +inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix, + const XrVector3f* mins, const XrVector3f* maxs); +inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs); + +================================================================================================ +*/ + +#include +#include +#include + +#define MATH_PI 3.14159265358979323846f + +#define DEFAULT_NEAR_Z 0.015625f // exact floating point representation +#define INFINITE_FAR_Z 0.0f + +static const XrColor4f XrColorRed = {1.0f, 0.0f, 0.0f, 1.0f}; +static const XrColor4f XrColorGreen = {0.0f, 1.0f, 0.0f, 1.0f}; +static const XrColor4f XrColorBlue = {0.0f, 0.0f, 1.0f, 1.0f}; +static const XrColor4f XrColorYellow = {1.0f, 1.0f, 0.0f, 1.0f}; +static const XrColor4f XrColorPurple = {1.0f, 0.0f, 1.0f, 1.0f}; +static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f}; +static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f}; +static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f}; + +typedef enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D } GraphicsAPI; + +// Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience. +typedef struct XrMatrix4x4f { + float m[16]; +} XrMatrix4x4f; + +inline static float XrRcpSqrt(const float x) { + const float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 ) + const float rcp = (x >= SMALLEST_NON_DENORMAL) ? 1.0f / sqrtf(x) : 1.0f; + return rcp; +} + +inline static void XrVector3f_Set(XrVector3f* v, const float value) { + v->x = value; + v->y = value; + v->z = value; +} + +inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) { + result->x = a->x + b->x; + result->y = a->y + b->y; + result->z = a->z + b->z; +} + +inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) { + result->x = a->x - b->x; + result->y = a->y - b->y; + result->z = a->z - b->z; +} + +inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) { + result->x = (a->x < b->x) ? a->x : b->x; + result->y = (a->y < b->y) ? a->y : b->y; + result->z = (a->z < b->z) ? a->z : b->z; +} + +inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) { + result->x = (a->x > b->x) ? a->x : b->x; + result->y = (a->y > b->y) ? a->y : b->y; + result->z = (a->z > b->z) ? a->z : b->z; +} + +inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value) { + result->x = (fabsf(a->x) > value) ? ((a->x > 0.0f) ? (a->x - value) : (a->x + value)) : 0.0f; + result->y = (fabsf(a->y) > value) ? ((a->y > 0.0f) ? (a->y - value) : (a->y + value)) : 0.0f; + result->z = (fabsf(a->z) > value) ? ((a->z > 0.0f) ? (a->z - value) : (a->z + value)) : 0.0f; +} + +inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction) { + result->x = a->x + fraction * (b->x - a->x); + result->y = a->y + fraction * (b->y - a->y); + result->z = a->z + fraction * (b->z - a->z); +} + +inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor) { + result->x = a->x * scaleFactor; + result->y = a->y * scaleFactor; + result->z = a->z * scaleFactor; +} + +inline static float XrVector3f_Dot(const XrVector3f* a, const XrVector3f* b) { return a->x * b->x + a->y * b->y + a->z * b->z; } + +// Compute cross product, which generates a normal vector. +// Direction vector can be determined by right-hand rule: Pointing index finder in +// direction a and middle finger in direction b, thumb will point in Cross(a, b). +inline static void XrVector3f_Cross(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) { + result->x = a->y * b->z - a->z * b->y; + result->y = a->z * b->x - a->x * b->z; + result->z = a->x * b->y - a->y * b->x; +} + +inline static void XrVector3f_Normalize(XrVector3f* v) { + const float lengthRcp = XrRcpSqrt(v->x * v->x + v->y * v->y + v->z * v->z); + v->x *= lengthRcp; + v->y *= lengthRcp; + v->z *= lengthRcp; +} + +inline static float XrVector3f_Length(const XrVector3f* v) { return sqrtf(v->x * v->x + v->y * v->y + v->z * v->z); } + +inline static void XrQuaternionf_CreateIdentity(XrQuaternionf* q) { + q->x = 0.0f; + q->y = 0.0f; + q->z = 0.0f; + q->w = 1.0f; +} + +inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians) { + float s = sinf(angleInRadians / 2.0f); + float lengthRcp = XrRcpSqrt(axis->x * axis->x + axis->y * axis->y + axis->z * axis->z); + result->x = s * axis->x * lengthRcp; + result->y = s * axis->y * lengthRcp; + result->z = s * axis->z * lengthRcp; + result->w = cosf(angleInRadians / 2.0f); +} + +inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction) { + const float s = a->x * b->x + a->y * b->y + a->z * b->z + a->w * b->w; + const float fa = 1.0f - fraction; + const float fb = (s < 0.0f) ? -fraction : fraction; + const float x = a->x * fa + b->x * fb; + const float y = a->y * fa + b->y * fb; + const float z = a->z * fa + b->z * fb; + const float w = a->w * fa + b->w * fb; + const float lengthRcp = XrRcpSqrt(x * x + y * y + z * z + w * w); + result->x = x * lengthRcp; + result->y = y * lengthRcp; + result->z = z * lengthRcp; + result->w = w * lengthRcp; +} + +inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b) { + result->x = (b->w * a->x) + (b->x * a->w) + (b->y * a->z) - (b->z * a->y); + result->y = (b->w * a->y) - (b->x * a->z) + (b->y * a->w) + (b->z * a->x); + result->z = (b->w * a->z) + (b->x * a->y) - (b->y * a->x) + (b->z * a->w); + result->w = (b->w * a->w) - (b->x * a->x) - (b->y * a->y) - (b->z * a->z); +} + +inline static void XrQuaternionf_Invert(XrQuaternionf* result, const XrQuaternionf* q) { + result->x = -q->x; + result->y = -q->y; + result->z = -q->z; + result->w = q->w; +} + +inline static void XrQuaternionf_Normalize(XrQuaternionf* q) { + const float lengthRcp = XrRcpSqrt(q->x * q->x + q->y * q->y + q->z * q->z + q->w * q->w); + q->x *= lengthRcp; + q->y *= lengthRcp; + q->z *= lengthRcp; + q->w *= lengthRcp; +} + +inline static void XrQuaternionf_RotateVector3f(XrVector3f* result, const XrQuaternionf* a, const XrVector3f* v) { + XrQuaternionf q = {v->x, v->y, v->z, 0.0f}; + XrQuaternionf aq; + XrQuaternionf_Multiply(&aq, &q, a); + XrQuaternionf aInv; + XrQuaternionf_Invert(&aInv, a); + XrQuaternionf aqaInv; + XrQuaternionf_Multiply(&aqaInv, &aInv, &aq); + + result->x = aqaInv.x; + result->y = aqaInv.y; + result->z = aqaInv.z; +} + +inline static void XrPosef_CreateIdentity(XrPosef* result) { + XrQuaternionf_CreateIdentity(&result->orientation); + XrVector3f_Set(&result->position, 0); +} + +inline static void XrPosef_TransformVector3f(XrVector3f* result, const XrPosef* a, const XrVector3f* v) { + XrVector3f r0; + XrQuaternionf_RotateVector3f(&r0, &a->orientation, v); + XrVector3f_Add(result, &r0, &a->position); +} + +inline static void XrPosef_Multiply(XrPosef* result, const XrPosef* a, const XrPosef* b) { + XrQuaternionf_Multiply(&result->orientation, &b->orientation, &a->orientation); + XrPosef_TransformVector3f(&result->position, a, &b->position); +} + +inline static void XrPosef_Invert(XrPosef* result, const XrPosef* a) { + XrQuaternionf_Invert(&result->orientation, &a->orientation); + XrVector3f aPosNeg; + XrVector3f_Scale(&aPosNeg, &a->position, -1.0f); + XrQuaternionf_RotateVector3f(&result->position, &result->orientation, &aPosNeg); +} + +// Use left-multiplication to accumulate transformations. +inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b) { + result->m[0] = a->m[0] * b->m[0] + a->m[4] * b->m[1] + a->m[8] * b->m[2] + a->m[12] * b->m[3]; + result->m[1] = a->m[1] * b->m[0] + a->m[5] * b->m[1] + a->m[9] * b->m[2] + a->m[13] * b->m[3]; + result->m[2] = a->m[2] * b->m[0] + a->m[6] * b->m[1] + a->m[10] * b->m[2] + a->m[14] * b->m[3]; + result->m[3] = a->m[3] * b->m[0] + a->m[7] * b->m[1] + a->m[11] * b->m[2] + a->m[15] * b->m[3]; + + result->m[4] = a->m[0] * b->m[4] + a->m[4] * b->m[5] + a->m[8] * b->m[6] + a->m[12] * b->m[7]; + result->m[5] = a->m[1] * b->m[4] + a->m[5] * b->m[5] + a->m[9] * b->m[6] + a->m[13] * b->m[7]; + result->m[6] = a->m[2] * b->m[4] + a->m[6] * b->m[5] + a->m[10] * b->m[6] + a->m[14] * b->m[7]; + result->m[7] = a->m[3] * b->m[4] + a->m[7] * b->m[5] + a->m[11] * b->m[6] + a->m[15] * b->m[7]; + + result->m[8] = a->m[0] * b->m[8] + a->m[4] * b->m[9] + a->m[8] * b->m[10] + a->m[12] * b->m[11]; + result->m[9] = a->m[1] * b->m[8] + a->m[5] * b->m[9] + a->m[9] * b->m[10] + a->m[13] * b->m[11]; + result->m[10] = a->m[2] * b->m[8] + a->m[6] * b->m[9] + a->m[10] * b->m[10] + a->m[14] * b->m[11]; + result->m[11] = a->m[3] * b->m[8] + a->m[7] * b->m[9] + a->m[11] * b->m[10] + a->m[15] * b->m[11]; + + result->m[12] = a->m[0] * b->m[12] + a->m[4] * b->m[13] + a->m[8] * b->m[14] + a->m[12] * b->m[15]; + result->m[13] = a->m[1] * b->m[12] + a->m[5] * b->m[13] + a->m[9] * b->m[14] + a->m[13] * b->m[15]; + result->m[14] = a->m[2] * b->m[12] + a->m[6] * b->m[13] + a->m[10] * b->m[14] + a->m[14] * b->m[15]; + result->m[15] = a->m[3] * b->m[12] + a->m[7] * b->m[13] + a->m[11] * b->m[14] + a->m[15] * b->m[15]; +} + +// Creates the transpose of the given matrix. +inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src) { + result->m[0] = src->m[0]; + result->m[1] = src->m[4]; + result->m[2] = src->m[8]; + result->m[3] = src->m[12]; + + result->m[4] = src->m[1]; + result->m[5] = src->m[5]; + result->m[6] = src->m[9]; + result->m[7] = src->m[13]; + + result->m[8] = src->m[2]; + result->m[9] = src->m[6]; + result->m[10] = src->m[10]; + result->m[11] = src->m[14]; + + result->m[12] = src->m[3]; + result->m[13] = src->m[7]; + result->m[14] = src->m[11]; + result->m[15] = src->m[15]; +} + +// Returns a 3x3 minor of a 4x4 matrix. +inline static float XrMatrix4x4f_Minor(const XrMatrix4x4f* matrix, int r0, int r1, int r2, int c0, int c1, int c2) { + return matrix->m[4 * r0 + c0] * + (matrix->m[4 * r1 + c1] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c1] * matrix->m[4 * r1 + c2]) - + matrix->m[4 * r0 + c1] * + (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c2]) + + matrix->m[4 * r0 + c2] * + (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c1] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c1]); +} + +// Calculates the inverse of a 4x4 matrix. +inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src) { + const float rcpDet = + 1.0f / (src->m[0] * XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) - src->m[1] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) + + src->m[2] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) - src->m[3] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2)); + + result->m[0] = XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) * rcpDet; + result->m[1] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 1, 2, 3) * rcpDet; + result->m[2] = XrMatrix4x4f_Minor(src, 0, 1, 3, 1, 2, 3) * rcpDet; + result->m[3] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 1, 2, 3) * rcpDet; + result->m[4] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) * rcpDet; + result->m[5] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 2, 3) * rcpDet; + result->m[6] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 2, 3) * rcpDet; + result->m[7] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 2, 3) * rcpDet; + result->m[8] = XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) * rcpDet; + result->m[9] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 3) * rcpDet; + result->m[10] = XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 3) * rcpDet; + result->m[11] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 3) * rcpDet; + result->m[12] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2) * rcpDet; + result->m[13] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 2) * rcpDet; + result->m[14] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 2) * rcpDet; + result->m[15] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 2) * rcpDet; +} + +// Calculates the inverse of a rigid body transform. +inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src) { + result->m[0] = src->m[0]; + result->m[1] = src->m[4]; + result->m[2] = src->m[8]; + result->m[3] = 0.0f; + result->m[4] = src->m[1]; + result->m[5] = src->m[5]; + result->m[6] = src->m[9]; + result->m[7] = 0.0f; + result->m[8] = src->m[2]; + result->m[9] = src->m[6]; + result->m[10] = src->m[10]; + result->m[11] = 0.0f; + result->m[12] = -(src->m[0] * src->m[12] + src->m[1] * src->m[13] + src->m[2] * src->m[14]); + result->m[13] = -(src->m[4] * src->m[12] + src->m[5] * src->m[13] + src->m[6] * src->m[14]); + result->m[14] = -(src->m[8] * src->m[12] + src->m[9] * src->m[13] + src->m[10] * src->m[14]); + result->m[15] = 1.0f; +} + +// Creates an identity matrix. +inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result) { + result->m[0] = 1.0f; + result->m[1] = 0.0f; + result->m[2] = 0.0f; + result->m[3] = 0.0f; + result->m[4] = 0.0f; + result->m[5] = 1.0f; + result->m[6] = 0.0f; + result->m[7] = 0.0f; + result->m[8] = 0.0f; + result->m[9] = 0.0f; + result->m[10] = 1.0f; + result->m[11] = 0.0f; + result->m[12] = 0.0f; + result->m[13] = 0.0f; + result->m[14] = 0.0f; + result->m[15] = 1.0f; +} + +// Creates a translation matrix. +inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z) { + result->m[0] = 1.0f; + result->m[1] = 0.0f; + result->m[2] = 0.0f; + result->m[3] = 0.0f; + result->m[4] = 0.0f; + result->m[5] = 1.0f; + result->m[6] = 0.0f; + result->m[7] = 0.0f; + result->m[8] = 0.0f; + result->m[9] = 0.0f; + result->m[10] = 1.0f; + result->m[11] = 0.0f; + result->m[12] = x; + result->m[13] = y; + result->m[14] = z; + result->m[15] = 1.0f; +} + +// Creates a rotation matrix. +// If -Z=forward, +Y=up, +X=right, then radiansX=pitch, radiansY=yaw, radiansZ=roll. +inline static void XrMatrix4x4f_CreateRotationRadians(XrMatrix4x4f* result, const float radiansX, const float radiansY, + const float radiansZ) { + const float sinX = sinf(radiansX); + const float cosX = cosf(radiansX); + const XrMatrix4x4f rotationX = {{1, 0, 0, 0, 0, cosX, sinX, 0, 0, -sinX, cosX, 0, 0, 0, 0, 1}}; + const float sinY = sinf(radiansY); + const float cosY = cosf(radiansY); + const XrMatrix4x4f rotationY = {{cosY, 0, -sinY, 0, 0, 1, 0, 0, sinY, 0, cosY, 0, 0, 0, 0, 1}}; + const float sinZ = sinf(radiansZ); + const float cosZ = cosf(radiansZ); + const XrMatrix4x4f rotationZ = {{cosZ, sinZ, 0, 0, -sinZ, cosZ, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}}; + XrMatrix4x4f rotationXY; + XrMatrix4x4f_Multiply(&rotationXY, &rotationY, &rotationX); + XrMatrix4x4f_Multiply(result, &rotationZ, &rotationXY); +} + +// Creates a rotation matrix. +// If -Z=forward, +Y=up, +X=right, then degreesX=pitch, degreesY=yaw, degreesZ=roll. +inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY, + const float degreesZ) { + XrMatrix4x4f_CreateRotationRadians(result, degreesX * (MATH_PI / 180.0f), degreesY * (MATH_PI / 180.0f), + degreesZ * (MATH_PI / 180.0f)); +} + +// Creates a scale matrix. +inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z) { + result->m[0] = x; + result->m[1] = 0.0f; + result->m[2] = 0.0f; + result->m[3] = 0.0f; + result->m[4] = 0.0f; + result->m[5] = y; + result->m[6] = 0.0f; + result->m[7] = 0.0f; + result->m[8] = 0.0f; + result->m[9] = 0.0f; + result->m[10] = z; + result->m[11] = 0.0f; + result->m[12] = 0.0f; + result->m[13] = 0.0f; + result->m[14] = 0.0f; + result->m[15] = 1.0f; +} + +// Creates a matrix from a quaternion. +inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* quat) { + const float x2 = quat->x + quat->x; + const float y2 = quat->y + quat->y; + const float z2 = quat->z + quat->z; + + const float xx2 = quat->x * x2; + const float yy2 = quat->y * y2; + const float zz2 = quat->z * z2; + + const float yz2 = quat->y * z2; + const float wx2 = quat->w * x2; + const float xy2 = quat->x * y2; + const float wz2 = quat->w * z2; + const float xz2 = quat->x * z2; + const float wy2 = quat->w * y2; + + result->m[0] = 1.0f - yy2 - zz2; + result->m[1] = xy2 + wz2; + result->m[2] = xz2 - wy2; + result->m[3] = 0.0f; + + result->m[4] = xy2 - wz2; + result->m[5] = 1.0f - xx2 - zz2; + result->m[6] = yz2 + wx2; + result->m[7] = 0.0f; + + result->m[8] = xz2 + wy2; + result->m[9] = yz2 - wx2; + result->m[10] = 1.0f - xx2 - yy2; + result->m[11] = 0.0f; + + result->m[12] = 0.0f; + result->m[13] = 0.0f; + result->m[14] = 0.0f; + result->m[15] = 1.0f; +} + +// Creates a combined translation(rotation(scale(object))) matrix. +inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation, + const XrQuaternionf* rotation, const XrVector3f* scale) { + XrMatrix4x4f scaleMatrix; + XrMatrix4x4f_CreateScale(&scaleMatrix, scale->x, scale->y, scale->z); + + XrMatrix4x4f rotationMatrix; + XrMatrix4x4f_CreateFromQuaternion(&rotationMatrix, rotation); + + XrMatrix4x4f translationMatrix; + XrMatrix4x4f_CreateTranslation(&translationMatrix, translation->x, translation->y, translation->z); + + XrMatrix4x4f combinedMatrix; + XrMatrix4x4f_Multiply(&combinedMatrix, &rotationMatrix, &scaleMatrix); + XrMatrix4x4f_Multiply(result, &translationMatrix, &combinedMatrix); +} + +inline static void XrMatrix4x4f_CreateFromRigidTransform(XrMatrix4x4f* result, const XrPosef* s) { + const XrVector3f identityScale = {1.0f, 1.0f, 1.0f}; + XrMatrix4x4f_CreateTranslationRotationScale(result, &s->position, &s->orientation, &identityScale); +} + +// Creates a projection matrix based on the specified dimensions. +// The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API. +// The far plane is placed at infinity if farZ <= nearZ. +// An infinite projection matrix is preferred for rasterization because, except for +// things *right* up against the near plane, it always provides better precision: +// "Tightening the Precision of Perspective Rendering" +// Paul Upchurch, Mathieu Desbrun +// Journal of Graphics Tools, Volume 16, Issue 1, 2012 +inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const float tanAngleLeft, + const float tanAngleRight, const float tanAngleUp, float const tanAngleDown, + const float nearZ, const float farZ) { + const float tanAngleWidth = tanAngleRight - tanAngleLeft; + + // Set to tanAngleDown - tanAngleUp for a clip space with positive Y down (Vulkan). + // Set to tanAngleUp - tanAngleDown for a clip space with positive Y up (OpenGL / D3D / Metal). + const float tanAngleHeight = graphicsApi == GRAPHICS_VULKAN ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown); + + // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES). + // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal). + const float offsetZ = (graphicsApi == GRAPHICS_OPENGL || graphicsApi == GRAPHICS_OPENGL_ES) ? nearZ : 0; + + if (farZ <= nearZ) { + // place the far plane at infinity + result->m[0] = 2.0f / tanAngleWidth; + result->m[4] = 0.0f; + result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth; + result->m[12] = 0.0f; + + result->m[1] = 0.0f; + result->m[5] = 2.0f / tanAngleHeight; + result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight; + result->m[13] = 0.0f; + + result->m[2] = 0.0f; + result->m[6] = 0.0f; + result->m[10] = -1.0f; + result->m[14] = -(nearZ + offsetZ); + + result->m[3] = 0.0f; + result->m[7] = 0.0f; + result->m[11] = -1.0f; + result->m[15] = 0.0f; + } else { + // normal projection + result->m[0] = 2.0f / tanAngleWidth; + result->m[4] = 0.0f; + result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth; + result->m[12] = 0.0f; + + result->m[1] = 0.0f; + result->m[5] = 2.0f / tanAngleHeight; + result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight; + result->m[13] = 0.0f; + + result->m[2] = 0.0f; + result->m[6] = 0.0f; + result->m[10] = -(farZ + offsetZ) / (farZ - nearZ); + result->m[14] = -(farZ * (nearZ + offsetZ)) / (farZ - nearZ); + + result->m[3] = 0.0f; + result->m[7] = 0.0f; + result->m[11] = -1.0f; + result->m[15] = 0.0f; + } +} + +// Creates a projection matrix based on the specified FOV. +inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const XrFovf fov, + const float nearZ, const float farZ) { + const float tanLeft = tanf(fov.angleLeft); + const float tanRight = tanf(fov.angleRight); + + const float tanDown = tanf(fov.angleDown); + const float tanUp = tanf(fov.angleUp); + + XrMatrix4x4f_CreateProjection(result, graphicsApi, tanLeft, tanRight, tanUp, tanDown, nearZ, farZ); +} + +// Creates a matrix that transforms the -1 to 1 cube to cover the given 'mins' and 'maxs' transformed with the given 'matrix'. +inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins, + const XrVector3f* maxs) { + const XrVector3f offset = {(maxs->x + mins->x) * 0.5f, (maxs->y + mins->y) * 0.5f, (maxs->z + mins->z) * 0.5f}; + const XrVector3f scale = {(maxs->x - mins->x) * 0.5f, (maxs->y - mins->y) * 0.5f, (maxs->z - mins->z) * 0.5f}; + + result->m[0] = matrix->m[0] * scale.x; + result->m[1] = matrix->m[1] * scale.x; + result->m[2] = matrix->m[2] * scale.x; + result->m[3] = matrix->m[3] * scale.x; + + result->m[4] = matrix->m[4] * scale.y; + result->m[5] = matrix->m[5] * scale.y; + result->m[6] = matrix->m[6] * scale.y; + result->m[7] = matrix->m[7] * scale.y; + + result->m[8] = matrix->m[8] * scale.z; + result->m[9] = matrix->m[9] * scale.z; + result->m[10] = matrix->m[10] * scale.z; + result->m[11] = matrix->m[11] * scale.z; + + result->m[12] = matrix->m[12] + matrix->m[0] * offset.x + matrix->m[4] * offset.y + matrix->m[8] * offset.z; + result->m[13] = matrix->m[13] + matrix->m[1] * offset.x + matrix->m[5] * offset.y + matrix->m[9] * offset.z; + result->m[14] = matrix->m[14] + matrix->m[2] * offset.x + matrix->m[6] * offset.y + matrix->m[10] * offset.z; + result->m[15] = matrix->m[15] + matrix->m[3] * offset.x + matrix->m[7] * offset.y + matrix->m[11] * offset.z; +} + +// Returns true if the given matrix is affine. +inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon) { + return fabsf(matrix->m[3]) <= epsilon && fabsf(matrix->m[7]) <= epsilon && fabsf(matrix->m[11]) <= epsilon && + fabsf(matrix->m[15] - 1.0f) <= epsilon; +} + +// Returns true if the given matrix is orthogonal. +inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon) { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (i != j) { + if (fabsf(matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] + + matrix->m[4 * i + 2] * matrix->m[4 * j + 2]) > epsilon) { + return false; + } + if (fabsf(matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] + + matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j]) > epsilon) { + return false; + } + } + } + } + return true; +} + +// Returns true if the given matrix is orthonormal. +inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon) { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + const float kd = (i == j) ? 1.0f : 0.0f; // Kronecker delta + if (fabsf(kd - (matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] + + matrix->m[4 * i + 2] * matrix->m[4 * j + 2])) > epsilon) { + return false; + } + if (fabsf(kd - (matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] + + matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j])) > epsilon) { + return false; + } + } + } + return true; +} + +// Returns true if the given matrix is a rigid body transform. +inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon) { + return XrMatrix4x4f_IsAffine(matrix, epsilon) && XrMatrix4x4f_IsOrthonormal(matrix, epsilon); +} + +// Get the translation from a combined translation(rotation(scale(object))) matrix. +inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src) { + assert(XrMatrix4x4f_IsAffine(src, 1e-4f)); + assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f)); + + result->x = src->m[12]; + result->y = src->m[13]; + result->z = src->m[14]; +} + +// Get the rotation from a combined translation(rotation(scale(object))) matrix. +inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src) { + assert(XrMatrix4x4f_IsAffine(src, 1e-4f)); + assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f)); + + const float rcpScaleX = XrRcpSqrt(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]); + const float rcpScaleY = XrRcpSqrt(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]); + const float rcpScaleZ = XrRcpSqrt(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]); + const float m[9] = {src->m[0] * rcpScaleX, src->m[1] * rcpScaleX, src->m[2] * rcpScaleX, + src->m[4] * rcpScaleY, src->m[5] * rcpScaleY, src->m[6] * rcpScaleY, + src->m[8] * rcpScaleZ, src->m[9] * rcpScaleZ, src->m[10] * rcpScaleZ}; + if (m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] > 0.0f) { + float t = +m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f; + float s = XrRcpSqrt(t) * 0.5f; + result->w = s * t; + result->z = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s; + result->y = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s; + result->x = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s; + } else if (m[0 * 3 + 0] > m[1 * 3 + 1] && m[0 * 3 + 0] > m[2 * 3 + 2]) { + float t = +m[0 * 3 + 0] - m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f; + float s = XrRcpSqrt(t) * 0.5f; + result->x = s * t; + result->y = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s; + result->z = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s; + result->w = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s; + } else if (m[1 * 3 + 1] > m[2 * 3 + 2]) { + float t = -m[0 * 3 + 0] + m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f; + float s = XrRcpSqrt(t) * 0.5f; + result->y = s * t; + result->x = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s; + result->w = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s; + result->z = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s; + } else { + float t = -m[0 * 3 + 0] - m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f; + float s = XrRcpSqrt(t) * 0.5f; + result->z = s * t; + result->w = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s; + result->x = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s; + result->y = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s; + } +} + +// Get the scale from a combined translation(rotation(scale(object))) matrix. +inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src) { + assert(XrMatrix4x4f_IsAffine(src, 1e-4f)); + assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f)); + + result->x = sqrtf(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]); + result->y = sqrtf(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]); + result->z = sqrtf(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]); +} + +// Transforms a 3D vector. +inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v) { + const float w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15]; + const float rcpW = 1.0f / w; + result->x = (m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12]) * rcpW; + result->y = (m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13]) * rcpW; + result->z = (m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14]) * rcpW; +} + +// Transforms a 4D vector. +inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v) { + result->x = m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12] * v->w; + result->y = m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13] * v->w; + result->z = m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14] * v->w; + result->w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15] * v->w; +} + +// Transforms the 'mins' and 'maxs' bounds with the given 'matrix'. +inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix, + const XrVector3f* mins, const XrVector3f* maxs) { + assert(XrMatrix4x4f_IsAffine(matrix, 1e-4f)); + + const XrVector3f center = {(mins->x + maxs->x) * 0.5f, (mins->y + maxs->y) * 0.5f, (mins->z + maxs->z) * 0.5f}; + const XrVector3f extents = {maxs->x - center.x, maxs->y - center.y, maxs->z - center.z}; + const XrVector3f newCenter = {matrix->m[0] * center.x + matrix->m[4] * center.y + matrix->m[8] * center.z + matrix->m[12], + matrix->m[1] * center.x + matrix->m[5] * center.y + matrix->m[9] * center.z + matrix->m[13], + matrix->m[2] * center.x + matrix->m[6] * center.y + matrix->m[10] * center.z + matrix->m[14]}; + const XrVector3f newExtents = { + fabsf(extents.x * matrix->m[0]) + fabsf(extents.y * matrix->m[4]) + fabsf(extents.z * matrix->m[8]), + fabsf(extents.x * matrix->m[1]) + fabsf(extents.y * matrix->m[5]) + fabsf(extents.z * matrix->m[9]), + fabsf(extents.x * matrix->m[2]) + fabsf(extents.y * matrix->m[6]) + fabsf(extents.z * matrix->m[10])}; + XrVector3f_Sub(resultMins, &newCenter, &newExtents); + XrVector3f_Add(resultMaxs, &newCenter, &newExtents); +} + +// Returns true if the 'mins' and 'maxs' bounds is completely off to one side of the projection matrix. +inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs) { + if (maxs->x <= mins->x && maxs->y <= mins->y && maxs->z <= mins->z) { + return false; + } + + XrVector4f c[8]; + for (int i = 0; i < 8; i++) { + const XrVector4f corner = {(i & 1) != 0 ? maxs->x : mins->x, (i & 2) != 0 ? maxs->y : mins->y, + (i & 4) != 0 ? maxs->z : mins->z, 1.0f}; + XrMatrix4x4f_TransformVector4f(&c[i], mvp, &corner); + } + + int i; + for (i = 0; i < 8; i++) { + if (c[i].x > -c[i].w) { + break; + } + } + if (i == 8) { + return true; + } + for (i = 0; i < 8; i++) { + if (c[i].x < c[i].w) { + break; + } + } + if (i == 8) { + return true; + } + + for (i = 0; i < 8; i++) { + if (c[i].y > -c[i].w) { + break; + } + } + if (i == 8) { + return true; + } + for (i = 0; i < 8; i++) { + if (c[i].y < c[i].w) { + break; + } + } + if (i == 8) { + return true; + } + for (i = 0; i < 8; i++) { + if (c[i].z > -c[i].w) { + break; + } + } + if (i == 8) { + return true; + } + for (i = 0; i < 8; i++) { + if (c[i].z < c[i].w) { + break; + } + } + return i == 8; +} + +#endif // XR_LINEAR_H_ diff --git a/Lumos/External/OpenXR-SDK/src/common_config.h.in b/Lumos/External/OpenXR-SDK/src/common_config.h.in new file mode 100644 index 000000000..97cffe11b --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/common_config.h.in @@ -0,0 +1,26 @@ +// Copyright (c) 2017-2023, The Khronos Group Inc. +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG, Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT + + +// If this file has a .h.in extension, it's the input for CMake to generate a header from. +// If it has a .h extension, THIS IS A GENERATED FILE - DO NOT EDIT + +// To include the generated version of this file, make sure OPENXR_HAVE_COMMON_CONFIG is defined. +// The provided CMake build system does this automatically. +// +// If you can't provide the .h version of this file (because you're not using the +// provided CMake build system and not providing it yourself), you need to do the following: +// +// - On non-Windows, for security purposes, define one of +// `HAVE_SECURE_GETENV` or `HAVE___SECURE_GETENV` depending on which +// of secure_getenv or __secure_getenv are present, respectively + + +// If defined, secure_getenv is available +#cmakedefine HAVE_SECURE_GETENV + +// If defined, __secure_getenv is available +#cmakedefine HAVE___SECURE_GETENV diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/ObjectWrapperBase.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/ObjectWrapperBase.h new file mode 100644 index 000000000..fe76c4f49 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/ObjectWrapperBase.h @@ -0,0 +1,337 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#pragma once +#include +#include +#include + +namespace wrap { + +/*! + * Base class for types wrapping Java types. + * + * Derived types are encouraged to have a nested `struct Meta`, inheriting + * publicly from MetaBaseDroppable or MetaBase, with a singleton accessor named + * `data()`, and a private constructor (implemented in a .cpp file, not the + * header) that populates jni::method_t, jni::field_t, etc. members for each + * method, etc. of interest. + */ +class ObjectWrapperBase { + public: + /*! + * Default constructor. + */ + ObjectWrapperBase() = default; + + /*! + * Construct from a jni::Object. + */ + explicit ObjectWrapperBase(jni::Object obj) : obj_(std::move(obj)) {} + + /*! + * Construct from a nullptr. + */ + explicit ObjectWrapperBase(std::nullptr_t const &) : obj_() {} + + /*! + * Evaluate if this is non-null + */ + explicit operator bool() const noexcept { return !obj_.isNull(); } + + /*! + * Is this object null? + */ + bool isNull() const noexcept { return obj_.isNull(); } + + /*! + * Get the wrapped jni::Object + */ + jni::Object &object() noexcept { return obj_; } + + /*! + * Get the wrapped jni::Object (const overload) + */ + jni::Object const &object() const noexcept { return obj_; } + + private: + jni::Object obj_; +}; + +/*! + * Equality comparison for a wrapped Java object. + */ +static inline bool operator==(ObjectWrapperBase const &lhs, + ObjectWrapperBase const &rhs) noexcept { + return lhs.object() == rhs.object(); +} + +/*! + * Inequality comparison for a wrapped Java object. + */ +static inline bool operator!=(ObjectWrapperBase const &lhs, + ObjectWrapperBase const &rhs) noexcept { + return lhs.object() != rhs.object(); +} + +/*! + * Equality comparison between a wrapped Java object and @p nullptr. + */ +static inline bool operator==(ObjectWrapperBase const &obj, + std::nullptr_t) noexcept { + return obj.isNull(); +} + +/*! + * Equality comparison between a wrapped Java object and @p nullptr. + */ +static inline bool operator==(std::nullptr_t, + ObjectWrapperBase const &obj) noexcept { + return obj.isNull(); +} + +/*! + * Inequality comparison between a wrapped Java object and @p nullptr. + */ +static inline bool operator!=(ObjectWrapperBase const &obj, + std::nullptr_t) noexcept { + return !(obj == nullptr); +} + +/*! + * Inequality comparison between a wrapped Java object and @p nullptr. + */ +static inline bool operator!=(std::nullptr_t, + ObjectWrapperBase const &obj) noexcept { + return !(obj == nullptr); +} + +/*! + * Base class for Meta structs where you want the reference to the Class object + * to persist (indefinitely). + * + * Mostly for classes that would stick around anyway (e.g. + * @p java.lang.ClassLoader ) where many operations are on static + * methods/fields. Use of a non-static method or field does not require such a + * reference, use MetaBaseDroppable in those cases. + */ +class MetaBase { + public: + /*! + * Gets a reference to the class object. + * + * Unlike MetaBaseDroppable, here we know that the class object ref is + * alive. + */ + jni::Class const &clazz() const noexcept { return clazz_; } + /*! + * Gets a reference to the class object. + * + * Provided here for parallel API to MetaBaseDroppable, despite being + * synonymous with clazz() here. + */ + jni::Class const &classRef() const noexcept { return clazz_; } + + /*! + * Get the class name, with namespaces delimited by `/`. + */ + const char *className() const noexcept { return classname_; } + + protected: + /*! + * Construct. + * + * @param classname The class name, fully qualified, with namespaces + * delimited by `/`. + * @param clazz The jclass object for the class in question, if known. + */ + explicit MetaBase(const char *classname, jni::jclass clazz = nullptr) + : classname_(classname), clazz_() { + if (clazz != nullptr) { + // The 0 makes it a global ref. + clazz_ = jni::Class{clazz, 0}; + } else { + clazz_ = jni::Class{classname}; + } + } + + private: + const char *classname_; + jni::Class clazz_; +}; + +/*! + * Base class for Meta structs where you don't need the reference to the Class + * object to persist. (This is most uses.) + */ +class MetaBaseDroppable { + public: + /*! + * Gets the class object. + * + * Works regardless of whether dropClassRef() has been called - it's just + * slower if it has. + */ + jni::Class clazz() const { + if (clazz_.isNull()) { + return {classname_}; + } + return clazz_; + } + + /*! + * Get the class name, with namespaces delimited by `/`. + */ + const char *className() const noexcept { return classname_; } + + /*! + * May be called in/after the derived constructor, to drop the reference to + * the class object if it's no longer needed. + */ + void dropClassRef() { clazz_ = jni::Class{}; } + + protected: + /*! + * Construct. + * + * Once you are done constructing your derived struct, you may call + * dropClassRef() and still safely use non-static method and field IDs + * retrieved. + * + * @param classname The class name, fully qualified, with namespaces + * delimited by `/`. + * @param clazz The jclass object for the class in question, if known. + */ + explicit MetaBaseDroppable(const char *classname, + jni::jclass clazz = nullptr) + : classname_(classname), clazz_() { + if (clazz != nullptr) { + // The 0 makes it a global ref. + clazz_ = jni::Class{clazz, 0}; + } else { + clazz_ = jni::Class{classname}; + } + } + + /*! + * Gets a reference to the class object, but is non-null only if it's still + * cached. + * + * Only for used in derived constructors/initializers, where you know you + * haven't dropped this yet. + */ + jni::Class const &classRef() const { return clazz_; } + + private: + const char *classname_; + jni::Class clazz_; +}; + +/*! + * Implementation namespace for these JNI wrappers. + * + * They can be ignored if you aren't adding/extending wrappers. + */ +namespace impl { +/*! + * Type-aware wrapper for a field ID. + * + * This is a smarter alternative to just using jni::field_t since it avoids + * having to repeat the type in the accessor, without using any more storage. + * + * @see StaticFieldId for the equivalent for static fields. + * @see WrappedFieldId for the equivalent for structures that we wrap. + */ +template struct FieldId { + public: + FieldId(jni::Class const &clazz, const char *name) + : id(clazz.getField(name)) {} + + const jni::field_t id; +}; + +/*! + * Get the value of field @p field in Java object @p obj. + * + * This is found by argument-dependent lookup and can be used unqualified. + * + * @relates FieldId + */ +template +static inline T get(FieldId const &field, jni::Object const &obj) { + assert(!obj.isNull()); + return obj.get(field.id); +} +/*! + * Type-aware wrapper for a static field ID. + * + * This is a smarter alternative to just using jni::field_t since it avoids + * having to repeat the type in the accessor, without using any more storage. + * + * @see FieldId + */ +template struct StaticFieldId { + public: + StaticFieldId(jni::Class const &clazz, const char *name) + : id(clazz.getStaticField(name)) {} + + const jni::field_t id; +}; + +/*! + * Get the value of static field @p field in Java type @p clazz. + * + * This is found by argument-dependent lookup and can be used unqualified. + * + * @relates FieldId + */ +template +static inline T get(StaticFieldId const &field, jni::Class const &clazz) { + assert(!clazz.isNull()); + return clazz.get(field.id); +} + +/*! + * Type-aware wrapper for a field ID of a wrapped structure type. + * + * This is a smarter alternative to just using jni::field_t since it avoids + * having to repeat the type in the accessor, without using any more storage. + * + * Requires that the structure wrapper provides + * `static constexpr const char *getTypeName() noexcept;` + * + * @see FieldId + */ +template struct WrappedFieldId { + public: + WrappedFieldId(jni::Class const &clazz, const char *name) + : id(lookupField(clazz, name)) {} + + const jni::field_t id; + + private: + /*! + * Helper for field ID lookup, mostly to avoid calling c_str() on a string + * temporary. + */ + static jni::field_t lookupField(jni::Class const &clazz, const char *name) { + std::string fullType = std::string("L") + T::getTypeName() + ";"; + return clazz.getField(name, fullType.c_str()); + } +}; + +/*! + * Get the value of field @p field in Java object @p obj. + * + * This is found by argument-dependent lookup and can be used unqualified. + * + * @relates WrappedFieldId + */ +template +static inline T get(WrappedFieldId const &field, jni::Object const &obj) { + assert(!obj.isNull()); + return T{obj.get(field.id)}; +} +} // namespace impl +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.cpp b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.cpp new file mode 100644 index 000000000..b68274e9f --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.cpp @@ -0,0 +1,52 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#include "android.content.h" + +namespace wrap { +namespace android::content { +Context::Meta::Meta(bool deferDrop) + : MetaBaseDroppable(Context::getTypeName()), + getContentResolver(classRef().getMethod( + "getContentResolver", "()Landroid/content/ContentResolver;")) { + if (!deferDrop) { + MetaBaseDroppable::dropClassRef(); + } +} +ContentUris::Meta::Meta(bool deferDrop) + : MetaBaseDroppable(ContentUris::getTypeName()), + appendId(classRef().getStaticMethod( + "appendId", + "(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;")) { + if (!deferDrop) { + MetaBaseDroppable::dropClassRef(); + } +} +ComponentName::Meta::Meta() + : MetaBase(ComponentName::getTypeName()), + init(classRef().getMethod("", + "(Ljava/lang/String;Ljava/lang/String;)V")), + init1(classRef().getMethod( + "", "(Landroid/content/Context;Ljava/lang/String;)V")), + init2(classRef().getMethod( + "", "(Landroid/content/Context;Ljava/lang/Class;)V")), + init3(classRef().getMethod("", "(Landroid/os/Parcel;)V")) {} +ContentResolver::Meta::Meta() + : MetaBaseDroppable(ContentResolver::getTypeName()), + query(classRef().getMethod( + "query", + "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/" + "String;Ljava/lang/String;)Landroid/database/Cursor;")), + query1(classRef().getMethod( + "query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/" + "String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/" + "CancellationSignal;)Landroid/database/Cursor;")), + query2(classRef().getMethod( + "query", + "(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/" + "CancellationSignal;)Landroid/database/Cursor;")) { + MetaBaseDroppable::dropClassRef(); +} +} // namespace android::content +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.h new file mode 100644 index 000000000..e815e6cf1 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.h @@ -0,0 +1,296 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#pragma once + +#include "ObjectWrapperBase.h" + +namespace wrap { +namespace android::content { +class ComponentName; +class ContentResolver; +class Context; +} // namespace android::content + +namespace android::database { +class Cursor; +} // namespace android::database + +namespace android::net { +class Uri; +class Uri_Builder; +} // namespace android::net + +} // namespace wrap + +namespace wrap { +namespace android::content { +/*! + * Wrapper for android.content.Context objects. + */ +class Context : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/content/Context"; + } + + /*! + * Wrapper for the getContentResolver method + * + * Java prototype: + * `public abstract android.content.ContentResolver getContentResolver();` + * + * JNI signature: ()Landroid/content/ContentResolver; + * + */ + ContentResolver getContentResolver() const; + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t getContentResolver; + + /*! + * Singleton accessor + */ + static Meta &data(bool deferDrop = false) { + static Meta instance{deferDrop}; + return instance; + } + + private: + explicit Meta(bool deferDrop); + }; +}; + +/*! + * Wrapper for android.content.ContentUris objects. + */ +class ContentUris : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/content/ContentUris"; + } + + /*! + * Wrapper for the appendId static method + * + * Java prototype: + * `public static android.net.Uri$Builder appendId(android.net.Uri$Builder, + * long);` + * + * JNI signature: (Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder; + * + */ + static net::Uri_Builder appendId(net::Uri_Builder &uri_Builder, + long long longParam); + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t appendId; + + /*! + * Singleton accessor + */ + static Meta &data(bool deferDrop = false) { + static Meta instance{deferDrop}; + return instance; + } + + private: + explicit Meta(bool deferDrop); + }; +}; + +/*! + * Wrapper for android.content.ComponentName objects. + */ +class ComponentName : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/content/ComponentName"; + } + + /*! + * Wrapper for a constructor + * + * Java prototype: + * `public android.content.ComponentName(java.lang.String, + * java.lang.String);` + * + * JNI signature: (Ljava/lang/String;Ljava/lang/String;)V + * + */ + static ComponentName construct(std::string const &pkg, + std::string const &className); + + /*! + * Wrapper for a constructor + * + * Java prototype: + * `public android.content.ComponentName(android.content.Context, + * java.lang.String);` + * + * JNI signature: (Landroid/content/Context;Ljava/lang/String;)V + * + */ + static ComponentName construct(Context const &context, + std::string const &className); + + /*! + * Wrapper for a constructor + * + * Java prototype: + * `public android.content.ComponentName(android.content.Context, + * java.lang.Class);` + * + * JNI signature: (Landroid/content/Context;Ljava/lang/Class;)V + * + */ + static ComponentName construct(Context const &context, + jni::Object const &cls); + + /*! + * Wrapper for a constructor + * + * Java prototype: + * `public android.content.ComponentName(android.os.Parcel);` + * + * JNI signature: (Landroid/os/Parcel;)V + * + */ + static ComponentName construct(jni::Object const &parcel); + + /*! + * Class metadata + */ + struct Meta : public MetaBase { + jni::method_t init; + jni::method_t init1; + jni::method_t init2; + jni::method_t init3; + + /*! + * Singleton accessor + */ + static Meta &data() { + static Meta instance{}; + return instance; + } + + private: + Meta(); + }; +}; + +/*! + * Wrapper for android.content.ContentResolver objects. + */ +class ContentResolver : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/content/ContentResolver"; + } + + /*! + * Wrapper for the query method - overload added in API level 1 + * + * Java prototype: + * `public final android.database.Cursor query(android.net.Uri, + * java.lang.String[], java.lang.String, java.lang.String[], + * java.lang.String);` + * + * JNI signature: + * (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; + * + */ + database::Cursor query(net::Uri const &uri, + jni::Array const &projection, + std::string const &selection, + jni::Array const &selectionArgs, + std::string const &sortOrder); + + /*! + * Wrapper for the query method - overload added in API level 1 + * + * Java prototype: + * `public final android.database.Cursor query(android.net.Uri, + * java.lang.String[], java.lang.String, java.lang.String[], + * java.lang.String);` + * + * JNI signature: + * (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; + * + * This is a way to call the main query() function without the three + * trailing optional arguments. + */ + database::Cursor query(net::Uri const &uri, + jni::Array const &projection); + + /*! + * Wrapper for the query method - overload added in API level 16 + * + * Java prototype: + * `public final android.database.Cursor query(android.net.Uri, + * java.lang.String[], java.lang.String, java.lang.String[], + * java.lang.String, android.os.CancellationSignal);` + * + * JNI signature: + * (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor; + * + */ + database::Cursor query(net::Uri const &uri, + jni::Array const &projection, + std::string const &selection, + jni::Array const &selectionArgs, + std::string const &sortOrder, + jni::Object const &cancellationSignal); + + /*! + * Wrapper for the query method - overload added in API level 26 + * + * Java prototype: + * `public final android.database.Cursor query(android.net.Uri, + * java.lang.String[], android.os.Bundle, android.os.CancellationSignal);` + * + * JNI signature: + * (Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor; + * + */ + database::Cursor query(net::Uri const &uri, + jni::Array const &projection, + jni::Object const &queryArgs, + jni::Object const &cancellationSignal); + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t query; + jni::method_t query1; + jni::method_t query2; + + /*! + * Singleton accessor + */ + static Meta &data() { + static Meta instance{}; + return instance; + } + + private: + Meta(); + }; +}; + +} // namespace android::content +} // namespace wrap +#include "android.content.impl.h" diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.impl.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.impl.h new file mode 100644 index 000000000..399561031 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.content.impl.h @@ -0,0 +1,91 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik +// Inline implementations: do not include on its own! + +#pragma once + +#include "android.database.h" +#include "android.net.h" +#include + +namespace wrap { +namespace android::content { +inline ContentResolver Context::getContentResolver() const { + assert(!isNull()); + return ContentResolver( + object().call(Meta::data().getContentResolver)); +} + +inline net::Uri_Builder ContentUris::appendId(net::Uri_Builder &uri_Builder, + long long longParam) { + auto &data = Meta::data(true); + auto ret = net::Uri_Builder(data.clazz().call( + data.appendId, uri_Builder.object(), longParam)); + data.dropClassRef(); + return ret; +} + +inline ComponentName ComponentName::construct(std::string const &pkg, + std::string const &className) { + return ComponentName( + Meta::data().clazz().newInstance(Meta::data().init, pkg, className)); +} + +inline ComponentName ComponentName::construct(Context const &context, + std::string const &className) { + return ComponentName(Meta::data().clazz().newInstance( + Meta::data().init1, context.object(), className)); +} + +inline ComponentName ComponentName::construct(Context const &context, + jni::Object const &cls) { + return ComponentName(Meta::data().clazz().newInstance( + Meta::data().init2, context.object(), cls)); +} + +inline ComponentName ComponentName::construct(jni::Object const &parcel) { + return ComponentName( + Meta::data().clazz().newInstance(Meta::data().init3, parcel)); +} + +inline database::Cursor ContentResolver::query( + net::Uri const &uri, jni::Array const &projection, + std::string const &selection, jni::Array const &selectionArgs, + std::string const &sortOrder) { + assert(!isNull()); + return database::Cursor( + object().call(Meta::data().query, uri.object(), projection, + selection, selectionArgs, sortOrder)); +} + +inline database::Cursor +ContentResolver::query(net::Uri const &uri, + jni::Array const &projection) { + assert(!isNull()); + return database::Cursor( + object().call(Meta::data().query, uri.object(), projection, + nullptr, nullptr, nullptr)); +} + +inline database::Cursor ContentResolver::query( + net::Uri const &uri, jni::Array const &projection, + std::string const &selection, jni::Array const &selectionArgs, + std::string const &sortOrder, jni::Object const &cancellationSignal) { + assert(!isNull()); + return database::Cursor(object().call( + Meta::data().query1, uri.object(), projection, selection, selectionArgs, + sortOrder, cancellationSignal)); +} + +inline database::Cursor ContentResolver::query( + net::Uri const &uri, jni::Array const &projection, + jni::Object const &queryArgs, jni::Object const &cancellationSignal) { + assert(!isNull()); + return database::Cursor( + object().call(Meta::data().query2, uri.object(), + projection, queryArgs, cancellationSignal)); +} + +} // namespace android::content +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.cpp b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.cpp new file mode 100644 index 000000000..f03e5730c --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.cpp @@ -0,0 +1,22 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#include "android.database.h" + +namespace wrap { +namespace android::database { +Cursor::Meta::Meta() + : MetaBaseDroppable(Cursor::getTypeName()), + getCount(classRef().getMethod("getCount", "()I")), + moveToFirst(classRef().getMethod("moveToFirst", "()Z")), + moveToNext(classRef().getMethod("moveToNext", "()Z")), + getColumnIndex( + classRef().getMethod("getColumnIndex", "(Ljava/lang/String;)I")), + getString(classRef().getMethod("getString", "(I)Ljava/lang/String;")), + getInt(classRef().getMethod("getInt", "(I)I")), + close(classRef().getMethod("close", "()V")) { + MetaBaseDroppable::dropClassRef(); +} +} // namespace android::database +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.h new file mode 100644 index 000000000..308fa2e03 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.h @@ -0,0 +1,125 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#pragma once + +#include "ObjectWrapperBase.h" + +namespace wrap { +namespace android::database { +/*! + * Wrapper for android.database.Cursor objects. + */ +class Cursor : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/database/Cursor"; + } + + /*! + * Wrapper for the getCount method + * + * Java prototype: + * `public abstract int getCount();` + * + * JNI signature: ()I + * + */ + int32_t getCount(); + + /*! + * Wrapper for the moveToFirst method + * + * Java prototype: + * `public abstract boolean moveToFirst();` + * + * JNI signature: ()Z + * + */ + bool moveToFirst(); + + /*! + * Wrapper for the moveToNext method + * + * Java prototype: + * `public abstract boolean moveToNext();` + * + * JNI signature: ()Z + * + */ + bool moveToNext(); + + /*! + * Wrapper for the getColumnIndex method + * + * Java prototype: + * `public abstract int getColumnIndex(java.lang.String);` + * + * JNI signature: (Ljava/lang/String;)I + * + */ + int32_t getColumnIndex(std::string const &columnName); + + /*! + * Wrapper for the getString method + * + * Java prototype: + * `public abstract java.lang.String getString(int);` + * + * JNI signature: (I)Ljava/lang/String; + * + */ + std::string getString(int32_t column); + + /*! + * Wrapper for the getInt method + * + * Java prototype: + * `public abstract int getInt(int);` + * + * JNI signature: (I)I + * + */ + int32_t getInt(int32_t column); + + /*! + * Wrapper for the close method + * + * Java prototype: + * `public abstract void close();` + * + * JNI signature: ()V + * + */ + void close(); + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t getCount; + jni::method_t moveToFirst; + jni::method_t moveToNext; + jni::method_t getColumnIndex; + jni::method_t getString; + jni::method_t getInt; + jni::method_t close; + + /*! + * Singleton accessor + */ + static Meta &data() { + static Meta instance{}; + return instance; + } + + private: + Meta(); + }; +}; + +} // namespace android::database +} // namespace wrap +#include "android.database.impl.h" diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.impl.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.impl.h new file mode 100644 index 000000000..b48931efc --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.database.impl.h @@ -0,0 +1,48 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik +// Inline implementations: do not include on its own! + +#pragma once + +#include + +namespace wrap { +namespace android::database { +inline int32_t Cursor::getCount() { + assert(!isNull()); + return object().call(Meta::data().getCount); +} + +inline bool Cursor::moveToFirst() { + assert(!isNull()); + return object().call(Meta::data().moveToFirst); +} + +inline bool Cursor::moveToNext() { + assert(!isNull()); + return object().call(Meta::data().moveToNext); +} + +inline int32_t Cursor::getColumnIndex(std::string const &columnName) { + assert(!isNull()); + return object().call(Meta::data().getColumnIndex, columnName); +} + +inline std::string Cursor::getString(int32_t column) { + assert(!isNull()); + return object().call(Meta::data().getString, column); +} + +inline int32_t Cursor::getInt(int32_t column) { + assert(!isNull()); + return object().call(Meta::data().getInt, column); +} + +inline void Cursor::close() { + assert(!isNull()); + return object().call(Meta::data().close); +} + +} // namespace android::database +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.cpp b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.cpp new file mode 100644 index 000000000..5058d9044 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.cpp @@ -0,0 +1,27 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#include "android.net.h" + +namespace wrap { +namespace android::net { +Uri::Meta::Meta() + : MetaBaseDroppable(Uri::getTypeName()), + toString(classRef().getMethod("toString", "()Ljava/lang/String;")) { + MetaBaseDroppable::dropClassRef(); +} +Uri_Builder::Meta::Meta() + : MetaBaseDroppable(Uri_Builder::getTypeName()), + init(classRef().getMethod("", "()V")), + scheme(classRef().getMethod( + "scheme", "(Ljava/lang/String;)Landroid/net/Uri$Builder;")), + authority(classRef().getMethod( + "authority", "(Ljava/lang/String;)Landroid/net/Uri$Builder;")), + appendPath(classRef().getMethod( + "appendPath", "(Ljava/lang/String;)Landroid/net/Uri$Builder;")), + build(classRef().getMethod("build", "()Landroid/net/Uri;")) { + MetaBaseDroppable::dropClassRef(); +} +} // namespace android::net +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.h new file mode 100644 index 000000000..7a77864a6 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.h @@ -0,0 +1,149 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik + +#pragma once + +#include "ObjectWrapperBase.h" + +namespace wrap { +namespace android::net { +class Uri; +class Uri_Builder; +} // namespace android::net + +} // namespace wrap + +namespace wrap { +namespace android::net { +/*! + * Wrapper for android.net.Uri objects. + */ +class Uri : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/net/Uri"; + } + + /*! + * Wrapper for the toString method + * + * Java prototype: + * `public abstract java.lang.String toString();` + * + * JNI signature: ()Ljava/lang/String; + * + */ + std::string toString() const; + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t toString; + + /*! + * Singleton accessor + */ + static Meta &data() { + static Meta instance{}; + return instance; + } + + private: + Meta(); + }; +}; + +/*! + * Wrapper for android.net.Uri$Builder objects. + */ +class Uri_Builder : public ObjectWrapperBase { + public: + using ObjectWrapperBase::ObjectWrapperBase; + static constexpr const char *getTypeName() noexcept { + return "android/net/Uri$Builder"; + } + + /*! + * Wrapper for a constructor + * + * Java prototype: + * `public android.net.Uri$Builder();` + * + * JNI signature: ()V + * + */ + static Uri_Builder construct(); + + /*! + * Wrapper for the scheme method + * + * Java prototype: + * `public android.net.Uri$Builder scheme(java.lang.String);` + * + * JNI signature: (Ljava/lang/String;)Landroid/net/Uri$Builder; + * + */ + Uri_Builder &scheme(std::string const &stringParam); + + /*! + * Wrapper for the authority method + * + * Java prototype: + * `public android.net.Uri$Builder authority(java.lang.String);` + * + * JNI signature: (Ljava/lang/String;)Landroid/net/Uri$Builder; + * + */ + Uri_Builder &authority(std::string const &stringParam); + + /*! + * Wrapper for the appendPath method + * + * Java prototype: + * `public android.net.Uri$Builder appendPath(java.lang.String);` + * + * JNI signature: (Ljava/lang/String;)Landroid/net/Uri$Builder; + * + */ + Uri_Builder &appendPath(std::string const &stringParam); + + /*! + * Wrapper for the build method + * + * Java prototype: + * `public android.net.Uri build();` + * + * JNI signature: ()Landroid/net/Uri; + * + */ + Uri build(); + + /*! + * Class metadata + */ + struct Meta : public MetaBaseDroppable { + jni::method_t init; + jni::method_t scheme; + jni::method_t authority; + jni::method_t appendPath; + jni::method_t build; + + /*! + * Singleton accessor + */ + static Meta &data() { + static Meta instance{}; + return instance; + } + + private: + Meta(); + }; +}; + +} // namespace android::net +} // namespace wrap +#include "android.net.impl.h" diff --git a/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.impl.h b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.impl.h new file mode 100644 index 000000000..a8a927d9c --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/android-jni-wrappers/wrap/android.net.impl.h @@ -0,0 +1,45 @@ +// Copyright 2020-2021, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +// Author: Ryan Pavlik +// Inline implementations: do not include on its own! + +#pragma once + +#include + +namespace wrap { +namespace android::net { +inline std::string Uri::toString() const { + assert(!isNull()); + return object().call(Meta::data().toString); +} + +inline Uri_Builder Uri_Builder::construct() { + return Uri_Builder(Meta::data().clazz().newInstance(Meta::data().init)); +} + +inline Uri_Builder &Uri_Builder::scheme(std::string const &stringParam) { + assert(!isNull()); + object().call(Meta::data().scheme, stringParam); + return *this; +} + +inline Uri_Builder &Uri_Builder::authority(std::string const &stringParam) { + assert(!isNull()); + object().call(Meta::data().authority, stringParam); + return *this; +} + +inline Uri_Builder &Uri_Builder::appendPath(std::string const &stringParam) { + assert(!isNull()); + object().call(Meta::data().appendPath, stringParam); + return *this; +} + +inline Uri Uri_Builder::build() { + assert(!isNull()); + return Uri(object().call(Meta::data().build)); +} + +} // namespace android::net +} // namespace wrap diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/Android.bp b/Lumos/External/OpenXR-SDK/src/external/jnipp/Android.bp new file mode 100644 index 000000000..efb9575ad --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/Android.bp @@ -0,0 +1,23 @@ + +cc_library_headers { + name: "libjnipp-headers", + export_include_dirs: ["."], + vendor_available: true, +} + +cc_library_static { + name: "libjnipp", + + srcs: [ + "jnipp.cpp", + ], + + cppflags: [ "-fexceptions" ], + header_libs: [ + "libjnipp-headers", + ], + export_header_lib_headers: [ + "libjnipp-headers" + ], + vendor_available: true, +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/CMakeLists.txt b/Lumos/External/OpenXR-SDK/src/external/jnipp/CMakeLists.txt new file mode 100644 index 000000000..df206fec1 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/CMakeLists.txt @@ -0,0 +1,18 @@ +# Copyright 2021, Collabora, Ltd. +# +# SPDX-License-Identifier: MIT + +cmake_minimum_required(VERSION 3.10.2) +project(jnipp) + +find_package(JNI REQUIRED) +include(CTest) + +add_library(jnipp jnipp.cpp) +target_include_directories( + jnipp + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${JNI_INCLUDE_DIRS}) +target_link_libraries(jnipp PUBLIC ${CMAKE_DL_LIBS}) + +add_subdirectory(tests) diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/LICENSE b/Lumos/External/OpenXR-SDK/src/external/jnipp/LICENSE new file mode 100644 index 000000000..bda04ad85 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Mitchell Dowd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/README.md b/Lumos/External/OpenXR-SDK/src/external/jnipp/README.md new file mode 100644 index 000000000..178708bee --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/README.md @@ -0,0 +1,107 @@ +# Java Native Interface for C++ + +## Overview + +JNIPP is just a C++ wrapper for the standard Java Native Interface (JNI). It +tries to take some of the long-winded annoyance out of integrating your Java +and C++ code. + +While this project has so far just been a utility library for my own usage, +it seems to have caught the eye of some others who have also been looking for +a suitable C++ JNI layer. If you have feature requests, do not hesitate to +submit them as Github issues. Please be descriptive in your feature request. +The more useful information you provide - along with justification on why it +should be implemented - the more likely it is that I will add your feature. + +## Requirements + +To compile you will need: + +- A C++11 compatible compiler +- An installation of the Java Development Kit (JDK) +- The `JAVA_HOME` environment variable, directed to your JDK installation. + +## Usage + +> For comprehensive examples on how to use *jnipp*, see the `tests` project +> in the project source code. + +There are two situations where the Java Native Interface would be needed. + +- A Java application calling C/C++ functions; or +- A C/C++ application calling Java methods + +### Calling Java from C++ + +The following is an example of calling Java from C++. + +```C++ +#include + +int main() +{ + // An instance of the Java VM needs to be created. + jni::Vm vm; + + // Create an instance of java.lang.Integer + jni::Class Integer = jni::Class("java/lang/Integer"); + jni::Object i = Integer.newInstance("1000"); + + // Call the `toString` method on that integer + std::string str = i.call("toString"); + + // The Java VM is automatically destroyed when it goes out of scope. + return 0; +} +``` + +### Calling C++ from Java + +Consider a basic Java program: + +```Java +package com.example; + +class Demo { + public int value; + + public static void main(String[] args) { + Demo demo = new Demo(); + demo.value = 1000; + demo.run(); + } + + public native void run(); +} +``` + +A matching C++ library which uses *jnipp* could look like: + +```C++ +#include +#include + +/* + The signature here is defind by the JNI standard, so must be adhered to. + Although, to prevent pollution of the global namespace, the JNIEnv and + jobject types defind by the standard JNI have been placed into the + jni namespace. + */ +extern "C" void Java_com_example_Demo_run(jni::JNIEnv* env, jni::jobject obj) +{ + // jnipp only needs initialising once, but it doesn't hurt to do it again. + jni::init(env); + + // Capture the supplied object. + jni::Object demo(obj); + + // Print the contents of the `value` field to stdout. + std::cout << demo.get("value") << std::endl; +} +``` + +## Configuration + +By default, *jnipp* uses std::runtime_error as the base exception class. If you wish, +you can define `JNIPP_EXCEPTION_CLASS` to be the exception class you wish to use, before +including `jnipp.h`. It just needs a `const char*` constructor. diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/android/CMakeLists.txt b/Lumos/External/OpenXR-SDK/src/external/jnipp/android/CMakeLists.txt new file mode 100644 index 000000000..cca518d47 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/android/CMakeLists.txt @@ -0,0 +1,12 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.4.1) + +GET_FILENAME_COMPONENT(root_dir "../.." ABSOLUTE) + +LINK_DIRECTORIES("${root_dir}/${ANDROID_ABI}") + +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${root_dir}/${ANDROID_ABI}") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DANDROID_STL=c++_static -std=gnu++11 -fexceptions") + +FILE(GLOB sources ../*.cpp ../common/*.cpp ../android/*.cpp) + +ADD_LIBRARY(jnipp SHARED ${sources}) diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/build.gradle b/Lumos/External/OpenXR-SDK/src/external/jnipp/build.gradle new file mode 100644 index 000000000..a17e95a70 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/build.gradle @@ -0,0 +1,30 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 26 + buildToolsVersion '28.0.3' + + defaultConfig { + minSdkVersion 15 + targetSdkVersion 26 + } + + buildTypes { + release { + minifyEnabled = false + proguardFiles getDefaultProguardFile('proguard-android.txt') + } + } + + sourceSets { + main { + manifest.srcFile 'android/AndroidManifest.xml' + } + } + + externalNativeBuild { + cmake { + path 'android/CMakeLists.txt' + } + } +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.cpp b/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.cpp new file mode 100644 index 000000000..45a8e9d87 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.cpp @@ -0,0 +1,1626 @@ +#ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN 1 + + // Windows Dependencies +# include +#else + // UNIX Dependencies +# include +# include +# include +#endif + +// External Dependencies +#include + +// Standard Dependencies +#include +#include + +// Local Dependencies +#include "jnipp.h" + +namespace jni +{ + // Static Variables + static std::atomic_bool isVm(false); + static JavaVM* javaVm = nullptr; + + static bool getEnv(JavaVM *vm, JNIEnv **env) { + return vm->GetEnv((void **)env, JNI_VERSION_1_2) == JNI_OK; + } + + static bool isAttached(JavaVM *vm) { + JNIEnv *env = nullptr; + return getEnv(vm, &env); + } + /** + Maintains the lifecycle of a JNIEnv. + */ + class ScopedEnv final + { + public: + ScopedEnv() noexcept : _vm(nullptr), _env(nullptr), _attached(false) {} + ~ScopedEnv(); + + void init(JavaVM* vm); + JNIEnv* get() const noexcept { return _env; } + + private: + // Instance Variables + JavaVM* _vm; + JNIEnv* _env; + bool _attached; ///< Manually attached, as opposed to already attached. + }; + + ScopedEnv::~ScopedEnv() + { + if (_vm && _attached) + _vm->DetachCurrentThread(); + } + + void ScopedEnv::init(JavaVM* vm) + { + if (_env != nullptr) + return; + + if (vm == nullptr) + throw InitializationException("JNI not initialized"); + + if (!getEnv(vm, &_env)) + { +#ifdef __ANDROID__ + if (vm->AttachCurrentThread(&_env, nullptr) != 0) +#else + if (vm->AttachCurrentThread((void**)&_env, nullptr) != 0) +#endif + throw InitializationException("Could not attach JNI to thread"); + + _attached = true; + } + + _vm = vm; + } + + /* + Helper Functions + */ + +#ifdef _WIN32 + + static bool fileExists(const std::string& filePath) + { + DWORD attr = ::GetFileAttributesA(filePath.c_str()); + + return attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY); + } + +#else + + /** + Convert from a UTF-16 Java string to a UTF-32 string. + */ + std::wstring toWString(const jchar* str, jsize length) + { + std::wstring result; + + result.reserve(length); + + for (jsize i = 0; i < length; ++i) + { + wchar_t ch = str[i]; + + // Check for a two-segment character. + if (ch >= wchar_t(0xD800) && ch <= wchar_t(0xDBFF)) { + if (i + 1 >= length) + break; + + // Create a single, 32-bit character. + ch = (ch - wchar_t(0xD800)) << 10; + ch += str[i++] - wchar_t(0x1DC00); + } + + result += ch; + } + + return result; + } + + /** + Convert from a UTF-32 string to a UTF-16 Java string. + */ + std::basic_string toJString(const wchar_t* str, size_t length) + { + std::basic_string result; + + result.reserve(length * 2); // Worst case scenario. + + for (size_t i = 0; i < length; ++i) + { + wchar_t ch = str[i]; + + // Check for multi-byte UTF-16 character. + if (ch > wchar_t(0xFFFF)) { + ch -= uint32_t(0x10000); + + // Add the first of the two-segment character. + result += jchar(0xD800 + (ch >> 10)); + ch = wchar_t(0xDC00) + (ch & 0x03FF); + } + + result += jchar(ch); + } + + return result; + } + +#endif // _WIN32 + + JNIEnv* env() + { + static thread_local ScopedEnv env; + + if (env.get() != nullptr && !isAttached(javaVm)) + { + // we got detached, so clear it. + // will be re-populated from static javaVm below. + env = ScopedEnv{}; + } + + if (env.get() == nullptr) + { + env.init(javaVm); + } + + return env.get(); + } + + static jclass findClass(const char* name) + { + jclass ref = env()->FindClass(name); + + if (ref == nullptr) + { + env()->ExceptionClear(); + throw NameResolutionException(name); + } + + return ref; + } + + static void handleJavaExceptions() + { + JNIEnv* env = jni::env(); + + jthrowable exception = env->ExceptionOccurred(); + + if (exception != nullptr) + { + Object obj(exception, Object::Temporary); + + env->ExceptionClear(); + std::string msg = obj.call("toString"); + throw InvocationException(msg.c_str()); + } + } + + static std::string toString(jobject handle, bool deleteLocal = true) + { + std::string result; + + if (handle != nullptr) + { + JNIEnv* env = jni::env(); + + const char* chars = env->GetStringUTFChars(jstring(handle), nullptr); + result.assign(chars, env->GetStringUTFLength(jstring(handle))); + env->ReleaseStringUTFChars(jstring(handle), chars); + + if (deleteLocal) + env->DeleteLocalRef(handle); + } + + return result; + } + + static std::wstring toWString(jobject handle, bool deleteLocal = true) + { + std::wstring result; + + if (handle != nullptr) + { + JNIEnv* env = jni::env(); + + const jchar* chars = env->GetStringChars(jstring(handle), nullptr); +#ifdef _WIN32 + result.assign((const wchar_t*) chars, env->GetStringLength(jstring(handle))); +#else + result = toWString(chars, env->GetStringLength(jstring(handle))); +#endif + env->ReleaseStringChars(jstring(handle), chars); + + if (deleteLocal) + env->DeleteLocalRef(handle); + } + + return result; + } + + + /* + Stand-alone Function Implementations + */ + + void init(JNIEnv* env) + { + bool expected = false; + + if (isVm.compare_exchange_strong(expected, true)) + { + if (javaVm == nullptr && env->GetJavaVM(&javaVm) != 0) + throw InitializationException("Could not acquire Java VM"); + } + } + + void init(JavaVM* vm) { + bool expected = false; + + if (isVm.compare_exchange_strong(expected, true)) + { + javaVm = vm; + } + } + /* + Object Implementation + */ + + Object::Object() noexcept : _handle(nullptr), _class(nullptr), _isGlobal(false) + { + } + + Object::Object(const Object& other) : _handle(nullptr), _class(nullptr), _isGlobal(!other.isNull()) + { + if (!other.isNull()) + _handle = env()->NewGlobalRef(other._handle); + } + + Object::Object(Object&& other) noexcept : _handle(other._handle), _class(other._class), _isGlobal(other._isGlobal) + { + other._handle = nullptr; + other._class = nullptr; + other._isGlobal = false; + } + + Object::Object(jobject ref, int scopeFlags) : _handle(ref), _class(nullptr), _isGlobal((scopeFlags & Temporary) == 0) + { + if (!_isGlobal) + return; + + JNIEnv* env = jni::env(); + + _handle = env->NewGlobalRef(ref); + + if (scopeFlags & DeleteLocalInput) + env->DeleteLocalRef(ref); + } + + Object::~Object() noexcept + { + JNIEnv* env = jni::env(); + + if (_isGlobal) + env->DeleteGlobalRef(_handle); + + if (_class != nullptr) + env->DeleteGlobalRef(_class); + } + + Object& Object::operator=(const Object& other) + { + if (_handle != other._handle) + { + JNIEnv* env = jni::env(); + + // Ditch the old reference. + if (_isGlobal) + env->DeleteGlobalRef(_handle); + if (_class != nullptr) + env->DeleteGlobalRef(_class); + + // Assign the new reference. + if ((_isGlobal = !other.isNull()) != false) + _handle = env->NewGlobalRef(other._handle); + + _class = nullptr; + } + + return *this; + } + + bool Object::operator==(const Object& other) const + { + return env()->IsSameObject(_handle, other._handle) != JNI_FALSE; + } + + Object& Object::operator=(Object&& other) + { + if (_handle != other._handle) + { + JNIEnv* env = jni::env(); + + // Ditch the old reference. + if (_isGlobal) + env->DeleteGlobalRef(_handle); + if (_class != nullptr) + env->DeleteGlobalRef(_class); + + // Assign the new reference. + _handle = other._handle; + _isGlobal = other._isGlobal; + _class = other._class; + + other._handle = nullptr; + other._isGlobal = false; + other._class = nullptr; + } + + return *this; + } + + bool Object::isNull() const noexcept + { + return _handle == nullptr || env()->IsSameObject(_handle, nullptr); + } + + void Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + env()->CallVoidMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + } + + bool Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallBooleanMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result != 0; + } + + bool Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetBooleanField(_handle, field) != 0; + } + + template <> void Object::set(field_t field, const bool& value) + { + env()->SetBooleanField(_handle, field, value); + } + + byte_t Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallByteMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + wchar_t Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallCharMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + short Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallShortMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + int Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallIntMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + long long Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallLongMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + float Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallFloatMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + double Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallDoubleMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + std::string Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallObjectMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return toString(result); + } + + std::wstring Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallObjectMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return toWString(result); + } + + jni::Object Object::callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const + { + auto result = env()->CallObjectMethodA(_handle, method, (jvalue*) args); + handleJavaExceptions(); + return Object(result, DeleteLocalInput); + } + + byte_t Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetByteField(_handle, field); + } + + wchar_t Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetCharField(_handle, field); + } + + short Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetShortField(_handle, field); + } + + int Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetIntField(_handle, field); + } + + long long Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetLongField(_handle, field); + } + + float Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetFloatField(_handle, field); + } + + double Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return env()->GetDoubleField(_handle, field); + } + + std::string Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return toString(env()->GetObjectField(_handle, field)); + } + + std::wstring Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return toWString(env()->GetObjectField(_handle, field)); + } + + Object Object::getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const + { + return Object(env()->GetObjectField(_handle, field), DeleteLocalInput); + } + + template <> void Object::set(field_t field, const byte_t& value) + { + env()->SetByteField(_handle, field, value); + } + + template <> void Object::set(field_t field, const wchar_t& value) + { + env()->SetCharField(_handle, field, value); + } + + template <> void Object::set(field_t field, const short& value) + { + env()->SetShortField(_handle, field, value); + } + + template <> void Object::set(field_t field, const int& value) + { + env()->SetIntField(_handle, field, value); + } + + template <> void Object::set(field_t field, const long long& value) + { + env()->SetLongField(_handle, field, value); + } + + template <> void Object::set(field_t field, const float& value) + { + env()->SetFloatField(_handle, field, value); + } + + template <> void Object::set(field_t field, const double& value) + { + env()->SetDoubleField(_handle, field, value); + } + + template <> void Object::set(field_t field, const std::string& value) + { + JNIEnv* env = jni::env(); + + jobject handle = env->NewStringUTF(value.c_str()); + env->SetObjectField(_handle, field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Object::set(field_t field, const std::wstring& value) + { + JNIEnv* env = jni::env(); + +#ifdef _WIN32 + jobject handle = env->NewString((const jchar*) value.c_str(), jsize(value.length())); +#else + auto jstr = toJString(value.c_str(), value.length()); + jobject handle = env->NewString(jstr.c_str(), jsize(jstr.length())); +#endif + env->SetObjectField(_handle, field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Object::set(field_t field, const wchar_t* const& value) + { + JNIEnv* env = jni::env(); +#ifdef _WIN32 + jobject handle = env->NewString((const jchar*) value, jsize(std::wcslen(value))); +#else + auto jstr = toJString(value, std::wcslen(value)); + jobject handle = env->NewString(jstr.c_str(), jsize(jstr.length())); +#endif + env->SetObjectField(_handle, field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Object::set(field_t field, const char* const& value) + { + JNIEnv* env = jni::env(); + + jobject handle = env->NewStringUTF(value); + env->SetObjectField(_handle, field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Object::set(field_t field, const Object& value) + { + env()->SetObjectField(_handle, field, value.getHandle()); + } + + template <> void Object::set(field_t field, const Object* const& value) + { + env()->SetObjectField(_handle, field, value ? value->getHandle() : nullptr); + } + + jclass Object::getClass() const + { + if (_class == nullptr) + { + JNIEnv* env = jni::env(); + + jclass classRef = env->GetObjectClass(_handle); + _class = jclass(env->NewGlobalRef(classRef)); + env->DeleteLocalRef(classRef); + } + + return _class; + } + + method_t Object::getMethod(const char* name, const char* signature) const + { + return Class(getClass(), Temporary).getMethod(name, signature); + } + + method_t Object::getMethod(const char* nameAndSignature) const + { + return Class(getClass(), Temporary).getMethod(nameAndSignature); + } + + field_t Object::getField(const char* name, const char* signature) const + { + return Class(getClass(), Temporary).getField(name, signature); + } + + jobject Object::makeLocalReference() const + { + if (isNull()) + return nullptr; + return env()->NewLocalRef(_handle); + } + + /* + Class Implementation + */ + + Class::Class(const char* name) : Object(findClass(name), DeleteLocalInput) + { + } + + Class::Class(jclass ref, int scopeFlags) : Object(ref, scopeFlags) + { + } + + Object Class::newInstance() const + { + method_t constructor = getMethod("", "()V"); + jobject obj = env()->NewObject(getHandle(), constructor); + + handleJavaExceptions(); + + return Object(obj, Object::DeleteLocalInput); + } + + field_t Class::getField(const char* name, const char* signature) const + { + jfieldID id = env()->GetFieldID(getHandle(), name, signature); + + if (id == nullptr) + throw NameResolutionException(name); + + return id; + } + + field_t Class::getStaticField(const char* name, const char* signature) const + { + jfieldID id = env()->GetStaticFieldID(getHandle(), name, signature); + + if (id == nullptr) + throw NameResolutionException(name); + + return id; + } + + method_t Class::getMethod(const char* name, const char* signature) const + { + jmethodID id = env()->GetMethodID(getHandle(), name, signature); + + if (id == nullptr) + throw NameResolutionException(name); + + return id; + } + + + method_t Class::getMethod(const char* nameAndSignature) const + { + jmethodID id = nullptr; + const char* sig = std::strchr(nameAndSignature, '('); + + if (sig != nullptr) + return getMethod(std::string(nameAndSignature, sig - nameAndSignature).c_str(), sig); + + if (id == nullptr) + throw NameResolutionException(nameAndSignature); + + return id; + } + + method_t Class::getStaticMethod(const char* name, const char* signature) const + { + jmethodID id = env()->GetStaticMethodID(getHandle(), name, signature); + + if (id == nullptr) + throw NameResolutionException(name); + + return id; + } + + method_t Class::getStaticMethod(const char* nameAndSignature) const + { + jmethodID id = nullptr; + const char* sig = std::strchr(nameAndSignature, '('); + + if (sig != nullptr) + return getStaticMethod(std::string(nameAndSignature, sig - nameAndSignature).c_str(), sig); + + if (id == nullptr) + throw NameResolutionException(nameAndSignature); + + return id; + } + + Class Class::getParent() const + { + return Class(env()->GetSuperclass(getHandle()), DeleteLocalInput); + } + + std::string Class::getName() const + { + return Object::call("getName"); + } + + template <> bool Class::get(field_t field) const + { + return env()->GetStaticBooleanField(getHandle(), field) != 0; + } + + template <> byte_t Class::get(field_t field) const + { + return env()->GetStaticByteField(getHandle(), field); + } + + template <> wchar_t Class::get(field_t field) const + { + return env()->GetStaticCharField(getHandle(), field); + } + + template <> short Class::get(field_t field) const + { + return env()->GetStaticShortField(getHandle(), field); + } + + template <> int Class::get(field_t field) const + { + return env()->GetStaticIntField(getHandle(), field); + } + + template <> long long Class::get(field_t field) const + { + return env()->GetStaticLongField(getHandle(), field); + } + + template <> float Class::get(field_t field) const + { + return env()->GetStaticFloatField(getHandle(), field); + } + + template <> double Class::get(field_t field) const + { + return env()->GetStaticDoubleField(getHandle(), field); + } + + template <> std::string Class::get(field_t field) const + { + return toString(env()->GetStaticObjectField(getHandle(), field)); + } + + template <> std::wstring Class::get(field_t field) const + { + return toWString(env()->GetStaticObjectField(getHandle(), field)); + } + + template <> Object Class::get(field_t field) const + { + return Object(env()->GetStaticObjectField(getHandle(), field), DeleteLocalInput); + } + + template <> void Class::set(field_t field, const bool& value) + { + env()->SetStaticBooleanField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const byte_t& value) + { + env()->SetStaticByteField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const wchar_t& value) + { + env()->SetStaticCharField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const short& value) + { + env()->SetStaticShortField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const int& value) + { + env()->SetStaticIntField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const long long& value) + { + env()->SetStaticLongField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const float& value) + { + env()->SetStaticFloatField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const double& value) + { + env()->SetStaticDoubleField(getHandle(), field, value); + } + + template <> void Class::set(field_t field, const Object& value) + { + env()->SetStaticObjectField(getHandle(), field, value.getHandle()); + } + + template <> void Class::set(field_t field, const Object* const& value) + { + env()->SetStaticObjectField(getHandle(), field, value ? value->getHandle() : nullptr); + } + + template <> void Class::set(field_t field, const std::string& value) + { + JNIEnv* env = jni::env(); + + jobject handle = env->NewStringUTF(value.c_str()); + env->SetStaticObjectField(getHandle(), field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Class::set(field_t field, const std::wstring& value) + { + JNIEnv* env = jni::env(); + +#ifdef _WIN32 + jobject handle = env->NewString((const jchar*) value.c_str(), jsize(value.length())); +#else + auto jstr = toJString(value.c_str(), value.length()); + jobject handle = env->NewString(jstr.c_str(), jsize(jstr.length())); +#endif + env->SetStaticObjectField(getHandle(), field, handle); + env->DeleteLocalRef(handle); + } + + template <> void Class::callStaticMethod(method_t method, internal::value_t* args) const + { + env()->CallStaticVoidMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + } + + template <> bool Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticBooleanMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result != 0; + } + + template <> byte_t Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticByteMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> wchar_t Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticCharMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> short Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticShortMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> int Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticIntMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> long long Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticLongMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> float Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticFloatMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> double Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticDoubleMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> std::string Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticObjectMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return toString(result); + } + + template <> std::wstring Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticObjectMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return toWString(result); + } + + template <> jni::Object Class::callStaticMethod(method_t method, internal::value_t* args) const + { + auto result = env()->CallStaticObjectMethodA(getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return Object(result, DeleteLocalInput); + } + + template <> void Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + env()->CallNonvirtualVoidMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + } + + template <> bool Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualBooleanMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result != 0; + } + + template <> byte_t Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualByteMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> wchar_t Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualCharMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> short Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualShortMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> int Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualIntMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> long long Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualLongMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> float Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualFloatMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> double Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualDoubleMethodA(obj, getHandle(), method, (jvalue*) args); + handleJavaExceptions(); + return result; + } + + template <> std::string Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualObjectMethodA(obj, getHandle(), method, (jvalue*)args); + handleJavaExceptions(); + return toString(result); + } + + template <> std::wstring Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualObjectMethodA(obj, getHandle(), method, (jvalue*)args); + handleJavaExceptions(); + return toWString(result); + } + + template <> Object Class::callExactMethod(jobject obj, method_t method, internal::value_t* args) const + { + auto result = env()->CallNonvirtualObjectMethodA(obj, getHandle(), method, (jvalue*)args); + handleJavaExceptions(); + return Object(result, DeleteLocalInput); + } + + Object Class::newObject(method_t constructor, internal::value_t* args) const + { + jobject ref = env()->NewObjectA(getHandle(), constructor, (jvalue*)args); + handleJavaExceptions(); + return Object(ref, DeleteLocalInput); + } + + /* + Enum Implementation + */ + + Enum::Enum(const char* name) : Class(name) + { + _name = "L"; + _name += name; + _name += ";"; + } + + Object Enum::get(const char* name) const + { + return Class::get(getStaticField(name, _name.c_str())); + } + + /* + Array Implementation + */ + + template <> Array::Array(long length) : Object(env()->NewBooleanArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewByteArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewCharArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewShortArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewIntArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewLongArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewFloatArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewDoubleArray(length)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewObjectArray(length, Class("java/lang/String").getHandle(), nullptr)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewObjectArray(length, Class("java/lang/String").getHandle(), nullptr)), _length(length) + { + } + + template <> Array::Array(long length) : Object(env()->NewObjectArray(length, Class("java/lang/Object").getHandle(), nullptr)), _length(length) + { + } + + template <> Array::Array(long length, const Class& type) : Object(env()->NewObjectArray(length, type.getHandle(), nullptr)), _length(length) + { + } + + template <> bool Array::getElement(long index) const + { + jboolean output; + env()->GetBooleanArrayRegion(jbooleanArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> byte_t Array::getElement(long index) const + { + jbyte output; + env()->GetByteArrayRegion(jbyteArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> wchar_t Array::getElement(long index) const + { + jchar output; + env()->GetCharArrayRegion(jcharArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> short Array::getElement(long index) const + { + jshort output; + env()->GetShortArrayRegion(jshortArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> int Array::getElement(long index) const + { + jint output; + env()->GetIntArrayRegion(jintArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> long long Array::getElement(long index) const + { + jlong output; + env()->GetLongArrayRegion(jlongArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> float Array::getElement(long index) const + { + jfloat output; + env()->GetFloatArrayRegion(jfloatArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> double Array::getElement(long index) const + { + jdouble output; + env()->GetDoubleArrayRegion(jdoubleArray(getHandle()), index, 1, &output); + handleJavaExceptions(); + return output; + } + + template <> std::string Array::getElement(long index) const + { + jobject output = env()->GetObjectArrayElement(jobjectArray(getHandle()), index); + handleJavaExceptions(); + return toString(output); + } + + template <> std::wstring Array::getElement(long index) const + { + jobject output = env()->GetObjectArrayElement(jobjectArray(getHandle()), index); + handleJavaExceptions(); + return toWString(output); + } + + template <> Object Array::getElement(long index) const + { + jobject output = env()->GetObjectArrayElement(jobjectArray(getHandle()), index); + handleJavaExceptions(); + return Object(output, DeleteLocalInput); + } + + template <> void Array::setElement(long index, bool value) + { + jboolean jvalue = value; + env()->SetBooleanArrayRegion(jbooleanArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, byte_t value) + { + jbyte jvalue = value; + env()->SetByteArrayRegion(jbyteArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, wchar_t value) + { + jchar jvalue = value; + env()->SetCharArrayRegion(jcharArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, short value) + { + jshort jvalue = value; + env()->SetShortArrayRegion(jshortArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, int value) + { + jint jvalue = value; + env()->SetIntArrayRegion(jintArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, long long value) + { + jlong jvalue = value; + env()->SetLongArrayRegion(jlongArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, float value) + { + jfloat jvalue = value; + env()->SetFloatArrayRegion(jfloatArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, double value) + { + jdouble jvalue = value; + env()->SetDoubleArrayRegion(jdoubleArray(getHandle()), index, 1, &jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, std::string value) + { + JNIEnv* env = jni::env(); + + jobject jvalue = env->NewStringUTF(value.c_str());; + env->SetObjectArrayElement(jobjectArray(getHandle()), index, jvalue); + env->DeleteLocalRef(jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, std::wstring value) + { + JNIEnv* env = jni::env(); + +#ifdef _WIN32 + jobject jvalue = env->NewString((const jchar*) value.c_str(), jsize(value.length())); +#else + auto jstr = toJString(value.c_str(), value.length()); + jobject jvalue = env->NewString(jstr.c_str(), jsize(jstr.length())); +#endif + env->SetObjectArrayElement(jobjectArray(getHandle()), index, jvalue); + env->DeleteLocalRef(jvalue); + handleJavaExceptions(); + } + + template <> void Array::setElement(long index, Object value) + { + env()->SetObjectArrayElement(jobjectArray(getHandle()), index, value.getHandle()); + handleJavaExceptions(); + } + + /* + Vm Implementation + */ + + typedef jint (JNICALL *CreateVm_t)(JavaVM**, void**, void*); + +#ifndef _WIN32 + static bool fileExists(const std::string& filePath) + { + return access(filePath.c_str(), F_OK) != -1; + } + + template + static ssize_t readlink_safe(const char *pathname, char (&output)[N]) { + auto len = readlink(pathname, output, N - 1); + if (len > 0) { + output[len] = '\0'; + } + return len; + } + + static std::pair + readlink_as_string(const char *pathname) { + char buf[2048] = {}; + auto len = readlink_safe(pathname, buf); + if (len <= 0) { + return {len, {}}; + } + return {len, std::string{buf, static_cast(len)}}; + } + static std::string readlink_deep(const char *pathname) { + std::string prev{pathname}; + ssize_t len = 0; + std::string next; + while (true) { + std::tie(len, next) = readlink_as_string(prev.c_str()); + if (!next.empty()) { + prev = next; + } else { + return prev; + } + } + } + + static std::string drop_path_components(const std::string & path, size_t num_components) { + size_t pos = std::string::npos; + size_t slash_pos = std::string::npos; + for (size_t i = 0; i < num_components; ++i) { + slash_pos = path.find_last_of('/', pos); + if (slash_pos == std::string::npos || slash_pos == 0) { + return {}; + } + pos = slash_pos - 1; + } + return std::string{path.c_str(), slash_pos}; + } +#endif + static std::string detectJvmPath() + { + std::string result; + +#ifdef _WIN32 + + BYTE buffer[1024]; + DWORD size = sizeof(buffer); + HKEY versionKey; + + // Search via registry entries. + if (::RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\JavaSoft\\Java Runtime Environment\\", &versionKey) == ERROR_SUCCESS) + { + if (::RegQueryValueEx(versionKey, "CurrentVersion", NULL, NULL, buffer, &size) == ERROR_SUCCESS) + { + HKEY libKey; + + std::string keyName = std::string("Software\\JavaSoft\\Java Runtime Environment\\") + (const char*)buffer; + + ::RegCloseKey(versionKey); + + if (::RegOpenKeyA(HKEY_LOCAL_MACHINE, keyName.c_str(), &libKey) == ERROR_SUCCESS) + { + size = sizeof(buffer); + + if (::RegQueryValueEx(libKey, "RuntimeLib", NULL, NULL, buffer, &size) == ERROR_SUCCESS) + { + result = (const char*)buffer; + } + + ::RegCloseKey(libKey); + } + } + } + + if (result.length() == 0) + { + // Could not locate via registry. Try the JAVA_HOME environment variable. + if ((size = ::GetEnvironmentVariableA("JAVA_HOME", (LPSTR) buffer, sizeof(buffer))) != 0) + { + std::string javaHome((const char*) buffer, size); + + // Different installers put in different relative locations. + std::string options[] = { + javaHome + "\\jre\\bin\\client\\jvm.dll", + javaHome + "\\jre\\bin\\server\\jvm.dll", + javaHome + "\\bin\\client\\jvm.dll", + javaHome + "\\bin\\server\\jvm.dll" + }; + + for (auto const& i : options) + if (fileExists(i)) + return i; + } + } + +#else + + const char* javaHome = getenv("JAVA_HOME"); + if (javaHome != nullptr) { + #ifdef __APPLE__ + std::string libJvmPath = std::string(javaHome) + "/jre/lib/server/libjvm.dylib"; + #else + std::string libJvmPath = std::string(javaHome) + "/jre/lib/amd64/server/libjvm.so"; + #endif + result = libJvmPath; + } else { + std::string path = readlink_deep("/usr/bin/java"); + if (!path.empty()) { + // drop bin and java + auto javaHome = drop_path_components(path, 2); + if (!javaHome.empty()) { + std::string options[] = { + javaHome + "/jre/lib/amd64/server/libjvm.so", + javaHome + "/jre/lib/amd64/client/libjvm.so", + javaHome + "/jre/lib/server/libjvm.so", + javaHome + "/jre/lib/client/libjvm.so", + javaHome + "/lib/server/libjvm.so", + javaHome + "/lib/client/libjvm.so", + }; + + for (auto const &i : options) { + fprintf(stderr, "trying %s\n", i.c_str()); + if (fileExists(i)) { + return i; + } + } + } + } + // Best guess so far. + result = "/usr/lib/jvm/default-java/jre/lib/amd64/server/libjvm.so"; + } + +#endif // _WIN32 + + return result; + } + + Vm::Vm(const char* path_) + { + bool expected = false; + + std::string path = path_ ? path_ : detectJvmPath(); + + if (path.length() == 0) + throw InitializationException("Could not locate Java Virtual Machine"); + if (!isVm.compare_exchange_strong(expected, true)) + throw InitializationException("Java Virtual Machine already initialized"); + + if (javaVm == nullptr) + { + JNIEnv* env; + JavaVMInitArgs args = {}; + args.version = JNI_VERSION_1_2; + +#ifdef _WIN32 + + HMODULE lib = ::LoadLibraryA(path.c_str()); + + if (lib == NULL) + { + isVm.store(false); + throw InitializationException("Could not load JVM library"); + } + + CreateVm_t JNI_CreateJavaVM = (CreateVm_t) ::GetProcAddress(lib, "JNI_CreateJavaVM"); + + /** + Is your debugger catching an error here? This is normal. Just continue. The JVM + intentionally does this to test how the OS handles memory-reference exceptions. + */ + if (JNI_CreateJavaVM == NULL || JNI_CreateJavaVM(&javaVm, (void**) &env, &args) != 0) + { + isVm.store(false); + ::FreeLibrary(lib); + throw InitializationException("Java Virtual Machine failed during creation"); + } + +#else + + void* lib = ::dlopen(path.c_str(), RTLD_NOW | RTLD_GLOBAL); + + if (lib == NULL) + { + isVm.store(false); + throw InitializationException("Could not load JVM library"); + } + + CreateVm_t JNI_CreateJavaVM = (CreateVm_t) ::dlsym(lib, "JNI_CreateJavaVM"); + + if (JNI_CreateJavaVM == NULL || JNI_CreateJavaVM(&javaVm, (void**) &env, &args) != 0) + { + isVm.store(false); + ::dlclose(lib); + throw InitializationException("Java Virtual Machine failed during creation"); + } + +#endif // _WIN32 + } + } + + Vm::~Vm() + { + /* + Note that you can't ever *really* unload the JavaVM. If you call + DestroyJavaVM(), you can't then call JNI_CreateJavaVM() again. + So, instead we just flag it as "gone". + */ + isVm.store(false); + } + + // Forward Declarations + JNIEnv* env(); + +#ifndef _WIN32 + extern std::basic_string toJString(const wchar_t* str, size_t length); +#endif + + namespace internal + { + // Base Type Conversions + void valueArg(value_t* v, bool a) { ((jvalue*) v)->z = jboolean(a); } + void valueArg(value_t* v, byte_t a) { ((jvalue*) v)->b = a; } + void valueArg(value_t* v, wchar_t a) { ((jvalue*) v)->c = jchar(a); } // Note: Possible truncation. + void valueArg(value_t* v, short a) { ((jvalue*) v)->s = a; } + void valueArg(value_t* v, int a) { ((jvalue*) v)->i = a; } + void valueArg(value_t* v, long long a) { ((jvalue*) v)->j = a; } + void valueArg(value_t* v, float a) { ((jvalue*) v)->f = a; } + void valueArg(value_t* v, double a) { ((jvalue*) v)->d = a; } + void valueArg(value_t* v, jobject a) { ((jvalue*) v)->l = a; } + void valueArg(value_t* v, const Object& a) { ((jvalue*) v)->l = a.getHandle(); } + void valueArg(value_t* v, const Object* const& a) { ((jvalue*) v)->l = a ? a->getHandle() : nullptr; } + + /* + Object Implementations + */ + + std::string valueSig(const Object* obj) + { + if (obj == nullptr || obj->isNull()) + return "Ljava/lang/Object;"; // One can always hope... + + std::string name = Class(obj->getClass(), Object::Temporary).getName(); + + // Change from "java.lang.Object" format to "java/lang/Object"; + for (size_t i = 0; i < name.length(); ++i) + if (name[i] == '.') + name[i] = '/'; + + return "L" + name + ";"; + } + + /* + String Implementations + */ + + void valueArg(value_t* v, const std::string& a) + { + ((jvalue*) v)->l = env()->NewStringUTF(a.c_str()); + } + + template <> void cleanupArg(value_t* v) + { + env()->DeleteLocalRef(((jvalue*) v)->l); + } + + void valueArg(value_t* v, const char* a) + { + ((jvalue*) v)->l = env()->NewStringUTF(a); + } + + void valueArg(value_t* v, std::nullptr_t) + { + ((jvalue*) v)->l = nullptr; + } + + template <> void cleanupArg(value_t* v) + { + env()->DeleteLocalRef(((jvalue*) v)->l); + } +#ifdef _WIN32 + + void valueArg(value_t* v, const std::wstring& a) + { + ((jvalue*) v)->l = env()->NewString((const jchar*) a.c_str(), jsize(a.length())); + } + + void valueArg(value_t* v, const wchar_t* a) + { + ((jvalue*) v)->l = env()->NewString((const jchar*) a, jsize(std::wcslen(a))); + } +#else + + void valueArg(value_t* v, const std::wstring& a) + { + auto jstr = toJString(a.c_str(), a.length()); + ((jvalue*) v)->l = env()->NewString(jstr.c_str(), jsize(jstr.length())); + } + + void valueArg(value_t* v, const wchar_t* a) + { + auto jstr = toJString(a, std::wcslen(a)); + ((jvalue*) v)->l = env()->NewString(jstr.c_str(), jsize(jstr.length())); + } + +#endif + + template <> void cleanupArg(value_t* v) + { + env()->DeleteLocalRef(((jvalue*) v)->l); + } + + template <> void cleanupArg(value_t* v) + { + env()->DeleteLocalRef(((jvalue*) v)->l); + } + + long getArrayLength(jarray array) + { + return env()->GetArrayLength(array); + } + } +} + diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.h b/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.h new file mode 100644 index 000000000..017bdd923 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/jnipp.h @@ -0,0 +1,1092 @@ +#ifndef _JNIPP_H_ +#define _JNIPP_H_ 1 + +// Standard Dependencies +#include +#include // For std::runtime_error +#include + +// Forward Declarations +struct JNIEnv_; +struct _JNIEnv; +struct JavaVM_; +struct _JavaVM; +struct _jmethodID; +struct _jfieldID; +class _jobject; +class _jclass; +class _jarray; + +namespace jni +{ + // JNI Base Types +#ifdef __ANDROID__ + typedef _JNIEnv JNIEnv; + typedef _JavaVM JavaVM; +#else + typedef JNIEnv_ JNIEnv; + typedef JavaVM_ JavaVM; +#endif + + typedef _jobject* jobject; + typedef _jclass* jclass; + typedef _jarray* jarray; + + /** + You can save a method via its handle using Class::getMethod() if it is + going to be used often. This saves Object::call() from having to locate + the method each time by name. + + Note that these handles are global and do not need to be deleted. + */ + typedef _jmethodID* method_t; + + /** + You can save a field via its handle using Class::getField() if it is + going to be used often. This saves Object::set() and Object::get() from + having to locate the field each time by name. + + Note that these handles are global and do not need to be deleted. + */ + typedef _jfieldID* field_t; + + /** + Type used to denote the Java byte type. + */ + typedef unsigned char byte_t; + +#ifdef JNIPP_EXCEPTION_CLASS + + /** + Base class for thrown Exceptions. + */ + typedef JNIPP_EXCEPTION_CLASS Exception; + +#else + + /** + Base class for thrown Exceptions. + */ + typedef std::runtime_error Exception; + +#endif // JNIPP_EXCEPTION_CLASS + + // Foward Declarations + class Object; + + /** + This namespace is for messy implementation details only. It is not a part + of the external API and is subject to change at any time. It is only in a + header file due to the fact it is required by some template functions. + + Long story short... this stuff be messy, yo. + */ + namespace internal + { + /* + Signature Generation + */ + + inline std::string valueSig(const void*) { return "V"; } + inline std::string valueSig(const bool*) { return "Z"; } + inline std::string valueSig(const byte_t*) { return "B"; } + inline std::string valueSig(const wchar_t*) { return "C"; } + inline std::string valueSig(const short*) { return "S"; } + inline std::string valueSig(const int*) { return "I"; } + inline std::string valueSig(const long long*) { return "J"; } + inline std::string valueSig(const float*) { return "F"; } + inline std::string valueSig(const double*) { return "D"; } + inline std::string valueSig(const std::string*) { return "Ljava/lang/String;"; } + inline std::string valueSig(const std::wstring*) { return "Ljava/lang/String;"; } + inline std::string valueSig(const char* const*) { return "Ljava/lang/String;"; } + inline std::string valueSig(const wchar_t* const*) { return "Ljava/lang/String;"; } + std::string valueSig(const Object* obj); + inline std::string valueSig(const Object* const* obj) { return valueSig(obj ? *obj : nullptr); } + + template + inline std::string valueSig(const TArg(*arg)[n]) { return valueSig((const TArg* const*)arg); } + + inline std::string sig() { return ""; } + + template + std::string sig(const TArg& arg, const TArgs&... args) { + return valueSig(&arg) + sig(args...); + } + + /* + Argument Conversion + */ + + typedef long long value_t; + + void valueArg(value_t* v, bool a); + void valueArg(value_t* v, byte_t a); + void valueArg(value_t* v, wchar_t a); + void valueArg(value_t* v, short a); + void valueArg(value_t* v, int a); + void valueArg(value_t* v, long long a); + void valueArg(value_t* v, float a); + void valueArg(value_t* v, double a); + void valueArg(value_t* v, jobject a); + void valueArg(value_t* v, const Object& a); + void valueArg(value_t* v, const Object* const& a); + void valueArg(value_t* v, const std::string& a); + void valueArg(value_t* v, const char* a); + void valueArg(value_t* v, const std::wstring& a); + void valueArg(value_t* v, const wchar_t* a); + void valueArg(value_t* v, std::nullptr_t); + + inline void args(value_t*) {} + + template + void args(value_t* values, const TArg& arg, const TArgs&... args) { + valueArg(values, arg); + internal::args(values + 1, args...); + } + + template void cleanupArg(value_t* /* value */) {} + template <> void cleanupArg(value_t* value); + template <> void cleanupArg(value_t* value); + template <> void cleanupArg(value_t* value); + template <> void cleanupArg(value_t* value); + + template + void cleanupArgs(value_t* values) { + cleanupArg(values); + cleanupArgs(values + 1); + } + + template <> + inline void cleanupArgs(value_t* /* values */) {} + + template + class ArgArray + { + public: + ArgArray(const TArgs&... args) { + std::memset(this, 0, sizeof(ArgArray)); + internal::args(values, args...); + } + + ~ArgArray() { + cleanupArgs(values); + } + + value_t values[sizeof...(TArgs)]; + }; + + /* specialization for empty array - no args. Avoids "empty array" warning. */ + template <> + class ArgArray<> + { + public: + ArgArray() { + std::memset(this, 0, sizeof(ArgArray<>)); + } + + ~ArgArray() { + } + + value_t values[1]; + }; + long getArrayLength(jarray array); + + /** + * @brief Used as a tag type for dispatching internally based on return type. + * + * @tparam T The type to wrap. + */ + template + struct ReturnTypeWrapper + { + using type = T; + }; + } + + /** + Initialises the Java Native Interface with the given JNIEnv handle, which + gets passed into a native function which is called from Java. This only + needs to be done once per process - further calls are no-ops. + \param env A JNI environment handle. + */ + void init(JNIEnv* env); + /** + Initialises the Java Native Interface with the given JavaVM handle, + which may be accessible. This (or the other overload) only needs to be + done once per process - further calls are no-ops. + \param vm A JNI VM handle. + */ + void init(JavaVM* vm); + + /** + Get the appropriate JNI environment for this thread. + */ + JNIEnv* env(); + + /** + Object corresponds with a `java.lang.Object` instance. With an Object, + you can then call Java methods, and access fields on the Object. To + instantiate an Object of a given class, use the `Class` class. + */ + class Object + { + public: + /** Flags which can be passed to the Object constructor. */ + enum ScopeFlags + { + Temporary = 1, ///< Temporary object. Do not create a global reference. + DeleteLocalInput = 2 ///< The input reference is temporary and can be deleted. + }; + + /** Default constructor. Creates a `null` object. */ + Object() noexcept; + + /** + Copies a reference to another Object. Note that this is not a deep + copy operation, and both Objects will reference the same Java + Object. + \param other The Object to copy. + */ + Object(const Object& other); + + /** + Move constructor. Copies the Object reference from the supplied + Object, and then nulls the supplied Object reference. + \param other The Object to move. + */ + Object(Object&& other) noexcept; + + /** + Creates an Object from a local JNI reference. + \param ref The local JNI reference. + \param scopeFlags Bitmask of ScopeFlags values. + */ + Object(jobject ref, int scopeFlags = 0); + + /** + Destructor. Releases this reference on the Java Object so it can be + picked up by the garbage collector. + */ + virtual ~Object() noexcept; + + /** + Assignment operator. Copies the object reference from the supplied + Object. They will now both point to the same Java Object. + \param other The Object to copy. + \return This Object. + */ + Object& operator=(const Object& other); + + /** + Assignment operator. Moves the object reference from the supplied + Object to this one, and leaves the other one as a null. + \param other The Object to move. + \return This Object. + */ + Object& operator=(Object&& other); + + /** + Tells whether the two Objects refer to the same Java Object. + \param other the Object to compare with. + \return `true` if the same, `false` otherwise. + */ + bool operator==(const Object& other) const; + + /** + Tells whether the two Objects refer to the same Java Object. + \param other the Object to compare with. + \return `true` if the different, `false` otherwise. + */ + bool operator!=(const Object& other) const { return !operator==(other); } + + /** + Calls the given method on this Object. The method should have no + parameters. Note that the return type should be explicitly stated + in the function call. + \param method A method handle which applies to this Object. + \return The method's return value. + */ + template + TReturn call(method_t method) const { return callMethod(method, nullptr, internal::ReturnTypeWrapper{}); } + + /** + Calls the method on this Object with the given name, and no arguments. + Note that the return type should be explicitly stated in the function + call. + \param name The name of the method to call (with optional signature). + \return The method's return value. + */ + template + TReturn call(const char* name) const { + if (std::strstr(name, "()")) + return call(getMethod(name)); + + // No signature supplied. Generate our own. + method_t method = getMethod(name, ("()" + internal::valueSig((TReturn*) nullptr)).c_str()); + return call(method); + } + + /** + Calls the method on this Object and supplies the given arguments. + Note that the return type should be explicitly stated in the function + call. + \param method The method to call. + \param args Arguments to supply to the method. + \return The method's return value. + */ + template + TReturn call(method_t method, const TArgs&... args) const { + internal::ArgArray transform(args...); + return callMethod(method, transform.values, internal::ReturnTypeWrapper{}); + } + + /** + Calls the method on this Object and supplies the given arguments. + Note that the return type should be explicitly stated in the function + call. The type signature of the method is calculated by the types of + the supplied arguments. + \param name The name of the method to call (and optional signature). + \param args Arguments to supply to the method. + \return The method's return value. + */ + template + TReturn call(const char* name, const TArgs&... args) const { + if (std::strchr(name, '(')) + return call(getMethod(name), args...); + + std::string sig = "(" + internal::sig(args...) + ")" + internal::valueSig((TReturn*) nullptr); + method_t method = getMethod(name, sig.c_str()); + return call(method, args...); + } + + /** + Gets a field value from this Object. The field must belong to the + Object's class. Note that the field type should be explicitly stated + in the function call. + \param field Identifier for the field to retrieve. + \return The field's value. + */ + template + TType get(field_t field) const { + // If you get a compile error here, then you've asked for a type + // we don't know how to get from JNI directly. + return getFieldValue(field, internal::ReturnTypeWrapper{}); + } + + /** + Gets a field value from this Object. The field must belong to the + Object's class. Note that the field type should be explicitly stated + in the function call. + \param name The name of the field to retrieve. + \return The field's value. + */ + template + TType get(const char* name) const { + field_t field = getField(name, internal::valueSig((TType*) nullptr).c_str()); + return get(field); + } + + /** + Sets a field's value on this Object. The field must belong to the + Object's class, and the parameter's type should correspond to the + type of the field. + \param field The field to set the value to. + \param value The value to set. + */ + template + void set(field_t field, const TType& value); + + /** + Sets a field's value on this Object. The field must belong to the + Object's class, and the parameter's type should correspond to the + type of the field. + \param name The name of the field to set the value to. + \param value The value to set. + */ + template + void set(const char* name, const TType& value) { + field_t field = getField(name, internal::valueSig((TType*) nullptr).c_str()); + set(field, value); + } + + /** + Tells whether this Object is currently a `null` pointer. + \return `true` if `null`, `false` if it references an object. + */ + bool isNull() const noexcept; + + /** + Gets a handle for this Object's class. Ideally, this should just return a Class, + but C++ won't let us do that that. + \return The Object's Class's handle. + */ + jclass getClass() const; + + /** + Gets the underlying JNI jobject handle. + \return The JNI handle. + */ + jobject getHandle() const noexcept { return _handle; } + + /** + Create a local reference for the underlying JNI handle. + \return The local reference. + */ + jobject makeLocalReference() const; + + private: + // Helper Functions + method_t getMethod(const char* name, const char* signature) const; + method_t getMethod(const char* nameAndSignature) const; + field_t getField(const char* name, const char* signature) const; + + void callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + bool callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + byte_t callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + wchar_t callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + short callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + int callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + long long callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + float callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + double callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + std::string callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + std::wstring callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + jni::Object callMethod(method_t method, internal::value_t* args, internal::ReturnTypeWrapper const&) const; + + + void getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + bool getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + byte_t getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + wchar_t getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + short getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + int getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + long long getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + float getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + double getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + std::string getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + std::wstring getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + jni::Object getFieldValue(field_t field, internal::ReturnTypeWrapper const&) const; + + // Instance Variables + jobject _handle; + mutable jclass _class; + bool _isGlobal; + }; + + /** + Class corresponds with `java.lang.Class`, and allows you to instantiate + Objects and get class members such as methods and fields. + */ + class Class : protected Object + { + public: + /** + Creates a null class reference. + */ + Class() : Object() {} + + /** + Obtains a class reference to the Java class with the given qualified + name. + \param name The qualified class name (e.g. "java/lang/String"). + */ + Class(const char* name); + + /** + Creates a Class object by JNI reference. + \param ref The JNI class reference. + \param scopeFlags Bitmask of Object::ScopeFlags. + */ + Class(jclass ref, int scopeFlags = Temporary); + + /** + Tells whether this Class is null or valid. + \return `true` if null, `false` if valid. + */ + bool isNull() const noexcept { return Object::isNull(); } + + /** + Creates a new instance of this Java class and returns a reference to + it. The item's parameterless constructor is called. + \return The created instance. + */ + Object newInstance() const; + + /** + Creates a new instance of this Java class and returns a reference to + it. + \param constructor The constructor to call. + \param args Arguments to supply to the constructor. + \return The created instance. + */ + template + Object newInstance(method_t constructor, const TArgs&... args) const { + internal::ArgArray transform(args...); + return newObject(constructor, transform.values); + } + + /** + Creates a new instance of this Java class and returns a reference to + it. The constructor signature is determined by the supplied parameters, + and the parameters are then passed to the constructor. + \param args Arguments to supply to the constructor. + \return The created instance. + */ + template + Object newInstance(const TArgs&... args) const { + method_t constructor = getMethod("", ("(" + internal::sig(args...) + ")V").c_str()); + return newInstance(constructor, args...); + } + + /** + Gets a handle to the field with the given name and type signature. + This handle can then be stored so that the field does not need to + be looked up by name again. It does not need to be deleted. + \param name The name of the field. + \param signature The JNI type signature of the field. + \return The field ID. + */ + field_t getField(const char* name, const char* signature) const; + + /** + Gets a handle to the field with the given name and the supplied type. + This handle can then be stored so that the field does not need to + be looked up by name again. It does not need to be deleted. + \param name The name of the field. + \return The field ID. + */ + template + field_t getField(const char* name) const { + return getField(name, internal::valueSig((TType*) nullptr).c_str()); + } + + /** + Gets a handle to the static field with the given name and type signature. + This handle can then be stored so that the field does not need to + be looked up by name again. It does not need to be deleted. + \param name The name of the field. + \param signature The JNI type signature of the field. + \return The field ID. + */ + field_t getStaticField(const char* name, const char* signature) const; + + /** + Gets a handle to the static field with the given name and the supplied type. + This handle can then be stored so that the field does not need to + be looked up by name again. It does not need to be deleted. + \param name The name of the field. + \return The field ID. + */ + template + field_t getStaticField(const char* name) const { + return getStaticField(name, internal::valueSig((TType*)nullptr).c_str()); + } + + /** + Gets a handle to the method with the given name and signature. + This handle can then be stored so that the method does not need + to be looked up by name again. It does not need to be deleted. + \param name The name of the method. + \param signature The JNI method signature. + \return The method ID. + */ + method_t getMethod(const char* name, const char* signature) const; + + /** + Gets a handle to the method with the given name and signature. + This handle can then be stored so that the method does not need + to be looked up by name again. It does not need to be deleted. + \param nameAndSignature Name and signature identifier (e.g. "toString()Ljava/lang/String;"). + \return The method ID. + */ + method_t getMethod(const char* nameAndSignature) const; + + /** + Gets a handle to the static method with the given name and signature. + This handle can then be stored so that the method does not need + to be looked up by name again. It does not need to be deleted. + \param name The name of the method. + \param signature The JNI method signature. + \return The method ID. + */ + method_t getStaticMethod(const char* name, const char* signature) const; + + /** + Gets a handle to the static method with the given name and signature. + This handle can then be stored so that the method does not need + to be looked up by name again. It does not need to be deleted. + \param nameAndSignature Name and signature identifier (e.g. "toString()Ljava/lang/String;"). + \return The method ID. + */ + method_t getStaticMethod(const char* nameAndSignature) const; + + /** + Gets a handle to the constructor for this Class with the given + signature. Note that the return type should always be `void` ("V"). + \param signature The JNI method signature for the constructor. + \return The constructor method ID. + */ + method_t getConstructor(const char* signature) const { return getMethod("", signature); } + + /** + Gets the parent Class of this Class. + \return The parent class. + */ + Class getParent() const; + + /** + Gets the JNI-qualified name of this Class. + \return The Class name. + */ + std::string getName() const; + + /** + Calls a static method on this Class. The method should have no + parameters. Note that the return type should be explicitly stated + in the function call. + \param method A method handle which applies to this Object. + \return The method's return value. + */ + template + TReturn call(method_t method) const { return callStaticMethod(method, nullptr); } + + /** + Calls a static method on this Class with the given name, and no arguments. + Note that the return type should be explicitly stated in the function + call. + \param name The name of the method to call. + \return The method's return value. + */ + template + TReturn call(const char* name) const { + method_t method = getStaticMethod(name, ("()" + internal::valueSig((TReturn*) nullptr)).c_str()); + return call(method); + } + + /** + Calls a static method on this Class and supplies the given arguments. + Note that the return type should be explicitly stated in the function + call. + \param method The method to call. + \param args Arguments to supply to the method. + \return The method's return value. + */ + template + TReturn call(method_t method, const TArgs&... args) const { + internal::ArgArray transform(args...); + return callStaticMethod(method, transform.values); + } + + /** + Calls a static method on this Class and supplies the given arguments. + Note that the return type should be explicitly stated in the function + call. The type signature of the method is calculated by the types of + the supplied arguments. + \param name The name of the method to call. + \param args Arguments to supply to the method. + \return The method's return value. + */ + template + TReturn call(const char* name, const TArgs&... args) const { + if (std::strchr(name, '(')) + return call(getStaticMethod(name), args...); + + std::string sig = "(" + internal::sig(args...) + ")" + internal::valueSig((TReturn*) nullptr); + method_t method = getStaticMethod(name, sig.c_str()); + return call(method, args...); + } + + /** + Calls a non-static method on this Class, applying it to the supplied + Object. The difference between this and Object.call() is that the + specific class implementation of the method is called, rather than + doing a virtual method lookup. + \param obj The Object to call the method on. + \param method The method to call. + \return The method's return value. + */ + template + TReturn call(const Object& obj, method_t method) const { + return callExactMethod(obj.getHandle(), method, nullptr); + } + + /** + Calls a non-static method on this Class, applying it to the supplied + Object. The difference between this and Object.call() is that the + specific class implementation of the method is called, rather than + doing a virtual method lookup. + \param obj The Object to call the method on. + \param name The name of the method to call. + \return The method's return value. + */ + template + TReturn call(const Object& obj, const char* name) const { + method_t method = getMethod(name, ("()" + internal::valueSig((TReturn*) nullptr)).c_str()); + return call(obj, method); + } + template + TReturn call(const Object* obj, const char* name) const { + return call(obj, name); + } + + /** + Calls a non-static method on this Class, applying it to the supplied + Object. The difference between this and Object.call() is that the + specific class implementation of the method is called, rather than + doing a virtual method lookup. + \param obj The Object to call the method on. + \param method The method to call. + \param args Arguments to pass to the method. + \return The method's return value. + */ + template + TReturn call(const Object& obj, method_t method, const TArgs&... args) const { + internal::ArgArray transform(args...); + return callExactMethod(obj.getHandle(), method, transform.values); + } + template + TReturn call(const Object* obj, method_t method, const TArgs&... args) const { + return call(*obj, method, args...); + } + + /** + Calls a non-static method on this Class, applying it to the supplied + Object. The difference between this and Object.call() is that the + specific class implementation of the method is called, rather than + doing a virtual method lookup. + \param obj The Object to call the method on. + \param name The name of the method to call. + \param args Arguments to pass to the method. + \return The method's return value. + */ + template + TReturn call(const Object& obj, const char* name, const TArgs&... args) const { + std::string sig = "(" + internal::sig(args...) + ")" + internal::valueSig((TReturn*) nullptr); + method_t method = getMethod(name, sig.c_str()); + return call(obj, method, args...); + } + template + TReturn call(const Object* obj, const char* name, const TArgs&... args) const { + return call(*obj, name, args...); + } + + /** + Gets a static field value from this Class. Note that the field type + should be explicitly stated in the function call. + \param field Identifier for the field to retrieve. + \return The field's value. + */ + template + TType get(field_t field) const; + + /** + Gets a static field value from this Class. Note that the field type + should be explicitly stated in the function call. + \param name The name of the field to retrieve. + \return The field's value. + */ + template + TType get(const char* name) const { + field_t field = getStaticField(name, internal::valueSig((TType*) nullptr).c_str()); + return get(field); + } + + /** + Sets a static field's value on this Class. The parameter's type should + correspond to the type of the field. + \param field The field to set the value to. + \param value The value to set. + */ + template + void set(field_t field, const TType& value); + + /** + Sets a static field's value on this Class. The parameter's type + should correspond to the type of the field. + \param name The name of the field to set the value to. + \param value The value to set. + */ + template + void set(const char* name, const TType& value) { + field_t field = getStaticField(name, internal::valueSig((TType*) nullptr).c_str()); + set(field, value); + } + + /** + Gets the underlying JNI jclass handle. + \return The JNI handle. + */ + jclass getHandle() const noexcept { return jclass(Object::getHandle()); } + + private: + // Helper Functions + template TType callStaticMethod(method_t method, internal::value_t* values) const; + template TType callExactMethod(jobject obj, method_t method, internal::value_t* values) const; + Object newObject(method_t constructor, internal::value_t* args) const; + }; + + /** + Convenience class for dealing with Java enums. + */ + class Enum : protected Class + { + public: + /** + Loads the Enum with the given JNI-formatted name. + \param name The name of the enum. + */ + Enum(const char* name); + + /** + Gets the enum value with the given name. + \param name The name of the enum value. + \return The enum value identifier. + */ + Object get(const char* name) const; + + private: + // Instance Variables + std::string _name; + }; + + /** + Used to interact with native Java arrays. The element type can be any primitive + type, jni::Object, std::string or std::wstring. + */ + template + class Array : public Object + { + public: + /** + Default constructor. Creates a null array reference. + */ + Array() noexcept; + + /** + Creates a Array object by JNI reference. + \param ref The JNI array reference. + \param scopeFlags Bitmask of Object::ScopeFlags. + */ + Array(jarray ref, int scopeFlags = Temporary); + + /** + Creates an Array of the given length. The elements are default initialised + to zero / null values. + \param length The Array length. + */ + Array(long length); + + /** + Creates an Array of the given length. A Class type is also specified, but can + be left null to default to "java.lang.Object". + \param length The Array length. + \param type The element type. + + */ + Array(long length, const Class& type); + + /** + Copy constructor. Shares a reference to the Java array with the + copied Array object. + \param other The Array to copy. + */ + Array(const Array& other); + + /** + Move constructor. Moves the array reference to the new Array, and leaves + the previous Array as a null reference. + \param other The Array to move. + */ + Array(Array&& other) noexcept; + + /** + Assignment operator. Copies the array reference from the supplied + Array. They will now both point to the same Java array. + \param other The Array to copy. + \return This Array. + */ + Array& operator=(const Array& other); + + /** + Assignment operator. Moves the array reference from the supplied + Array to this one, and leaves the other one as a null. + \param other The Array to move. + \return This Array. + */ + Array& operator=(Array&& other); + + /** + Checks whether these Arrays both reference the same java array. + \param other The Array to compare with. + \return true if the same (or both null), false otherwise. + */ + bool operator==(const Array& other) const { return Object::operator==(other); } + + /** + Checks whether these Arrays reference different the java arrays. + \param other The Array to compare with. + \return false if the same (or both null), true otherwise. + */ + bool operator!=(const Array& other) const { return !operator==(other); } + + /** + Sets the element value at the given index in the Array. + \param index The zero-based index. + \param value The value to set. + */ + void setElement(long index, TElement value); + + /** + Gets the value at the given index within the Array. + \param index The zero-based index. + \return The element at the given index. + */ + TElement getElement(long index) const; + TElement operator[](long index) const { return getElement(index); } + + /** + Gets the length of this Array. + \return The array length. + */ + long getLength() const; + + /** + Gets the underlying JNI jarray handle. + \return The JNI handle. + */ + jarray getHandle() const noexcept { return jarray(Object::getHandle()); } + + private: + // Instance Variables + mutable long _length; ///< Mutable as it may only finally get set in a getLength() call. + }; + + /** + When the application's entry point is in C++ rather than in Java, it will + need to spin up its own instance of the Java Virtual Machine (JVM) before + it can initialize the Java Native Interface. Vm is used to create and + destroy a running JVM instance. + + It uses the RAII idiom, so when the destructor is called, the Vm is shut + down. + + Note that currently only one instance is supported. Attempts to create + more will result in an InitializationException. + */ + class Vm final + { + public: + /** + Starts the Java Virtual Machine. + \param path The path to the jvm.dll (or null for auto-detect). + */ + Vm(const char* path = nullptr); + + /** Destroys the running instance of the JVM. */ + ~Vm(); + }; + + /** + A Java method call threw an Exception. + */ + class InvocationException : public Exception + { + public: + /** + Constructor with an error message. + \param msg Message to pass to the Exception. + */ + InvocationException(const char* msg = "Java Exception detected") : Exception(msg) {} + }; + + /** + A supplied name or type signature could not be resolved. + */ + class NameResolutionException : public Exception + { + public: + /** + Constructor with an error message. + \param name The name of the unresolved symbol. + */ + NameResolutionException(const char* name) : Exception(name) {} + }; + + /** + The Java Native Interface was not properly initialized. + */ + class InitializationException : public Exception + { + public: + /** + Constructor with an error message. + \param msg Message to pass to the Exception. + */ + InitializationException(const char* msg) : Exception(msg) {} + }; + + /* + Array Implementation + */ + + template + Array::Array() noexcept : Object(), _length(0) + { + } + + template + Array::Array(jarray ref, int scopeFlags) : Object((jobject) ref, scopeFlags), _length(-1) + { + } + + template + Array::Array(const Array& other) : Object(other), _length(other._length) + { + } + + template + Array::Array(Array&& other) noexcept : Object((Object&&)other), _length(other._length) + { + other._length = 0; + } + + template + Array& Array::operator=(const Array& other) + { + if (&other != this) + { + Object::operator=(other); + _length = other._length; + } + + return *this; + } + + template + Array& Array::operator=(Array&& other) + { + if (&other != this) + { + Object::operator=((Object&&) other); + _length = other._length; + + other._length = 0; + } + + return *this; + } + + template + long Array::getLength() const + { + if (_length < 0) + { + _length = internal::getArrayLength(getHandle()); + } + + return _length; + } +} + +#endif // _JNIPP_H_ + diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/CMakeLists.txt b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/CMakeLists.txt new file mode 100644 index 000000000..b17c12d94 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/CMakeLists.txt @@ -0,0 +1,18 @@ +# Copyright 2021, Collabora, Ltd. +# +# SPDX-License-Identifier: MIT + +add_executable(main_test main.cpp testing.h) +target_link_libraries(main_test PRIVATE jnipp) +add_test(NAME main_test COMMAND main_test) + +add_executable(external_create external_create.cpp testing.h) +target_link_libraries(external_create PUBLIC jnipp ${JNI_LIBRARIES}) +target_include_directories(external_create PUBLIC ${JNI_INCLUDE_DIRS}) +add_test(NAME external_create COMMAND external_create) + + +add_executable(external_detach external_detach.cpp testing.h) +target_link_libraries(external_detach PUBLIC jnipp ${JNI_LIBRARIES}) +target_include_directories(external_detach PUBLIC ${JNI_INCLUDE_DIRS}) +add_test(NAME external_detach COMMAND external_detach) diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_create.cpp b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_create.cpp new file mode 100644 index 000000000..735c248cb --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_create.cpp @@ -0,0 +1,37 @@ +// Project Dependencies +#include +#include + +// Standard Dependencies +#include + +// Local Dependencies +#include "testing.h" + +/* + jni::Vm Tests + */ +TEST(Vm_externalCreateAndAttach) { + JNIEnv *env; + JavaVMInitArgs args = {}; + args.version = JNI_VERSION_1_2; + JavaVM *javaVm{}; + auto ret = JNI_CreateJavaVM(&javaVm, (void **)&env, &args); + ASSERT(ret == 0); + + { + jni::init(env); + jni::Class cls("java/lang/String"); + } + JavaVM *localVmPointer{}; + + ret = env->GetJavaVM(&localVmPointer); + ASSERT(ret == 0); +} + +int main() { + // jni::Vm Tests + RUN_TEST(Vm_externalCreateAndAttach); + + return 0; +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_detach.cpp b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_detach.cpp new file mode 100644 index 000000000..dda0245d1 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/external_detach.cpp @@ -0,0 +1,34 @@ +// Project Dependencies +#include +#include + +// Standard Dependencies +#include + +// Local Dependencies +#include "testing.h" + +/* + jni::Vm Tests + */ +TEST(Vm_externalDetach) { + jni::Vm vm; + + jni::Class cls("java/lang/String"); + + JNIEnv *env = (JNIEnv *)jni::env(); + JavaVM *localVmPointer{}; + + auto ret = env->GetJavaVM(&localVmPointer); + ASSERT(ret == 0); + ret = localVmPointer->DetachCurrentThread(); + ASSERT(ret == 0); + + ASSERT(1); +} + +int main() { + // jni::Vm Tests + RUN_TEST(Vm_externalDetach); + return 0; +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/main.cpp b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/main.cpp new file mode 100644 index 000000000..7c1adfcb1 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/main.cpp @@ -0,0 +1,627 @@ +// Project Dependencies +#include + +// Standard Dependencies +#include + +// Local Dependencies +#include "testing.h" + +/* + jni::Vm Tests + */ + + +TEST(Vm_detectsJreInstall) +{ + try + { + jni::Vm vm; + } + catch (jni::InitializationException&) + { + ASSERT(0); + return; + } + + ASSERT(1); +} + +TEST(Vm_notAllowedMultipleVms) +{ + try + { + jni::Vm firstVm; + jni::Vm secondVm; // Throws an exception. + } + catch (jni::InitializationException&) + { + ASSERT(1); + return; + } + + ASSERT(0); +} + +/* + jni::Class Tests + */ + + +TEST(Class_findByName_success) +{ + jni::Class cls("java/lang/String"); + + ASSERT(!cls.isNull()); +} + +TEST(Class_findByName_failure) +{ + try + { + jni::Class cls("does/not/Exist"); + } + catch (jni::NameResolutionException&) + { + ASSERT(1); + return; + } + + ASSERT(0); +} + +TEST(Class_getName) +{ + jni::Class cls("java/lang/String"); + + ASSERT(cls.getName() == "java.lang.String"); +} + +TEST(Class_getParent) +{ + jni::Class parent = jni::Class("java/lang/Integer").getParent(); + + ASSERT(parent.getName() == "java.lang.Number"); +} + +TEST(Class_newInstance) +{ + jni::Class Integer("java/lang/Integer"); + jni::method_t constructor = Integer.getConstructor("(Ljava/lang/String;)V"); + jni::Object i = Integer.newInstance(constructor, "123"); + jni::Object str = jni::Class("java/lang/String").newInstance(); + + ASSERT(!i.isNull()); + ASSERT(!str.isNull()); +} + +TEST(Class_newInstance_withArgs) +{ + jni::Object str1 = jni::Class("java/lang/String").newInstance("Testing..."); + jni::Object str2 = jni::Class("java/lang/String").newInstance(L"Testing..."); + + ASSERT(!str1.isNull()); + ASSERT(!str2.isNull()); +} + +TEST(Class_getStaticField) +{ + jni::field_t field = jni::Class("java/lang/Integer").getStaticField("MAX_VALUE", "I"); + + ASSERT(field); +} + +TEST(Class_getMethod) +{ + jni::method_t method1 = jni::Class("java/lang/Integer").getMethod("intValue", "()I"); + jni::method_t method2 = jni::Class("java/lang/Integer").getMethod("intValue()I"); + + ASSERT(method1); + ASSERT(method2); +} + +TEST(Class_getStaticMethod) +{ + jni::method_t method = jni::Class("java/lang/Integer").getStaticMethod("compare", "(II)I"); + + ASSERT(method); +} + +TEST(Class_call) +{ + jni::Class Integer("java/lang/Math"); + + double x = Integer.call("random"); + + ASSERT(x >= 0.0); + ASSERT(x < 1.0); +} + +TEST(Class_get_staticField) +{ + jni::Class Integer("java/lang/Integer"); + jni::field_t field = Integer.getStaticField("SIZE", "I"); + + ASSERT(Integer.get(field) == 32); +} + +TEST(Class_get_staticField_byName) +{ + jni::Class Integer("java/lang/Integer"); + jni::Class Character("java/lang/Character"); + jni::Class Short("java/lang/Short"); + jni::Class Long("java/lang/Long"); + jni::Class Float("java/lang/Float"); + jni::Class Double("java/lang/Double"); + + ASSERT(Short.get("MAX_VALUE") == short(0x7FFF)); + ASSERT(Character.get("MAX_VALUE") == L'\xFFFF') + ASSERT(Integer.get("MAX_VALUE") == int(0x7FFFFFFF)); + ASSERT(Long.get("MAX_VALUE") == (long long) (0x7FFFFFFFFFFFFFFF)); + ASSERT(std::isnan(Float.get("NaN"))); + ASSERT(std::isnan(Double.get("NaN"))); +} + +TEST(Class_getConstructor) +{ + jni::Class Integer("java/lang/Integer"); + jni::method_t constructor = Integer.getConstructor("(Ljava/lang/String;)V"); + + ASSERT(constructor); +} + +TEST(Class_call_staticMethod) +{ + jni::Class Integer("java/lang/Integer"); + jni::method_t method = Integer.getStaticMethod("parseInt", "(Ljava/lang/String;)I"); + + int i = Integer.call(method, "1000"); + + ASSERT(i == 1000); +} + +TEST(Class_call_staticMethod_byName) +{ + int i = jni::Class("java/lang/Integer").call("parseInt", "1000"); + bool b = jni::Class("java/lang/Boolean").call("parseBoolean", "true"); + wchar_t c = jni::Class("java/lang/Character").call("toLowerCase", L'X'); + short s = jni::Class("java/lang/Short").call("parseShort", "1000"); + long long l = jni::Class("java/lang/Long").call("parseLong", "1000"); + float f = jni::Class("java/lang/Float").call("parseFloat", "123.0"); + double d = jni::Class("java/lang/Double").call("parseDouble", "123.0"); + + ASSERT(i == 1000); + ASSERT(b == true); + ASSERT(c == L'x'); + ASSERT(s == 1000); + ASSERT(l == 1000); + ASSERT(f == 123.0); // Warning: floating point comparison. + ASSERT(d == 123.0); // Warning: floating point comparison. +} + +/* + jni::Object Tests + */ + + +TEST(Object_defaultConstructor_isNull) +{ + jni::Object o; + + ASSERT(o.isNull()); +} + +TEST(Object_copyConstructorIsSameObject) +{ + jni::Object a = jni::Class("java/lang/String").newInstance(); + jni::Object b = a; + + ASSERT(a == b); +} + +TEST(Object_moveConstructor) +{ + jni::Object a = jni::Class("java/lang/String").newInstance(); + jni::Object b = std::move(a); + + ASSERT(a.isNull()); + ASSERT(!b.isNull()); +} + +TEST(Object_copyAssignmentOperator) +{ + jni::Object a = jni::Class("java/lang/String").newInstance(); + jni::Object b = jni::Class("java/lang/Integer").newInstance(0); + + a = b; + + ASSERT(a == b); +} + +TEST(Object_moveAssignmentOperator) +{ + jni::Object a = jni::Class("java/lang/String").newInstance(); + jni::Object b = jni::Class("java/lang/Integer").newInstance(0); + + a = std::move(b); + + ASSERT(!a.isNull()); + ASSERT(b.isNull()); +} + +TEST(Object_nullary_construct_from_signature) +{ + jni::Class String("java/lang/String"); + jni::method_t init = String.getMethod("", "()V"); + jni::Object i = String.newInstance(init); + ASSERT(!i.isNull()); + jni::internal::ArgArray<> a; +} + +TEST(Object_call) +{ + jni::Class Integer("java/lang/Integer"); + jni::method_t intValue = Integer.getMethod("intValue", "()I"); + jni::Object i = Integer.newInstance(100); + + ASSERT(i.call(intValue) == 100); +} + +TEST(Object_call_byName) +{ + jni::Object i = jni::Class("java/lang/Integer").newInstance(100); + jni::Object b = jni::Class("java/lang/Boolean").newInstance(true); + jni::Object s = jni::Class("java/lang/Short").newInstance(short(100)); + jni::Object l = jni::Class("java/lang/Long").newInstance(100LL); + jni::Object f = jni::Class("java/lang/Float").newInstance(100.0f); + jni::Object d = jni::Class("java/lang/Double").newInstance(100.0); + + ASSERT(i.call("intValue") == 100); + ASSERT(s.call("shortValue") == 100); + ASSERT(b.call("booleanValue") == true); + ASSERT(l.call("longValue") == 100LL); + ASSERT(f.call("floatValue") == 100.0f); // Warning: Floating point comparison. + ASSERT(d.call("doubleValue") == 100.0); // Warning: Floating point comparison. + ASSERT(i.call("toString") == L"100"); + ASSERT(i.call("toString") == "100"); +} + +TEST(Object_call_withArgs) +{ + jni::Class String("java/lang/String"); + jni::method_t charAt = String.getMethod("charAt", "(I)C"); + jni::Object str = String.newInstance("Testing"); + + ASSERT(str.call(charAt, 1) == L'e'); +} + +TEST(Object_call_byNameWithArgs) +{ + jni::Object str = jni::Class("java/lang/String").newInstance("Testing"); + jni::Object str2 = jni::Class("java/lang/String").newInstance(L"Testing"); + + ASSERT(str.call("charAt", 1) == L'e'); + ASSERT(str2.call("charAt", 1) == L'e'); +} + +TEST(Object_makeLocalReference) +{ + jni::Object str = jni::Class("java/lang/String").newInstance("Testing"); + + jni::jobject local = str.makeLocalReference(); + ASSERT(local != nullptr); + ASSERT(local != str.getHandle()); + + jni::Object fromLocal(local, jni::Object::DeleteLocalInput); + ASSERT(!fromLocal.isNull()); + ASSERT(str == fromLocal); +} + +/* + jni::Enum Tests + */ + + +TEST(Enum_get) +{ + jni::Class Thread("java/lang/Thread"); + jni::Enum State("java/lang/Thread$State"); + jni::method_t currentThread = Thread.getStaticMethod("currentThread", "()Ljava/lang/Thread;"); + jni::method_t getState = Thread.getMethod("getState", "()Ljava/lang/Thread$State;"); + + jni::Object thread = Thread.call(currentThread); + jni::Object state = thread.call(getState); + + ASSERT(state == State.get("RUNNABLE")); +} + +/* + jni::Array Tests + */ + +TEST(Array_defaultConstructor) +{ + jni::Array a; + + ASSERT(a.getLength() == 0); + ASSERT(a.isNull()); +} + +TEST(Array_constructor) +{ + jni::Array a(10); + + ASSERT(a.getLength() == 10); + ASSERT(!a.isNull()); +} + +TEST(Array_constructor_eachType) +{ + jni::Array b(10); + jni::Array c(10); + jni::Array s(10); + jni::Array i(10); + jni::Array l(10); + jni::Array f(10); + jni::Array d(10); + jni::Array str(10); + jni::Array wstr(10); + jni::Array obj(10); + jni::Array obj2(10, jni::Class("java/lang/Integer")); + + jni::Object* objs[] = { &b, &c, &s, &i, &l, &f, &d, &str, &wstr, &obj, &obj2 }; + + for (auto o : objs) + ASSERT(!o->isNull()); +} + +TEST(Array_constructor_withType) +{ + jni::Array a(10, jni::Class("java/lang/Integer")); + + ASSERT(a.getLength() == 10); + ASSERT(!a.isNull()); +} + +TEST(Array_copyConstructor) +{ + jni::Array a(10); + jni::Array b = a; + + ASSERT(a == b); +} + +TEST(Array_moveConstructor) +{ + jni::Array a(10); + jni::Array b = std::move(a); + + ASSERT(a.isNull()); + ASSERT(!b.isNull()); +} + +TEST(Array_copyAssignmentOperator) +{ + jni::Array a(10); + jni::Array b(11); + + a = b; + + ASSERT(a == b); +} + +TEST(Array_moveAssignmentOperator) +{ + jni::Array a(10); + jni::Array b(11); + + a = std::move(b); + + ASSERT(!a.isNull()); + ASSERT(b.isNull()); +} + +TEST(Array_getElement_defaultValue) +{ + jni::Array a(10); + jni::Array s(10); + + ASSERT(a.getElement(0) == 0); + ASSERT(s.getElement(0).length() == 0); +} + +TEST(Array_getElement_indexException) +{ + jni::Array a(10); + + try + { + int result = a.getElement(1000); + ASSERT(0); + } + catch (jni::Exception&) + { + ASSERT(1); + } +} + +TEST(Array_setElement_basicType) +{ + jni::Array a(10); + + for (int i = 0; i < 10; i++) + a.setElement(i, i); + + for (int i = 0; i < 10; i++) + ASSERT(a.getElement(i) == i); +} + +TEST(Array_setElement_string) +{ + jni::Array a(10); + + for (int i = 0; i < 10; i++) + a.setElement(i, std::to_wstring(i)); + + for (int i = 0; i < 10; i++) + ASSERT(a.getElement(i) == std::to_wstring(i)); +} + +TEST(Array_setElement_indexException) +{ + jni::Array s(10); + + try + { + auto result = s.getElement(1000); + ASSERT(0); + } + catch (jni::Exception&) + { + ASSERT(1); + } +} + +/* + Argument Type Tests + */ + + +TEST(Arg_bool) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", true); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", true); + + ASSERT(str1 == "true"); + ASSERT(str2 == L"true"); +} + +TEST(Arg_wchar) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", L'X'); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", L'X'); + + ASSERT(str1 == "X"); + ASSERT(str2 == L"X"); +} + +TEST(Arg_double) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", 123.0); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", 123.0); + + ASSERT(str1 == "123.0"); + ASSERT(str2 == L"123.0"); +} + +TEST(Arg_float) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", 123.0f); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", 123.0f); + + ASSERT(str1 == "123.0"); + ASSERT(str2 == L"123.0"); +} + +TEST(Arg_int) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", 123); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", 123); + + ASSERT(str1 == "123"); + ASSERT(str2 == L"123"); +} + +TEST(Arg_longLong) +{ + std::string str1 = jni::Class("java/lang/String").call("valueOf", 123LL); + std::wstring str2 = jni::Class("java/lang/String").call("valueOf", 123LL); + + ASSERT(str1 == "123"); + ASSERT(str2 == L"123"); +} + +TEST(Arg_Object) +{ + jni::Object str1 = jni::Class("java/lang/String").newInstance("123"); + int i = jni::Class("java/lang/Integer").call("parseInt", str1); + + ASSERT(i == 123); +} + +TEST(Arg_ObjectPtr) +{ + jni::Object str1 = jni::Class("java/lang/String").newInstance("123"); + int i = jni::Class("java/lang/Integer").call("parseInt", &str1); + + ASSERT(i == 123); +} + +int main() +{ + // jni::Vm Tests + RUN_TEST(Vm_detectsJreInstall); + RUN_TEST(Vm_notAllowedMultipleVms); + + { + jni::Vm vm; + + // jni::Class Tests + RUN_TEST(Class_findByName_success); + RUN_TEST(Class_findByName_failure); + RUN_TEST(Class_getName); + RUN_TEST(Class_getParent); + RUN_TEST(Class_newInstance); + RUN_TEST(Class_newInstance_withArgs); + RUN_TEST(Class_getStaticField); + RUN_TEST(Class_getMethod); + RUN_TEST(Class_getStaticMethod); + RUN_TEST(Class_call); + RUN_TEST(Class_get_staticField); + RUN_TEST(Class_get_staticField_byName); + RUN_TEST(Class_call_staticMethod_byName); + RUN_TEST(Class_getConstructor); + + // jni::Object Tests + RUN_TEST(Object_defaultConstructor_isNull); + RUN_TEST(Object_nullary_construct_from_signature); + RUN_TEST(Object_copyConstructorIsSameObject); + RUN_TEST(Object_moveConstructor); + RUN_TEST(Object_copyAssignmentOperator); + RUN_TEST(Object_moveAssignmentOperator); + RUN_TEST(Object_call); + RUN_TEST(Object_call_byName); + RUN_TEST(Object_call_withArgs); + RUN_TEST(Object_call_byNameWithArgs); + RUN_TEST(Object_makeLocalReference); + + // jni::Enum Tests + RUN_TEST(Enum_get); + + // jni::Array Tests + RUN_TEST(Array_defaultConstructor); + RUN_TEST(Array_constructor); + RUN_TEST(Array_constructor_eachType); + RUN_TEST(Array_constructor_withType); + RUN_TEST(Array_copyConstructor); + RUN_TEST(Array_moveConstructor); + RUN_TEST(Array_getElement_defaultValue); + RUN_TEST(Array_getElement_indexException); + RUN_TEST(Array_setElement_basicType); + RUN_TEST(Array_setElement_string); + RUN_TEST(Array_setElement_indexException); + + // Argument Type Tests + RUN_TEST(Arg_bool); + RUN_TEST(Arg_wchar); + RUN_TEST(Arg_double); + RUN_TEST(Arg_float); + RUN_TEST(Arg_int); + RUN_TEST(Arg_longLong); + RUN_TEST(Arg_Object); + RUN_TEST(Arg_ObjectPtr); + } + + return 0; +} + diff --git a/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/testing.h b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/testing.h new file mode 100644 index 000000000..4d6f6cc97 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jnipp/tests/testing.h @@ -0,0 +1,33 @@ +#ifndef _TESTING_H_ +#define _TESTING_H_ 1 + +// Standard Dependencies +#include +#include + +#ifdef ASSERT +# undef ASSERT +#endif + +/** Run the test with the given name. */ +#define RUN_TEST(TestName) { \ + bool __test_result = true; \ + std::cout << "Executing test " << std::left << std::setw(40) << #TestName; \ + TestName(__test_result); \ + std::cout << "=> " << (__test_result ? "Success" : "Fail") << std::endl; \ +} + +/** Define a test with the given name. */ +#define TEST(TestName) \ + void TestName(bool& __test_result) + +/** Ensures the given condition passes for the test to pass. */ +#define ASSERT(condition) { \ + if (!(condition)) { \ + __test_result = false; \ + return; \ + } \ +} + +#endif // _TESTING_H_ + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-format b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-format new file mode 100644 index 000000000..2a8066958 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-format @@ -0,0 +1,4 @@ +BasedOnStyle: LLVM +DerivePointerAlignment: false +PointerAlignment: Left + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-tidy b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-tidy new file mode 100644 index 000000000..99e914df9 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.clang-tidy @@ -0,0 +1,11 @@ +--- +Checks: 'google-readability-casting,modernize-deprecated-headers,modernize-loop-convert,modernize-use-auto,modernize-use-default-member-init,modernize-use-using,readability-else-after-return,readability-redundant-member-init,readability-redundant-string-cstr' +WarningsAsErrors: '' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +FormatStyle: none +CheckOptions: + - key: modernize-use-using.IgnoreMacros + value: '0' +... + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitattributes b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitattributes new file mode 100644 index 000000000..22d2b7a45 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitattributes @@ -0,0 +1,11 @@ +* text=auto +*.h text +*.cpp text +*.json text +*.in text +*.sh eol=lf +*.bat eol=crlf +*.vcproj eol=crlf +*.vcxproj eol=crlf +*.sln eol=crlf +devtools/agent_vm* eol=crlf diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/bug_report.md b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..35477097a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,26 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Meson version + - Ninja version + +**Additional context** +Add any other context about the problem here. diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/feature_request.md b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..bbcbbe7d6 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitignore b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitignore new file mode 100644 index 000000000..9682782fa --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/.gitignore @@ -0,0 +1,57 @@ +/build/ +/build-*/ +*.pyc +*.swp +*.actual +*.actual-rewrite +*.process-output +*.rewrite +/bin/ +/libs/ +/doc/doxyfile +/dist/ +/.cache/ + +# MSVC project files: +*.sln +*.vcxproj +*.filters +*.user +*.sdf +*.opensdf +*.suo + +# MSVC build files: +*.lib +*.obj +*.tlog/ +*.pdb + +# CMake-generated files: +CMakeFiles/ +/pkg-config/jsoncpp.pc +jsoncpp_lib_static.dir/ +compile_commands.json + +# In case someone runs cmake in the root-dir: +/CMakeCache.txt +/Makefile +/include/Makefile +/src/Makefile +/src/jsontestrunner/Makefile +/src/jsontestrunner/jsontestrunner_exe +/src/lib_json/Makefile +/src/test_lib_json/Makefile +/src/test_lib_json/jsoncpp_test +*.a + +# eclipse project files +.project +.cproject +/.settings/ + +# DS_Store +.DS_Store + +# temps +/version diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/AUTHORS b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/AUTHORS new file mode 100644 index 000000000..e1fa0fc3a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/AUTHORS @@ -0,0 +1,115 @@ +Baptiste Lepilleur + +Aaron Jacobs +Aaron Jacobs +Adam Boseley +Adam Boseley +Aleksandr Derbenev <13alexac@gmail.com> +Alexander Gazarov +Alexander V. Brezgin +Alexandr Brezgin +Alexey Kruchinin +Anton Indrawan +Baptiste Jonglez +Baptiste Lepilleur +Baruch Siach +Ben Boeckel +Benjamin Knecht +Bernd Kuhls +Billy Donahue +Braden McDorman +Brandon Myers +Brendan Drew +chason +chenguoping +Chris Gilling +Christopher Dawes +Christopher Dunn +Chuck Atkins +Cody P Schafer +Connor Manning +Cory Quammen +Cristóvão B da Cruz e Silva +Daniel Krügler +Dani-Hub +Dan Liu +datadiode +datadiode +David Seifert +David West +dawesc +Devin Jeanpierre +Dmitry Marakasov +dominicpezzuto +Don Milham +drgler +ds283 +Egor Tensin +eightnoteight +Evince +filipjs +findblar +Florian Meier +Gaëtan Lehmann +Gaurav +Gergely Nagy +Gida Pataki +I3ck +Iñaki Baz Castillo +Jacco +Jean-Christophe Fillion-Robin +Jonas Platte +Jordan Bayles +Jörg Krause +Keith Lea +Kevin Grant +Kirill V. Lyadvinsky +Kirill V. Lyadvinsky +Kobi Gurkan +Magnus Bjerke Vik +Malay Shah +Mara Kim +Marek Kotewicz +Mark Lakata +Mark Zeren +Martin Buck +Martyn Gigg +Mattes D +Matthias Loy +Merlyn Morgan-Graham +Michael Shields +Michał Górny +Mike Naberezny +mloy +Motti +nnkur +Omkar Wagh +paulo +pavel.pimenov +Paweł Bylica +Péricles Lopes Machado +Peter Spiess-Knafl +pffang +Rémi Verschelde +renu555 +Robert Dailey +Sam Clegg +selaselah +Sergiy80 +sergzub +Stefan Schweter +Stefano Fiorentino +Steffen Kieß +Steven Hahn +Stuart Eichert +SuperManitu +Techwolf +Tengiz Sharafiev +Tomasz Maciejewski +Vicente Olivert Riera +xiaoyur347 +ycqiu <429148848@qq.com> +yiqiju +Yu Xiaolei + +Google Inc. diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/BUILD.bazel b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/BUILD.bazel new file mode 100644 index 000000000..6d7ac3da9 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/BUILD.bazel @@ -0,0 +1,37 @@ +licenses(["unencumbered"]) # Public Domain or MIT + +exports_files(["LICENSE"]) + +cc_library( + name = "jsoncpp", + srcs = [ + "src/lib_json/json_reader.cpp", + "src/lib_json/json_tool.h", + "src/lib_json/json_value.cpp", + "src/lib_json/json_writer.cpp", + ], + hdrs = [ + "include/json/allocator.h", + "include/json/assertions.h", + "include/json/config.h", + "include/json/json_features.h", + "include/json/forwards.h", + "include/json/json.h", + "include/json/reader.h", + "include/json/value.h", + "include/json/version.h", + "include/json/writer.h", + ], + copts = [ + "-DJSON_USE_EXCEPTION=0", + "-DJSON_HAS_INT64", + ], + includes = ["include"], + visibility = ["//visibility:public"], + deps = [":private"], +) + +cc_library( + name = "private", + textual_hdrs = ["src/lib_json/json_valueiterator.inl"], +) diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CMakeLists.txt b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CMakeLists.txt new file mode 100644 index 000000000..2841277c0 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CMakeLists.txt @@ -0,0 +1,213 @@ +# vim: et ts=4 sts=4 sw=4 tw=0 + +# ==== Define cmake build policies that affect compilation and linkage default behaviors +# +# Set the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION string to the newest cmake version +# policies that provide successful builds. By setting JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION +# to a value greater than the oldest policies, all policies between +# JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION and CMAKE_VERSION (used for this build) +# are set to their NEW behaivor, thereby suppressing policy warnings related to policies +# between the JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION and CMAKE_VERSION. +# +# CMake versions greater than the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION policies will +# continue to generate policy warnings "CMake Warning (dev)...Policy CMP0XXX is not set:" +# +set(JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION "3.8.0") +set(JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION "3.13.2") +cmake_minimum_required(VERSION ${JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION}) +if("${CMAKE_VERSION}" VERSION_LESS "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}") + #Set and use the newest available cmake policies that are validated to work + set(JSONCPP_CMAKE_POLICY_VERSION "${CMAKE_VERSION}") +else() + set(JSONCPP_CMAKE_POLICY_VERSION "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}") +endif() +cmake_policy(VERSION ${JSONCPP_CMAKE_POLICY_VERSION}) +if(POLICY CMP0091) + cmake_policy(SET CMP0091 NEW) +endif() +# +# Now enumerate specific policies newer than JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION +# that may need to be individually set to NEW/OLD +# +foreach(pnew "") # Currently Empty + if(POLICY ${pnew}) + cmake_policy(SET ${pnew} NEW) + endif() +endforeach() +foreach(pold "") # Currently Empty + if(POLICY ${pold}) + cmake_policy(SET ${pold} OLD) + endif() +endforeach() + +# Build the library with C++11 standard support, independent from other including +# software which may use a different CXX_STANDARD or CMAKE_CXX_STANDARD. +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Ensure that CMAKE_BUILD_TYPE has a value specified for single configuration generators. +if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage.") +endif() + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +# --------------------------------------------------------------------------- +# use ccache if found, has to be done before project() +# --------------------------------------------------------------------------- +find_program(CCACHE_EXECUTABLE "ccache" HINTS /usr/local/bin /opt/local/bin) +if(CCACHE_EXECUTABLE) + message(STATUS "use ccache") + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_EXECUTABLE}" CACHE PATH "ccache" FORCE) + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_EXECUTABLE}" CACHE PATH "ccache" FORCE) +endif() + +project(jsoncpp + # Note: version must be updated in three places when doing a release. This + # annoying process ensures that amalgamate, CMake, and meson all report the + # correct version. + # 1. ./meson.build + # 2. ./include/json/version.h + # 3. ./CMakeLists.txt + # IMPORTANT: also update the PROJECT_SOVERSION!! + VERSION 1.9.5 # [.[.[.]]] + LANGUAGES CXX) + +message(STATUS "JsonCpp Version: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +set(PROJECT_SOVERSION 25) + +include(${CMAKE_CURRENT_SOURCE_DIR}/include/PreventInSourceBuilds.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/include/PreventInBuildInstalls.cmake) + +option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON) +option(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON) +option(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF) +option(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON) +option(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON) +option(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" ON) +option(JSONCPP_WITH_EXAMPLE "Compile JsonCpp example" OFF) +option(JSONCPP_STATIC_WINDOWS_RUNTIME "Use static (MT/MTd) Windows runtime" OFF) +option(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." ON) +option(BUILD_STATIC_LIBS "Build jsoncpp_lib as a static library." ON) +option(BUILD_OBJECT_LIBS "Build jsoncpp_lib as a object library." ON) + +# Adhere to GNU filesystem layout conventions +include(GNUInstallDirs) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Archive output dir.") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Library output dir.") +set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" CACHE PATH "PDB (MSVC debug symbol)output dir.") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Executable/dll output dir.") + +set(JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL") + +configure_file("${PROJECT_SOURCE_DIR}/version.in" + "${PROJECT_BINARY_DIR}/version" + NEWLINE_STYLE UNIX) + +macro(use_compilation_warning_as_error) + if(MSVC) + # Only enabled in debug because some old versions of VS STL generate + # warnings when compiled in release configuration. + add_compile_options($<$:/WX>) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-Werror) + if(JSONCPP_WITH_STRICT_ISO) + add_compile_options(-pedantic-errors) + endif() + endif() +endmacro() + +# Include our configuration header +include_directories(${jsoncpp_SOURCE_DIR}/include) + +if(MSVC) + # Only enabled in debug because some old versions of VS STL generate + # unreachable code warning when compiled in release configuration. + add_compile_options($<$:/W4>) + if (JSONCPP_STATIC_WINDOWS_RUNTIME) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() +endif() + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # using regular Clang or AppleClang + add_compile_options(-Wall -Wconversion -Wshadow) + + if(JSONCPP_WITH_WARNING_AS_ERROR) + add_compile_options(-Werror=conversion -Werror=sign-compare) + endif() +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # using GCC + add_compile_options(-Wall -Wconversion -Wshadow -Wextra) + # not yet ready for -Wsign-conversion + + if(JSONCPP_WITH_STRICT_ISO) + add_compile_options(-Wpedantic) + endif() + if(JSONCPP_WITH_WARNING_AS_ERROR) + add_compile_options(-Werror=conversion) + endif() +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + # using Intel compiler + add_compile_options(-Wall -Wconversion -Wshadow -Wextra) + + if(JSONCPP_WITH_WARNING_AS_ERROR) + add_compile_options(-Werror=conversion) + elseif(JSONCPP_WITH_STRICT_ISO) + add_compile_options(-Wpedantic) + endif() +endif() + +if(JSONCPP_WITH_WARNING_AS_ERROR) + use_compilation_warning_as_error() +endif() + +if(JSONCPP_WITH_PKGCONFIG_SUPPORT) + include(JoinPaths) + + join_paths(libdir_for_pc_file "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}") + join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") + + configure_file( + "pkg-config/jsoncpp.pc.in" + "pkg-config/jsoncpp.pc" + @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +endif() + +if(JSONCPP_WITH_CMAKE_PACKAGE) + include(CMakePackageConfigHelpers) + install(EXPORT jsoncpp + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp + FILE jsoncpp-targets.cmake) + configure_package_config_file(jsoncppConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp) + + write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfigVersion.cmake ${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfig.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/jsoncpp-namespaced-targets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp) +endif() + +if(JSONCPP_WITH_TESTS) + enable_testing() + include(CTest) +endif() + +# Build the different applications +add_subdirectory(src) + +#install the includes +add_subdirectory(include) + +#install the example +if(JSONCPP_WITH_EXAMPLE) + add_subdirectory(example) +endif() diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CONTRIBUTING.md b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CONTRIBUTING.md new file mode 100644 index 000000000..8d992bee7 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CONTRIBUTING.md @@ -0,0 +1,152 @@ +# Contributing to JsonCpp + +## Building + +Both CMake and Meson tools are capable of generating a variety of build environments for you preferred development environment. +Using cmake or meson you can generate an XCode, Visual Studio, Unix Makefile, Ninja, or other environment that fits your needs. + +An example of a common Meson/Ninja environment is described next. + +## Building and testing with Meson/Ninja +Thanks to David Seifert (@SoapGentoo), we (the maintainers) now use +[meson](http://mesonbuild.com/) and [ninja](https://ninja-build.org/) to build +for debugging, as well as for continuous integration (see +[`./.travis_scripts/meson_builder.sh`](./.travis_scripts/meson_builder.sh) ). Other systems may work, but minor +things like version strings might break. + +First, install both meson (which requires Python3) and ninja. +If you wish to install to a directory other than /usr/local, set an environment variable called DESTDIR with the desired path: + DESTDIR=/path/to/install/dir + +Then, +```sh + cd jsoncpp/ + BUILD_TYPE=debug + #BUILD_TYPE=release + LIB_TYPE=shared + #LIB_TYPE=static + meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE} + ninja -v -C build-${LIB_TYPE} + + ninja -C build-static/ test + + # Or + #cd build-${LIB_TYPE} + #meson test --no-rebuild --print-errorlogs + + sudo ninja install +``` + +## Building and testing with other build systems +See https://github.com/open-source-parsers/jsoncpp/wiki/Building + +## Running the tests manually + +You need to run tests manually only if you are troubleshooting an issue. + +In the instructions below, replace `path/to/jsontest` with the path of the +`jsontest` executable that was compiled on your platform. + + cd test + # This will run the Reader/Writer tests + python runjsontests.py path/to/jsontest + + # This will run the Reader/Writer tests, using JSONChecker test suite + # (http://www.json.org/JSON_checker/). + # Notes: not all tests pass: JsonCpp is too lenient (for example, + # it allows an integer to start with '0'). The goal is to improve + # strict mode parsing to get all tests to pass. + python runjsontests.py --with-json-checker path/to/jsontest + + # This will run the unit tests (mostly Value) + python rununittests.py path/to/test_lib_json + + # You can run the tests using valgrind: + python rununittests.py --valgrind path/to/test_lib_json + +## Building the documentation + +Run the Python script `doxybuild.py` from the top directory: + + python doxybuild.py --doxygen=$(which doxygen) --open --with-dot + +See `doxybuild.py --help` for options. + +## Adding a reader/writer test + +To add a test, you need to create two files in test/data: + +* a `TESTNAME.json` file, that contains the input document in JSON format. +* a `TESTNAME.expected` file, that contains a flatened representation of the + input document. + +The `TESTNAME.expected` file format is as follows: + +* Each line represents a JSON element of the element tree represented by the + input document. +* Each line has two parts: the path to access the element separated from the + element value by `=`. Array and object values are always empty (i.e. + represented by either `[]` or `{}`). +* Element path `.` represents the root element, and is used to separate object + members. `[N]` is used to specify the value of an array element at index `N`. + +See the examples `test_complex_01.json` and `test_complex_01.expected` to better understand element paths. + +## Understanding reader/writer test output + +When a test is run, output files are generated beside the input test files. Below is a short description of the content of each file: + +* `test_complex_01.json`: input JSON document. +* `test_complex_01.expected`: flattened JSON element tree used to check if + parsing was corrected. +* `test_complex_01.actual`: flattened JSON element tree produced by `jsontest` + from reading `test_complex_01.json`. +* `test_complex_01.rewrite`: JSON document written by `jsontest` using the + `Json::Value` parsed from `test_complex_01.json` and serialized using + `Json::StyledWritter`. +* `test_complex_01.actual-rewrite`: flattened JSON element tree produced by + `jsontest` from reading `test_complex_01.rewrite`. +* `test_complex_01.process-output`: `jsontest` output, typically useful for + understanding parsing errors. + +## Versioning rules + +Consumers of this library require a strict approach to incrementing versioning of the JsonCpp library. Currently, we follow the below set of rules: + +* Any new public symbols require a minor version bump. +* Any alteration or removal of public symbols requires a major version bump, including changing the size of a class. This is necessary for +consumers to do dependency injection properly. + +## Preparing code for submission + +Generally, JsonCpp's style guide has been pretty relaxed, with the following common themes: + +* Variables and function names use lower camel case (E.g. parseValue or collectComments). +* Class use camel case (e.g. OurReader) +* Member variables have a trailing underscore +* Prefer `nullptr` over `NULL`. +* Passing by non-const reference is allowed. +* Single statement if blocks may omit brackets. +* Generally prefer less space over more space. + +For an example: + +```c++ +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} +``` + +Before submitting your code, ensure that you meet the versioning requirements above, follow the style guide of the file you are modifying (or the above rules for new files), and run clang format. Meson exposes clang format with the following command: +``` +ninja -v -C build-${LIB_TYPE}/ clang-format +``` + +For convenience, you can also run the `reformat.sh` script located in the root directory. + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CTestConfig.cmake b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CTestConfig.cmake new file mode 100644 index 000000000..b8fc6d55b --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/CTestConfig.cmake @@ -0,0 +1,15 @@ +## This file should be placed in the root directory of your project. +## Then modify the CMakeLists.txt file in the root directory of your +## project to incorporate the testing dashboard. +## +## # The following are required to submit to the CDash dashboard: +## ENABLE_TESTING() +## INCLUDE(CTest) + +set(CTEST_PROJECT_NAME "jsoncpp") +set(CTEST_NIGHTLY_START_TIME "01:23:45 UTC") + +set(CTEST_DROP_METHOD "https") +set(CTEST_DROP_SITE "my.cdash.org") +set(CTEST_DROP_LOCATION "/submit.php?project=jsoncpp") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/LICENSE b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/LICENSE new file mode 100644 index 000000000..c41a1d1c7 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/LICENSE @@ -0,0 +1,55 @@ +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and +The JsonCpp Authors, and is released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/README.md b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/README.md new file mode 100644 index 000000000..5bff8dca2 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/README.md @@ -0,0 +1,67 @@ +# JsonCpp + +[![badge](https://img.shields.io/badge/conan.io-jsoncpp%2F1.8.0-green.svg?logo=data:image/png;base64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAA1VBMVEUAAABhlctjlstkl8tlmMtlmMxlmcxmmcxnmsxpnMxpnM1qnc1sn85voM91oM11oc1xotB2oc56pNF6pNJ2ptJ8ptJ8ptN9ptN8p9N5qNJ9p9N9p9R8qtOBqdSAqtOAqtR%2BrNSCrNJ/rdWDrNWCsNWCsNaJs9eLs9iRvNuVvdyVv9yXwd2Zwt6axN6dxt%2Bfx%2BChyeGiyuGjyuCjyuGly%2BGlzOKmzOGozuKoz%2BKqz%2BOq0OOv1OWw1OWw1eWx1eWy1uay1%2Baz1%2Baz1%2Bez2Oe02Oe12ee22ujUGwH3AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBQkREyOxFIh/AAAAiklEQVQI12NgAAMbOwY4sLZ2NtQ1coVKWNvoc/Eq8XDr2wB5Ig62ekza9vaOqpK2TpoMzOxaFtwqZua2Bm4makIM7OzMAjoaCqYuxooSUqJALjs7o4yVpbowvzSUy87KqSwmxQfnsrPISyFzWeWAXCkpMaBVIC4bmCsOdgiUKwh3JojLgAQ4ZCE0AMm2D29tZwe6AAAAAElFTkSuQmCC)](https://bintray.com/theirix/conan-repo/jsoncpp%3Atheirix) +[![badge](https://img.shields.io/badge/license-MIT-blue)](https://github.com/open-source-parsers/jsoncpp/blob/master/LICENSE) +[![badge](https://img.shields.io/badge/document-doxygen-brightgreen)](http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html) +[![Coverage Status](https://coveralls.io/repos/github/open-source-parsers/jsoncpp/badge.svg?branch=master)](https://coveralls.io/github/open-source-parsers/jsoncpp?branch=master) + + +[JSON][json-org] is a lightweight data-interchange format. It can represent +numbers, strings, ordered sequences of values, and collections of name/value +pairs. + +[json-org]: http://json.org/ + +JsonCpp is a C++ library that allows manipulating JSON values, including +serialization and deserialization to and from strings. It can also preserve +existing comment in unserialization/serialization steps, making it a convenient +format to store user input files. + + +## Documentation + +[JsonCpp documentation][JsonCpp-documentation] is generated using [Doxygen][]. + +[JsonCpp-documentation]: http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html +[Doxygen]: http://www.doxygen.org + + +## A note on backward-compatibility + +* `1.y.z` is built with C++11. +* `0.y.z` can be used with older compilers. +* `00.11.z` can be used both in old and new compilers. +* Major versions maintain binary-compatibility. + +### Special note +The branch `00.11.z`is a new branch, its major version number `00` is to show that it is +different from `0.y.z` and `1.y.z`, the main purpose of this branch is to make a balance +between the other two branches. Thus, users can use some new features in this new branch +that introduced in 1.y.z, but can hardly applied into 0.y.z. + +## Using JsonCpp in your project + +### The vcpkg dependency manager +You can download and install JsonCpp using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: + + git clone https://github.com/Microsoft/vcpkg.git + cd vcpkg + ./bootstrap-vcpkg.sh + ./vcpkg integrate install + ./vcpkg install jsoncpp + +The JsonCpp port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +### Amalgamated source +https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated-(Possibly-outdated) + +### The Meson Build System +If you are using the [Meson Build System](http://mesonbuild.com), then you can get a wrap file by downloading it from [Meson WrapDB](https://wrapdb.mesonbuild.com/jsoncpp), or simply use `meson wrap install jsoncpp`. + +### Other ways +If you have trouble, see the [Wiki](https://github.com/open-source-parsers/jsoncpp/wiki), or post a question as an Issue. + +## License + +See the `LICENSE` file for details. In summary, JsonCpp is licensed under the +MIT license, or public domain if desired and recognized in your jurisdiction. diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/amalgamate.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/amalgamate.py new file mode 100755 index 000000000..4a328ab5a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/amalgamate.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python + +"""Amalgamate json-cpp library sources into a single source and header file. + +Works with python2.6+ and python3.4+. + +Example of invocation (must be invoked from json-cpp top directory): +python amalgamate.py +""" +import os +import os.path +import sys + +INCLUDE_PATH = "include/json" +SRC_PATH = "src/lib_json" + +class AmalgamationFile: + def __init__(self, top_dir): + self.top_dir = top_dir + self.blocks = [] + + def add_text(self, text): + if not text.endswith("\n"): + text += "\n" + self.blocks.append(text) + + def add_file(self, relative_input_path, wrap_in_comment=False): + def add_marker(prefix): + self.add_text("") + self.add_text("// " + "/"*70) + self.add_text("// %s of content of file: %s" % (prefix, relative_input_path.replace("\\","/"))) + self.add_text("// " + "/"*70) + self.add_text("") + add_marker("Beginning") + f = open(os.path.join(self.top_dir, relative_input_path), "rt") + content = f.read() + if wrap_in_comment: + content = "/*\n" + content + "\n*/" + self.add_text(content) + f.close() + add_marker("End") + self.add_text("\n\n\n\n") + + def get_value(self): + return "".join(self.blocks).replace("\r\n","\n") + + def write_to(self, output_path): + output_dir = os.path.dirname(output_path) + if output_dir and not os.path.isdir(output_dir): + os.makedirs(output_dir) + f = open(output_path, "wb") + f.write(str.encode(self.get_value(), 'UTF-8')) + f.close() + +def amalgamate_source(source_top_dir=None, + target_source_path=None, + header_include_path=None): + """Produces amalgamated source. + Parameters: + source_top_dir: top-directory + target_source_path: output .cpp path + header_include_path: generated header path relative to target_source_path. + """ + print("Amalgamating header...") + header = AmalgamationFile(source_top_dir) + header.add_text("/// Json-cpp amalgamated header (http://jsoncpp.sourceforge.net/).") + header.add_text('/// It is intended to be used with #include "%s"' % header_include_path) + header.add_file("LICENSE", wrap_in_comment=True) + header.add_text("#ifndef JSON_AMALGAMATED_H_INCLUDED") + header.add_text("# define JSON_AMALGAMATED_H_INCLUDED") + header.add_text("/// If defined, indicates that the source file is amalgamated") + header.add_text("/// to prevent private header inclusion.") + header.add_text("#define JSON_IS_AMALGAMATION") + header.add_file(os.path.join(INCLUDE_PATH, "version.h")) + header.add_file(os.path.join(INCLUDE_PATH, "allocator.h")) + header.add_file(os.path.join(INCLUDE_PATH, "config.h")) + header.add_file(os.path.join(INCLUDE_PATH, "forwards.h")) + header.add_file(os.path.join(INCLUDE_PATH, "json_features.h")) + header.add_file(os.path.join(INCLUDE_PATH, "value.h")) + header.add_file(os.path.join(INCLUDE_PATH, "reader.h")) + header.add_file(os.path.join(INCLUDE_PATH, "writer.h")) + header.add_file(os.path.join(INCLUDE_PATH, "assertions.h")) + header.add_text("#endif //ifndef JSON_AMALGAMATED_H_INCLUDED") + + target_header_path = os.path.join(os.path.dirname(target_source_path), header_include_path) + print("Writing amalgamated header to %r" % target_header_path) + header.write_to(target_header_path) + + base, ext = os.path.splitext(header_include_path) + forward_header_include_path = base + "-forwards" + ext + print("Amalgamating forward header...") + header = AmalgamationFile(source_top_dir) + header.add_text("/// Json-cpp amalgamated forward header (http://jsoncpp.sourceforge.net/).") + header.add_text('/// It is intended to be used with #include "%s"' % forward_header_include_path) + header.add_text("/// This header provides forward declaration for all JsonCpp types.") + header.add_file("LICENSE", wrap_in_comment=True) + header.add_text("#ifndef JSON_FORWARD_AMALGAMATED_H_INCLUDED") + header.add_text("# define JSON_FORWARD_AMALGAMATED_H_INCLUDED") + header.add_text("/// If defined, indicates that the source file is amalgamated") + header.add_text("/// to prevent private header inclusion.") + header.add_text("#define JSON_IS_AMALGAMATION") + header.add_file(os.path.join(INCLUDE_PATH, "version.h")) + header.add_file(os.path.join(INCLUDE_PATH, "allocator.h")) + header.add_file(os.path.join(INCLUDE_PATH, "config.h")) + header.add_file(os.path.join(INCLUDE_PATH, "forwards.h")) + header.add_text("#endif //ifndef JSON_FORWARD_AMALGAMATED_H_INCLUDED") + + target_forward_header_path = os.path.join(os.path.dirname(target_source_path), + forward_header_include_path) + print("Writing amalgamated forward header to %r" % target_forward_header_path) + header.write_to(target_forward_header_path) + + print("Amalgamating source...") + source = AmalgamationFile(source_top_dir) + source.add_text("/// Json-cpp amalgamated source (http://jsoncpp.sourceforge.net/).") + source.add_text('/// It is intended to be used with #include "%s"' % header_include_path) + source.add_file("LICENSE", wrap_in_comment=True) + source.add_text("") + source.add_text('#include "%s"' % header_include_path) + source.add_text(""" +#ifndef JSON_IS_AMALGAMATION +#error "Compile with -I PATH_TO_JSON_DIRECTORY" +#endif +""") + source.add_text("") + source.add_file(os.path.join(SRC_PATH, "json_tool.h")) + source.add_file(os.path.join(SRC_PATH, "json_reader.cpp")) + source.add_file(os.path.join(SRC_PATH, "json_valueiterator.inl")) + source.add_file(os.path.join(SRC_PATH, "json_value.cpp")) + source.add_file(os.path.join(SRC_PATH, "json_writer.cpp")) + + print("Writing amalgamated source to %r" % target_source_path) + source.write_to(target_source_path) + +def main(): + usage = """%prog [options] +Generate a single amalgamated source and header file from the sources. +""" + from optparse import OptionParser + parser = OptionParser(usage=usage) + parser.allow_interspersed_args = False + parser.add_option("-s", "--source", dest="target_source_path", action="store", default="dist/jsoncpp.cpp", + help="""Output .cpp source path. [Default: %default]""") + parser.add_option("-i", "--include", dest="header_include_path", action="store", default="json/json.h", + help="""Header include path. Used to include the header from the amalgamated source file. [Default: %default]""") + parser.add_option("-t", "--top-dir", dest="top_dir", action="store", default=os.getcwd(), + help="""Source top-directory. [Default: %default]""") + parser.enable_interspersed_args() + options, args = parser.parse_args() + + msg = amalgamate_source(source_top_dir=options.top_dir, + target_source_path=options.target_source_path, + header_include_path=options.header_include_path) + if msg: + sys.stderr.write(msg + "\n") + sys.exit(1) + else: + print("Source successfully amalgamated") + +if __name__ == "__main__": + main() diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/appveyor.yml b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/appveyor.yml new file mode 100644 index 000000000..cccce4298 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/appveyor.yml @@ -0,0 +1,37 @@ +clone_folder: c:\projects\jsoncpp + +environment: + + matrix: + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + CMAKE_GENERATOR: Visual Studio 14 2015 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + CMAKE_GENERATOR: Visual Studio 14 2015 Win64 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + CMAKE_GENERATOR: Visual Studio 15 2017 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + CMAKE_GENERATOR: Visual Studio 15 2017 Win64 + +build_script: + - cmake --version + # The build script starts in root. + - set JSONCPP_FOLDER=%cd% + - set JSONCPP_BUILD_FOLDER=%JSONCPP_FOLDER%\build\release + - mkdir -p %JSONCPP_BUILD_FOLDER% + - cd %JSONCPP_BUILD_FOLDER% + - cmake -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX:PATH=%CD:\=/%/install -DBUILD_SHARED_LIBS:BOOL=ON %JSONCPP_FOLDER% + # Use ctest to make a dashboard build: + # - ctest -D Experimental(Start|Update|Configure|Build|Test|Coverage|MemCheck|Submit) + # NOTE: Testing on windows is not yet finished: + # - ctest -C Release -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild -D ExperimentalTest -D ExperimentalSubmit + - ctest -C Release -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild -D ExperimentalSubmit + # Final step is to verify that installation succeeds + - cmake --build . --config Release --target install + +deploy: + provider: GitHub + auth_token: + secure: K2Tp1q8pIZ7rs0Ot24ZMWuwr12Ev6Tc6QkhMjGQxoQG3ng1pXtgPasiJ45IDXGdg + on: + branch: master + appveyor_repo_tag: true diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/cmake/JoinPaths.cmake b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/cmake/JoinPaths.cmake new file mode 100644 index 000000000..2b376b733 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/cmake/JoinPaths.cmake @@ -0,0 +1,23 @@ +# This module provides a function for joining paths +# known from most languages +# +# SPDX-License-Identifier: (MIT OR CC0-1.0) +# Copyright 2020 Jan Tojnar +# https://github.com/jtojnar/cmake-snips +# +# Modelled after Python’s os.path.join +# https://docs.python.org/3.7/library/os.path.html#os.path.join +# Windows not supported +function(join_paths joined_path first_path_segment) + set(temp_path "${first_path_segment}") + foreach(current_segment IN LISTS ARGN) + if(NOT ("${current_segment}" STREQUAL "")) + if(IS_ABSOLUTE "${current_segment}") + set(temp_path "${current_segment}") + else() + set(temp_path "${temp_path}/${current_segment}") + endif() + endif() + endforeach() + set(${joined_path} "${temp_path}" PARENT_SCOPE) +endfunction() diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/dev.makefile b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/dev.makefile new file mode 100644 index 000000000..545ff2730 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/dev.makefile @@ -0,0 +1,37 @@ +# This is only for jsoncpp developers/contributors. +# We use this to sign releases, generate documentation, etc. +VER?=$(shell cat version) + +default: + @echo "VER=${VER}" +update-version: + perl get_version.pl meson.build >| version +sign: jsoncpp-${VER}.tar.gz + gpg --armor --detach-sign $< + gpg --verify $<.asc + # Then upload .asc to the release. +jsoncpp-%.tar.gz: + curl https://github.com/open-source-parsers/jsoncpp/archive/$*.tar.gz -o $@ +dox: + python doxybuild.py --doxygen=$$(which doxygen) --in doc/web_doxyfile.in + rsync -va -c --delete dist/doxygen/jsoncpp-api-html-${VER}/ ../jsoncpp-docs/doxygen/ + # Then 'git add -A' and 'git push' in jsoncpp-docs. +build: + mkdir -p build/debug + cd build/debug; cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_SHARED_LIBS=ON -G "Unix Makefiles" ../.. + make -C build/debug + +# Currently, this depends on include/json/version.h generated +# by cmake. +test-amalgamate: + python2.7 amalgamate.py + python3.4 amalgamate.py + cd dist; gcc -I. -c jsoncpp.cpp + +valgrind: + valgrind --error-exitcode=42 --leak-check=full ./build/debug/src/test_lib_json/jsoncpp_test + +clean: + \rm -rf *.gz *.asc dist/ + +.PHONY: build diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/__init__.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/__init__.py new file mode 100644 index 000000000..4a51e6514 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/__init__.py @@ -0,0 +1,6 @@ +# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors +# Distributed under MIT license, or public domain if desired and +# recognized in your jurisdiction. +# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +# module diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmw7.json b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmw7.json new file mode 100644 index 000000000..cd7b777fe --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmw7.json @@ -0,0 +1,33 @@ +{ + "cmake_variants" : [ + {"name": "generator", + "generators": [ + {"generator": [ + "Visual Studio 7 .NET 2003", + "Visual Studio 9 2008", + "Visual Studio 9 2008 Win64", + "Visual Studio 10", + "Visual Studio 10 Win64", + "Visual Studio 11", + "Visual Studio 11 Win64" + ] + }, + {"generator": ["MinGW Makefiles"], + "env_prepend": [{"path": "c:/wut/prg/MinGW/bin"}] + } + ] + }, + {"name": "shared_dll", + "variables": [ + ["BUILD_SHARED_LIBS=true"], + ["BUILD_SHARED_LIBS=false"] + ] + }, + {"name": "build_type", + "build_types": [ + "debug", + "release" + ] + } + ] +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmxp.json b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmxp.json new file mode 100644 index 000000000..f82a0773a --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/agent_vmxp.json @@ -0,0 +1,26 @@ +{ + "cmake_variants" : [ + {"name": "generator", + "generators": [ + {"generator": [ + "Visual Studio 6", + "Visual Studio 7", + "Visual Studio 8 2005" + ] + } + ] + }, + {"name": "shared_dll", + "variables": [ + ["BUILD_SHARED_LIBS=true"], + ["BUILD_SHARED_LIBS=false"] + ] + }, + {"name": "build_type", + "build_types": [ + "debug", + "release" + ] + } + ] +} diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/antglob.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/antglob.py new file mode 100644 index 000000000..bd2d7aee9 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/antglob.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python +# encoding: utf-8 +# Copyright 2009 Baptiste Lepilleur and The JsonCpp Authors +# Distributed under MIT license, or public domain if desired and +# recognized in your jurisdiction. +# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +from __future__ import print_function +from dircache import listdir +import re +import fnmatch +import os.path + + +# These fnmatch expressions are used by default to prune the directory tree +# while doing the recursive traversal in the glob_impl method of glob function. +prune_dirs = '.git .bzr .hg .svn _MTN _darcs CVS SCCS ' + +# These fnmatch expressions are used by default to exclude files and dirs +# while doing the recursive traversal in the glob_impl method of glob function. +##exclude_pats = prune_pats + '*~ #*# .#* %*% ._* .gitignore .cvsignore vssver.scc .DS_Store'.split() + +# These ant_glob expressions are used by default to exclude files and dirs and also prune the directory tree +# while doing the recursive traversal in the glob_impl method of glob function. +default_excludes = ''' +**/*~ +**/#*# +**/.#* +**/%*% +**/._* +**/CVS +**/CVS/** +**/.cvsignore +**/SCCS +**/SCCS/** +**/vssver.scc +**/.svn +**/.svn/** +**/.git +**/.git/** +**/.gitignore +**/.bzr +**/.bzr/** +**/.hg +**/.hg/** +**/_MTN +**/_MTN/** +**/_darcs +**/_darcs/** +**/.DS_Store ''' + +DIR = 1 +FILE = 2 +DIR_LINK = 4 +FILE_LINK = 8 +LINKS = DIR_LINK | FILE_LINK +ALL_NO_LINK = DIR | FILE +ALL = DIR | FILE | LINKS + +_ANT_RE = re.compile(r'(/\*\*/)|(\*\*/)|(/\*\*)|(\*)|(/)|([^\*/]*)') + +def ant_pattern_to_re(ant_pattern): + """Generates a regular expression from the ant pattern. + Matching convention: + **/a: match 'a', 'dir/a', 'dir1/dir2/a' + a/**/b: match 'a/b', 'a/c/b', 'a/d/c/b' + *.py: match 'script.py' but not 'a/script.py' + """ + rex = ['^'] + next_pos = 0 + sep_rex = r'(?:/|%s)' % re.escape(os.path.sep) +## print 'Converting', ant_pattern + for match in _ANT_RE.finditer(ant_pattern): +## print 'Matched', match.group() +## print match.start(0), next_pos + if match.start(0) != next_pos: + raise ValueError("Invalid ant pattern") + if match.group(1): # /**/ + rex.append(sep_rex + '(?:.*%s)?' % sep_rex) + elif match.group(2): # **/ + rex.append('(?:.*%s)?' % sep_rex) + elif match.group(3): # /** + rex.append(sep_rex + '.*') + elif match.group(4): # * + rex.append('[^/%s]*' % re.escape(os.path.sep)) + elif match.group(5): # / + rex.append(sep_rex) + else: # somepath + rex.append(re.escape(match.group(6))) + next_pos = match.end() + rex.append('$') + return re.compile(''.join(rex)) + +def _as_list(l): + if isinstance(l, basestring): + return l.split() + return l + +def glob(dir_path, + includes = '**/*', + excludes = default_excludes, + entry_type = FILE, + prune_dirs = prune_dirs, + max_depth = 25): + include_filter = [ant_pattern_to_re(p) for p in _as_list(includes)] + exclude_filter = [ant_pattern_to_re(p) for p in _as_list(excludes)] + prune_dirs = [p.replace('/',os.path.sep) for p in _as_list(prune_dirs)] + dir_path = dir_path.replace('/',os.path.sep) + entry_type_filter = entry_type + + def is_pruned_dir(dir_name): + for pattern in prune_dirs: + if fnmatch.fnmatch(dir_name, pattern): + return True + return False + + def apply_filter(full_path, filter_rexs): + """Return True if at least one of the filter regular expression match full_path.""" + for rex in filter_rexs: + if rex.match(full_path): + return True + return False + + def glob_impl(root_dir_path): + child_dirs = [root_dir_path] + while child_dirs: + dir_path = child_dirs.pop() + for entry in listdir(dir_path): + full_path = os.path.join(dir_path, entry) +## print 'Testing:', full_path, + is_dir = os.path.isdir(full_path) + if is_dir and not is_pruned_dir(entry): # explore child directory ? +## print '===> marked for recursion', + child_dirs.append(full_path) + included = apply_filter(full_path, include_filter) + rejected = apply_filter(full_path, exclude_filter) + if not included or rejected: # do not include entry ? +## print '=> not included or rejected' + continue + link = os.path.islink(full_path) + is_file = os.path.isfile(full_path) + if not is_file and not is_dir: +## print '=> unknown entry type' + continue + if link: + entry_type = is_file and FILE_LINK or DIR_LINK + else: + entry_type = is_file and FILE or DIR +## print '=> type: %d' % entry_type, + if (entry_type & entry_type_filter) != 0: +## print ' => KEEP' + yield os.path.join(dir_path, entry) +## else: +## print ' => TYPE REJECTED' + return list(glob_impl(dir_path)) + + +if __name__ == "__main__": + import unittest + + class AntPatternToRETest(unittest.TestCase): +## def test_conversion(self): +## self.assertEqual('^somepath$', ant_pattern_to_re('somepath').pattern) + + def test_matching(self): + test_cases = [ ('path', + ['path'], + ['somepath', 'pathsuffix', '/path', '/path']), + ('*.py', + ['source.py', 'source.ext.py', '.py'], + ['path/source.py', '/.py', 'dir.py/z', 'z.pyc', 'z.c']), + ('**/path', + ['path', '/path', '/a/path', 'c:/a/path', '/a/b/path', '//a/path', '/a/path/b/path'], + ['path/', 'a/path/b', 'dir.py/z', 'somepath', 'pathsuffix', 'a/somepath']), + ('path/**', + ['path/a', 'path/path/a', 'path//'], + ['path', 'somepath/a', 'a/path', 'a/path/a', 'pathsuffix/a']), + ('/**/path', + ['/path', '/a/path', '/a/b/path/path', '/path/path'], + ['path', 'path/', 'a/path', '/pathsuffix', '/somepath']), + ('a/b', + ['a/b'], + ['somea/b', 'a/bsuffix', 'a/b/c']), + ('**/*.py', + ['script.py', 'src/script.py', 'a/b/script.py', '/a/b/script.py'], + ['script.pyc', 'script.pyo', 'a.py/b']), + ('src/**/*.py', + ['src/a.py', 'src/dir/a.py'], + ['a/src/a.py', '/src/a.py']), + ] + for ant_pattern, accepted_matches, rejected_matches in list(test_cases): + def local_path(paths): + return [ p.replace('/',os.path.sep) for p in paths ] + test_cases.append((ant_pattern, local_path(accepted_matches), local_path(rejected_matches))) + for ant_pattern, accepted_matches, rejected_matches in test_cases: + rex = ant_pattern_to_re(ant_pattern) + print('ant_pattern:', ant_pattern, ' => ', rex.pattern) + for accepted_match in accepted_matches: + print('Accepted?:', accepted_match) + self.assertTrue(rex.match(accepted_match) is not None) + for rejected_match in rejected_matches: + print('Rejected?:', rejected_match) + self.assertTrue(rex.match(rejected_match) is None) + + unittest.main() diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/batchbuild.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/batchbuild.py new file mode 100644 index 000000000..0eb0690e8 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/batchbuild.py @@ -0,0 +1,278 @@ +from __future__ import print_function +import collections +import itertools +import json +import os +import os.path +import re +import shutil +import string +import subprocess +import sys +import cgi + +class BuildDesc: + def __init__(self, prepend_envs=None, variables=None, build_type=None, generator=None): + self.prepend_envs = prepend_envs or [] # [ { "var": "value" } ] + self.variables = variables or [] + self.build_type = build_type + self.generator = generator + + def merged_with(self, build_desc): + """Returns a new BuildDesc by merging field content. + Prefer build_desc fields to self fields for single valued field. + """ + return BuildDesc(self.prepend_envs + build_desc.prepend_envs, + self.variables + build_desc.variables, + build_desc.build_type or self.build_type, + build_desc.generator or self.generator) + + def env(self): + environ = os.environ.copy() + for values_by_name in self.prepend_envs: + for var, value in list(values_by_name.items()): + var = var.upper() + if type(value) is unicode: + value = value.encode(sys.getdefaultencoding()) + if var in environ: + environ[var] = value + os.pathsep + environ[var] + else: + environ[var] = value + return environ + + def cmake_args(self): + args = ["-D%s" % var for var in self.variables] + # skip build type for Visual Studio solution as it cause warning + if self.build_type and 'Visual' not in self.generator: + args.append("-DCMAKE_BUILD_TYPE=%s" % self.build_type) + if self.generator: + args.extend(['-G', self.generator]) + return args + + def __repr__(self): + return "BuildDesc(%s, build_type=%s)" % (" ".join(self.cmake_args()), self.build_type) + +class BuildData: + def __init__(self, desc, work_dir, source_dir): + self.desc = desc + self.work_dir = work_dir + self.source_dir = source_dir + self.cmake_log_path = os.path.join(work_dir, 'batchbuild_cmake.log') + self.build_log_path = os.path.join(work_dir, 'batchbuild_build.log') + self.cmake_succeeded = False + self.build_succeeded = False + + def execute_build(self): + print('Build %s' % self.desc) + self._make_new_work_dir() + self.cmake_succeeded = self._generate_makefiles() + if self.cmake_succeeded: + self.build_succeeded = self._build_using_makefiles() + return self.build_succeeded + + def _generate_makefiles(self): + print(' Generating makefiles: ', end=' ') + cmd = ['cmake'] + self.desc.cmake_args() + [os.path.abspath(self.source_dir)] + succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.cmake_log_path) + print('done' if succeeded else 'FAILED') + return succeeded + + def _build_using_makefiles(self): + print(' Building:', end=' ') + cmd = ['cmake', '--build', self.work_dir] + if self.desc.build_type: + cmd += ['--config', self.desc.build_type] + succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.build_log_path) + print('done' if succeeded else 'FAILED') + return succeeded + + def _execute_build_subprocess(self, cmd, env, log_path): + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.work_dir, + env=env) + stdout, _ = process.communicate() + succeeded = (process.returncode == 0) + with open(log_path, 'wb') as flog: + log = ' '.join(cmd) + '\n' + stdout + '\nExit code: %r\n' % process.returncode + flog.write(fix_eol(log)) + return succeeded + + def _make_new_work_dir(self): + if os.path.isdir(self.work_dir): + print(' Removing work directory', self.work_dir) + shutil.rmtree(self.work_dir, ignore_errors=True) + if not os.path.isdir(self.work_dir): + os.makedirs(self.work_dir) + +def fix_eol(stdout): + """Fixes wrong EOL produced by cmake --build on Windows (\r\r\n instead of \r\n). + """ + return re.sub('\r*\n', os.linesep, stdout) + +def load_build_variants_from_config(config_path): + with open(config_path, 'rb') as fconfig: + data = json.load(fconfig) + variants = data[ 'cmake_variants' ] + build_descs_by_axis = collections.defaultdict(list) + for axis in variants: + axis_name = axis["name"] + build_descs = [] + if "generators" in axis: + for generator_data in axis["generators"]: + for generator in generator_data["generator"]: + build_desc = BuildDesc(generator=generator, + prepend_envs=generator_data.get("env_prepend")) + build_descs.append(build_desc) + elif "variables" in axis: + for variables in axis["variables"]: + build_desc = BuildDesc(variables=variables) + build_descs.append(build_desc) + elif "build_types" in axis: + for build_type in axis["build_types"]: + build_desc = BuildDesc(build_type=build_type) + build_descs.append(build_desc) + build_descs_by_axis[axis_name].extend(build_descs) + return build_descs_by_axis + +def generate_build_variants(build_descs_by_axis): + """Returns a list of BuildDesc generated for the partial BuildDesc for each axis.""" + axis_names = list(build_descs_by_axis.keys()) + build_descs = [] + for axis_name, axis_build_descs in list(build_descs_by_axis.items()): + if len(build_descs): + # for each existing build_desc and each axis build desc, create a new build_desc + new_build_descs = [] + for prototype_build_desc, axis_build_desc in itertools.product(build_descs, axis_build_descs): + new_build_descs.append(prototype_build_desc.merged_with(axis_build_desc)) + build_descs = new_build_descs + else: + build_descs = axis_build_descs + return build_descs + +HTML_TEMPLATE = string.Template(''' + + $title + + + + + + + + $th_vars + + + + $th_build_types + + + +$tr_builds + +
Variables
Build type
+''') + +def generate_html_report(html_report_path, builds): + report_dir = os.path.dirname(html_report_path) + # Vertical axis: generator + # Horizontal: variables, then build_type + builds_by_generator = collections.defaultdict(list) + variables = set() + build_types_by_variable = collections.defaultdict(set) + build_by_pos_key = {} # { (generator, var_key, build_type): build } + for build in builds: + builds_by_generator[build.desc.generator].append(build) + var_key = tuple(sorted(build.desc.variables)) + variables.add(var_key) + build_types_by_variable[var_key].add(build.desc.build_type) + pos_key = (build.desc.generator, var_key, build.desc.build_type) + build_by_pos_key[pos_key] = build + variables = sorted(variables) + th_vars = [] + th_build_types = [] + for variable in variables: + build_types = sorted(build_types_by_variable[variable]) + nb_build_type = len(build_types_by_variable[variable]) + th_vars.append('%s' % (nb_build_type, cgi.escape(' '.join(variable)))) + for build_type in build_types: + th_build_types.append('%s' % cgi.escape(build_type)) + tr_builds = [] + for generator in sorted(builds_by_generator): + tds = [ '%s\n' % cgi.escape(generator) ] + for variable in variables: + build_types = sorted(build_types_by_variable[variable]) + for build_type in build_types: + pos_key = (generator, variable, build_type) + build = build_by_pos_key.get(pos_key) + if build: + cmake_status = 'ok' if build.cmake_succeeded else 'FAILED' + build_status = 'ok' if build.build_succeeded else 'FAILED' + cmake_log_url = os.path.relpath(build.cmake_log_path, report_dir) + build_log_url = os.path.relpath(build.build_log_path, report_dir) + td = 'CMake: %s' % ( build_status.lower(), cmake_log_url, cmake_status.lower(), cmake_status) + if build.cmake_succeeded: + td += '
Build: %s' % ( build_log_url, build_status.lower(), build_status) + td += '' + else: + td = '' + tds.append(td) + tr_builds.append('%s' % '\n'.join(tds)) + html = HTML_TEMPLATE.substitute( title='Batch build report', + th_vars=' '.join(th_vars), + th_build_types=' '.join(th_build_types), + tr_builds='\n'.join(tr_builds)) + with open(html_report_path, 'wt') as fhtml: + fhtml.write(html) + print('HTML report generated in:', html_report_path) + +def main(): + usage = r"""%prog WORK_DIR SOURCE_DIR CONFIG_JSON_PATH [CONFIG2_JSON_PATH...] +Build a given CMake based project located in SOURCE_DIR with multiple generators/options.dry_run +as described in CONFIG_JSON_PATH building in WORK_DIR. + +Example of call: +python devtools\batchbuild.py e:\buildbots\jsoncpp\build . devtools\agent_vmw7.json +""" + from optparse import OptionParser + parser = OptionParser(usage=usage) + parser.allow_interspersed_args = True +# parser.add_option('-v', '--verbose', dest="verbose", action='store_true', +# help="""Be verbose.""") + parser.enable_interspersed_args() + options, args = parser.parse_args() + if len(args) < 3: + parser.error("Missing one of WORK_DIR SOURCE_DIR CONFIG_JSON_PATH.") + work_dir = args[0] + source_dir = args[1].rstrip('/\\') + config_paths = args[2:] + for config_path in config_paths: + if not os.path.isfile(config_path): + parser.error("Can not read: %r" % config_path) + + # generate build variants + build_descs = [] + for config_path in config_paths: + build_descs_by_axis = load_build_variants_from_config(config_path) + build_descs.extend(generate_build_variants(build_descs_by_axis)) + print('Build variants (%d):' % len(build_descs)) + # assign build directory for each variant + if not os.path.isdir(work_dir): + os.makedirs(work_dir) + builds = [] + with open(os.path.join(work_dir, 'matrix-dir-map.txt'), 'wt') as fmatrixmap: + for index, build_desc in enumerate(build_descs): + build_desc_work_dir = os.path.join(work_dir, '%03d' % (index+1)) + builds.append(BuildData(build_desc, build_desc_work_dir, source_dir)) + fmatrixmap.write('%s: %s\n' % (build_desc_work_dir, build_desc)) + for build in builds: + build.execute_build() + html_report_path = os.path.join(work_dir, 'batchbuild-report.html') + generate_html_report(html_report_path, builds) + print('Done') + + +if __name__ == '__main__': + main() + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/fixeol.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/fixeol.py new file mode 100644 index 000000000..11e1ce2a1 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/fixeol.py @@ -0,0 +1,70 @@ +# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors +# Distributed under MIT license, or public domain if desired and +# recognized in your jurisdiction. +# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +from __future__ import print_function +import os.path +import sys + +def fix_source_eol(path, is_dry_run = True, verbose = True, eol = '\n'): + """Makes sure that all sources have the specified eol sequence (default: unix).""" + if not os.path.isfile(path): + raise ValueError('Path "%s" is not a file' % path) + try: + f = open(path, 'rb') + except IOError as msg: + print("%s: I/O Error: %s" % (file, str(msg)), file=sys.stderr) + return False + try: + raw_lines = f.readlines() + finally: + f.close() + fixed_lines = [line.rstrip('\r\n') + eol for line in raw_lines] + if raw_lines != fixed_lines: + print('%s =>' % path, end=' ') + if not is_dry_run: + f = open(path, "wb") + try: + f.writelines(fixed_lines) + finally: + f.close() + if verbose: + print(is_dry_run and ' NEED FIX' or ' FIXED') + return True +## +## +## +##def _do_fix(is_dry_run = True): +## from waftools import antglob +## python_sources = antglob.glob('.', +## includes = '**/*.py **/wscript **/wscript_build', +## excludes = antglob.default_excludes + './waf.py', +## prune_dirs = antglob.prune_dirs + 'waf-* ./build') +## for path in python_sources: +## _fix_python_source(path, is_dry_run) +## +## cpp_sources = antglob.glob('.', +## includes = '**/*.cpp **/*.h **/*.inl', +## prune_dirs = antglob.prune_dirs + 'waf-* ./build') +## for path in cpp_sources: +## _fix_source_eol(path, is_dry_run) +## +## +##def dry_fix(context): +## _do_fix(is_dry_run = True) +## +##def fix(context): +## _do_fix(is_dry_run = False) +## +##def shutdown(): +## pass +## +##def check(context): +## # Unit tests are run when "check" target is used +## ut = UnitTest.unit_test() +## ut.change_to_testfile_dir = True +## ut.want_to_see_test_output = True +## ut.want_to_see_test_error = True +## ut.run() +## ut.print_results() diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/licenseupdater.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/licenseupdater.py new file mode 100644 index 000000000..d9b662e01 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/licenseupdater.py @@ -0,0 +1,94 @@ +"""Updates the license text in source file. +""" +from __future__ import print_function + +# An existing license is found if the file starts with the string below, +# and ends with the first blank line. +LICENSE_BEGIN = "// Copyright " + +BRIEF_LICENSE = LICENSE_BEGIN + """2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +""".replace('\r\n','\n') + +def update_license(path, dry_run, show_diff): + """Update the license statement in the specified file. + Parameters: + path: path of the C++ source file to update. + dry_run: if True, just print the path of the file that would be updated, + but don't change it. + show_diff: if True, print the path of the file that would be modified, + as well as the change made to the file. + """ + with open(path, 'rt') as fin: + original_text = fin.read().replace('\r\n','\n') + newline = fin.newlines and fin.newlines[0] or '\n' + if not original_text.startswith(LICENSE_BEGIN): + # No existing license found => prepend it + new_text = BRIEF_LICENSE + original_text + else: + license_end_index = original_text.index('\n\n') # search first blank line + new_text = BRIEF_LICENSE + original_text[license_end_index+2:] + if original_text != new_text: + if not dry_run: + with open(path, 'wb') as fout: + fout.write(new_text.replace('\n', newline)) + print('Updated', path) + if show_diff: + import difflib + print('\n'.join(difflib.unified_diff(original_text.split('\n'), + new_text.split('\n')))) + return True + return False + +def update_license_in_source_directories(source_dirs, dry_run, show_diff): + """Updates license text in C++ source files found in directory source_dirs. + Parameters: + source_dirs: list of directory to scan for C++ sources. Directories are + scanned recursively. + dry_run: if True, just print the path of the file that would be updated, + but don't change it. + show_diff: if True, print the path of the file that would be modified, + as well as the change made to the file. + """ + from devtools import antglob + prune_dirs = antglob.prune_dirs + 'scons-local* ./build* ./libs ./dist' + for source_dir in source_dirs: + cpp_sources = antglob.glob(source_dir, + includes = '''**/*.h **/*.cpp **/*.inl''', + prune_dirs = prune_dirs) + for source in cpp_sources: + update_license(source, dry_run, show_diff) + +def main(): + usage = """%prog DIR [DIR2...] +Updates license text in sources of the project in source files found +in the directory specified on the command-line. + +Example of call: +python devtools\licenseupdater.py include src -n --diff +=> Show change that would be made to the sources. + +python devtools\licenseupdater.py include src +=> Update license statement on all sources in directories include/ and src/. +""" + from optparse import OptionParser + parser = OptionParser(usage=usage) + parser.allow_interspersed_args = False + parser.add_option('-n', '--dry-run', dest="dry_run", action='store_true', default=False, + help="""Only show what files are updated, do not update the files""") + parser.add_option('--diff', dest="show_diff", action='store_true', default=False, + help="""On update, show change made to the file.""") + parser.enable_interspersed_args() + options, args = parser.parse_args() + update_license_in_source_directories(args, options.dry_run, options.show_diff) + print('Done') + +if __name__ == '__main__': + import sys + import os.path + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + main() + diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/tarball.py b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/tarball.py new file mode 100644 index 000000000..3c0ba65e7 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/devtools/tarball.py @@ -0,0 +1,52 @@ +# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors +# Distributed under MIT license, or public domain if desired and +# recognized in your jurisdiction. +# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +from contextlib import closing +import os +import tarfile + +TARGZ_DEFAULT_COMPRESSION_LEVEL = 9 + +def make_tarball(tarball_path, sources, base_dir, prefix_dir=''): + """Parameters: + tarball_path: output path of the .tar.gz file + sources: list of sources to include in the tarball, relative to the current directory + base_dir: if a source file is in a sub-directory of base_dir, then base_dir is stripped + from path in the tarball. + prefix_dir: all files stored in the tarball be sub-directory of prefix_dir. Set to '' + to make them child of root. + """ + base_dir = os.path.normpath(os.path.abspath(base_dir)) + def archive_name(path): + """Makes path relative to base_dir.""" + path = os.path.normpath(os.path.abspath(path)) + common_path = os.path.commonprefix((base_dir, path)) + archive_name = path[len(common_path):] + if os.path.isabs(archive_name): + archive_name = archive_name[1:] + return os.path.join(prefix_dir, archive_name) + def visit(tar, dirname, names): + for name in names: + path = os.path.join(dirname, name) + if os.path.isfile(path): + path_in_tar = archive_name(path) + tar.add(path, path_in_tar) + compression = TARGZ_DEFAULT_COMPRESSION_LEVEL + with closing(tarfile.TarFile.open(tarball_path, 'w:gz', + compresslevel=compression)) as tar: + for source in sources: + source_path = source + if os.path.isdir(source): + for dirpath, dirnames, filenames in os.walk(source_path): + visit(tar, dirpath, filenames) + else: + path_in_tar = archive_name(source_path) + tar.add(source_path, path_in_tar) # filename, arcname + +def decompress(tarball_path, base_dir): + """Decompress the gzipped tarball into directory base_dir. + """ + with closing(tarfile.TarFile.open(tarball_path)) as tar: + tar.extractall(base_dir) diff --git a/Lumos/External/OpenXR-SDK/src/external/jsoncpp/doc/doxyfile.in b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/doc/doxyfile.in new file mode 100644 index 000000000..dcf514ea3 --- /dev/null +++ b/Lumos/External/OpenXR-SDK/src/external/jsoncpp/doc/doxyfile.in @@ -0,0 +1,2302 @@ +# Doxyfile 1.8.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "JsonCpp" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = %JSONCPP_VERSION% + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = %DOC_TOPDIR% + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese- +# Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en, +# Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, +# Turkish, Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = %TOPDIR% + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = %TOPDIR%/include + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 3 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = "testCaseSetup=\link CppUT::TestCase::setUp() setUp()\endlink" \ + "testCaseRun=\link CppUT::TestCase::run() run()\endlink" \ + "testCaseTearDown=\link CppUT::TestCase::tearDown() tearDown()\endlink" \ + "json_ref=JSON (JavaScript Object Notation)" + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. Do not use file names with spaces, bibtex cannot handle them. See +# also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = %WARNING_LOG_PATH% + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = ../include \ + ../src/lib_json \ + . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.h \ + *.cpp \ + *.inl \ + *.dox + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = .. + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES +TOC_INCLUDE_HEADINGS = 2 + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = %HTML_OUTPUT% + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- +# defined cascading style sheet that is included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet file to the output directory. For an example +# see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = %HTML_HELP% + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = jsoncpp-%JSONCPP_VERSION%.chm + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = "c:\Program Files\HTML Help Workshop\hhc.exe" + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = YES + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = YES + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = YES + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /