private static DynamicPanelInfo CreateDynamicPanelInfo(UIDynamicPanels __instance, UIView view, string customWorldInfoPanelName, string customOldWorldInfoPanelName)
        {
            DynamicPanelInfo dynamicPanelInfo = new();
            var customOldWorldInfoPanel = Array.Find(__instance.m_DynamicPanels, element => element.name == customOldWorldInfoPanelName);
            if(customOldWorldInfoPanel == null)
            {
                return null;
            }
            var customOldUIClone = Object.Instantiate(customOldWorldInfoPanel.instance);
            customOldUIClone.gameObject.name = customWorldInfoPanelName;
            typeof(DynamicPanelInfo).GetField("m_Name", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, customWorldInfoPanelName);
            typeof(DynamicPanelInfo).GetField("m_PanelRoot", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, customOldUIClone);
            typeof(DynamicPanelInfo).GetField("m_SingleInstance", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, true);
            typeof(DynamicPanelInfo).GetField("m_IsModal", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, false);
            dynamicPanelInfo.viewOwner = view;
	    GameObject gameObject = Object.Instantiate(dynamicPanelInfo.panelRoot.gameObject);
            var old_component = gameObject.GetComponent<UniqueFactoryWorldInfoPanel>();
            Object.DestroyImmediate(old_component);
            if(customWorldInfoPanelName == "NewUniqueFactoryWorldInfoPanel")
            {
                var new_component = gameObject.AddComponent<NewUniqueFactoryWorldInfoPanel>();
                PrefabUtil.TryCopyAttributes<BuildingWorldInfoPanel>(old_component, new_component, false);
            }
            else if(customWorldInfoPanelName == "RestaurantAIWorldInfoPanel")
            {
                var new_component = gameObject.AddComponent<RestaurantAIWorldInfoPanel>();
                PrefabUtil.TryCopyAttributes<BuildingWorldInfoPanel>(old_component, new_component, false);
            }
	    gameObject.hideFlags = HideFlags.DontSave;
	    gameObject.name = "(Library) " + customWorldInfoPanelName;
            UIComponent uicomponent = view.AttachUIComponent(gameObject);
	    uicomponent.isVisible = false;
	    dynamicPanelInfo.AddInstance(uicomponent);
            return dynamicPanelInfo;
        }