local l_status_0, l_result_0 = pcall(function()
    return game:GetService("StudioService"):HasInternalPermission();
end);
if not l_status_0 then
    l_result_0 = false;
end;
if l_result_0 then
    local l_Parent_0 = script.Parent.Parent;
    require(l_Parent_0.Common.commonInit)();
    local v3 = require(l_Parent_0.Src.Util.DebugFlags);
    if not v3.RunningUnderCLI() then
        local l_VirtualInputManager_0 = game:GetService("VirtualInputManager");
        local l_StudioDeviceEmulatorService_0 = game:GetService("StudioDeviceEmulatorService");
        local l_HttpService_0 = game:GetService("HttpService");
        local l_CoreGui_0 = game:GetService("CoreGui");
        local l_UserInputService_0 = game:GetService("UserInputService");
        local l_UserInputPlaybackPluginDeferPackageLoading_0 = game:GetFastFlag("UserInputPlaybackPluginDeferPackageLoading");
        local l_MultipleDocumentInterfaceInstance_0 = plugin.MultipleDocumentInterfaceInstance;
        local v11 = require(l_Parent_0.Src.Util.DMBridge);
        local _ = require(l_Parent_0.Src.Types);
        local v13 = require(l_Parent_0.Src.Util.Enums);
        local v14 = nil;
        local v15 = nil;
        local v16 = nil;
        local v17 = nil;
        local v18 = nil;
        local v19 = nil;
        local v20 = nil;
        if not l_UserInputPlaybackPluginDeferPackageLoading_0 then
            v14 = require(l_Parent_0.Src.Components.InputVisualizer);
            v15 = require(l_Parent_0.Packages.Cryo);
            v16 = require(l_Parent_0.Packages.Roact);
            v17 = require(l_Parent_0.Packages.Framework);
            v18 = v17.ContextServices;
            v19 = v18.Plugin;
            v20 = require(l_Parent_0.Src.Resources.MakeTheme);
        end;
        v11.setPluginObject(plugin);
        local v21 = nil;
        local l_UserInputPlaybackPluginShowMouseCursorAfterPlayback_0 = game:GetFastFlag("UserInputPlaybackPluginShowMouseCursorAfterPlayback");
        local function v28(v23)
            if l_UserInputPlaybackPluginDeferPackageLoading_0 then
                v15 = require(l_Parent_0.Packages.Cryo);
            end;
            local v24 = {
                mouseButton = {
                    Enum.UserInputType.MouseButton1,
                    Enum.UserInputType.MouseButton2,
                    Enum.UserInputType.MouseButton3
                },
                mouseMove = {
                    Enum.UserInputType.MouseMovement
                },
                touch = {
                    Enum.UserInputType.Touch
                },
                keyboard = {
                    Enum.UserInputType.Keyboard
                },
                gamepad = {
                    Enum.UserInputType.Gamepad1,
                    Enum.UserInputType.Gamepad2,
                    Enum.UserInputType.Gamepad3,
                    Enum.UserInputType.Gamepad4,
                    Enum.UserInputType.Gamepad5,
                    Enum.UserInputType.Gamepad6,
                    Enum.UserInputType.Gamepad7,
                    Enum.UserInputType.Gamepad8
                }
            };
            local v25 = {};
            for v26, v27 in pairs(v23) do
                if not v27 then
                    v25 = v15.List.join(v25, v24[v26]);
                end;
            end;
            l_VirtualInputManager_0:SetInputTypesToIgnore(v25);
        end;
        local function v35()
            local v29 = v11.getRoduxState();
            assert(v29, "Access rodux state");
            if v29.playbackTab.shouldSetEmulationDevice then
                local v30 = v11.getCurrentPlaybackRecordingDataObj();
                assert(v30, "Could not get recording data");
                local l_additionalMetadata_0 = v30.additionalMetadata;
                local l_resolution_0 = l_additionalMetadata_0.resolution;
                local l_deviceId_0 = l_additionalMetadata_0.deviceId;
                local l_orientation_0 = l_additionalMetadata_0.orientation;
                if l_deviceId_0 == "default" then
                    l_StudioDeviceEmulatorService_0:EmulatePCDeviceWithResolution("Test Computer Device", Vector2.new(l_resolution_0[1], l_resolution_0[2]));
                    return ;
                else
                    l_StudioDeviceEmulatorService_0:SetCurrentDeviceId(l_deviceId_0);
                    l_StudioDeviceEmulatorService_0:SetCurrentOrientation(l_orientation_0);
                end;
            end;
        end;
        local v36 = nil;
        local function _()
            if v36 then
                v36:Disconnect();
                v36 = nil;
            end;
        end;
        local v38 = nil;
        local function v40()
            if l_UserInputPlaybackPluginDeferPackageLoading_0 then
                v14 = require(l_Parent_0.Src.Components.InputVisualizer);
                v16 = require(l_Parent_0.Packages.Roact);
                v17 = require(l_Parent_0.Packages.Framework);
                v18 = v17.ContextServices;
                v19 = v18.Plugin;
                v20 = require(l_Parent_0.Src.Resources.MakeTheme);
            end;
            local v39 = v18.provide({
                v19.new(plugin),
                v20()
            }, {
                InputVisualizer = v16.createElement("ScreenGui", {
                    DisplayOrder = 1000,
                    Enabled = true
                }, {
                    InputVisualizer = v16.createElement(v14)
                })
            });
            assert(v38 == nil);
            v38 = v16.mount(v39, l_CoreGui_0);
        end;
        local function _()
            if l_UserInputPlaybackPluginDeferPackageLoading_0 then
                v16 = require(l_Parent_0.Packages.Roact);
            end;
            if v38 then
                v16.unmount(v38);
                v38 = nil;
            end;
        end;
        local function v42()
            assert(plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient, "Correct datamodel game state type");
            if v36 then
                v36:Disconnect();
                v36 = nil;
            end;
            assert(v11.getPluginState() == v13.PluginState.Playing);
            v11.setPluginState(v13.PluginState.Default);
            if l_UserInputPlaybackPluginDeferPackageLoading_0 then
                v16 = require(l_Parent_0.Packages.Roact);
            end;
            if v38 then
                v16.unmount(v38);
                v38 = nil;
            end;
            if l_UserInputPlaybackPluginShowMouseCursorAfterPlayback_0 then
                l_UserInputService_0.OverrideMouseIconBehavior = Enum.OverrideMouseIconBehavior.None;
            end;
        end;
        local function v43()
            assert(v11.getPluginState() == v13.PluginState.Playing);
            assert(plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient, "Correct datamodel game state type");
            l_VirtualInputManager_0:StopPlaying();
        end;
        local function v47()
            local v44 = v11.getPluginState();
            local v45 = true;
            if v44 ~= v13.PluginState.Default then
                v45 = v44 == v13.PluginState.ShouldStartPlayback;
            end;
            assert(v45);
            assert(plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient, "Correct datamodel game state type");
            local v46 = v11.getRoduxState();
            assert(v46, "Access rodux state");
            v45 = v11.getCurrentPlaybackRecordingDataStr();
            assert(v45, "Recording data string not found");
            v11.setPluginState(v13.PluginState.Disabled);
            v28({
                mouseMove = v46.playbackTabFilter.mouseMove,
                mouseButton = v46.playbackTabFilter.mouseClick,
                keyboard = v46.playbackTabFilter.keyboard,
                gamepad = v46.playbackTabFilter.gamepad,
                touch = v46.playbackTabFilter.touch
            });
            v40();
            while game.Players.LocalPlayer == nil do
                wait();
            end;
            if not game:IsLoaded() then
                game.Loaded:Wait();
            end;
            v11.setPluginState(v13.PluginState.Playing);
            v35();
            if v36 then
                v36:Disconnect();
                v36 = nil;
            end;
            v36 = l_VirtualInputManager_0.PlaybackCompleted:Connect(v42);
            l_VirtualInputManager_0:StartPlayingJSON(v45);
        end;
        local function v53()
            local v48 = v11.getPluginState();
            local v49 = true;
            if v48 ~= v13.PluginState.Default then
                v49 = v48 == v13.PluginState.ShouldStartRecording;
            end;
            assert(v49);
            assert(plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient, "Correct datamodel game state type");
            local v50 = v11.getRoduxState();
            assert(v50, "Access rodux state");
            l_VirtualInputManager_0:StopRecording();
            v11.setPluginState(v13.PluginState.Disabled);
            if not game:IsLoaded() then
                game.Loaded:Wait();
            end;
            while game.Players.LocalPlayer == nil do
                game.Players.PlayerAdded:Wait();
            end;
            v11.setPluginState(v13.PluginState.Recording);
            v49 = game.workspace.CurrentCamera.ViewportSize;
            assert(v49, "Get viewport resolution");
            local l_l_StudioDeviceEmulatorService_0_CurrentDeviceId_0 = l_StudioDeviceEmulatorService_0:GetCurrentDeviceId();
            assert(l_l_StudioDeviceEmulatorService_0_CurrentDeviceId_0);
            local l_Name_0 = l_StudioDeviceEmulatorService_0:GetCurrentOrientation().Name;
            assert(l_Name_0);
            v21 = {
                resolution = {
                    math.floor(v49.x),
                    (math.floor(v49.y))
                },
                deviceId = l_l_StudioDeviceEmulatorService_0_CurrentDeviceId_0,
                orientation = l_Name_0
            };
            v28({
                mouseMove = v50.recordTabFilter.mouseMove,
                mouseButton = v50.recordTabFilter.mouseClick,
                keyboard = v50.recordTabFilter.keyboard,
                gamepad = v50.recordTabFilter.gamepad,
                touch = v50.recordTabFilter.touch
            });
            l_VirtualInputManager_0:StartRecording();
        end;
        local function v57()
            assert(v11.getPluginState() == v13.PluginState.Recording);
            local v54 = nil;
            v54 = l_VirtualInputManager_0.RecordingCompleted:Connect(function(v55)
                local v56 = l_HttpService_0:JSONDecode(v55);
                v56.additionalMetadata = v21;
                if not v56.additionalLuaState then
                    v56.additionalLuaState = {
                        "dummy state"
                    };
                end;
                v11.saveRecordingDataToDM(v56);
                v11.setPluginState(v13.PluginState.Default);
                if v54 then
                    v54:Disconnect();
                end;
            end);
            l_VirtualInputManager_0:StopRecording();
        end;
        local function _()
            local v58 = v11.getPluginState();
            if v58 == v13.PluginState.ShouldStartRecording then
                v53();
                return ;
            else
                if v58 == v13.PluginState.ShouldStartPlayback then
                    v47();
                end;
                return ;
            end;
        end;
        local function v62()
            v11.setupPlayClientDMEventListeners();
            v11.connectToStartRecordButtonClicked(v53);
            v11.connectToStopRecordButtonClicked(v57);
            v11.connectToStartPlaybackButtonClicked(v47);
            v11.connectToStopPlaybackButtonClicked(v43);
            l_MultipleDocumentInterfaceInstance_0.FocusedDataModelSession.CurrentDataModelTypeAboutToChange:Connect(function(v60)
                if plugin.HostDataModelTypeIsCurrent and v60 == Enum.StudioDataModelType.Edit then
                    v11.setIsPlayMode(false);
                    local v61 = v11.getPluginState();
                    if v61 == v13.PluginState.Recording then
                        v57();
                        return ;
                    elseif v61 == v13.PluginState.Playing then
                        assert(v11.getPluginState() == v13.PluginState.Playing);
                        assert(plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient, "Correct datamodel game state type");
                        l_VirtualInputManager_0:StopPlaying();
                        return ;
                    elseif v61 == v13.PluginState.Disabled then
                        v11.setPluginState(v13.PluginState.Default);
                    end;
                end;
            end);
        end;
        local function _()
            v11.setIsPlayMode(true);
            v62();
            v11.onPlayClientSessionStarted();
        end;
        local v64 = nil;
        local function v66()
            if not (l_UserInputPlaybackPluginDeferPackageLoading_0 and (not (plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient) or not v3.EnableDeveloperTools())) then
                v64 = require(l_Parent_0.Packages.Framework).DeveloperTools.forPlugin(l_Parent_0.Name, plugin);
                v64:addPluginRouter(plugin);
            end;
            if plugin.HostDataModelType == Enum.StudioDataModelType.Edit then
                v11.setupEditDMEventListeners();
                return ;
            else
                if not (not (plugin.HostDataModelType == Enum.StudioDataModelType.PlayClient) or not v11.getPluginEnabled()) then
                    v11.setIsPlayMode(true);
                    v62();
                    v11.onPlayClientSessionStarted();
                    local v65 = v11.getPluginState();
                    if v65 == v13.PluginState.ShouldStartRecording then
                        v53();
                        return ;
                    elseif v65 == v13.PluginState.ShouldStartPlayback then
                        v47();
                    end;
                end;
                return ;
            end;
        end;
        local function _()
            l_MultipleDocumentInterfaceInstance_0.FocusedDataModelSession.CurrentDataModelTypeAboutToChange:Connect(function()
                if v64 then
                    v64:destroy();
                    v64 = nil;
                end;
            end);
            v66();
        end;
        l_MultipleDocumentInterfaceInstance_0.FocusedDataModelSession.CurrentDataModelTypeAboutToChange:Connect(function()
            if v64 then
                v64:destroy();
                v64 = nil;
            end;
        end);
        v66();
        return ;
    else
        return ;
    end;
else
    return ;
end;


local v0 = false;
return function()
    if not v0 then
        v0 = true;
        require(script.Parent.defineLuaFlags);
        local l_Parent_0 = script.Parent.Parent;
        if require(l_Parent_0.Src.Util.DebugFlags).EnableRoactConfigs() then
            require(l_Parent_0.Packages.Roact).setGlobalConfig({
                elementTracing = true,
                propValidation = true,
                typeChecks = true
            });
        end;
        return ;
    else
        return ;
    end;
end;


game:DefineFastFlag("UserInputPlaybackPluginShowMouseCursorAfterPlayback", false);
game:DefineFastFlag("UserInputPlaybackPluginDeferPackageLoading", false);
game:DefineFastFlag("UserInputPlaybackPluginFixRecordingFileSelectorNotUpdating", false);
game:DefineFastFlag("UserInputPlaybackPluginFixTabInitiallySelected", false);
game:DefineFastFlag("UserInputPlaybackPluginChooseRecordingNamePopUpFixStyle", false);
return nil;


local l_Parent_0 = script.Parent.Parent;
require(script.Parent.defineLuaFlags);
if game:GetFastFlag("UserInputPlaybackPluginDeferPackageLoading") then
    local l_status_0, l_result_0 = pcall(function()
        return game:GetService("StudioService"):HasInternalPermission();
    end);
    if not (not l_status_0 or l_result_0) then
        return ;
    end;
end;
local v3 = require(l_Parent_0.Src.Util.DebugFlags);
local v4 = nil;
if not (not v3.RunningUnderCLI() and not v3.RunTests()) then
    require(script.Parent.commonInit)();
    v4 = require(l_Parent_0.Packages.Framework);
    local v5 = require(l_Parent_0.Packages.Dev.TestEZ);
    local l_TestBootstrap_0 = v5.TestBootstrap;
    local v7 = not not _G.TEAMCITY and v5.Reporters.TeamCityReporter or v5.Reporters.TextReporter;
    local l_Src_0 = l_Parent_0.Src;
    local v9 = {
        showTimingInfo = false,
        testNamePattern = nil,
        extraEnvironment = {}
    };
    print("----- All " .. l_Parent_0.Name .. " Tests ------");
    require(script.Parent.defineLuaFlags);
    l_TestBootstrap_0:run({
        l_Src_0
    }, v7, v9);
    print("----------------------------------");
    if v3.RunDeveloperFrameworkTests() then
        print("");
        print("----- All DeveloperFramework Tests ------");
        v4.TestHelpers.runFrameworkTests(v5, v7);
        print("----------------------------------");
    end;
end;
if v3.RunningUnderCLI() then
    pcall(function()
        game:GetService("ProcessService"):ExitAsync(0);
    end);
end;


local l_otter_0 = script.Parent._Index.roblox_otter.otter;
if l_otter_0.ClassName == "ModuleScript" then
    return require(l_otter_0);
else
    return l_otter_0;
end;


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local l_Action_0 = require(l_Parent_0.Packages.Framework).Util.Action;
local _ = require(l_Parent_0.Src.Types);
return l_Action_0(script.Name, function(v3)
    return {
        state = v3
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0, v1)
    return {
        gamepadEnabled = v0,
        context = v1
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0, v1)
    return {
        keyboardEnabled = v0,
        context = v1
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0, v1)
    return {
        mouseClickEnabled = v0,
        context = v1
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0, v1)
    return {
        mouseMoveEnabled = v0,
        context = v1
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0, v1)
    return {
        touchEnabled = v0,
        context = v1
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        currentRecordingDeviceId = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        currentRecordingDeviceOrientation = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    assert(v0 >= 0, "Duration should not be negative");
    return {
        currentRecordingDurationSec = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    assert(v0 >= 0, "Number of events should not be negative");
    return {
        currentRecordingNumEvents = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        currentRecordingResolution = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        shouldSetEmulationDevice = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        emulationDeviceId = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        orientation = v0
    };
end);


return require(script.Parent.Parent.Parent.Parent.Packages.Framework).Util.Action(script.Name, function(v0)
    return {
        screenSize = v0
    };
end);


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v2.ContextServices;
local l_UI_0 = v2.UI;
local l_Pane_0 = l_UI_0.Pane;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_StyledDialog_0 = l_UI_0.StyledDialog;
local v8 = game:getFastFlag("UserInputPlaybackPluginChooseRecordingNamePopUpFixStyle");
local v9 = v1.PureComponent:extend("ChooseRecordingNamePopUp");
v9.init = function(v10, v11)
    assert(v11.OnSaveButtonPressed, "OnSaveButtonPressed prop not defined");
    assert(v11.OnCancelButtonPressed, "OnCancelButtonPressed prop not defined");
    assert(v11.MessageLocalizationKey, "MessageLocalizationKey prop not defined");
    v10:setState({
        dialogInputValue = v11.DefaultInputValue or ""
    });
    v10.onTextInputChanged = function(v12)
        v10:setState({
            dialogInputValue = v12
        });
    end;
end;
v9.render = function(v13)
    local l_props_0 = v13.props;
    local l_Localization_0 = l_props_0.Localization;
    local l_Stylizer_0 = l_props_0.Stylizer;
    return v1.createElement(l_StyledDialog_0, {
        Title = l_Localization_0:getText("ChooseRecordingNamePopUp", "Title"),
        OnClose = l_props_0.OnCancelButtonPressed,
        OnButtonPressed = function(v17)
            if v17 == "Save" then
                l_props_0.OnSaveButtonPressed(v13.state.dialogInputValue);
                return ;
            else
                if v17 == "Cancel" then
                    l_props_0.OnCancelButtonPressed();
                end;
                return ;
            end;
        end,
        Buttons = {
            {
                Key = "Save",
                Text = l_Localization_0:getText("ChooseRecordingNamePopUp", "SaveButtonName"),
                Style = "RoundPrimary"
            },
            {
                Key = "Cancel",
                Text = l_Localization_0:getText("ChooseRecordingNamePopUp", "CancelButtonName"),
                Style = "Round"
            }
        },
        MinContentSize = l_Stylizer_0.ContentSize
    }, {
        Container = v1.createElement(l_Pane_0, {
            Size = l_Stylizer_0.PanelSize,
            Position = l_Stylizer_0.PanelPosition,
            Spacing = l_Stylizer_0.PaddingPx,
            Layout = Enum.FillDirection.Vertical,
            HorizontalAlignment = Enum.HorizontalAlignment.Left
        }, {
            Message = v1.createElement(l_TextLabel_0, {
                Size = l_Stylizer_0.DialogMessageSize,
                Text = l_Localization_0:getText("ChooseRecordingNamePopUp", l_props_0.MessageLocalizationKey, {
                    numBytes = l_props_0.MessageLocalizationArgs[1]
                }),
                TextXAlignment = Enum.TextXAlignment.Left,
                TextWrapped = true,
                LayoutOrder = 1
            }),
            Input = v1.createElement(l_UI_0.TextInput, {
                Size = l_Stylizer_0.TextInputSize,
                Text = v13.state.dialogInputValue,
                OnTextChanged = v13.onTextInputChanged,
                Style = not v8 and "RoundedBorder" or nil,
                PlaceholderText = "",
                LayoutOrder = 2
            })
        })
    });
end;
return (l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v9));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_Pane_0 = l_UI_0.Pane;
local v8 = require(l_Parent_0.Src.Util.StringFormatters);
local v9 = require(l_Parent_0.Src.Components.UIKeyValueTextLabel);
local v10 = v1.PureComponent:extend("DeviceEmulationInfoUIGroup");
v10.init = function(_)
end;
v10.render = function(v12)
    local l_props_0 = v12.props;
    local l_Localization_0 = l_props_0.Localization;
    local l_Stylizer_0 = l_props_0.Stylizer;
    return v1.createElement(l_Pane_0, {
        LayoutOrder = l_props_0.LayoutOrder,
        Style = "CornerBox",
        Size = UDim2.fromOffset(l_Stylizer_0.UIGroupWidthPx, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        Layout = Enum.FillDirection.Vertical,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        Padding = l_Stylizer_0.PaddingPx,
        HorizontalAlignment = Enum.HorizontalAlignment.Center,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        Label = v1.createElement(l_TextLabel_0, {
            Text = l_Localization_0:getText("RecordTabView", "CurrentRecordingDeviceLabel"),
            Size = UDim2.fromScale(1, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            LayoutOrder = 0,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top
        }),
        KeyValuePairs = v1.createElement(l_Pane_0, {
            Size = UDim2.fromScale(1, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            LayoutOrder = 1,
            Layout = Enum.FillDirection.Vertical,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            VerticalAlignment = Enum.VerticalAlignment.Top
        }, {
            DeviceName = v1.createElement(v9, {
                Label = l_Localization_0:getText("RecordTabView", "EmulationDeviceName"),
                Value = v8.formatDeviceName(l_props_0.EmulationDeviceId, l_Localization_0),
                LayoutOrder = 1
            }),
            Orientation = v1.createElement(v9, {
                Label = l_Localization_0:getText("RecordTabView", "EmulationDeviceOrientation"),
                Value = v8.formatDeviceOrientation(l_props_0.EmulationDeviceOrientation, l_props_0.EmulationDeviceId, l_Localization_0),
                LayoutOrder = 2
            }),
            Resolution = v1.createElement(v9, {
                Label = l_Localization_0:getText("RecordTabView", "EmulationDeviceResolution"),
                Value = v8.format2dResolution(l_props_0.CurrentScreenSize, l_Localization_0:getText("RecordTabView", "ResolutionPixelsName")),
                LayoutOrder = 3
            })
        })
    });
end;
return v2.connect(function(v16, _)
    return {
        ShouldRecordOnGamePlayStart = v16.recordTab.shouldStart,
        CurrentScreenSize = v16.recordTab.screenSize,
        EmulationDeviceId = v16.recordTab.emulationDeviceId,
        EmulationDeviceOrientation = v16.recordTab.emulationDeviceOrientation,
        RecordingMode = v16.recordTab.recordingMode
    };
end, nil)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v10)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_Button_0 = l_UI_0.Button;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_Pane_0 = l_UI_0.Pane;
local l_HoverArea_0 = l_UI_0.HoverArea;
local l_TimeProgressBar_0 = l_UI_0.TimeProgressBar;
local l_StyleModifier_0 = v3.Util.StyleModifier;
local v12 = require(l_Parent_0.Src.Components.LabeledToggleButton);
local v13 = require(l_Parent_0.Src.Components.RecordingFileSelector);
local v14 = require(l_Parent_0.Src.Util.Enums);
local v15 = require(l_Parent_0.Src.Util.DMBridge);
local v16 = require(l_Parent_0.Src.Actions.Common.SetPluginState);
local v17 = require(l_Parent_0.Src.Actions.PlaybackTab.SetShouldSetEmulationDevice);
local v18 = v1.PureComponent:extend("FileSelectorUIGroup");
v18.init = function(v19)
    v19.state = {
        canStartPlaying = false
    };
    v19.toggleEmulationEnabled = function()
        local l_props_0 = v19.props;
        l_props_0.SetShouldSetEmulationDevice(not l_props_0.ShouldSetEmulationDevice, l_props_0.RoduxStoreContext);
    end;
    v19.onPlayButtonClicked = function()
        local l_PluginState_0 = v19.props.PluginState;
        if not (l_PluginState_0 == v14.PluginState.Default) or not v19.state.canStartPlaying then
            if l_PluginState_0 == v14.PluginState.Playing then
                v15.onStopPlaybackButtonClicked();
                return ;
            else
                if l_PluginState_0 == v14.PluginState.ShouldStartPlayback then
                    v19.props.SetPluginState(v14.PluginState.Default);
                end;
                return ;
            end;
        elseif not v15.getIsPlayMode() then
            v19.props.SetPluginState(v14.PluginState.ShouldStartPlayback);
            return ;
        else
            v15.onStartPlaybackButtonClicked();
            return ;
        end;
    end;
    v19.onCanStartPlaying = function(v22)
        v19:setState({
            canStartPlaying = v22
        });
    end;
end;
v18.render = function(v23)
    local l_props_1 = v23.props;
    local l_state_0 = v23.state;
    local l_Localization_0 = l_props_1.Localization;
    local l_Stylizer_0 = l_props_1.Stylizer;
    local v28 = nil;
    local v29 = nil;
    local v30 = nil;
    local v31 = false;
    local v32 = false;
    if l_props_1.PluginState == v14.PluginState.Playing then
        v28 = l_Localization_0:getText("PlaybackTabView", "StatusMessagePlaying");
        v29 = l_Localization_0:getText("PlaybackTabView", "PlayButtonStop");
        v30 = l_StyleModifier_0.Pressed;
        v32 = true;
        v31 = true;
    elseif l_props_1.PluginState == v14.PluginState.ShouldStartPlayback then
        v28 = l_Localization_0:getText("PlaybackTabView", "StatusMessageShouldStartPlayback");
        v29 = l_Localization_0:getText("PlaybackTabView", "PlayButtonReady");
        v30 = l_StyleModifier_0.Selected;
        v32 = false;
    elseif l_props_1.PluginState == v14.PluginState.Default then
        v28 = l_Localization_0:getText("PlaybackTabView", "StatusMessageNotPlaying");
        v29 = l_Localization_0:getText("PlaybackTabView", "PlayButtonPlay");
        v30 = if not l_state_0.canStartPlaying then l_StyleModifier_0.Disabled else nil;
        v32 = false;
    elseif l_props_1.PluginState == v14.PluginState.Disabled then
        v28 = l_Localization_0:getText("PlaybackTabView", "StatusMessageDisabled");
        v29 = l_Localization_0:getText("PlaybackTabView", "PlayButtonPlay");
        v30 = l_StyleModifier_0.Disabled;
        v32 = true;
    end;
    return v1.createElement(l_Pane_0, {
        LayoutOrder = l_props_1.LayoutOrder,
        Style = "CornerBox",
        Size = UDim2.fromOffset(l_Stylizer_0.UIGroupWidthPx, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        Layout = Enum.FillDirection.Vertical,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        Padding = l_Stylizer_0.PaddingPx,
        HorizontalAlignment = Enum.HorizontalAlignment.Center,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        RecordingFileSelector = v1.createElement(v13, {
            OnCanStartPlaying = v23.onCanStartPlaying
        }),
        LoadingBar = v31 and v1.createElement(l_TimeProgressBar_0, {
            Width = l_Stylizer_0.ProgressBarWidth,
            LayoutOrder = 2,
            TotalTime = l_props_1.CurrentRecordingDurationSec
        }),
        Button = v1.createElement(l_Button_0, {
            Size = l_Stylizer_0.PrimaryButtonSize,
            LayoutOrder = 3,
            AnchorPoint = Vector2.new(0.5, 0),
            Style = "RoundPrimaryPlayButton",
            StyleModifier = v30,
            Text = v29,
            OnClick = v23.onPlayButtonClicked
        }, {
            v1.createElement(l_HoverArea_0, {
                Cursor = "PointingHand"
            })
        }),
        EmulationEnabled = v1.createElement(v12, {
            Selected = l_props_1.ShouldSetEmulationDevice,
            OnClick = v23.toggleEmulationEnabled,
            Text = l_Localization_0:getText("PlaybackTabView", "SetEmulationDeviceLabel"),
            Disabled = v32,
            LayoutOrder = 4
        }),
        StatusTextLabel = v1.createElement(l_TextLabel_0, {
            Text = v28,
            Size = UDim2.fromScale(1, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            LayoutOrder = 5,
            Style = "StatusTextLabel",
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top
        })
    });
end;
return v2.connect(function(v33, _)
    return {
        ShouldSetEmulationDevice = v33.playbackTab.shouldSetEmulationDevice,
        PluginState = v33.common.pluginState,
        CurrentRecordingDurationSec = v33.playbackTab.currentRecordingDurationSec
    };
end, function(v35)
    return {
        SetPluginState = function(v36)
            v35(v16(v36));
        end,
        SetShouldSetEmulationDevice = function(v37)
            v35(v17(v37));
        end
    };
end)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v18)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_Pane_0 = l_UI_0.Pane;
local v8 = require(l_Parent_0.Src.Components.LabeledToggleButton);
local v9 = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetGamepadEnabled);
local v10 = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetKeyboardEnabled);
local v11 = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetMouseClickEnabled);
local v12 = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetMouseMoveEnabled);
local v13 = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetTouchEnabled);
local v14 = v1.PureComponent:extend("FilterSettingsUIGroup");
v14.init = function(v15, v16)
    assert(v16.RoduxStoreContext);
    v15.toggleMouseMove = function()
        local l_props_0 = v15.props;
        l_props_0.SetMouseMoveEnabled(not l_props_0.EnabledMouseMove, l_props_0.RoduxStoreContext);
    end;
    v15.toggleMouseClick = function()
        local l_props_1 = v15.props;
        l_props_1.SetMouseClickEnabled(not l_props_1.EnabledMouseClick, l_props_1.RoduxStoreContext);
    end;
    v15.toggleKeyboard = function()
        local l_props_2 = v15.props;
        l_props_2.SetKeyboardEnabled(not l_props_2.EnabledKeyboard, l_props_2.RoduxStoreContext);
    end;
    v15.toggleGamepad = function()
        local l_props_3 = v15.props;
        l_props_3.SetGamepadEnabled(not l_props_3.EnabledGamepad, l_props_3.RoduxStoreContext);
    end;
    v15.toggleTouch = function()
        local l_props_4 = v15.props;
        l_props_4.SetTouchEnabled(not l_props_4.EnabledTouch, l_props_4.RoduxStoreContext);
    end;
end;
v14.render = function(v22)
    local l_props_5 = v22.props;
    local l_Localization_0 = l_props_5.Localization;
    local l_Stylizer_0 = l_props_5.Stylizer;
    local l_Disabled_0 = v22.props.Disabled;
    return v1.createElement(l_Pane_0, {
        LayoutOrder = l_props_5.LayoutOrder,
        Style = "CornerBox",
        Size = UDim2.fromOffset(l_Stylizer_0.UIGroupWidthPx, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        Layout = Enum.FillDirection.Vertical,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        Padding = l_Stylizer_0.PaddingPx,
        HorizontalAlignment = Enum.HorizontalAlignment.Left,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        Label = v1.createElement(l_TextLabel_0, {
            Text = l_Localization_0:getText("PlaybackTabView", "FilterEventsLabel"),
            Size = UDim2.fromScale(1, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            LayoutOrder = 0,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top
        }),
        GridLayoutArea = v1.createElement(l_Pane_0, {
            Size = UDim2.new(1, 0, 0, l_Stylizer_0.GridAreaHeightPx),
            LayoutOrder = 1
        }, {
            Layout = v1.createElement("UIGridLayout", {
                FillDirection = Enum.FillDirection.Vertical,
                CellPadding = UDim2.fromOffset(l_Stylizer_0.PaddingPx, l_Stylizer_0.GridCellPaddingYPx),
                SortOrder = Enum.SortOrder.LayoutOrder,
                VerticalAlignment = Enum.VerticalAlignment.Top,
                HorizontalAlignment = Enum.HorizontalAlignment.Center,
                CellSize = l_Stylizer_0.GridLayoutCellSize
            }),
            MouseMoveEnabled = v1.createElement(v8, {
                Selected = l_props_5.EnabledMouseMove,
                OnClick = v22.toggleMouseMove,
                Text = l_Localization_0:getText("RecordTabView", "FilterNameMouseMove"),
                Disabled = l_Disabled_0
            }),
            MouseClickEnabled = v1.createElement(v8, {
                Selected = l_props_5.EnabledMouseClick,
                OnClick = v22.toggleMouseClick,
                Text = l_Localization_0:getText("RecordTabView", "FilterNameMouseClick"),
                Disabled = l_Disabled_0
            }),
            KeyboardEnabled = v1.createElement(v8, {
                Selected = l_props_5.EnabledKeyboard,
                OnClick = v22.toggleKeyboard,
                Text = l_Localization_0:getText("RecordTabView", "FilterNameKeyboard"),
                Disabled = l_Disabled_0
            }),
            GamepadEnabled = v1.createElement(v8, {
                Selected = l_props_5.EnabledGamepad,
                OnClick = v22.toggleGamepad,
                Text = l_Localization_0:getText("RecordTabView", "FilterNameGamepad"),
                Disabled = l_Disabled_0
            }),
            TouchEnabled = v1.createElement(v8, {
                Selected = l_props_5.EnabledTouch,
                OnClick = v22.toggleTouch,
                Text = l_Localization_0:getText("RecordTabView", "FilterNameTouch"),
                Disabled = l_Disabled_0
            })
        })
    });
end;
return v2.connect(function(v27, v28)
    local v29 = v27[v28.RoduxStoreContext];
    return {
        EnabledMouseMove = v29.mouseMove,
        EnabledMouseClick = v29.mouseClick,
        EnabledKeyboard = v29.keyboard,
        EnabledGamepad = v29.gamepad,
        EnabledTouch = v29.touch
    };
end, function(v30)
    return {
        SetMouseMoveEnabled = function(v31, v32)
            v30(v12(v31, v32));
        end,
        SetMouseClickEnabled = function(v33, v34)
            v30(v11(v33, v34));
        end,
        SetKeyboardEnabled = function(v35, v36)
            v30(v10(v35, v36));
        end,
        SetGamepadEnabled = function(v37, v38)
            v30(v9(v37, v38));
        end,
        SetTouchEnabled = function(v39, v40)
            v30(v13(v39, v40));
        end
    };
end)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v14)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.Otter);
local v3 = require(l_Parent_0.Packages.Cryo);
local v4 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v4.ContextServices;
local l_Pane_0 = v4.UI.Pane;
local v7 = require(l_Parent_0.Src.Components.KeyBarTile);
local l_UserInputService_0 = game:GetService("UserInputService");
local v9 = Color3.new(0, 1, 0);
local v10 = {
    [1] = Color3.new(1, 1, 1),
    [2] = Color3.new(1, 1, 0)
};
local v11 = {
    [Enum.UserInputType.Keyboard] = 1,
    [Enum.UserInputType.Gamepad1] = 2,
    [Enum.UserInputType.Gamepad2] = 2,
    [Enum.UserInputType.Gamepad3] = 2,
    [Enum.UserInputType.Gamepad4] = 2,
    [Enum.UserInputType.Gamepad5] = 2,
    [Enum.UserInputType.Gamepad6] = 2,
    [Enum.UserInputType.Gamepad7] = 2,
    [Enum.UserInputType.Gamepad8] = 2
};
local v12 = {
    [Enum.KeyCode.Thumbstick1] = 1,
    [Enum.KeyCode.Thumbstick2] = 1
};
local v13 = v1.PureComponent:extend("InputVisualizer");
local v14 = 0;
local v15;
do
    local l_v14_0 = v14;
    v15 = function()
        l_v14_0 = l_v14_0 + 1;
        return l_v14_0;
    end;
end;
v14 = function(v17, v18, v19, v20)
    local v21, v22 = v1.createBinding(UDim2.fromOffset(0, 0));
    local v23, v24 = v1.createBinding(UDim2.fromOffset(0, 0));
    local v25, v26 = v1.createBinding(0);
    return {
        id = v15(),
        buttonId = v17,
        color = v10[v17],
        position = v21,
        updatePosition = v22,
        size = v23,
        updateSize = v24,
        transparency = v25,
        image = v18,
        zIndex = v19 or 1,
        updateTransparency = v26,
        motor = v2.createGroupMotor({
            size = 0,
            transparency = v20 or 0
        })
    };
end;
local function v35(v27, v28)
    local v29, v30 = v1.createBinding(UDim2.fromOffset(v27, 50));
    local v31, v32 = v1.createBinding(v28);
    local v33, v34 = v1.createBinding(v28);
    return {
        size = v29,
        updateSize = v30,
        backgroundTransparency = v31,
        updateBackgroundTransparency = v32,
        foregroundTransparency = v33,
        updateForegroundTransparency = v34,
        motor = v2.createGroupMotor({
            size = v27 or UDim2.new(),
            transparency = v28 or 0
        })
    };
end;
v13.init = function(v36)
    v36.state = {
        visibleCursorRingIds = {},
        keyRows = {}
    };
    v36.cursorRings = {};
    v36.currentCursorRingsByButtonId = {};
    v36.mouseButtonIsDown = {};
    v36.connections = {};
    v36.touchMap = {};
    v36.keyTileData = {};
    local v37, v38 = v1.createBinding(UDim2.fromOffset(0, 0));
    v36.fakeCursorPosition = v37;
    v36.updateFakeCursorPosition = v38;
    v36.onMouseDown = function(v39, v40)
        if not v36.currentCursorRingsByButtonId[v40] then
            local v41 = v14(v40, "rbxasset://textures/UserInputPlaybackPlugin/Ring.png");
            table.insert(v36.cursorRings, v41);
            v41.updatePosition(UDim2.fromOffset(v39.X, v39.Y));
            v41.updateSize(UDim2.fromOffset(1, 1));
            v41.updateTransparency(0);
            v41.motor:onStep(function(v42)
                v41.updateSize(UDim2.fromOffset(v42.size, v42.size));
                v41.updateTransparency(v42.transparency);
            end);
            v41.motor:setGoal({
                size = v2.spring(50, {
                    frequency = 1
                }),
                transparency = v2.instant(0)
            });
            v36:setState({
                visibleCursorRingIds = v3.Dictionary.join(v36.state.visibleCursorRingIds, {
                    [v41.id] = true
                })
            });
            v36.currentCursorRingsByButtonId[v40] = v41;
            v36.mouseButtonIsDown[v40] = true;
            return ;
        else
            return ;
        end;
    end;
    v36.onMouseMove = function(v43)
        v36.updateFakeCursorPosition(UDim2.fromOffset(v43.X, v43.Y));
        for v44 = 1, 2 do
            if not (not v36.currentCursorRingsByButtonId[v44] or not v36.mouseButtonIsDown[v44]) then
                v36.currentCursorRingsByButtonId[v44].updatePosition(UDim2.fromOffset(v43.X, v43.Y));
            end;
        end;
        l_UserInputService_0.OverrideMouseIconBehavior = Enum.OverrideMouseIconBehavior.ForceHide;
    end;
    v36.removeCursorRing = function(v45)
        if v36.isMounted then
            v36:setState({
                visibleCursorRingIds = v3.Dictionary.join(v36.state.visibleCursorRingIds, {
                    [v45.id] = false
                })
            });
            local v46 = table.find(v36.cursorRings, v45);
            assert(v46 ~= nil, "Couldn't find ring");
            table.remove(v36.cursorRings, v46);
            return ;
        else
            return ;
        end;
    end;
    v36.onMouseUp = function(v47, v48)
        local v49 = v36.currentCursorRingsByButtonId[v48];
        if v49 then
            v49.updatePosition(UDim2.fromOffset(v47.X, v47.Y));
            v49.motor:setGoal({
                size = v2.spring(100, {
                    frequency = 1
                }),
                transparency = v2.spring(1, {
                    frequency = 1
                })
            });
            v49.motor:onComplete(function()
                v36.removeCursorRing(v49);
            end);
        end;
        v36.currentCursorRingsByButtonId[v48] = nil;
        v36.mouseButtonIsDown[v48] = false;
    end;
    v36.onTouchStarted = function(v50)
        local l_Position_0 = v50.Position;
        local v52 = UDim2.fromOffset(l_Position_0.X, l_Position_0.Y);
        local v53 = v14(0, "rbxasset://textures/UserInputPlaybackPlugin/Ring.png", 2, 0);
        table.insert(v36.cursorRings, v53);
        v53.updatePosition(v52);
        v53.motor:onStep(function(v54)
            v53.updateSize(UDim2.fromOffset(v54.size, v54.size));
            v53.updateTransparency(v54.transparency);
        end);
        v53.motor:setGoal({
            size = v2.spring(50, {
                frequency = 1
            }),
            transparency = v2.instant(0)
        });
        local v55 = v14(0, "rbxasset://textures/UserInputPlaybackPlugin/TapCursor.png", 1, 1);
        table.insert(v36.cursorRings, v55);
        v55.color = v9;
        v55.updatePosition(v52);
        v55.updateTransparency(1);
        v55.updateSize(UDim2.fromOffset(64, 64));
        v55.motor:onStep(function(v56)
            v55.updateTransparency(v56.transparency);
        end);
        v55.motor:setGoal({
            transparency = v2.spring(0, {
                frequency = 2.5
            })
        });
        local l_visibleCursorRingIds_0 = v36.state.visibleCursorRingIds;
        l_visibleCursorRingIds_0[v53.id] = true;
        l_visibleCursorRingIds_0[v55.id] = true;
        v36:setState({
            visibleCursorRingIds = l_visibleCursorRingIds_0
        });
        v36.touchMap[v50] = {
            tapImage = v55,
            ring = v53
        };
    end;
    v36.onTouchMoved = function(v58)
        local v59 = v36.touchMap[v58];
        if v59 then
            local l_Position_1 = v58.Position;
            local v61 = UDim2.fromOffset(l_Position_1.X, l_Position_1.Y);
            v59.tapImage.updatePosition(v61);
            v59.ring.updatePosition(v61);
        end;
    end;
    v36.onTouchEnded = function(v62)
        local v63 = v36.touchMap[v62];
        if v63 then
            v36.onTouchMoved(v62);
            v63.ring.motor:setGoal({
                size = v2.spring(100, {
                    frequency = 1
                }),
                transparency = v2.spring(1, {
                    frequency = 1
                })
            });
            v63.ring.motor:onComplete(function()
                v36.removeCursorRing(v63.ring);
            end);
            v63.tapImage.motor:setGoal({
                transparency = v2.spring(1, {
                    frequency = 1
                })
            });
            v63.tapImage.motor:onComplete(function()
                v36.removeCursorRing(v63.tapImage);
            end);
        end;
    end;
    v36.onKeyDown = function(v64)
        if not v12[v64] then
            v36:setState(function(v65, _)
                local v67 = v3.Dictionary.join(v65.keyRows);
                local v68 = v67[1];
                if not v68 or v68.numberOfKeys >= 6 then
                    v68 = {
                        lastUpdateTime = tick(),
                        numberOfKeys = 0,
                        keys = {},
                        dataId = v15()
                    };
                    table.insert(v67, 1, v68);
                    local v69 = v35(0, 1);
                    v36.keyTileData[v68.dataId] = v69;
                    v69.updateSize(UDim2.fromOffset(50, 0));
                    local l_v69_0 = v69 --[[ copy: 5 -> 7 ]];
                    v69.motor:onStep(function(v71)
                        l_v69_0.updateSize(UDim2.fromOffset(50, v71.size));
                    end);
                    v69.motor:setGoal({
                        size = v2.spring(50, {
                            frequency = 2.5
                        })
                    });
                end;
                local v72 = v35(0, 1);
                local v73 = v15();
                v36.keyTileData[v73] = v72;
                v72.motor:onStep(function(v74)
                    v72.updateSize(UDim2.fromOffset(v74.size, 50));
                    v72.updateForegroundTransparency(v74.transparency);
                    v72.updateBackgroundTransparency(1 - (1 - v74.transparency) * 0.6);
                end);
                v72.motor:setGoal({
                    size = v2.spring(50, {
                        frequency = 2.5
                    }),
                    transparency = v2.spring(0, {
                        frequency = 2.5
                    })
                });
                v68.lastUpdateTime = tick();
                v68.numberOfKeys = v68.numberOfKeys + 1;
                table.insert(v68.keys, {
                    keyCode = v64,
                    dataId = v73
                });
                return {
                    keyRows = v67
                };
            end);
            return ;
        else
            return ;
        end;
    end;
    v36.deleteKeyRowThread = function()
        local _ = function(v75)
            if v36.isMounted then
                v36:setState(function(v76, _)
                    local v78 = v3.Dictionary.join(v76.keyRows);
                    local v79 = nil;
                    local v80 = nil;
                    for v81, v82 in ipairs(v78) do
                        if v82.dataId == v75 then
                            v79 = v82;
                            v80 = v81;
                            break;
                        end;
                    end;
                    if v79 then
                        v36.keyTileData[v79.dataId] = nil;
                        for _, v84 in ipairs(v79.keys) do
                            v36.keyTileData[v84.dataId] = nil;
                        end;
                        v79.keys = nil;
                        table.remove(v78, v80);
                        return {
                            keyRows = v78
                        };
                    else
                        return ;
                    end;
                end);
                return ;
            else
                return ;
            end;
        end;
        local function v100(v86)
            for v87, v88 in ipairs(v86.keys) do
                local v89 = v36.keyTileData[v88.dataId];
                v89.motor:setGoal({
                    transparency = v2.spring(1, {
                        frequency = 2
                    })
                });
                if v87 == 1 then
                    v89.motor:onComplete(function()
                        local l_dataId_0 = v86.dataId;
                        if v36.isMounted then
                            v36:setState(function(v91, _)
                                local v93 = v3.Dictionary.join(v91.keyRows);
                                local v94 = nil;
                                local v95 = nil;
                                for v96, v97 in ipairs(v93) do
                                    if v97.dataId == l_dataId_0 then
                                        v94 = v97;
                                        v95 = v96;
                                        break;
                                    end;
                                end;
                                if v94 then
                                    v36.keyTileData[v94.dataId] = nil;
                                    for _, v99 in ipairs(v94.keys) do
                                        v36.keyTileData[v99.dataId] = nil;
                                    end;
                                    v94.keys = nil;
                                    table.remove(v93, v95);
                                    return {
                                        keyRows = v93
                                    };
                                else
                                    return ;
                                end;
                            end);
                            return ;
                        else
                            return ;
                        end;
                    end);
                end;
            end;
        end;
        while v36.isMounted do
            for _, v102 in ipairs(v36.state.keyRows) do
                if tick() - v102.lastUpdateTime > 1.5 then
                    v100(v102);
                end;
            end;
            wait(0.5);
        end;
    end;
end;
v13.didMount = function(v103)
    table.insert(v103.connections, l_UserInputService_0.InputBegan:connect(function(v104)
        local l_Position_2 = v104.Position;
        if v104.UserInputType == Enum.UserInputType.MouseButton1 then
            v103.onMouseDown(Vector2.new(l_Position_2.X, l_Position_2.Y), 1);
            return ;
        elseif v104.UserInputType == Enum.UserInputType.MouseButton2 then
            v103.onMouseDown(Vector2.new(l_Position_2.X, l_Position_2.Y), 2);
            return ;
        elseif v104.UserInputType == Enum.UserInputType.Touch then
            v103.onTouchStarted(v104);
            return ;
        else
            if v11[v104.UserInputType] then
                v103.onKeyDown(v104.KeyCode);
            end;
            return ;
        end;
    end));
    table.insert(v103.connections, l_UserInputService_0.InputEnded:connect(function(v106)
        local l_Position_3 = v106.Position;
        if v106.UserInputType == Enum.UserInputType.MouseButton1 then
            v103.onMouseUp(Vector2.new(l_Position_3.X, l_Position_3.Y), 1);
            return ;
        elseif v106.UserInputType == Enum.UserInputType.MouseButton2 then
            v103.onMouseUp(Vector2.new(l_Position_3.X, l_Position_3.Y), 2);
            return ;
        else
            if v106.UserInputType == Enum.UserInputType.Touch then
                v103.onTouchEnded(v106);
            end;
            return ;
        end;
    end));
    table.insert(v103.connections, l_UserInputService_0.InputChanged:connect(function(v108)
        local l_Position_4 = v108.Position;
        if v108.UserInputType == Enum.UserInputType.MouseMovement then
            v103.onMouseMove(Vector2.new(l_Position_4.X, l_Position_4.Y));
            return ;
        else
            if v108.UserInputType == Enum.UserInputType.Touch then
                v103.onTouchMoved(v108);
            end;
            return ;
        end;
    end));
    v103.isMounted = true;
    task.defer(v103.deleteKeyRowThread);
end;
v13.willUnmount = function(v110)
    for _, v112 in ipairs(v110.connections) do
        v112:Disconnect();
    end;
    v110.connections = {};
    v110.isMounted = false;
end;
v13.render = function(v113)
    local l_props_0 = v113.props;
    local l_state_0 = v113.state;
    local l_Stylizer_0 = l_props_0.Stylizer;
    local v117 = {};
    for v118, v119 in ipairs(l_state_0.keyRows) do
        local v120 = {};
        for v121, v122 in ipairs(v119.keys) do
            local v123 = v113.keyTileData[v122.dataId];
            if v123 then
                v120[v121] = v1.createElement(v7, {
                    KeyCode = v122.keyCode,
                    LayoutOrder = v121,
                    Size = v123.size,
                    ForegroundTransparency = v123.foregroundTransparency,
                    BackgroundTransparency = v123.backgroundTransparency
                });
            end;
        end;
        local v124 = v113.keyTileData[v119.dataId];
        if v124 then
            v117[v118] = v1.createElement(l_Pane_0, {
                Layout = Enum.FillDirection.Horizontal,
                HorizontalAlignment = Enum.HorizontalAlignment.Left,
                VerticalAlignment = Enum.VerticalAlignment.Bottom,
                Spacing = l_Stylizer_0.KeyBarRowSpacingPx,
                Size = v124.size,
                LayoutOrder = -v118
            }, v120);
        end;
    end;
    local v125 = {
        FakeCursorImage = v1.createElement("ImageLabel", {
            BackgroundTransparency = 1,
            BorderSizePixel = 0,
            Image = "rbxasset://textures/UserInputPlaybackPlugin/ArrowCursor.png",
            Position = v113.fakeCursorPosition,
            Size = UDim2.fromOffset(64, 64),
            AnchorPoint = Vector2.new(0.5, 0.5),
            Visible = true,
            ImageColor3 = v9,
            ZIndex = 1
        }),
        KeyBar = v1.createElement(l_Pane_0, {
            Layout = Enum.FillDirection.Vertical,
            Spacing = l_Stylizer_0.KeyBarRowSpacingPx,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            VerticalAlignment = Enum.VerticalAlignment.Bottom,
            Size = l_Stylizer_0.KeyBarSize,
            Position = UDim2.fromScale(0, 1),
            AnchorPoint = Vector2.new(0, 1)
        }, v117)
    };
    for _, v127 in ipairs(v113.cursorRings) do
        if l_state_0.visibleCursorRingIds[v127.id] then
            v125[v127.id] = v1.createElement("ImageLabel", {
                BackgroundTransparency = 1,
                BorderSizePixel = 0,
                Image = v127.image,
                ZIndex = v127.zIndex,
                AnchorPoint = Vector2.new(0.5, 0.5),
                Size = v127.size,
                Position = v127.position,
                ImageTransparency = v127.transparency,
                ImageColor3 = v127.color,
                Visible = true
            });
        end;
    end;
    return v1.createFragment(v125);
end;
return (l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer
})(v13));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v2.ContextServices;
local l_Pane_0 = v2.UI.Pane;
local l_UserInputService_0 = game:GetService("UserInputService");
local v6 = {
    [Enum.KeyCode.ButtonX] = "rbxasset://textures/ui/Controls/xboxX.png",
    [Enum.KeyCode.ButtonY] = "rbxasset://textures/ui/Controls/xboxY.png",
    [Enum.KeyCode.ButtonA] = "rbxasset://textures/ui/Controls/xboxA.png",
    [Enum.KeyCode.ButtonB] = "rbxasset://textures/ui/Controls/xboxB.png",
    [Enum.KeyCode.ButtonSelect] = "rbxasset://textures/ui/Controls/xboxmenu.png",
    [Enum.KeyCode.ButtonL1] = "rbxasset://textures/ui/Controls/xboxLS.png",
    [Enum.KeyCode.ButtonR1] = "rbxasset://textures/ui/Controls/xboxRS.png"
};
local v7 = UDim2.fromOffset(28, 28);
local v8 = {
    [Enum.KeyCode.DPadLeft] = "rbxasset://textures/ui/Controls/dpadLeft.png",
    [Enum.KeyCode.DPadRight] = "rbxasset://textures/ui/Controls/dpadRight.png",
    [Enum.KeyCode.DPadUp] = "rbxasset://textures/ui/Controls/dpadUp.png",
    [Enum.KeyCode.DPadDown] = "rbxasset://textures/ui/Controls/dpadDown.png"
};
local v9 = UDim2.fromOffset(30, 30);
local v10 = {
    [Enum.KeyCode.Backspace] = "rbxasset://textures/ui/Controls/backspace.png",
    [Enum.KeyCode.Return] = "rbxasset://textures/ui/Controls/return.png",
    [Enum.KeyCode.LeftShift] = "rbxasset://textures/ui/Controls/shift.png",
    [Enum.KeyCode.RightShift] = "rbxasset://textures/ui/Controls/shift.png",
    [Enum.KeyCode.Tab] = "rbxasset://textures/ui/Controls/tab.png"
};
local v11 = UDim2.fromOffset(45, 45);
local v12 = {
    ["'"] = "rbxasset://textures/ui/Controls/apostrophe.png",
    [","] = "rbxasset://textures/ui/Controls/comma.png",
    ["`"] = "rbxasset://textures/ui/Controls/graveaccent.png",
    ["."] = "rbxasset://textures/ui/Controls/period.png",
    [" "] = "rbxasset://textures/ui/Controls/spacebar.png"
};
local v13 = {
    [Enum.KeyCode.LeftControl] = "Ctrl",
    [Enum.KeyCode.RightControl] = "Ctrl",
    [Enum.KeyCode.LeftAlt] = "Alt",
    [Enum.KeyCode.RightAlt] = "Alt",
    [Enum.KeyCode.F1] = "F1",
    [Enum.KeyCode.F2] = "F2",
    [Enum.KeyCode.F3] = "F3",
    [Enum.KeyCode.F4] = "F4",
    [Enum.KeyCode.F5] = "F5",
    [Enum.KeyCode.F6] = "F6",
    [Enum.KeyCode.F7] = "F7",
    [Enum.KeyCode.F8] = "F8",
    [Enum.KeyCode.F9] = "F9",
    [Enum.KeyCode.F10] = "F10",
    [Enum.KeyCode.F11] = "F11",
    [Enum.KeyCode.F12] = "F12"
};
local v14 = v1.PureComponent:extend("KeyBarTile");
v14.init = function(_, v16)
    assert(v16.KeyCode ~= nil);
end;
v14.render = function(v17)
    local l_props_0 = v17.props;
    local l_Stylizer_0 = l_props_0.Stylizer;
    local l_KeyCode_0 = l_props_0.KeyCode;
    local v21 = nil;
    local l_l_UserInputService_0_StringForKeyCode_0 = l_UserInputService_0:GetStringForKeyCode(l_KeyCode_0);
    v21 = v10[l_KeyCode_0];
    local l_v11_0 = v11;
    if v21 == nil then
        v21 = v12[l_l_UserInputService_0_StringForKeyCode_0];
    end;
    if v21 == nil then
        v21 = v8[l_KeyCode_0];
        l_v11_0 = v9;
    end;
    if v21 == nil then
        v21 = v6[l_KeyCode_0];
        l_v11_0 = v7;
    end;
    local v24 = v13[l_KeyCode_0];
    if v24 then
        l_l_UserInputService_0_StringForKeyCode_0 = v24;
    end;
    if not l_l_UserInputService_0_StringForKeyCode_0 or string.len(l_l_UserInputService_0_StringForKeyCode_0) == 0 then
        l_l_UserInputService_0_StringForKeyCode_0 = l_KeyCode_0.Name;
    end;
    if not v21 then
        return v1.createElement(l_Pane_0, {
            Style = "KeyTileBox",
            Size = l_props_0.Size,
            BackgroundTransparency = l_props_0.BackgroundTransparency,
            LayoutOrder = l_props_0.LayoutOrder
        }, {
            TextLabel = v1.createElement("TextLabel", {
                Text = l_l_UserInputService_0_StringForKeyCode_0,
                Position = UDim2.fromScale(0, 0),
                Size = UDim2.fromScale(1, 1),
                TextScaled = true,
                Font = Enum.Font.SourceSansBold,
                TextSize = 25,
                TextColor3 = l_Stylizer_0.TextColor,
                BackgroundTransparency = 1,
                BorderSizePixel = 0,
                TextTransparency = l_props_0.ForegroundTransparency
            }, {
                SizeConstraint = v1.createElement("UITextSizeConstraint", {
                    MaxTextSize = 25,
                    MinTextSize = 5
                })
            })
        });
    else
        return v1.createElement(l_Pane_0, {
            Style = "KeyTileBox",
            Size = l_props_0.Size,
            BackgroundTransparency = l_props_0.BackgroundTransparency,
            LayoutOrder = l_props_0.LayoutOrder
        }, {
            Image = v1.createElement("ImageLabel", {
                Image = v21,
                AnchorPoint = Vector2.new(0.5, 0.5),
                Position = UDim2.fromScale(0.5, 0.5),
                BackgroundTransparency = 1,
                Size = l_v11_0,
                ImageTransparency = l_props_0.ForegroundTransparency
            })
        });
    end;
end;
return (l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer
})(v14));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local l_ContextServices_0 = require(l_Parent_0.Packages.Framework).ContextServices;
local l_Components_0 = l_Parent_0.Src.Components;
local v5 = require(l_Components_0.TabbedView);
local v6 = require(l_Components_0.PlaybackTabView);
local v7 = require(l_Components_0.RecordTabView);
local v8 = require(l_Parent_0.Src.Util.Enums);
local v9 = require(l_Parent_0.Src.Util.DMBridge);
local v10 = require(l_Parent_0.Src.Actions.Common.SetPluginState);
local v11 = game:getFastFlag("UserInputPlaybackPluginFixTabInitiallySelected");
local v12 = v1.PureComponent:extend("MainView");
v12.didMount = function(v13)
    v9.setPluginObject(v13.props.Plugin:get());
    v9.setLocalizationObject(v13.props.Localization);
    v9.setPluginStateRoduxActionHandler(v13.props.SetPluginState);
end;
v12.render = function(v14)
    local l_props_0 = v14.props;
    local l_Localization_0 = v14.props.Localization;
    local v17 = l_props_0.PluginState == v8.PluginState.Disabled;
    return v1.createElement(v5, {
        Tabs = {
            {
                Label = l_Localization_0:getText("Plugin", "RecordingTabTitle"),
                ContentComponent = v7,
                Disabled = v17 or l_props_0.PluginState == v8.PluginState.Playing,
                Key = if not v11 then nil else "Recording Tab"
            },
            {
                Label = l_Localization_0:getText("Plugin", "PlaybackTabTitle"),
                ContentComponent = v6,
                Disabled = v17 or l_props_0.PluginState == v8.PluginState.Recording,
                Key = if not v11 then nil else "Playback Tab"
            }
        }
    });
end;
return v2.connect(function(v18, _)
    return {
        PluginState = v18.common.pluginState
    };
end, function(v20)
    return {
        SetPluginState = function(v21)
            v20(v10(v21));
        end
    };
end)((l_ContextServices_0.withContext({
    Plugin = l_ContextServices_0.Plugin,
    Localization = l_ContextServices_0.Localization
})(v12)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_Pane_0 = l_UI_0.Pane;
local v8 = require(l_Parent_0.Src.Components.UIKeyValueTextLabel);
local v9 = require(l_Parent_0.Src.Util.StringFormatters);
local v10 = require(l_Parent_0.Src.Util.DMBridge);
local _ = require(l_Parent_0.Src.Types);
local l_PlaybackTab_0 = l_Parent_0.Src.Actions.PlaybackTab;
local v13 = require(l_PlaybackTab_0.SetCurrentRecordingDurationSec);
local v14 = require(l_PlaybackTab_0.SetCurrentRecordingNumEvents);
local v15 = require(l_PlaybackTab_0.SetCurrentRecordingResolution);
local v16 = require(l_PlaybackTab_0.SetCurrentRecordingDeviceId);
local v17 = require(l_PlaybackTab_0.SetCurrentRecordingDeviceOrientation);
local v18 = v1.PureComponent:extend("PlaybackInfoUIGroup");
v18.init = function(v19)
    v19.state = {
        dataValid = false
    };
    v19.onPlaybackInfoChanged = function(v20, v21, v22)
        if v20 ~= nil then
            local l_props_0 = v19.props;
            l_props_0.SetCurrentRecordingDurationSec(v21);
            l_props_0.SetCurrentRecordingNumEvents(v22);
            l_props_0.SetCurrentRecordingDeviceId(v20.deviceId);
            l_props_0.SetCurrentRecordingDeviceOrientation(v20.orientation);
            local l_resolution_0 = v20.resolution;
            l_props_0.SetCurrentRecordingResolution((Vector2.new(l_resolution_0[1], l_resolution_0[2])));
            v19:setState({
                dataValid = true
            });
            return ;
        else
            v19:setState({
                dataValid = false
            });
            return ;
        end;
    end;
end;
v18.didMount = function(v25)
    v10.connectPlaybackInfoChangedCallback(v25.onPlaybackInfoChanged);
end;
v18.willUnmount = function(_)
    v10.disconnectPlaybackInfoChangedCallback();
end;
v18.render = function(v27)
    if v27.state.dataValid then
        local l_props_1 = v27.props;
        local l_Localization_0 = l_props_1.Localization;
        local l_Stylizer_0 = l_props_1.Stylizer;
        return v1.createElement(l_Pane_0, {
            LayoutOrder = l_props_1.LayoutOrder,
            Style = "CornerBox",
            Size = UDim2.fromOffset(l_Stylizer_0.UIGroupWidthPx, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            Layout = Enum.FillDirection.Vertical,
            Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
            Padding = l_Stylizer_0.PaddingPx,
            HorizontalAlignment = Enum.HorizontalAlignment.Center,
            VerticalAlignment = Enum.VerticalAlignment.Top
        }, {
            Label = v1.createElement(l_TextLabel_0, {
                Text = l_Localization_0:getText("PlaybackTabView", "RecordingInfoLabel"),
                Size = UDim2.fromScale(1, 0),
                AutomaticSize = Enum.AutomaticSize.Y,
                LayoutOrder = 0,
                TextXAlignment = Enum.TextXAlignment.Left,
                TextYAlignment = Enum.TextYAlignment.Top
            }),
            KeyValuePairs = v1.createElement(l_Pane_0, {
                Size = UDim2.fromScale(1, 0),
                AutomaticSize = Enum.AutomaticSize.Y,
                LayoutOrder = 1,
                Layout = Enum.FillDirection.Vertical,
                HorizontalAlignment = Enum.HorizontalAlignment.Left,
                VerticalAlignment = Enum.VerticalAlignment.Top
            }, {
                RecordingDuration = v1.createElement(v8, {
                    Label = l_Localization_0:getText("PlaybackTabView", "RecordingDuration"),
                    Value = string.format("%.2f ", l_props_1.CurrentRecordingDurationSec) .. l_Localization_0:getText("PlaybackTabView", "SecondsUnitAbbrevation"),
                    LayoutOrder = 1
                }),
                NumberOfEvents = v1.createElement(v8, {
                    Label = l_Localization_0:getText("PlaybackTabView", "RecordingNumberOfEvents"),
                    Value = tostring(l_props_1.CurrentRecordingNumEvents),
                    LayoutOrder = 2
                }),
                RecordingDeviceId = v1.createElement(v8, {
                    Label = l_Localization_0:getText("PlaybackTabView", "RecordingDevice"),
                    Value = v9.formatDeviceName(l_props_1.CurrentRecordingDeviceId, l_Localization_0),
                    LayoutOrder = 3
                }),
                RecordingOrientation = v1.createElement(v8, {
                    Label = l_Localization_0:getText("PlaybackTabView", "RecordingOrientation"),
                    Value = v9.formatDeviceOrientation(l_props_1.CurrentRecordingDeviceOrientation, l_props_1.CurrentRecordingDeviceId, l_Localization_0),
                    LayoutOrder = 4
                }),
                RecordingResolution = v1.createElement(v8, {
                    Label = l_Localization_0:getText("PlaybackTabView", "RecordingResolution"),
                    Value = v9.format2dResolution(l_props_1.CurrentRecordingResolution, l_Localization_0:getText("RecordTabView", "ResolutionPixelsName")),
                    LayoutOrder = 5
                })
            })
        });
    else
        return nil;
    end;
end;
return v2.connect(function(v31, _)
    return {
        CurrentRecordingDurationSec = v31.playbackTab.currentRecordingDurationSec,
        CurrentRecordingNumEvents = v31.playbackTab.currentRecordingNumEvents,
        CurrentRecordingDeviceId = v31.playbackTab.currentRecordingDeviceId,
        CurrentRecordingDeviceOrientation = v31.playbackTab.currentRecordingDeviceOrientation,
        CurrentRecordingResolution = v31.playbackTab.currentRecordingResolution
    };
end, function(v33)
    return {
        SetCurrentRecordingDurationSec = function(v34)
            v33(v13(v34));
        end,
        SetCurrentRecordingDeviceId = function(v35)
            v33(v16(v35));
        end,
        SetCurrentRecordingNumEvents = function(v36)
            v33(v14(v36));
        end,
        SetCurrentRecordingResolution = function(v37)
            v33(v15(v37));
        end,
        SetCurrentRecordingDeviceOrientation = function(v38)
            v33(v17(v38));
        end
    };
end)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v18)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_Pane_0 = v3.UI.Pane;
local v6 = require(l_Parent_0.Src.Util.Enums);
local v7 = require(l_Parent_0.Src.Components.FileSelectorUIGroup);
local v8 = require(l_Parent_0.Src.Components.PlaybackInfoUIGroup);
local v9 = require(l_Parent_0.Src.Components.FilterSettingsUIGroup);
local v10 = v1.PureComponent:extend("PlaybackTabView");
v10.render = function(v11)
    local l_props_0 = v11.props;
    local l_Stylizer_0 = l_props_0.Stylizer;
    local v14 = true;
    if l_props_0.PluginState ~= v6.PluginState.Playing then
        v14 = l_props_0.PluginState == v6.PluginState.Disabled;
    end;
    return v1.createElement(l_Pane_0, {
        Size = UDim2.new(1, 0, 0, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        Padding = l_Stylizer_0.PaddingPx,
        Layout = Enum.FillDirection.Vertical,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        HorizontalAlignment = Enum.HorizontalAlignment.Left,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        FileSelector = v1.createElement(v7, {
            LayoutOrder = 1,
            RoduxStoreContext = "playbackTabFilter"
        }),
        PlaybackInfoGroup = v1.createElement(v8, {
            LayoutOrder = 2
        }),
        FilterSettings = v1.createElement(v9, {
            LayoutOrder = 3,
            RoduxStoreContext = "playbackTabFilter",
            Disabled = v14
        })
    });
end;
return v2.connect(function(v15, _)
    return {
        PluginState = v15.common.pluginState
    };
end, nil)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer
})(v10)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_Button_0 = l_UI_0.Button;
local l_Pane_0 = l_UI_0.Pane;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_HoverArea_0 = l_UI_0.HoverArea;
local l_StyleModifier_0 = v3.Util.StyleModifier;
local v11 = require(l_Parent_0.Src.Components.FilterSettingsUIGroup);
local v12 = require(l_Parent_0.Src.Components.DeviceEmulationInfoUIGroup);
local v13 = require(l_Parent_0.Src.Components.ChooseRecordingNamePopUp);
local v14 = require(l_Parent_0.Src.Util.Enums);
local v15 = require(l_Parent_0.Src.Util.DMBridge);
local v16 = require(l_Parent_0.Src.Actions.RecordTab.SetScreenSize);
local v17 = require(l_Parent_0.Src.Actions.RecordTab.SetEmulationDeviceId);
local v18 = require(l_Parent_0.Src.Actions.RecordTab.SetEmulationDeviceOrientation);
local v19 = require(l_Parent_0.Src.Actions.Common.SetPluginState);
local v20 = v1.PureComponent:extend("TabView");
v20.init = function(v21)
    v21.state = {
        SaveRecordingDialogVisible = false,
        SaveRecordingDialogMessageLocalizationKey = nil,
        SaveRecordingDialogMessageLocalizationArgs = nil
    };
    v21.onRecordingButtonClicked = function()
        local l_PluginState_0 = v21.props.PluginState;
        if l_PluginState_0 == v14.PluginState.Default then
            if not v15.getIsPlayMode() then
                v21.props.SetPluginState(v14.PluginState.ShouldStartRecording);
                return ;
            else
                v15.onStartRecordingButtonClicked();
                return ;
            end;
        elseif l_PluginState_0 == v14.PluginState.Recording then
            v15.onStopRecordingButtonClicked();
            return ;
        else
            if l_PluginState_0 == v14.PluginState.ShouldStartRecording then
                v21.props.SetPluginState(v14.PluginState.Default);
            end;
            return ;
        end;
    end;
    v21.setSaveRecordingDialogVisible = function(v23, v24)
        v21:setState({
            SaveRecordingDialogVisible = true,
            SaveRecordingDialogMessageLocalizationKey = v23,
            SaveRecordingDialogMessageLocalizationArgs = v24
        });
    end;
    v21.onSaveRecordingDialogCancel = function()
        v21:setState({
            SaveRecordingDialogVisible = false
        });
        v15.onSaveRecordingDialogCancel();
    end;
    v21.onSaveRecordingDialogSave = function(v25)
        v21:setState({
            SaveRecordingDialogVisible = false
        });
        v15.onSaveRecordingDialogSave(v25);
    end;
end;
v20.didMount = function(v26)
    v15.connectRecordTabEventListenersWithActions({
        SetEmulationDeviceId = v26.props.SetEmulationDeviceId,
        SetEmulationDeviceOrientation = v26.props.SetEmulationDeviceOrientation,
        SetCurrentScreenSize = v26.props.SetCurrentScreenSize,
        SetSaveRecordingDialogVisible = v26.setSaveRecordingDialogVisible
    });
    v15.onRecordTabShown();
end;
v20.willUnmount = function(v27)
    v15.disconnectRecordTabEventListeners();
    v15.onRecordTabHidden();
    v27.props.SetPluginState(v14.PluginState.Default);
end;
v20.render = function(v28)
    local l_props_0 = v28.props;
    local l_Stylizer_0 = l_props_0.Stylizer;
    local l_Localization_0 = v28.props.Localization;
    local l_state_0 = v28.state;
    local v33 = nil;
    local v34 = nil;
    local v35 = nil;
    local v36 = nil;
    if l_props_0.PluginState == v14.PluginState.Recording then
        v33 = l_Localization_0:getText("RecordTabView", "StatusMessageRecording");
        v34 = l_Localization_0:getText("RecordTabView", "RecordButtonStopRecording");
        v35 = l_StyleModifier_0.Pressed;
        v36 = true;
    elseif l_props_0.PluginState == v14.PluginState.ShouldStartRecording then
        v33 = l_Localization_0:getText("RecordTabView", "StatusMessageShouldRecordOnGamePlayStart");
        v34 = l_Localization_0:getText("RecordTabView", "RecordButtonReadyToRecord");
        v35 = l_StyleModifier_0.Selected;
        v36 = false;
    elseif l_props_0.PluginState == v14.PluginState.Default then
        v33 = l_Localization_0:getText("RecordTabView", "StatusMessageNotRecording");
        v34 = l_Localization_0:getText("RecordTabView", "RecordButtonRecord");
        v35 = nil;
        v36 = false;
    elseif l_props_0.PluginState == v14.PluginState.Disabled then
        v33 = l_Localization_0:getText("RecordTabView", "StatusMessageDisabled");
        v34 = l_Localization_0:getText("RecordTabView", "RecordButtonRecord");
        v35 = l_StyleModifier_0.Disabled;
        v36 = true;
    end;
    return v1.createElement(l_Pane_0, {
        Size = UDim2.new(1, 0, 0, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        Padding = l_Stylizer_0.PaddingPx,
        Layout = Enum.FillDirection.Vertical,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        HorizontalAlignment = Enum.HorizontalAlignment.Left,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        FilterSettings = v1.createElement(v11, {
            LayoutOrder = 1,
            Disabled = v36,
            RoduxStoreContext = "recordTabFilter"
        }),
        DeviceEmulationInfoGroup = v1.createElement(v12, {
            LayoutOrder = 2
        }),
        RecordingButtonContainer = v1.createElement(l_Pane_0, {
            LayoutOrder = 3,
            Style = "CornerBox",
            Size = UDim2.fromOffset(l_Stylizer_0.UIGroupWidthPx, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            Layout = Enum.FillDirection.Vertical,
            Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
            Padding = l_Stylizer_0.PaddingPx,
            HorizontalAlignment = Enum.HorizontalAlignment.Center,
            VerticalAlignment = Enum.VerticalAlignment.Top
        }, {
            Button = v1.createElement(l_Button_0, {
                Size = l_Stylizer_0.PrimaryButtonSize,
                LayoutOrder = 1,
                Style = "RoundPrimaryRecordButton",
                StyleModifier = v35,
                Text = v34,
                OnClick = v28.onRecordingButtonClicked
            }, {
                v1.createElement(l_HoverArea_0, {
                    Cursor = "PointingHand"
                })
            }),
            StatusTextLabel = v1.createElement(l_TextLabel_0, {
                Text = v33,
                Size = UDim2.fromScale(1, 0),
                AutomaticSize = Enum.AutomaticSize.Y,
                LayoutOrder = 2,
                Style = "StatusTextLabel",
                TextXAlignment = Enum.TextXAlignment.Left,
                TextYAlignment = Enum.TextYAlignment.Top
            })
        }),
        ChooseRecordingNamePopUp = l_state_0.SaveRecordingDialogVisible and v1.createElement(v13, {
            DefaultInputValue = l_Localization_0:getText("RecordTabView", "DefaultRecordingName"),
            OnSaveButtonPressed = v28.onSaveRecordingDialogSave,
            OnCancelButtonPressed = v28.onSaveRecordingDialogCancel,
            MessageLocalizationKey = l_state_0.SaveRecordingDialogMessageLocalizationKey,
            MessageLocalizationArgs = l_state_0.SaveRecordingDialogMessageLocalizationArgs
        })
    });
end;
return v2.connect(function(v37, _)
    return {
        PluginState = v37.common.pluginState
    };
end, function(v39)
    return {
        SetCurrentScreenSize = function(v40)
            v39(v16(v40));
        end,
        SetEmulationDeviceId = function(v41)
            v39(v17(v41));
        end,
        SetEmulationDeviceOrientation = function(v42)
            v39(v18(v42));
        end,
        SetPluginState = function(v43)
            v39(v19(v43));
        end
    };
end)((l_ContextServices_0.withContext({
    Plugin = l_ContextServices_0.Plugin,
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v20)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.RoactRodux);
local v3 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v3.ContextServices;
local l_UI_0 = v3.UI;
local l_TextLabel_0 = l_UI_0.TextLabel;
local l_SelectInput_0 = l_UI_0.SelectInput;
local l_Pane_0 = l_UI_0.Pane;
local v9 = require(l_Parent_0.Src.Util.Enums);
local v10 = require(l_Parent_0.Src.Util.DMBridge);
local v11 = require(l_Parent_0.Src.Actions.Common.SetPluginState);
local v12 = v1.PureComponent:extend("RecordingFileSelector");
local l_UserInputPlaybackPluginFixRecordingFileSelectorNotUpdating_0 = game:GetFastFlag("UserInputPlaybackPluginFixRecordingFileSelectorNotUpdating");
v12.init = function(v14)
    v14.state = {
        playbackFileNameOptions = {},
        selectedRecordingIndex = nil
    };
    v14.DEPRECATED_updatePlaybackFileNameOptions = function(_, v16)
        if v16.UserInputType == Enum.UserInputType.MouseButton1 and v16.UserInputState == Enum.UserInputState.Begin then
            v10.searchForUserInputRecordings();
        end;
    end;
    v14.setPlayableRecordings = function(v17)
        v14:setState({
            playbackFileNameOptions = v17
        });
    end;
    v14.loadRecordingIndex = function(v18)
        local l_playbackFileNameOptions_0 = v14.state.playbackFileNameOptions;
        assert(l_playbackFileNameOptions_0);
        local v20 = l_playbackFileNameOptions_0[v18];
        assert(v20);
        v10.loadRecordingWithName(v20);
    end;
    v14.onSelectInputItemActivated = function(v21, v22)
        local l_props_0 = v14.props;
        if l_props_0.PluginState ~= v9.PluginState.Playing and l_props_0.PluginState ~= v9.PluginState.Disabled then
            v14:setState({
                selectedRecordingIndex = v22
            });
            l_props_0.OnCanStartPlaying(true);
            v10.loadRecordingWithName(v21);
        end;
    end;
    v14.onMouseEnter = function(_, _)
        v10.searchForUserInputRecordings();
    end;
end;
v12.didMount = function(v26)
    v10.connectSetPlayableRecordingsCallback(v26.setPlayableRecordings);
end;
v12.willUnmount = function(v27)
    v10.disconnectSetPlayableRecordingsCallback();
    v27.props.SetPluginState(v9.PluginState.Default);
end;
v12.render = function(v28)
    local l_props_1 = v28.props;
    local l_state_0 = v28.state;
    local l_Localization_0 = l_props_1.Localization;
    local l_Stylizer_0 = l_props_1.Stylizer;
    return v1.createElement(l_Pane_0, {
        Size = UDim2.fromScale(1, 0),
        AutomaticSize = Enum.AutomaticSize.Y,
        LayoutOrder = 1,
        BackgroundTransparency = 1,
        Layout = Enum.FillDirection.Horizontal,
        Spacing = UDim.new(0, l_Stylizer_0.PaddingPx),
        VerticalAlignment = Enum.VerticalAlignment.Center,
        [v1.Event.InputBegan] = if not l_UserInputPlaybackPluginFixRecordingFileSelectorNotUpdating_0 then v28.DEPRECATED_updatePlaybackFileNameOptions else nil,
        [v1.Event.MouseEnter] = if not l_UserInputPlaybackPluginFixRecordingFileSelectorNotUpdating_0 then nil else v28.onMouseEnter
    }, {
        Label = v1.createElement(l_TextLabel_0, {
            Text = l_Localization_0:getText("PlaybackTabView", "PlayFileLabel"),
            AutomaticSize = Enum.AutomaticSize.XY,
            LayoutOrder = -1,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Center
        }),
        Input = v1.createElement(l_SelectInput_0, {
            Style = l_Stylizer_0.PlaybackSelectInput,
            Items = l_state_0.playbackFileNameOptions,
            PlaceholderText = l_Localization_0:getText("PlaybackTabView", "SelectInputDefaultText"),
            SelectedIndex = l_state_0.selectedRecordingIndex,
            OnItemActivated = v28.onSelectInputItemActivated
        })
    });
end;
return v2.connect(function(v33, _)
    return {
        ShouldSetEmulationDevice = v33.playbackTab.shouldSetEmulationDevice,
        PluginState = v33.common.pluginState
    };
end, function(v35)
    return {
        SetPluginState = function(v36)
            v35(v11(v36));
        end
    };
end)((l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v12)));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v2.ContextServices;
local v4 = game:getFastFlag("UserInputPlaybackPluginFixTabInitiallySelected");
local l_UI_0 = v2.UI;
local l_Tabs_0 = l_UI_0.Tabs;
local v7 = v1.PureComponent:extend("TabbedView");
v7.init = function(v8)
    local l_props_0 = v8.props;
    assert(l_props_0.Tabs);
    assert(#l_props_0.Tabs >= 1);
    v8.state = {
        selectedTab = l_props_0.InitialTab or l_props_0.Tabs[1]
    };
    v8.onTabSelected = function(v10)
        v8:setState({
            selectedTab = v10
        });
    end;
end;
v7.render = function(v11)
    local l_props_1 = v11.props;
    local l_state_0 = v11.state;
    local l_Stylizer_0 = l_props_1.Stylizer;
    return v1.createElement(l_UI_0.Pane, {
        Size = UDim2.new(1, 0, 1, 0),
        Layout = Enum.FillDirection.Vertical,
        HorizontalAlignment = Enum.HorizontalAlignment.Left,
        VerticalAlignment = Enum.VerticalAlignment.Top
    }, {
        TabBar = v1.createElement(l_UI_0.Pane, {
            Style = "Box",
            BackgroundColor = l_Stylizer_0.TabBarBackgroundColor,
            Size = UDim2.fromScale(1, 0),
            AutomaticSize = Enum.AutomaticSize.Y
        }, {
            Tabs = v1.createElement(l_Tabs_0, {
                Tabs = l_props_1.Tabs,
                SelectedTab = if not v4 then l_state_0.selectedTab else l_state_0.selectedTab.Key,
                OnTabSelected = v11.onTabSelected
            })
        }),
        TabContent = v1.createElement(l_UI_0.Pane, {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundColor3 = l_Stylizer_0.ForegroundTabColor
        }, {
            TabView = v1.createElement(l_state_0.selectedTab.ContentComponent)
        })
    });
end;
return (l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer
})(v7));


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Roact);
local v2 = require(l_Parent_0.Packages.Framework);
local l_ContextServices_0 = v2.ContextServices;
local l_TextLabel_0 = v2.UI.TextLabel;
local v5 = v1.PureComponent:extend("UIKeyValueTextLabel");
v5.render = function(v6)
    local l_props_0 = v6.props;
    local l_Stylizer_0 = l_props_0.Stylizer;
    return v1.createElement("Frame", {
        Size = UDim2.new(1, 0, 0, l_Stylizer_0.HeightPx),
        BackgroundTransparency = 1,
        LayoutOrder = l_props_0.LayoutOrder
    }, {
        Layout = v1.createElement("UIListLayout", {
            FillDirection = Enum.FillDirection.Horizontal,
            Padding = UDim.new(0, l_Stylizer_0.PaddingPx),
            SortOrder = Enum.SortOrder.LayoutOrder,
            VerticalAlignment = Enum.VerticalAlignment.Center
        }),
        KeyTextLabel = v1.createElement(l_TextLabel_0, {
            Text = l_props_0.Label .. ":",
            Size = UDim2.new(0, l_Stylizer_0.KeyWidthPx, 1, 0),
            TextXAlignment = Enum.TextXAlignment.Right,
            TextYAlignment = Enum.TextYAlignment.Center,
            LayoutOrder = 1
        }),
        ValueTextLabel = v1.createElement(l_TextLabel_0, {
            Text = l_props_0.Value,
            Size = UDim2.new(1, -l_Stylizer_0.KeyWidthPx, 1, 0),
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Center,
            LayoutOrder = 2
        })
    });
end;
return (l_ContextServices_0.withContext({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization
})(v5));


local l_StudioFixPluginWidgetLocalizedIds_0 = game:GetFastFlag("StudioFixPluginWidgetLocalizedIds");
local l_Parent_0 = script.Parent.Parent;
local v2 = require(l_Parent_0.Packages.Roact);
local v3 = require(l_Parent_0.Packages.Rodux);
local v4 = require(l_Parent_0.Packages.Framework);
local l_UI_0 = v4.UI;
local l_DockWidget_0 = l_UI_0.DockWidget;
local l_PluginButton_0 = l_UI_0.PluginButton;
local l_PluginToolbar_0 = l_UI_0.PluginToolbar;
local l_ContextServices_0 = v4.ContextServices;
local l_Plugin_0 = l_ContextServices_0.Plugin;
local l_Mouse_0 = l_ContextServices_0.Mouse;
local l_Store_0 = l_ContextServices_0.Store;
local v13 = require(l_Parent_0.Src.Reducers.MainReducer);
local v14 = require(l_Parent_0.Src.Resources.MakeTheme);
local l_SourceStrings_0 = l_Parent_0.Src.Resources.Localization.SourceStrings;
local l_LocalizedStrings_0 = l_Parent_0.Src.Resources.Localization.LocalizedStrings;
local v17 = require(l_Parent_0.Src.Components.MainView);
local v18 = require(l_Parent_0.Src.Util.DMBridge);
local v19 = require(l_Parent_0.Src.Util.Enums);
local v20 = v2.PureComponent:extend("MainPlugin");
v20.init = function(v21, _)
    v21.state = {
        enabled = false
    };
    v18.setPluginEnabled(false);
    v21.toggleEnabled = function()
        v21:setState(function(v23)
            return {
                enabled = not v23.enabled
            };
        end);
    end;
    v21.onClose = function()
        v21:setState({
            enabled = false
        });
    end;
    v21.onRestore = function(v24)
        v21:setState({
            enabled = v24
        });
    end;
    v21.onWidgetEnabledChanged = function(v25)
        v21:setState({
            enabled = v25.Enabled
        });
    end;
    v21.store = v3.Store.new(v13, nil, {
        v3.thunkMiddleware
    }, nil);
    v21.roduxStateChangedConnection = v21.store.changed:connect(function(v26, _)
        v18.setRoduxState(v26);
    end);
    v21.localization = l_ContextServices_0.Localization.new({
        stringResourceTable = l_SourceStrings_0,
        translationResourceTable = l_LocalizedStrings_0,
        pluginName = "UserInputPlayback"
    });
    v21.analytics = l_ContextServices_0.Analytics.new(function()
        return {};
    end, {});
end;
v20.renderButtons = function(v28, v29)
    return {
        Toggle = v2.createElement(l_PluginButton_0, {
            Toolbar = v29,
            Active = v28.state.enabled,
            Title = v28.localization:getText("Plugin", "Button"),
            Tooltip = v28.localization:getText("Plugin", "Description"),
            Icon = "rbxasset://textures/GameSettings/ToolbarIcon.png",
            OnClick = v28.toggleEnabled,
            ClickableWhenViewportHidden = true
        })
    };
end;
v20.didMount = function(_)
    v18.setPluginState(v19.PluginState.Default);
end;
v20.didUpdate = function(v31, _, _)
    v18.setPluginEnabled(v31.state.enabled);
end;
v20.willUnmount = function(v34)
    if v34.roduxStateChangedConnection then
        v34.roduxStateChangedConnection.disconnect();
    end;
end;
v20.render = function(v35)
    local l_props_0 = v35.props;
    local l_state_0 = v35.state;
    local l_Plugin_1 = l_props_0.Plugin;
    local l_enabled_0 = l_state_0.enabled;
    return l_ContextServices_0.provide({
        l_Plugin_0.new(l_Plugin_1),
        l_Store_0.new(v35.store),
        l_Mouse_0.new(l_Plugin_1:getMouse()),
        v14(),
        v35.localization,
        v35.analytics
    }, {
        Toolbar = v2.createElement(l_PluginToolbar_0, {
            Title = v35.localization:getText("Plugin", "Toolbar"),
            RenderButtons = function(v40)
                return v35:renderButtons(v40);
            end
        }),
        MainWidget = v2.createElement(l_DockWidget_0, {
            Id = if not l_StudioFixPluginWidgetLocalizedIds_0 then nil else "UserInputPlayback",
            Enabled = l_enabled_0,
            Title = v35.localization:getText("Plugin", "Name"),
            ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
            InitialDockState = Enum.InitialDockState.Bottom,
            Size = Vector2.new(360, 480),
            MinSize = Vector2.new(360, 200),
            OnClose = v35.onClose,
            ShouldRestore = true,
            OnWidgetRestored = v35.onRestore,
            [v2.Change.Enabled] = v35.onWidgetEnabledChanged
        }, {
            MainView = l_enabled_0 and v2.createElement(v17)
        })
    });
end;
return v20;


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Rodux);
local l_join_0 = require(l_Parent_0.Packages.Cryo).Dictionary.join;
local _ = require(l_Parent_0.Src.Types);
local v4 = require(l_Parent_0.Src.Util.Enums);
local _ = require(l_Parent_0.Src.Actions.Common.SetPluginState);
return v1.createReducer({
    pluginState = v4.PluginState.Default
}, {
    SetPluginState = function(v6, v7)
        return l_join_0(v6, {
            pluginState = v7.state
        });
    end
});


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Rodux);
local l_join_0 = require(l_Parent_0.Packages.Cryo).Dictionary.join;
local _ = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetGamepadEnabled);
local _ = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetKeyboardEnabled);
local _ = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetMouseClickEnabled);
local _ = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetMouseMoveEnabled);
local _ = require(l_Parent_0.Src.Actions.EventTypeEnabled.SetTouchEnabled);
local v8 = {
    mouseMove = true,
    mouseClick = true,
    keyboard = true,
    gamepad = true,
    touch = true
};
local function v19()
    return v1.createReducer(v8, {
        SetGamepadEnabled = function(v9, v10)
            return l_join_0(v9, {
                gamepad = v10.gamepadEnabled
            });
        end,
        SetKeyboardEnabled = function(v11, v12)
            return l_join_0(v11, {
                keyboard = v12.keyboardEnabled
            });
        end,
        SetMouseClickEnabled = function(v13, v14)
            return l_join_0(v13, {
                mouseClick = v14.mouseClickEnabled
            });
        end,
        SetMouseMoveEnabled = function(v15, v16)
            return l_join_0(v15, {
                mouseMove = v16.mouseMoveEnabled
            });
        end,
        SetTouchEnabled = function(v17, v18)
            return l_join_0(v17, {
                touch = v18.touchEnabled
            });
        end
    });
end;
local function _(v20, v21)
    return function(v22, v23)
        if not (v22 ~= nil) or v23.context == v21 then
            return v20(v22, v23);
        else
            return v22;
        end;
    end;
end;
return {
    makeReducerForName = function(v25)
        local v26 = v19();
        return function(v27, v28)
            if not (v27 ~= nil) or v28.context == v25 then
                return v26(v27, v28);
            else
                return v27;
            end;
        end;
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Packages.Rodux);
local v2 = require(l_Parent_0.Src.Reducers.RecordTabReducer);
local v3 = require(l_Parent_0.Src.Reducers.PlaybackTabReducer);
local v4 = require(l_Parent_0.Src.Reducers.EventTypeEnabledReducer);
return (v1.combineReducers({
    recordTab = v2,
    recordTabFilter = v4.makeReducerForName("recordTabFilter"),
    playbackTab = v3,
    playbackTabFilter = v4.makeReducerForName("playbackTabFilter"),
    common = require(l_Parent_0.Src.Reducers.CommonReducer)
}));