#pragma once

// std
#include <optional>
#include <variant>
#include <fstream>
#include <tuple>
#include <vector>
#include <cassert>
#include <memory>
#include <mutex>
#include <future>
#include <unordered_set>
#include <unordered_map>

// C4D
#include <c4d.h>
#include <c4d_basetime.h>
#include <c4d_filterdata.h>
#include <c4d_gui.h>
#include <c4d_string.h>
#include "maxon/pointerarray.h"
#include "maxon/sortedarray.h"
#include "c4d_baselinkarray.h"
#include "tprotection.h"
#include "maxon/baselist.h"
#include "maxon/queue.h"
#include "maxon/synchronized.h"
#include "lib_ca.h"
#include "tcaik.h"
#include "ocajoint.h"
#include "customgui_priority.h"
#include "customgui_iconchooser.h"

// The third party
#include "yaml-cpp/yaml.h"
#include "libMMD/Model/MMD/PMXFile.h"
#include "libMMD/Model/MMD/PMXModel.h"
#include "libMMD/Model/MMD/PMDFile.h"
#include "libMMD/Model/MMD/PMDModel.h"
#include "libMMD/Model/MMD/VMDFile.h"
#include "libMMD/Model/MMD/VMDAnimation.h"
#include "libMMD/Model/MMD/VMDCameraAnimation.h"
#include "libMMD/Model/MMD/MMDPhysics.h"

// symbols
#include "c4d_symbols.h"
#include "plugin_resource.h"

// utils
#include "utils/time_util.hpp"
#include "utils/images_user_area_util.hpp"
#include "utils/filename_util.hpp"
#include "utils/string_util.hpp"
#include "utils/io_util.hpp"

#include "module/core/cmt_marco.h"
