diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index dc667e803..53c0783f8 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
- majorVersion: '1.35.0'
+ majorVersion: '1.30.1'
minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
@@ -19,7 +19,7 @@ variables:
nodeVersion: '20.X'
innoVersion: '6.2.2'
windowsImage: 'windows-2022'
- linuxImage: 'ubuntu-22.04'
+ linuxImage: 'ubuntu-20.04'
macImage: 'macOS-13'
trigger:
diff --git a/docs.sh b/docs.sh
index 38b0e0fbc..ccfde87a7 100755
--- a/docs.sh
+++ b/docs.sh
@@ -3,16 +3,15 @@ set -e
FRAMEWORK="net6.0"
PLATFORM=$1
-ARCHITECTURE="${2:-x64}"
if [ "$PLATFORM" = "Windows" ]; then
- RUNTIME="win-$ARCHITECTURE"
+ RUNTIME="win-x64"
elif [ "$PLATFORM" = "Linux" ]; then
- RUNTIME="linux-$ARCHITECTURE"
+ RUNTIME="linux-x64"
elif [ "$PLATFORM" = "Mac" ]; then
- RUNTIME="osx-$ARCHITECTURE"
+ RUNTIME="osx-x64"
else
- echo "Platform must be provided as first argument: Windows, Linux or Mac"
+ echo "Platform must be provided as first arguement: Windows, Linux or Mac"
exit 1
fi
@@ -38,7 +37,7 @@ dotnet clean $slnFile -c Release
dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
dotnet new tool-manifest
-dotnet tool install --version 7.3.2 Swashbuckle.AspNetCore.Cli
+dotnet tool install --version 6.6.2 Swashbuckle.AspNetCore.Cli
dotnet tool run swagger tofile --output ./src/Prowlarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 &
diff --git a/frontend/src/Components/Form/EnhancedSelectInput.js b/frontend/src/Components/Form/EnhancedSelectInput.js
index 79b1c999c..732e10f37 100644
--- a/frontend/src/Components/Form/EnhancedSelectInput.js
+++ b/frontend/src/Components/Form/EnhancedSelectInput.js
@@ -20,8 +20,6 @@ import HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue';
import TextInput from './TextInput';
import styles from './EnhancedSelectInput.css';
-const MINIMUM_DISTANCE_FROM_EDGE = 10;
-
function isArrowKey(keyCode) {
return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW;
}
@@ -139,9 +137,18 @@ class EnhancedSelectInput extends Component {
// Listeners
onComputeMaxHeight = (data) => {
+ const {
+ top,
+ bottom
+ } = data.offsets.reference;
+
const windowHeight = window.innerHeight;
- data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE;
+ if ((/^botton/).test(data.placement)) {
+ data.styles.maxHeight = windowHeight - bottom;
+ } else {
+ data.styles.maxHeight = top;
+ }
return data;
};
@@ -453,10 +460,6 @@ class EnhancedSelectInput extends Component {
order: 851,
enabled: true,
fn: this.onComputeMaxHeight
- },
- preventOverflow: {
- enabled: true,
- boundariesElement: 'viewport'
}
}}
>
diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css
index 409062f97..5e3e3b52c 100644
--- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css
+++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css
@@ -24,7 +24,6 @@
composes: link;
padding: 10px 24px;
- padding-left: 35px;
}
.isActiveLink {
@@ -42,6 +41,10 @@
text-align: center;
}
+.noIcon {
+ margin-left: 25px;
+}
+
.status {
float: right;
}
diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts
index 5bf0eb815..77e23c767 100644
--- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts
+++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts
@@ -8,6 +8,7 @@ interface CssExports {
'isActiveParentLink': string;
'item': string;
'link': string;
+ 'noIcon': string;
'status': string;
}
export const cssExports: CssExports;
diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.js b/frontend/src/Components/Page/Sidebar/PageSidebarItem.js
index 8d0e4e790..754071c79 100644
--- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.js
+++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.js
@@ -63,7 +63,9 @@ class PageSidebarItem extends Component {
}
- {typeof title === 'function' ? title() : title}
+
+ {typeof title === 'function' ? title() : title}
+
{
!!StatusComponent &&
diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarButton.css b/frontend/src/Components/Page/Toolbar/PageToolbarButton.css
index e9a1b666d..0b6918296 100644
--- a/frontend/src/Components/Page/Toolbar/PageToolbarButton.css
+++ b/frontend/src/Components/Page/Toolbar/PageToolbarButton.css
@@ -22,14 +22,11 @@
display: flex;
align-items: center;
justify-content: center;
- overflow: hidden;
height: 24px;
}
.label {
padding: 0 3px;
- max-width: 100%;
- max-height: 100%;
color: var(--toolbarLabelColor);
font-size: $extraSmallFontSize;
line-height: calc($extraSmallFontSize + 1px);
diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarButton.js b/frontend/src/Components/Page/Toolbar/PageToolbarButton.js
index 675bdfd02..c93603aa9 100644
--- a/frontend/src/Components/Page/Toolbar/PageToolbarButton.js
+++ b/frontend/src/Components/Page/Toolbar/PageToolbarButton.js
@@ -23,7 +23,6 @@ function PageToolbarButton(props) {
isDisabled && styles.isDisabled
)}
isDisabled={isDisabled || isSpinning}
- title={label}
{...otherProps}
>
<_UsingDefaultRuntimeIdentifier>true
- osx-$(Architecture)
+ osx-x64
diff --git a/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj b/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj
index 78c8b7d0f..bb0b5fcc4 100644
--- a/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj
+++ b/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj
@@ -4,7 +4,7 @@
-
+
diff --git a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs
index 9e2b31d87..857834d3f 100644
--- a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs
+++ b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs
@@ -30,7 +30,6 @@ namespace NzbDrone.Common.Test.InstrumentationTests
[TestCase(@"https://anthelion.me/api.php?api_key=2b51db35e1910123321025a12b9933d2&o=json&t=movie&q=&tmdb=&imdb=&cat=&limit=100&offset=0")]
[TestCase(@"https://avistaz.to/api/v1/jackett/auth: username=mySecret&password=mySecret&pid=mySecret")]
[TestCase(@"https://www.sharewood.tv/api/2b51db35e1910123321025a12b9933d2/last-torrents")]
- [TestCase(@"https://example.org/rss/torrents?rsskey=2b51db35e1910123321025a12b9933d2&search=")]
// Indexer and Download Client Responses
diff --git a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs
index 393d6613a..e4b4384b2 100644
--- a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs
+++ b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs
@@ -10,7 +10,7 @@ namespace NzbDrone.Common.Instrumentation
private static readonly Regex[] CleansingRules =
{
// Url
- new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|rsskey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
+ new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=[?& ;])[^=]*?(_?(?[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"rss(24h)?\.torrentleech\.org/(?!rss)(?[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"torrentleech\.org/rss/download/[0-9]+/(?[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
diff --git a/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs
deleted file mode 100644
index f110b96ac..000000000
--- a/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System.Text;
-using NLog;
-using NLog.Layouts.ClefJsonLayout;
-using NzbDrone.Common.EnvironmentInfo;
-
-namespace NzbDrone.Common.Instrumentation;
-
-public class CleansingClefLogLayout : CompactJsonLayout
-{
- protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
- {
- base.RenderFormattedMessage(logEvent, target);
-
- if (RuntimeInfo.IsProduction)
- {
- var result = CleanseLogMessage.Cleanse(target.ToString());
- target.Clear();
- target.Append(result);
- }
- }
-}
diff --git a/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs
deleted file mode 100644
index f894a4df5..000000000
--- a/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Text;
-using NLog;
-using NLog.Layouts;
-using NzbDrone.Common.EnvironmentInfo;
-
-namespace NzbDrone.Common.Instrumentation;
-
-public class CleansingConsoleLogLayout : SimpleLayout
-{
- public CleansingConsoleLogLayout(string format)
- : base(format)
- {
- }
-
- protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
- {
- base.RenderFormattedMessage(logEvent, target);
-
- if (RuntimeInfo.IsProduction)
- {
- var result = CleanseLogMessage.Cleanse(target.ToString());
- target.Clear();
- target.Append(result);
- }
- }
-}
diff --git a/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs
similarity index 87%
rename from src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs
rename to src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs
index f74d1fca4..84658cf74 100644
--- a/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs
+++ b/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs
@@ -4,7 +4,7 @@ using NLog.Targets;
namespace NzbDrone.Common.Instrumentation
{
- public class CleansingFileTarget : FileTarget
+ public class NzbDroneFileTarget : FileTarget
{
protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
{
diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs
index d9fdd5b25..80793e812 100644
--- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs
+++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs
@@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO;
using NLog;
using NLog.Config;
+using NLog.Layouts.ClefJsonLayout;
using NLog.Targets;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions;
@@ -12,11 +13,9 @@ namespace NzbDrone.Common.Instrumentation
{
public static class NzbDroneLogger
{
- private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
- private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
-
- private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new (ConsoleFormat);
- private static readonly CleansingClefLogLayout ClefLogLayout = new ();
+ private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
+ public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
+ public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout();
private static bool _isConfigured;
@@ -120,7 +119,11 @@ namespace NzbDrone.Common.Instrumentation
? formatEnumValue
: ConsoleLogFormat.Standard;
- ConfigureConsoleLayout(coloredConsoleTarget, logFormat);
+ coloredConsoleTarget.Layout = logFormat switch
+ {
+ ConsoleLogFormat.Clef => ClefLogLayout,
+ _ => ConsoleLogLayout
+ };
var loggingRule = new LoggingRule("*", level, coloredConsoleTarget);
@@ -137,7 +140,7 @@ namespace NzbDrone.Common.Instrumentation
private static void RegisterAppFile(IAppFolderInfo appFolderInfo, string name, string fileName, int maxArchiveFiles, LogLevel minLogLevel)
{
- var fileTarget = new CleansingFileTarget();
+ var fileTarget = new NzbDroneFileTarget();
fileTarget.Name = name;
fileTarget.FileName = Path.Combine(appFolderInfo.GetLogFolder(), fileName);
@@ -150,7 +153,7 @@ namespace NzbDrone.Common.Instrumentation
fileTarget.MaxArchiveFiles = maxArchiveFiles;
fileTarget.EnableFileDelete = true;
fileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling;
- fileTarget.Layout = FileLogLayout;
+ fileTarget.Layout = FILE_LOG_LAYOUT;
var loggingRule = new LoggingRule("*", minLogLevel, fileTarget);
@@ -169,7 +172,7 @@ namespace NzbDrone.Common.Instrumentation
fileTarget.ConcurrentWrites = false;
fileTarget.ConcurrentWriteAttemptDelay = 50;
fileTarget.ConcurrentWriteAttempts = 100;
- fileTarget.Layout = FileLogLayout;
+ fileTarget.Layout = FILE_LOG_LAYOUT;
var loggingRule = new LoggingRule("*", LogLevel.Trace, fileTarget);
@@ -214,15 +217,6 @@ namespace NzbDrone.Common.Instrumentation
{
return GetLogger(obj.GetType());
}
-
- public static void ConfigureConsoleLayout(ColoredConsoleTarget target, ConsoleLogFormat format)
- {
- target.Layout = format switch
- {
- ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout,
- _ => NzbDroneLogger.CleansingConsoleLayout
- };
- }
}
public enum ConsoleLogFormat
diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs
index c68207a09..4947e7080 100644
--- a/src/NzbDrone.Common/Processes/ProcessProvider.cs
+++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs
@@ -6,7 +6,6 @@ using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
-using System.Text;
using NLog;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Model;
@@ -118,9 +117,7 @@ namespace NzbDrone.Common.Processes
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
- RedirectStandardInput = true,
- StandardOutputEncoding = Encoding.UTF8,
- StandardErrorEncoding = Encoding.UTF8
+ RedirectStandardInput = true
};
if (environmentVariables != null)
diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj
index 106890399..359fa8820 100644
--- a/src/NzbDrone.Common/Prowlarr.Common.csproj
+++ b/src/NzbDrone.Common/Prowlarr.Common.csproj
@@ -5,21 +5,21 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
diff --git a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs
index b6f06d180..3699a9d0c 100644
--- a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs
+++ b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests
torrentInfo.InfoUrl.Should().Be("https://filelist.io/details.php?id=665873");
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
- torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 19:20:19"));
+ torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 20:20:19"));
torrentInfo.Size.Should().Be(8300512414);
torrentInfo.InfoHash.Should().Be(null);
torrentInfo.MagnetUrl.Should().Be(null);
diff --git a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs
index 06326d162..39d628d79 100644
--- a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs
+++ b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs
@@ -26,15 +26,15 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
[SetUp]
public void Setup()
{
- Subject.Definition = new IndexerDefinition
+ Subject.Definition = new IndexerDefinition()
{
Name = "HdBits",
- Settings = new HDBitsSettings { ApiKey = "fakekey" }
+ Settings = new HDBitsSettings() { ApiKey = "fakekey" }
};
_movieSearchCriteria = new MovieSearchCriteria
{
- Categories = new[] { 2000, 2010 },
+ Categories = new int[] { 2000, 2010 },
ImdbId = "0076759"
};
}
@@ -52,7 +52,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
var torrents = (await Subject.Fetch(_movieSearchCriteria)).Releases;
torrents.Should().HaveCount(2);
- torrents.First().Should().BeOfType();
+ torrents.First().Should().BeOfType();
var first = torrents.First() as TorrentInfo;
diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs
index f4715b203..b9f4f23d2 100644
--- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs
+++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs
@@ -274,7 +274,7 @@ namespace NzbDrone.Core.Configuration
{
var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
- if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase))
+ if (instanceName.ContainsIgnoreCase(BuildInfo.AppName))
{
return instanceName;
}
diff --git a/src/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs
index 796e277b7..dc76a5a31 100644
--- a/src/NzbDrone.Core/Datastore/BasicRepository.cs
+++ b/src/NzbDrone.Core/Datastore/BasicRepository.cs
@@ -254,7 +254,7 @@ namespace NzbDrone.Core.Datastore
protected void Delete(SqlBuilder builder)
{
- var sql = builder.AddDeleteTemplate(typeof(TModel));
+ var sql = builder.AddDeleteTemplate(typeof(TModel)).LogQuery();
using (var conn = _database.OpenConnection())
{
diff --git a/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs b/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs
deleted file mode 100644
index 5a93488d5..000000000
--- a/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System.Collections.Generic;
-using System.Data;
-using Dapper;
-using FluentMigrator;
-using Newtonsoft.Json.Linq;
-using NzbDrone.Common.Serializer;
-using NzbDrone.Core.Datastore.Migration.Framework;
-
-namespace NzbDrone.Core.Datastore.Migration
-{
- [Migration(042)]
- public class myanonamouse_freeleech_wedge_options : NzbDroneMigrationBase
- {
- protected override void MainDbUpgrade()
- {
- Execute.WithConnection(MigrateIndexersToWedgeOptions);
- }
-
- private void MigrateIndexersToWedgeOptions(IDbConnection conn, IDbTransaction tran)
- {
- var updated = new List