public void OnGUI()
        {
            GUILayout.BeginVertical("box");
            GUILayout.BeginHorizontal();
            bool oldUseCustomDataPath = m_UseCustomDataPath;

            m_UseCustomDataPath = EditorGUILayout.Toggle(m_UseCustomDataPathContent, m_UseCustomDataPath);
            if (oldUseCustomDataPath != m_UseCustomDataPath)
            {
                EditorPrefs.SetBool(k_UseCustomDataPathKey, m_UseCustomDataPath);
            }
            if (GUILayout.Button("Open Folder"))
            {
                EditorUtility.RevealInFinder(m_DataPath);
            }
            GUILayout.EndHorizontal();

            if (!m_UseCustomDataPath)
            {
                m_DataPath = Application.persistentDataPath;
            }
            else
            {
                string oldDataPath = m_DataPath;
                m_DataPath = EditorGUILayout.TextField(m_DataPathContent, m_DataPath);
                if (string.IsNullOrEmpty(m_DataPath))
                {
                    m_DataPath = Application.persistentDataPath;
                }
                if (oldDataPath != m_DataPath)
                {
                    EditorPrefs.SetString(k_DataPathKey, m_DataPath);
                }
            }

            m_Aggregator.SetDataPath(m_DataPath);

            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(m_DatesContent, GUILayout.Width(35));
            m_StartDate = EditorGUILayout.TextField(m_StartDate);
            EditorGUILayout.LabelField("-", GUILayout.Width(10));
            m_EndDate = EditorGUILayout.TextField(m_EndDate);
            GUILayout.EndHorizontal();


            // SMOOTHERS (SPACE, ROTATION, TIME)
            GUILayout.BeginVertical("box");
            GUILayout.Label("Smooth/Unionize", EditorStyles.boldLabel);
            GUILayout.BeginHorizontal();
            // SPACE
            SmootherControl(ref m_SmoothSpaceToggle, ref m_Space, "Space", "Divider to smooth out x/y/z data", k_SmoothSpaceKey, k_SpaceKey, 2);
            // ROTATION
            SmootherControl(ref m_SmoothRotationToggle, ref m_Rotation, "Rotation", "Divider to smooth out angular data", k_SmoothRotationKey, k_RotationKey);
            // TIME
            SmootherControl(ref m_SmoothTimeToggle, ref m_Time, "Time", "Divider to smooth out passage of game time", k_SmoothTimeKey, k_KeyToTime);
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();

            // SEPARATION
            GUILayout.Label("Separate", EditorStyles.boldLabel);
            GUILayout.BeginHorizontal();
            GroupControl(ref m_SeparateUsers,
                         "Users", "Separate each user into their own list. NOTE: Separating user IDs can be quite slow!",
                         k_SeparateUsersKey);
            GroupControl(ref m_SeparateSessions,
                         "Sessions", "Separate each session into its own list. NOTE: Separating unique sessions can be astonishly slow!",
                         k_SeparateSessionKey);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GroupControl(ref m_SeparateDebug,
                         "Is Debug", "Separate debug devices from non-debug devices",
                         k_SeparateDebugKey);
            GroupControl(ref m_SeparatePlatform,
                         "Platform", "Separate data based on platform",
                         k_SeparatePlatformKey);
            GUILayout.EndHorizontal();


            GroupControl(ref m_SeparateCustomField,
                         "On Custom Field", "Separate based on one or more parameter fields",
                         k_SeparateCustomKey);


            if (m_SeparateCustomField)
            {
                string oldArbitraryFieldsString = string.Join("|", m_ArbitraryFields.ToArray());
                if (m_ArbitraryFields.Count == 0)
                {
                    m_ArbitraryFields.Add("Field name");
                }
                for (var a = 0; a < m_ArbitraryFields.Count; a++)
                {
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("-", GUILayout.MaxWidth(20f)))
                    {
                        m_ArbitraryFields.RemoveAt(a);
                        break;
                    }
                    m_ArbitraryFields[a] = EditorGUILayout.TextField(m_ArbitraryFields[a]);
                    if (a == m_ArbitraryFields.Count - 1 && GUILayout.Button(m_AddFieldContent))
                    {
                        m_ArbitraryFields.Add("Field name");
                    }
                    GUILayout.EndHorizontal();
                }
                string currentArbitraryFieldsString = string.Join("|", m_ArbitraryFields.ToArray());
                if (oldArbitraryFieldsString != currentArbitraryFieldsString)
                {
                    EditorPrefs.SetString(k_ArbitraryFieldsKey, currentArbitraryFieldsString);
                }
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical("Box");
            bool oldRemapColor = m_RemapColor;

            m_RemapColor = EditorGUILayout.Toggle(m_RemapColorContent, m_RemapColor);
            if (oldRemapColor != m_RemapColor)
            {
                EditorPrefs.SetBool(k_RemapColorKey, m_RemapColor);
            }
            if (m_RemapColor)
            {
                string oldRemapField  = m_RemapColorField;
                int    oldOptionIndex = m_RemapOptionIndex;
                m_RemapColorField  = EditorGUILayout.TextField(m_RemapColorFieldContent, m_RemapColorField);
                m_RemapOptionIndex = EditorGUILayout.Popup(m_RemapOptionIndexContent, m_RemapOptionIndex, m_RemapOptions);

                if (m_RemapOptionIds[m_RemapOptionIndex] == AggregationMethod.Percentile)
                {
                    m_Percentile = Mathf.Clamp(EditorGUILayout.FloatField(m_PercentileContent, m_Percentile), 0, 100f);
                }
                if (oldRemapField != m_RemapColorField)
                {
                    EditorPrefs.SetString(k_RemapColorFieldKey, m_RemapColorField);
                }
                if (oldOptionIndex != m_RemapOptionIndex)
                {
                    EditorPrefs.SetInt(k_RemapOptionIndexKey, m_RemapOptionIndex);
                }
            }
            GUILayout.EndVertical();
        }