I-Synergy.Framework.AspNetCore 2026.10110.10203

Prefix Reserved
dotnet add package I-Synergy.Framework.AspNetCore --version 2026.10110.10203
                    
NuGet\Install-Package I-Synergy.Framework.AspNetCore -Version 2026.10110.10203
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I-Synergy.Framework.AspNetCore" Version="2026.10110.10203" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="I-Synergy.Framework.AspNetCore" Version="2026.10110.10203" />
                    
Directory.Packages.props
<PackageReference Include="I-Synergy.Framework.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add I-Synergy.Framework.AspNetCore --version 2026.10110.10203
                    
#r "nuget: I-Synergy.Framework.AspNetCore, 2026.10110.10203"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package I-Synergy.Framework.AspNetCore@2026.10110.10203
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=I-Synergy.Framework.AspNetCore&version=2026.10110.10203
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.AspNetCore&version=2026.10110.10203
                    
Install as a Cake Tool

I-Synergy Framework ASP.NET Core

A comprehensive ASP.NET Core integration library for .NET 10.0 applications, providing middleware, filters, extensions, and utilities for building modern web APIs and applications. This package includes OpenTelemetry integration, health checks, global exception handling, result pattern extensions, and more.

NuGet License .NET

Features

  • OpenTelemetry integration for distributed tracing, metrics, and logging
  • Global exception handling with ProblemDetails responses
  • Health check endpoints with detailed JSON responses
  • Result pattern extensions for converting Result<T> to IActionResult
  • Action filters for validation, caching, and request filtering
  • Model binders for custom DateTime parsing
  • HTTP extensions for request/response manipulation
  • JWT token service abstractions for authentication
  • CORS configuration with environment-aware options
  • Service locator integration for legacy scenarios
  • View model base classes for MVC applications

Installation

Install the package via NuGet:

dotnet add package I-Synergy.Framework.AspNetCore

Quick Start

1. Configure Services with OpenTelemetry

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.Core.Abstractions.Services;
using ISynergy.Framework.Core.Services;

var builder = WebApplication.CreateBuilder(args);

// Add info service for application metadata
builder.Services.AddSingleton<IInfoService>(new InfoService(
    productName: "My API",
    productVersion: new Version(1, 0, 0)));

// Configure OpenTelemetry
builder.Logging.AddTelemetry(
    builder,
    builder.Services.BuildServiceProvider().GetRequiredService<IInfoService>(),
    tracerProviderBuilder =>
    {
        // Add custom instrumentation
        tracerProviderBuilder.AddSource("MyApi");
    },
    meterProviderBuilder =>
    {
        // Add custom metrics
        meterProviderBuilder.AddMeter("MyApi");
    });

// Add controllers and services
builder.Services.AddControllers();
builder.Services.AddHealthChecks()
    .AddCheck("api", () => HealthCheckResult.Healthy());

var app = builder.Build();

// Configure middleware pipeline
app.UseExceptionHandler();
app.MapDefaultHealthEndpoints();
app.MapControllers();

app.Run();

2. Use Result Pattern in Controllers

using ISynergy.Framework.Core.Models.Results;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductService _productService;

    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetProduct(int id)
    {
        var result = await _productService.GetProductByIdAsync(id);

        // Convert Result<Product> to IActionResult
        return result.Match<Product, IActionResult>(
            value => value is not null ? Ok(value) : NoContent(),
            () => NotFound()
        );
    }

    [HttpPost]
    public async Task<IActionResult> CreateProduct([FromBody] ProductDto dto)
    {
        var result = await _productService.CreateProductAsync(dto);

        return result.Match<int, IActionResult>(
            id => CreatedAtAction(nameof(GetProduct), new { id }, id),
            () => BadRequest(result.ErrorMessage)
        );
    }

    [HttpGet]
    public async Task<IActionResult> GetProducts(
        [FromQuery] int pageIndex = 0,
        [FromQuery] int pageSize = 10)
    {
        var result = await _productService.GetProductsPagedAsync(pageIndex, pageSize);

        return result.Match<PaginatedResult<ProductDto>, IActionResult>(
            paginatedResult => Ok(paginatedResult),
            () => NotFound()
        );
    }
}

3. Add Action Filters

using ISynergy.Framework.AspNetCore.Filters;

[ApiController]
[Route("api/[controller]")]
[ValidateModelFilter] // Validates ModelState automatically
public class OrdersController : ControllerBase
{
    [HttpPost]
    [NoCache] // Prevents caching of this endpoint
    public async Task<IActionResult> CreateOrder([FromBody] OrderDto order)
    {
        // ModelState is already validated by ValidateModelFilter
        // Response will not be cached due to NoCacheFilter

        await _orderService.CreateOrderAsync(order);
        return Ok();
    }

    [HttpGet("local-only")]
    [RequestShouldBeLocalFilter] // Only allows requests from localhost
    public IActionResult GetSensitiveData()
    {
        return Ok(new { Secret = "This is sensitive" });
    }
}

4. Configure Global Exception Handling

var app = builder.Build();

// Add global exception handler
app.UseExceptionHandler(exceptionHandlerApp =>
{
    exceptionHandlerApp.Run(async context =>
    {
        var exceptionHandler = context.RequestServices
            .GetRequiredService<IExceptionHandler>();

        await exceptionHandler.TryHandleAsync(
            context,
            context.Features.Get<IExceptionHandlerFeature>()?.Error!,
            context.RequestAborted);
    });
});

// Or register the built-in GlobalExceptionHandler
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
app.UseExceptionHandler();

Architecture

Core Components

ISynergy.Framework.AspNetCore/
├── Extensions/                 # Extension methods
│   ├── TelemetryExtensions    # OpenTelemetry configuration
│   ├── HealthCheckExtensions  # Health check endpoints
│   ├── ResultExtensions       # Result pattern conversions
│   ├── HttpContextExtensions  # HttpContext utilities
│   └── WebApplicationExtensions
│
├── Filters/                   # Action filters
│   ├── ValidateModelFilterAttribute
│   ├── NoCacheFilterAttribute
│   ├── NullResultFilterAttribute
│   ├── NoNullModelsFilterAttribute
│   └── RequestShouldBeLocalFilterAttribute
│
├── Handlers/                  # Exception handlers
│   └── GlobalExceptionHandler
│
├── Binders/                   # Model binders
│   ├── DateTimeModelBinder
│   └── DateTimeModelBinderProvider
│
├── Abstractions/              # Service interfaces
│   └── IJwtTokenService
│
└── Options/                   # Configuration options
    ├── CORSOptions
    ├── KeyVaultOptions
    ├── AzureOptions
    └── TelemetryOptions

Core Features

OpenTelemetry Integration

Configure comprehensive observability for your application:

using ISynergy.Framework.AspNetCore.Extensions;

builder.Logging.AddTelemetry(
    builder,
    infoService,
    tracerProviderBuilder =>
    {
        // Add custom sources
        tracerProviderBuilder
            .AddSource("MyApi")
            .AddSource("MyApi.Database");

        // Add exporters
        if (builder.Environment.IsProduction())
        {
            tracerProviderBuilder.AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri("http://otel-collector:4317");
            });
        }
    },
    meterProviderBuilder =>
    {
        // Add custom meters
        meterProviderBuilder.AddMeter("MyApi.Metrics");

        // Add exporters
        if (builder.Environment.IsProduction())
        {
            meterProviderBuilder.AddOtlpExporter();
        }
    },
    loggerProviderBuilder =>
    {
        // Configure logging
        if (builder.Environment.IsProduction())
        {
            loggerProviderBuilder.AddOtlpExporter();
        }
    });

Health Check Endpoints

Configure detailed health checks with JSON responses:

using ISynergy.Framework.AspNetCore.Extensions;

// Configure health checks
builder.Services.AddHealthChecks()
    .AddCheck("database", () => HealthCheckResult.Healthy(), tags: ["live"])
    .AddCheck("external-api", () => HealthCheckResult.Healthy())
    .AddCheck("cache", () => HealthCheckResult.Healthy(), tags: ["live"]);

var app = builder.Build();

// Map default health endpoints
app.MapDefaultHealthEndpoints();
// Creates:
// - /health (all checks must pass)
// - /alive (only checks tagged with "live" must pass)

// Or use custom health check endpoint with telemetry
app.MapTelemetryHealthChecks("/healthz");

Example health check response:

{
  "Status": "Healthy",
  "Duration": "00:00:00.0234567",
  "Info": [
    {
      "Key": "database",
      "Description": "Database connection is healthy",
      "Status": "Healthy",
      "Duration": "00:00:00.0123456",
      "Data": {}
    }
  ]
}

Action Filters

Model Validation Filter

Automatically validate ModelState:

[ApiController]
[Route("api/[controller]")]
[ValidateModelFilter]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult CreateUser([FromBody] CreateUserRequest request)
    {
        // If ModelState is invalid, filter returns BadRequest automatically
        // No need to check ModelState.IsValid here
        return Ok();
    }
}
No Cache Filter

Prevent caching of responses:

[HttpGet("real-time-data")]
[NoCache]
public IActionResult GetRealTimeData()
{
    // Response headers will include:
    // Cache-Control: no-store, no-cache, must-revalidate
    // Pragma: no-cache
    // Expires: 0
    return Ok(new { Timestamp = DateTime.UtcNow });
}
Local Request Filter

Restrict endpoints to localhost only:

[HttpGet("admin/diagnostics")]
[RequestShouldBeLocalFilter]
public IActionResult GetDiagnostics()
{
    // Returns 403 Forbidden if request is not from localhost
    return Ok(GetSystemDiagnostics());
}
Null Result Filter

Handle null results automatically:

[HttpGet("{id}")]
[NullResultFilter] // Returns 404 if result is null
public async Task<Product?> GetProduct(int id)
{
    return await _productService.GetProductByIdAsync(id);
    // If null, filter automatically returns 404 Not Found
}

HTTP Extensions

HttpContext Extensions
using ISynergy.Framework.AspNetCore.Extensions;

public class MyMiddleware
{
    public async Task InvokeAsync(HttpContext context)
    {
        // Get client IP address
        var ipAddress = context.GetClientIpAddress();

        // Check if request is from localhost
        if (context.IsLocalRequest())
        {
            // Handle local request
        }

        // Get user agent
        var userAgent = context.Request.GetUserAgent();

        await _next(context);
    }
}
HttpRequest Extensions
using ISynergy.Framework.AspNetCore.Extensions;

public IActionResult GetRequestInfo()
{
    var request = HttpContext.Request;

    var info = new
    {
        IsAjax = request.IsAjaxRequest(),
        IsMobile = request.IsMobileRequest(),
        UserAgent = request.GetUserAgent(),
        ContentType = request.ContentType
    };

    return Ok(info);
}

Custom DateTime Model Binder

Handle DateTime parsing with custom formats:

using ISynergy.Framework.AspNetCore.Providers;

// In Program.cs
builder.Services.AddControllers(options =>
{
    options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());
});

// In Controller
[HttpGet]
public IActionResult GetOrders(
    [FromQuery] DateTime? startDate,
    [FromQuery] DateTime? endDate)
{
    // Supports multiple date formats automatically
    // - ISO 8601: 2024-01-15T10:30:00Z
    // - Custom formats: 01/15/2024
    return Ok();
}

Advanced Features

Result Pattern HTTP Extensions

Convert HttpResponseMessage to Result objects:

using ISynergy.Framework.AspNetCore.Extensions;

public class ApiClient
{
    private readonly HttpClient _httpClient;

    public async Task<Result<Product>> GetProductAsync(int id)
    {
        var response = await _httpClient.GetAsync($"api/products/{id}");

        // Convert HttpResponseMessage to Result<Product>
        var result = await response.ToResult<Product>();

        return result ?? Result<Product>.Fail("Invalid response");
    }

    public async Task<PaginatedResult<Product>> GetProductsAsync(int page)
    {
        var response = await _httpClient.GetAsync($"api/products?page={page}");

        // Convert to PaginatedResult
        var result = await response.ToPaginatedResult<Product>();

        return result ?? PaginatedResult<Product>.Empty;
    }
}

JWT Token Service

Implement JWT token generation and validation:

using ISynergy.Framework.AspNetCore.Abstractions.Services;
using ISynergy.Framework.Core.Models;

public class JwtTokenService : IJwtTokenService
{
    private readonly IConfiguration _configuration;

    public JwtTokenService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public Token GenerateJwtToken(TokenRequest request)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Secret"]);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[]
            {
                new Claim(ClaimTypes.Name, request.Username),
                new Claim(ClaimTypes.Email, request.Email)
            }),
            Expires = DateTime.UtcNow.AddHours(8),
            SigningCredentials = new SigningCredentials(
                new SymmetricSecurityKey(key),
                SecurityAlgorithms.HmacSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        var tokenString = tokenHandler.WriteToken(token);

        return new Token
        {
            AccessToken = tokenString,
            ExpiresIn = 28800,
            TokenType = "Bearer"
        };
    }

    public List<Claim> GetClaims(Token token)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var jwtToken = tokenHandler.ReadJwtToken(token.AccessToken);
        return jwtToken.Claims.ToList();
    }

    public string GetSingleClaim(Token token, string claimType)
    {
        var claims = GetClaims(token);
        return claims.FirstOrDefault(c => c.Type == claimType)?.Value ?? string.Empty;
    }
}

// Register in DI
builder.Services.AddSingleton<IJwtTokenService, JwtTokenService>();

CORS Configuration

Configure CORS with environment-aware settings:

using ISynergy.Framework.AspNetCore.Options;

// In appsettings.json
{
  "CORS": {
    "AllowedOrigins": ["https://myapp.com", "https://admin.myapp.com"],
    "AllowedMethods": ["GET", "POST", "PUT", "DELETE"],
    "AllowedHeaders": ["*"],
    "AllowCredentials": true
  }
}

// In Program.cs
var corsOptions = builder.Configuration
    .GetSection("CORS")
    .Get<CORSOptions>();

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policy =>
    {
        policy.WithOrigins(corsOptions.AllowedOrigins.ToArray())
            .WithMethods(corsOptions.AllowedMethods.ToArray())
            .WithHeaders(corsOptions.AllowedHeaders.ToArray());

        if (corsOptions.AllowCredentials)
            policy.AllowCredentials();
    });
});

app.UseCors();

Service Locator Integration

Use service locator for legacy scenarios:

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.Core.Locators;

var app = builder.Build();

// Set service locator provider
app.SetLocatorProvider();

// Now you can use ServiceLocator anywhere
public class LegacyService
{
    public void DoWork()
    {
        var logger = ServiceLocator.Default.GetInstance<ILogger>();
        logger.LogInformation("Working...");
    }
}

Best Practices

Use Result pattern extensions to maintain consistent API responses and error handling.

Always configure global exception handling to prevent sensitive error details from leaking to clients.

OpenTelemetry integration automatically instruments ASP.NET Core, HttpClient, and runtime metrics.

API Design

  • Use Result<T> pattern for all service methods
  • Return appropriate HTTP status codes (200, 201, 204, 400, 404, 500)
  • Use ProblemDetails for error responses
  • Implement health check endpoints for monitoring
  • Use action filters to avoid repetitive validation code

Security

  • Always validate input using [ValidateModelFilter] or manual validation
  • Use [RequestShouldBeLocalFilter] for administrative endpoints
  • Implement JWT token authentication for protected endpoints
  • Configure CORS appropriately for your environment
  • Never expose internal exception details in production

Performance

  • Use [NoCache] filter sparingly - only for real-time data
  • Implement health checks that don't impact application performance
  • Use async/await throughout the application
  • Configure response compression for API endpoints
  • Monitor telemetry data to identify bottlenecks

Observability

  • Configure OpenTelemetry early in application startup
  • Tag health checks appropriately (live, ready)
  • Use structured logging with proper log levels
  • Instrument custom operations with ActivitySource
  • Monitor metrics for request duration, error rates, and throughput

Testing

The framework is designed for testability:

[TestClass]
public class ProductsControllerTests
{
    [TestMethod]
    public async Task GetProduct_ReturnsOk_WhenProductExists()
    {
        // Arrange
        var mockService = new Mock<IProductService>();
        mockService.Setup(s => s.GetProductByIdAsync(1))
            .ReturnsAsync(Result<Product>.Success(new Product { Id = 1 }));

        var controller = new ProductsController(mockService.Object);

        // Act
        var result = await controller.GetProduct(1);

        // Assert
        Assert.IsInstanceOfType(result, typeof(OkObjectResult));
    }

    [TestMethod]
    public async Task GetProduct_ReturnsNotFound_WhenProductDoesNotExist()
    {
        // Arrange
        var mockService = new Mock<IProductService>();
        mockService.Setup(s => s.GetProductByIdAsync(999))
            .ReturnsAsync(Result<Product>.Fail("Not found"));

        var controller = new ProductsController(mockService.Object);

        // Act
        var result = await controller.GetProduct(999);

        // Assert
        Assert.IsInstanceOfType(result, typeof(NotFoundResult));
    }
}

Integration Testing

public class ApiIntegrationTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly WebApplicationFactory<Program> _factory;

    public ApiIntegrationTests(WebApplicationFactory<Program> factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task HealthEndpoint_ReturnsHealthy()
    {
        // Arrange
        var client = _factory.CreateClient();

        // Act
        var response = await client.GetAsync("/health");

        // Assert
        response.EnsureSuccessStatusCode();
        var content = await response.Content.ReadAsStringAsync();
        Assert.Contains("Healthy", content);
    }
}

Dependencies

  • ISynergy.Framework.Core - Core framework components
  • ISynergy.Framework.OpenTelemetry - OpenTelemetry integration
  • ISynergy.Framework.Storage - Storage abstractions
  • Microsoft.AspNetCore.App - ASP.NET Core framework
  • OpenTelemetry.Instrumentation.AspNetCore - ASP.NET Core instrumentation
  • OpenTelemetry.Instrumentation.Http - HttpClient instrumentation
  • OpenTelemetry.Instrumentation.Runtime - Runtime metrics

Configuration Examples

Complete Startup Configuration

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.AspNetCore.Handlers;
using ISynergy.Framework.AspNetCore.Filters;

var builder = WebApplication.CreateBuilder(args);

// Add services
builder.Services.AddControllers(options =>
{
    // Add model binders
    options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());

    // Add global filters
    options.Filters.Add<ValidateModelFilterAttribute>();
});

// Add OpenTelemetry
var infoService = new InfoService("MyApi", new Version(1, 0, 0));
builder.Services.AddSingleton<IInfoService>(infoService);

builder.Logging.AddTelemetry(builder, infoService);

// Add health checks
builder.Services.AddHealthChecks()
    .AddCheck("self", () => HealthCheckResult.Healthy(), tags: ["live"]);

// Add exception handling
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
builder.Services.AddProblemDetails();

// Add CORS
builder.Services.AddCors();

var app = builder.Build();

// Configure middleware pipeline
app.UseExceptionHandler();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

app.MapDefaultHealthEndpoints();
app.MapControllers();

app.SetLocatorProvider();

app.Run();

Documentation

For more information about the I-Synergy Framework:

  • I-Synergy.Framework.Core - Core framework components
  • I-Synergy.Framework.CQRS - CQRS implementation
  • I-Synergy.Framework.EntityFramework - Entity Framework integration
  • I-Synergy.Framework.OpenTelemetry - OpenTelemetry utilities

Support

For issues, questions, or contributions, please visit the GitHub repository.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on I-Synergy.Framework.AspNetCore:

Package Downloads
I-Synergy.Framework.AspNetCore.Authentication

I-Synergy Framework Authentication

I-Synergy.Framework.AspNetCore.Globalization

I-Synergy Framework Globalization

I-Synergy.Framework.AspNetCore.Proxy

I-Synergy Framework Proxy for .net 8.0

I-Synergy.Framework.AspNetCore.Blazor

I-Synergy Framework Blazor

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.10110.10203 0 1/10/2026
2026.10110.10121-preview 0 1/10/2026
2026.10109.12335-preview 0 1/9/2026
2026.10105.11358-preview 108 1/5/2026
2026.10105.11229-preview 108 1/5/2026
2025.11231.11750-preview 119 12/31/2025
2025.11225.12213 216 12/25/2025
2025.11225.12003-preview 210 12/25/2025
2025.11218.11301 308 12/18/2025
2025.11218.10050-preview 296 12/18/2025
2025.11211.11307-preview 446 12/11/2025
2025.11211.11225-preview 436 12/11/2025
2025.11210.10145-preview 454 12/10/2025
2025.11209.11459 469 12/9/2025
2025.11209.11422-preview 455 12/9/2025
2025.11207.11553-preview 227 12/7/2025
2025.11204.11448-preview 220 12/4/2025
2025.11130.12248 449 11/30/2025
2025.11130.12134-preview 379 11/30/2025
2025.11130.11725-preview 379 11/30/2025
2025.11130.11553-preview 377 11/30/2025
2025.11130.11515-preview 377 11/30/2025
2025.11130.11420.59-preview 384 11/30/2025
2025.11130.11323.56-preview 277 11/30/2025
2025.11129.10227.14-preview 138 11/29/2025
2025.11120.10114 434 11/20/2025
2025.11119.12324.6-preview 421 11/19/2025
2025.11119.10110 435 11/19/2025
2025.11119.10037-preview 389 11/19/2025
2025.11118.12340.33-preview 423 11/18/2025
2025.11117.12349.4-preview 418 11/17/2025
2025.11117.11937.47-preview 422 11/17/2025
2025.11113.11532.29-preview 306 11/13/2025
2025.11113.10128.57-preview 274 11/13/2025
2025.11110.10306.55-preview 255 11/10/2025
2025.11109.10018.48-preview 169 11/8/2025
2025.11108.10119.29-preview 147 11/8/2025
2025.11106.10037.1-preview 219 11/6/2025
2025.11105.10254.54-preview 218 11/5/2025
2025.11105.10141.16-preview 224 11/5/2025
2025.11104.12308.54-preview 217 11/4/2025
2025.11104.10144.47-preview 216 11/4/2025
2025.11102.12003.8-preview 220 11/2/2025
2025.11102.11228.52-preview 187 11/2/2025
2025.11102.10309.42-preview 170 11/2/2025
2025.11029.11433.38-preview 225 10/29/2025
2025.11029.10201.38-preview 217 10/29/2025
2025.11027.11947.55-preview 218 10/27/2025
2025.11022.12207.12-preview 206 10/22/2025
2025.11019.12053.37-preview 208 10/19/2025
2025.11016.11750.24-preview 198 10/16/2025
2025.11015.10219.44-preview 195 10/15/2025
2025.11014.10245.12-preview 203 10/14/2025
2025.11012.10130.11-preview 178 10/12/2025
2025.11010.10052.52-preview 252 10/9/2025
2025.11001.12118.13-preview 234 10/1/2025
2025.10925.10144.25-preview 265 9/25/2025
2025.10921.11353.29-preview 282 9/21/2025
2025.10913.11841.29-preview 211 9/13/2025
2025.10912.12351.59-preview 166 9/12/2025
2025.10912.10210.52-preview 237 9/12/2025
2025.10911.10131.43-preview 228 9/10/2025
2025.10910.12340.34-preview 244 9/10/2025
2025.10910.11327.15-preview 227 9/10/2025
2025.10910.11206.45-preview 240 9/10/2025
2025.10910.10230.58-preview 250 9/10/2025
2025.10908.12343.47-preview 243 9/8/2025
2025.10904.12337.35-preview 253 9/4/2025
2025.10904.12245.51-preview 258 9/4/2025
2025.10904.11425.5-preview 240 9/4/2025
2025.10904.10323.39-preview 261 9/4/2025
2025.10826.11425.3-preview 310 8/26/2025
2025.10825.12350.9-preview 242 8/25/2025
2025.10810.10248-preview 212 8/10/2025
2025.10809.10146.35-preview 242 8/9/2025
2025.10806.12031.49-preview 312 8/6/2025
2025.10806.11955.54-preview 305 8/6/2025
2025.10806.11433.24-preview 324 8/6/2025
2025.10709.10105.39-preview 233 7/8/2025
2025.10707.12320.3-preview 239 7/7/2025
2025.10706.11957.9-preview 219 7/6/2025
2025.10702.11752.47-preview 233 7/2/2025
2025.10702.11256.17-preview 237 7/2/2025
2025.10702.11119.10-preview 238 7/2/2025
2025.10702.10000.31-preview 239 7/1/2025
2025.10701.11524.1-preview 233 7/1/2025
2025.10701.11310.13-preview 246 7/1/2025
2025.10630.12022.58-preview 231 6/30/2025
2025.10612.12134.8-preview 412 6/12/2025
2025.10611.12313.53-preview 410 6/11/2025
2025.10603.10159.54-preview 266 6/3/2025
2025.10602.11908.9-preview 265 6/2/2025
2025.10601.10124.29-preview 222 5/31/2025
2025.10531.12235.29-preview 204 5/31/2025
2025.10530.10121.50-preview 274 5/29/2025
2025.10527.12202.4-preview 262 5/27/2025
2025.10526.12034.25-preview 238 5/26/2025
2025.10521.11828.30-preview 263 5/21/2025
2025.10520.11715.6-preview 264 5/20/2025
2025.10520.11515.16-preview 238 5/20/2025
2025.10518.12303.43-preview 267 5/18/2025
2025.10518.11257.36-preview 272 5/18/2025
2025.10517.12347.27-preview 196 5/17/2025
2025.10517.12003.6-preview 206 5/17/2025
2025.10516.11720.13-preview 291 5/16/2025
2025.10514.12334.2-preview 361 5/14/2025
2025.10514.10015.27-preview 338 5/13/2025
2025.10511.11032.32-preview 280 5/11/2025
2025.10413.11530 352 4/13/2025
2025.10413.11434.33-preview 336 4/13/2025
2025.10413.10205.50-preview 265 4/13/2025
2025.10412.11526.4-preview 229 4/12/2025
2025.10412.10141 262 4/12/2025
2025.10411.11811.23-preview 248 4/11/2025
2025.10411.11645.1-preview 258 4/11/2025
2025.10410.11458.35-preview 296 4/10/2025
2025.10405.10143.28-preview 187 4/5/2025
2025.10403.12208.1-preview 302 4/3/2025
2025.10403.11954.16-preview 298 4/3/2025
2025.10401.11908.24-preview 291 4/1/2025
2025.10401.11559.45-preview 294 4/1/2025
2025.10331.12215.59-preview 277 3/31/2025
2025.10331.12130.34-preview 283 3/31/2025
2025.10331.10056.40-preview 283 3/30/2025
2025.10328.10150.21-preview 250 3/28/2025
2025.10323.11359-preview 403 3/23/2025
2025.10320.11800 296 3/20/2025
2025.10320.11616.45-preview 251 3/20/2025
2025.10320.10000 250 3/19/2025
2025.10319.12311.26-preview 244 3/19/2025
2025.10319.12238.6-preview 269 3/19/2025
2025.10319.12057.59-preview 276 3/19/2025
2025.10318.10055 272 3/18/2025
2025.10317.11728.13-preview 263 3/17/2025
2025.10317.11201.3-preview 278 3/17/2025
2025.10315.11523.14-preview 198 3/15/2025
2025.10305.12342 354 3/5/2025
2025.10305.12321.9-preview 341 3/5/2025
2025.10301.12313 271 3/1/2025
2025.10301.12129.38-preview 202 3/1/2025
2025.10221.10043.29-preview 210 2/21/2025
2025.1051.1246 285 2/20/2025
2025.1051.44.54-preview 223 2/20/2025
2025.1044.1 240 2/13/2025
2025.1044.0.2-preview 214 2/13/2025
2025.1043.0.2-preview 206 2/12/2025
2025.1041.0.1-preview 230 2/10/2025
2025.1038.1 302 2/7/2025
2025.1038.0.1-preview 230 2/7/2025
2025.1035.1 294 2/4/2025
2025.1035.0.1-preview 256 2/4/2025
2025.1034.1 306 2/3/2025
2025.1034.0.1-preview 247 2/3/2025
2025.1033.0.5-preview 239 2/2/2025
2025.1033.0.3-preview 246 2/2/2025
2025.1033.0.2-preview 258 2/2/2025
2025.1033.0.1-preview 203 2/2/2025
2025.1025.1 305 1/25/2025
2025.1025.0.1-preview 243 1/25/2025
2025.1021.1 280 1/21/2025
2025.1021.0.1-preview 244 1/21/2025
2025.1020.1 263 1/20/2025
2025.1020.0.3-preview 252 1/20/2025
2025.1020.0.1-preview 248 1/20/2025
2025.1018.0.7-preview 219 1/18/2025
2025.1018.0.5-preview 247 1/18/2025
2025.1018.0.4-preview 243 1/18/2025
2025.1017.0.2-preview 231 1/17/2025
2025.1017.0.1-preview 258 1/17/2025
2025.1016.0.1-preview 226 1/16/2025
2025.1010.1 290 1/10/2025
2025.1010.0.1-preview 238 1/9/2025
2025.1009.0.3-preview 251 1/9/2025
2025.1007.1 285 1/7/2025
2025.1007.0.5-preview 245 1/7/2025
2025.1007.0.3-preview 239 1/7/2025
2025.1006.1 275 1/7/2025
2025.1005.1 324 1/5/2025
2025.1005.0.2-preview 248 1/5/2025
2025.1004.1 305 1/4/2025
2024.1366.1 277 12/31/2024
2024.1366.0.2-preview 254 12/31/2024
2024.1366.0.1-preview 274 12/31/2024
2024.1365.0.2-preview 219 12/30/2024
2024.1365.0.1-preview 251 12/30/2024
2024.1361.0.2-preview 253 12/26/2024
2024.1353.0.1-preview 232 12/18/2024
2024.1352.0.3-preview 250 12/17/2024
2024.1352.0.2-preview 230 12/17/2024
2024.1352.0.1-preview 226 12/17/2024
2024.1351.1 303 12/16/2024
2024.1351.0.3-preview 240 12/16/2024
2024.1350.1 300 12/15/2024
2024.1343.1 301 12/8/2024
2024.1339.1 303 12/4/2024
2024.1336.1 298 12/1/2024
2024.1332.1 274 11/27/2024
2024.1330.1 293 11/25/2024
2024.1328.1 278 11/23/2024
2024.1325.1 316 11/20/2024
2024.1323.1 315 11/18/2024
2024.1316.1 148 11/11/2024
2024.1307.1 142 11/2/2024
2024.1300.1 156 10/26/2024
2024.1294.1 169 10/20/2024
2024.1290.1 316 10/16/2024
2024.1283.1 319 10/8/2024
2024.1282.1 252 10/8/2024
2024.1278.1 282 10/4/2024
2024.1277.1 293 10/3/2024
2024.1275.2 251 10/1/2024
2024.1275.1 236 10/1/2024
2024.1274.1 235 9/30/2024
2024.1263.1 237 9/19/2024
2024.1261.1 291 9/17/2024
2024.1258.1 265 9/13/2024
2024.1257.1 239 9/13/2024
2024.1256.1 231 9/12/2024
2024.1254.1 257 9/10/2024
2024.1250.1 278 9/6/2024
2024.1249.1 269 9/5/2024
2024.1246.1 274 9/2/2024
2024.1245.1 267 9/1/2024
2024.1237.1 298 8/24/2024
2024.1235.0.1-preview 244 8/23/2024
2024.1230.1 254 8/18/2024
2024.1229.1 293 8/16/2024
2024.1228.1 256 8/15/2024
2024.1222.1 325 8/8/2024
2024.1221.1 246 8/7/2024
2024.1221.0.2-preview 238 8/8/2024
2024.1221.0.1-preview 236 8/8/2024
2024.1220.1 244 8/7/2024
2024.1219.0.2-preview 222 8/6/2024
2024.1219.0.1-preview 191 8/6/2024
2024.1217.0.2-preview 197 8/4/2024
2024.1217.0.1-preview 213 8/4/2024
2024.1216.0.2-preview 207 8/3/2024
2024.1216.0.1-preview 209 8/3/2024
2024.1208.0.1-preview 235 7/26/2024
2024.1207.0.7-preview 198 7/25/2024
2024.1207.0.5-preview 209 7/25/2024
2024.1166.1 343 6/14/2024
2024.1165.1 268 6/13/2024
2024.1164.1 232 6/12/2024
2024.1162.1 253 6/10/2024
2024.1158.1 315 6/6/2024
2024.1156.1 273 6/4/2024
2024.1152.1 333 5/31/2024
2024.1151.1 304 5/29/2024
2024.1150.2 261 5/29/2024
2024.1150.1 273 5/29/2024
2024.1149.1 262 5/28/2024
2024.1147.1 276 5/26/2024
2024.1146.2 253 5/25/2024
2024.1146.1 257 5/25/2024
2024.1145.1 278 5/24/2024
2024.1135.2 266 5/14/2024
2024.1135.1 253 5/14/2024
2024.1134.1 231 5/13/2024
2024.1130.1 297 5/9/2024
2024.1123.1 299 5/2/2024
2024.1121.1 288 4/30/2024
2024.1114.1 330 4/22/2024
2024.1113.0.5-preview 259 4/22/2024
2024.1113.0.3-preview 262 4/22/2024
2024.1113.0.2-preview 235 4/22/2024
2024.1113.0.1-preview 238 4/22/2024
2024.1108.0.1-preview 263 4/17/2024
2024.1107.0.1-preview 264 4/16/2024
2024.1094.2 291 4/3/2024
2024.1094.1 253 4/3/2024
2024.1092.1 268 4/1/2024
2024.1088.1 273 3/28/2024
2024.1085.1 293 3/25/2024
2024.1080.2 306 3/20/2024
2024.1080.1 289 3/20/2024
2024.1078.1 302 3/18/2024
2024.1077.1 292 3/17/2024
2024.1073.1 321 3/13/2024
2024.1070.1 323 3/10/2024
2024.1069.1 311 3/9/2024
2024.1068.1 310 3/8/2024
2024.1066.2 288 3/6/2024
2024.1066.1 295 3/6/2024
2024.1065.1 311 3/5/2024
2024.1065.0.1-preview 257 3/5/2024
2024.1063.2 303 3/3/2024
2024.1063.1 282 3/3/2024
2024.1062.1 307 3/2/2024
2024.1061.2 308 3/1/2024
2024.1061.1 293 3/1/2024
2024.1060.2 299 2/29/2024
2024.1060.1 278 2/29/2024
2024.1060.0.5-preview 256 2/29/2024
2024.1060.0.3-preview 253 2/29/2024
2024.1059.0.1-preview 217 2/28/2024
2024.1058.1 276 2/27/2024
2024.1056.1 259 2/25/2024
2024.1055.1 258 2/24/2024
2024.1052.1 310 2/21/2024
2024.1050.2 283 2/20/2024
2024.1050.1 276 2/19/2024
2024.1049.1 297 2/18/2024
2024.1048.1 301 2/17/2024
2024.1047.1 274 2/16/2024
2024.1035.1 299 2/4/2024
2024.1034.2 279 2/3/2024
2024.1029.1 368 1/29/2024
2024.1023.1 375 1/23/2024
2024.1022.1 385 1/22/2024
2024.1020.1 357 1/20/2024
2024.1019.1 365 1/19/2024
2024.1017.1 396 1/17/2024
2024.1012.1 391 1/12/2024
2024.1010.1 400 1/10/2024
2024.1008.1 410 1/8/2024
2024.1007.1 401 1/7/2024
2024.1005.1 398 1/5/2024
2024.1004.1 442 1/4/2024
2023.1365.1 434 12/31/2023
2023.1362.1 395 12/28/2023
2023.1361.1 380 12/27/2023
2023.1359.1 426 12/25/2023
2023.1358.1 350 12/24/2023
2023.1357.1 360 12/23/2023
2023.1342.1 446 12/8/2023
2023.1336.1 436 12/2/2023
2023.1332.1 400 11/28/2023
2023.1330.1 397 11/26/2023
2023.1325.1 407 11/21/2023
2023.1323.1 320 11/19/2023
2023.1320.1 292 11/17/2023
2023.1318.1 394 11/15/2023
2023.1317.1 334 11/13/2023
2023.1307.1 353 11/3/2023
2023.1305.1 359 11/1/2023
2023.1304.1 344 10/31/2023
2023.1294.1 340 10/21/2023
2023.1290.1 364 10/16/2023
2023.1289.1 318 10/16/2023
2023.1284.1 378 10/11/2023
2023.1276.1 382 10/3/2023
2023.1275.1 376 10/2/2023
2023.1272.1 401 9/29/2023
2023.1269.1 355 9/26/2023
2023.1242.1 473 8/30/2023
2023.1231.1 518 8/19/2023
2023.1229.1 495 8/17/2023
2023.1228.1 497 8/16/2023
2023.1227.1 489 8/15/2023
2023.1224.2 502 8/12/2023
2023.1224.1 519 8/12/2023
2023.1213.2 577 8/1/2023
2023.1213.1 540 8/1/2023
2023.1209.1 512 7/27/2023
2023.1201.1 546 7/20/2023
2023.1197.1 538 7/16/2023
2023.1178.1 579 6/27/2023
2023.1175.1 591 6/24/2023
2023.1174.1 557 6/22/2023
2023.1169.1 574 6/18/2023
2023.1165.1 569 6/14/2023
2023.1161.1 633 6/11/2023
2023.1159.1 642 6/7/2023
2023.1157.1 617 6/6/2023
2023.1146.1 598 5/27/2023
2023.1139.1 654 5/19/2023
2023.1137.1 693 5/17/2023
2023.1136.1 662 5/16/2023
2023.1118.1 702 4/28/2023
2023.1111.1 729 4/21/2023
2023.1110.1 758 4/20/2023
2023.1105.1 760 4/15/2023
2023.1103.1 736 4/13/2023
2023.1102.1 731 4/12/2023
2023.1101.1 725 4/11/2023
2023.1090.1 781 3/31/2023
2023.1089.1 794 3/30/2023
2023.1088.1 809 3/29/2023
2023.1082.1 858 3/23/2023
2023.1078.1 870 3/19/2023
2023.1070.1 850 3/11/2023
2023.1069.1 871 3/10/2023
2023.1064.1 874 3/5/2023
2023.1060.1 933 3/1/2023
2023.1057.1 927 2/26/2023
2023.1046.1 949 2/15/2023
2023.1043.2 961 2/12/2023
2023.1043.1 945 2/12/2023
2023.1042.1 927 2/11/2023
2023.1041.1 955 2/10/2023
2023.1039.1 914 2/8/2023
2023.1036.1 968 2/5/2023
2023.1035.1 971 2/4/2023
2023.1033.1 1,002 2/2/2023
2023.1030.1 1,007 1/30/2023
2023.1028.1 1,012 1/28/2023
2023.1026.1 988 1/26/2023
2023.1025.1 994 1/25/2023
2023.1024.1 977 1/24/2023
2023.1023.1 998 1/23/2023
2022.1319.1 675 11/15/2022
2022.1309.1 974 11/5/2022
2022.1307.1 977 11/3/2022
2022.1295.1 1,021 10/22/2022
2022.1290.1 1,036 10/17/2022
2022.1289.2 1,012 10/16/2022
2022.1289.1 990 10/16/2022
2022.1283.1 1,063 10/10/2022
2022.1282.1 1,007 10/9/2022
2022.1278.1 1,033 10/5/2022
2022.1272.2 1,032 9/29/2022
2022.1272.1 1,042 9/29/2022
2022.1271.1 1,049 9/28/2022
2022.1266.1 1,076 9/23/2022
2022.1259.1 1,069 9/16/2022
2022.1257.1 1,087 9/14/2022
2022.1250.1 1,068 9/7/2022
2022.1250.0.2-preview 373 9/7/2022
2022.1249.0.2-preview 366 9/6/2022
2022.1249.0.1-preview 338 9/6/2022
2022.1197.1 1,142 7/16/2022
2022.1196.1 1,100 7/15/2022
2022.1194.1 1,153 7/13/2022
2022.1182.1 1,133 7/1/2022
2022.1178.1 1,136 6/27/2022
2022.1166.1 1,153 6/15/2022
2022.1157.1 1,147 6/6/2022
2022.1150.1 1,160 5/30/2022
2022.1149.1 1,155 5/29/2022
2022.1144.1 1,134 5/24/2022
0.6.2 1,135 5/23/2022
0.6.1 1,116 5/23/2022
0.6.0 1,153 5/14/2022
0.5.3 1,190 5/8/2022
0.5.2 1,186 5/1/2022
0.5.1 1,155 5/1/2022
0.5.0 1,157 4/23/2022
0.4.1 1,159 4/15/2022
0.4.0 1,174 4/9/2022
0.3.3 1,185 4/8/2022
0.3.2 1,169 4/1/2022
0.3.1 1,166 3/29/2022
0.3.0 1,121 3/28/2022
0.2.3 1,166 3/28/2022
0.2.2 1,200 3/25/2022
0.2.1 1,156 3/21/2022
0.2.0 1,194 3/18/2022