SYMBOL INDEX (12936 symbols across 682 files) FILE: scripts/extract-elevation0-from-images.py function is_pattern_line (line 31) | def is_pattern_line(r, g, b): function is_grid_pixel (line 36) | def is_grid_pixel(r, g, b): function find_row_spans (line 47) | def find_row_spans(arr, col_start, col_end, n_expected=None): function find_grid_center (line 90) | def find_grid_center(arr, y_start, y_end, col_start, col_end, rough_cx, ... function is_grid_tinted (line 117) | def is_grid_tinted(r, g, b): function trace_crosshair_extent (line 133) | def trace_crosshair_extent(arr, cx, cy, col_start, col_end): function find_horizontal_crosshairs (line 206) | def find_horizontal_crosshairs(arr, col_start, col_end): function compute_outer_ring_radius (line 263) | def compute_outer_ring_radius(blue_half_span, n_rings): function _trace_vertical_crosshair (line 276) | def _trace_vertical_crosshair(arr, cx, cy): function _find_ring_spacing_from_crosshair (line 316) | def _find_ring_spacing_from_crosshair(arr, cx, cy, current_radius): function _find_consistent_spacing (line 409) | def _find_consistent_spacing(dips, tol=5): function find_plots_in_column (line 437) | def find_plots_in_column(arr, col_start, col_end, n_expected=None, n_rin... function detect_outer_from_crosshair_extent (line 569) | def detect_outer_from_crosshair_extent(arr, cx, cy, col_start, col_end): function detect_grid_boundary (line 661) | def detect_grid_boundary(arr, cx, cy, pattern_radius, col_start, col_end): function _kasa_circle_fit (line 723) | def _kasa_circle_fit(points): function fit_outer_ring (line 742) | def fit_outer_ring(arr, rough_cx, rough_cy, pattern_radius, col_start, c... function extract_polar_pattern (line 831) | def extract_polar_pattern(arr, cx, cy, outer_radius, db_max, db_range, function despike (line 893) | def despike(gains, threshold=4.0): function cross_correlate (line 920) | def cross_correlate(extracted, reference): function validate_with_el90 (line 957) | def validate_with_el90(arr, el0_plots, ant_data, model, bands, db_max, d... function extract_pattern_with_radii (line 1040) | def extract_pattern_with_radii(arr, cx, cy, outer_radius, db_max, db_range, function save_debug_image (line 1084) | def save_debug_image(arr, img, el0_plots, el90_plots, calibrated_radius,... function assign_bands (line 1140) | def assign_bands(n_plots, filename=""): function extract_model_name (line 1164) | def extract_model_name(filename): function process_variant (line 1175) | def process_variant(arr, plots, bands, model_key, ant_data, db_max, db_r... function main (line 1256) | def main(): FILE: src/NetworkOptimizer.Agents/AgentDeployer.cs class AgentDeployer (line 13) | public class AgentDeployer method AgentDeployer (line 18) | public AgentDeployer(ILogger logger, ScriptRenderer scr... method DeployAgentAsync (line 32) | public async Task DeployAgentAsync(AgentConfiguratio... method TestConnectionAsync (line 120) | public async Task TestConnectionAsync(SshCredentials credentials, Canc... method DeployUniFiAgentAsync (line 154) | private async Task DeployUniFiAgentAsync( method DeployLinuxAgentAsync (line 218) | private async Task DeployLinuxAgentAsync( method VerifyDeploymentAsync (line 286) | private async Task VerifyDeploymentAsync( method CreateSshClient (line 366) | private SshClient CreateSshClient(SshCredentials credentials) method CreateSftpClient (line 398) | private SftpClient CreateSftpClient(SshCredentials credentials) method ExecuteCommand (line 430) | private string ExecuteCommand(SshClient client, string command) method UploadScript (line 447) | private void UploadScript(SftpClient sftp, string content, string remo... method FileExists (line 456) | private bool FileExists(SshClient client, string path) method AddStepAsync (line 465) | private async Task AddStepAsync(DeploymentResult result, string stepNa... FILE: src/NetworkOptimizer.Agents/AgentHealthMonitor.cs class AgentHealthMonitor (line 11) | public class AgentHealthMonitor : IDisposable method AgentHealthMonitor (line 17) | public AgentHealthMonitor( method RecordHeartbeatAsync (line 32) | public async Task RecordHeartbeatAsync(string agentId, string deviceNa... method GetAgentStatusAsync (line 66) | public async Task GetAgentStatusAsync(string agentId) method GetAllAgentsAsync (line 99) | public async Task> GetAllAgentsAsync() method GetOfflineAgentsAsync (line 132) | public async Task> GetOfflineAgentsAsync() method GetOnlineAgentsAsync (line 141) | public async Task> GetOnlineAgentsAsync() method RemoveAgentAsync (line 150) | public async Task RemoveAgentAsync(string agentId) method GetHealthStatsAsync (line 178) | public async Task GetHealthStatsAsync() method CleanupOldRecordsAsync (line 198) | public async Task CleanupOldRecordsAsync(TimeSpan retentionPeriod) method InitializeDatabase (line 228) | private void InitializeDatabase() method ReadAgentStatus (line 264) | private AgentStatus ReadAgentStatus(SqliteDataReader reader) method Dispose (line 295) | public void Dispose() class AgentStatus (line 305) | public class AgentStatus class AgentHealthStats (line 320) | public class AgentHealthStats FILE: src/NetworkOptimizer.Agents/Models/AgentConfiguration.cs class AgentConfiguration (line 6) | public class AgentConfiguration type AgentType (line 69) | public enum AgentType FILE: src/NetworkOptimizer.Agents/Models/DeploymentResult.cs class DeploymentResult (line 6) | public class DeploymentResult method CreateSuccess (line 56) | public static DeploymentResult CreateSuccess(string agentId, string de... method CreateFailure (line 71) | public static DeploymentResult CreateFailure(string agentId, string de... class DeploymentStep (line 87) | public class DeploymentStep class VerificationResult (line 118) | public class VerificationResult FILE: src/NetworkOptimizer.Agents/Models/SshCredentials.cs class SshCredentials (line 6) | public class SshCredentials method IsValid (line 46) | public bool IsValid() method GetAuthenticationType (line 58) | public AuthenticationType GetAuthenticationType() type AuthenticationType (line 70) | public enum AuthenticationType FILE: src/NetworkOptimizer.Agents/ScriptRenderer.cs class ScriptRenderer (line 11) | public class ScriptRenderer method ScriptRenderer (line 16) | public ScriptRenderer(ILogger logger, string? template... method RenderTemplateAsync (line 25) | public async Task RenderTemplateAsync(string templateName, Age... method RenderTemplateStringAsync (line 63) | public async Task RenderTemplateStringAsync(string templateCon... method GetTemplatesForAgent (line 88) | public List GetTemplatesForAgent(AgentType agentType) method BuildScriptObject (line 111) | private ScriptObject BuildScriptObject(AgentConfiguration config) method ValidateTemplates (line 151) | public bool ValidateTemplates(AgentType agentType, out List mi... method ListAvailableTemplates (line 171) | public List ListAvailableTemplates() FILE: src/NetworkOptimizer.Alerts/AlertCooldownTracker.cs class AlertCooldownTracker (line 8) | public class AlertCooldownTracker method IsInCooldown (line 15) | public bool IsInCooldown(string key, int cooldownSeconds) method RecordFired (line 29) | public void RecordFired(string key) method Cleanup (line 37) | public void Cleanup(TimeSpan maxAge) FILE: src/NetworkOptimizer.Alerts/AlertCorrelationService.cs class AlertCorrelationService (line 12) | public class AlertCorrelationService method AlertCorrelationService (line 17) | public AlertCorrelationService(ILogger logger) method DeriveIncidentStatus (line 25) | public static (AlertStatus Status, DateTime? ResolvedAt) DeriveInciden... method GetCorrelationKey (line 43) | public string? GetCorrelationKey(AlertEvent alertEvent) method CorrelateAsync (line 64) | public async Task CorrelateAsync( FILE: src/NetworkOptimizer.Alerts/AlertProcessingService.cs class AlertProcessingService (line 20) | public class AlertProcessingService : BackgroundService method AlertProcessingService (line 38) | public AlertProcessingService( method ExecuteAsync (line 76) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method ProcessEventAsync (line 102) | private async Task ProcessEventAsync(AlertEvent alertEvent, Cancellati... method ProcessRuleMatchAsync (line 139) | private async Task ProcessRuleMatchAsync( method DeliverAsync (line 187) | private async Task DeliverAsync( method RefreshRuleCacheAsync (line 245) | private async Task RefreshRuleCacheAsync(IAlertRepository repository, ... method ResolveSourceUrl (line 267) | private string? ResolveSourceUrl(string? relativeUrl) method CleanupCooldowns (line 278) | private void CleanupCooldowns() FILE: src/NetworkOptimizer.Alerts/AlertRuleEvaluator.cs class AlertRuleEvaluator (line 10) | public class AlertRuleEvaluator method AlertRuleEvaluator (line 15) | public AlertRuleEvaluator(AlertCooldownTracker cooldownTracker, ILogge... method Evaluate (line 24) | public List Evaluate(AlertEvent alertEvent, IReadOnlyList GetDefaults() => FILE: src/NetworkOptimizer.Alerts/Delivery/DiscordChannelConfig.cs class DiscordChannelConfig (line 3) | public class DiscordChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/DiscordDeliveryChannel.cs class DiscordDeliveryChannel (line 13) | public class DiscordDeliveryChannel : IAlertDeliveryChannel method DiscordDeliveryChannel (line 20) | public DiscordDeliveryChannel(ILogger logger, ... method SendAsync (line 26) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 68) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method PostAsync (line 139) | private async Task PostAsync(string url, string payload, Cancell... method GetSeverityColorInt (line 174) | private static int GetSeverityColorInt(AlertSeverity severity) => seve... FILE: src/NetworkOptimizer.Alerts/Delivery/EmailChannelConfig.cs class EmailChannelConfig (line 3) | public class EmailChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/EmailDeliveryChannel.cs class EmailDeliveryChannel (line 13) | public class EmailDeliveryChannel : IAlertDeliveryChannel method EmailDeliveryChannel (line 22) | public EmailDeliveryChannel(ILogger logger, ISec... method SendAsync (line 28) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 54) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method SendEmailAsync (line 124) | private async Task SendEmailAsync(EmailChannelConfig config, str... method SendEmailCoreAsync (line 172) | private async Task<(bool Success, string? Error)> SendEmailCoreAsync(E... method GetSecureSocketOptions (line 214) | private static SecureSocketOptions GetSecureSocketOptions(EmailChannel... method GetSeverityColor (line 221) | private static string GetSeverityColor(Core.Enums.AlertSeverity severi... method LoadTemplate (line 230) | private static string LoadTemplate(string name) FILE: src/NetworkOptimizer.Alerts/Delivery/IAlertDeliveryChannel.cs type DigestSummary (line 10) | public record DigestSummary(int TotalCount, int CriticalCount, int Error... type IAlertDeliveryChannel (line 25) | public interface IAlertDeliveryChannel method SendAsync (line 35) | Task SendAsync(AlertEvent alertEvent, AlertHistoryEntry historyE... method SendDigestAsync (line 41) | Task SendDigestAsync(IReadOnlyList alerts, De... method TestAsync (line 46) | Task<(bool Success, string? Error)> TestAsync(DeliveryChannel channel,... FILE: src/NetworkOptimizer.Alerts/Delivery/ISecretDecryptor.cs type ISecretDecryptor (line 7) | public interface ISecretDecryptor method Decrypt (line 9) | string Decrypt(string encrypted); method Encrypt (line 10) | string Encrypt(string plaintext); FILE: src/NetworkOptimizer.Alerts/Delivery/NtfyChannelConfig.cs class NtfyChannelConfig (line 3) | public class NtfyChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/NtfyDeliveryChannel.cs class NtfyDeliveryChannel (line 15) | public class NtfyDeliveryChannel : IAlertDeliveryChannel method NtfyDeliveryChannel (line 23) | public NtfyDeliveryChannel(ILogger logger, HttpCl... method SendAsync (line 30) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 50) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method PostAsync (line 115) | private async Task PostAsync(NtfyChannelConfig config, string pa... method FormatMessage (line 166) | private static string FormatMessage(AlertEvent alertEvent) method MapPriority (line 197) | internal static int MapPriority(AlertSeverity severity) => severity sw... method MapTag (line 208) | internal static string MapTag(AlertSeverity severity) => severity switch FILE: src/NetworkOptimizer.Alerts/Delivery/SlackChannelConfig.cs class SlackChannelConfig (line 3) | public class SlackChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/SlackDeliveryChannel.cs class SlackDeliveryChannel (line 13) | public class SlackDeliveryChannel : IAlertDeliveryChannel method SlackDeliveryChannel (line 20) | public SlackDeliveryChannel(ILogger logger, Http... method SendAsync (line 26) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 64) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method PostAsync (line 126) | private async Task PostAsync(string url, string payload, Cancell... method FormatMessage (line 161) | private static string FormatMessage(AlertEvent alertEvent) method GetSeverityEmoji (line 182) | private static string GetSeverityEmoji(AlertSeverity severity) => seve... method GetSeverityColor (line 190) | private static string GetSeverityColor(AlertSeverity severity) => seve... FILE: src/NetworkOptimizer.Alerts/Delivery/TeamsChannelConfig.cs class TeamsChannelConfig (line 3) | public class TeamsChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/TeamsDeliveryChannel.cs class TeamsDeliveryChannel (line 13) | public class TeamsDeliveryChannel : IAlertDeliveryChannel method TeamsDeliveryChannel (line 20) | public TeamsDeliveryChannel(ILogger logger, Http... method SendAsync (line 26) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 82) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method BuildAdaptiveCardPayload (line 142) | private static string BuildAdaptiveCardPayload(List cardBody) method PostAsync (line 163) | private async Task PostAsync(string url, string payload, Cancell... method GetAdaptiveCardColor (line 198) | private static string GetAdaptiveCardColor(AlertSeverity severity) => ... FILE: src/NetworkOptimizer.Alerts/Delivery/TimestampFormatter.cs class TimestampFormatter (line 6) | internal static class TimestampFormatter method FormatLocal (line 11) | internal static string FormatLocal(DateTime utcTime) method FormatLocalShort (line 20) | internal static string FormatLocalShort(DateTime utcTime) method ToLocal (line 26) | private static DateTime ToLocal(DateTime utcTime) method GetTimezoneAbbreviation (line 37) | private static string GetTimezoneAbbreviation(DateTime localTime) FILE: src/NetworkOptimizer.Alerts/Delivery/WebhookChannelConfig.cs class WebhookChannelConfig (line 3) | public class WebhookChannelConfig FILE: src/NetworkOptimizer.Alerts/Delivery/WebhookDeliveryChannel.cs class WebhookDeliveryChannel (line 13) | public class WebhookDeliveryChannel : IAlertDeliveryChannel method WebhookDeliveryChannel (line 21) | public WebhookDeliveryChannel(ILogger logger, ... method SendAsync (line 28) | public async Task SendAsync(AlertEvent alertEvent, AlertHistoryE... method SendDigestAsync (line 64) | public async Task SendDigestAsync(IReadOnlyList TestAsync(DeliveryCha... method PostWithRetryAsync (line 114) | private async Task PostWithRetryAsync(WebhookChannelConfig confi... method ComputeHmacSha256 (line 166) | internal static string ComputeHmacSha256(string payload, string secret) method BuildTemplateModel (line 174) | private static object BuildTemplateModel(AlertEvent alertEvent) => new FILE: src/NetworkOptimizer.Alerts/DigestService.cs class DigestService (line 14) | public class DigestService : BackgroundService method DigestService (line 30) | public DigestService( method ExecuteAsync (line 40) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method CheckAndSendDigestsAsync (line 64) | private async Task CheckAndSendDigestsAsync(CancellationToken cancella... method LoadPersistedStateAsync (line 122) | private async Task LoadPersistedStateAsync(IAlertRepository repository... method MarkSentAsync (line 141) | private async Task MarkSentAsync(IDigestStateStore stateStore, int cha... method IsDue (line 155) | private bool IsDue(Models.DeliveryChannel channel) method CollapseAlerts (line 204) | private static IReadOnlyList CollapseAlerts(List ConsumeAsync( FILE: src/NetworkOptimizer.Alerts/Events/IAlertEventBus.cs type IAlertEventBus (line 6) | public interface IAlertEventBus method PublishAsync (line 11) | ValueTask PublishAsync(AlertEvent alertEvent, CancellationToken cancel... method ConsumeAsync (line 16) | IAsyncEnumerable ConsumeAsync(CancellationToken cancellati... FILE: src/NetworkOptimizer.Alerts/Interfaces/IAlertRepository.cs type IAlertRepository (line 9) | public interface IAlertRepository method GetRulesAsync (line 12) | Task> GetRulesAsync(CancellationToken cancellationToke... method GetEnabledRulesAsync (line 13) | Task> GetEnabledRulesAsync(CancellationToken cancellat... method GetRuleAsync (line 14) | Task GetRuleAsync(int id, CancellationToken cancellationTo... method SaveRuleAsync (line 15) | Task SaveRuleAsync(AlertRule rule, CancellationToken cancellation... method UpdateRuleAsync (line 16) | Task UpdateRuleAsync(AlertRule rule, CancellationToken cancellationTok... method DeleteRuleAsync (line 17) | Task DeleteRuleAsync(int id, CancellationToken cancellationToken = def... method GetChannelsAsync (line 20) | Task> GetChannelsAsync(CancellationToken cancell... method GetEnabledChannelsAsync (line 21) | Task> GetEnabledChannelsAsync(CancellationToken ... method GetChannelAsync (line 22) | Task GetChannelAsync(int id, CancellationToken cance... method SaveChannelAsync (line 23) | Task SaveChannelAsync(DeliveryChannel channel, CancellationToken ... method UpdateChannelAsync (line 24) | Task UpdateChannelAsync(DeliveryChannel channel, CancellationToken can... method DeleteChannelAsync (line 25) | Task DeleteChannelAsync(int id, CancellationToken cancellationToken = ... method SaveAlertAsync (line 28) | Task SaveAlertAsync(AlertHistoryEntry alert, CancellationToken ca... method UpdateAlertAsync (line 29) | Task UpdateAlertAsync(AlertHistoryEntry alert, CancellationToken cance... method GetActiveAlertsAsync (line 30) | Task> GetActiveAlertsAsync(CancellationToken c... method GetAlertHistoryAsync (line 31) | Task> GetAlertHistoryAsync(int limit = 100, st... method GetAlertAsync (line 32) | Task GetAlertAsync(int id, CancellationToken cance... method GetAlertsForDigestAsync (line 33) | Task> GetAlertsForDigestAsync(DateTime since, ... method GetUnresolvedAlertsAsync (line 34) | Task> GetUnresolvedAlertsAsync(CancellationTok... method GetAlertsByIncidentIdAsync (line 35) | Task> GetAlertsByIncidentIdAsync(int incidentI... method SaveIncidentAsync (line 38) | Task SaveIncidentAsync(AlertIncident incident, CancellationToken ... method UpdateIncidentAsync (line 39) | Task UpdateIncidentAsync(AlertIncident incident, CancellationToken can... method GetActiveIncidentByKeyAsync (line 40) | Task GetActiveIncidentByKeyAsync(string correlationKey... method GetIncidentsAsync (line 41) | Task> GetIncidentsAsync(int limit = 50, Cancellati... method GetIncidentAsync (line 42) | Task GetIncidentAsync(int id, CancellationToken cancel... FILE: src/NetworkOptimizer.Alerts/Interfaces/IDigestStateStore.cs type IDigestStateStore (line 6) | public interface IDigestStateStore method GetLastSentAsync (line 8) | Task GetLastSentAsync(int channelId, CancellationToken canc... method SetLastSentAsync (line 9) | Task SetLastSentAsync(int channelId, DateTime sentAt, CancellationToke... FILE: src/NetworkOptimizer.Alerts/Interfaces/IScheduleRepository.cs type IScheduleRepository (line 8) | public interface IScheduleRepository method GetAllAsync (line 10) | Task> GetAllAsync(CancellationToken cancellationTo... method GetEnabledAsync (line 11) | Task> GetEnabledAsync(CancellationToken cancellati... method GetByIdAsync (line 12) | Task GetByIdAsync(int id, CancellationToken cancellati... method SaveAsync (line 13) | Task SaveAsync(ScheduledTask task, CancellationToken cancellation... method UpdateAsync (line 14) | Task UpdateAsync(ScheduledTask task, CancellationToken cancellationTok... method UpdateNextRunAsync (line 15) | Task UpdateNextRunAsync(int id, DateTime nextRun, CancellationToken ca... method UpdateRunStatusAsync (line 16) | Task UpdateRunStatusAsync(int id, DateTime lastRun, DateTime? nextRun,... method DeleteAsync (line 17) | Task DeleteAsync(int id, CancellationToken cancellationToken = default); FILE: src/NetworkOptimizer.Alerts/Models/AlertHistoryEntry.cs class AlertHistoryEntry (line 8) | public class AlertHistoryEntry FILE: src/NetworkOptimizer.Alerts/Models/AlertIncident.cs class AlertIncident (line 8) | public class AlertIncident FILE: src/NetworkOptimizer.Alerts/Models/AlertRule.cs class AlertRule (line 8) | public class AlertRule FILE: src/NetworkOptimizer.Alerts/Models/DeliveryChannel.cs type DeliveryChannelType (line 8) | public enum DeliveryChannelType class DeliveryChannel (line 21) | public class DeliveryChannel FILE: src/NetworkOptimizer.Alerts/Models/ScheduledTask.cs class ScheduledTask (line 6) | public class ScheduledTask FILE: src/NetworkOptimizer.Alerts/ScheduleService.cs class ScheduleService (line 16) | public class ScheduleService : BackgroundService method ScheduleService (line 48) | public ScheduleService( method ExecuteAsync (line 58) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method EvaluateSchedulesAsync (line 99) | private async Task EvaluateSchedulesAsync(CancellationToken ct) method ExecuteScheduledTaskAsync (line 163) | private async Task ExecuteScheduledTaskAsync(int taskId, string taskTy... method RunNowAsync (line 276) | public async Task RunNowAsync(int scheduledTaskId) method IsTaskRunning (line 305) | public bool IsTaskRunning(int scheduledTaskId) method CalculateNextRun (line 319) | public static DateTime CalculateNextRun(int frequencyMinutes, int? sta... method FormatTaskType (line 363) | private static string FormatTaskType(string taskType) => taskType switch FILE: src/NetworkOptimizer.Audit/Analyzers/AuditScorer.cs class AuditScorer (line 11) | public class AuditScorer method AuditScorer (line 15) | public AuditScorer(ILogger logger) method CalculateScore (line 23) | public int CalculateScore(AuditResult auditResult) method CalculateFilteredScore (line 69) | public int CalculateFilteredScore(List filteredIssues, Aud... method GetScoreLabel (line 109) | public static string GetScoreLabel(int score) => score switch method CalculateDeductionForSeverity (line 120) | private int CalculateDeductionForSeverity(List issues, Aud... method CalculateHardeningBonus (line 138) | private int CalculateHardeningBonus(AuditStatistics stats, int hardeni... method DeterminePosture (line 167) | public SecurityPosture DeterminePosture(int score, int criticalIssues) method GetPostureDescription (line 190) | public string GetPostureDescription(SecurityPosture posture) method GetRecommendations (line 206) | public List GetRecommendations(AuditResult auditResult) method GenerateExecutiveSummary (line 272) | public string GenerateExecutiveSummary(AuditResult auditResult) FILE: src/NetworkOptimizer.Audit/Analyzers/FirewallGroupHelper.cs class FirewallGroupHelper (line 10) | public static class FirewallGroupHelper method ResolvePortGroup (line 15) | public static string? ResolvePortGroup( method ResolveAddressGroup (line 43) | public static List? ResolveAddressGroup( method IncludesPort (line 73) | public static bool IncludesPort(string? portSpec, string port) method AllowsProtocol (line 116) | public static bool AllowsProtocol(string? ruleProtocol, bool matchOppo... method ProtocolIncludes (line 134) | private static bool ProtocolIncludes(string protocol, string target) method RuleAllowsPortAndProtocol (line 152) | public static bool RuleAllowsPortAndProtocol(Models.FirewallRule rule,... method RuleBlocksPortAndProtocol (line 173) | public static bool RuleBlocksPortAndProtocol(Models.FirewallRule rule,... method BlocksProtocol (line 200) | public static bool BlocksProtocol(string? ruleProtocol, bool matchOppo... FILE: src/NetworkOptimizer.Audit/Analyzers/FirewallRuleAnalyzer.cs class FirewallRuleAnalyzer (line 13) | public class FirewallRuleAnalyzer method FirewallRuleAnalyzer (line 18) | public FirewallRuleAnalyzer(ILogger logger, Fire... method SetFirewallGroups (line 28) | public void SetFirewallGroups(IEnumerable? groups) method ExtractFirewallRules (line 34) | public List ExtractFirewallRules(JsonElement deviceData) method ExtractFirewallPolicies (line 40) | public List ExtractFirewallPolicies(JsonElement? firewal... method ParseFirewallPolicy (line 46) | public FirewallRule? ParseFirewallPolicy(JsonElement policyElement) method DetectShadowedRules (line 55) | public List DetectShadowedRules(List rules, ... method DetectPermissiveRules (line 217) | public List DetectPermissiveRules(List rules... method DetectOrphanedRules (line 328) | public List DetectOrphanedRules(List rules, ... method CheckInterVlanIsolation (line 401) | public List CheckInterVlanIsolation(List rul... method DetectNetworkIsolationExceptions (line 640) | public List DetectNetworkIsolationExceptions(List GetInvolvedIsolatedNetworks(FirewallRule rul... method GetIsolationExceptionPurposeSuffix (line 749) | private static string GetIsolationExceptionPurposeSuffix(List CheckInternetDisabledBroadAllow( method IsBroadExternalAccess (line 1181) | private static bool IsBroadExternalAccess( method ParsePorts (line 1254) | private static HashSet ParsePorts(string portSpec) method GetBroadAccessDescription (line 1287) | private static string GetBroadAccessDescription(FirewallRule rule, str... method AnalyzeFirewallRules (line 1317) | public List AnalyzeFirewallRules(List rules,... method AnalyzeManagementNetworkFirewallAccess (line 1344) | public List AnalyzeManagementNetworkFirewallAccess(List... method Allows5GRegistrationDomains (line 1634) | private static bool Allows5GRegistrationDomains(FirewallRule rule) method AppliesToDestinationNetwork (line 1649) | private static bool AppliesToDestinationNetwork(FirewallRule rule, str... method AppliesToDestinationNetwork (line 1700) | private static bool AppliesToDestinationNetwork(FirewallRule rule, Net... method DestinationCidrsCoversNetworkSubnet (line 1726) | private static bool DestinationCidrsCoversNetworkSubnet(FirewallRule r... method HasNetworkPair (line 1736) | private static bool HasNetworkPair(FirewallRule rule, NetworkInfo sour... method BlocksAllTraffic (line 1746) | private static bool BlocksAllTraffic(FirewallRule rule) method TargetsExternalZone (line 1777) | private static bool TargetsExternalZone(FirewallRule rule, string? ext... method IsAllowRuleEclipsedByBlockRule (line 1794) | private bool IsAllowRuleEclipsedByBlockRule( method IsNonWebAllowRuleEclipsed (line 1822) | private bool IsNonWebAllowRuleEclipsed( method Is5GModemAllowRuleEclipsed (line 1859) | private bool Is5GModemAllowRuleEclipsed( method WouldBlockSameTraffic (line 1902) | private static bool WouldBlockSameTraffic(FirewallRule blockRule, Fire... method BlockRuleCoversAllowProtocols (line 1962) | private static bool BlockRuleCoversAllowProtocols(FirewallRule blockRu... method IsExternalZoneRule (line 1984) | private static bool IsExternalZoneRule(FirewallRule rule, string? exte... method HasEffectiveInternetAccess (line 2000) | private bool HasEffectiveInternetAccess( method IsInternetBlockedViaFirewall (line 2033) | internal bool IsInternetBlockedViaFirewall( method MatchesInternetTrafficPattern (line 2067) | private static bool MatchesInternetTrafficPattern(FirewallRule rule, N... method GetExceptionPatternDescription (line 2097) | private static string GetExceptionPatternDescription(FirewallRule deny... method GetSourceToDestinationDescription (line 2126) | private static string GetSourceToDestinationDescription(FirewallRule r... method GetNetworkPurposeFromRule (line 2153) | private static string? GetNetworkPurposeFromRule(FirewallRule rule, Li... method GetDestinationNetworkPurposeSuffix (line 2226) | private static string GetDestinationNetworkPurposeSuffix(FirewallRule ... method IsKnownManagementServiceException (line 2297) | private static bool IsKnownManagementServiceException(FirewallRule all... FILE: src/NetworkOptimizer.Audit/Analyzers/FirewallRuleEvaluator.cs class FirewallRuleEvaluator (line 10) | public static class FirewallRuleEvaluator class EvaluationResult (line 15) | public class EvaluationResult method Evaluate (line 64) | public static EvaluationResult Evaluate( method IsTrafficBlocked (line 136) | public static bool IsTrafficBlocked( method IsTrafficAllowed (line 150) | public static bool IsTrafficAllowed( method GetEffectiveBlockRule (line 164) | public static FirewallRule? GetEffectiveBlockRule( method GetEffectiveAllowRule (line 179) | public static FirewallRule? GetEffectiveAllowRule( FILE: src/NetworkOptimizer.Audit/Analyzers/FirewallRuleOverlapDetector.cs class FirewallRuleOverlapDetector (line 12) | public static class FirewallRuleOverlapDetector method RulesOverlap (line 18) | public static bool RulesOverlap(FirewallRule rule1, FirewallRule rule2) method RulesOverlap (line 30) | public static bool RulesOverlap(FirewallRule rule1, FirewallRule rule2... method ZonesOverlap (line 47) | public static bool ZonesOverlap(FirewallRule rule1, FirewallRule rule2) method ProtocolsOverlap (line 68) | public static bool ProtocolsOverlap(FirewallRule rule1, FirewallRule r... method ProtocolsMatch (line 114) | private static bool ProtocolsMatch(string p1, string p2) method SourcesOverlap (line 131) | public static bool SourcesOverlap(FirewallRule rule1, FirewallRule rule2) method SourcesOverlap (line 143) | public static bool SourcesOverlap(FirewallRule rule1, FirewallRule rul... method ListsOverlapWithOpposite (line 193) | private static bool ListsOverlapWithOpposite( method AllItemsInExceptionList (line 225) | private static bool AllItemsInExceptionList(List normalList, Lis... method StringListsIntersect (line 251) | private static bool StringListsIntersect(List list1, List ports1, b... method IcmpTypesOverlap (line 556) | public static bool IcmpTypesOverlap(FirewallRule rule1, FirewallRule r... method IpRangesOverlap (line 582) | public static bool IpRangesOverlap(List ips1, List ips2) method IpOverlapsWithNetworks (line 609) | public static bool IpOverlapsWithNetworks(List? ips, List domains1, List ... method PortStringsOverlap (line 699) | public static bool PortStringsOverlap(string ports1, string ports2) method ParsePortString (line 710) | public static HashSet ParsePortString(string portString) method IsNarrowerScope (line 742) | public static bool IsNarrowerScope(FirewallRule rule1, FirewallRule ru... method GetSourceScopeScore (line 777) | private static int GetSourceScopeScore(FirewallRule rule) method GetDestinationScopeScore (line 801) | private static int GetDestinationScopeScore(FirewallRule rule) method GetPortSpecificityPenalty (line 849) | private static int GetPortSpecificityPenalty(string? portString) method GetListSizeBonus (line 868) | private static int GetListSizeBonus(int count) method GetCidrBonus (line 878) | private static int GetCidrBonus(List? ips) FILE: src/NetworkOptimizer.Audit/Analyzers/FirewallRuleParser.cs class FirewallRuleParser (line 14) | public class FirewallRuleParser method FirewallRuleParser (line 34) | public FirewallRuleParser(ILogger logger) method SetFirewallGroups (line 43) | public void SetFirewallGroups(IEnumerable? groups) method ExtractFirewallRules (line 58) | public List ExtractFirewallRules(JsonElement deviceData) method ExtractFirewallPolicies (line 102) | public List ExtractFirewallPolicies(JsonElement? firewal... method ParseFirewallPolicy (line 127) | public FirewallRule? ParseFirewallPolicy(JsonElement policy) method ParseFirewallRule (line 368) | public FirewallRule? ParseFirewallRule(JsonElement rule) method ResolveAddressGroup (line 693) | private List? ResolveAddressGroup(string groupId) method ResolvePortGroup (line 699) | private string? ResolvePortGroup(string groupId) method MapRulesetToZones (line 709) | public static (string? SourceZoneId, string? DestinationZoneId) MapRul... method ParseCombinedTrafficRule (line 754) | public FirewallRule? ParseCombinedTrafficRule(JsonElement rule) method ExtractCombinedTrafficRules (line 853) | public List ExtractCombinedTrafficRules(JsonElement root) FILE: src/NetworkOptimizer.Audit/Analyzers/HttpAppIds.cs class HttpAppIds (line 7) | public static class HttpAppIds method IsHttpApp (line 34) | public static bool IsHttpApp(int appId) => AllHttpAppIds.Contains(appId); method IsWebCategory (line 51) | public static bool IsWebCategory(int categoryId) => AllWebCategoryIds.... FILE: src/NetworkOptimizer.Audit/Analyzers/PortSecurityAnalyzer.cs class PortSecurityAnalyzer (line 18) | public class PortSecurityAnalyzer method SetProtectCameras (line 36) | public void SetProtectCameras(ProtectCameraCollection? protectCameras) method PortSecurityAnalyzer (line 50) | public PortSecurityAnalyzer(ILogger logger) method PortSecurityAnalyzer (line 55) | public PortSecurityAnalyzer( method InitializeRules (line 82) | private List InitializeRules() method InitializeWirelessRules (line 99) | private List InitializeWirelessRules() method AddRule (line 112) | public void AddRule(IAuditRule rule) method SetAllowanceSettings (line 120) | public void SetAllowanceSettings(DeviceAllowanceSettings settings) method ExtractSwitches (line 136) | public List ExtractSwitches(JsonElement deviceData, List ExtractSwitches(JsonElement deviceData, List ExtractSwitches(JsonElement deviceData, List ExtractSwitches(JsonElement deviceData, List BuildClie... method ParseSwitch (line 337) | private SwitchInfo? ParseSwitch(JsonElement device, List ... method ParseSwitch (line 343) | private SwitchInfo? ParseSwitch(JsonElement device, List ... method ParseSwitch (line 349) | private SwitchInfo? ParseSwitch( method DetermineDeviceRole (line 447) | private (bool IsGateway, bool IsAccessPoint) DetermineDeviceRole(JsonE... method ParseSwitchCapabilities (line 487) | private SwitchCapabilities ParseSwitchCapabilities(JsonElement device) method ParsePort (line 509) | private PortInfo? ParsePort(JsonElement port, SwitchInfo switchInfo, L... method ParsePort (line 515) | private PortInfo? ParsePort( method AnalyzePorts (line 710) | public List AnalyzePorts(List switches, List AnalyzeHardening(List switches, List switches) method IsCameraDeviceName (line 854) | private static bool IsCameraDeviceName(string? portName) => DeviceName... type ApInfo (line 859) | public record ApInfo(string Name, string? Model, string? ModelName); method ExtractAccessPointLookup (line 864) | public Dictionary ExtractAccessPointLookup(JsonElement... method ExtractAccessPointInfoLookup (line 874) | public Dictionary ExtractAccessPointInfoLookup(JsonEle... method ExtractWirelessClients (line 911) | public List ExtractWirelessClients( method ExtractWirelessClients (line 921) | public List ExtractWirelessClients( method AnalyzeWirelessClients (line 1010) | public List AnalyzeWirelessClients(List AnalyzeProtectCameraPlacement( method FindPortByUplinkMac (line 1142) | private static (SwitchInfo Switch, PortInfo Port)? FindPortByUplinkMac( FILE: src/NetworkOptimizer.Audit/Analyzers/UpnpSecurityAnalyzer.cs class UpnpSecurityAnalyzer (line 12) | public class UpnpSecurityAnalyzer method UpnpSecurityAnalyzer (line 63) | public UpnpSecurityAnalyzer(ILogger logger) method Analyze (line 76) | public UpnpAnalysisResult Analyze( method AnalyzeStaticPortForwards (line 203) | private void AnalyzeStaticPortForwards(List stat... method AnalyzeUpnpRules (line 312) | private void AnalyzeUpnpRules(List upnpRules, Li... method ParsePorts (line 395) | private List ParsePorts(string portSpec) method IsSourceRestricted (line 446) | private static bool IsSourceRestricted(UniFiPortForwardRule rule) class UpnpAnalysisResult (line 465) | public class UpnpAnalysisResult FILE: src/NetworkOptimizer.Audit/Analyzers/VlanAnalyzer.cs class VlanAnalyzer (line 14) | public class VlanAnalyzer method VlanAnalyzer (line 45) | public VlanAnalyzer(ILogger logger) method ExtractNetworks (line 53) | public List ExtractNetworks(JsonElement deviceData, Firew... method ApplyPurposeOverrides (line 128) | public void ApplyPurposeOverrides(List networks, Dictiona... method ParseNetwork (line 172) | private NetworkInfo? ParseNetwork(JsonElement network, FirewallZoneLoo... method ExtractDnsServers (line 248) | private static List ExtractDnsServers(JsonElement network) method NormalizeSubnet (line 274) | private static string? NormalizeSubnet(string? subnet) method ClassifyNetwork (line 316) | public NetworkPurpose ClassifyNetwork(string networkName, string? purp... method ContainsWord (line 476) | private static bool ContainsWord(string text, string word) method IsIoTNetwork (line 506) | public bool IsIoTNetwork(string? networkName) method IsMediaNetwork (line 517) | public bool IsMediaNetwork(string? networkName) method IsHomeNetwork (line 529) | public bool IsHomeNetwork(string? networkName) method IsGamingNetwork (line 540) | public bool IsGamingNetwork(string? networkName) method IsSecurityNetwork (line 552) | public bool IsSecurityNetwork(string? networkName) method IsManagementNetwork (line 564) | public bool IsManagementNetwork(string? networkName) method FindIoTNetwork (line 575) | public NetworkInfo? FindIoTNetwork(List networks) method FindSecurityNetwork (line 583) | public NetworkInfo? FindSecurityNetwork(List networks) method FindPrinterNetwork (line 591) | public NetworkInfo? FindPrinterNetwork(List networks) method GetNetworkDisplay (line 599) | public string GetNetworkDisplay(NetworkInfo network) method AnalyzeDnsConfiguration (line 608) | public List AnalyzeDnsConfiguration(List netw... method AnalyzeGatewayConfiguration (line 655) | public List AnalyzeGatewayConfiguration(List ... method AnalyzeManagementVlanDhcp (line 691) | public List AnalyzeManagementVlanDhcp( method AnalyzeNetworkIsolation (line 762) | public List AnalyzeNetworkIsolation( method IsIsolatedViaFirewall (line 885) | private bool IsIsolatedViaFirewall( method RuleBlocksToNetwork (line 942) | private static bool RuleBlocksToNetwork(FirewallRule rule, NetworkInfo... method AnalyzeInternetAccess (line 985) | public List AnalyzeInternetAccess( method HasEffectiveInternetAccess (line 1065) | private bool HasEffectiveInternetAccess( method AnalyzeInfrastructureVlanPlacement (line 1103) | public List AnalyzeInfrastructureVlanPlacement(JsonElement... method FindNetworkByIp (line 1187) | private NetworkInfo? FindNetworkByIp(string ip, List netw... FILE: src/NetworkOptimizer.Audit/ConfigAuditEngine.cs class ConfigAuditEngine (line 23) | public class ConfigAuditEngine class AuditContext (line 38) | private sealed class AuditContext class ThreatContext (line 105) | public class ThreatContext method ConfigAuditEngine (line 128) | public ConfigAuditEngine( method RunAuditAsync (line 172) | public Task RunAuditAsync(string deviceDataJson, string? ... method RunAuditAsync (line 182) | public Task RunAuditAsync(string deviceDataJson, List RunAuditAsync(string deviceDataJson, List RunAuditAsync( method RunAuditAsync (line 218) | public Task RunAuditAsync( method RunAuditAsync (line 241) | public Task RunAuditAsync( method RunAuditAsync (line 271) | public async Task RunAuditAsync(AuditRequest request) method InitializeAuditContext (line 334) | private AuditContext InitializeAuditContext(AuditRequest request) method DetermineExternalZoneId (line 448) | private string? DetermineExternalZoneId(List? netw... method ExecutePhase1_ExtractNetworks (line 488) | private void ExecutePhase1_ExtractNetworks(AuditContext ctx) method ExecutePhase2_ExtractSwitches (line 498) | private void ExecutePhase2_ExtractSwitches(AuditContext ctx) method ExecutePhase3_AnalyzePortSecurity (line 508) | private void ExecutePhase3_AnalyzePortSecurity(AuditContext ctx) method ExecutePhase3a_ProtectCameraFallback (line 550) | private void ExecutePhase3a_ProtectCameraFallback(AuditContext ctx) method ExecutePhase3b_AnalyzeWirelessClients (line 575) | private void ExecutePhase3b_AnalyzeWirelessClients(AuditContext ctx) method ExecutePhase3c_AnalyzeOfflineClients (line 593) | private void ExecutePhase3c_AnalyzeOfflineClients(AuditContext ctx) method BuildOnlineClientMacSet (line 634) | private static HashSet BuildOnlineClientMacSet(List RunAuditFromFileAsync(string jsonFilePa... method GetRecommendations (line 1314) | public List GetRecommendations(AuditResult auditResult) method GenerateExecutiveSummary (line 1322) | public string GenerateExecutiveSummary(AuditResult auditResult) method GenerateTextReport (line 1330) | public string GenerateTextReport(AuditResult auditResult) method ExportToJson (line 1458) | public string ExportToJson(AuditResult auditResult) method SaveResults (line 1472) | public void SaveResults(AuditResult auditResult, string outputPath, st... method IsIotDeviceName (line 1488) | private static bool IsIotDeviceName(string? portName) => DeviceNameHin... FILE: src/NetworkOptimizer.Audit/Constants/DetectionConstants.cs class DetectionConstants (line 6) | public static class DetectionConstants FILE: src/NetworkOptimizer.Audit/DeviceNameHints.cs class DeviceNameHints (line 9) | public static class DeviceNameHints method IsIoTDeviceName (line 32) | public static bool IsIoTDeviceName(string? portName) method IsCameraDeviceName (line 44) | public static bool IsCameraDeviceName(string? portName) method IsAccessPointName (line 57) | public static bool IsAccessPointName(string? portName) FILE: src/NetworkOptimizer.Audit/Dns/DnatDnsAnalyzer.cs class DnatCoverageResult (line 13) | public class DnatCoverageResult class DnatRuleInfo (line 69) | public class DnatRuleInfo class DnatDnsAnalyzer (line 141) | public class DnatDnsAnalyzer method Analyze (line 151) | public DnatCoverageResult Analyze(JsonElement? natRulesData, List ParseDnatDnsRules(JsonElement natRulesData,... method DestinationIncludesPort53 (line 358) | private static bool DestinationIncludesPort53(JsonElement destFilter, ... method ResolveFilterAddress (line 387) | private static string? ResolveFilterAddress(JsonElement filter, Dictio... method GetFirewallGroupIds (line 421) | private static List GetFirewallGroupIds(JsonElement filter) method ParseSourceFilter (line 442) | private static DnatRuleInfo? ParseSourceFilter( method IncludesUdp (line 636) | private static bool IncludesUdp(string? protocol) method IncludesPort53 (line 655) | private static bool IncludesPort53(string? port) method CidrCoversSubnet (line 701) | public static bool CidrCoversSubnet(string ruleCidr, string networkSub... FILE: src/NetworkOptimizer.Audit/Dns/DnsAppIds.cs class DnsAppIds (line 8) | public static class DnsAppIds method IsDnsApp (line 33) | public static bool IsDnsApp(int appId) => AllDnsAppIds.Contains(appId); method IsDns53App (line 38) | public static bool IsDns53App(int appId) => appId == Dns; method IsPort853App (line 43) | public static bool IsPort853App(int appId) => appId == DnsOverTls; method IsPort443App (line 48) | public static bool IsPort443App(int appId) => appId == DnsOverHttps; FILE: src/NetworkOptimizer.Audit/Dns/DnsSecurityAnalyzer.cs class DnsSecurityAnalyzer (line 14) | public class DnsSecurityAnalyzer method DnsSecurityAnalyzer (line 38) | public DnsSecurityAnalyzer(ILogger logger, ThirdP... method AnalyzeAsync (line 47) | public Task AnalyzeAsync(JsonElement? settingsData,... method AnalyzeAsync (line 53) | public Task AnalyzeAsync(JsonElement? settingsData,... method AnalyzeAsync (line 59) | public Task AnalyzeAsync(JsonElement? settingsData,... method AnalyzeAsync (line 66) | public Task AnalyzeAsync(JsonElement? settingsData,... method AnalyzeAsync (line 77) | public async Task AnalyzeAsync(JsonElement? setting... method AnalyzeDohConfiguration (line 158) | private void AnalyzeDohConfiguration(JsonElement settings, DnsSecurity... method ParseDohSettings (line 187) | private void ParseDohSettings(JsonElement dohSettings, DnsSecurityResu... method ParseWanDnsSettings (line 259) | private void ParseWanDnsSettings(JsonElement dnsSettings, DnsSecurityR... method ExtractWanDnsFromDevices (line 286) | private void ExtractWanDnsFromDevices(JsonElement deviceData, DnsSecur... method EnrichWanDnsFromNetworkConfigs (line 390) | private void EnrichWanDnsFromNetworkConfigs(List n... method AnalyzeFirewallRules (line 441) | private void AnalyzeFirewallRules(List firewallRules, Li... method AddCoveredNetworks (line 671) | private static void AddCoveredNetworks( method CalculateCoverage (line 687) | private bool CalculateCoverage(List networks, HashSet servers, List IdentifyExpectedDnsProviderAsync(... type WanValidationResults (line 1408) | private record WanValidationResults( method ValidateAllWanInterfacesAsync (line 1413) | private async Task ValidateAllWanInterfacesAsync... method ValidateSingleWanInterfaceAsync (line 1438) | private async Task> ValidateSingleWanInterfaceAsync( method CheckNextDnsOrdering (line 1484) | private void CheckNextDnsOrdering(WanInterfaceDns wanDns, List BuildGlobalValidDnsTargets(List networks) method AnalyzeDeviceDnsConfiguration (line 1682) | private void AnalyzeDeviceDnsConfiguration(List switches, ... method AnalyzeAllDeviceDnsConfiguration (line 1799) | private void AnalyzeAllDeviceDnsConfiguration(JsonElement deviceData, ... method AnalyzeThirdPartyDnsAsync (line 1914) | private async Task AnalyzeThirdPartyDnsAsync(List network... method CheckDnsConsistencyAcrossNetworks (line 1996) | private void CheckDnsConsistencyAcrossNetworks( method CheckDnsIpConsistency (line 2197) | private void CheckDnsIpConsistency( method AnalyzeDnatDnsRules (line 2334) | private void AnalyzeDnatDnsRules(JsonElement natRulesData, List ParseIpOrRange(string? ipOrRange) method IsValidRedirectTarget (line 2598) | public static bool IsValidRedirectTarget(string? redirectIp, HashSet protoco... class DnsStampInfo (line 205) | public class DnsStampInfo method GetDisplaySummary (line 222) | public string GetDisplaySummary() FILE: src/NetworkOptimizer.Audit/Dns/DohProviderRegistry.cs class DohProviderRegistry (line 9) | public static class DohProviderRegistry method DefaultDnsResolver (line 17) | private static async Task DefaultDnsResolver(IPAddress ipAddr... method ResetDnsResolver (line 26) | public static void ResetDnsResolver() => DnsResolver = DefaultDnsResol... method IdentifyProvider (line 129) | public static DohProviderInfo? IdentifyProvider(string hostname) method IdentifyProviderFromName (line 150) | public static DohProviderInfo? IdentifyProviderFromName(string serverN... method IdentifyProviderFromIp (line 171) | public static DohProviderInfo? IdentifyProviderFromIp(string ip) method IdentifyProviderFromIpWithPtrAsync (line 192) | public static async Task<(DohProviderInfo? Provider, string? ReverseDn... method ReverseDnsLookupAsync (line 227) | public static async Task ReverseDnsLookupAsync(string ip) method ExtractNextDnsProfileId (line 247) | public static string? ExtractNextDnsProfileId(string? path) method ExtractProfileIdFromNextDnsIpv6 (line 260) | public static string? ExtractProfileIdFromNextDnsIpv6(string? ip) method NextDnsIpv6MatchesProfile (line 277) | public static bool NextDnsIpv6MatchesProfile(string ip, string? expect... class DohProviderInfo (line 302) | public class DohProviderInfo method MatchesIp (line 316) | public bool MatchesIp(string ip) FILE: src/NetworkOptimizer.Audit/Dns/ThirdPartyDnsDetector.cs class ThirdPartyDnsDetector (line 12) | public class ThirdPartyDnsDetector method ThirdPartyDnsDetector (line 17) | public ThirdPartyDnsDetector(ILogger logger, Ht... class ThirdPartyDnsInfo (line 26) | public class ThirdPartyDnsInfo class ExternalDnsInfo (line 42) | public class ExternalDnsInfo method DetectThirdPartyDnsAsync (line 60) | public async Task> DetectThirdPartyDnsAsync(Li... method DetectExternalDns (line 181) | public List DetectExternalDns(List netwo... method GetPublicDnsProviderName (line 237) | private static string? GetPublicDnsProviderName(string ipAddress) method ProbePiholeAsync (line 257) | private async Task<(bool IsPihole, string? Version)> ProbePiholeAsync(... method TryProbePiholeEndpointAsync (line 296) | private async Task<(bool IsPihole, string? Version)> TryProbePiholeEnd... method TryProbePiholeEndpointAsync (line 351) | private async Task<(bool IsPihole, string? Version)> TryProbePiholeEnd... method ProbeAdGuardHomeAsync (line 415) | private async Task<(bool IsAdGuardHome, string? Version)> ProbeAdGuard... method TryProbeAdGuardHomeEndpointAsync (line 454) | private async Task<(bool IsAdGuardHome, string? Version)> TryProbeAdGu... method TryProbeAdGuardHomeEndpointAsync (line 510) | private async Task<(bool IsAdGuardHome, string? Version)> TryProbeAdGu... FILE: src/NetworkOptimizer.Audit/IssueTypes.cs class IssueTypes (line 7) | public static class IssueTypes FILE: src/NetworkOptimizer.Audit/Models/AuditIssue.cs class AuditIssue (line 6) | public class AuditIssue FILE: src/NetworkOptimizer.Audit/Models/AuditRequest.cs class AuditRequest (line 11) | public class AuditRequest FILE: src/NetworkOptimizer.Audit/Models/AuditResult.cs class AuditResult (line 6) | public class AuditResult class DnsSecurityInfo (line 87) | public class DnsSecurityInfo class ThirdPartyDnsNetwork (line 283) | public class ThirdPartyDnsNetwork class AuditStatistics (line 309) | public class AuditStatistics type SecurityPosture (line 357) | public enum SecurityPosture FILE: src/NetworkOptimizer.Audit/Models/AuditSeverity.cs type AuditSeverity (line 6) | public enum AuditSeverity FILE: src/NetworkOptimizer.Audit/Models/DeviceAllowanceSettings.cs class DeviceAllowanceSettings (line 8) | public class DeviceAllowanceSettings method IsStreamingDeviceAllowed (line 44) | public bool IsStreamingDeviceAllowed(string? vendor) method IsSmartSpeakerAllowed (line 62) | public bool IsSmartSpeakerAllowed(string? vendor) method IsSmartTVAllowed (line 80) | public bool IsSmartTVAllowed(string? vendor) method IsMediaPlayerAllowed (line 107) | public bool IsMediaPlayerAllowed() FILE: src/NetworkOptimizer.Audit/Models/DeviceDetectionResult.cs type DetectionSource (line 8) | public enum DetectionSource class DeviceDetectionResult (line 44) | public class DeviceDetectionResult FILE: src/NetworkOptimizer.Audit/Models/FirewallAction.cs type FirewallAction (line 6) | public enum FirewallAction class FirewallActionExtensions (line 20) | public static class FirewallActionExtensions method Parse (line 25) | public static FirewallAction Parse(string? action) => method IsAllowAction (line 40) | public static bool IsAllowAction(this FirewallAction action) => method IsBlockAction (line 46) | public static bool IsBlockAction(this FirewallAction action) => FILE: src/NetworkOptimizer.Audit/Models/FirewallRule.cs class FirewallRule (line 8) | public class FirewallRule method BlocksNewConnections (line 225) | public bool BlocksNewConnections() method IsAnySource (line 250) | public bool IsAnySource() method IsAnyDestination (line 263) | public bool IsAnyDestination() method AllowsNewConnections (line 276) | public bool AllowsNewConnections() method AppliesToSourceNetwork (line 306) | public bool AppliesToSourceNetwork(NetworkInfo network) FILE: src/NetworkOptimizer.Audit/Models/NetworkInfo.cs type NetworkPurpose (line 7) | public enum NetworkPurpose class NetworkPurposeExtensions (line 73) | public static class NetworkPurposeExtensions method ToDisplayString (line 78) | public static string ToDisplayString(this NetworkPurpose purpose) => p... class NetworkInfo (line 99) | public class NetworkInfo FILE: src/NetworkOptimizer.Audit/Models/OfflineClientInfo.cs class OfflineClientInfo (line 8) | public class OfflineClientInfo FILE: src/NetworkOptimizer.Audit/Models/PortInfo.cs class PortInfo (line 8) | public class PortInfo FILE: src/NetworkOptimizer.Audit/Models/SwitchInfo.cs class SwitchInfo (line 6) | public class SwitchInfo class SwitchCapabilities (line 86) | public class SwitchCapabilities FILE: src/NetworkOptimizer.Audit/Models/WirelessClientInfo.cs class WirelessClientInfo (line 8) | public class WirelessClientInfo FILE: src/NetworkOptimizer.Audit/Rules/AccessPortVlanRule.cs class AccessPortVlanRule (line 14) | public class AccessPortVlanRule : AuditRuleBase method SetLogger (line 50) | public static void SetLogger(ILogger logger) => _logger = logger; method Evaluate (line 52) | public override AuditIssue? Evaluate(PortInfo port, List ... method IsTrunkPort (line 199) | private static bool IsTrunkPort(string? forwardMode, string? taggedVla... method GetTaggedVlanInfo (line 224) | private static (int TaggedVlanCount, bool AllowsAllVlans) GetTaggedVla... method IsNetworkFabricDevice (line 262) | private static bool IsNetworkFabricDevice(string? deviceType) method HasSingleDeviceMacRestriction (line 280) | private static bool HasSingleDeviceMacRestriction(PortInfo port) FILE: src/NetworkOptimizer.Audit/Rules/CameraVlanRule.cs class CameraVlanRule (line 14) | public class CameraVlanRule : AuditRuleBase method Evaluate (line 22) | public override AuditIssue? Evaluate(PortInfo port, List ... method FindProtectCameraOnPort (line 207) | private ProtectCamera? FindProtectCameraOnPort(PortInfo port) method EvaluateProtectCamera (line 231) | private AuditIssue? EvaluateProtectCamera(ProtectCamera camera, PortIn... FILE: src/NetworkOptimizer.Audit/Rules/FirewallAnyAnyRule.cs class FirewallAnyAnyRule (line 10) | public class FirewallAnyAnyRule method IsAnyAnyRule (line 16) | public static bool IsAnyAnyRule(FirewallRule rule) method CreateIssue (line 37) | public static AuditIssue CreateIssue(FirewallRule rule) FILE: src/NetworkOptimizer.Audit/Rules/IAuditRule.cs type IAuditRule (line 13) | public interface IAuditRule method Evaluate (line 58) | AuditIssue? Evaluate(PortInfo port, List networks, List ... method DetectDeviceType (line 121) | protected DeviceDetectionResult DetectDeviceType(PortInfo port) method DetectDeviceTypeForDownPort (line 163) | protected DeviceDetectionResult? DetectDeviceTypeForDownPort(PortInfo ... method IsAuditableDownPort (line 219) | protected bool IsAuditableDownPort(PortInfo port) method HasOfflineDeviceData (line 232) | protected bool HasOfflineDeviceData(PortInfo port) method GetNetwork (line 240) | protected NetworkInfo? GetNetwork(string? networkId, List... method GetNetworkName (line 251) | protected string? GetNetworkName(string? networkId, List ... method IsIoTDeviceName (line 259) | protected bool IsIoTDeviceName(string? portName) => DeviceNameHints.Is... method IsCameraDeviceName (line 264) | protected bool IsCameraDeviceName(string? portName) => DeviceNameHints... method IsAccessPointName (line 269) | protected bool IsAccessPointName(string? portName) => DeviceNameHints.... method HasIntentionalUnrestrictedProfile (line 276) | protected static bool HasIntentionalUnrestrictedProfile(PortInfo port) method CreateIssue (line 294) | protected AuditIssue CreateIssue( method GetBestDeviceName (line 324) | private string GetBestDeviceName(PortInfo port) method GetFirstNonEmpty (line 361) | private static string? GetFirstNonEmpty(params string?[] values) method IsCustomPortName (line 375) | private static bool IsCustomPortName(string portName) => PortNameHelpe... FILE: src/NetworkOptimizer.Audit/Rules/IWirelessAuditRule.cs type IWirelessAuditRule (line 10) | public interface IWirelessAuditRule method Evaluate (line 45) | AuditIssue? Evaluate(WirelessClientInfo client, List netw... class WirelessAuditRuleBase (line 51) | public abstract class WirelessAuditRuleBase : IWirelessAuditRule method SetAllowanceSettings (line 68) | public void SetAllowanceSettings(DeviceAllowanceSettings settings) method Evaluate (line 73) | public abstract AuditIssue? Evaluate(WirelessClientInfo client, List... method CreateIssue (line 89) | protected AuditIssue CreateIssue( FILE: src/NetworkOptimizer.Audit/Rules/IotVlanRule.cs class IotVlanRule (line 12) | public class IotVlanRule : AuditRuleBase method Evaluate (line 20) | public override AuditIssue? Evaluate(PortInfo port, List ... FILE: src/NetworkOptimizer.Audit/Rules/MacRestrictionRule.cs class MacRestrictionRule (line 10) | public class MacRestrictionRule : AuditRuleBase method Evaluate (line 18) | public override AuditIssue? Evaluate(PortInfo port, List ... method IsNetworkFabricDevice (line 117) | private static bool IsNetworkFabricDevice(string? deviceType) FILE: src/NetworkOptimizer.Audit/Rules/PortIsolationRule.cs class PortIsolationRule (line 9) | public class PortIsolationRule : AuditRuleBase method Evaluate (line 17) | public override AuditIssue? Evaluate(PortInfo port, List ... FILE: src/NetworkOptimizer.Audit/Rules/PortNameHelper.cs class PortNameHelper (line 9) | public static class PortNameHelper method IsDefaultPortName (line 24) | public static bool IsDefaultPortName(string? portName) method IsCustomPortName (line 37) | public static bool IsCustomPortName(string? portName) FILE: src/NetworkOptimizer.Audit/Rules/UnusedPortRule.cs class UnusedPortRule (line 11) | public class UnusedPortRule : AuditRuleBase method SetLogger (line 24) | public static void SetLogger(ILogger logger) => _logger = logger; method SetThresholds (line 31) | public static void SetThresholds(int unusedPortDays, int namedPortDays) method Evaluate (line 44) | public override AuditIssue? Evaluate(PortInfo port, List ... FILE: src/NetworkOptimizer.Audit/Rules/VlanPlacementChecker.cs class VlanPlacementChecker (line 13) | public static class VlanPlacementChecker type PlacementResult (line 18) | public record PlacementResult( method CheckIoTPlacement (line 35) | public static PlacementResult CheckIoTPlacement( method CheckIoTPlacement (line 53) | public static PlacementResult CheckIoTPlacement( method CheckPrinterPlacement (line 133) | public static PlacementResult CheckPrinterPlacement( method CheckCameraPlacement (line 221) | public static PlacementResult CheckCameraPlacement( method BuildMetadata (line 281) | public static Dictionary BuildMetadata( method HasConfigurableSetting (line 338) | public static bool HasConfigurableSetting(ClientDeviceCategory categor... method GetIoTMessaging (line 352) | public static (string Message, string RecommendedAction) GetIoTMessaging( method GetMoveRecommendation (line 386) | public static string GetMoveRecommendation(string networkLabel, bool i... method GetMoveRecommendation (line 400) | public static string GetMoveRecommendation(PlacementResult placement, ... FILE: src/NetworkOptimizer.Audit/Rules/VlanSubnetMismatchRule.cs class VlanSubnetMismatchRule (line 15) | public class VlanSubnetMismatchRule : WirelessAuditRuleBase method Evaluate (line 23) | public override AuditIssue? Evaluate(WirelessClientInfo client, List ... method GetDeviceName (line 117) | private string GetDeviceName(PortInfo port, UniFi.Models.UniFiClientRe... method IsValidSubnetFormat (line 150) | private static bool IsValidSubnetFormat(string subnet) FILE: src/NetworkOptimizer.Audit/Rules/WirelessCameraVlanRule.cs class WirelessCameraVlanRule (line 12) | public class WirelessCameraVlanRule : WirelessAuditRuleBase method Evaluate (line 20) | public override AuditIssue? Evaluate(WirelessClientInfo client, List? clientHi... method SetProtectCameras (line 67) | public void SetProtectCameras(ProtectCameraCollection? protectCameras) method GetProtectCameraName (line 79) | public string? GetProtectCameraName(string? mac) => _protectCameras?.G... method DetectDeviceType (line 88) | public DeviceDetectionResult DetectDeviceType( method DetectDeviceType (line 104) | public DeviceDetectionResult DetectDeviceType( method DetectDeviceTypeCore (line 130) | private DeviceDetectionResult DetectDeviceTypeCore( method DetectFromUniFiOui (line 413) | private DeviceDetectionResult DetectFromUniFiOui(string ouiName, strin... method CreateOuiResult (line 488) | private static DeviceDetectionResult CreateOuiResult(ClientDeviceCateg... method CheckObviousNameOverride (line 510) | private DeviceDetectionResult? CheckObviousNameOverride(string? name, ... method IsCameraName (line 1031) | private static bool IsCameraName(string nameLower) method ApplyCloudSecurityOverride (line 1048) | private DeviceDetectionResult ApplyCloudSecurityOverride(DeviceDetecti... method ApplyCameraNameSupplement (line 1092) | private DeviceDetectionResult ApplyCameraNameSupplement(DeviceDetectio... method ApplyWatchNameSupplement (line 1154) | private DeviceDetectionResult ApplyWatchNameSupplement(DeviceDetection... method IsCloudSecurityVendor (line 1215) | private static bool IsCloudSecurityVendor(string vendorLower) method IsThermostatName (line 1233) | private static bool IsThermostatName(string nameLower) method CheckVendorDefaultOverride (line 1245) | private DeviceDetectionResult? CheckVendorDefaultOverride(string? oui,... method DetectFromPortName (line 1370) | public DeviceDetectionResult DetectFromPortName(string portName) method DetectFromMac (line 1379) | public DeviceDetectionResult DetectFromMac(string macAddress) method ShouldBeOnIoTVlan (line 1473) | public static bool ShouldBeOnIoTVlan(ClientDeviceCategory category) method ShouldBeOnSecurityVlan (line 1481) | public static bool ShouldBeOnSecurityVlan(ClientDeviceCategory category) method IsInfrastructure (line 1489) | public static bool IsInfrastructure(ClientDeviceCategory category) method GetRecommendedNetwork (line 1497) | public static NetworkPurpose GetRecommendedNetwork(ClientDeviceCategor... FILE: src/NetworkOptimizer.Audit/Services/FirewallZoneLookup.cs class FirewallZoneLookup (line 10) | public class FirewallZoneLookup method FirewallZoneLookup (line 36) | public FirewallZoneLookup(IEnumerable? zones, ILogg... method GetZoneById (line 69) | public UniFiFirewallZone? GetZoneById(string? zoneId) method GetZoneByKey (line 80) | public UniFiFirewallZone? GetZoneByKey(string zoneKey) method GetZoneKey (line 89) | public string? GetZoneKey(string? zoneId) method IsDmzZone (line 97) | public bool IsDmzZone(string? zoneId) method IsHotspotZone (line 106) | public bool IsHotspotZone(string? zoneId) method IsExternalZone (line 115) | public bool IsExternalZone(string? zoneId) method IsInternalZone (line 124) | public bool IsInternalZone(string? zoneId) method GetExternalZoneId (line 133) | public string? GetExternalZoneId() method GetDmzZoneId (line 141) | public string? GetDmzZoneId() method GetHotspotZoneId (line 149) | public string? GetHotspotZoneId() method ValidateWanZoneAssumption (line 161) | public bool ValidateWanZoneAssumption(string? wanNetworkName, string? ... method ValidateExternalZoneId (line 193) | public bool ValidateExternalZoneId(string? determinedExternalZoneId) FILE: src/NetworkOptimizer.Audit/Services/IIeeeOuiDatabase.cs type IIeeeOuiDatabase (line 7) | public interface IIeeeOuiDatabase method InitializeAsync (line 23) | Task InitializeAsync(CancellationToken cancellationToken = default); method GetVendor (line 30) | string? GetVendor(string macOrOui); method HasVendor (line 37) | bool HasVendor(string macOrOui); FILE: src/NetworkOptimizer.Audit/Services/IeeeOuiDatabase.cs class IeeeOuiDatabase (line 10) | public class IeeeOuiDatabase : IIeeeOuiDatabase method IeeeOuiDatabase (line 22) | public IeeeOuiDatabase(ILogger logger, IHttpClientFac... method InitializeAsync (line 55) | public async Task InitializeAsync(CancellationToken cancellationToken ... method GetVendor (line 87) | public string? GetVendor(string macOrOui) method HasVendor (line 99) | public bool HasVendor(string macOrOui) method TryLoadFromCacheAsync (line 104) | private async Task TryLoadFromCacheAsync(string cachePath) method TryDownloadAndCacheAsync (line 132) | private async Task TryDownloadAndCacheAsync(string cachePath, Ca... method ParseOuiData (line 173) | private int ParseOuiData(string content) method NormalizeToOui (line 213) | private static string NormalizeToOui(string input) FILE: src/NetworkOptimizer.Core/Caching/AsyncCachedValue.cs class AsyncCachedValue (line 7) | public class AsyncCachedValue where T : class method AsyncCachedValue (line 15) | public AsyncCachedValue(Func> factory, TimeSpan expiry) method GetAsync (line 21) | public async Task GetAsync(bool forceRefresh = false) method Invalidate (line 43) | public void Invalidate() FILE: src/NetworkOptimizer.Core/Enums/AgentType.cs type AgentType (line 6) | public enum AgentType class AgentTypeExtensions (line 42) | public static class AgentTypeExtensions method GetPlatform (line 47) | public static string GetPlatform(this AgentType agentType) method SupportsHardwareDeployment (line 63) | public static bool SupportsHardwareDeployment(this AgentType agentType) FILE: src/NetworkOptimizer.Core/Enums/AlertSeverity.cs type AlertSeverity (line 6) | public enum AlertSeverity FILE: src/NetworkOptimizer.Core/Enums/AlertStatus.cs type AlertStatus (line 6) | public enum AlertStatus FILE: src/NetworkOptimizer.Core/Enums/AuditSeverity.cs type AuditSeverity (line 6) | public enum AuditSeverity class AuditSeverityExtensions (line 37) | public static class AuditSeverityExtensions method GetScore (line 43) | public static int GetScore(this AuditSeverity severity) method GetDisplayName (line 59) | public static string GetDisplayName(this AuditSeverity severity) FILE: src/NetworkOptimizer.Core/Enums/ClientDeviceCategory.cs type ClientDeviceCategory (line 7) | public enum ClientDeviceCategory class ClientDeviceCategoryExtensions (line 185) | public static class ClientDeviceCategoryExtensions method IsIoT (line 190) | public static bool IsIoT(this ClientDeviceCategory category) => catego... method IsSurveillance (line 213) | public static bool IsSurveillance(this ClientDeviceCategory category) ... method IsCloudCamera (line 225) | public static bool IsCloudCamera(this ClientDeviceCategory category) => method IsCloudSurveillance (line 232) | public static bool IsCloudSurveillance(this ClientDeviceCategory categ... method IsLowRiskIoT (line 241) | public static bool IsLowRiskIoT(this ClientDeviceCategory category) =>... method IsHighRiskIoT (line 263) | public static bool IsHighRiskIoT(this ClientDeviceCategory category) =... method IsInfrastructure (line 277) | public static bool IsInfrastructure(this ClientDeviceCategory category... method IsMobile (line 290) | public static bool IsMobile(this ClientDeviceCategory category) => cat... method IsStationary (line 302) | public static bool IsStationary(this ClientDeviceCategory category) =>... method GetDisplayName (line 333) | public static string GetDisplayName(this ClientDeviceCategory category... FILE: src/NetworkOptimizer.Core/Enums/DeviceType.cs type DeviceType (line 7) | public enum DeviceType class DeviceTypeExtensions (line 114) | public static class DeviceTypeExtensions method ToDisplayName (line 135) | public static string ToDisplayName(this DeviceType type) => type switch method IsUniFiNetworkDevice (line 161) | public static bool IsUniFiNetworkDevice(this DeviceType type) => type ... method IsGateway (line 176) | public static bool IsGateway(this DeviceType type) => type == DeviceTy... method UsesUniFiIperfStreams (line 182) | public static bool UsesUniFiIperfStreams(this DeviceType type) => type... method FromUniFiApiType (line 199) | public static DeviceType FromUniFiApiType(string? apiType) => method FromUniFiApiType (line 226) | public static DeviceType FromUniFiApiType(string? apiType, string? model) method IsSmartPowerModel (line 277) | private static bool IsSmartPowerModel(string model) method Parse (line 290) | public static DeviceType Parse(string? value) FILE: src/NetworkOptimizer.Core/Enums/MeasurementType.cs type MeasurementType (line 7) | public enum MeasurementType class MeasurementTypeExtensions (line 73) | public static class MeasurementTypeExtensions method ToMeasurementName (line 78) | public static string ToMeasurementName(this MeasurementType measuremen... method ParseMeasurement (line 101) | public static MeasurementType ParseMeasurement(string measurementName) method RequiresAgent (line 124) | public static bool RequiresAgent(this MeasurementType measurementType) FILE: src/NetworkOptimizer.Core/Extensions/ServiceProviderExtensions.cs class ServiceProviderExtensions (line 8) | public static class ServiceProviderExtensions method WithScopedService (line 14) | public static T WithScopedService(this IServiceProvider p... method WithScopedServiceAsync (line 26) | public static async Task WithScopedServiceAsync(this I... method WithScopedServiceAsync (line 38) | public static async Task WithScopedServiceAsync(this IServic... FILE: src/NetworkOptimizer.Core/FeatureFlags.cs class FeatureFlags (line 6) | public static class FeatureFlags FILE: src/NetworkOptimizer.Core/Helpers/CloudflareIpRanges.cs class CloudflareIpRanges (line 9) | public static class CloudflareIpRanges method IsCloudflareOnly (line 63) | public static bool IsCloudflareOnly(IEnumerable? addresses) method ContainsCloudflareRange (line 104) | public static bool ContainsCloudflareRange(IEnumerable? addres... method IsCloudflareAddress (line 116) | private static bool IsCloudflareAddress(string address) FILE: src/NetworkOptimizer.Core/Helpers/DisplayFormatters.cs class DisplayFormatters (line 7) | public static class DisplayFormatters method StripDevicePrefix (line 31) | public static string StripDevicePrefix(string? deviceName) method IsDeviceTypeKeyword (line 155) | private static bool IsDeviceTypeKeyword(string value) method ExtractNetworkName (line 165) | public static string ExtractNetworkName(string? deviceName) method FormatDeviceName (line 187) | public static string FormatDeviceName(string? deviceName, bool isGateway) method FormatDeviceName (line 197) | public static string FormatDeviceName(string? deviceName, bool isGatew... method ParseDeviceOnNetworkDevice (line 209) | public static (string ClientName, string? DeviceType, string? NetworkD... method GetNetworkDeviceLabel (line 248) | public static string GetNetworkDeviceLabel(string? deviceType) method FormatNetworkWithVlan (line 270) | public static string FormatNetworkWithVlan(string? networkName, int? v... method FormatVlanDisplay (line 281) | public static string FormatVlanDisplay(int vlanId) method GetLinkStatus (line 293) | public static string GetLinkStatus(bool isUp, int speed) method GetPoeStatus (line 308) | public static string GetPoeStatus(double poePower, string? poeMode, bo... method GetPortSecurityStatus (line 319) | public static string GetPortSecurityStatus(int macCount, bool portSecu... method GetIsolationStatus (line 331) | public static string GetIsolationStatus(bool isolation) method GetWanDnsDisplay (line 344) | public static string GetWanDnsDisplay( method GetCorrectDnsOrder (line 410) | public static string GetCorrectDnsOrder(List servers, List wanDnsServers, bool ... method GetDeviceDnsDisplay (line 438) | public static string GetDeviceDnsDisplay( method GetDeviceDnsStatus (line 469) | public static string GetDeviceDnsStatus(int totalDevicesChecked, int d... method GetDohStatusDisplay (line 479) | public static string GetDohStatusDisplay( method GetProtectionStatusDisplay (line 509) | public static string GetProtectionStatusDisplay( method FormatOrdinal (line 542) | public static string FormatOrdinal(int number) method NormalizeWanDisplay (line 567) | public static string NormalizeWanDisplay(string value) method IsGenericWanName (line 575) | public static bool IsGenericWanName(string? name) FILE: src/NetworkOptimizer.Core/Helpers/JsonExtensions.cs class JsonExtensions (line 9) | public static class JsonExtensions method GetStringOrNull (line 14) | public static string? GetStringOrNull(this JsonElement element, string... method GetStringOrDefault (line 24) | public static string GetStringOrDefault(this JsonElement element, stri... method GetStringFromAny (line 35) | public static string? GetStringFromAny(this JsonElement element, param... method GetIntOrDefault (line 52) | public static int GetIntOrDefault(this JsonElement element, string pro... method GetLongOrNull (line 62) | public static long? GetLongOrNull(this JsonElement element, string pro... method GetDoubleOrDefault (line 73) | public static double GetDoubleOrDefault(this JsonElement element, stri... method GetBoolOrDefault (line 89) | public static bool GetBoolOrDefault(this JsonElement element, string p... method GetStringArrayOrNull (line 101) | public static List? GetStringArrayOrNull(this JsonElement elem... method GetArrayOrEmpty (line 119) | public static IEnumerable GetArrayOrEmpty(this JsonElemen... method GetPropertyOrNull (line 129) | public static JsonElement? GetPropertyOrNull(this JsonElement element,... method UnwrapDataArray (line 138) | public static IEnumerable UnwrapDataArray(this JsonElemen... FILE: src/NetworkOptimizer.Core/Helpers/NetworkFormatHelpers.cs class NetworkFormatHelpers (line 6) | public static class NetworkFormatHelpers method FormatWanInterfaceName (line 14) | public static string FormatWanInterfaceName(string interfaceName, stri... FILE: src/NetworkOptimizer.Core/Helpers/NetworkUtilities.cs class NetworkUtilities (line 10) | public static class NetworkUtilities method DetectLocalIp (line 18) | public static string? DetectLocalIp() method DetectLocalIpFromInterfaces (line 36) | public static string? DetectLocalIpFromInterfaces() method GetAllLocalIpAddresses (line 93) | public static List GetAllLocalIpAddresses() method IsVirtualInterface (line 156) | private static bool IsVirtualInterface(string name, string description) method IsIpInSubnet (line 177) | public static bool IsIpInSubnet(string ipAddress, string? cidrSubnet) method IsIpInSubnet (line 195) | public static bool IsIpInSubnet(IPAddress ip, string cidrSubnet) method IsIpInAnySubnet (line 249) | public static bool IsIpInAnySubnet(string ipAddress, IEnumerable? cidrs, str... method ExpandIpRange (line 477) | public static List ExpandIpRange(string? ipOrRange) method GetPortServiceName (line 534) | public static string? GetPortServiceName(int port) method ParseCidr (line 604) | public static (IPAddress? Network, int PrefixLength) ParseCidr(string ... method NormalizeControllerUrl (line 625) | public static string NormalizeControllerUrl(string url) FILE: src/NetworkOptimizer.Core/Helpers/ProcessUtilities.cs class ProcessUtilities (line 6) | public static class ProcessUtilities method GetIperf3Path (line 13) | public static string GetIperf3Path() FILE: src/NetworkOptimizer.Core/Interfaces/IAgentDeployer.cs type IAgentDeployer (line 10) | public interface IAgentDeployer method DeployAgentAsync (line 18) | Task DeployAgentAsync(AgentDeployment deploymen... method UpdateAgentAsync (line 27) | Task UpdateAgentAsync(string agentId, string targetVersion, Canc... method RemoveAgentAsync (line 35) | Task RemoveAgentAsync(string agentId, CancellationToken cancella... method GetAllAgentStatusesAsync (line 42) | Task> GetAllAgentStatusesAsync(CancellationToken can... method GetAgentStatusAsync (line 50) | Task GetAgentStatusAsync(string agentId, CancellationTok... method UpdateAgentConfigurationAsync (line 59) | Task UpdateAgentConfigurationAsync(string agentId, AgentConfigur... method StartAgentAsync (line 67) | Task StartAgentAsync(string agentId, CancellationToken cancellat... method StopAgentAsync (line 75) | Task StopAgentAsync(string agentId, CancellationToken cancellati... method RestartAgentAsync (line 83) | Task RestartAgentAsync(string agentId, CancellationToken cancell... method DiscoverPotentialHostsAsync (line 91) | Task> DiscoverPotentialHostsAsync(string networkSegmen... method ValidateHostAsync (line 100) | Task ValidateHostAsync(AgentHost host, AgentType... method GetAgentLogsAsync (line 109) | Task> GetAgentLogsAsync(string agentId, int lines = 100... class AgentDeployment (line 115) | public class AgentDeployment class AgentHost (line 166) | public class AgentHost class SshCredentials (line 217) | public class SshCredentials class AgentDeploymentResult (line 243) | public class AgentDeploymentResult class HostValidationResult (line 279) | public class HostValidationResult FILE: src/NetworkOptimizer.Core/Interfaces/IAuditEngine.cs type IAuditEngine (line 9) | public interface IAuditEngine method PerformAuditAsync (line 17) | Task PerformAuditAsync(string siteId, CancellationToken c... method AuditDeviceAsync (line 25) | Task> AuditDeviceAsync(UniFiDevice device, Cancellat... method AuditNetworkConfigurationAsync (line 33) | Task> AuditNetworkConfigurationAsync(NetworkConfigur... method AuditSqmConfigurationAsync (line 41) | Task> AuditSqmConfigurationAsync(SqmConfiguration sq... method AuditWirelessConfigurationAsync (line 49) | Task> AuditWirelessConfigurationAsync(List> AuditFirewallRulesAsync(List fir... method AuditPortConfigurationsAsync (line 65) | Task> AuditPortConfigurationsAsync(List findings); method GenerateRecommendationsAsync (line 80) | Task> GenerateRecommendationsAsync(Li... class OptimizationRecommendation (line 86) | public class OptimizationRecommendation FILE: src/NetworkOptimizer.Core/Interfaces/IMetricsStorage.cs type IMetricsStorage (line 10) | public interface IMetricsStorage method WriteMetricsAsync (line 21) | Task WriteMetricsAsync( method WriteDeviceHealthAsync (line 34) | Task WriteDeviceHealthAsync(UniFiDevice device, CancellationToken canc... method WriteSqmMetricsAsync (line 42) | Task WriteSqmMetricsAsync(string deviceId, PerformanceMetrics sqmMetri... method WriteAgentStatusAsync (line 49) | Task WriteAgentStatusAsync(AgentStatus agentStatus, CancellationToken ... method WriteAuditResultsAsync (line 56) | Task WriteAuditResultsAsync(AuditReport auditReport, CancellationToken... method WriteConfigurationChangeAsync (line 65) | Task WriteConfigurationChangeAsync( method QueryMetricsAsync (line 80) | Task> QueryMetricsAsync( method QueryAggregatedMetricsAsync (line 97) | Task> QueryAggregatedMetricsAsync( method GetLatestMetricAsync (line 112) | Task GetLatestMetricAsync( method HealthCheckAsync (line 122) | Task HealthCheckAsync(CancellationToken cancellationToken = defa... method CleanupOldMetricsAsync (line 130) | Task CleanupOldMetricsAsync(int retentionDays, CancellationToken... class MetricDataPoint (line 136) | public class MetricDataPoint class AggregatedMetricDataPoint (line 157) | public class AggregatedMetricDataPoint class AggregatedValue (line 178) | public class AggregatedValue FILE: src/NetworkOptimizer.Core/Interfaces/IReportGenerator.cs type IReportGenerator (line 9) | public interface IReportGenerator method GenerateOptimizationReportAsync (line 18) | Task GenerateOptimizationReportAsync( method GenerateExecutiveSummaryAsync (line 29) | Task GenerateExecutiveSummaryAsync( method GenerateAuditReportAsync (line 39) | Task GenerateAuditReportAsync( method GeneratePerformanceComparisonReportAsync (line 51) | Task GeneratePerformanceComparisonReportA... method GenerateHealthDashboardAsync (line 63) | Task GenerateHealthDashboardAsync( method GenerateAgentDeploymentReportAsync (line 72) | Task GenerateAgentDeploymentReportAsync( method ExportReportAsync (line 82) | Task ExportReportAsync( method ScheduleReportAsync (line 93) | Task ScheduleReportAsync( method GetReportHistoryAsync (line 106) | Task> GetReportHistoryAsync( class NetworkOptimizationReport (line 117) | public class NetworkOptimizationReport class ExecutiveSummaryReport (line 188) | public class ExecutiveSummaryReport class FormattedAuditReport (line 234) | public class FormattedAuditReport class PerformanceComparisonReport (line 265) | public class PerformanceComparisonReport class HealthDashboardReport (line 311) | public class HealthDashboardReport class AgentDeploymentReport (line 357) | public class AgentDeploymentReport type ReportFormat (line 403) | public enum ReportFormat type ReportType (line 415) | public enum ReportType class ReportSchedule (line 428) | public class ReportSchedule class ReportMetadata (line 469) | public class ReportMetadata class SqmAnalysis (line 510) | public class SqmAnalysis class PerformanceTrends (line 518) | public class PerformanceTrends class KeyMetrics (line 525) | public class KeyMetrics class RemediationAction (line 535) | public class RemediationAction class DeviceHealthSummary (line 544) | public class DeviceHealthSummary class AgentHealthSummary (line 553) | public class AgentHealthSummary class Alert (line 562) | public class Alert FILE: src/NetworkOptimizer.Core/Interfaces/ISqmManager.cs type ISqmManager (line 9) | public interface ISqmManager method CaptureBaselineAsync (line 18) | Task CaptureBaselineAsync(string deviceId, string... method GenerateOptimalConfigurationAsync (line 29) | Task GenerateOptimalConfigurationAsync( method ApplySqmConfigurationAsync (line 43) | Task ApplySqmConfigurationAsync(string siteId, SqmConfiguration ... method TestSqmPerformanceAsync (line 52) | Task TestSqmPerformanceAsync(string deviceId, int ... method ComparePerformance (line 60) | PerformanceComparison ComparePerformance(PerformanceBaseline baseline,... method AutoTuneSqmAsync (line 68) | Task AutoTuneSqmAsync(string deviceId, CancellationTo... method ValidateConfigurationAsync (line 75) | Task ValidateConfigurationAsync(SqmConfiguration ... method GetPerformanceHistoryAsync (line 85) | Task> GetPerformanceHistoryAsync( method PerformBufferbloatTestAsync (line 97) | Task PerformBufferbloatTestAsync(string deviceI... method RecommendPriorityRulesAsync (line 106) | Task> RecommendPriorityRulesAsync( class PerformanceComparison (line 115) | public class PerformanceComparison class SqmTuningResult (line 166) | public class SqmTuningResult class TuningAdjustment (line 202) | public class TuningAdjustment class SqmValidationResult (line 228) | public class SqmValidationResult class BufferbloatTestResult (line 254) | public class BufferbloatTestResult FILE: src/NetworkOptimizer.Core/Interfaces/IUniFiApiClient.cs type IUniFiApiClient (line 9) | public interface IUniFiApiClient method AuthenticateAsync (line 18) | Task AuthenticateAsync(string username, string password, Cancell... method GetSitesAsync (line 25) | Task> GetSitesAsync(CancellationToken cancellationToke... method GetDevicesAsync (line 33) | Task> GetDevicesAsync(string siteId, CancellationTok... method GetDeviceAsync (line 42) | Task GetDeviceAsync(string siteId, string deviceId, Canc... method GetNetworkConfigurationAsync (line 50) | Task GetNetworkConfigurationAsync(string siteId,... method GetSqmConfigurationAsync (line 59) | Task GetSqmConfigurationAsync(string siteId, string... method UpdateSqmConfigurationAsync (line 69) | Task UpdateSqmConfigurationAsync(string siteId, string deviceId,... method GetWirelessNetworksAsync (line 77) | Task> GetWirelessNetworksAsync(string siteId, Ca... method GetFirewallRulesAsync (line 85) | Task> GetFirewallRulesAsync(string siteId, Cancella... method GetPortConfigurationsAsync (line 94) | Task> GetPortConfigurationsAsync(string siteId... method HealthCheckAsync (line 101) | Task HealthCheckAsync(CancellationToken cancellationToken = defa... class UniFiSite (line 107) | public class UniFiSite FILE: src/NetworkOptimizer.Core/Models/AgentStatus.cs class AgentStatus (line 9) | public class AgentStatus type AgentHealthStatus (line 130) | public enum AgentHealthStatus class AgentMetrics (line 161) | public class AgentMetrics class AgentConfiguration (line 217) | public class AgentConfiguration class AgentLog (line 253) | public class AgentLog FILE: src/NetworkOptimizer.Core/Models/AuditResult.cs class AuditResult (line 8) | public class AuditResult class AuditReport (line 110) | public class AuditReport class AuditStatistics (line 177) | public class AuditStatistics FILE: src/NetworkOptimizer.Core/Models/NetworkConfiguration.cs class NetworkConfiguration (line 8) | public class NetworkConfiguration class VlanConfiguration (line 69) | public class VlanConfiguration class FirewallRule (line 135) | public class FirewallRule type FirewallAction (line 216) | public enum FirewallAction type FirewallDirection (line 226) | public enum FirewallDirection class PortConfiguration (line 236) | public class PortConfiguration type PortMode (line 312) | public enum PortMode class WirelessNetwork (line 321) | public class WirelessNetwork class GuestPortalSettings (line 382) | public class GuestPortalSettings class DhcpConfiguration (line 413) | public class DhcpConfiguration class DhcpReservation (line 439) | public class DhcpReservation class StaticRoute (line 465) | public class StaticRoute FILE: src/NetworkOptimizer.Core/Models/ProtectCamera.cs type ProtectCamera (line 6) | public sealed record ProtectCamera class ProtectCameraCollection (line 47) | public sealed class ProtectCameraCollection method Add (line 59) | public void Add(ProtectCamera camera) method Add (line 67) | public void Add(string mac, string name) method Add (line 75) | public void Add(string mac, string name, string? connectionNetworkId, ... method TryGet (line 83) | public bool TryGet(string? mac, out ProtectCamera? camera) method ContainsMac (line 94) | public bool ContainsMac(string? mac) method TryGetName (line 104) | public bool TryGetName(string? mac, out string? name) method GetName (line 121) | public string? GetName(string? mac) method TryGetNetworkId (line 131) | public bool TryGetNetworkId(string? mac, out string? networkId) method IsNvr (line 148) | public bool IsNvr(string? mac) method GetAll (line 158) | public IEnumerable GetAll() => _cameras.Values; method AddDriveDevice (line 166) | public void AddDriveDevice(string mac) method IsDriveDevice (line 171) | public bool IsDriveDevice(string? mac) FILE: src/NetworkOptimizer.Core/Models/SqmConfiguration.cs class SqmConfiguration (line 6) | public class SqmConfiguration class WanConfiguration (line 92) | public class WanConfiguration class PerformanceBaseline (line 143) | public class PerformanceBaseline class PerformanceMetrics (line 184) | public class PerformanceMetrics class TrafficPriorityRule (line 230) | public class TrafficPriorityRule FILE: src/NetworkOptimizer.Core/Models/UniFiDevice.cs class UniFiDevice (line 9) | public class UniFiDevice FILE: src/NetworkOptimizer.Core/VendorSpecificAttribute.cs class VendorSpecificAttribute (line 8) | [AttributeUsage( method VendorSpecificAttribute (line 16) | public VendorSpecificAttribute(string vendor, string? notes = null) FILE: src/NetworkOptimizer.Diagnostics/Analyzers/ApLockAnalyzer.cs class ApLockAnalyzer (line 13) | public class ApLockAnalyzer method ApLockAnalyzer (line 18) | public ApLockAnalyzer( method Analyze (line 32) | public List Analyze( method AnalyzeOfflineClients (line 90) | public List AnalyzeOfflineClients( method BuildApLookup (line 153) | private static Dictionary BuildApLookup(I... method GetApName (line 160) | private static string GetApName(string apMac, Dictionary Analyze( method CheckHardwareAcceleration (line 70) | [VendorSpecific("UniFi", "Reads gateway.HardwareOffload from UniFi dev... method IsNetFlowEnabled (line 111) | [VendorSpecific("UniFi", "Parses UniFi settings JSON 'data' array with... method CheckJumboFrames (line 138) | [VendorSpecific("UniFi", "Uses GlobalSwitchSettings parsed from UniFi ... method CheckFlowControl (line 259) | [VendorSpecific("UniFi", "Uses GlobalSwitchSettings parsed from UniFi ... method CheckCellularQos (line 430) | [VendorSpecific("UniFi", "Reads UniFi WAN interfaces, modem mbb_overri... method CheckFlowControlPortProfiles (line 545) | [VendorSpecific("UniFi", "Reads FlowControlEnabled from port profiles ... method HtmlEncode (line 660) | private static string HtmlEncode(string? value) => WebUtility.HtmlEnco... method FindMatchingWanConfig (line 667) | internal static JsonElement? FindMatchingWanConfig(GatewayWanInterface... method IsCellularFailover (line 699) | internal static bool IsCellularFailover(GatewayWanInterface cellularWa... method GetModemDataLimit (line 715) | internal static (bool Enabled, long Bytes) GetModemDataLimit(UniFiDevi... method GetExcludedDevicesWithSetting (line 754) | internal static List<(UniFiDeviceResponse Device, bool EffectiveValue)... method CountHighSpeedAccessPorts (line 771) | internal static int CountHighSpeedAccessPorts(List GetAccessPortSpeedTiers(List clients) method GetCellularWanConfigId (line 853) | internal static string? GetCellularWanConfigId(GatewayWanInterface cel... method GetTargetedAppIds (line 866) | internal static HashSet GetTargetedAppIds(JsonDocument? qosRulesD... method BuildCategoryGapDescription (line 957) | private static string? BuildCategoryGapDescription( FILE: src/NetworkOptimizer.Diagnostics/Analyzers/PortProfile8021xAnalyzer.cs class PortProfile8021xAnalyzer (line 13) | public class PortProfile8021xAnalyzer method PortProfile8021xAnalyzer (line 23) | public PortProfile8021xAnalyzer(ILogger? log... method Analyze (line 34) | public List Analyze( method IsTrunkProfile (line 109) | private static bool IsTrunkProfile(UniFiPortProfile profile) method GetTaggedVlanInfo (line 120) | private static (int TaggedVlanCount, bool AllowsAllVlans) GetTaggedVla... method IsTrunkOrApProfile (line 141) | private static bool IsTrunkOrApProfile(int taggedVlanCount, bool allow... method GenerateRecommendation (line 154) | private static string GenerateRecommendation(string profileName, int v... FILE: src/NetworkOptimizer.Diagnostics/Analyzers/PortProfileSuggestionAnalyzer.cs class PortProfileSuggestionAnalyzer (line 15) | public class PortProfileSuggestionAnalyzer method PortProfileSuggestionAnalyzer (line 31) | public PortProfileSuggestionAnalyzer(ILogger Analyze( method CollectTrunkPorts (line 624) | private List<(PortReference Reference, PortConfigSignature Signature, ... method BuildProfileSignatures (line 693) | private Dictionary AnalyzeDisabledPorts( method AnalyzeUnrestrictedAccessPorts (line 1100) | private List AnalyzeUnrestrictedAccessPorts( method IsUnrestrictedAccessProfile (line 1252) | private static bool IsUnrestrictedAccessProfile(UniFiPortProfile profile) class PortConfigSignatureEqualityComparer (line 1264) | internal class PortConfigSignatureEqualityComparer : IEqualityComparer? log... method Analyze (line 28) | public List Analyze( method DiscoverTrunkLinks (line 82) | private List DiscoverTrunkLinks( method FindUplinkPort (line 158) | private static int? FindUplinkPort(UniFiDeviceResponse device) method CountVlanOccurrences (line 184) | private static Dictionary CountVlanOccurrences( method FindVlanMismatches (line 213) | private static List FindVlanMismatches( method CalculateConfidence (line 256) | private static DiagnosticConfidence CalculateConfidence( method GenerateRecommendation (line 283) | private static string GenerateRecommendation( FILE: src/NetworkOptimizer.Diagnostics/DiagnosticsEngine.cs class DiagnosticsOptions (line 14) | public class DiagnosticsOptions class DiagnosticsEngine (line 50) | public class DiagnosticsEngine method DiagnosticsEngine (line 59) | public DiagnosticsEngine( method RunDiagnostics (line 88) | public DiagnosticsResult RunDiagnostics( FILE: src/NetworkOptimizer.Diagnostics/Models/AccessPortVlanIssue.cs class AccessPortVlanIssue (line 9) | public class AccessPortVlanIssue FILE: src/NetworkOptimizer.Diagnostics/Models/ApLockIssue.cs type ApLockSeverity (line 8) | public enum ApLockSeverity class ApLockIssue (line 29) | public class ApLockIssue FILE: src/NetworkOptimizer.Diagnostics/Models/DiagnosticSeverity.cs type DiagnosticSeverity (line 7) | public enum DiagnosticSeverity type DiagnosticConfidence (line 29) | public enum DiagnosticConfidence FILE: src/NetworkOptimizer.Diagnostics/Models/DiagnosticsResult.cs class DiagnosticsResult (line 6) | public class DiagnosticsResult FILE: src/NetworkOptimizer.Diagnostics/Models/PerformanceIssue.cs class PerformanceIssue (line 6) | public class PerformanceIssue type PerformanceSeverity (line 42) | public enum PerformanceSeverity type PerformanceCategory (line 58) | public enum PerformanceCategory FILE: src/NetworkOptimizer.Diagnostics/Models/PortProfile8021xIssue.cs class PortProfile8021xIssue (line 7) | public class PortProfile8021xIssue FILE: src/NetworkOptimizer.Diagnostics/Models/PortProfileSuggestion.cs type PortProfileSuggestionSeverity (line 6) | public enum PortProfileSuggestionSeverity type PortProfileSuggestionType (line 23) | public enum PortProfileSuggestionType class PortReference (line 44) | public class PortReference class PortConfigSignature (line 81) | public class PortConfigSignature : IEquatable method Equals (line 132) | public bool Equals(PortConfigSignature? other) method Equals (line 153) | public override bool Equals(object? obj) => Equals(obj as PortConfigSi... method GetHashCode (line 156) | public override int GetHashCode() class PortProfileSuggestion (line 170) | public class PortProfileSuggestion FILE: src/NetworkOptimizer.Diagnostics/Models/TrunkConsistencyIssue.cs class TrunkLink (line 6) | public class TrunkLink class VlanMismatch (line 52) | public class VlanMismatch class TrunkConsistencyIssue (line 89) | public class TrunkConsistencyIssue FILE: src/NetworkOptimizer.Monitoring/AlertEngine.cs class AlertState (line 10) | internal class AlertState type IAlertEngine (line 24) | public interface IAlertEngine method AddThreshold (line 29) | void AddThreshold(AlertThreshold threshold); method RemoveThreshold (line 34) | void RemoveThreshold(Guid thresholdId); method GetThresholds (line 39) | List GetThresholds(); method EvaluateDeviceMetrics (line 44) | List EvaluateDeviceMetrics(DeviceMetrics metrics); method EvaluateInterfaceMetrics (line 49) | List EvaluateInterfaceMetrics(List metrics); method GetActiveAlerts (line 54) | List GetActiveAlerts(); method GetAlertHistory (line 59) | List GetAlertHistory(int maxCount = 100); method AcknowledgeAlert (line 64) | void AcknowledgeAlert(Guid alertId, string acknowledgedBy); method ResolveAlert (line 69) | void ResolveAlert(Guid alertId); method ClearOldAlerts (line 74) | void ClearOldAlerts(TimeSpan olderThan); class AlertEngine (line 80) | public class AlertEngine : IAlertEngine method AlertEngine (line 88) | public AlertEngine(ILogger logger) method AddThreshold (line 99) | public void AddThreshold(AlertThreshold threshold) method RemoveThreshold (line 114) | public void RemoveThreshold(Guid thresholdId) method GetThresholds (line 128) | public List GetThresholds() method EvaluateDeviceMetrics (line 143) | public List EvaluateDeviceMetrics(DeviceMetrics metrics) method EvaluateInterfaceMetrics (line 180) | public List EvaluateInterfaceMetrics(List met... method GetActiveAlerts (line 227) | public List GetActiveAlerts() method GetAlertHistory (line 241) | public List GetAlertHistory(int maxCount = 100) method AcknowledgeAlert (line 255) | public void AcknowledgeAlert(Guid alertId, string acknowledgedBy) method ResolveAlert (line 276) | public void ResolveAlert(Guid alertId) method ClearOldAlerts (line 295) | public void ClearOldAlerts(TimeSpan olderThan) method EvaluateDeviceThreshold (line 316) | private Alert? EvaluateDeviceThreshold(AlertThreshold threshold, Devic... method EvaluateInterfaceThreshold (line 340) | private Alert? EvaluateInterfaceThreshold(AlertThreshold threshold, In... method EvaluateThreshold (line 368) | private Alert? EvaluateThreshold( method CreateAlert (line 465) | private Alert CreateAlert( method InitializeDefaultThresholds (line 519) | private void InitializeDefaultThresholds() FILE: src/NetworkOptimizer.Monitoring/MetricsAggregator.cs type MetricSource (line 9) | public enum MetricSource class AggregatedMetric (line 20) | public class AggregatedMetric class MetricsBatch (line 76) | public class MetricsBatch type IMetricsAggregator (line 107) | public interface IMetricsAggregator method AddDeviceMetrics (line 112) | void AddDeviceMetrics(DeviceMetrics deviceMetrics, MetricSource source... method AddInterfaceMetrics (line 117) | void AddInterfaceMetrics(List interfaceMetrics, Metr... method AddCustomMetric (line 122) | void AddCustomMetric(string name, double value, string deviceIp, Dicti... method GetBatch (line 127) | MetricsBatch GetBatch(); method ClearBatch (line 132) | void ClearBatch(); method GetBatchCount (line 137) | int GetBatchCount(); class MetricsAggregator (line 143) | public class MetricsAggregator : IMetricsAggregator method MetricsAggregator (line 150) | public MetricsAggregator(ILogger logger, int maxBat... method AddDeviceMetrics (line 159) | public void AddDeviceMetrics(DeviceMetrics deviceMetrics, MetricSource... method AddInterfaceMetrics (line 275) | public void AddInterfaceMetrics(List interfaceMetric... method AddCustomMetric (line 479) | public void AddCustomMetric(string name, double value, string deviceIp... method GetBatch (line 509) | public MetricsBatch GetBatch() method ClearBatch (line 524) | public void ClearBatch() method GetBatchCount (line 537) | public int GetBatchCount() method AddMetricsToBatch (line 547) | private void AddMetricsToBatch(List metrics) method CreateMetric (line 560) | private AggregatedMetric CreateMetric( method CreateInterfaceMetric (line 579) | private AggregatedMetric CreateInterfaceMetric( method CreateBaseTags (line 599) | private Dictionary CreateBaseTags(DeviceMetrics device) method CreateInterfaceTags (line 619) | private Dictionary CreateInterfaceTags(InterfaceMetric... method NormalizeMetricName (line 640) | private string NormalizeMetricName(string name) FILE: src/NetworkOptimizer.Monitoring/Models/Alert.cs class Alert (line 8) | public class Alert type ThresholdComparison (line 134) | public enum ThresholdComparison FILE: src/NetworkOptimizer.Monitoring/Models/AlertThreshold.cs class AlertThreshold (line 8) | public class AlertThreshold method AppliesTo (line 108) | public bool AppliesTo(DeviceMetrics device) method AppliesTo (line 128) | public bool AppliesTo(InterfaceMetrics interfaceMetrics) method IsActiveNow (line 143) | public bool IsActiveNow() method IsExceeded (line 159) | public bool IsExceeded(double value) class TimeWindow (line 177) | public class TimeWindow method IsActive (line 197) | public bool IsActive(DateTime utcNow) FILE: src/NetworkOptimizer.Monitoring/Models/CellularModemStats.cs type CellularNetworkMode (line 6) | public enum CellularNetworkMode class CellularModemStats (line 22) | public class CellularModemStats method DetermineNetworkMode (line 93) | private CellularNetworkMode DetermineNetworkMode() method CalculateSignalQuality (line 118) | private int CalculateSignalQuality() class SignalInfo (line 182) | public class SignalInfo method CalculateBars (line 199) | private int CalculateBars() class CellInfo (line 227) | public class CellInfo class BandInfo (line 260) | public class BandInfo method GetBandName (line 277) | private string GetBandName() FILE: src/NetworkOptimizer.Monitoring/Models/DeviceMetrics.cs class DeviceMetrics (line 6) | public class DeviceMetrics type DeviceType (line 147) | public enum DeviceType FILE: src/NetworkOptimizer.Monitoring/Models/InterfaceMetrics.cs class InterfaceMetrics (line 6) | public class InterfaceMetrics method ShouldMonitor (line 186) | public bool ShouldMonitor() FILE: src/NetworkOptimizer.Monitoring/QmicliParser.cs class QmicliParser (line 9) | public static class QmicliParser method ParseSignalInfo (line 14) | public static (SignalInfo? lte, SignalInfo? nr5g) ParseSignalInfo(stri... method ParseServingSystem (line 56) | public static (string registrationState, string carrier, string mcc, s... method ParseCellLocationInfo (line 86) | public static (CellInfo? servingCell, List neighborCells) Pa... method ParseRfBandInfo (line 225) | public static BandInfo? ParseRfBandInfo(string output) method ExtractQuotedValue (line 249) | private static string ExtractQuotedValue(string line) method TryParseDbValue (line 255) | private static bool TryParseDbValue(string line, string prefix, out do... method TryParseDbValueAlt (line 268) | private static bool TryParseDbValueAlt(string line, out double value) FILE: src/NetworkOptimizer.Monitoring/SnmpConfiguration.cs class SnmpConfiguration (line 6) | public class SnmpConfiguration method Validate (line 112) | public void Validate() method Clone (line 147) | public SnmpConfiguration Clone() type SnmpVersion (line 176) | public enum SnmpVersion type AuthenticationProtocol (line 197) | public enum AuthenticationProtocol type PrivacyProtocol (line 233) | public enum PrivacyProtocol FILE: src/NetworkOptimizer.Monitoring/SnmpPoller.cs type ISnmpPoller (line 20) | public interface ISnmpPoller method GetAsync (line 25) | Task GetAsync(IPAddress ip, string oid); method WalkAsync (line 30) | Task> WalkAsync(IPAddress ip, string oid); method GetDeviceMetricsAsync (line 35) | Task GetDeviceMetricsAsync(IPAddress ip, string? hostna... method GetInterfaceMetricsAsync (line 40) | Task> GetInterfaceMetricsAsync(IPAddress ip, st... method GetSystemInfoAsync (line 45) | Task<(string hostname, string description, long uptime)> GetSystemInfo... class SnmpPoller (line 68) | public class SnmpPoller : ISnmpPoller method SnmpPoller (line 73) | public SnmpPoller(SnmpConfiguration config, ILogger logger) method GetAsync (line 95) | public async Task GetAsync(IPAddress ip, string oid) method WalkAsync (line 149) | public async Task> WalkAsync(IPAddress ip, string oid) method GetDeviceMetricsAsync (line 188) | public async Task GetDeviceMetricsAsync(IPAddress ip, s... method GetInterfaceMetricsAsync (line 227) | public async Task> GetInterfaceMetricsAsync(IPA... method GetSystemInfoAsync (line 277) | public async Task<(string hostname, string description, long uptime)> ... method GetSystemMetrics (line 290) | private async Task GetSystemMetrics(IPAddress ip, DeviceMetrics metrics) method GetResourceMetrics (line 300) | private async Task GetResourceMetrics(IPAddress ip, DeviceMetrics metr... method GetUniFiMetrics (line 337) | private async Task GetUniFiMetrics(IPAddress ip, DeviceMetrics metrics) method GetInterfaceMetricsForIndex (line 353) | private async Task GetInterfaceMetricsForIndex(IPAd... method ParseHostResourcesMemory (line 425) | private Task ParseHostResourcesMemory(List storageVars, Devi... method DetermineDeviceType (line 433) | private DeviceType DetermineDeviceType(string model, string description) method GetV3 (line 455) | private IList GetV3(IPEndPoint endpoint, List vari... method GetV1V2c (line 480) | private IList GetV1V2c(IPEndPoint endpoint, List v... method WalkV3 (line 496) | private void WalkV3(IPEndPoint endpoint, ObjectIdentifier table, List<... method WalkV1V2c (line 533) | private void WalkV1V2c(IPEndPoint endpoint, ObjectIdentifier table, Li... method GetAuthenticationProvider (line 549) | private IAuthenticationProvider GetAuthenticationProvider() method GetPrivacyProvider (line 567) | private IPrivacyProvider GetPrivacyProvider(IAuthenticationProvider auth) method ConvertSnmpValue (line 588) | private T? ConvertSnmpValue(ISnmpData? data) method DebugLog (line 657) | private void DebugLog(string message) FILE: src/NetworkOptimizer.Monitoring/UniFiOids.cs class UniFiOids (line 6) | public static class UniFiOids method GetInterfaceOid (line 447) | public static string GetInterfaceOid(string baseOid, int interfaceIndex) method GetTableOid (line 455) | public static string GetTableOid(string baseOid, params int[] indices) FILE: src/NetworkOptimizer.Reports/BrandingOptions.cs class BrandingOptions (line 7) | public class BrandingOptions method OzarkConnect (line 46) | public static BrandingOptions OzarkConnect() => new() method Generic (line 57) | public static BrandingOptions Generic() => new() class ColorScheme (line 69) | public class ColorScheme method OzarkConnect (line 120) | public static ColorScheme OzarkConnect() => new() method Generic (line 136) | public static ColorScheme Generic() => new() method HighContrast (line 152) | public static ColorScheme HighContrast() => new() method HexToRgb (line 168) | public static (float R, float G, float B) HexToRgb(string hex) method GetPrimaryRgb (line 184) | public (float R, float G, float B) GetPrimaryRgb() => HexToRgb(Primary); method GetSecondaryRgb (line 189) | public (float R, float G, float B) GetSecondaryRgb() => HexToRgb(Secon... method GetSuccessRgb (line 194) | public (float R, float G, float B) GetSuccessRgb() => HexToRgb(Success); method GetWarningRgb (line 199) | public (float R, float G, float B) GetWarningRgb() => HexToRgb(Warning); method GetCriticalRgb (line 204) | public (float R, float G, float B) GetCriticalRgb() => HexToRgb(Critic... FILE: src/NetworkOptimizer.Reports/MarkdownReportGenerator.cs class MarkdownReportGenerator (line 9) | public class MarkdownReportGenerator method MarkdownReportGenerator (line 13) | public MarkdownReportGenerator(BrandingOptions? branding = null) method GenerateReport (line 21) | public void GenerateReport(ReportData data, string outputPath) method GenerateMarkdown (line 30) | public string GenerateMarkdown(ReportData data) method ComposeHeader (line 69) | private void ComposeHeader(StringBuilder sb, ReportData data) method ComposeNetworkReference (line 77) | private void ComposeNetworkReference(StringBuilder sb, ReportData data) method ComposeExecutiveSummary (line 105) | private void ComposeExecutiveSummary(StringBuilder sb, ReportData data) method ComposeActionItems (line 146) | private void ComposeActionItems(StringBuilder sb, ReportData data) method ComposeSwitchDetails (line 199) | private void ComposeSwitchDetails(StringBuilder sb, ReportData data) method ComposePortSecuritySummary (line 266) | private void ComposePortSecuritySummary(StringBuilder sb, ReportData d... method ComposeThreatSummary (line 285) | private void ComposeThreatSummary(StringBuilder sb, ReportData data) method ComposeFooter (line 342) | private void ComposeFooter(StringBuilder sb, ReportData data) FILE: src/NetworkOptimizer.Reports/PdfReportGenerator.cs class PdfReportGenerator (line 13) | public class PdfReportGenerator method PdfReportGenerator (line 18) | public PdfReportGenerator(BrandingOptions? branding = null) method LoadLogoFromResources (line 29) | private void LoadLogoFromResources() method MatchesSwitch (line 56) | private static bool MatchesSwitch(AuditIssue issue, SwitchDetail switc... method GenerateReport (line 72) | public void GenerateReport(ReportData data, string outputPath) method GenerateReportBytes (line 93) | public byte[] GenerateReportBytes(ReportData data) method ComposeHeader (line 111) | private void ComposeHeader(IContainer container, ReportData data) method ComposeFooter (line 144) | private void ComposeFooter(IContainer container, ReportData data) method ComposeContent (line 174) | private void ComposeContent(IContainer container, ReportData data) method ComposeNetworkReference (line 225) | private void ComposeNetworkReference(IContainer container, ReportData ... method ComposeDnsSecuritySection (line 281) | private void ComposeDnsSecuritySection(IContainer container, ReportDat... method ComposeExecutiveSummary (line 434) | private void ComposeExecutiveSummary(IContainer container, ReportData ... method ComposeActionItems (line 518) | private void ComposeActionItems(IContainer container, ReportData data) method ComposeSwitchDetails (line 648) | private void ComposeSwitchDetails(IContainer container, ReportData data) method ComposeAccessPointDetails (line 731) | private void ComposeAccessPointDetails(IContainer container, ReportDat... method ComposeOfflineClientsSection (line 868) | private void ComposeOfflineClientsSection(IContainer container, Report... method ComposePortTable (line 975) | private void ComposePortTable(IContainer container, SwitchDetail switc... method ComposeThreatSummary (line 1096) | private void ComposeThreatSummary(IContainer container, ReportData data) method ComposePortSecuritySummary (line 1276) | private void ComposePortSecuritySummary(IContainer container, ReportDa... method TrimUniFiSuffix (line 1341) | private static string TrimUniFiSuffix(string message) => method GetColor (line 1344) | private string GetColor(string hexColor) FILE: src/NetworkOptimizer.Reports/ReportData.cs class ReportData (line 8) | public class ReportData class DnsSecuritySummary (line 29) | public class DnsSecuritySummary method GetDohStatusDisplay (line 58) | public string GetDohStatusDisplay() method GetProtectionStatusDisplay (line 63) | public string GetProtectionStatusDisplay() method GetWanDnsDisplay (line 69) | public string GetWanDnsDisplay() method GetDnsLeakProtectionDetail (line 77) | public string GetDnsLeakProtectionDetail() method GetDeviceDnsDisplay (line 101) | public string GetDeviceDnsDisplay() class ThirdPartyDnsNetworkInfo (line 117) | public class ThirdPartyDnsNetworkInfo class SecurityScore (line 128) | public class SecurityScore method CalculateRating (line 142) | public static SecurityRating CalculateRating(int criticalCount, int wa... type SecurityRating (line 154) | public enum SecurityRating class NetworkInfo (line 165) | public class NetworkInfo method GetDisplayName (line 174) | public string GetDisplayName() => VlanId == 1 method ParsePurpose (line 181) | public static NetworkType ParsePurpose(string? purpose) => purpose?.To... type NetworkType (line 193) | public enum NetworkType class DeviceInfo (line 207) | public class DeviceInfo class AccessPointDetail (line 223) | public class AccessPointDetail class WirelessClientDetail (line 239) | public class WirelessClientDetail class OfflineClientDetail (line 258) | public class OfflineClientDetail class SwitchDetail (line 278) | public class SwitchDetail class PortDetail (line 302) | public class PortDetail method GetLinkStatus (line 336) | public string GetLinkStatus() => DisplayFormatters.GetLinkStatus(IsUp,... method GetPoeStatus (line 338) | public string GetPoeStatus() => DisplayFormatters.GetPoeStatus(PoePowe... method GetPortSecurityStatus (line 340) | public string GetPortSecurityStatus() => DisplayFormatters.GetPortSecu... method GetIsolationStatus (line 342) | public string GetIsolationStatus() => DisplayFormatters.GetIsolationSt... method GetStatus (line 344) | public (string Status, PortStatusType StatusType) GetStatus(bool suppo... method GetConnectedDeviceStatus (line 386) | private string? GetConnectedDeviceStatus() method IsIoTDeviceOnWrongVlan (line 411) | private bool IsIoTDeviceOnWrongVlan() type PortStatusType (line 422) | public enum PortStatusType class AuditIssue (line 432) | public class AuditIssue method GetDeviceDisplay (line 456) | public string GetDeviceDisplay() method GetPortDisplay (line 483) | public string GetPortDisplay() type IssueType (line 514) | public enum IssueType type IssueSeverity (line 525) | public enum IssueSeverity class PortSecuritySummary (line 535) | public class PortSecuritySummary class ThreatSummaryData (line 552) | public class ThreatSummaryData class ThreatSourceEntry (line 564) | public class ThreatSourceEntry class ExposedServiceEntry (line 572) | public class ExposedServiceEntry FILE: src/NetworkOptimizer.Sqm/BaselineCalculator.cs class BaselineCalculator (line 8) | public class BaselineCalculator method AddSample (line 16) | public void AddSample(SpeedtestSample sample) method AddSample (line 24) | public void AddSample(double downloadSpeed, double uploadSpeed, double... method CalculateBaseline (line 42) | public BaselineTable CalculateBaseline() method GetBaselineTable (line 94) | public BaselineTable GetBaselineTable() => _baselineTable; method LoadBaselineTable (line 99) | public void LoadBaselineTable(BaselineTable table) method CalculateBlendedSpeed (line 111) | public double CalculateBlendedSpeed(double measuredSpeed, double basel... method GetLearningProgress (line 130) | public double GetLearningProgress() method IsLearningComplete (line 138) | public bool IsLearningComplete() method GetCurrentBaselineSpeed (line 146) | public int? GetCurrentBaselineSpeed() method GetBaselineSpeed (line 155) | public int? GetBaselineSpeed(DateTime time) method UpdateHourlyBaseline (line 164) | public void UpdateHourlyBaseline(SpeedtestSample sample) method ExportToShellFormat (line 208) | public Dictionary ExportToShellFormat() method ImportFromShellFormat (line 223) | public void ImportFromShellFormat(Dictionary shellBase... method CalculateMedian (line 262) | private static double CalculateMedian(List sortedValues) method GetDayOfWeek (line 281) | private static int GetDayOfWeek(DateTime time) FILE: src/NetworkOptimizer.Sqm/InputSanitizer.cs class InputSanitizer (line 10) | public static partial class InputSanitizer method ValidatePingHost (line 16) | public static (bool isValid, string? error) ValidatePingHost(string? p... method ValidateSpeedtestServerId (line 63) | public static (bool isValid, string? error) ValidateSpeedtestServerId(... method SanitizeConnectionName (line 88) | public static string SanitizeConnectionName(string? connectionName) method ValidateCronSchedule (line 126) | public static (bool isValid, string? error) ValidateCronSchedule(strin... method IsValidCronField (line 173) | private static bool IsValidCronField(string field, int min, int max) method ValidateInterface (line 217) | public static (bool isValid, string? error) ValidateInterface(string? ... method EscapeForShellDoubleQuote (line 242) | public static string EscapeForShellDoubleQuote(string value) method TrimPingHost (line 261) | public static string? TrimPingHost(string? pingHost) method TrimSpeedtestServerId (line 267) | public static string? TrimSpeedtestServerId(string? serverId) method TrimInterface (line 273) | public static string? TrimInterface(string? interfaceName) method HostnameRegex (line 277) | [GeneratedRegex(@"^[a-zA-Z0-9]([a-zA-Z0-9\-\.]*[a-zA-Z0-9])?$")] method NumericRegex (line 280) | [GeneratedRegex(@"^[0-9]+$")] method SafeNameRegex (line 283) | [GeneratedRegex(@"[^a-z0-9\-]")] method MultipleHyphensRegex (line 286) | [GeneratedRegex(@"-+")] method InterfaceRegex (line 289) | [GeneratedRegex(@"^[a-zA-Z0-9_\-\.]+$")] FILE: src/NetworkOptimizer.Sqm/LatencyMonitor.cs class LatencyMonitor (line 8) | public class LatencyMonitor method LatencyMonitor (line 12) | public LatencyMonitor(SqmConfiguration config) method CalculateRateAdjustment (line 24) | public (double adjustedRate, string reason) CalculateRateAdjustment( method IsLatencyHigh (line 112) | public bool IsLatencyHigh(double currentLatency) method CalculateDeviationCount (line 120) | public int CalculateDeviationCount(double currentLatency) method GeneratePingCommand (line 130) | public string GeneratePingCommand() method ParsePingOutput (line 140) | public double? ParsePingOutput(string pingOutput) method CalculateDecreaseMultiplier (line 167) | public double CalculateDecreaseMultiplier(int deviations) method CalculateIncreaseMultiplier (line 175) | public double CalculateIncreaseMultiplier(int steps = 1) method CapRate (line 183) | private double CapRate(double rate) method NeedsRecovery (line 198) | public bool NeedsRecovery(double currentRate) method GetRateBounds (line 207) | public (double minRate, double optimalRate, double maxRate) GetRateBou... FILE: src/NetworkOptimizer.Sqm/Models/BaselineData.cs class HourlyBaseline (line 6) | public class HourlyBaseline class BaselineTable (line 57) | public class BaselineTable method GetBaseline (line 82) | public HourlyBaseline? GetBaseline(DateTime time) method GetCurrentBaseline (line 93) | public HourlyBaseline? GetCurrentBaseline() method GetDayOfWeek (line 101) | private static int GetDayOfWeek(DateTime time) method GetCompletionPercentage (line 111) | public double GetCompletionPercentage() class SpeedtestSample (line 120) | public class SpeedtestSample FILE: src/NetworkOptimizer.Sqm/Models/ConnectionProfile.cs type ConnectionType (line 6) | public enum ConnectionType class ConnectionProfile (line 33) | public class ConnectionProfile method GetDefaultSpeedtestServer (line 130) | private string? GetDefaultSpeedtestServer() method CalculateMaxSpeed (line 144) | private int CalculateMaxSpeed(int nominalSpeed) method CalculateMinSpeed (line 176) | private int CalculateMinSpeed(int nominalSpeed) method CalculateAbsoluteMax (line 208) | private int CalculateAbsoluteMax(int nominalSpeed) method GetOverheadMultiplier (line 226) | private double GetOverheadMultiplier() method GetBaselineLatency (line 258) | private double GetBaselineLatency() method GetLatencyThreshold (line 276) | private double GetLatencyThreshold() method GetLatencyDecrease (line 308) | private double GetLatencyDecrease() method GetLatencyIncrease (line 326) | private double GetLatencyIncrease() method GetSafetyCapPercent (line 345) | private double GetSafetyCapPercent() method GetHourlyBaseline (line 366) | public Dictionary GetHourlyBaseline(double congestionS... method GetBlendingRatios (line 396) | public (double baselineWeight, double measuredWeight) GetBlendingRatio... method GetBaselinePatternPublic (line 437) | public double[,] GetBaselinePatternPublic() => GetBaselinePattern(); method GetBaselinePattern (line 444) | private double[,] GetBaselinePattern() method CreateUniformWeekPattern (line 540) | private static double[,] CreateUniformWeekPattern(double[] dailyPattern) method ToSqmConfiguration (line 556) | public SqmConfiguration ToSqmConfiguration() method GetConnectionTypeName (line 576) | public static string GetConnectionTypeName(ConnectionType type) method GetConnectionTypeDescription (line 594) | public static string GetConnectionTypeDescription(ConnectionType type) FILE: src/NetworkOptimizer.Sqm/Models/SpeedtestResult.cs class SpeedtestResult (line 8) | public class SpeedtestResult class PingInfo (line 41) | public class PingInfo class BandwidthInfo (line 56) | public class BandwidthInfo class LatencyInfo (line 83) | public class LatencyInfo class InterfaceInfo (line 98) | public class InterfaceInfo class ServerInfo (line 116) | public class ServerInfo class ResultInfo (line 140) | public class ResultInfo FILE: src/NetworkOptimizer.Sqm/Models/SqmConfiguration.cs class SqmConfiguration (line 6) | public class SqmConfiguration method GetProfile (line 176) | public ConnectionProfile GetProfile() method ApplyProfileSettings (line 194) | public void ApplyProfileSettings(int? wanLinkSpeedMbps = null) method FromProfile (line 237) | public static SqmConfiguration FromProfile(ConnectionProfile profile) method GetParameterSummary (line 268) | public string GetParameterSummary() FILE: src/NetworkOptimizer.Sqm/Models/SqmStatus.cs class SqmStatus (line 6) | public class SqmStatus FILE: src/NetworkOptimizer.Sqm/ScriptGenerator.cs class ScriptGenerator (line 11) | public class ScriptGenerator method ScriptGenerator (line 17) | public ScriptGenerator(SqmConfiguration config, int initialDelaySecond... method Inv (line 33) | private static string Inv(double value) => Math.Round(value, 10).ToStr... method GenerateAllScripts (line 39) | public Dictionary GenerateAllScripts(Dictionary $"20-sqm-{_name}.sh"; method GenerateBootScript (line 60) | public string GenerateBootScript(Dictionary baseline) method GenerateSpeedtestScript (line 220) | private string GenerateSpeedtestScript(Dictionary base... method GeneratePingScript (line 361) | private string GeneratePingScript(Dictionary baseline) method GetTcUpdateFunction (line 573) | private string GetTcUpdateFunction() method GetBaselineBlendingLogic (line 698) | private string GetBaselineBlendingLogic() method GetBaselineBlendingLogicForPing (line 755) | private string GetBaselineBlendingLogicForPing() method GetLatencyAdjustmentLogic (line 802) | private string GetLatencyAdjustmentLogic() FILE: src/NetworkOptimizer.Sqm/SpeedtestIntegration.cs class SpeedtestIntegration (line 9) | public class SpeedtestIntegration method SpeedtestIntegration (line 13) | public SpeedtestIntegration(SqmConfiguration config) method ParseSpeedtestJson (line 21) | public SpeedtestResult? ParseSpeedtestJson(string json) method BytesPerSecToMbps (line 36) | public double BytesPerSecToMbps(long bytesPerSec) method CalculateEffectiveRate (line 46) | public double CalculateEffectiveRate(double downloadMbps) method ProcessSpeedtestResult (line 63) | public double ProcessSpeedtestResult(SpeedtestResult result, BaselineC... method CreateSample (line 106) | public SpeedtestSample CreateSample(SpeedtestResult result) method IsValidResult (line 126) | public bool IsValidResult(SpeedtestResult result) method CalculateVariancePercent (line 143) | public double CalculateVariancePercent(double measuredSpeed, double ba... method DetermineBlendRatio (line 154) | public (double baselineWeight, double measuredWeight) DetermineBlendRa... method GetDayOfWeek (line 171) | private static int GetDayOfWeek(DateTime time) FILE: src/NetworkOptimizer.Sqm/SqmManager.cs class SqmManager (line 8) | public class SqmManager method SqmManager (line 18) | public SqmManager(SqmConfiguration config) method ConfigureSqm (line 30) | public void ConfigureSqm(SqmConfiguration config) method StartLearningMode (line 48) | public void StartLearningMode() method StopLearningMode (line 60) | public void StopLearningMode() method GetStatus (line 73) | public SqmStatus GetStatus() method TriggerSpeedtest (line 90) | public async Task TriggerSpeedtest(string speedtestJsonOutput) method ApplyRateAdjustment (line 124) | public (double adjustedRate, string reason) ApplyRateAdjustment(double... method LoadBaseline (line 145) | public void LoadBaseline(BaselineTable baseline) method GetBaselineTable (line 153) | public BaselineTable GetBaselineTable() method ExportBaselineForScript (line 161) | public Dictionary ExportBaselineForScript() method GenerateScripts (line 169) | public Dictionary GenerateScripts() method GenerateScriptsToDirectory (line 178) | public void GenerateScriptsToDirectory(string outputDirectory) method IsLearningComplete (line 194) | public bool IsLearningComplete() method GetLearningProgress (line 202) | public double GetLearningProgress() method GetRateBounds (line 210) | public (double minRate, double optimalRate, double maxRate) GetRateBou... method ValidateConfiguration (line 218) | public List ValidateConfiguration() FILE: src/NetworkOptimizer.Storage/Helpers/SpeedTestFilterHelper.cs class SpeedTestFilterHelper (line 10) | public static class SpeedTestFilterHelper method MatchesFilter (line 26) | public static bool MatchesFilter(Iperf3Result result, string normalize... method MatchesHop (line 68) | private static bool MatchesHop(NetworkHop hop, string normalizedFilter) FILE: src/NetworkOptimizer.Storage/InfluxDbStorage.cs class InfluxDbStorage (line 13) | public class InfluxDbStorage : IMetricsStorage, IDisposable, IAsyncDispo... method InfluxDbStorage (line 28) | public InfluxDbStorage( method RunFlushLoopAsync (line 76) | private async Task RunFlushLoopAsync(CancellationToken cancellationToken) method WriteMetricsAsync (line 99) | public async Task WriteMetricsAsync( method WriteInterfaceMetricsAsync (line 163) | public async Task WriteInterfaceMetricsAsync( method WriteSqmMetricsAsync (line 228) | public async Task WriteSqmMetricsAsync( method HealthCheckAsync (line 284) | public async Task HealthCheckAsync(CancellationToken cancellatio... method WritePointAsync (line 301) | private async Task WritePointAsync(PointData point, CancellationToken ... method FlushBufferAsync (line 324) | private async Task FlushBufferAsync() method ForceFlushAsync (line 366) | public async Task ForceFlushAsync() method DisposeAsync (line 377) | public async ValueTask DisposeAsync() method Dispose (line 418) | public void Dispose() FILE: src/NetworkOptimizer.Storage/Interfaces/IAgentRepository.cs type IAgentRepository (line 8) | public interface IAgentRepository method SaveAgentConfigAsync (line 10) | Task SaveAgentConfigAsync(AgentConfiguration config, Cancellation... method GetAgentConfigAsync (line 11) | Task GetAgentConfigAsync(string agentId, Cancella... method GetAllAgentConfigsAsync (line 12) | Task> GetAllAgentConfigsAsync(CancellationTok... method UpdateAgentConfigAsync (line 13) | Task UpdateAgentConfigAsync(AgentConfiguration config, CancellationTok... method DeleteAgentConfigAsync (line 14) | Task DeleteAgentConfigAsync(string agentId, CancellationToken cancella... FILE: src/NetworkOptimizer.Storage/Interfaces/IAuditRepository.cs type IAuditRepository (line 8) | public interface IAuditRepository method SaveAuditResultAsync (line 11) | Task SaveAuditResultAsync(AuditResult audit, CancellationToken ca... method GetAuditResultAsync (line 12) | Task GetAuditResultAsync(int auditId, CancellationToken ... method GetLatestAuditResultAsync (line 13) | Task GetLatestAuditResultAsync(CancellationToken cancell... method GetAuditHistoryAsync (line 14) | Task> GetAuditHistoryAsync(string? deviceId = null, ... method GetAuditCountAsync (line 15) | Task GetAuditCountAsync(CancellationToken cancellationToken = def... method GetManualAuditCountAsync (line 16) | Task GetManualAuditCountAsync(CancellationToken cancellationToken... method GetScheduledAuditCountAsync (line 17) | Task GetScheduledAuditCountAsync(CancellationToken cancellationTo... method DeleteOldAuditsAsync (line 18) | Task DeleteOldAuditsAsync(DateTime olderThan, CancellationToken cancel... method ClearAllAuditsAsync (line 19) | Task ClearAllAuditsAsync(CancellationToken cancellationToken = default); method GetDismissedIssuesAsync (line 22) | Task> GetDismissedIssuesAsync(CancellationToken c... method SaveDismissedIssueAsync (line 23) | Task SaveDismissedIssueAsync(DismissedIssue issue, CancellationToken c... method DeleteDismissedIssueAsync (line 24) | Task DeleteDismissedIssueAsync(string issueKey, CancellationToken canc... method ClearAllDismissedIssuesAsync (line 25) | Task ClearAllDismissedIssuesAsync(CancellationToken cancellationToken ... FILE: src/NetworkOptimizer.Storage/Interfaces/IMetricsStorage.cs type IMetricsStorage (line 3) | public interface IMetricsStorage method WriteMetricsAsync (line 5) | Task WriteMetricsAsync(string deviceId, string measurementType, Dictio... method WriteInterfaceMetricsAsync (line 6) | Task WriteInterfaceMetricsAsync(string deviceId, string interfaceId, D... method WriteSqmMetricsAsync (line 7) | Task WriteSqmMetricsAsync(string deviceId, Dictionary ... method HealthCheckAsync (line 8) | Task HealthCheckAsync(CancellationToken cancellationToken = defa... FILE: src/NetworkOptimizer.Storage/Interfaces/IModemRepository.cs type IModemRepository (line 8) | public interface IModemRepository method GetModemConfigurationsAsync (line 10) | Task> GetModemConfigurationsAsync(Cancellatio... method GetEnabledModemConfigurationsAsync (line 11) | Task> GetEnabledModemConfigurationsAsync(Canc... method GetModemConfigurationAsync (line 12) | Task GetModemConfigurationAsync(int id, Cancellat... method SaveModemConfigurationAsync (line 13) | Task SaveModemConfigurationAsync(ModemConfiguration config, Cancellati... method DeleteModemConfigurationAsync (line 14) | Task DeleteModemConfigurationAsync(int id, CancellationToken cancellat... FILE: src/NetworkOptimizer.Storage/Interfaces/ISettingsRepository.cs type ISettingsRepository (line 8) | public interface ISettingsRepository method GetSystemSettingAsync (line 11) | Task GetSystemSettingAsync(string key, CancellationToken canc... method SaveSystemSettingAsync (line 12) | Task SaveSystemSettingAsync(string key, string? value, CancellationTok... method SaveLicenseAsync (line 15) | Task SaveLicenseAsync(LicenseInfo license, CancellationToken canc... method GetLicenseAsync (line 16) | Task GetLicenseAsync(CancellationToken cancellationToken... method UpdateLicenseAsync (line 17) | Task UpdateLicenseAsync(LicenseInfo license, CancellationToken cancell... method GetAdminSettingsAsync (line 20) | Task GetAdminSettingsAsync(CancellationToken cancellat... method SaveAdminSettingsAsync (line 21) | Task SaveAdminSettingsAsync(AdminSettings settings, CancellationToken ... FILE: src/NetworkOptimizer.Storage/Interfaces/ISpeedTestRepository.cs type ISpeedTestRepository (line 12) | public interface ISpeedTestRepository method GetGatewaySshSettingsAsync (line 15) | Task GetGatewaySshSettingsAsync(CancellationToken... method SaveGatewaySshSettingsAsync (line 16) | Task SaveGatewaySshSettingsAsync(GatewaySshSettings settings, Cancella... method SaveIperf3ResultAsync (line 19) | Task SaveIperf3ResultAsync(Iperf3Result result, CancellationToken canc... method GetRecentIperf3ResultsAsync (line 20) | Task> GetRecentIperf3ResultsAsync(int count = 50, i... method GetIperf3ResultsForDeviceAsync (line 21) | Task> GetIperf3ResultsForDeviceAsync(string deviceH... method SearchIperf3ResultsAsync (line 31) | Task> SearchIperf3ResultsAsync(string filter, int c... method DeleteIperf3ResultAsync (line 33) | Task DeleteIperf3ResultAsync(int id, CancellationToken cancellat... method ClearIperf3HistoryAsync (line 34) | Task ClearIperf3HistoryAsync(CancellationToken cancellationToken = def... method ClearAllIperf3ResultsAsync (line 35) | Task ClearAllIperf3ResultsAsync(CancellationToken cancellationToken = ... method GetIperf3ResultCountAsync (line 36) | Task GetIperf3ResultCountAsync(CancellationToken cancellationToke... method UpdateIperf3ResultNotesAsync (line 45) | Task UpdateIperf3ResultNotesAsync(int id, string? notes, Cancell... method GetSqmWanConfigAsync (line 48) | Task GetSqmWanConfigAsync(int wanNumber, Cancell... method GetAllSqmWanConfigsAsync (line 49) | Task> GetAllSqmWanConfigsAsync(CancellationT... method SaveSqmWanConfigAsync (line 50) | Task SaveSqmWanConfigAsync(SqmWanConfiguration config, CancellationTok... method DeleteSqmWanConfigAsync (line 51) | Task DeleteSqmWanConfigAsync(int wanNumber, CancellationToken cancella... method ClearAllSqmWanConfigsAsync (line 52) | Task ClearAllSqmWanConfigsAsync(CancellationToken cancellationToken = ... FILE: src/NetworkOptimizer.Storage/Interfaces/ISqmRepository.cs type ISqmRepository (line 8) | public interface ISqmRepository method SaveSqmBaselineAsync (line 10) | Task SaveSqmBaselineAsync(SqmBaseline baseline, CancellationToken... method GetSqmBaselineAsync (line 11) | Task GetSqmBaselineAsync(string deviceId, string interfa... method GetAllSqmBaselinesAsync (line 12) | Task> GetAllSqmBaselinesAsync(string? deviceId = nul... method UpdateSqmBaselineAsync (line 13) | Task UpdateSqmBaselineAsync(SqmBaseline baseline, CancellationToken ca... method DeleteSqmBaselineAsync (line 14) | Task DeleteSqmBaselineAsync(int baselineId, CancellationToken cancella... FILE: src/NetworkOptimizer.Storage/Interfaces/IUniFiRepository.cs type IUniFiRepository (line 8) | public interface IUniFiRepository method GetUniFiConnectionSettingsAsync (line 11) | Task GetUniFiConnectionSettingsAsync(Cancell... method SaveUniFiConnectionSettingsAsync (line 12) | Task SaveUniFiConnectionSettingsAsync(UniFiConnectionSettings settings... method GetUniFiSshSettingsAsync (line 15) | Task GetUniFiSshSettingsAsync(CancellationToken can... method SaveUniFiSshSettingsAsync (line 16) | Task SaveUniFiSshSettingsAsync(UniFiSshSettings settings, Cancellation... method GetDeviceSshConfigurationsAsync (line 19) | Task> GetDeviceSshConfigurationsAsync(Can... method GetDeviceSshConfigurationAsync (line 20) | Task GetDeviceSshConfigurationAsync(int id, C... method SaveDeviceSshConfigurationAsync (line 21) | Task SaveDeviceSshConfigurationAsync(DeviceSshConfiguration config, Ca... method DeleteDeviceSshConfigurationAsync (line 22) | Task DeleteDeviceSshConfigurationAsync(int id, CancellationToken cance... FILE: src/NetworkOptimizer.Storage/Migrations/20251208000000_InitialCreate.Designer.cs class InitialCreate (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251208000000_InitialCreate.cs class InitialCreate (line 8) | public partial class InitialCreate : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 192) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251210000000_AddModemAndSpeedTables.Designer.cs class AddModemAndSpeedTables (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251210000000_AddModemAndSpeedTables.cs class AddModemAndSpeedTables (line 8) | public partial class AddModemAndSpeedTables : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 123) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251216000000_AddUniFiSshSettings.Designer.cs class AddUniFiSshSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251216000000_AddUniFiSshSettings.cs class AddUniFiSshSettings (line 8) | public partial class AddUniFiSshSettings : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 39) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217000000_AddDismissedIssues.Designer.cs class AddDismissedIssues (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217000000_AddDismissedIssues.cs class AddDismissedIssues (line 8) | public partial class AddDismissedIssues : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 35) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217100000_AddGatewaySshSettings.Designer.cs class AddGatewaySshSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217100000_AddGatewaySshSettings.cs class AddGatewaySshSettings (line 8) | public partial class AddGatewaySshSettings : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 38) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217200000_AddStartIperf3ServerToDeviceConfig.Designer.cs class AddStartIperf3ServerToDeviceConfig (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217200000_AddStartIperf3ServerToDeviceConfig.cs class AddStartIperf3ServerToDeviceConfig (line 8) | public partial class AddStartIperf3ServerToDeviceConfig : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217300000_AddSystemSettings.Designer.cs class AddSystemSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251217300000_AddSystemSettings.cs class AddSystemSettings (line 8) | public partial class AddSystemSettings : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 35) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251218000000_AddSshCredentialOverridesToDeviceConfig.Designer.cs class AddSshCredentialOverridesToDeviceConfig (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251218000000_AddSshCredentialOverridesToDeviceConfig.cs class AddSshCredentialOverridesToDeviceConfig (line 8) | public partial class AddSshCredentialOverridesToDeviceConfig : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 36) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251219000000_AddUniFiConnectionSettings.Designer.cs class AddUniFiConnectionSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251219000000_AddUniFiConnectionSettings.cs class AddUniFiConnectionSettings (line 8) | public partial class AddUniFiConnectionSettings : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 37) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251224000000_AddPathAnalysisJson.Designer.cs class AddPathAnalysisJson (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251224000000_AddPathAnalysisJson.cs class AddPathAnalysisJson (line 8) | public partial class AddPathAnalysisJson : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 21) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251227000000_AddTcMonitorPort.Designer.cs class AddTcMonitorPort (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251227000000_AddTcMonitorPort.cs class AddTcMonitorPort (line 8) | public partial class AddTcMonitorPort : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251227100000_AddSqmWanConfiguration.Designer.cs class AddSqmWanConfiguration (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251227100000_AddSqmWanConfiguration.cs class AddSqmWanConfiguration (line 8) | public partial class AddSqmWanConfiguration : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 44) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251228000000_AddAdminSettings.Designer.cs class AddAdminSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251228000000_AddAdminSettings.cs class AddAdminSettings (line 8) | public partial class AddAdminSettings : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 31) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251228100000_AddSqmSpeedtestSchedule.Designer.cs class AddSqmSpeedtestSchedule (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251228100000_AddSqmSpeedtestSchedule.cs class AddSqmSpeedtestSchedule (line 8) | public partial class AddSqmSpeedtestSchedule : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 43) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251229000000_AddReportDataJson.Designer.cs class AddReportDataJson (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20251229000000_AddReportDataJson.cs class AddReportDataJson (line 8) | public partial class AddReportDataJson : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 21) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260102000000_AddLocalIpToIperf3Result.Designer.cs class AddLocalIpToIperf3Result (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260102000000_AddLocalIpToIperf3Result.cs class AddLocalIpToIperf3Result (line 8) | public partial class AddLocalIpToIperf3Result : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260103000000_AddIgnoreControllerSSLErrors.Designer.cs class AddIgnoreControllerSSLErrors (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260103000000_AddIgnoreControllerSSLErrors.cs class AddIgnoreControllerSSLErrors (line 8) | public partial class AddIgnoreControllerSSLErrors : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260104100000_AddClientSpeedTestFieldsToIperf3Result.Designer.cs class AddClientSpeedTestFieldsToIperf3Result (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260104100000_AddClientSpeedTestFieldsToIperf3Result.cs class AddClientSpeedTestFieldsToIperf3Result (line 8) | public partial class AddClientSpeedTestFieldsToIperf3Result : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 53) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260106000000_AddLocationAndWifiSignal.Designer.cs class AddLocationAndWifiSignal (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260106000000_AddLocationAndWifiSignal.cs class AddLocationAndWifiSignal (line 8) | public partial class AddLocationAndWifiSignal : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 60) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107000000_AddWifiRadio.Designer.cs class AddWifiRadio (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107000000_AddWifiRadio.cs class AddWifiRadio (line 8) | public partial class AddWifiRadio : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107100000_AddWifiMlo.Designer.cs class AddWifiMlo (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107100000_AddWifiMlo.cs class AddWifiMlo (line 8) | public partial class AddWifiMlo : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 28) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107200000_AddWifiTxRxRates.Designer.cs class AddWifiTxRxRates (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260107200000_AddWifiTxRxRates.cs class AddWifiTxRxRates (line 8) | public partial class AddWifiTxRxRates : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 27) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260110000000_AddIperf3BinaryPathToDeviceConfig.Designer.cs class AddIperf3BinaryPathToDeviceConfig (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260110000000_AddIperf3BinaryPathToDeviceConfig.cs class AddIperf3BinaryPathToDeviceConfig (line 8) | public partial class AddIperf3BinaryPathToDeviceConfig : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260113000000_AddUpnpNotes.Designer.cs class AddUpnpNotes (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260113000000_AddUpnpNotes.cs class AddUpnpNotes (line 8) | public partial class AddUpnpNotes : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 39) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260124000000_AddNotesToIperf3Result.Designer.cs class AddNotesToIperf3Result (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260124000000_AddNotesToIperf3Result.cs class AddNotesToIperf3Result (line 8) | public partial class AddNotesToIperf3Result : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260209200000_AddApLocations.Designer.cs class AddApLocations (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260209200000_AddApLocations.cs class AddApLocations (line 9) | public partial class AddApLocations : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 39) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260210100000_AddLoadedLatencyColumns.Designer.cs class AddLoadedLatencyColumns (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260210100000_AddLoadedLatencyColumns.cs class AddLoadedLatencyColumns (line 8) | public partial class AddLoadedLatencyColumns : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 39) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211000000_AddWanIdentityColumns.Designer.cs class AddWanIdentityColumns (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211000000_AddWanIdentityColumns.cs class AddWanIdentityColumns (line 8) | public partial class AddWanIdentityColumns : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 29) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211200000_AddBuildingsAndFloorPlans.Designer.cs class AddBuildingsAndFloorPlans (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211200000_AddBuildingsAndFloorPlans.cs class AddBuildingsAndFloorPlans (line 9) | public partial class AddBuildingsAndFloorPlans : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 67) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211300000_AddApOrientationDeg.Designer.cs class AddApOrientationDeg (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211300000_AddApOrientationDeg.cs class AddApOrientationDeg (line 8) | public partial class AddApOrientationDeg : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211400000_AddApMountType.Designer.cs class AddApMountType (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260211400000_AddApMountType.cs class AddApMountType (line 8) | public partial class AddApMountType : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260212000000_AddFloorMaterial.Designer.cs class AddFloorMaterial (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260212000000_AddFloorMaterial.cs class AddFloorMaterial (line 8) | public partial class AddFloorMaterial : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 23) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260213000000_AddClientSignalLog.Designer.cs class AddClientSignalLog (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260213000000_AddClientSignalLog.cs class AddClientSignalLog (line 9) | public partial class AddClientSignalLog : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 70) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260213000000_AddPlannedAps.Designer.cs class AddPlannedAps (line 11) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 16) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260213000000_AddPlannedAps.cs class AddPlannedAps (line 9) | public partial class AddPlannedAps : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 39) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260214100000_AddPerBandTxPower.Designer.cs class AddPerBandTxPower (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260214100000_AddPerBandTxPower.cs class AddPerBandTxPower (line 8) | public partial class AddPerBandTxPower : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 60) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260220000000_AddFloorPlanImages.Designer.cs class AddFloorPlanImages (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260220000000_AddFloorPlanImages.cs class AddFloorPlanImages (line 8) | public partial class AddFloorPlanImages : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 51) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260221000000_AddAlertTables.Designer.cs class AddAlertTables (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260221000000_AddAlertTables.cs class AddAlertTables (line 9) | public partial class AddAlertTables : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 146) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260221100000_AddThreatTables.Designer.cs class AddThreatTables (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260221100000_AddThreatTables.cs class AddThreatTables (line 9) | public partial class AddThreatTables : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 130) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260222100000_AddTrafficFlowFields.Designer.cs class AddTrafficFlowFields (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260222100000_AddTrafficFlowFields.cs class AddTrafficFlowFields (line 8) | public partial class AddTrafficFlowFields : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 69) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260222200000_AddThreatNoiseFilters.Designer.cs class AddThreatNoiseFilters (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260222200000_AddThreatNoiseFilters.cs class AddThreatNoiseFilters (line 9) | public partial class AddThreatNoiseFilters : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 34) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260223000000_AddScheduledTasks.Designer.cs class AddScheduledTasks (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260223000000_AddScheduledTasks.cs class AddScheduledTasks (line 9) | public partial class AddScheduledTasks : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 59) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260223100000_AddAlertRuleThreshold.Designer.cs class AddAlertRuleThreshold (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260223100000_AddAlertRuleThreshold.cs class AddAlertRuleThreshold (line 7) | public partial class AddAlertRuleThreshold : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260225200000_AddPatternLastAlertedAt.Designer.cs class AddPatternLastAlertedAt (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260225200000_AddPatternLastAlertedAt.cs class AddPatternLastAlertedAt (line 7) | public partial class AddPatternLastAlertedAt : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226010000_AddPatternDedupKey.Designer.cs class AddPatternDedupKey (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226010000_AddPatternDedupKey.cs class AddPatternDedupKey (line 7) | public partial class AddPatternDedupKey : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226100000_AddAuditIsScheduled.Designer.cs class AddAuditIsScheduled (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226100000_AddAuditIsScheduled.cs class AddAuditIsScheduled (line 7) | public partial class AddAuditIsScheduled : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 19) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226120000_AddSqmBaselineLatency.Designer.cs class AddSqmBaselineLatency (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260226120000_AddSqmBaselineLatency.cs class AddSqmBaselineLatency (line 7) | public partial class AddSqmBaselineLatency : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260228000000_AddWanDataUsageTables.Designer.cs class AddWanDataUsageTables (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260228000000_AddWanDataUsageTables.cs class AddWanDataUsageTables (line 9) | public partial class AddWanDataUsageTables : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 66) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260301000000_AddSignalLogChannelWidth.Designer.cs class AddSignalLogChannelWidth (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260301000000_AddSignalLogChannelWidth.cs class AddSignalLogChannelWidth (line 8) | public partial class AddSignalLogChannelWidth : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 21) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260301200000_AddSnapshotGatewayBootTime.Designer.cs class AddSnapshotGatewayBootTime (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260301200000_AddSnapshotGatewayBootTime.cs class AddSnapshotGatewayBootTime (line 9) | public partial class AddSnapshotGatewayBootTime : Migration method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260306000000_AddAlertSourceUrl.Designer.cs class AddAlertSourceUrl (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260306000000_AddAlertSourceUrl.cs class AddAlertSourceUrl (line 7) | public partial class AddAlertSourceUrl : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260311000000_AddDeviceIperf3Overrides.Designer.cs class AddDeviceIperf3Overrides (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260311000000_AddDeviceIperf3Overrides.cs class AddDeviceIperf3Overrides (line 8) | public partial class AddDeviceIperf3Overrides : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 27) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260312000000_PurgeStaleCrowdSecNegativeCache.Designer.cs class PurgeStaleCrowdSecNegativeCache (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260312000000_PurgeStaleCrowdSecNegativeCache.cs class PurgeStaleCrowdSecNegativeCache (line 14) | public partial class PurgeStaleCrowdSecNegativeCache : Migration method Up (line 17) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 23) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260318000000_AddExternalServerName.Designer.cs class AddExternalServerName (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260318000000_AddExternalServerName.cs class AddExternalServerName (line 11) | public partial class AddExternalServerName : Migration method Up (line 14) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 25) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260320000000_AddWanSteerTrafficClasses.Designer.cs class AddWanSteerTrafficClasses (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260320000000_AddWanSteerTrafficClasses.cs class AddWanSteerTrafficClasses (line 8) | public partial class AddWanSteerTrafficClasses : Migration method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 43) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260402100000_AddCongestionSeverity.Designer.cs class AddCongestionSeverity (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260402100000_AddCongestionSeverity.cs class AddCongestionSeverity (line 7) | public partial class AddCongestionSeverity : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 25) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260404000000_AddApiKey.Designer.cs class AddApiKey (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260404000000_AddApiKey.cs class AddApiKey (line 7) | public partial class AddApiKey : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 19) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260405000000_AddExternalSpeedTestServers.Designer.cs class AddExternalSpeedTestServers (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260405000000_AddExternalSpeedTestServers.cs class AddExternalSpeedTestServers (line 11) | public partial class AddExternalSpeedTestServers : Migration method Up (line 13) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 66) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260428000000_AddSqmLinkSpeedOverride.Designer.cs class AddSqmLinkSpeedOverride (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260428000000_AddSqmLinkSpeedOverride.cs class AddSqmLinkSpeedOverride (line 7) | public partial class AddSqmLinkSpeedOverride : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260505000000_AddSqmBootDelay.Designer.cs class AddSqmBootDelay (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260505000000_AddSqmBootDelay.cs class AddSqmBootDelay (line 7) | public partial class AddSqmBootDelay : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 18) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260507000000_AddPerfTweakSettings.Designer.cs class AddPerfTweakSettings (line 13) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/20260507000000_AddPerfTweakSettings.cs class AddPerfTweakSettings (line 7) | public partial class AddPerfTweakSettings : Migration method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder) method Down (line 32) | protected override void Down(MigrationBuilder migrationBuilder) FILE: src/NetworkOptimizer.Storage/Migrations/NetworkOptimizerDbContextModelSnapshot.cs class NetworkOptimizerDbContextModelSnapshot (line 9) | [DbContext(typeof(NetworkOptimizerDbContext))] method BuildModel (line 12) | protected override void BuildModel(ModelBuilder modelBuilder) FILE: src/NetworkOptimizer.Storage/Models/AdminSettings.cs class AdminSettings (line 10) | public class AdminSettings FILE: src/NetworkOptimizer.Storage/Models/AgentConfiguration.cs class AgentConfiguration (line 8) | public class AgentConfiguration FILE: src/NetworkOptimizer.Storage/Models/ApLocation.cs class ApLocation (line 9) | public class ApLocation FILE: src/NetworkOptimizer.Storage/Models/AuditResult.cs class AuditResult (line 9) | public class AuditResult FILE: src/NetworkOptimizer.Storage/Models/Building.cs class Building (line 8) | public class Building FILE: src/NetworkOptimizer.Storage/Models/ClientSignalLog.cs class ClientSignalLog (line 9) | public class ClientSignalLog FILE: src/NetworkOptimizer.Storage/Models/DeviceSshConfiguration.cs class DeviceSshConfiguration (line 11) | public class DeviceSshConfiguration FILE: src/NetworkOptimizer.Storage/Models/DismissedIssue.cs class DismissedIssue (line 8) | public class DismissedIssue FILE: src/NetworkOptimizer.Storage/Models/ExternalSpeedTestServer.cs class ExternalSpeedTestServer (line 12) | public class ExternalSpeedTestServer method GenerateServerId (line 53) | public static string GenerateServerId(string name) FILE: src/NetworkOptimizer.Storage/Models/FloorPlan.cs class FloorPlan (line 8) | public class FloorPlan FILE: src/NetworkOptimizer.Storage/Models/FloorPlanImage.cs class FloorPlanImage (line 9) | public class FloorPlanImage FILE: src/NetworkOptimizer.Storage/Models/GatewaySshSettings.cs class GatewaySshSettings (line 10) | public class GatewaySshSettings FILE: src/NetworkOptimizer.Storage/Models/Iperf3Result.cs type SpeedTestDirection (line 12) | public enum SpeedTestDirection class Iperf3Result (line 42) | public class Iperf3Result method IsLocalLanClient (line 247) | public bool IsLocalLanClient() FILE: src/NetworkOptimizer.Storage/Models/LicenseInfo.cs class LicenseInfo (line 9) | public class LicenseInfo FILE: src/NetworkOptimizer.Storage/Models/ModemConfiguration.cs class ModemConfiguration (line 8) | public class ModemConfiguration FILE: src/NetworkOptimizer.Storage/Models/NetworkOptimizerDbContext.cs class NetworkOptimizerDbContext (line 10) | public class NetworkOptimizerDbContext : DbContext method NetworkOptimizerDbContext (line 12) | public NetworkOptimizerDbContext(DbContextOptions SaveAgentConfigAsync(AgentConfiguration config,... method GetAgentConfigAsync (line 52) | public async Task GetAgentConfigAsync( method GetAllAgentConfigsAsync (line 74) | public async Task> GetAllAgentConfigsAsync(Ca... method UpdateAgentConfigAsync (line 95) | public async Task UpdateAgentConfigAsync(AgentConfiguration config, Ca... method DeleteAgentConfigAsync (line 116) | public async Task DeleteAgentConfigAsync(string agentId, CancellationT... FILE: src/NetworkOptimizer.Storage/Repositories/AlertRepository.cs class AlertRepository (line 13) | public class AlertRepository : IAlertRepository method AlertRepository (line 18) | public AlertRepository(NetworkOptimizerDbContext context, ILogger> GetRulesAsync(CancellationToken can... method GetEnabledRulesAsync (line 42) | public async Task> GetEnabledRulesAsync(CancellationTo... method GetRuleAsync (line 58) | public async Task GetRuleAsync(int id, CancellationToken c... method SaveRuleAsync (line 72) | public async Task SaveRuleAsync(AlertRule rule, CancellationToken... method UpdateRuleAsync (line 89) | public async Task UpdateRuleAsync(AlertRule rule, CancellationToken ca... method DeleteRuleAsync (line 113) | public async Task DeleteRuleAsync(int id, CancellationToken cancellati... method GetChannelsAsync (line 136) | public async Task> GetChannelsAsync(Cancellation... method GetEnabledChannelsAsync (line 152) | public async Task> GetEnabledChannelsAsync(Cance... method GetChannelAsync (line 168) | public async Task GetChannelAsync(int id, Cancellati... method SaveChannelAsync (line 182) | public async Task SaveChannelAsync(DeliveryChannel channel, Cance... method UpdateChannelAsync (line 199) | public async Task UpdateChannelAsync(DeliveryChannel channel, Cancella... method DeleteChannelAsync (line 215) | public async Task DeleteChannelAsync(int id, CancellationToken cancell... method SaveAlertAsync (line 238) | public async Task SaveAlertAsync(AlertHistoryEntry alert, Cancell... method UpdateAlertAsync (line 253) | public async Task UpdateAlertAsync(AlertHistoryEntry alert, Cancellati... method GetActiveAlertsAsync (line 267) | public async Task> GetActiveAlertsAsync(Cancel... method GetAlertHistoryAsync (line 284) | public async Task> GetAlertHistoryAsync( method GetAlertAsync (line 312) | public async Task GetAlertAsync(int id, Cancellati... method GetAlertsForDigestAsync (line 326) | public async Task> GetAlertsForDigestAsync(Dat... method GetUnresolvedAlertsAsync (line 343) | public async Task> GetUnresolvedAlertsAsync(Ca... method GetAlertsByIncidentIdAsync (line 360) | public async Task> GetAlertsByIncidentIdAsync(... method SaveIncidentAsync (line 381) | public async Task SaveIncidentAsync(AlertIncident incident, Cance... method UpdateIncidentAsync (line 396) | public async Task UpdateIncidentAsync(AlertIncident incident, Cancella... method GetActiveIncidentByKeyAsync (line 410) | public async Task GetActiveIncidentByKeyAsync(string c... method GetIncidentsAsync (line 426) | public async Task> GetIncidentsAsync(int limit = 5... method GetIncidentAsync (line 443) | public async Task GetIncidentAsync(int id, Cancellatio... FILE: src/NetworkOptimizer.Storage/Repositories/AuditRepository.cs class AuditRepository (line 11) | public class AuditRepository : IAuditRepository method AuditRepository (line 16) | public AuditRepository(NetworkOptimizerDbContext context, ILogger SaveAuditResultAsync(AuditResult audit, Cancell... method GetAuditResultAsync (line 56) | public async Task GetAuditResultAsync(int auditId, Cance... method GetLatestAuditResultAsync (line 76) | public async Task GetLatestAuditResultAsync(Cancellation... method GetAuditHistoryAsync (line 99) | public async Task> GetAuditHistoryAsync( method GetAuditCountAsync (line 130) | public async Task GetAuditCountAsync(CancellationToken cancellati... method GetManualAuditCountAsync (line 143) | public async Task GetManualAuditCountAsync(CancellationToken canc... method GetScheduledAuditCountAsync (line 156) | public async Task GetScheduledAuditCountAsync(CancellationToken c... method DeleteOldAuditsAsync (line 174) | public async Task DeleteOldAuditsAsync(DateTime olderThan, Cancellatio... method ClearAllAuditsAsync (line 200) | public async Task ClearAllAuditsAsync(CancellationToken cancellationTo... method GetDismissedIssuesAsync (line 228) | public async Task> GetDismissedIssuesAsync(Cancel... method SaveDismissedIssueAsync (line 249) | public async Task SaveDismissedIssueAsync(DismissedIssue issue, Cancel... method DeleteDismissedIssueAsync (line 270) | public async Task DeleteDismissedIssueAsync(string issueKey, Cancellat... method ClearAllDismissedIssuesAsync (line 294) | public async Task ClearAllDismissedIssuesAsync(CancellationToken cance... FILE: src/NetworkOptimizer.Storage/Repositories/ModemRepository.cs class ModemRepository (line 11) | public class ModemRepository : IModemRepository method ModemRepository (line 16) | public ModemRepository(NetworkOptimizerDbContext context, ILogger> GetModemConfigurationsAsyn... method GetEnabledModemConfigurationsAsync (line 48) | public async Task> GetEnabledModemConfigurati... method GetModemConfigurationAsync (line 71) | public async Task GetModemConfigurationAsync(int ... method SaveModemConfigurationAsync (line 91) | public async Task SaveModemConfigurationAsync(ModemConfiguration confi... method DeleteModemConfigurationAsync (line 138) | public async Task DeleteModemConfigurationAsync(int id, CancellationTo... FILE: src/NetworkOptimizer.Storage/Repositories/ScheduleRepository.cs class ScheduleRepository (line 12) | public class ScheduleRepository : IScheduleRepository method ScheduleRepository (line 17) | public ScheduleRepository(NetworkOptimizerDbContext context, ILogger> GetAllAsync(CancellationToken c... method GetEnabledAsync (line 40) | public async Task> GetEnabledAsync(CancellationTok... method GetByIdAsync (line 56) | public async Task GetByIdAsync(int id, CancellationTok... method SaveAsync (line 70) | public async Task SaveAsync(ScheduledTask task, CancellationToken... method UpdateAsync (line 87) | public async Task UpdateAsync(ScheduledTask task, CancellationToken ca... method UpdateNextRunAsync (line 109) | public async Task UpdateNextRunAsync(int id, DateTime nextRun, Cancell... method UpdateRunStatusAsync (line 127) | public async Task UpdateRunStatusAsync(int id, DateTime lastRun, DateT... method DeleteAsync (line 149) | public async Task DeleteAsync(int id, CancellationToken cancellationTo... FILE: src/NetworkOptimizer.Storage/Repositories/SettingsRepository.cs class SettingsRepository (line 11) | public class SettingsRepository : ISettingsRepository method SettingsRepository (line 16) | public SettingsRepository(NetworkOptimizerDbContext context, ILogger GetSystemSettingAsync(string key, Cancellat... method SaveSystemSettingAsync (line 52) | public async Task SaveSystemSettingAsync(string key, string? value, Ca... method SaveLicenseAsync (line 94) | public async Task SaveLicenseAsync(LicenseInfo license, Cancellat... method GetLicenseAsync (line 117) | public async Task GetLicenseAsync(CancellationToken canc... method UpdateLicenseAsync (line 139) | public async Task UpdateLicenseAsync(LicenseInfo license, Cancellation... method GetAdminSettingsAsync (line 164) | public async Task GetAdminSettingsAsync(CancellationTo... method SaveAdminSettingsAsync (line 184) | public async Task SaveAdminSettingsAsync(AdminSettings settings, Cance... FILE: src/NetworkOptimizer.Storage/Repositories/SpeedTestRepository.cs class SpeedTestRepository (line 12) | public class SpeedTestRepository : ISpeedTestRepository method SpeedTestRepository (line 17) | public SpeedTestRepository(NetworkOptimizerDbContext context, ILogger<... method GetGatewaySshSettingsAsync (line 30) | public async Task GetGatewaySshSettingsAsync(Canc... method SaveGatewaySshSettingsAsync (line 50) | public async Task SaveGatewaySshSettingsAsync(GatewaySshSettings setti... method SaveIperf3ResultAsync (line 95) | public async Task SaveIperf3ResultAsync(Iperf3Result result, Cancellat... method GetRecentIperf3ResultsAsync (line 118) | public async Task> GetRecentIperf3ResultsAsync(int ... method GetIperf3ResultsForDeviceAsync (line 155) | public async Task> GetIperf3ResultsForDeviceAsync(s... method SearchIperf3ResultsAsync (line 201) | public async Task> SearchIperf3ResultsAsync(string ... method DeleteIperf3ResultAsync (line 257) | public async Task DeleteIperf3ResultAsync(int id, CancellationTo... method UpdateIperf3ResultNotesAsync (line 286) | public async Task UpdateIperf3ResultNotesAsync(int id, string? n... method ClearIperf3HistoryAsync (line 312) | public async Task ClearIperf3HistoryAsync(CancellationToken cancellati... method ClearAllIperf3ResultsAsync (line 341) | public async Task ClearAllIperf3ResultsAsync(CancellationToken cancell... method GetIperf3ResultCountAsync (line 360) | public async Task GetIperf3ResultCountAsync(CancellationToken can... method GetSqmWanConfigAsync (line 383) | public async Task GetSqmWanConfigAsync(int wanNu... method GetAllSqmWanConfigsAsync (line 403) | public async Task> GetAllSqmWanConfigsAsync(... method SaveSqmWanConfigAsync (line 424) | public async Task SaveSqmWanConfigAsync(SqmWanConfiguration config, Ca... method DeleteSqmWanConfigAsync (line 474) | public async Task DeleteSqmWanConfigAsync(int wanNumber, CancellationT... method ClearAllSqmWanConfigsAsync (line 499) | public async Task ClearAllSqmWanConfigsAsync(CancellationToken cancell... FILE: src/NetworkOptimizer.Storage/Repositories/SqmRepository.cs class SqmRepository (line 11) | public class SqmRepository : ISqmRepository method SqmRepository (line 16) | public SqmRepository(NetworkOptimizerDbContext context, ILogger SaveSqmBaselineAsync(SqmBaseline baseline, Canc... method GetSqmBaselineAsync (line 61) | public async Task GetSqmBaselineAsync( method GetAllSqmBaselinesAsync (line 91) | public async Task> GetAllSqmBaselinesAsync( method UpdateSqmBaselineAsync (line 120) | public async Task UpdateSqmBaselineAsync(SqmBaseline baseline, Cancell... method DeleteSqmBaselineAsync (line 148) | public async Task DeleteSqmBaselineAsync(int baselineId, CancellationT... FILE: src/NetworkOptimizer.Storage/Repositories/ThreatRepository.cs class ThreatRepository (line 13) | public class ThreatRepository : IThreatRepository method ThreatRepository (line 20) | public ThreatRepository(NetworkOptimizerDbContext context, ILogger filters) method SetSeverityFilter (line 31) | public void SetSeverityFilter(int[]? severities) method BaseQuery (line 39) | private IQueryable BaseQuery(DateTime from, DateTime to) method ApplyNoiseFilters (line 58) | private IQueryable ApplyNoiseFilters(IQueryable parameters) method ToCidrPrefix (line 180) | private static string? ToCidrPrefix(string? value) => NetworkUtilities... method BuildSeverityFilterSql (line 186) | private string BuildSeverityFilterSql() method SaveEventsAsync (line 195) | public async Task SaveEventsAsync(List events, Cancellati... method GetEventsAsync (line 230) | public async Task> GetEventsAsync(DateTime from, Dat... method GetThreatSummaryAsync (line 257) | public async Task GetThreatSummaryAsync(DateTime from, ... method GetTopSourcesAsync (line 285) | public async Task> GetTopSourcesAsync(DateTime f... method GetTopTargetedPortsAsync (line 313) | public async Task> GetTopTargetedPortsAsync(Da... method GetCountryDistributionAsync (line 344) | public async Task> GetCountryDistributionAsync... method GetTimelineAsync (line 364) | public async Task> GetTimelineAsync(DateTime from... method GetKillChainDistributionAsync (line 425) | public async Task> GetKillChainDistrib... method SearchIpsAsync (line 444) | public async Task> SearchIpsAsync(DateTime fro... method GetTopDestinationIpsAsync (line 554) | public async Task> GetTopDestinationIpsAsync(D... method GetEventsByIpAsync (line 580) | public async Task> GetEventsByIpAsync(string ip, Dat... method GetEventsByPortAsync (line 600) | public async Task> GetEventsByPortAsync(int port, Da... method GetEventsByProtocolAsync (line 620) | public async Task> GetEventsByProtocolAsync(string p... method GetThreatCountByPortAsync (line 640) | public async Task GetThreatCountByPortAsync(int port, DateTime fr... method GetThreatCountsByPortAsync (line 655) | public async Task> GetThreatCountsByPortAsync(Dat... method PurgeOldEventsAsync (line 678) | public async Task PurgeOldEventsAsync(DateTime before, CancellationTok... method BackfillGeoDataAsync (line 696) | public async Task BackfillGeoDataAsync(Action> ... method GetAttackSequencesAsync (line 725) | public async Task> GetAttackSequencesAsync(DateTi... method SavePatternAsync (line 792) | public async Task SavePatternAsync(ThreatPattern pattern, Cancellation... method GetPatternsAsync (line 837) | public async Task> GetPatternsAsync(DateTime from,... method GetUnalertedPatternsAsync (line 861) | public async Task> GetUnalertedPatternsAsync(Cance... method MarkPatternAlertedAsync (line 871) | public async Task MarkPatternAlertedAsync(int patternId, DateTime aler... method GetCrowdSecCacheAsync (line 885) | public async Task GetCrowdSecCacheAsync(string ip, method SaveCrowdSecCacheAsync (line 900) | public async Task SaveCrowdSecCacheAsync(CrowdSecReputation reputation, method PurgeCrowdSecCacheAsync (line 928) | public async Task PurgeCrowdSecCacheAsync(CancellationToken cancellati... method GetNoiseFiltersAsync (line 950) | public async Task> GetNoiseFiltersAsync(Cancel... method SaveNoiseFilterAsync (line 958) | public async Task SaveNoiseFilterAsync(ThreatNoiseFilter filter, Cance... method DeleteNoiseFilterAsync (line 965) | public async Task DeleteNoiseFilterAsync(int filterId, CancellationTok... method ToggleNoiseFilterAsync (line 972) | public async Task ToggleNoiseFilterAsync(int filterId, bool enabled, C... class TimelineBucketRaw (line 985) | internal class TimelineBucketRaw FILE: src/NetworkOptimizer.Storage/Repositories/UniFiRepository.cs class UniFiRepository (line 11) | public class UniFiRepository : IUniFiRepository method UniFiRepository (line 16) | public UniFiRepository(NetworkOptimizerDbContext context, ILogger GetUniFiConnectionSettings... method SaveUniFiConnectionSettingsAsync (line 49) | public async Task SaveUniFiConnectionSettingsAsync(UniFiConnectionSett... method GetUniFiSshSettingsAsync (line 94) | public async Task GetUniFiSshSettingsAsync(Cancella... method SaveUniFiSshSettingsAsync (line 114) | public async Task SaveUniFiSshSettingsAsync(UniFiSshSettings settings,... method GetDeviceSshConfigurationsAsync (line 156) | public async Task> GetDeviceSshConfigurat... method GetDeviceSshConfigurationAsync (line 178) | public async Task GetDeviceSshConfigurationAs... method SaveDeviceSshConfigurationAsync (line 198) | public async Task SaveDeviceSshConfigurationAsync(DeviceSshConfigurati... method DeleteDeviceSshConfigurationAsync (line 244) | public async Task DeleteDeviceSshConfigurationAsync(int id, Cancellati... FILE: src/NetworkOptimizer.Storage/RepositoryBase.cs class RepositoryBase (line 8) | public abstract class RepositoryBase method RepositoryBase (line 12) | protected RepositoryBase(ILogger logger) method ExecuteAsync (line 20) | protected async Task ExecuteAsync(Func> operation, strin... method ExecuteAsync (line 36) | protected async Task ExecuteAsync(Func operation, string operati... method ExecuteWithDefaultAsync (line 52) | protected async Task ExecuteWithDefaultAsync(Func> oper... FILE: src/NetworkOptimizer.Storage/Services/CredentialProtectionService.cs class CredentialProtectionService (line 11) | public class CredentialProtectionService : ICredentialProtectionService method CredentialProtectionService (line 17) | public CredentialProtectionService(ILogger Detect(List events) FILE: src/NetworkOptimizer.Threats/Analysis/DDoSDetector.cs class DDoSDetector (line 10) | public class DDoSDetector method Detect (line 16) | public List Detect(List events) FILE: src/NetworkOptimizer.Threats/Analysis/ExploitCampaignDetector.cs class ExploitCampaignDetector (line 10) | public class ExploitCampaignDetector method Detect (line 15) | public List Detect(List events) method GetSubnet24 (line 76) | private static string? GetSubnet24(string ip) FILE: src/NetworkOptimizer.Threats/Analysis/ExposureValidator.cs class ExposureValidator (line 13) | public class ExposureValidator method ExposureValidator (line 26) | public ExposureValidator(ILogger logger) method ValidateAsync (line 34) | public async Task ValidateAsync( method CalculateGeoBlockRecommendation (line 104) | private async Task CalculateGeoBlockRecommend... method GetServiceName (line 136) | private static string GetServiceName(int port, string? ruleName) method ParsePorts (line 142) | private static List ParsePorts(string? portSpec) FILE: src/NetworkOptimizer.Threats/Analysis/FlowInterestFilter.cs class FlowInterestFilter (line 13) | public static class FlowInterestFilter method IsInteresting (line 37) | public static bool IsInteresting(JsonElement flow) FILE: src/NetworkOptimizer.Threats/Analysis/KillChainClassifier.cs class KillChainClassifier (line 9) | public class KillChainClassifier method Classify (line 25) | public KillChainStage Classify(ThreatEvent evt) method ClassifyIps (line 36) | private KillChainStage ClassifyIps(ThreatEvent evt) method ClassifyFlow (line 69) | private KillChainStage ClassifyFlow(ThreatEvent evt) method MatchesAny (line 103) | private static bool MatchesAny(string text, string[] keywords) FILE: src/NetworkOptimizer.Threats/Analysis/ScanSweepDetector.cs class ScanSweepDetector (line 10) | public class ScanSweepDetector method Detect (line 15) | public List Detect(List events) FILE: src/NetworkOptimizer.Threats/Analysis/ThreatPatternAnalyzer.cs class ThreatPatternAnalyzer (line 9) | public class ThreatPatternAnalyzer method ThreatPatternAnalyzer (line 17) | public ThreatPatternAnalyzer(ILogger logger) method DetectPatterns (line 25) | public List DetectPatterns(List events) FILE: src/NetworkOptimizer.Threats/CrowdSec/CrowdSecClient.cs type CrowdSecLookupOutcome (line 8) | public enum CrowdSecLookupOutcome class CrowdSecClient (line 23) | public class CrowdSecClient method CrowdSecClient (line 41) | public CrowdSecClient(IHttpClientFactory httpClientFactory, ILogger TestApiKeyAsync( method GetRateLimitMessageAsync (line 186) | private static async Task GetRateLimitMessageAsync( method Handle429Async (line 199) | private async Task<(CrowdSecIpInfo? Info, CrowdSecLookupOutcome Outcom... method ThrottleAsync (line 242) | private async Task ThrottleAsync(CancellationToken cancellationToken) method OnSuccess (line 272) | private void OnSuccess() method CheckAndIncrementRateLimit (line 280) | private bool CheckAndIncrementRateLimit() FILE: src/NetworkOptimizer.Threats/CrowdSec/CrowdSecEnrichmentService.cs class CrowdSecEnrichmentService (line 11) | public class CrowdSecEnrichmentService method CrowdSecEnrichmentService (line 16) | public CrowdSecEnrichmentService( method GetReputationAsync (line 30) | public async Task<(CrowdSecIpInfo? Info, CrowdSecLookupOutcome Outcome... method GetReputationBadge (line 88) | public static string GetReputationBadge(CrowdSecIpInfo? info) method GetThreatScore (line 106) | public static int GetThreatScore(CrowdSecIpInfo? info) FILE: src/NetworkOptimizer.Threats/CrowdSec/CrowdSecModels.cs class CrowdSecIpInfo (line 8) | public class CrowdSecIpInfo class CrowdSecBehavior (line 80) | public class CrowdSecBehavior class CrowdSecAttackDetail (line 92) | public class CrowdSecAttackDetail class CrowdSecReference (line 107) | public class CrowdSecReference class CrowdSecScores (line 119) | public class CrowdSecScores class CrowdSecScoreBreakdown (line 134) | public class CrowdSecScoreBreakdown class CrowdSecLocation (line 152) | public class CrowdSecLocation class CrowdSecClassifications (line 167) | public class CrowdSecClassifications class CrowdSecClassification (line 176) | public class CrowdSecClassification class CrowdSecHistory (line 188) | public class CrowdSecHistory class CrowdSecMitreTechnique (line 203) | public class CrowdSecMitreTechnique FILE: src/NetworkOptimizer.Threats/Enrichment/GeoEnrichmentService.cs class GeoEnrichmentService (line 17) | public class GeoEnrichmentService : IDisposable method GeoEnrichmentService (line 28) | public GeoEnrichmentService(ILogger logger) method Initialize (line 36) | public void Initialize(string dataPath) method Enrich (line 86) | public GeoInfo Enrich(string ipAddress) method EnrichEvents (line 152) | public void EnrichEvents(List events) method GetDatabaseInfo (line 191) | public (bool CityExists, DateTime? CityDate, bool AsnExists, DateTime?... method DownloadDatabasesAsync (line 208) | public async Task<(bool Success, string Message)> DownloadDatabasesAsync( method Reload (line 317) | public void Reload(string dataPath) method Dispose (line 331) | public void Dispose() FILE: src/NetworkOptimizer.Threats/Interfaces/IThreatRepository.cs type IThreatRepository (line 8) | public interface IThreatRepository method SetNoiseFilters (line 15) | void SetNoiseFilters(List filters); method SetSeverityFilter (line 22) | void SetSeverityFilter(int[]? severities); method SaveEventsAsync (line 25) | Task SaveEventsAsync(List events, CancellationToken cance... method GetEventsAsync (line 26) | Task> GetEventsAsync(DateTime from, DateTime to, str... method GetThreatSummaryAsync (line 27) | Task GetThreatSummaryAsync(DateTime from, DateTime to, ... method GetTopSourcesAsync (line 28) | Task> GetTopSourcesAsync(DateTime from, DateTime... method GetTopTargetedPortsAsync (line 29) | Task> GetTopTargetedPortsAsync(DateTime from, ... method GetCountryDistributionAsync (line 30) | Task> GetCountryDistributionAsync(DateTime fro... method GetTimelineAsync (line 31) | Task> GetTimelineAsync(DateTime from, DateTime to... method GetKillChainDistributionAsync (line 32) | Task> GetKillChainDistributionAsync(Da... method GetEventsByIpAsync (line 33) | Task> GetEventsByIpAsync(string ip, DateTime from, D... method SearchIpsAsync (line 34) | Task> SearchIpsAsync(DateTime from, DateTime t... method GetTopDestinationIpsAsync (line 35) | Task> GetTopDestinationIpsAsync(DateTime from,... method GetEventsByPortAsync (line 36) | Task> GetEventsByPortAsync(int port, DateTime from, ... method GetEventsByProtocolAsync (line 37) | Task> GetEventsByProtocolAsync(string protocol, Date... method GetThreatCountByPortAsync (line 38) | Task GetThreatCountByPortAsync(int port, DateTime from, DateTime ... method GetThreatCountsByPortAsync (line 39) | Task> GetThreatCountsByPortAsync(DateTime from, D... method PurgeOldEventsAsync (line 40) | Task PurgeOldEventsAsync(DateTime before, CancellationToken cancellati... method BackfillGeoDataAsync (line 46) | Task BackfillGeoDataAsync(Action> enrichAction,... method SavePatternAsync (line 49) | Task SavePatternAsync(ThreatPattern pattern, CancellationToken cancell... method GetPatternsAsync (line 50) | Task> GetPatternsAsync(DateTime from, DateTime to,... method GetUnalertedPatternsAsync (line 51) | Task> GetUnalertedPatternsAsync(CancellationToken ... method MarkPatternAlertedAsync (line 52) | Task MarkPatternAlertedAsync(int patternId, DateTime alertedAt, Cancel... method GetAttackSequencesAsync (line 55) | Task> GetAttackSequencesAsync(DateTime from, Date... method GetCrowdSecCacheAsync (line 58) | Task GetCrowdSecCacheAsync(string ip, Cancellatio... method SaveCrowdSecCacheAsync (line 59) | Task SaveCrowdSecCacheAsync(CrowdSecReputation reputation, Cancellatio... method PurgeCrowdSecCacheAsync (line 60) | Task PurgeCrowdSecCacheAsync(CancellationToken cancellationToken = def... method GetNoiseFiltersAsync (line 63) | Task> GetNoiseFiltersAsync(CancellationToken c... method SaveNoiseFilterAsync (line 64) | Task SaveNoiseFilterAsync(ThreatNoiseFilter filter, CancellationToken ... method DeleteNoiseFilterAsync (line 65) | Task DeleteNoiseFilterAsync(int filterId, CancellationToken cancellati... method ToggleNoiseFilterAsync (line 66) | Task ToggleNoiseFilterAsync(int filterId, bool enabled, CancellationTo... type ThreatSummary (line 72) | public record ThreatSummary type SourceIpSummary (line 84) | public record SourceIpSummary type TargetPortSummary (line 104) | public record TargetPortSummary type TimelineBucket (line 117) | public record TimelineBucket class SearchResultEntry (line 131) | public class SearchResultEntry type AttackSequence (line 147) | public record AttackSequence type SequenceStage (line 158) | public record SequenceStage FILE: src/NetworkOptimizer.Threats/Interfaces/IThreatSettingsAccessor.cs type IThreatSettingsAccessor (line 7) | public interface IThreatSettingsAccessor method GetSettingAsync (line 9) | Task GetSettingAsync(string key, CancellationToken cancellati... method GetDecryptedSettingAsync (line 10) | Task GetDecryptedSettingAsync(string key, CancellationToken c... method SaveSettingAsync (line 11) | Task SaveSettingAsync(string key, string value, CancellationToken canc... FILE: src/NetworkOptimizer.Threats/Interfaces/IUniFiClientAccessor.cs type IUniFiClientAccessor (line 9) | public interface IUniFiClientAccessor FILE: src/NetworkOptimizer.Threats/Models/CrowdSecReputation.cs class CrowdSecReputation (line 6) | public class CrowdSecReputation FILE: src/NetworkOptimizer.Threats/Models/EventSource.cs type EventSource (line 6) | public enum EventSource FILE: src/NetworkOptimizer.Threats/Models/ExposureReport.cs class ExposureReport (line 6) | public class ExposureReport class ExposedService (line 17) | public class ExposedService class GeoBlockRecommendation (line 33) | public class GeoBlockRecommendation FILE: src/NetworkOptimizer.Threats/Models/GeoInfo.cs type GeoInfo (line 6) | public record GeoInfo FILE: src/NetworkOptimizer.Threats/Models/KillChainStage.cs type KillChainStage (line 6) | public enum KillChainStage class KillChainStageExtensions (line 15) | public static class KillChainStageExtensions method ToDisplayString (line 17) | public static string ToDisplayString(this KillChainStage stage) => sta... FILE: src/NetworkOptimizer.Threats/Models/PatternType.cs type PatternType (line 6) | public enum PatternType FILE: src/NetworkOptimizer.Threats/Models/ThreatAction.cs type ThreatAction (line 6) | public enum ThreatAction FILE: src/NetworkOptimizer.Threats/Models/ThreatEvent.cs class ThreatEvent (line 7) | public class ThreatEvent FILE: src/NetworkOptimizer.Threats/Models/ThreatNoiseFilter.cs class ThreatNoiseFilter (line 13) | public class ThreatNoiseFilter method Matches (line 46) | public bool Matches(string? sourceIp, string? destIp, int? destPort) method IpMatches (line 54) | private static bool IpMatches(string filterIp, string? eventIp) FILE: src/NetworkOptimizer.Threats/Models/ThreatPattern.cs class ThreatPattern (line 6) | public class ThreatPattern FILE: src/NetworkOptimizer.Threats/ThreatCollectionService.cs class ThreatCollectionService (line 18) | public class ThreatCollectionService : BackgroundService method ThreatCollectionService (line 47) | public ThreatCollectionService( method TriggerCollection (line 73) | public void TriggerCollection() method ExecuteAsync (line 91) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method CollectAndProcessAsync (line 131) | private async Task CollectAndProcessAsync(CancellationToken cancellati... method CollectRangeAsync (line 269) | private async Task> CollectRangeAsync( method ProcessAndSaveAsync (line 288) | private async Task ProcessAndSaveAsync(List events, method CollectTrafficFlowsAsync (line 606) | private async Task> CollectTrafficFlowsAsync( method CollectFlowsPassAsync (line 633) | private async Task> CollectFlowsPassAsync( method CollectIpsEventsAsync (line 687) | private async Task> CollectIpsEventsAsync( method LoadConfigAsync (line 737) | private async Task LoadConfigAsync(IThreatSettingsAccessor settings, C... method TryAutoDownloadGeoDatabasesAsync (line 748) | private async Task TryAutoDownloadGeoDatabasesAsync(CancellationToken ... method GetDataPath (line 802) | private static string GetDataPath() FILE: src/NetworkOptimizer.Threats/ThreatEventNormalizer.cs class ThreatEventNormalizer (line 10) | public class ThreatEventNormalizer method ThreatEventNormalizer (line 14) | public ThreatEventNormalizer(ILogger logger) method NormalizeV1Events (line 22) | public List NormalizeV1Events(JsonElement eventsArray) method NormalizeV2Events (line 69) | public List NormalizeV2Events(JsonElement response) method NormalizeFlowEvents (line 117) | public List NormalizeFlowEvents(JsonElement response) method MapFlowSeverity (line 248) | internal static int MapFlowSeverity(string risk, string action) method NormalizeSeverity (line 266) | internal static int NormalizeSeverity(int suricataSeverity) method NormalizeAction (line 281) | internal static ThreatAction NormalizeAction(string action) class JsonElementExtensions (line 295) | internal static class JsonElementExtensions method GetPropertyOrDefault (line 297) | public static string GetPropertyOrDefault(this JsonElement element, st... method GetPropertyOrDefault (line 308) | public static int GetPropertyOrDefault(this JsonElement element, strin... method GetPropertyOrDefault (line 317) | public static long GetPropertyOrDefault(this JsonElement element, stri... FILE: src/NetworkOptimizer.UniFi/ClientIpEnricher.cs class ClientIpEnricher (line 10) | public static class ClientIpEnricher method BuildMacToIpLookup (line 17) | public static Dictionary BuildMacToIpLookup(IEnumerabl... method GetEnrichedIp (line 35) | public static string? GetEnrichedIp(string? primaryIp, string? mac, Di... FILE: src/NetworkOptimizer.UniFi/Helpers/GlobalSwitchSettings.cs class GlobalSwitchSettings (line 12) | [VendorSpecific("UniFi", "Parses UniFi settings JSON 'data' array with '... method FromSettingsJson (line 24) | public static GlobalSwitchSettings? FromSettingsJson(JsonDocument? set... method GetEffectiveJumboFrames (line 73) | public bool GetEffectiveJumboFrames(UniFiDeviceResponse device) method GetEffectiveFlowControl (line 85) | public bool GetEffectiveFlowControl(UniFiDeviceResponse device) method IsExcluded (line 95) | public bool IsExcluded(string mac) => ExcludedMacs.Contains(mac); method GetExcludedMacs (line 100) | public IReadOnlyCollection GetExcludedMacs() => ExcludedMacs; FILE: src/NetworkOptimizer.UniFi/Helpers/VlanAnalysisHelper.cs class VlanAnalysisHelper (line 9) | public static class VlanAnalysisHelper method GetEffectiveVlanSettings (line 19) | public static EffectivePortVlanSettings GetEffectiveVlanSettings( method IsAccessPort (line 73) | public static bool IsAccessPort(EffectivePortVlanSettings settings) method IsTrunkPort (line 82) | public static bool IsTrunkPort(EffectivePortVlanSettings settings) method GetTaggedVlansOnAccessPort (line 91) | public static List GetTaggedVlansOnAccessPort(EffectivePortVla... method GetAllowedVlansOnTrunk (line 113) | public static HashSet GetAllowedVlansOnTrunk( method IsVlanNetwork (line 127) | public static bool IsVlanNetwork(UniFiNetworkConfig network) method IsInfrastructurePort (line 140) | public static bool IsInfrastructurePort(SwitchPort port, UplinkInfo? d... method IsServerPortByName (line 159) | public static bool IsServerPortByName(SwitchPort port) class EffectivePortVlanSettings (line 174) | public class EffectivePortVlanSettings FILE: src/NetworkOptimizer.UniFi/Models/NetworkHop.cs class NetworkHop (line 6) | public class NetworkHop type HopType (line 126) | public enum HopType FILE: src/NetworkOptimizer.UniFi/Models/NetworkPath.cs class NetworkPath (line 7) | public class NetworkPath FILE: src/NetworkOptimizer.UniFi/Models/PathAnalysisResult.cs class PathAnalysisResult (line 7) | public class PathAnalysisResult method CalculateEfficiency (line 51) | public void CalculateEfficiency() method GetGrade (line 63) | private static PerformanceGrade GetGrade(double efficiencyPercent) => ... method GenerateInsights (line 76) | public void GenerateInsights() method GetOverheadFactor (line 159) | public double GetOverheadFactor() method GetOverheadPercent (line 195) | public int GetOverheadPercent() method GetDirectionalEfficiency (line 212) | public (double fromDeviceMaxMbps, double toDeviceMaxMbps, double fromE... method IsAsymmetric (line 315) | public static bool IsAsymmetric(long? wifiRxRateKbps, long? wifiTxRate... method GetDirectionalRatesFromPath (line 341) | public (long? rxKbps, long? txKbps) GetDirectionalRatesFromPath() method AnalyzeRetransmits (line 383) | private void AnalyzeRetransmits() type PerformanceGrade (line 460) | public enum PerformanceGrade FILE: src/NetworkOptimizer.UniFi/Models/UniFiApiResponse.cs class UniFiApiResponse (line 9) | public class UniFiApiResponse class UniFiMeta (line 18) | public class UniFiMeta class UniFiLoginRequest (line 30) | public class UniFiLoginRequest class UniFiLoginResponse (line 48) | public class UniFiLoginResponse FILE: src/NetworkOptimizer.UniFi/Models/UniFiClientDetailResponse.cs class UniFiClientDetailResponse (line 9) | public class UniFiClientDetailResponse class ClientFingerprintData (line 135) | public class ClientFingerprintData FILE: src/NetworkOptimizer.UniFi/Models/UniFiClientResponse.cs class UniFiClientResponse (line 9) | public class UniFiClientResponse class MloLinkDetail (line 243) | public class MloLinkDetail FILE: src/NetworkOptimizer.UniFi/Models/UniFiDeviceResponse.cs class UniFiDeviceResponse (line 12) | public class UniFiDeviceResponse method GetWanInterfaces (line 263) | public List GetWanInterfaces() class GatewayWanInterface (line 301) | public class GatewayWanInterface class EthernetPort (line 348) | public class EthernetPort class SwitchPort (line 360) | public class SwitchPort class UplinkInfo (line 502) | public class UplinkInfo class DeviceStats (line 572) | public class DeviceStats class SystemStats (line 587) | public class SystemStats class ConfigNetwork (line 608) | public class ConfigNetwork class ConfigNetworkLan (line 621) | public class ConfigNetworkLan class PortOverride (line 634) | public class PortOverride class RadioTableEntry (line 655) | public class RadioTableEntry class RadioTableStats (line 795) | public class RadioTableStats class AntennaTableEntry (line 916) | public class AntennaTableEntry class VapTableEntry (line 943) | public class VapTableEntry class WifiTxLatency (line 1076) | public class WifiTxLatency class ScanRadioEntry (line 1097) | public class ScanRadioEntry class SpectrumEntry (line 1139) | public class SpectrumEntry class UniFiRogueApResponse (line 1181) | public class UniFiRogueApResponse class DownlinkTableEntry (line 1308) | public class DownlinkTableEntry FILE: src/NetworkOptimizer.UniFi/Models/UniFiFingerprintDatabase.cs class StringOrNumberConverter (line 9) | public class StringOrNumberConverter : JsonConverter method Read (line 11) | public override string? Read(ref Utf8JsonReader reader, Type typeToCon... method Write (line 22) | public override void Write(Utf8JsonWriter writer, string? value, JsonS... class UniFiFingerprintDatabase (line 35) | public class UniFiFingerprintDatabase method GetDeviceTypeName (line 80) | public string? GetDeviceTypeName(int? devTypeId) => method GetFamilyName (line 86) | public string? GetFamilyName(int? familyId) => method GetVendorName (line 92) | public string? GetVendorName(int? vendorId) => method Merge (line 98) | public void Merge(UniFiFingerprintDatabase other) class FingerprintDeviceEntry (line 118) | public class FingerprintDeviceEntry FILE: src/NetworkOptimizer.UniFi/Models/UniFiFirewallGroup.cs class UniFiFirewallGroup (line 9) | public class UniFiFirewallGroup FILE: src/NetworkOptimizer.UniFi/Models/UniFiFirewallRule.cs class UniFiFirewallRule (line 9) | public class UniFiFirewallRule class BandwidthLimit (line 107) | public class BandwidthLimit FILE: src/NetworkOptimizer.UniFi/Models/UniFiFirewallZone.cs class UniFiFirewallZone (line 17) | public class UniFiFirewallZone class FirewallZoneKeys (line 66) | public static class FirewallZoneKeys FILE: src/NetworkOptimizer.UniFi/Models/UniFiIpsEvent.cs class UniFiIpsEvent (line 9) | public class UniFiIpsEvent class UniFiIpsAlert (line 42) | public class UniFiIpsAlert FILE: src/NetworkOptimizer.UniFi/Models/UniFiNetworkConfig.cs class WanProviderCapabilities (line 9) | public class WanProviderCapabilities class FlexibleBoolConverter (line 30) | public class FlexibleBoolConverter : JsonConverter method Read (line 32) | public override bool Read(ref Utf8JsonReader reader, Type typeToConver... method Write (line 44) | public override void Write(Utf8JsonWriter writer, bool value, JsonSeri... class FlexibleIntConverter (line 54) | public class FlexibleIntConverter : JsonConverter method Read (line 56) | public override int? Read(ref Utf8JsonReader reader, Type typeToConver... method Write (line 68) | public override void Write(Utf8JsonWriter writer, int? value, JsonSeri... class UniFiNetworkConfig (line 81) | public class UniFiNetworkConfig FILE: src/NetworkOptimizer.UniFi/Models/UniFiPortForwardRule.cs class UniFiPortForwardRule (line 9) | public class UniFiPortForwardRule method FormatBytes (line 192) | private static string FormatBytes(long bytes) FILE: src/NetworkOptimizer.UniFi/Models/UniFiPortProfile.cs class UniFiPortProfile (line 10) | public class UniFiPortProfile FILE: src/NetworkOptimizer.UniFi/Models/UniFiProtectDeviceResponse.cs class UniFiAllDevicesResponse (line 9) | public class UniFiAllDevicesResponse class UniFiProtectDeviceResponse (line 33) | public class UniFiProtectDeviceResponse method IsCameraModel (line 126) | private static bool IsCameraModel(string model) FILE: src/NetworkOptimizer.UniFi/Models/UniFiSysInfo.cs class UniFiSysInfo (line 9) | public class UniFiSysInfo class UniFiSysInfoResponse (line 166) | public class UniFiSysInfoResponse FILE: src/NetworkOptimizer.UniFi/Models/UniFiThreatLogEntry.cs class UniFiThreatLogEntry (line 9) | public class UniFiThreatLogEntry FILE: src/NetworkOptimizer.UniFi/Models/UniFiWlanConfig.cs class UniFiWlanConfig (line 9) | public class UniFiWlanConfig class PrivatePresharedKey (line 113) | public class PrivatePresharedKey FILE: src/NetworkOptimizer.UniFi/Models/WiFiManClientResponse.cs class WiFiManClientResponse (line 9) | public class WiFiManClientResponse class WiFiManNeighbor (line 75) | public class WiFiManNeighbor class WiFiManSignalEntry (line 113) | public class WiFiManSignalEntry class WiFiManExperienceStat (line 123) | public class WiFiManExperienceStat class WiFiManUplinkDevice (line 132) | public class WiFiManUplinkDevice FILE: src/NetworkOptimizer.UniFi/Models/WirelessRateSnapshot.cs class WirelessRateSnapshot (line 7) | public class WirelessRateSnapshot class WiFiManClientInfo (line 22) | public class WiFiManClientInfo FILE: src/NetworkOptimizer.UniFi/NetworkPathAnalyzer.cs type IUniFiClientProvider (line 15) | public interface IUniFiClientProvider type INetworkPathAnalyzer (line 24) | public interface INetworkPathAnalyzer method InvalidateTopologyCache (line 26) | void InvalidateTopologyCache(); method DiscoverServerPositionAsync (line 27) | Task DiscoverServerPositionAsync(string? sourceIp = n... method CalculatePathAsync (line 33) | Task CalculatePathAsync(string targetHost, string? source... method CalculatePathAsync (line 39) | Task CalculatePathAsync(string targetHost, string? source... method AnalyzeSpeedTest (line 41) | PathAnalysisResult AnalyzeSpeedTest(NetworkPath path, double fromDevic... method CalculateGatewayDirectPathAsync (line 47) | Task CalculateGatewayDirectPathAsync(string? resolvedWanG... method CalculatePathToGatewayAsync (line 54) | Task CalculatePathToGatewayAsync(string clientIp, Cancell... method CalculateWanClientPathAsync (line 61) | Task CalculateWanClientPathAsync(string clientIp, string?... method IdentifyWanConnectionAsync (line 69) | Task<(string? NetworkGroup, string? Name)> IdentifyWanConnectionAsync( class NetworkPathAnalyzer (line 78) | public class NetworkPathAnalyzer : INetworkPathAnalyzer method FilterIdleRate (line 129) | private static long FilterIdleRate(long rateKbps) => method NetworkPathAnalyzer (line 168) | public NetworkPathAnalyzer( method InvalidateTopologyCache (line 182) | public void InvalidateTopologyCache() method DiscoverServerPositionAsync (line 197) | public async Task DiscoverServerPositionAsync( method CalculatePathAsync (line 319) | public Task CalculatePathAsync( method CalculatePathAsync (line 338) | public async Task CalculatePathAsync( method CalculateGatewayDirectPathAsync (line 532) | public async Task CalculateGatewayDirectPathAsync( method CalculatePathToGatewayAsync (line 627) | public async Task CalculatePathToGatewayAsync( method CalculateWanClientPathAsync (line 950) | public async Task CalculateWanClientPathAsync( method AnalyzeSpeedTest (line 1103) | public PathAnalysisResult AnalyzeSpeedTest( method GetTopologyAsync (line 1136) | private async Task GetTopologyAsync(CancellationToke... method GetRawDevicesAsync (line 1168) | private async Task> GetRawDevi... method SetApMloStatusAsync (line 1194) | private async Task SetApMloStatusAsync(List hops, Cancella... method EnrichDeviceSettingsAsync (line 1260) | private async Task EnrichDeviceSettingsAsync( method AnnotateLagMembership (line 1326) | private void AnnotateLagMembership(List hops, Dictionary portTable, i... method SumLagMemberSpeeds (line 1505) | private static int SumLagMemberSpeeds(List portTable, int ... method ResolveHostnameAsync (line 1532) | private async Task ResolveHostnameAsync(string hostname) method FindDevice (line 1573) | private static DiscoveredDevice? FindDevice(NetworkTopology topology, ... method FindClient (line 1602) | private static DiscoveredClient? FindClient(NetworkTopology topology, ... method FindNetworkByIp (line 1614) | private static NetworkInfo? FindNetworkByIp(List networks... method AreDifferentSubnets (line 1635) | private static bool AreDifferentSubnets(string ip1, string ip2) method BuildHopList (line 1651) | internal void BuildHopList( method DetectAndCreateVpnHop (line 2300) | private NetworkHop? DetectAndCreateVpnHop( method IsExternalIp (line 2423) | private static bool IsExternalIp(string ip, NetworkTopology topology) method IdentifyWanConnectionAsync (line 2445) | public async Task<(string? NetworkGroup, string? Name)> IdentifyWanCon... method ResolvePortToNetwork (line 2526) | private static (string? NetworkGroup, string? Name) ResolvePortToNetwork( method FindClosestWanBySpeed (line 2542) | private NetworkInfo? FindClosestWanBySpeed( method GetWanSpeed (line 2582) | private (int downloadMbps, int uploadMbps) GetWanSpeed( method GetHopType (line 2731) | private static HopType GetHopType(DeviceType deviceType) => deviceType... method GetPortName (line 2742) | private static string? GetPortName( method GetRealisticMax (line 2773) | private static int GetRealisticMax(int theoreticalMbps, bool isMeshBac... method CalculateBottleneck (line 2797) | private void CalculateBottleneck(NetworkPath path) method GetPortDescription (line 2914) | private static string GetPortDescription(string? portName, int? portNu... class ServerPosition (line 2936) | public class ServerPosition FILE: src/NetworkOptimizer.UniFi/RadioFormatHelper.cs class RadioFormatHelper (line 6) | public static class RadioFormatHelper method FormatBand (line 13) | public static string FormatBand(string? radio) method FormatProtocol (line 33) | public static string FormatProtocol(string? proto, string? radio = null) method FormatProtocolSuffix (line 60) | public static string FormatProtocolSuffix(string? proto, string? radio... FILE: src/NetworkOptimizer.UniFi/UniFiApiClient.cs class UniFiApiClient (line 28) | public class UniFiApiClient : IDisposable method UniFiApiClient (line 70) | public UniFiApiClient( method InitializeHttpClient (line 103) | private void InitializeHttpClient() method DetectLoginTypeAsync (line 141) | private async Task DetectLoginTypeAsync(CancellationToken cancellation... method LoginAsync (line 201) | public async Task LoginAsync(CancellationToken cancellationToken... method ParseLoginError (line 337) | private string ParseLoginError(HttpStatusCode statusCode, string error... method ParseExceptionError (line 388) | private string ParseExceptionError(Exception ex) method EnsureAuthenticatedAsync (line 450) | private async Task EnsureAuthenticatedAsync(CancellationToken ca... method BuildApiPath (line 465) | private string BuildApiPath(string endpoint) method BuildV2ApiPath (line 485) | private string BuildV2ApiPath(string endpoint) method DetectControllerTypeAsync (line 506) | private async Task DetectControllerTypeAsync(CancellationToken cancell... method ExecuteApiCallAsync (line 574) | private async Task ExecuteApiCallAsync( method GetDevicesAsync (line 625) | public async Task> GetDevicesAsync(Cancellat... method GetDevicesRawJsonAsync (line 647) | public async Task GetDevicesRawJsonAsync(CancellationToken ca... method GetDeviceAsync (line 693) | public async Task GetDeviceAsync(string mac, Can... method GetAllDevicesV2Async (line 715) | public async Task GetAllDevicesV2Async(Cance... method GetProtectCamerasAsync (line 758) | public async Task GetProtectCamerasAsync(Canc... method GetClientsAsync (line 814) | public async Task> GetClientsAsync(Cancellat... method GetClientAsync (line 835) | public async Task GetClientAsync(string mac, Can... method GetWiFiManClientAsync (line 856) | public async Task GetWiFiManClientAsync(string... method GetAllKnownClientsAsync (line 892) | public async Task> GetAllKnownClientsAsync(C... method GetActiveClientsAsync (line 914) | public async Task> GetActiveClientsAsync( method GetClientHistoryAsync (line 959) | public async Task> GetClientHistoryAsync( method GetFirewallRulesAsync (line 996) | public async Task> GetFirewallRulesAsync(Cance... method GetLegacyFirewallRulesRawAsync (line 1018) | public async Task GetLegacyFirewallRulesRawAsync(Cancel... method GetFirewallGroupsAsync (line 1072) | public async Task> GetFirewallGroupsAsync(Can... method GetPortForwardRulesAsync (line 1094) | public async Task> GetPortForwardRulesAsync... method GetFirewallZonesAsync (line 1120) | public async Task> GetFirewallZonesAsync(Cance... method GetNetworkConfigsAsync (line 1166) | public async Task> GetNetworkConfigsAsync(Can... method GetWanConfigsAsync (line 1188) | public async Task> GetWanConfigsAsync(Cancell... method GetPortProfilesAsync (line 1204) | public async Task> GetPortProfilesAsync(Cancell... method GetWlanConfigurationsAsync (line 1226) | public async Task> GetWlanConfigurationsAsync(Ca... method UpdateNetworkConfigAsync (line 1256) | public async Task UpdateNetworkConfigAsync( method GetSystemInfoAsync (line 1292) | public async Task GetSystemInfoAsync(CancellationToken ... method GetSelfInfoAsync (line 1322) | public async Task GetSelfInfoAsync(CancellationToken ca... method GetSiteHealthAsync (line 1348) | public async Task GetSiteHealthAsync(CancellationToken ... method GetTrafficRoutesAsync (line 1395) | public async Task GetTrafficRoutesAsync(CancellationTok... method UpdateTrafficRouteAsync (line 1423) | public async Task UpdateTrafficRouteAsync( method GetHourlySiteStatsAsync (line 1466) | public async Task GetHourlySiteStatsAsync( method GetSitesAsync (line 1508) | public async Task GetSitesAsync(CancellationToken cance... method GetSettingsRawAsync (line 1543) | public async Task GetSettingsRawAsync(CancellationToken... method GetCurrentChannelDataAsync (line 1588) | public async Task GetCurrentChannelDataAsync(Cancellati... method GetUpnpEnabledAsync (line 1632) | public async Task GetUpnpEnabledAsync(CancellationToken cancella... method GetQosRulesRawAsync (line 1665) | public async Task GetQosRulesRawAsync(CancellationToken... method GetWanEnrichedConfigRawAsync (line 1695) | public async Task GetWanEnrichedConfigRawAsync(Cancella... method GetFirewallPoliciesRawAsync (line 1725) | public async Task GetFirewallPoliciesRawAsync(Cancellat... method GetNatRulesRawAsync (line 1755) | public async Task GetNatRulesRawAsync(CancellationToken... method GetCombinedTrafficFirewallRulesRawAsync (line 1787) | public async Task GetCombinedTrafficFirewallRulesRawAsy... method GetFingerprintDatabaseAsync (line 1821) | public async Task GetFingerprintDatabaseAsync( method GetCompleteFingerprintDatabaseAsync (line 1852) | public async Task GetCompleteFingerprintData... method LogoutAsync (line 1886) | public async Task LogoutAsync(CancellationToken cancellationToke... method ValidateSiteAsync (line 1932) | public async Task<(bool Success, string? Error)> ValidateSiteAsync(Can... method PostSiteReportAsync (line 1997) | public async Task PostSiteReportAsync( method PostApReportAsync (line 2056) | public async Task PostApReportAsync( method PostUserReportAsync (line 2117) | public async Task PostUserReportAsync( method GetWlanEnrichedConfigurationAsync (line 2174) | public async Task GetWlanEnrichedConfigurationAsync(Cance... method GetRoamingTopologyAsync (line 2209) | public async Task GetRoamingTopologyAsync(CancellationTok... method GetClientConnectionEventsAsync (line 2248) | public async Task GetClientConnectionEventsAsync( method GetApChannelChangeEventsAsync (line 2286) | public async Task GetApChannelChangeEventsAsync( method GetRogueApsAsync (line 2349) | public async Task> GetRogueApsAsync( method GetIpsEventsAsync (line 2384) | public async Task> GetIpsEventsAsync( method GetThreatLogEventsAsync (line 2424) | public async Task GetThreatLogEventsAsync( method GetTrafficFlowsAsync (line 2486) | public async Task GetTrafficFlowsAsync( method Dispose (line 2570) | public void Dispose() FILE: src/NetworkOptimizer.UniFi/UniFiDiscovery.cs class UniFiDiscovery (line 12) | public class UniFiDiscovery method UniFiDiscovery (line 17) | public UniFiDiscovery(UniFiApiClient apiClient, ILogger> DiscoverDevicesAsync(Cancell... method DiscoverAccessPointsAsync (line 133) | public async Task> DiscoverAccessPointsAsync(Ca... method IsGatewayOnlyConsole (line 149) | internal static bool IsGatewayOnlyConsole(DiscoveredDevice device) method GetDefaultLanGatewayIp (line 160) | private string? GetDefaultLanGatewayIp(List? netwo... method DiscoverClientsAsync (line 198) | public async Task> DiscoverClientsAsync(Cancell... method GetActiveClientsForEnrichmentAsync (line 312) | private async Task> GetActiveCl... method DiscoverTopologyAsync (line 328) | public async Task DiscoverTopologyAsync(CancellationT... method GetFirewallConfigurationAsync (line 378) | public async Task GetFirewallConfigurationAsync... method GetControllerInfoAsync (line 406) | public async Task GetControllerInfoAsync(Cancellation... method DetermineDeviceType (line 452) | public static DeviceType DetermineDeviceType( method GetEffectiveDeviceType (line 506) | public static DeviceType GetEffectiveDeviceType(UniFiDeviceResponse de... method DetermineConnectionType (line 531) | private string DetermineConnectionType(UniFiClientResponse client) method BuildDeviceHierarchy (line 550) | private void BuildDeviceHierarchy(NetworkTopology topology) class DiscoveredDevice (line 568) | public class DiscoveredDevice class DiscoveredClient (line 718) | public class DiscoveredClient class MloLink (line 781) | public class MloLink class NetworkTopology (line 792) | public class NetworkTopology class NetworkInfo (line 800) | public class NetworkInfo class FirewallConfiguration (line 832) | public class FirewallConfiguration class ControllerInfo (line 839) | public class ControllerInfo FILE: src/NetworkOptimizer.UniFi/UniFiProductDatabase.cs class UniFiProductDatabase (line 13) | public static class UniFiProductDatabase method GetProductName (line 612) | public static string GetProductName(string? modelCode) method GetProductNameFromShortname (line 630) | public static string GetProductNameFromShortname(string? shortname) method GetBestProductName (line 655) | public static string GetBestProductName(string? model, string? shortname) method CanRunIperf3 (line 676) | public static bool CanRunIperf3(string? productName) method CanRunIperf3 (line 690) | public static bool CanRunIperf3(string? model, string? shortname) method IsCellularModem (line 701) | public static bool IsCellularModem(string? modelCode) method IsCellularModem (line 716) | public static bool IsCellularModem(string? model, string? shortname, s... method GetDefaultQmiDevicePath (line 740) | public static string GetDefaultQmiDevicePath(string? model) FILE: src/NetworkOptimizer.Web/Components/Shared/WanOption.cs type WanOption (line 3) | public record WanOption(string NetworkGroup, string DisplayName); FILE: src/NetworkOptimizer.Web/Endpoints/AlertEndpoints.cs class AlertEndpoints (line 9) | public static class AlertEndpoints method MapAlertEndpoints (line 11) | public static void MapAlertEndpoints(this WebApplication app) method RecalculateIncidentStatusAsync (line 163) | private static async Task RecalculateIncidentStatusAsync(AlertHistoryE... FILE: src/NetworkOptimizer.Web/Endpoints/EndpointHelpers.cs class EndpointHelpers (line 6) | public static class EndpointHelpers method GetClientIp (line 11) | public static string GetClientIp(HttpContext context) FILE: src/NetworkOptimizer.Web/Endpoints/SpeedTestEndpoints.cs class SpeedTestEndpoints (line 7) | public static class SpeedTestEndpoints method MapSpeedTestEndpoints (line 9) | public static void MapSpeedTestEndpoints(this WebApplication app) FILE: src/NetworkOptimizer.Web/Models/ApMapMarker.cs class ApMapMarker (line 7) | public class ApMapMarker class ApRadioSummary (line 49) | public class ApRadioSummary FILE: src/NetworkOptimizer.Web/Models/ClientDashboardModels.cs class ClientIdentity (line 8) | public class ClientIdentity class SignalPollResult (line 73) | public class SignalPollResult class GpsUpdateRequest (line 85) | public class GpsUpdateRequest type SignalDataSource (line 95) | public enum SignalDataSource class SignalHistoryEntry (line 104) | public class SignalHistoryEntry class TraceChangeEntry (line 127) | public class TraceChangeEntry class SignalMapPoint (line 140) | public class SignalMapPoint FILE: src/NetworkOptimizer.Web/Program.cs type UpnpNoteRequest (line 1549) | record UpnpNoteRequest(string HostIp, string Port, string Protocol, stri... type ApLocationRequest (line 1552) | record ApLocationRequest(double Latitude, double Longitude, int? Floor =... type BuildingRequest (line 1555) | record BuildingRequest(string Name, double CenterLatitude, double Center... type FloorRequest (line 1556) | record FloorRequest(int FloorNumber, string Label, double SwLatitude, do... type FloorUpdateRequest (line 1557) | record FloorUpdateRequest(double? SwLatitude = null, double? SwLongitude... type FloorImageUpdateRequest (line 1560) | record FloorImageUpdateRequest(double? SwLatitude = null, double? SwLong... class SecretDecryptorAdapter (line 1565) | class SecretDecryptorAdapter(NetworkOptimizer.Storage.Services.ICredenti... method Decrypt (line 1567) | public string Decrypt(string encrypted) => inner.Decrypt(encrypted); method Encrypt (line 1568) | public string Encrypt(string plaintext) => inner.Encrypt(plaintext); class DigestStateStoreAdapter (line 1572) | class DigestStateStoreAdapter(NetworkOptimizer.Storage.Interfaces.ISetti... method Key (line 1574) | private static string Key(int channelId) => $"digest.last_sent.{channe... method GetLastSentAsync (line 1576) | public async Task GetLastSentAsync(int channelId, Cancellat... method SetLastSentAsync (line 1584) | public async Task SetLastSentAsync(int channelId, DateTime sentAt, Can... FILE: src/NetworkOptimizer.Web/Services/AdminAuthService.cs type PasswordValidationResult (line 10) | public record PasswordValidationResult(bool IsValid, string? ErrorMessag... type IAdminAuthService (line 15) | public interface IAdminAuthService method GetPasswordSourceAsync (line 17) | Task GetPasswordSourceAsync(CancellationToken can... method ValidatePasswordAsync (line 18) | Task ValidatePasswordAsync(string password, CancellationToken ca... method IsAuthenticationRequiredAsync (line 19) | Task IsAuthenticationRequiredAsync(CancellationToken cancellatio... method GetAdminSettingsAsync (line 20) | Task GetAdminSettingsAsync(CancellationToken cancellat... method SaveAdminSettingsAsync (line 21) | Task SaveAdminSettingsAsync(string? plainPassword, bool enabled, Cance... method ClearDatabasePasswordAsync (line 22) | Task ClearDatabasePasswordAsync(CancellationToken cancellationToken = ... method LogStartupConfigurationAsync (line 23) | Task LogStartupConfigurationAsync(CancellationToken cancellationToken ... method ValidateNewPassword (line 24) | PasswordValidationResult ValidateNewPassword(string password, string c... class AdminAuthService (line 32) | public class AdminAuthService : IAdminAuthService method AdminAuthService (line 44) | public AdminAuthService( method GetPasswordSourceAsync (line 57) | public async Task GetPasswordSourceAsync(Cancella... method ValidatePasswordAsync (line 67) | public async Task ValidatePasswordAsync(string password, Cancell... method IsAuthenticationRequiredAsync (line 109) | public async Task IsAuthenticationRequiredAsync(CancellationToke... method GetAdminSettingsAsync (line 118) | public async Task GetAdminSettingsAsync(CancellationTo... method SaveAdminSettingsAsync (line 126) | public async Task SaveAdminSettingsAsync(string? plainPassword, bool e... method ValidateNewPassword (line 160) | public PasswordValidationResult ValidateNewPassword(string password, s... method ClearDatabasePasswordAsync (line 180) | public async Task ClearDatabasePasswordAsync(CancellationToken cancell... method LogStartupConfigurationAsync (line 199) | public async Task LogStartupConfigurationAsync(CancellationToken cance... method RefreshCacheIfNeededAsync (line 221) | private async Task RefreshCacheIfNeededAsync(CancellationToken cancell... method GenerateSecurePassword (line 298) | private static string GenerateSecurePassword() type AdminPasswordSource (line 319) | public enum AdminPasswordSource FILE: src/NetworkOptimizer.Web/Services/AgentService.cs class AgentService (line 16) | public class AgentService : IAgentService method AgentService (line 24) | public AgentService(ILogger logger, UniFiConnectionServi... method GetAgentSummaryAsync (line 30) | public async Task GetAgentSummaryAsync() method TestConnectionAsync (line 50) | public async Task TestConnectionAsync(string host, string userna... method DeployAgentAsync (line 68) | public async Task DeployAgentAsync(AgentDeploymentConfig config) method GenerateAgentScriptsAsync (line 105) | public async Task GenerateAgentScriptsAsync(AgentDeploymentCon... method GetAllAgentsAsync (line 119) | public async Task> GetAllAgentsAsync() method RemoveAgentAsync (line 146) | public async Task RemoveAgentAsync(int agentId) method RestartAgentAsync (line 169) | public async Task RestartAgentAsync(int agentId) class AgentSummary (line 191) | public class AgentSummary class AgentDeploymentConfig (line 199) | public class AgentDeploymentConfig class AgentDetails (line 210) | public class AgentDetails FILE: src/NetworkOptimizer.Web/Services/ApMapService.cs class ApMapService (line 13) | public class ApMapService method ApMapService (line 19) | public ApMapService(WiFiOptimizerService wifiService, IDbContextFactor... method GetApMapMarkersAsync (line 29) | public async Task> GetApMapMarkersAsync() method SaveApLocationAsync (line 91) | public async Task SaveApLocationAsync(string mac, double lat, double lng) method SaveApFloorAsync (line 120) | public async Task SaveApFloorAsync(string mac, int floor) method SaveApOrientationAsync (line 137) | public async Task SaveApOrientationAsync(string mac, int orientationDeg) method SaveApMountTypeAsync (line 154) | public async Task SaveApMountTypeAsync(string mac, string mountType) FILE: src/NetworkOptimizer.Web/Services/AuditService.cs class AuditService (line 20) | public class AuditService method AuditService (line 52) | public AuditService( method ClearCache (line 133) | public void ClearCache() method EnsureDismissedIssuesLoadedAsync (line 146) | private async Task EnsureDismissedIssuesLoadedAsync() method LoadAuditSettingsAsync (line 171) | private async Task LoadAuditSettingsAsync(AuditOptions options) method GetIssueKey (line 238) | public static string GetIssueKey(AuditIssue issue) => method DismissIssueAsync (line 244) | public async Task DismissIssueAsync(AuditIssue issue) method IsIssueDismissed (line 268) | public bool IsIssueDismissed(AuditIssue issue) => method GetActiveIssues (line 275) | public List GetActiveIssues() method GetActiveIssuesAsync (line 285) | public async Task> GetActiveIssuesAsync() method GetDismissedIssuesAsync (line 294) | public async Task> GetDismissedIssuesAsync() method RestoreIssueAsync (line 303) | public async Task RestoreIssueAsync(AuditIssue issue) method ClearDismissedIssuesAsync (line 335) | public async Task ClearDismissedIssuesAsync() method GetNetworkPurposeOverridesAsync (line 352) | public async Task> GetNetworkPurposeOverrid... method SaveNetworkPurposeOverrideAsync (line 372) | public async Task SaveNetworkPurposeOverrideAsync(string networkId, st... method LoadLastAuditFromDatabaseAsync (line 392) | public async Task LoadLastAuditFromDatabaseAsync() method GetAuditSummaryAsync (line 489) | public async Task GetAuditSummaryAsync() method PersistAuditResultAsync (line 533) | private async Task PersistAuditResultAsync(AuditResult result, bool is... method PublishAuditAlertsAsync (line 592) | private async Task PublishAuditAlertsAsync(AuditResult result) method BuildThreatSummaryAsync (line 691) | public async Task BuildThreatSummaryAsync() method BuildReportData (line 729) | public Reports.ReportData BuildReportData(AuditResult result, string? ... method MapAuditIssueToReport (line 924) | private static Reports.AuditIssue MapAuditIssueToReport(AuditIssue iss... method GetAuditPdfAsync (line 957) | public async Task<(byte[]? PdfBytes, string? FileName)> GetAuditPdfAsy... method GetLatestAuditPdfAsync (line 972) | public async Task<(byte[]? PdfBytes, string? FileName)> GetLatestAudit... method GetPdfForAuditAsync (line 986) | private async Task<(byte[]? PdfBytes, string? FileName)> GetPdfForAudi... method RegeneratePdfFromStoredDataAsync (line 1009) | private async Task RegeneratePdfFromStoredDataAsync(StorageAu... method GetScoreLabel (line 1097) | private static string GetScoreLabel(int score) => score switch method GetScoreClass (line 1105) | private static string GetScoreClass(int score) => score switch method RunAuditAsync (line 1113) | public async Task RunAuditAsync(AuditOptions options) method RunAuditCoreAsync (line 1126) | private async Task RunAuditCoreAsync(AuditOptions options) method ConvertAuditResult (line 1514) | private AuditResult ConvertAuditResult(AuditModels.AuditResult engineR... method ConvertPort (line 1736) | private PortReference ConvertPort(AuditModels.PortInfo port, List issueType switch method ShouldInclude (line 1804) | private static bool ShouldInclude(string category, AuditOptions option... method GetIssueTitle (line 1813) | private static string GetIssueTitle(string type, string message, Audit... method CalculateFilteredScore (line 1928) | private int CalculateFilteredScore(AuditModels.AuditResult engineResul... method GetScoreLabelForScore (line 1973) | private static string GetScoreLabelForScore(int score) => Audit.Analyz... method ParseVlanIds (line 1975) | private static List? ParseVlanIds(string? commaSeparated) method HasFirewallData (line 1993) | private static bool HasFirewallData(JsonElement element) method GetDefaultRecommendation (line 2013) | private static string GetDefaultRecommendation(string type) => type sw... class AuditOptions (line 2053) | public class AuditOptions class AuditResult (line 2078) | public class AuditResult class DnsSecurityReference (line 2097) | public class DnsSecurityReference class ThirdPartyDnsNetworkReference (line 2142) | public class ThirdPartyDnsNetworkReference class AuditStatistics (line 2150) | public class AuditStatistics class AuditIssue (line 2160) | public class AuditIssue class AuditSummary (line 2187) | public class AuditSummary class NetworkReference (line 2196) | public class NetworkReference class SwitchReference (line 2205) | public class SwitchReference class PortReference (line 2218) | public class PortReference class WirelessClientReference (line 2247) | public class WirelessClientReference class OfflineClientReference (line 2264) | public class OfflineClientReference FILE: src/NetworkOptimizer.Web/Services/CellularModemService.cs class CellularModemService (line 14) | public class CellularModemService : ICellularModemService method CellularModemService (line 30) | public CellularModemService( method GetLastStats (line 48) | public CellularModemStats? GetLastStats() method GetCachedStats (line 60) | public CellularModemStats? GetCachedStats(int modemId) method DiscoverModemsAsync (line 71) | public async Task> DiscoverModemsAsync() method ExecutePollAsync (line 119) | private async Task ExecutePollAsync(string host, ... method TestConnectionAsync (line 197) | public async Task<(bool success, string message)> TestConnectionAsync(... method PollModemAsync (line 205) | public async Task<(bool success, string message)> PollModemAsync(Modem... method GetModemsAsync (line 241) | public async Task> GetModemsAsync() method SaveModemAsync (line 251) | public async Task SaveModemAsync(ModemConfiguratio... method DeleteModemAsync (line 262) | public async Task DeleteModemAsync(int id) method PollAllModemsAsync (line 272) | private async Task PollAllModemsAsync() method UpdateModemConfigAsync (line 317) | private async Task UpdateModemConfigAsync(int modemId, string? error) method ParseCombinedOutput (line 342) | private static Dictionary ParseCombinedOutput(string o... method Dispose (line 373) | public void Dispose() class DiscoveredModem (line 382) | public class DiscoveredModem FILE: src/NetworkOptimizer.Web/Services/ClientDashboardService.cs class ClientDashboardService (line 20) | public class ClientDashboardService method ClientDashboardService (line 49) | public ClientDashboardService( method IdentifyClientAsync (line 72) | public async Task IdentifyClientAsync(string clientIp) method PollSignalAsync (line 164) | public async Task PollSignalAsync( method GetSignalHistoryAsync (line 263) | public async Task> GetSignalHistoryAsync( method GetSignalMapPointsAsync (line 303) | public async Task> GetSignalMapPointsAsync( method GetTraceHistoryAsync (line 372) | public async Task> GetTraceHistoryAsync( method GetSpeedResultsAsync (line 412) | public async Task> GetSpeedResultsAsync( method GetMergedSignalHistoryAsync (line 431) | public async Task> GetMergedSignalHistoryAsync( method GetConnectionEventsAsync (line 528) | public async Task> GetConnectionEventsAsync( method TryCleanupAsync (line 547) | public async Task TryCleanupAsync() method SubmitGpsAsync (line 559) | public async Task SubmitGpsAsync(string clientMac, double lat, double ... method CleanupOldLogsAsync (line 580) | public async Task CleanupOldLogsAsync(int retentionDays = 90) method DeduplicateTraceJsonAsync (line 660) | private async Task DeduplicateTraceJsonAsync(NetworkOptimizerDbContext... method StoreSignalLogAsync (line 710) | private async Task StoreSignalLogAsync( method PollWiFiManOnlyAsync (line 773) | public async Task PollWiFiManOnlyAsync(string clientIp) method MapClientToIdentity (line 815) | private ClientIdentity MapClientToIdentity(UniFiClientResponse client) method OverlayWiFiManDataAsync (line 849) | private async Task OverlayWiFiManDataAsync(ClientIdentity identity, st... method EnrichWithApInfoAsync (line 891) | private async Task EnrichWithApInfoAsync(ClientIdentity identity, stri... method SeedTraceHashesAsync (line 964) | private async Task SeedTraceHashesAsync() method ComputeTraceHash (line 1002) | private static string ComputeTraceHash(NetworkPath path) FILE: src/NetworkOptimizer.Web/Services/ClientSpeedTestService.cs class ClientSpeedTestService (line 14) | public class ClientSpeedTestService method ClientSpeedTestService (line 24) | public ClientSpeedTestService( method RecordOpenSpeedTestResultAsync (line 45) | public async Task RecordOpenSpeedTestResultAsync( method RecordIperf3ClientResultAsync (line 119) | public async Task RecordIperf3ClientResultAsync( method GetResultsAsync (line 243) | public async Task> GetResultsAsync(int count = 50, ... method GetWanResultsAsync (line 294) | public async Task> GetWanResultsAsync(int count = 5... method GetResultsByIpAsync (line 340) | public async Task> GetResultsByIpAsync(string clien... method GetResultsByMacAsync (line 355) | public async Task> GetResultsByMacAsync(string clie... method DeleteResultAsync (line 371) | public async Task DeleteResultAsync(int id) method UpdateNotesAsync (line 389) | public async Task UpdateNotesAsync(int id, string? notes) method AnalyzePathAsync (line 411) | private async Task AnalyzePathAsync(Iperf3Result result, WirelessRateS... method UpdateWifiRatesFromPathAnalysis (line 474) | private static void UpdateWifiRatesFromPathAnalysis(Iperf3Result result) method BackfillFromPathAnalysis (line 502) | private void BackfillFromPathAnalysis(Iperf3Result result) method EnrichAndAnalyzeInBackgroundAsync (line 545) | private async Task EnrichAndAnalyzeInBackgroundAsync(int resultId) method PublishSpeedTestAlertAsync (line 597) | private async Task PublishSpeedTestAlertAsync(Iperf3Result result) FILE: src/NetworkOptimizer.Web/Services/CloudflareSpeedTestService.cs class CloudflareSpeedTestService (line 18) | public partial class CloudflareSpeedTestService : WanSpeedTestServiceBase type CloudflareMetadata (line 40) | public record CloudflareMetadata(string Ip, string City, string Countr... method CloudflareSpeedTestService (line 42) | public CloudflareSpeedTestService( method RunTestCoreAsync (line 56) | protected override async Task RunTestCoreAsync( method CreateFailedResult (line 159) | protected override Iperf3Result CreateFailedResult(string errorMessage... method FetchMetadataAsync (line 170) | private static async Task FetchMetadataAsync(HttpC... method GetCityName (line 204) | public static string GetCityName(string colo) => ColoToCityName(colo); method ColoToCityName (line 206) | private static string ColoToCityName(string colo) method MeasureLatencyAsync (line 241) | private static async Task<(double LatencyMs, double JitterMs)> Measure... method MeasureThroughputAsync (line 282) | private async Task<(double BitsPerSecond, long TotalBytes, double Load... method ParseServerTiming (line 485) | private static double ParseServerTiming(HttpResponseMessage response) method ServerTimingRegex (line 494) | [GeneratedRegex(@"cfRequestDuration;dur=([\d.]+)")] FILE: src/NetworkOptimizer.Web/Services/ConfigTransferService.cs class ConfigTransferService (line 14) | public class ConfigTransferService method ConfigTransferService (line 46) | public ConfigTransferService( method GetDataDirectory (line 59) | private static string GetDataDirectory() method CleanupTempFiles (line 78) | public void CleanupTempFiles() method ExportAsync (line 97) | public async Task ExportAsync(ExportType type) method ValidateImportAsync (line 208) | public async Task ValidateImportAsync(Stream uploadStream) method ApplyImportAsync (line 288) | public async Task ApplyImportAsync() method CancelPendingImport (line 432) | public void CancelPendingImport() method PruneHistoryTablesAsync (line 442) | private async Task PruneHistoryTablesAsync(string dbPath) method PreserveHistoryAsync (line 477) | private async Task PreserveHistoryAsync(string importedDbPath) method BuildManifest (line 520) | private ExportManifest BuildManifest(ExportType type, string dbPath) method GetAppVersion (line 552) | private static string GetAppVersion() method IsVersionCompatible (line 559) | private static bool IsVersionCompatible(string exportVersion, string c... method AddDirectoryToArchiveAsync (line 572) | private static async Task AddDirectoryToArchiveAsync(ZipArchive archiv... method CopyDirectory (line 588) | private static void CopyDirectory(string source, string destination) method Encrypt (line 601) | internal static byte[] Encrypt(byte[] data) method Decrypt (line 619) | internal static byte[] Decrypt(byte[] data) type ExportType (line 638) | public enum ExportType class ExportManifest (line 644) | public class ExportManifest class ImportPreview (line 652) | public class ImportPreview FILE: src/NetworkOptimizer.Web/Services/DashboardLayoutService.cs class DashboardCards (line 9) | public static class DashboardCards method GetDisplayName (line 35) | public static string GetDisplayName(string cardId) => cardId switch class DashboardStatItems (line 53) | public static class DashboardStatItems method GetDisplayName (line 69) | public static string GetDisplayName(string statId) => statId switch class DashboardLayout (line 84) | public class DashboardLayout class DashboardCardConfig (line 99) | public class DashboardCardConfig class DashboardLayoutService (line 112) | public class DashboardLayoutService method DashboardLayoutService (line 123) | public DashboardLayoutService(ISystemSettingsService settings, ILogger... method GetLayoutAsync (line 132) | public async Task GetLayoutAsync() method SaveLayoutAsync (line 159) | public async Task SaveLayoutAsync(DashboardLayout layout) method ResetLayoutAsync (line 169) | public async Task ResetLayoutAsync() method GetDefaultLayout (line 178) | public static DashboardLayout GetDefaultLayout() method MergeDefaults (line 202) | private static void MergeDefaults(DashboardLayout layout) FILE: src/NetworkOptimizer.Web/Services/DashboardService.cs class DashboardService (line 12) | public class DashboardService : IDashboardService method DashboardService (line 22) | public DashboardService( method GetDashboardDataAsync (line 45) | public async Task GetDashboardDataAsync() method FormatRelativeTime (line 175) | private static string FormatRelativeTime(DateTime utcTime) => method FormatUptime (line 178) | private static string FormatUptime(long? uptimeSeconds) method ParseIpForSorting (line 196) | private static long ParseIpForSorting(string? ip) class DashboardData (line 219) | public class DashboardData class DeviceInfo (line 246) | public class DeviceInfo FILE: src/NetworkOptimizer.Web/Services/DiagnosticsService.cs class DiagnosticsService (line 11) | public class DiagnosticsService method DiagnosticsService (line 24) | public DiagnosticsService( method ClearCache (line 58) | public void ClearCache() method RunDiagnosticsAsync (line 70) | public async Task RunDiagnosticsAsync(DiagnosticsOp... method CreateErrorResult (line 161) | private static DiagnosticsResult CreateErrorResult(string title, strin... FILE: src/NetworkOptimizer.Web/Services/FileVersionProvider.cs class FileVersionProvider (line 11) | public class FileVersionProvider : IFileVersionProvider method FileVersionProvider (line 16) | public FileVersionProvider(IWebHostEnvironment env) method AddFileVersionToPath (line 21) | public string AddFileVersionToPath(PathString requestPathBase, string ... FILE: src/NetworkOptimizer.Web/Services/FingerprintDatabaseService.cs class FingerprintDatabaseService (line 9) | public class FingerprintDatabaseService : IFingerprintDatabaseService method FingerprintDatabaseService (line 20) | public FingerprintDatabaseService( method GetDatabaseAsync (line 33) | public async Task GetDatabaseAsync(Cancella... method RefreshAsync (line 67) | public async Task RefreshAsync(CancellationToken cancellationToken = d... method FetchDatabaseAsync (line 80) | private async Task FetchDatabaseAsync(CancellationToken cancellationTo... method GetDeviceName (line 126) | public string? GetDeviceName(int? deviceId) method GetDeviceTypeName (line 144) | public string? GetDeviceTypeName(int? devTypeId) => method GetVendorName (line 152) | public string? GetVendorName(int? vendorId) => method GetDeviceTypeId (line 160) | public int? GetDeviceTypeId(int? deviceId) FILE: src/NetworkOptimizer.Web/Services/FloorPlanService.cs class FloorPlanService (line 9) | public class FloorPlanService method FloorPlanService (line 15) | public FloorPlanService(IDbContextFactory d... method GetFloorPlanDirectory (line 24) | private static string GetFloorPlanDirectory() method GetBuildingsAsync (line 52) | public async Task> GetBuildingsAsync() method GetBuildingAsync (line 58) | public async Task GetBuildingAsync(int id) method CreateBuildingAsync (line 64) | public async Task CreateBuildingAsync(string name, double ce... method UpdateBuildingAsync (line 79) | public async Task UpdateBuildingAsync(int id, string name, ... method DeleteBuildingAsync (line 92) | public async Task DeleteBuildingAsync(int id) method GetFloorsAsync (line 123) | public async Task> GetFloorsAsync(int buildingId) method GetFloorAsync (line 132) | public async Task GetFloorAsync(int floorId) method CreateFloorAsync (line 138) | public async Task CreateFloorAsync(int buildingId, int floo... method UpdateFloorAsync (line 160) | public async Task UpdateFloorAsync(int floorId, double? sw... method DeleteFloorAsync (line 182) | public async Task DeleteFloorAsync(int floorId) method SaveFloorImageAsync (line 200) | public async Task SaveFloorImageAsync(int floorId, Stream imageStream) method GetFloorImagePath (line 224) | public string? GetFloorImagePath(FloorPlan floor) method DeleteFloorPlanImage (line 231) | private void DeleteFloorPlanImage(FloorPlan floor) method GetFloorImagesAsync (line 244) | public async Task> GetFloorImagesAsync(int floorP... method GetFloorImageAsync (line 253) | public async Task GetFloorImageAsync(int imageId) method CreateFloorImageAsync (line 259) | public async Task CreateFloorImageAsync(int floorPlanI... method UpdateFloorImageAsync (line 315) | public async Task UpdateFloorImageAsync(int imageId, ... method DeleteFloorImageAsync (line 337) | public async Task DeleteFloorImageAsync(int imageId) method GetFloorImageFilePath (line 350) | public string? GetFloorImageFilePath(FloorPlanImage image) method DeleteImageFile (line 357) | private void DeleteImageFile(FloorPlanImage image) FILE: src/NetworkOptimizer.Web/Services/GatewaySpeedTestService.cs class GatewaySpeedTestService (line 16) | public class GatewaySpeedTestService : IGatewaySpeedTestService method GatewaySpeedTestService (line 28) | public GatewaySpeedTestService( method GetSettingsAsync (line 47) | public Task GetSettingsAsync(bool forceRefresh = f... method SaveSettingsAsync (line 53) | public Task SaveSettingsAsync(GatewaySshSettings s... method TestConnectionAsync (line 63) | public Task<(bool success, string message)> TestConnectionAsync() method RunSshCommandAsync (line 69) | public Task<(bool success, string output)> RunSshCommandAsync(string c... method CheckIperf3StatusAsync (line 79) | public async Task CheckIperf3StatusAsync() method StartIperf3ServerAsync (line 163) | public async Task<(bool success, string message)> StartIperf3ServerAsy... method RunSpeedTestAsync (line 220) | public async Task RunSpeedTestAsync() method RunSpeedTestAsync (line 229) | public async Task RunSpeedTestAsync(int durati... method RunIperf3ClientAsync (line 339) | private async Task<(bool success, string output)> RunIperf3ClientAsync( method ParseIperf3Result (line 405) | private void ParseIperf3Result(string jsonOutput, GatewaySpeedTestResu... method AnalyzePathAsync (line 443) | private async Task AnalyzePathAsync( method SaveResultToHistoryAsync (line 495) | private async Task SaveResultToHistoryAsync(GatewaySpeedTestResult res... method GetLastResult (line 536) | public GatewaySpeedTestResult? GetLastResult() => _lastResult; class Iperf3Status (line 549) | public class Iperf3Status class GatewaySpeedTestResult (line 562) | public class GatewaySpeedTestResult FILE: src/NetworkOptimizer.Web/Services/GatewayWanSpeedTestService.cs class GatewayWanSpeedTestService (line 17) | public class GatewayWanSpeedTestService method GatewayWanSpeedTestService (line 55) | public GatewayWanSpeedTestService( method CheckBinaryStatusAsync (line 75) | public async Task<(bool Deployed, bool NeedsUpdate)> CheckBinaryStatus... method ComputeMd5 (line 119) | private static string ComputeMd5(string filePath) method DeployBinaryAsync (line 129) | public async Task<(bool Success, string? Error)> DeployBinaryAsync(Can... method RunTestAsync (line 183) | public async Task RunTestAsync( method RunSingleWanTest (line 260) | private async Task RunSingleWanTest( method RunParallelWanTests (line 305) | private async Task RunParallelWanTests( method AggregateParallelResults (line 397) | private Iperf3Result AggregateParallelResults(List<(WanSpeedTestResult... method SaveAndCompleteResult (line 506) | private async Task SaveAndCompleteResult( method AnimateProgress (line 531) | private static async Task AnimateProgress(Task sshTask, Action> GetResultsAsync(int count = 50, ... method DeleteResultAsync (line 595) | public async Task DeleteResultAsync(int id) method UpdateNotesAsync (line 612) | public async Task UpdateNotesAsync(int id, string? notes) method UpdateWanAssignmentAsync (line 628) | public async Task UpdateWanAssignmentAsync(int id, string wanNet... method ParseResult (line 647) | private Iperf3Result? ParseResult(string jsonOutput, string interfaceN... method SaveFailedResult (line 706) | private Iperf3Result? SaveFailedResult(string? errorMessage, string? w... method AnalyzePathInBackgroundAsync (line 736) | private async Task AnalyzePathInBackgroundAsync(int resultId, string? ... method GetConnectionInfo (line 771) | private SshConnectionInfo GetConnectionInfo(GatewaySshSettings settings) class WanSpeedTestResult (line 791) | private sealed class WanSpeedTestResult class WanMetadata (line 803) | private sealed class WanMetadata class WanLatency (line 812) | private sealed class WanLatency class WanThroughput (line 818) | private sealed class WanThroughput FILE: src/NetworkOptimizer.Web/Services/HeatmapDataCache.cs class HeatmapDataCache (line 10) | public sealed class HeatmapDataCache method Invalidate (line 15) | public void Invalidate() => Interlocked.Increment(ref _version); method InvalidateAndReloadAsync (line 20) | public async Task InvalidateAndReloadAsync( method GetOrLoadAsync (line 29) | public async Task GetOrLoadAsync( method ComputeRadioFingerprint (line 92) | private static string ComputeRadioFingerprint(List markers) type CachedData (line 107) | public sealed record CachedData( FILE: src/NetworkOptimizer.Web/Services/IAgentService.cs type IAgentService (line 6) | public interface IAgentService method GetAgentSummaryAsync (line 12) | Task GetAgentSummaryAsync(); method TestConnectionAsync (line 23) | Task TestConnectionAsync(string host, string username, string au... method DeployAgentAsync (line 30) | Task DeployAgentAsync(AgentDeploymentConfig config); method GenerateAgentScriptsAsync (line 37) | Task GenerateAgentScriptsAsync(AgentDeploymentConfig config); method GetAllAgentsAsync (line 43) | Task> GetAllAgentsAsync(); method RemoveAgentAsync (line 50) | Task RemoveAgentAsync(int agentId); method RestartAgentAsync (line 57) | Task RestartAgentAsync(int agentId); FILE: src/NetworkOptimizer.Web/Services/ICellularModemService.cs type ICellularModemService (line 11) | public interface ICellularModemService : IDisposable method GetLastStats (line 17) | CellularModemStats? GetLastStats(); method GetCachedStats (line 25) | CellularModemStats? GetCachedStats(int modemId); method DiscoverModemsAsync (line 31) | Task> DiscoverModemsAsync(); method TestConnectionAsync (line 38) | Task<(bool success, string message)> TestConnectionAsync(string host); method PollModemAsync (line 45) | Task<(bool success, string message)> PollModemAsync(ModemConfiguration... method GetModemsAsync (line 51) | Task> GetModemsAsync(); method SaveModemAsync (line 58) | Task SaveModemAsync(ModemConfiguration config); method DeleteModemAsync (line 64) | Task DeleteModemAsync(int id); FILE: src/NetworkOptimizer.Web/Services/IDashboardService.cs type IDashboardService (line 7) | public interface IDashboardService method GetDashboardDataAsync (line 22) | Task GetDashboardDataAsync(); FILE: src/NetworkOptimizer.Web/Services/IFingerprintDatabaseService.cs type IFingerprintDatabaseService (line 9) | public interface IFingerprintDatabaseService method GetDatabaseAsync (line 32) | Task GetDatabaseAsync(CancellationToken can... method RefreshAsync (line 38) | Task RefreshAsync(CancellationToken cancellationToken = default); method GetDeviceName (line 45) | string? GetDeviceName(int? deviceId); method GetDeviceTypeName (line 52) | string? GetDeviceTypeName(int? devTypeId); method GetVendorName (line 59) | string? GetVendorName(int? vendorId); method GetDeviceTypeId (line 66) | int? GetDeviceTypeId(int? deviceId); FILE: src/NetworkOptimizer.Web/Services/IGatewaySpeedTestService.cs type IGatewaySpeedTestService (line 9) | public interface IGatewaySpeedTestService method GetSettingsAsync (line 21) | Task GetSettingsAsync(bool forceRefresh = false); method SaveSettingsAsync (line 28) | Task SaveSettingsAsync(GatewaySshSettings settings); method TestConnectionAsync (line 34) | Task<(bool success, string message)> TestConnectionAsync(); method RunSshCommandAsync (line 41) | Task<(bool success, string output)> RunSshCommandAsync(string command); method CheckIperf3StatusAsync (line 47) | Task CheckIperf3StatusAsync(); method StartIperf3ServerAsync (line 54) | Task<(bool success, string message)> StartIperf3ServerAsync(int? port ... method RunSpeedTestAsync (line 60) | Task RunSpeedTestAsync(); method RunSpeedTestAsync (line 68) | Task RunSpeedTestAsync(int durationSeconds, in... method GetLastResult (line 74) | GatewaySpeedTestResult? GetLastResult(); FILE: src/NetworkOptimizer.Web/Services/IIperf3SpeedTestService.cs type IIperf3SpeedTestService (line 8) | public interface IIperf3SpeedTestService method GetSettingsAsync (line 14) | Task GetSettingsAsync(); method GetDevicesAsync (line 20) | Task> GetDevicesAsync(); method SaveDeviceAsync (line 27) | Task SaveDeviceAsync(DeviceSshConfiguration de... method DeleteDeviceAsync (line 33) | Task DeleteDeviceAsync(int id); method TestConnectionAsync (line 40) | Task<(bool success, string message)> TestConnectionAsync(string host); method TestConnectionAsync (line 47) | Task<(bool success, string message)> TestConnectionAsync(DeviceSshConf... method CheckIperf3AvailableAsync (line 54) | Task<(bool available, string version)> CheckIperf3AvailableAsync(strin... method CheckIperf3AvailableAsync (line 61) | Task<(bool available, string version)> CheckIperf3AvailableAsync(Devic... method RunSpeedTestAsync (line 68) | Task RunSpeedTestAsync(DeviceSshConfiguration device); method RunSpeedTestAsync (line 77) | Task RunSpeedTestAsync(DeviceSshConfiguration device, in... method GetRecentResultsAsync (line 85) | Task> GetRecentResultsAsync(int count = 50, int day... method SearchResultsAsync (line 99) | Task> SearchResultsAsync(string filter, int count =... method GetResultsForDeviceAsync (line 107) | Task> GetResultsForDeviceAsync(string deviceHost, i... method GetApDeviceTestsAsync (line 116) | Task>> GetApDeviceTestsAsync( method DeleteResultAsync (line 124) | Task DeleteResultAsync(int id); method UpdateNotesAsync (line 132) | Task UpdateNotesAsync(int id, string? notes); method ClearHistoryAsync (line 138) | Task ClearHistoryAsync(); FILE: src/NetworkOptimizer.Web/Services/ISponsorshipService.cs type SponsorshipNag (line 6) | public record SponsorshipNag( type ISponsorshipService (line 17) | public interface ISponsorshipService method GetCurrentNagAsync (line 24) | Task GetCurrentNagAsync(bool alwaysShow = false); method MarkLevelShownAsync (line 31) | Task MarkLevelShownAsync(int level); method GetUsageCountAsync (line 37) | Task GetUsageCountAsync(); method GetEarnedLevelAsync (line 42) | Task GetEarnedLevelAsync(); method MarkAsAlreadySponsorAsync (line 47) | Task MarkAsAlreadySponsorAsync(); method IsAlreadySponsorAsync (line 52) | Task IsAlreadySponsorAsync(); FILE: src/NetworkOptimizer.Web/Services/ISqmDeploymentService.cs type ISqmDeploymentService (line 9) | public interface ISqmDeploymentService method TestConnectionAsync (line 15) | Task<(bool success, string message)> TestConnectionAsync(); method InstallUdmBootAsync (line 23) | Task<(bool success, string message)> InstallUdmBootAsync(); method CheckDeploymentStatusAsync (line 29) | Task CheckDeploymentStatusAsync(); method DeployAsync (line 38) | Task DeployAsync(SqmConfig config, Dictionary DeploySqmMonitorAsync(string wan... method RemoveAsync (line 56) | Task<(bool success, List steps)> RemoveAsync(bool includeTcMon... method TriggerSqmAdjustmentAsync (line 64) | Task<(bool success, string message)> TriggerSqmAdjustmentAsync(string ... method GetWanLogsAsync (line 73) | Task<(bool success, string output)> GetWanLogsAsync(string wanName, in... method GetSqmWanStatusAsync (line 79) | Task> GetSqmWanStatusAsync(); FILE: src/NetworkOptimizer.Web/Services/ISqmService.cs type ISqmService (line 7) | public interface ISqmService method GetSqmStatusAsync (line 15) | Task GetSqmStatusAsync(bool forceRefresh = false); method TestTcMonitorAsync (line 23) | Task<(bool Available, string? Error)> TestTcMonitorAsync(string? host ... method GetTcInterfaceStatsAsync (line 29) | Task?> GetTcInterfaceStatsAsync(); method GetWanInterfacesFromControllerAsync (line 36) | Task> GetWanInterfacesFromControllerAsync(); method GenerateTcMonitorConfigAsync (line 43) | Task GenerateTcMonitorConfigAsync(); method DeploySqmAsync (line 50) | Task DeploySqmAsync(SqmConfiguration config); method GenerateSqmScriptsAsync (line 57) | Task GenerateSqmScriptsAsync(SqmConfiguration config); method DisableSqmAsync (line 63) | Task DisableSqmAsync(); FILE: src/NetworkOptimizer.Web/Services/ISystemSettingsService.cs type ISystemSettingsService (line 6) | public interface ISystemSettingsService method GetAsync (line 13) | Task GetAsync(string key); method GetIntAsync (line 21) | Task GetIntAsync(string key, int defaultValue); method SetAsync (line 28) | Task SetAsync(string key, string? value); method SetIntAsync (line 35) | Task SetIntAsync(string key, int value); method GetIperf3DurationAsync (line 41) | Task GetIperf3DurationAsync(); method SetIperf3DurationAsync (line 47) | Task SetIperf3DurationAsync(int value); method GetIperf3GatewayParallelStreamsAsync (line 53) | Task GetIperf3GatewayParallelStreamsAsync(); method SetIperf3GatewayParallelStreamsAsync (line 59) | Task SetIperf3GatewayParallelStreamsAsync(int value); method GetIperf3UniFiParallelStreamsAsync (line 65) | Task GetIperf3UniFiParallelStreamsAsync(); method SetIperf3UniFiParallelStreamsAsync (line 71) | Task SetIperf3UniFiParallelStreamsAsync(int value); method GetIperf3OtherParallelStreamsAsync (line 77) | Task GetIperf3OtherParallelStreamsAsync(); method SetIperf3OtherParallelStreamsAsync (line 83) | Task SetIperf3OtherParallelStreamsAsync(int value); method GetIperf3SettingsAsync (line 89) | Task GetIperf3SettingsAsync(); method SaveIperf3SettingsAsync (line 95) | Task SaveIperf3SettingsAsync(Iperf3Settings settings); method CheckLocalIperf3Async (line 102) | Task CheckLocalIperf3Async(bool forceRefresh = false); method GetCachedLocalIperf3StatusAsync (line 108) | Task GetCachedLocalIperf3StatusAsync(); FILE: src/NetworkOptimizer.Web/Services/ITcMonitorClient.cs type ITcMonitorClient (line 8) | public interface ITcMonitorClient method GetTcStatsAsync (line 17) | Task GetTcStatsAsync(string host, int port = TcMon... method IsMonitorAvailableAsync (line 25) | Task IsMonitorAvailableAsync(string host, int port = TcMonitorCl... method GetPrimaryWanRateAsync (line 33) | Task GetPrimaryWanRateAsync(string host, int port = TcMonitor... FILE: src/NetworkOptimizer.Web/Services/IUniFiSshService.cs type IUniFiSshService (line 9) | public interface IUniFiSshService method GetSettingsAsync (line 15) | Task GetSettingsAsync(); method SaveSettingsAsync (line 22) | Task SaveSettingsAsync(UniFiSshSettings settings); method TestConnectionAsync (line 29) | Task<(bool success, string message)> TestConnectionAsync(string host); method TestConnectionAsync (line 36) | Task<(bool success, string message)> TestConnectionAsync(DeviceSshConf... method RunCommandAsync (line 46) | Task<(bool success, string output)> RunCommandAsync(string host, strin... method RunCommandAsync (line 60) | Task<(bool success, string output)> RunCommandAsync( method RunCommandWithDeviceAsync (line 76) | Task<(bool success, string output)> RunCommandWithDeviceAsync(DeviceSs... method CheckToolAvailableAsync (line 84) | Task<(bool available, string version)> CheckToolAvailableAsync(string ... method CheckToolAvailableAsync (line 92) | Task<(bool available, string version)> CheckToolAvailableAsync(DeviceS... method GetDevicesAsync (line 98) | Task> GetDevicesAsync(); method SaveDeviceAsync (line 105) | Task SaveDeviceAsync(DeviceSshConfiguration de... method DeleteDeviceAsync (line 111) | Task DeleteDeviceAsync(int id); FILE: src/NetworkOptimizer.Web/Services/Iperf3JsonParser.cs type Iperf3ParsedResult (line 8) | public record Iperf3ParsedResult( class Iperf3JsonParser (line 21) | public static class Iperf3JsonParser method Parse (line 31) | public static Iperf3ParsedResult Parse(string json, ILogger? logger = ... method ExtractLocalIp (line 115) | public static string? ExtractLocalIp(string json) method ExtractError (line 144) | public static string? ExtractError(string json) FILE: src/NetworkOptimizer.Web/Services/Iperf3ServerService.cs class Iperf3ServerService (line 12) | public class Iperf3ServerService : BackgroundService method Iperf3ServerService (line 25) | public Iperf3ServerService( method PauseAsync (line 54) | public async Task PauseAsync() method ResumeAsync (line 77) | public async Task ResumeAsync() method ExecuteAsync (line 91) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method RunIperf3ServerAsync (line 179) | private async Task RunIperf3ServerAsync(CancellationToken stoppi... method ProcessCompletedTestAsync (line 309) | private async Task ProcessCompletedTestAsync(string json) method StopAsync (line 453) | public override async Task StopAsync(CancellationToken cancellationToken) method KillOrphanedIperf3ProcessesAsync (line 514) | private async Task KillOrphanedIperf3ProcessesAsync() FILE: src/NetworkOptimizer.Web/Services/Iperf3SpeedTestService.cs class Iperf3SpeedTestService (line 18) | public class Iperf3SpeedTestService : IIperf3SpeedTestService method Iperf3SpeedTestService (line 43) | public Iperf3SpeedTestService( method GetSettingsAsync (line 68) | public Task GetSettingsAsync() => _settingsService.Get... method GetDevicesAsync (line 73) | public Task> GetDevicesAsync() => _sshSer... method SaveDeviceAsync (line 78) | public Task SaveDeviceAsync(DeviceSshConfigura... method DeleteDeviceAsync (line 83) | public Task DeleteDeviceAsync(int id) => _sshService.DeleteDeviceAsync... method TestConnectionAsync (line 88) | public Task<(bool success, string message)> TestConnectionAsync(string... method TestConnectionAsync (line 93) | public Task<(bool success, string message)> TestConnectionAsync(Device... method CheckIperf3AvailableAsync (line 98) | public Task<(bool available, string version)> CheckIperf3AvailableAsyn... method CheckIperf3AvailableAsync (line 103) | public Task<(bool available, string version)> CheckIperf3AvailableAsyn... method IsWindowsHostAsync (line 115) | private async Task IsWindowsHostAsync(DeviceSshConfiguration dev... method KillIperf3Async (line 138) | private async Task KillIperf3Async(DeviceSshConfiguration device, bool... method GetWindowsIperf3PathAsync (line 154) | private async Task GetWindowsIperf3PathAsync(DeviceSshConfigu... method StartIperf3ServerAsync (line 179) | private async Task<(bool success, string output)> StartIperf3ServerAsy... method IsIperf3ServerRunningAsync (line 215) | private async Task IsIperf3ServerRunningAsync(DeviceSshConfigura... method GetIperf3ServerLogAsync (line 255) | private async Task GetIperf3ServerLogAsync(DeviceSshConfigurat... method RunSpeedTestAsync (line 277) | public async Task RunSpeedTestAsync(DeviceSshConfigurati... method GetParallelStreamsForDevice (line 288) | private static int GetParallelStreamsForDevice(DeviceType deviceType, ... method RunSpeedTestAsync (line 300) | public async Task RunSpeedTestAsync(DeviceSshConfigurati... method GetRecentResultsAsync (line 498) | public async Task> GetRecentResultsAsync(int count ... method SearchResultsAsync (line 538) | public async Task> SearchResultsAsync(string filter... method GetResultsForDeviceAsync (line 548) | public async Task> GetResultsForDeviceAsync(string ... method GetApDeviceTestsAsync (line 559) | public async Task>> GetApDeviceT... method DeleteResultAsync (line 581) | public async Task DeleteResultAsync(int id) method UpdateNotesAsync (line 591) | public async Task UpdateNotesAsync(int id, string? notes) method ClearHistoryAsync (line 601) | public async Task ClearHistoryAsync() method SaveResultAsync (line 611) | private async Task SaveResultAsync(Iperf3Result result) method RunLocalIperf3Async (line 625) | private async Task<(bool success, string output)> RunLocalIperf3Async(... method ParseIperf3Result (line 711) | private void ParseIperf3Result(string json, Iperf3Result result, bool ... method AnalyzePathAsync (line 760) | private async Task AnalyzePathAsync(Iperf3Result result, string target... method PublishSpeedTestAlertAsync (line 816) | private async Task PublishSpeedTestAlertAsync(Iperf3Result result) FILE: src/NetworkOptimizer.Web/Services/JwtService.cs type IJwtService (line 13) | public interface IJwtService method GenerateTokenAsync (line 15) | Task GenerateTokenAsync(string username = "admin"); method ValidateTokenAsync (line 16) | Task ValidateTokenAsync(string token); method GetTokenValidationParametersAsync (line 17) | Task GetTokenValidationParametersAsync(); class JwtService (line 24) | public class JwtService : IJwtService method JwtService (line 36) | public JwtService(IServiceProvider serviceProvider, ILogger GenerateTokenAsync(string username = "admin") method ValidateTokenAsync (line 80) | public async Task ValidateTokenAsync(string token) method GetTokenValidationParametersAsync (line 121) | public async Task GetTokenValidationParamet... method GetOrCreateSecretKeyAsync (line 141) | private async Task GetOrCreateSecretKeyAsync() FILE: src/NetworkOptimizer.Web/Services/NginxHostedService.cs class NginxHostedService (line 10) | public class NginxHostedService : IHostedService, IDisposable method NginxHostedService (line 18) | public NginxHostedService(ILogger logger, IConfigu... method StartAsync (line 27) | public async Task StartAsync(CancellationToken cancellationToken) method StopAsync (line 68) | public Task StopAsync(CancellationToken cancellationToken) method GenerateConfigJsAsync (line 74) | private async Task GenerateConfigJsAsync(string speedTestFolder) method LoadConfigurationAsync (line 111) | private Task> LoadConfigurationAsync() method LoadRegistryValue (line 144) | private static void LoadRegistryValue(Dictionary confi... method OverrideFromConfiguration (line 156) | private void OverrideFromConfiguration(Dictionary conf... method ConstructSaveDataUrl (line 165) | private string ConstructSaveDataUrl(Dictionary config,... method GetNginxPath (line 200) | private string? GetNginxPath(string speedTestFolder) method CreateNginxTempDirectories (line 266) | private void CreateNginxTempDirectories(string speedTestFolder) method PatchNginxConfigForWindowsAsync (line 294) | private async Task PatchNginxConfigForWindowsAsync(string confPath) method StartNginxAsync (line 308) | private async Task StartNginxAsync(string speedTestFolder, string ngin... method StopNginx (line 366) | private void StopNginx() method Dispose (line 418) | public void Dispose() FILE: src/NetworkOptimizer.Web/Services/PasswordHasher.cs class PasswordHasher (line 10) | public class PasswordHasher : IPasswordHasher method HashPassword (line 24) | public string HashPassword(string password) method VerifyPassword (line 54) | public bool VerifyPassword(string password, string storedHash) method NeedsRehash (line 92) | public bool NeedsRehash(string storedHash) type IPasswordHasher (line 116) | public interface IPasswordHasher method HashPassword (line 123) | string HashPassword(string password); method VerifyPassword (line 131) | bool VerifyPassword(string password, string storedHash); method NeedsRehash (line 138) | bool NeedsRehash(string storedHash); FILE: src/NetworkOptimizer.Web/Services/PdfStorageService.cs class PdfStorageService (line 9) | public class PdfStorageService method PdfStorageService (line 14) | public PdfStorageService(ILogger logger) method GetPdfDirectory (line 24) | private static string GetPdfDirectory() method SavePdfAsync (line 53) | public async Task SavePdfAsync(int auditId, ReportData reportData) method GetPdfAsync (line 81) | public async Task GetPdfAsync(int auditId) method PdfExists (line 97) | public bool PdfExists(int auditId) method GetPdfPath (line 105) | public string GetPdfPath(int auditId) method CleanupOldPdfs (line 114) | public void CleanupOldPdfs(IEnumerable validAuditIds) FILE: src/NetworkOptimizer.Web/Services/PerfTweaksDeploymentService.cs class PerfTweaksDeploymentService (line 12) | public class PerfTweaksDeploymentService method PerfTweaksDeploymentService (line 49) | public PerfTweaksDeploymentService( method RunCommandAsync (line 61) | private Task<(bool success, string output)> RunCommandAsync(string com... method CheckAllStatusAsync (line 64) | public async Task CheckAllStatusAsync() method DeployTweakAsync (line 354) | public async Task<(bool success, string message, List steps)> ... method DeploySfpTweakAsync (line 432) | private async Task<(bool success, string message, List steps)>... method RemoveTweakAsync (line 506) | public async Task<(bool success, string message)> RemoveTweakAsync(str... method SetManuallyDeployedAsync (line 634) | public async Task SetManuallyDeployedAsync(string tweakId, bool isManual) method InstallUdmBootAsync (line 662) | public async Task<(bool success, string message)> InstallUdmBootAsync() method ReadEmbeddedResource (line 667) | private static string? ReadEmbeddedResource(string fileName) method ReadEmbeddedResourceBytes (line 682) | private static byte[]? ReadEmbeddedResourceBytes(string fileName) method ParseDelimitedOutput (line 698) | private static Dictionary ParseDelimitedOutput(string ... method GetSection (line 727) | private static string GetSection(Dictionary sections, ... method FormatHexRegister (line 730) | private static string FormatHexRegister(string raw) method FormatLinkSpeed (line 739) | private static string FormatLinkSpeed(string ethtoolSpeed) class PerfTweaksStatus (line 752) | public class PerfTweaksStatus class TweakDeploymentStatus (line 768) | public class TweakDeploymentStatus type HealthCheckResult (line 780) | public record HealthCheckResult(string Label, string Value, HealthCheckS... type HealthCheckStatus (line 782) | public enum HealthCheckStatus { Ok, Warning, Error } FILE: src/NetworkOptimizer.Web/Services/PlannedApService.cs class PlannedApService (line 9) | public class PlannedApService method PlannedApService (line 14) | public PlannedApService(IDbContextFactory d... method GetAllAsync (line 20) | public async Task> GetAllAsync() method CreateAsync (line 26) | public async Task CreateAsync(PlannedAp ap) method DeleteAsync (line 37) | public async Task DeleteAsync(int id) method UpdateLocationAsync (line 48) | public async Task UpdateLocationAsync(int id, double lat, double lng) method UpdateFloorAsync (line 59) | public async Task UpdateFloorAsync(int id, int floor) method UpdateOrientationAsync (line 69) | public async Task UpdateOrientationAsync(int id, int deg) method UpdateMountTypeAsync (line 79) | public async Task UpdateMountTypeAsync(int id, string mountType) method UpdateTxPowerAsync (line 89) | public async Task UpdateTxPowerAsync(int id, string band, int? txPower) method UpdateAntennaModeAsync (line 104) | public async Task UpdateAntennaModeAsync(int id, string? mode) method UpdateNameAsync (line 114) | public async Task UpdateNameAsync(int id, string name) FILE: src/NetworkOptimizer.Web/Services/PullToRefreshState.cs class PullToRefreshState (line 7) | public class PullToRefreshState FILE: src/NetworkOptimizer.Web/Services/ScheduleExecutorRegistration.cs class ScheduleExecutorRegistration (line 13) | public static class ScheduleExecutorRegistration method RegisterScheduleExecutors (line 15) | public static void RegisterScheduleExecutors(this WebApplication app) method ExecuteAuditAsync (line 29) | private static async Task<(bool Success, string? Summary, string? Erro... method ExecuteWanSpeedTestAsync (line 56) | private static async Task<(bool Success, string? Summary, string? Erro... method ExecuteLanSpeedTestAsync (line 154) | private static async Task<(bool Success, string? Summary, string? Erro... type ReconcileResult (line 209) | private record struct ReconcileResult( method ReconcileWanMetadataAsync (line 218) | private static async Task ReconcileWanMetadataAsync( method MatchWanInterface (line 258) | private static (bool Matched, string Interface, string? Group, string?... method ReconcileSingleWanAsync (line 277) | private static async Task ReconcileSingleWanAsync( method ReconcileMultiWanAsync (line 317) | private static async Task ReconcileMultiWanAsync( method DisableScheduleAsync (line 378) | private static async Task DisableScheduleAsync(IServiceProvider servic... method PersistScheduleUpdateAsync (line 390) | private static async Task PersistScheduleUpdateAsync( FILE: src/NetworkOptimizer.Web/Services/SponsorshipService.cs class SponsorshipService (line 12) | public class SponsorshipService : ISponsorshipService method SponsorshipService (line 60) | public SponsorshipService(IServiceProvider serviceProvider, ILogger GetCurrentNagAsync(bool alwaysShow ... method MarkLevelShownAsync (line 136) | public async Task MarkLevelShownAsync(int level) method GetUsageCountAsync (line 155) | public async Task GetUsageCountAsync() method GetEarnedLevelAsync (line 161) | public async Task GetEarnedLevelAsync() method GetUsageCountInternalAsync (line 167) | private async Task GetUsageCountInternalAsync(IServiceScope scope) method GetEarnedLevelInternalAsync (line 218) | private async Task GetEarnedLevelInternalAsync(IServiceScope scope) method MarkAsAlreadySponsorAsync (line 239) | public async Task MarkAsAlreadySponsorAsync() method IsAlreadySponsorAsync (line 254) | public async Task IsAlreadySponsorAsync() FILE: src/NetworkOptimizer.Web/Services/SqmDeploymentService.cs class SqmDeploymentService (line 14) | public class SqmDeploymentService : ISqmDeploymentService method SqmDeploymentService (line 24) | public SqmDeploymentService( method GetGatewaySettingsAsync (line 37) | private Task GetGatewaySettingsAsync() method RunCommandAsync (line 43) | private Task<(bool success, string output)> RunCommandAsync(string com... method TestConnectionAsync (line 49) | public Task<(bool success, string message)> TestConnectionAsync() method InstallUdmBootAsync (line 57) | public async Task<(bool success, string message)> InstallUdmBootAsync() method ParseDelimitedOutput (line 119) | private static Dictionary ParseDelimitedOutput(string ... method GetSection (line 157) | private static string GetSection(Dictionary sections, ... method CheckDeploymentStatusAsync (line 163) | public async Task CheckDeploymentStatusAsync() method CleanAllSqmScriptsAsync (line 230) | public async Task<(bool success, string message)> CleanAllSqmScriptsAs... method CleanupFailedDeploymentAsync (line 262) | private async Task CleanupFailedDeploymentAsync(string? connectionName... method CleanupFailedSqmMonitorAsync (line 294) | private async Task CleanupFailedSqmMonitorAsync() method DeployAsync (line 334) | public async Task DeployAsync(SqmConfig config, D... method DeployScriptAsync (line 508) | private async Task DeployScriptAsync(string filename, string con... method DeploySqmMonitorAsync (line 542) | public async Task<(bool success, string? warning)> DeploySqmMonitorAsy... method RemoveAsync (line 611) | public async Task<(bool success, List steps)> RemoveAsync(bool... method TriggerSqmAdjustmentAsync (line 696) | public async Task<(bool success, string message)> TriggerSqmAdjustment... method GetWanLogsAsync (line 784) | public async Task<(bool success, string output)> GetWanLogsAsync(strin... method TestPingTargetAsync (line 830) | private async Task<(bool success, string? error)> TestPingTargetAsync(... method GenerateDefaultBaseline (line 887) | private Dictionary GenerateDefaultBaseline(SqmConfig c... method GetSqmWanStatusAsync (line 906) | public async Task> GetSqmWanStatusAsync() method ParseSqmLog (line 979) | private void ParseSqmLog(string logContent, SqmWanStatus status) method GenerateSqmMonitorScript (line 1049) | private string GenerateSqmMonitorScript(string wan1Interface, string w... class SqmWanStatus (line 1371) | public class SqmWanStatus class SqmDeploymentStatus (line 1388) | public class SqmDeploymentStatus class SqmDeploymentResult (line 1406) | public class SqmDeploymentResult FILE: src/NetworkOptimizer.Web/Services/SqmService.cs class SqmService (line 12) | public class SqmService : ISqmService method SqmService (line 29) | public SqmService( method GetSqmStatusAsync (line 45) | public async Task GetSqmStatusAsync(bool forceRefresh =... method CacheStatusResult (line 114) | private static void CacheStatusResult(SqmStatusData result) method InvalidateStatusCache (line 123) | public static void InvalidateStatusCache() method PollTcStatsAsync (line 132) | private async Task PollTcStatsAsync() method GetGatewaySettingsAsync (line 153) | private async Task<(string? Host, int Port)> GetGatewaySettingsAsync() method TestTcMonitorAsync (line 176) | public async Task<(bool Available, string? Error)> TestTcMonitorAsync(... method GetTcInterfaceStatsAsync (line 200) | public async Task?> GetTcInterfaceStatsAsync() method GetWanInterfacesFromControllerAsync (line 210) | public async Task> GetWanInterfacesFromControll... method ExtractWanInterfacesFromDeviceData (line 302) | private List ExtractWanInterfacesFromDeviceData( method ExtractIspNameFromHostname (line 556) | private string? ExtractIspNameFromHostname(string hostname) method IsPrivateIp (line 604) | private bool IsPrivateIp(string ip) method GenerateTcMonitorConfigAsync (line 640) | public async Task GenerateTcMonitorConfigAsync() method DeploySqmAsync (line 658) | public async Task DeploySqmAsync(SqmConfiguration config) method GenerateSqmScriptsAsync (line 681) | public async Task GenerateSqmScriptsAsync(SqmConfiguration con... method DisableSqmAsync (line 694) | public async Task DisableSqmAsync() class SqmStatusData (line 710) | public class SqmStatusData class SqmConfiguration (line 729) | public class SqmConfiguration class SpeedtestResult (line 739) | public class SpeedtestResult class BaselineStats (line 748) | public class BaselineStats class WanInterfaceInfo (line 759) | public class WanInterfaceInfo FILE: src/NetworkOptimizer.Web/Services/Ssh/GatewaySshService.cs class GatewaySshService (line 11) | public class GatewaySshService : IGatewaySshService method GatewaySshService (line 24) | public GatewaySshService( method GetSettingsAsync (line 39) | public async Task GetSettingsAsync(bool forceRefre... method SaveSettingsAsync (line 77) | public async Task SaveSettingsAsync(GatewaySshSett... method TestConnectionAsync (line 99) | public async Task<(bool success, string message)> TestConnectionAsync() method TestConnectionAsync (line 149) | public async Task<(bool success, string message)> TestConnectionAsync( method RunCommandAsync (line 201) | public async Task<(bool success, string output)> RunCommandAsync( method CreateConnectionInfo (line 232) | private SshConnectionInfo CreateConnectionInfo(GatewaySshSettings sett... method GetGatewayHostFromController (line 246) | private string? GetGatewayHostFromController() FILE: src/NetworkOptimizer.Web/Services/Ssh/IGatewaySshService.cs type IGatewaySshService (line 10) | public interface IGatewaySshService method GetSettingsAsync (line 16) | Task GetSettingsAsync(bool forceRefresh = false); method SaveSettingsAsync (line 21) | Task SaveSettingsAsync(GatewaySshSettings settings); method TestConnectionAsync (line 26) | Task<(bool success, string message)> TestConnectionAsync(); method TestConnectionAsync (line 36) | Task<(bool success, string message)> TestConnectionAsync( method RunCommandAsync (line 49) | Task<(bool success, string output)> RunCommandAsync( FILE: src/NetworkOptimizer.Web/Services/Ssh/SshClientService.cs class SshClientService (line 11) | public class SshClientService method SshClientService (line 15) | public SshClientService(ILogger logger) method ExecuteCommandAsync (line 28) | public async Task ExecuteCommandAsync( method TestConnectionAsync (line 114) | public async Task<(bool success, string message)> TestConnectionAsync( method UploadFileAsync (line 163) | public async Task UploadFileAsync( method UploadBinaryAsync (line 197) | public async Task UploadBinaryAsync( method FileExistsAsync (line 227) | public async Task FileExistsAsync( method CreateSshClient (line 244) | private SshClient CreateSshClient(SshConnectionInfo connection) method CreateSftpClient (line 263) | private SftpClient CreateSftpClient(SshConnectionInfo connection) method CreateAuthMethods (line 282) | private List CreateAuthMethods(SshConnectionInfo... method TruncateForLog (line 343) | private static string TruncateForLog(string command) FILE: src/NetworkOptimizer.Web/Services/Ssh/SshCommandResult.cs class SshCommandResult (line 6) | public class SshCommandResult FILE: src/NetworkOptimizer.Web/Services/Ssh/SshConnectionInfo.cs class SshConnectionInfo (line 9) | public class SshConnectionInfo method FromGatewaySettings (line 43) | public static SshConnectionInfo FromGatewaySettings(GatewaySshSettings... method FromUniFiSettings (line 62) | public static SshConnectionInfo FromUniFiSettings(UniFiSshSettings set... method FromDeviceWithOverrides (line 83) | public static SshConnectionInfo FromDeviceWithOverrides( FILE: src/NetworkOptimizer.Web/Services/SystemSettingsService.cs class SystemSettingsService (line 12) | public class SystemSettingsService : ISystemSettingsService method SystemSettingsService (line 29) | public SystemSettingsService(IServiceProvider serviceProvider, ILogger... method IsExternalSpeedTestOrigin (line 38) | public bool IsExternalSpeedTestOrigin(string origin) method UpdateCachedExternalOrigin (line 47) | public void UpdateCachedExternalOrigin(ExternalSpeedTestSettings setti... method GetAsync (line 55) | public async Task GetAsync(string key) method GetIntAsync (line 65) | public async Task GetIntAsync(string key, int defaultValue) method SetAsync (line 76) | public async Task SetAsync(string key, string? value) method SetIntAsync (line 93) | public Task SetIntAsync(string key, int value) => SetAsync(key, value.... method GetIperf3DurationAsync (line 98) | public Task GetIperf3DurationAsync() => method SetIperf3DurationAsync (line 104) | public Task SetIperf3DurationAsync(int value) => method GetIperf3GatewayParallelStreamsAsync (line 110) | public Task GetIperf3GatewayParallelStreamsAsync() => method SetIperf3GatewayParallelStreamsAsync (line 116) | public Task SetIperf3GatewayParallelStreamsAsync(int value) => method GetIperf3UniFiParallelStreamsAsync (line 122) | public Task GetIperf3UniFiParallelStreamsAsync() => method SetIperf3UniFiParallelStreamsAsync (line 128) | public Task SetIperf3UniFiParallelStreamsAsync(int value) => method GetIperf3OtherParallelStreamsAsync (line 134) | public Task GetIperf3OtherParallelStreamsAsync() => method SetIperf3OtherParallelStreamsAsync (line 140) | public Task SetIperf3OtherParallelStreamsAsync(int value) => method GetIperf3SettingsAsync (line 146) | public async Task GetIperf3SettingsAsync() method SaveIperf3SettingsAsync (line 160) | public async Task SaveIperf3SettingsAsync(Iperf3Settings settings) method CheckLocalIperf3Async (line 171) | public async Task CheckLocalIperf3Async(bool forceR... method GetCachedLocalIperf3StatusAsync (line 195) | public async Task GetCachedLocalIperf3StatusAsync() method CacheLocalIperf3StatusAsync (line 225) | private async Task CacheLocalIperf3StatusAsync(LocalIperf3Status status) method RunLocalIperf3VersionCheckAsync (line 235) | private async Task RunLocalIperf3VersionCheckAsync() method GetExternalSpeedTestSettingsAsync (line 306) | public async Task GetExternalSpeedTestSetti... method SaveExternalSpeedTestSettingsAsync (line 329) | public async Task SaveExternalSpeedTestSettingsAsync(ExternalSpeedTest... class ExternalSpeedTestSettings (line 355) | public class ExternalSpeedTestSettings class Iperf3Settings (line 375) | public class Iperf3Settings class LocalIperf3Status (line 386) | public class LocalIperf3Status FILE: src/NetworkOptimizer.Web/Services/TcMonitorClient.cs class TcMonitorClient (line 10) | public class TcMonitorClient : ITcMonitorClient method TcMonitorClient (line 30) | public TcMonitorClient(ILogger logger, IHttpClientFac... method GetTcStatsAsync (line 43) | public async Task GetTcStatsAsync(string host, int... method IsMonitorAvailableAsync (line 137) | public async Task IsMonitorAvailableAsync(string host, int port ... method GetPrimaryWanRateAsync (line 149) | public async Task GetPrimaryWanRateAsync(string host, int por... class TcMonitorResponse (line 160) | public class TcMonitorResponse method GetAllInterfaces (line 179) | public List GetAllInterfaces() class TcInterfaceStats (line 219) | public class TcInterfaceStats class TcWanStats (line 240) | public class TcWanStats class SqmSpeedtestData (line 292) | public class SqmSpeedtestData class SqmPingData (line 307) | public class SqmPingData class SqmErrorData (line 322) | public class SqmErrorData FILE: src/NetworkOptimizer.Web/Services/ThreatDashboardService.cs class ThreatDashboardService (line 16) | public class ThreatDashboardService method ThreatDashboardService (line 41) | public ThreatDashboardService( method GetDashboardDataAsync (line 63) | public async Task GetDashboardDataAsync(DateTime ... method StartBackgroundHydrationAsync (line 117) | private async Task StartBackgroundHydrationAsync(List sources, method GetCachedCtiAsync (line 210) | public async Task GetCachedCtiAsync(string ip, method EnrichSingleSourceAsync (line 249) | public async Task<(SourceIpSummary? Source, bool RateLimited)> EnrichS... method GetDecryptedApiKeyAsync (line 267) | private async Task GetDecryptedApiKeyAsync(CancellationToken ... method EnrichSourcesAsync (line 274) | private async Task EnrichSourcesAsync(List sour... method GetTimelineDataAsync (line 317) | public async Task> GetTimelineDataAsync(DateTime ... method GetGeoDistributionAsync (line 350) | public async Task> GetGeoDistributionAsync(Dat... method GetExposureReportAsync (line 365) | public async Task GetExposureReportAsync( method GetRecentEventsAsync (line 397) | public async Task> GetRecentEventsAsync(int limit = 50, method GetCrowdSecReputationAsync (line 413) | public async Task GetCrowdSecReputationAsync(string i... method GetThreatTrendAsync (line 423) | public async Task<(int TotalCount, List Points)> Get... method SearchAsync (line 447) | public async Task> SearchAsync(DateTime from, ... method GetAttackSequencesAsync (line 547) | public async Task> GetAttackSequencesAsync(DateTi... method GetIpDrilldownAsync (line 562) | public async Task GetIpDrilldownAsync(string ip, Date... method GetPortDrilldownAsync (line 640) | public async Task GetPortDrilldownAsync(int port, D... method GetProtocolDrilldownAsync (line 698) | public async Task GetProtocolDrilldownAsync(str... method BuildTopSources (line 753) | private List BuildTopSources(List ev... method BuildPeerGroup (line 776) | private IpPeerGroup BuildPeerGroup(string peerIp, List ev... method FormatPortRanges (line 806) | private static string FormatPortRanges(List sortedPorts) method CollapsePortsWithGap (line 820) | private static List CollapsePortsWithGap(List sortedPorts... method BuildSignatureGroups (line 844) | private static List BuildSignatureGroups(List CollapsePortRanges(List FillTimelineGaps( method ApplyNoiseFiltersToRepository (line 932) | private async Task ApplyNoiseFiltersToRepository(CancellationToken can... method GetNoiseFiltersAsync (line 951) | public async Task> GetNoiseFiltersAsync(Cancel... method SaveNoiseFilterAsync (line 956) | public async Task SaveNoiseFilterAsync(ThreatNoiseFilter filter, Cance... method DeleteNoiseFilterAsync (line 962) | public async Task DeleteNoiseFilterAsync(int filterId, CancellationTok... method ToggleNoiseFilterAsync (line 968) | public async Task ToggleNoiseFilterAsync(int filterId, bool enabled, C... method GetActiveFiltersAsync (line 974) | private async Task> GetActiveFiltersAsync(Canc... method ApplyNoiseFilters (line 984) | private List ApplyNoiseFilters(List events, ... method GetServiceName (line 990) | private static string GetServiceName(int port) class ThreatDashboardData (line 997) | public class ThreatDashboardData type ThreatTrendPoint (line 1015) | public record ThreatTrendPoint class IpDrilldownData (line 1024) | public class IpDrilldownData class IpPeerGroup (line 1045) | public class IpPeerGroup class PortRangeGroup (line 1058) | public class PortRangeGroup class SignatureGroup (line 1073) | public class SignatureGroup class PortDrilldownData (line 1088) | public class PortDrilldownData class PortDrilldownSource (line 1104) | public class PortDrilldownSource class PortDrilldownDest (line 1115) | public class PortDrilldownDest class ProtocolCount (line 1123) | public class ProtocolCount class PortCount (line 1129) | public class PortCount class ProtocolDrilldownData (line 1140) | public class ProtocolDrilldownData type ThreatSearchQuery (line 1158) | public record ThreatSearchQuery FILE: src/NetworkOptimizer.Web/Services/ThreatSettingsAccessor.cs class ThreatSettingsAccessor (line 12) | public class ThreatSettingsAccessor : IThreatSettingsAccessor method ThreatSettingsAccessor (line 17) | public ThreatSettingsAccessor(NetworkOptimizerDbContext context, ICred... method GetSettingAsync (line 23) | public async Task GetSettingAsync(string key, CancellationTok... method GetDecryptedSettingAsync (line 29) | public async Task GetDecryptedSettingAsync(string key, Cancel... method SaveSettingAsync (line 37) | public async Task SaveSettingAsync(string key, string value, Cancellat... FILE: src/NetworkOptimizer.Web/Services/TimeFormatHelper.cs class TimeFormatHelper (line 6) | public static class TimeFormatHelper method FormatRelativeTime (line 11) | public static string FormatRelativeTime(DateTime utcTime) method FormatRelativeTimeShort (line 42) | public static string FormatRelativeTimeShort(DateTime utcTime) method FormatRelativeTimeCompact (line 68) | public static string FormatRelativeTimeCompact(DateTime utcTime) FILE: src/NetworkOptimizer.Web/Services/TopologySnapshotService.cs type ITopologySnapshotService (line 10) | public interface ITopologySnapshotService method CaptureSnapshotAsync (line 16) | Task CaptureSnapshotAsync(string clientIp); method GetSnapshot (line 21) | WirelessRateSnapshot? GetSnapshot(string clientIp); method RemoveSnapshot (line 26) | void RemoveSnapshot(string clientIp); class TopologySnapshotService (line 33) | public class TopologySnapshotService : ITopologySnapshotService method TopologySnapshotService (line 43) | public TopologySnapshotService( method CaptureSnapshotAsync (line 59) | public async Task CaptureSnapshotAsync(string clientIp) method GetSnapshot (line 142) | public WirelessRateSnapshot? GetSnapshot(string clientIp) method RemoveSnapshot (line 160) | public void RemoveSnapshot(string clientIp) method CleanupExpiredSnapshots (line 168) | private void CleanupExpiredSnapshots() method EnrichWithWiFiManAsync (line 192) | private async Task EnrichWithWiFiManAsync( type SnapshotEntry (line 249) | private record SnapshotEntry(WirelessRateSnapshot Snapshot, DateTime C... FILE: src/NetworkOptimizer.Web/Services/TraefikHostedService.cs class TraefikHostedService (line 11) | public class TraefikHostedService : IHostedService, IDisposable method TraefikHostedService (line 19) | public TraefikHostedService(ILogger logger, ICon... method StartAsync (line 26) | public async Task StartAsync(CancellationToken cancellationToken) method StopAsync (line 62) | public Task StopAsync(CancellationToken cancellationToken) method GenerateConfigsAsync (line 68) | private async Task GenerateConfigsAsync(string traefikFolder) method GetConfigValue (line 120) | private string GetConfigValue(string key, string defaultValue) method StartTraefikAsync (line 126) | private async Task StartTraefikAsync(string traefikFolder, string trae... method StopTraefik (line 193) | private void StopTraefik() method Dispose (line 217) | public void Dispose() FILE: src/NetworkOptimizer.Web/Services/UniFiClientAccessor.cs class UniFiClientAccessor (line 10) | public class UniFiClientAccessor : IUniFiClientAccessor method UniFiClientAccessor (line 14) | public UniFiClientAccessor(UniFiConnectionService connectionService) FILE: src/NetworkOptimizer.Web/Services/UniFiConnectionService.cs class UniFiConnectionService (line 15) | public class UniFiConnectionService : IUniFiClientProvider, IDisposable method UniFiConnectionService (line 52) | public UniFiConnectionService(ILogger logger, ... method StartInitializationAsync (line 67) | private void StartInitializationAsync() method LoadConfigAndConnectAsync (line 91) | private async Task LoadConfigAndConnectAsync() method EnsureInitializedAsync (line 133) | public async Task EnsureInitializedAsync() method GetStoredPasswordAsync (line 177) | public async Task GetStoredPasswordAsync() method GetStoredApiKeyAsync (line 197) | public async Task GetStoredApiKeyAsync() method GetSettingsAsync (line 217) | public async Task GetSettingsAsync() method ConnectAsync (line 253) | public async Task ConnectAsync(UniFiConnectionConfig config) method ConnectWithSettingsAsync (line 342) | private async Task ConnectWithSettingsAsync(UniFiConnectionSetti... method SaveSettingsAsync (line 461) | private async Task SaveSettingsAsync(UniFiConnectionConfig config) method ClearCaches (line 522) | public void ClearCaches() method DisconnectAsync (line 534) | public async Task DisconnectAsync() method TestConnectionAsync (line 560) | public async Task<(bool Success, string? Error, string? ControllerInfo... method GetSitesAsync (line 627) | public async Task<(bool Success, string? Error, List Sites)... method ReconnectAsync (line 698) | public async Task ReconnectAsync() method WaitForConnectionAsync (line 723) | public async Task WaitForConnectionAsync(TimeSpan? timeout = nul... method ClearCredentialsAsync (line 753) | public async Task ClearCredentialsAsync() method GetDiscoveredDevicesAsync (line 778) | public async Task> GetDiscoveredDevicesAsync(Ca... method InvalidateDeviceCache (line 807) | public void InvalidateDeviceCache() method GetNetworksAsync (line 817) | public async Task> GetNetworksAsync(CancellationToke... method EnrichSpeedTestWithClientInfoAsync (line 848) | public async Task EnrichSpeedTestWithClientInfoAsync(Iperf3Result resu... method ParseConnectionException (line 922) | private string ParseConnectionException(Exception ex) method Dispose (line 968) | public void Dispose() class UniFiConnectionConfig (line 974) | public class UniFiConnectionConfig FILE: src/NetworkOptimizer.Web/Services/UniFiSshService.cs class UniFiSshService (line 13) | public class UniFiSshService : IUniFiSshService method UniFiSshService (line 25) | public UniFiSshService( method GetSettingsAsync (line 40) | public async Task GetSettingsAsync() method SaveSettingsAsync (line 76) | public async Task SaveSettingsAsync(UniFiSshSettings... method TestConnectionAsync (line 100) | public async Task<(bool success, string message)> TestConnectionAsync(... method RunCommandAsync (line 134) | public async Task<(bool success, string output)> RunCommandAsync(strin... method RunCommandAsync (line 143) | public async Task<(bool success, string output)> RunCommandAsync( method RunCommandWithDeviceAsync (line 196) | public async Task<(bool success, string output)> RunCommandWithDeviceA... method TestConnectionAsync (line 211) | public async Task<(bool success, string message)> TestConnectionAsync(... method CheckToolAvailableAsync (line 232) | public async Task<(bool available, string version)> CheckToolAvailable... method CheckToolAvailableAsync (line 260) | public async Task<(bool available, string version)> CheckToolAvailable... method GetDevicesAsync (line 289) | public async Task> GetDevicesAsync() method SaveDeviceAsync (line 299) | public async Task SaveDeviceAsync(DeviceSshCon... method DeleteDeviceAsync (line 317) | public async Task DeleteDeviceAsync(int id) FILE: src/NetworkOptimizer.Web/Services/UwnSpeedTestService.cs class UwnSpeedTestService (line 20) | public class UwnSpeedTestService : WanSpeedTestServiceBase method UwnSpeedTestService (line 36) | public UwnSpeedTestService( method RunTestCoreAsync (line 54) | protected override async Task RunTestCoreAsync( method CreateFailedResult (line 324) | protected override Iperf3Result CreateFailedResult(string errorMessage... method IdentifyWanComboViaSshAsync (line 340) | private async Task<(string Group, string Name)?> IdentifyWanComboViaSs... method GetLocalBinaryPath (line 476) | private static string GetLocalBinaryPath() class WanSpeedTestResult (line 505) | private sealed class WanSpeedTestResult class WanMetadata (line 517) | private sealed class WanMetadata class WanLatency (line 526) | private sealed class WanLatency class WanThroughput (line 532) | private sealed class WanThroughput FILE: src/NetworkOptimizer.Web/Services/WanDataUsageService.cs class WanDataUsageService (line 13) | public class WanDataUsageService : BackgroundService method WanDataUsageService (line 37) | public WanDataUsageService( method GetCurrentUsageAsync (line 53) | public async Task> GetCurrentUsageAsync(Cancella... method GetAllConfigsAsync (line 101) | public async Task> GetAllConfigsAsync() method SaveConfigAsync (line 110) | public async Task SaveConfigAsync(WanDataUsageConf... method DeleteConfigAsync (line 150) | public async Task DeleteConfigAsync(string wanKey) method TriggerPollAsync (line 169) | public async Task TriggerPollAsync() method ExecuteAsync (line 186) | protected override async Task ExecuteAsync(CancellationToken stoppingT... method PollAndRecordAsync (line 224) | private async Task PollAndRecordAsync(CancellationToken ct) method GetWanInterfacesAsync (line 363) | private async Task<(List? Interfaces... method GetWanNetworksAsync (line 383) | private async Task> GetWanNetworksAsync(Cancel... method GetWanStatusAsync (line 400) | public async Task> GetWanStatusAsync(Cancella... method WanKeyToNetworkGroup (line 418) | public static string WanKeyToNetworkGroup(string wanKey) method CalculateCycleUsageAsync (line 433) | internal static async Task CalculateCycleUsageAsync( method CalculateUsageFromSnapshots (line 450) | public static long CalculateUsageFromSnapshots(List RunTestAsync( method RunTestCoreAsync (line 186) | protected abstract Task RunTestCoreAsync( method CreateFailedResult (line 191) | protected abstract Iperf3Result CreateFailedResult(string errorMessage); method SetMetadata (line 194) | protected void SetMetadata(WanTestMetadata metadata) method GetResultsAsync (line 200) | public async Task> GetResultsAsync(int count = 50, ... method DeleteResultAsync (line 244) | public async Task DeleteResultAsync(int id) method UpdateWanAssignmentAsync (line 258) | public async Task UpdateWanAssignmentAsync(int id, string wanNet... method UpdateNotesAsync (line 277) | public async Task UpdateNotesAsync(int id, string? notes) method AnalyzePathInBackgroundAsync (line 290) | protected virtual async Task AnalyzePathInBackgroundAsync(int resultId... method PublishWanAlertAsync (line 325) | private async Task PublishWanAlertAsync(Iperf3Result result) class ProgressContent (line 408) | protected sealed class ProgressContent(byte[] data, Action onByte... method SerializeToStreamAsync (line 412) | protected override async Task SerializeToStreamAsync(Stream stream, ... method TryComputeLength (line 424) | protected override bool TryComputeLength(out long length) FILE: src/NetworkOptimizer.Web/Services/WanSteerDeploymentService.cs class WanSteerDeploymentService (line 10) | public class WanSteerDeploymentService method WanSteerDeploymentService (line 27) | public WanSteerDeploymentService( method GetStatusAsync (line 43) | public async Task GetStatusAsync() method DeployAsync (line 75) | public async Task<(bool Success, string? Error)> DeployAsync( method StopAsync (line 150) | public async Task StopAsync() method ReloadConfigAsync (line 165) | public async Task<(bool Success, string? Error)> ReloadConfigAsync() method RemoveAsync (line 199) | public async Task<(bool Success, string? Error)> RemoveAsync() method DiscoverWanInterfacesAsync (line 220) | public async Task> DiscoverWanInterfacesAsync() method GenerateConfigJsonAsync (line 294) | public async Task GenerateConfigJsonAsync(List DeployBinaryAsync(Ca... method GetConnectionInfo (line 443) | private SshConnectionInfo GetConnectionInfo(GatewaySshSettings settings) method ComputeMd5 (line 455) | private static string ComputeMd5(string filePath) method GenerateBootScript (line 462) | internal static string GenerateBootScript() method SplitCidrsAndRanges (line 479) | internal static (List Cidrs, List Ranges) SplitCidrsAn... method SanitizeWanKey (line 494) | internal static string SanitizeWanKey(string name) method ParseIpRules (line 499) | internal static Dictionary... method ParseDelimitedOutput (line 519) | internal static Dictionary ParseDelimitedOutput(string... method GetSection (line 549) | internal static string GetSection(Dictionary sections,... class WanSteerStatus (line 559) | public class WanSteerStatus class WanSteerWanInfo (line 567) | public class WanSteerWanInfo FILE: src/NetworkOptimizer.Web/Services/WanSteerValidation.cs class WanSteerValidation (line 11) | internal static class WanSteerValidation method ValidateRule (line 29) | public static List ValidateRule(WanSteerTrafficClass rule) method ValidateCidrList (line 72) | public static void ValidateCidrList(string json, string label, List errors) method ValidatePortList (line 132) | public static void ValidatePortList(string json, string label, List GetSiteHealthScoreAsync(bool force... method GetAccessPointsAsync (line 167) | public async Task> GetAccessPointsAsync(bool... method GetWirelessClientsAsync (line 186) | public async Task> GetWirelessClientsAsyn... method GetRoamingTopologyAsync (line 205) | public async Task GetRoamingTopologyAsync(bool force... method GetWlanConfigurationsAsync (line 224) | public async Task> GetWlanConfigurationsAsync(... method GetSummaryAsync (line 243) | public async Task GetSummaryAsync() method RefreshDataAsync (line 295) | private async Task RefreshDataAsync() method ClearCache (line 430) | public void ClearCache() method BuildOptimizerContextAsync (line 445) | private async Task BuildOptimizerContextAsync( method GetChannelScanResultsAsync (line 544) | public async Task> GetChannelScanResultsAsync( method GetRegulatoryChannelsAsync (line 589) | public async Task GetRegulatoryChannelsAsync() method GetSiteMetricsAsync (line 629) | public async Task> GetSiteMetricsAsync( method GetApMetricsAsync (line 656) | public async Task> GetApMetricsAsync( method GetChannelChangeEventsAsync (line 685) | public async Task> GetChannelChan... method GetClientMetricsAsync (line 708) | public async Task> GetClientMetric... method GetClientConnectionEventsAsync (line 736) | public async Task> GetClientCo... method GetAllChannelRecommendationsAsync (line 763) | public async Task> GetAllChannelRec... method GetHistoricalStressAsync (line 874) | private async Task=G.INFOS&&console.log(`Info: ${t}`)} function warn (line 21) | function warn(t){Y>=G.WARNINGS&&console.log(`Warning: ${t}`)} function unreachable (line 21) | function unreachable(t){throw new Error(t)} function assert (line 21) | function assert(t,e){t||unreachable(e)} function createValidAbsoluteUrl (line 21) | function createValidAbsoluteUrl(t,e=null,i=null){if(!t)return null;try{i... function shadow (line 21) | function shadow(t,e,i,s=!1){Object.defineProperty(t,e,{value:i,enumerabl... function BaseException (line 21) | function BaseException(t,e){this.constructor===BaseException&&unreachabl... class PasswordException (line 21) | class PasswordException extends Q{constructor(t,e){super(t,"PasswordExce... method constructor (line 21) | constructor(t,e){super(t,"PasswordException");this.code=e} class UnknownErrorException (line 21) | class UnknownErrorException extends Q{constructor(t,e){super(t,"UnknownE... method constructor (line 21) | constructor(t,e){super(t,"UnknownErrorException");this.details=e} class InvalidPDFException (line 21) | class InvalidPDFException extends Q{constructor(t){super(t,"InvalidPDFEx... method constructor (line 21) | constructor(t){super(t,"InvalidPDFException")} class MissingPDFException (line 21) | class MissingPDFException extends Q{constructor(t){super(t,"MissingPDFEx... method constructor (line 21) | constructor(t){super(t,"MissingPDFException")} class UnexpectedResponseException (line 21) | class UnexpectedResponseException extends Q{constructor(t,e){super(t,"Un... method constructor (line 21) | constructor(t,e){super(t,"UnexpectedResponseException");this.status=e} class FormatError (line 21) | class FormatError extends Q{constructor(t){super(t,"FormatError")}} method constructor (line 21) | constructor(t){super(t,"FormatError")} class AbortException (line 21) | class AbortException extends Q{constructor(t){super(t,"AbortException")}} method constructor (line 21) | constructor(t){super(t,"AbortException")} function bytesToString (line 21) | function bytesToString(t){"object"==typeof t&&void 0!==t?.length||unreac... function stringToBytes (line 21) | function stringToBytes(t){"string"!=typeof t&&unreachable("Invalid argum... function objectFromMap (line 21) | function objectFromMap(t){const e=Object.create(null);for(const[i,s]of t... class util_FeatureTest (line 21) | class util_FeatureTest{static get isLittleEndian(){return shadow(this,"i... method isLittleEndian (line 21) | static get isLittleEndian(){return shadow(this,"isLittleEndian",functi... method isEvalSupported (line 21) | static get isEvalSupported(){return shadow(this,"isEvalSupported",func... method isOffscreenCanvasSupported (line 21) | static get isOffscreenCanvasSupported(){return shadow(this,"isOffscree... method platform (line 21) | static get platform(){return"undefined"!=typeof navigator&&"string"==t... method isCSSRoundSupported (line 21) | static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupport... class Util (line 21) | class Util{static makeHexColor(t,e,i){return`#${J[t]}${J[e]}${J[i]}`}sta... method makeHexColor (line 21) | static makeHexColor(t,e,i){return`#${J[t]}${J[e]}${J[i]}`} method scaleMinMax (line 21) | static scaleMinMax(t,e){let i;if(t[0]){if(t[0]<0){i=e[0];e[0]=e[2];e[2... method transform (line 21) | static transform(t,e){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t... method applyTransform (line 21) | static applyTransform(t,e){return[t[0]*e[0]+t[1]*e[2]+e[4],t[0]*e[1]+t... method applyInverseTransform (line 21) | static applyInverseTransform(t,e){const i=e[0]*e[3]-e[1]*e[2];return[(... method getAxialAlignedBoundingBox (line 21) | static getAxialAlignedBoundingBox(t,e){const i=this.applyTransform(t,e... method inverseTransform (line 21) | static inverseTransform(t){const e=t[0]*t[3]-t[1]*t[2];return[t[3]/e,-... method singularValueDecompose2dScale (line 21) | static singularValueDecompose2dScale(t){const e=[t[0],t[2],t[1],t[3]],... method normalizeRect (line 21) | static normalizeRect(t){const e=t.slice(0);if(t[0]>t[2]){e[0]=t[2];e[2... method intersect (line 21) | static intersect(t,e){const i=Math.max(Math.min(t[0],t[2]),Math.min(e[... method #t (line 21) | static#t(t,e,i,s,n,a,r,o,l,h){if(l<=0||l>=1)return;const d=1-l,c=l*l,u... method #e (line 21) | static#e(t,e,i,s,n,a,r,o,l,h,d,c){if(Math.abs(l)<1e-12){Math.abs(h)>=1... method bezierBoundingBox (line 21) | static bezierBoundingBox(t,e,i,s,n,a,r,o,l){if(l){l[0]=Math.min(l[0],t... function normalizeUnicode (line 21) | function normalizeUnicode(t){if(!Z){Z=/([\u00a0\u00b5\u037e\u0eb3\u2000-... class BaseFilterFactory (line 21) | class BaseFilterFactory{constructor(){this.constructor===BaseFilterFacto... method constructor (line 21) | constructor(){this.constructor===BaseFilterFactory&&unreachable("Canno... method addFilter (line 21) | addFilter(t){return"none"} method addHCMFilter (line 21) | addHCMFilter(t,e){return"none"} method addAlphaFilter (line 21) | addAlphaFilter(t){return"none"} method addLuminosityFilter (line 21) | addLuminosityFilter(t){return"none"} method addHighlightHCMFilter (line 21) | addHighlightHCMFilter(t,e,i,s,n){return"none"} method destroy (line 21) | destroy(t=!1){} class BaseCanvasFactory (line 21) | class BaseCanvasFactory{#i=!1;constructor({enableHWA:t=!1}={}){this.cons... method constructor (line 21) | constructor({enableHWA:t=!1}={}){this.constructor===BaseCanvasFactory&... method create (line 21) | create(t,e){if(t<=0||e<=0)throw new Error("Invalid canvas size");const... method reset (line 21) | reset(t,e,i){if(!t.canvas)throw new Error("Canvas is not specified");i... method destroy (line 21) | destroy(t){if(!t.canvas)throw new Error("Canvas is not specified");t.c... method _createCanvas (line 21) | _createCanvas(t,e){unreachable("Abstract method `_createCanvas` called... class BaseCMapReaderFactory (line 21) | class BaseCMapReaderFactory{constructor({baseUrl:t=null,isCompressed:e=!... method constructor (line 21) | constructor({baseUrl:t=null,isCompressed:e=!0}){this.constructor===Bas... method fetch (line 21) | async fetch({name:t}){if(!this.baseUrl)throw new Error('The CMap "base... method _fetchData (line 21) | _fetchData(t,e){unreachable("Abstract method `_fetchData` called.")} class BaseStandardFontDataFactory (line 21) | class BaseStandardFontDataFactory{constructor({baseUrl:t=null}){this.con... method constructor (line 21) | constructor({baseUrl:t=null}){this.constructor===BaseStandardFontDataF... method fetch (line 21) | async fetch({filename:t}){if(!this.baseUrl)throw new Error('The standa... method _fetchData (line 21) | _fetchData(t){unreachable("Abstract method `_fetchData` called.")} class BaseSVGFactory (line 21) | class BaseSVGFactory{constructor(){this.constructor===BaseSVGFactory&&un... method constructor (line 21) | constructor(){this.constructor===BaseSVGFactory&&unreachable("Cannot i... method create (line 21) | create(t,e,i=!1){if(t<=0||e<=0)throw new Error("Invalid SVG dimensions... method createElement (line 21) | createElement(t){if("string"!=typeof t)throw new Error("Invalid SVG el... method _createSVG (line 21) | _createSVG(t){unreachable("Abstract method `_createSVG` called.")} class PixelsPerInch (line 21) | class PixelsPerInch{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=... function fetchData (line 21) | async function fetchData(t,e="text"){if(isValidFetchUrl(t,document.baseU... class DOMCMapReaderFactory (line 21) | class DOMCMapReaderFactory extends BaseCMapReaderFactory{_fetchData(t,e)... method _fetchData (line 21) | _fetchData(t,e){return fetchData(t,this.isCompressed?"arraybuffer":"te... class DOMStandardFontDataFactory (line 21) | class DOMStandardFontDataFactory extends BaseStandardFontDataFactory{_fe... method _fetchData (line 21) | _fetchData(t){return fetchData(t,"arraybuffer").then((t=>new Uint8Arra... class DOMSVGFactory (line 21) | class DOMSVGFactory extends BaseSVGFactory{_createSVG(t){return document... method _createSVG (line 21) | _createSVG(t){return document.createElementNS(ct,t)} class PageViewport (line 21) | class PageViewport{constructor({viewBox:t,scale:e,rotation:i,offsetX:s=0... method constructor (line 21) | constructor({viewBox:t,scale:e,rotation:i,offsetX:s=0,offsetY:n=0,dont... method rawDims (line 21) | get rawDims(){const{viewBox:t}=this;return shadow(this,"rawDims",{page... method clone (line 21) | clone({scale:t=this.scale,rotation:e=this.rotation,offsetX:i=this.offs... method convertToViewportPoint (line 21) | convertToViewportPoint(t,e){return Util.applyTransform([t,e],this.tran... method convertToViewportRectangle (line 21) | convertToViewportRectangle(t){const e=Util.applyTransform([t[0],t[1]],... method convertToPdfPoint (line 21) | convertToPdfPoint(t,e){return Util.applyInverseTransform([t,e],this.tr... class RenderingCancelledException (line 21) | class RenderingCancelledException extends Q{constructor(t,e=0){super(t,"... method constructor (line 21) | constructor(t,e=0){super(t,"RenderingCancelledException");this.extraDe... function isDataScheme (line 21) | function isDataScheme(t){const e=t.length;let i=0;for(;ithis.#pt[t]!==e))){this._ev... method #Rt (line 21) | #Rt(t){this._eventBus.dispatch("annotationeditorparamschanged",{source... method setEditingState (line 21) | setEditingState(t){if(t){this.#St();this.#kt();this.#Et({isEditing:thi... method registerEditorTypes (line 21) | registerEditorTypes(t){if(!this.#N){this.#N=t;for(const t of this.#N)t... method getId (line 21) | getId(){return this.#W.id} method currentLayer (line 21) | get currentLayer(){return this.#k.get(this.#I)} method getLayer (line 21) | getLayer(t){return this.#k.get(t)} method currentPageIndex (line 21) | get currentPageIndex(){return this.#I} method addLayer (line 21) | addLayer(t){this.#k.set(t.pageIndex,t);this.#G?t.enable():t.disable()} method removeLayer (line 21) | removeLayer(t){this.#k.delete(t.pageIndex)} method updateMode (line 21) | updateMode(t,e=null,i=!1){if(this.#Q!==t){this.#Q=t;if(t!==p.NONE){thi... method addNewEditorFromKeyboard (line 21) | addNewEditorFromKeyboard(){this.currentLayer.canCreateNewEmptyEditor()... method updateToolbar (line 21) | updateToolbar(t){t!==this.#Q&&this._eventBus.dispatch("switchannotatio... method updateParams (line 21) | updateParams(t,e){if(this.#N){switch(t){case g.CREATE:this.currentLaye... method showAllEditors (line 21) | showAllEditors(t,e,i=!1){for(const i of this.#M.values())i.editorType=... method enableWaiting (line 21) | enableWaiting(t=!1){if(this.#q!==t){this.#q=t;for(const e of this.#k.v... method #Lt (line 21) | #Lt(){if(!this.#G){this.#G=!0;for(const t of this.#k.values())t.enable... method #Ot (line 21) | #Ot(){this.unselectAll();if(this.#G){this.#G=!1;for(const t of this.#k... method getEditors (line 21) | getEditors(t){const e=[];for(const i of this.#M.values())i.pageIndex==... method getEditor (line 21) | getEditor(t){return this.#M.get(t)} method addEditor (line 21) | addEditor(t){this.#M.set(t.id,t)} method removeEditor (line 21) | removeEditor(t){if(t.div.contains(document.activeElement)){this.#U&&cl... method addDeletedAnnotationElement (line 21) | addDeletedAnnotationElement(t){this.#L.add(t.annotationElementId);this... method isDeletedAnnotationElement (line 21) | isDeletedAnnotationElement(t){return this.#L.has(t)} method removeDeletedAnnotationElement (line 21) | removeDeletedAnnotationElement(t){this.#L.delete(t.annotationElementId... method #Dt (line 21) | #Dt(t){const e=this.#k.get(t.pageIndex);if(e)e.addOrRebuild(t);else{th... method setActiveEditor (line 21) | setActiveEditor(t){if(this.#T!==t){this.#T=t;t&&this.#Rt(t.propertiesT... method #Nt (line 21) | get#Nt(){let t=null;for(t of this.#J);return t} method updateUI (line 21) | updateUI(t){this.#Nt===t&&this.#Rt(t.propertiesToUpdate)} method toggleSelected (line 21) | toggleSelected(t){if(this.#J.has(t)){this.#J.delete(t);t.unselect();th... method setSelected (line 21) | setSelected(t){for(const e of this.#J)e!==t&&e.unselect();this.#J.clea... method isSelected (line 21) | isSelected(t){return this.#J.has(t)} method firstSelectedEditor (line 21) | get firstSelectedEditor(){return this.#J.values().next().value} method unselect (line 21) | unselect(t){t.unselect();this.#J.delete(t);this.#Et({hasSelectedEditor... method hasSelection (line 21) | get hasSelection(){return 0!==this.#J.size} method isEnterHandled (line 21) | get isEnterHandled(){return 1===this.#J.size&&this.firstSelectedEditor... method undo (line 21) | undo(){this.#R.undo();this.#Et({hasSomethingToUndo:this.#R.hasSomethin... method redo (line 21) | redo(){this.#R.redo();this.#Et({hasSomethingToUndo:!0,hasSomethingToRe... method addCommands (line 21) | addCommands(t){this.#R.add(t);this.#Et({hasSomethingToUndo:!0,hasSomet... method #It (line 21) | #It(){if(0===this.#M.size)return!0;if(1===this.#M.size)for(const t of ... method delete (line 21) | delete(){this.commitOrRemove();if(!this.hasSelection)return;const t=[.... method commitOrRemove (line 21) | commitOrRemove(){this.#T?.commitOrRemove()} method hasSomethingToControl (line 21) | hasSomethingToControl(){return this.#T||this.hasSelection} method #Ft (line 21) | #Ft(t){for(const t of this.#J)t.unselect();this.#J.clear();for(const e... method selectAll (line 21) | selectAll(){for(const t of this.#J)t.commit();this.#Ft(this.#M.values())} method unselectAll (line 21) | unselectAll(){if(this.#T){this.#T.commitOrRemove();if(this.#Q!==p.NONE... method translateSelectedEditors (line 21) | translateSelectedEditors(t,e,i=!1){i||this.commitOrRemove();if(!this.h... method setUpDragSession (line 21) | setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0);th... method endDragSession (line 21) | endDragSession(){if(!this.#O)return!1;this.disableUserSelect(!1);const... method dragSelectedEditors (line 21) | dragSelectedEditors(t,e){if(this.#O)for(const i of this.#O.keys())i.dr... method rebuild (line 21) | rebuild(t){if(null===t.parent){const e=this.getLayer(t.pageIndex);if(e... method isEditorHandlingKeyboard (line 21) | get isEditorHandlingKeyboard(){return this.getActive()?.shouldGetKeybo... method isActive (line 21) | isActive(t){return this.#T===t} method getActive (line 21) | getActive(){return this.#T} method getMode (line 21) | getMode(){return this.#Q} method imageManager (line 21) | get imageManager(){return shadow(this,"imageManager",new ImageManager)} method getSelectionBoxes (line 21) | getSelectionBoxes(t){if(!t)return null;const e=document.getSelection()... method addChangedExistingAnnotation (line 21) | addChangedExistingAnnotation({annotationElementId:t,id:e}){(this.#F||=... method removeChangedExistingAnnotation (line 21) | removeChangedExistingAnnotation({annotationElementId:t}){this.#F?.dele... method renderAnnotationElement (line 21) | renderAnnotationElement(t){const e=this.#F?.get(t.data.id);if(!e)retur... class AltText (line 21) | class AltText{#Bt="";#Ht=!1;#zt=null;#Ut=null;#jt=null;#$t=!1;#a=null;st... method constructor (line 21) | constructor(t){this.#a=t} method initialize (line 21) | static initialize(t){AltText._l10nPromise||=t} method render (line 21) | async render(){const t=this.#zt=document.createElement("button");t.cla... method finish (line 21) | finish(){if(this.#zt){this.#zt.focus({focusVisible:this.#$t});this.#$t... method isEmpty (line 21) | isEmpty(){return!this.#Bt&&!this.#Ht} method data (line 21) | get data(){return{altText:this.#Bt,decorative:this.#Ht}} method data (line 21) | set data({altText:t,decorative:e}){if(this.#Bt!==t||this.#Ht!==e){this... method toggle (line 21) | toggle(t=!1){if(this.#zt){if(!t&&this.#jt){clearTimeout(this.#jt);this... method destroy (line 21) | destroy(){this.#zt?.remove();this.#zt=null;this.#Ut=null} method #Vt (line 21) | async#Vt(){const t=this.#zt;if(!t)return;if(!this.#Bt&&!this.#Ht){t.cl... class AnnotationEditor (line 21) | class AnnotationEditor{#Wt=null;#Gt=null;#Bt=null;#qt=!1;#Xt=!1;#Kt=null... method _resizerKeyboardManager (line 21) | static get _resizerKeyboardManager(){const t=AnnotationEditor.prototyp... method constructor (line 21) | constructor(t){this.constructor===AnnotationEditor&&unreachable("Canno... method editorType (line 21) | get editorType(){return Object.getPrototypeOf(this).constructor._type} method _defaultLineColor (line 21) | static get _defaultLineColor(){return shadow(this,"_defaultLineColor",... method deleteAnnotationElement (line 21) | static deleteAnnotationElement(t){const e=new FakeEditor({id:t.parent.... method initialize (line 21) | static initialize(t,e,i){AnnotationEditor._l10nPromise||=new Map(["pdf... method updateDefaultParams (line 21) | static updateDefaultParams(t,e){} method defaultPropertiesToUpdate (line 21) | static get defaultPropertiesToUpdate(){return[]} method isHandlingMimeForPasting (line 21) | static isHandlingMimeForPasting(t){return!1} method paste (line 21) | static paste(t,e){unreachable("Not implemented")} method propertiesToUpdate (line 21) | get propertiesToUpdate(){return[]} method _isDraggable (line 21) | get _isDraggable(){return this.#de} method _isDraggable (line 21) | set _isDraggable(t){this.#de=t;this.div?.classList.toggle("draggable",t)} method isEnterHandled (line 21) | get isEnterHandled(){return!0} method center (line 21) | center(){const[t,e]=this.pageDimensions;switch(this.parentRotation){ca... method addCommands (line 21) | addCommands(t){this._uiManager.addCommands(t)} method currentLayer (line 21) | get currentLayer(){return this._uiManager.currentLayer} method setInBackground (line 21) | setInBackground(){this.div.style.zIndex=0} method setInForeground (line 21) | setInForeground(){this.div.style.zIndex=this.#ce} method setParent (line 21) | setParent(t){if(null!==t){this.pageIndex=t.pageIndex;this.pageDimensio... method focusin (line 21) | focusin(t){this._focusEventsAllowed&&(this.#ee?this.#ee=!1:this.parent... method focusout (line 21) | focusout(t){if(!this._focusEventsAllowed)return;if(!this.isAttachedToD... method commitOrRemove (line 21) | commitOrRemove(){this.isEmpty()?this.remove():this.commit()} method commit (line 21) | commit(){this.addToAnnotationStorage()} method addToAnnotationStorage (line 21) | addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)} method setAt (line 21) | setAt(t,e,i,s){const[n,a]=this.parentDimensions;[i,s]=this.screenToPag... method #pe (line 21) | #pe([t,e],i,s){[i,s]=this.screenToPageTranslation(i,s);this.x+=i/t;thi... method translate (line 21) | translate(t,e){this.#pe(this.parentDimensions,t,e)} method translateInPage (line 21) | translateInPage(t,e){this.#ie||=[this.x,this.y];this.#pe(this.pageDime... method drag (line 21) | drag(t,e){this.#ie||=[this.x,this.y];const[i,s]=this.parentDimensions;... method _hasBeenMoved (line 21) | get _hasBeenMoved(){return!!this.#ie&&(this.#ie[0]!==this.x||this.#ie[... method getBaseTranslation (line 21) | getBaseTranslation(){const[t,e]=this.parentDimensions,{_borderLineWidt... method _mustFixPosition (line 21) | get _mustFixPosition(){return!0} method fixAndSetPosition (line 21) | fixAndSetPosition(t=this.rotation){const[e,i]=this.pageDimensions;let{... method #ge (line 21) | static#ge(t,e,i){switch(i){case 90:return[e,-t];case 180:return[-t,-e]... method screenToPageTranslation (line 21) | screenToPageTranslation(t,e){return AnnotationEditor.#ge(t,e,this.pare... method pageTranslationToScreen (line 21) | pageTranslationToScreen(t,e){return AnnotationEditor.#ge(t,e,360-this.... method #me (line 21) | #me(t){switch(t){case 90:{const[t,e]=this.pageDimensions;return[0,-t/e... method parentScale (line 21) | get parentScale(){return this._uiManager.viewParameters.realScale} method parentRotation (line 21) | get parentRotation(){return(this._uiManager.viewParameters.rotation+th... method parentDimensions (line 21) | get parentDimensions(){const{parentScale:t,pageDimensions:[e,i]}=this,... method setDims (line 21) | setDims(t,e){const[i,s]=this.parentDimensions;this.div.style.width=`${... method fixDims (line 21) | fixDims(){const{style:t}=this.div,{height:e,width:i}=t,s=i.endsWith("%... method getInitialTranslation (line 21) | getInitialTranslation(){return[0,0]} method #fe (line 21) | #fe(){if(this.#Kt)return;this.#Kt=document.createElement("div");this.#... method #be (line 21) | #be(t,e){e.preventDefault();const{isMac:i}=util_FeatureTest.platform;i... method #Ae (line 21) | #Ae(t,e,i,s){const n=this.x,a=this.y,r=this.width,o=this.height;n===t&... method #ve (line 21) | #ve(t,e){const[i,s]=this.parentDimensions,n=this.x,a=this.y,r=this.wid... method altTextFinish (line 21) | altTextFinish(){this.#Bt?.finish()} method addEditToolbar (line 21) | async addEditToolbar(){if(this.#Zt||this.#ne)return this.#Zt;this.#Zt=... method removeEditToolbar (line 21) | removeEditToolbar(){if(this.#Zt){this.#Zt.remove();this.#Zt=null;this.... method getClientDimensions (line 21) | getClientDimensions(){return this.div.getBoundingClientRect()} method addAltTextButton (line 21) | async addAltTextButton(){if(!this.#Bt){AltText.initialize(AnnotationEd... method altTextData (line 21) | get altTextData(){return this.#Bt?.data} method altTextData (line 21) | set altTextData(t){this.#Bt&&(this.#Bt.data=t)} method hasAltText (line 21) | hasAltText(){return!this.#Bt?.isEmpty()} method render (line 21) | render(){this.div=document.createElement("div");this.div.setAttribute(... method pointerdown (line 21) | pointerdown(t){const{isMac:e}=util_FeatureTest.platform;if(0!==t.butto... method #we (line 21) | #we(t){const{isMac:e}=util_FeatureTest.platform;t.ctrlKey&&!e||t.shift... method #ye (line 21) | #ye(t){const e=this._uiManager.isSelected(this);this._uiManager.setUpD... method moveInDOM (line 21) | moveInDOM(){this.#re&&clearTimeout(this.#re);this.#re=setTimeout((()=>... method _setParentAndPosition (line 21) | _setParentAndPosition(t,e,i){t.changeParent(this);this.x=e;this.y=i;th... method getRect (line 21) | getRect(t,e,i=this.rotation){const s=this.parentScale,[n,a]=this.pageD... method getRectInCurrentCoords (line 21) | getRectInCurrentCoords(t,e){const[i,s,n,a]=t,r=n-i,o=a-s;switch(this.r... method onceAdded (line 21) | onceAdded(){} method isEmpty (line 21) | isEmpty(){return!1} method enableEditMode (line 21) | enableEditMode(){this.#ne=!0} method disableEditMode (line 21) | disableEditMode(){this.#ne=!1} method isInEditMode (line 21) | isInEditMode(){return this.#ne} method shouldGetKeyboardEvents (line 21) | shouldGetKeyboardEvents(){return this.#ae} method needsToBeRebuilt (line 21) | needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM} method rebuild (line 21) | rebuild(){const t=this._uiManager._signal;this.div?.addEventListener("... method rotate (line 21) | rotate(t){} method serialize (line 21) | serialize(t=!1,e=null){unreachable("An editor must be serializable")} method deserialize (line 21) | static deserialize(t,e,i){const s=new this.prototype.constructor({pare... method hasBeenModified (line 21) | get hasBeenModified(){return!!this.annotationElementId&&(this.deleted|... method remove (line 21) | remove(){this.div.removeEventListener("focusin",this.#Qt);this.div.rem... method isResizable (line 21) | get isResizable(){return!1} method makeResizable (line 21) | makeResizable(){if(this.isResizable){this.#fe();this.#Kt.classList.rem... method toolbarPosition (line 21) | get toolbarPosition(){return null} method keydown (line 21) | keydown(t){if(!this.isResizable||t.target!==this.div||"Enter"!==t.key)... method #xe (line 21) | #xe(t){AnnotationEditor._resizerKeyboardManager.exec(this,t)} method #_e (line 21) | #_e(t){this.#ae&&t.relatedTarget?.parentNode!==this.#Kt&&this.#ue()} method #Ee (line 21) | #Ee(t){this.#te=this.#ae?t:""} method #Ce (line 21) | #Ce(t){if(this.#Gt)for(const e of this.#Gt)e.tabIndex=t} method _resizeWithKeyboard (line 21) | _resizeWithKeyboard(t,e){this.#ae&&this.#ve(this.#te,{movementX:t,move... method #ue (line 21) | #ue(){this.#ae=!1;this.#Ce(-1);if(this.#Yt){const{savedX:t,savedY:e,sa... method _stopResizingWithKeyboard (line 21) | _stopResizingWithKeyboard(){this.#ue();this.div.focus()} method select (line 21) | select(){this.makeResizable();this.div?.classList.add("selectedEditor"... method unselect (line 21) | unselect(){this.#Kt?.classList.add("hidden");this.div?.classList.remov... method updateParams (line 21) | updateParams(t,e){} method disableEditing (line 21) | disableEditing(){} method enableEditing (line 21) | enableEditing(){} method enterInEditMode (line 21) | enterInEditMode(){} method getImageForAltText (line 21) | getImageForAltText(){return null} method contentDiv (line 21) | get contentDiv(){return this.div} method isEditing (line 21) | get isEditing(){return this.#se} method isEditing (line 21) | set isEditing(t){this.#se=t;if(this.parent)if(t){this.parent.setSelect... method setAspectRatio (line 21) | setAspectRatio(t,e){this.#Xt=!0;const i=t/e,{style:s}=this.div;s.aspec... method MIN_SIZE (line 21) | static get MIN_SIZE(){return 16} method canCreateNewEmptyEditor (line 21) | static canCreateNewEmptyEditor(){return!0} method telemetryInitialData (line 21) | get telemetryInitialData(){return{action:"added"}} method telemetryFinalData (line 21) | get telemetryFinalData(){return null} method _reportTelemetry (line 21) | _reportTelemetry(t,e=!1){if(e){this.#he||=new Map;const{action:e}=t;le... method show (line 21) | show(t=this._isVisible){this.div.classList.toggle("hidden",!t);this._i... method enable (line 21) | enable(){this.div&&(this.div.tabIndex=0);this.#qt=!1} method disable (line 21) | disable(){this.div&&(this.div.tabIndex=-1);this.#qt=!0} method renderAnnotationElement (line 21) | renderAnnotationElement(t){let e=t.container.querySelector(".annotatio... method resetAnnotationElement (line 21) | resetAnnotationElement(t){const{firstChild:e}=t.container;"DIV"===e.no... class FakeEditor (line 21) | class FakeEditor extends AnnotationEditor{constructor(t){super(t);this.a... method constructor (line 21) | constructor(t){super(t);this.annotationElementId=t.annotationElementId... method serialize (line 21) | serialize(){return{id:this.annotationElementId,deleted:!0,pageIndex:th... class MurmurHash3_64 (line 21) | class MurmurHash3_64{constructor(t){this.h1=t?4294967295&t:pt;this.h2=t?... method constructor (line 21) | constructor(t){this.h1=t?4294967295&t:pt;this.h2=t?4294967295&t:pt} method update (line 21) | update(t){let e,i;if("string"==typeof t){e=new Uint8Array(2*t.length);... method hexdigest (line 21) | hexdigest(){let t=this.h1,e=this.h2;t^=e>>>1;t=3981806797*t>|36045*t... class AnnotationStorage (line 21) | class AnnotationStorage{#Se=!1;#Te=new Map;constructor(){this.onSetModif... method constructor (line 21) | constructor(){this.onSetModified=null;this.onResetModified=null;this.o... method getValue (line 21) | getValue(t,e){const i=this.#Te.get(t);return void 0===i?e:Object.assig... method getRawValue (line 21) | getRawValue(t){return this.#Te.get(t)} method remove (line 21) | remove(t){this.#Te.delete(t);0===this.#Te.size&&this.resetModified();i... method setValue (line 21) | setValue(t,e){const i=this.#Te.get(t);let s=!1;if(void 0!==i){for(cons... method has (line 21) | has(t){return this.#Te.has(t)} method getAll (line 21) | getAll(){return this.#Te.size>0?objectFromMap(this.#Te):null} method setAll (line 21) | setAll(t){for(const[e,i]of Object.entries(t))this.setValue(e,i)} method size (line 21) | get size(){return this.#Te.size} method #Me (line 21) | #Me(){if(!this.#Se){this.#Se=!0;"function"==typeof this.onSetModified&... method resetModified (line 21) | resetModified(){if(this.#Se){this.#Se=!1;"function"==typeof this.onRes... method print (line 21) | get print(){return new PrintAnnotationStorage(this)} method serializable (line 21) | get serializable(){if(0===this.#Te.size)return ft;const t=new Map,e=ne... method editorStats (line 21) | get editorStats(){let t=null;const e=new Map;for(const i of this.#Te.v... class PrintAnnotationStorage (line 21) | class PrintAnnotationStorage extends AnnotationStorage{#ke;constructor(t... method constructor (line 21) | constructor(t){super();const{map:e,hash:i,transfer:s}=t.serializable,n... method print (line 21) | get print(){unreachable("Should not call PrintAnnotationStorage.print")} method serializable (line 21) | get serializable(){return this.#ke} class FontLoader (line 21) | class FontLoader{#Pe=new Set;constructor({ownerDocument:t=globalThis.doc... method constructor (line 21) | constructor({ownerDocument:t=globalThis.document,styleElement:e=null})... method addNativeFontFace (line 21) | addNativeFontFace(t){this.nativeFontFaces.add(t);this._document.fonts.... method removeNativeFontFace (line 21) | removeNativeFontFace(t){this.nativeFontFaces.delete(t);this._document.... method insertRule (line 21) | insertRule(t){if(!this.styleElement){this.styleElement=this._document.... method clear (line 21) | clear(){for(const t of this.nativeFontFaces)this._document.fonts.delet... method loadSystemFont (line 21) | async loadSystemFont({systemFontInfo:t,_inspectFont:e}){if(t&&!this.#P... method bind (line 21) | async bind(t){if(t.attached||t.missingFile&&!t.systemFontInfo)return;t... method isFontLoadingAPISupported (line 21) | get isFontLoadingAPISupported(){return shadow(this,"isFontLoadingAPISu... method isSyncFontLoadingSupported (line 21) | get isSyncFontLoadingSupported(){let t=!1;(e||"undefined"!=typeof navi... method _queueLoadingCallback (line 21) | _queueLoadingCallback(t){const{loadingRequests:e}=this,i={done:!1,comp... method _loadTestFont (line 21) | get _loadTestFont(){return shadow(this,"_loadTestFont",atob("T1RUTwALA... method _prepareFontLoadEvent (line 21) | _prepareFontLoadEvent(t,e){function int32(t,e){return t.charCodeAt(e)<... class FontFaceObject (line 21) | class FontFaceObject{constructor(t,{disableFontFace:e=!1,inspectFont:i=n... method constructor (line 21) | constructor(t,{disableFontFace:e=!1,inspectFont:i=null}){this.compiled... method createNativeFontFace (line 21) | createNativeFontFace(){if(!this.data||this.disableFontFace)return null... method createFontFaceRule (line 21) | createFontFaceRule(){if(!this.data||this.disableFontFace)return null;c... method getPathGenerator (line 21) | getPathGenerator(t,e){if(void 0!==this.compiledGlyphs[e])return this.c... class NodePackages (line 21) | class NodePackages{static get promise(){return bt.promise}static get(t){... method promise (line 21) | static get promise(){return bt.promise} method get (line 21) | static get(t){return vt?.get(t)} function applyBoundingBox (line 21) | function applyBoundingBox(t,e){if(!e)return;const i=e[2]-e[0],s=e[3]-e[1... class BaseShadingPattern (line 21) | class BaseShadingPattern{constructor(){this.constructor===BaseShadingPat... method constructor (line 21) | constructor(){this.constructor===BaseShadingPattern&&unreachable("Cann... method getPattern (line 21) | getPattern(){unreachable("Abstract method `getPattern` called.")} class RadialAxialShadingPattern (line 21) | class RadialAxialShadingPattern extends BaseShadingPattern{constructor(t... method constructor (line 21) | constructor(t){super();this._type=t[1];this._bbox=t[2];this._colorStop... method _createGradient (line 21) | _createGradient(t){let e;"axial"===this._type?e=t.createLinearGradient... method getPattern (line 21) | getPattern(t,e,i,s){let n;if(s===yt||s===At){const a=e.current.getClip... function drawTriangle (line 21) | function drawTriangle(t,e,i,s,n,a,r,o){const l=e.coords,h=e.colors,d=t.d... function drawFigure (line 21) | function drawFigure(t,e,i){const s=e.coords,n=e.colors;let a,r;switch(e.... class MeshShadingPattern (line 21) | class MeshShadingPattern extends BaseShadingPattern{constructor(t){super... method constructor (line 21) | constructor(t){super();this._coords=t[2];this._colors=t[3];this._figur... method _createMeshCanvas (line 21) | _createMeshCanvas(t,e,i){const s=Math.floor(this._bounds[0]),n=Math.fl... method getPattern (line 21) | getPattern(t,e,i,s){applyBoundingBox(t,this._bbox);let n;if(s===wt)n=U... class DummyShadingPattern (line 21) | class DummyShadingPattern extends BaseShadingPattern{getPattern(){return... method getPattern (line 21) | getPattern(){return"hotpink"} class TilingPattern (line 21) | class TilingPattern{static MAX_PATTERN_SIZE=3e3;constructor(t,e,i,s,n){t... method constructor (line 21) | constructor(t,e,i,s,n){this.operatorList=t[2];this.matrix=t[3];this.bb... method createPatternCanvas (line 21) | createPatternCanvas(t){const e=this.operatorList,i=this.bbox,s=this.xs... method getSizeAndScale (line 21) | getSizeAndScale(t,e,i){t=Math.abs(t);const s=Math.max(TilingPattern.MA... method clipBbox (line 21) | clipBbox(t,e,i,s,n){const a=s-e,r=n-i;t.ctx.rect(e,i,a,r);t.current.up... method setFillAndStrokeStyleToContext (line 21) | setFillAndStrokeStyleToContext(t,e,i){const s=t.ctx,n=t.current;switch... method getPattern (line 21) | getPattern(t,e,i,s){let n=i;if(s!==wt){n=Util.transform(n,e.baseTransf... function convertBlackAndWhiteToRGBA (line 21) | function convertBlackAndWhiteToRGBA({src:t,srcPos:e=0,dest:i,width:s,hei... class CachedCanvases (line 21) | class CachedCanvases{constructor(t){this.canvasFactory=t;this.cache=Obje... method constructor (line 21) | constructor(t){this.canvasFactory=t;this.cache=Object.create(null)} method getCanvas (line 21) | getCanvas(t,e,i){let s;if(void 0!==this.cache[t]){s=this.cache[t];this... method delete (line 21) | delete(t){delete this.cache[t]} method clear (line 21) | clear(){for(const t in this.cache){const e=this.cache[t];this.canvasFa... function drawImageAtIntegerCoords (line 21) | function drawImageAtIntegerCoords(t,e,i,s,n,a,r,o,l,h){const[d,c,u,p,g,m... class CanvasExtraState (line 21) | class CanvasExtraState{constructor(t,e){this.alphaIsShape=!1;this.fontSi... method constructor (line 21) | constructor(t,e){this.alphaIsShape=!1;this.fontSize=0;this.fontSizeSca... method clone (line 21) | clone(){const t=Object.create(this);t.clipBox=this.clipBox.slice();ret... method setCurrentPoint (line 21) | setCurrentPoint(t,e){this.x=t;this.y=e} method updatePathMinMax (line 21) | updatePathMinMax(t,e,i){[e,i]=Util.applyTransform([e,i],t);this.minX=M... method updateRectMinMax (line 21) | updateRectMinMax(t,e){const i=Util.applyTransform(e,t),s=Util.applyTra... method updateScalingPathMinMax (line 21) | updateScalingPathMinMax(t,e){Util.scaleMinMax(t,e);this.minX=Math.min(... method updateCurvePathMinMax (line 21) | updateCurvePathMinMax(t,e,i,s,n,a,r,o,l,h){const d=Util.bezierBounding... method getPathBoundingBox (line 21) | getPathBoundingBox(t=At,e=null){const i=[this.minX,this.minY,this.maxX... method updateClipFromPath (line 21) | updateClipFromPath(){const t=Util.intersect(this.clipBox,this.getPathB... method isEmptyClip (line 21) | isEmptyClip(){return this.minX===1/0} method startNewPathAndClipBox (line 21) | startNewPathAndClipBox(t){this.clipBox=t;this.minX=1/0;this.minY=1/0;t... method getClippedPathBoundingBox (line 21) | getClippedPathBoundingBox(t=At,e=null){return Util.intersect(this.clip... function putBinaryImageData (line 21) | function putBinaryImageData(t,e){if("undefined"!=typeof ImageData&&e ins... function putBinaryImageMask (line 21) | function putBinaryImageMask(t,e){if(e.bitmap){t.drawImage(e.bitmap,0,0);... function copyCtxState (line 21) | function copyCtxState(t,e){const i=["strokeStyle","fillStyle","fillRule"... function resetCtxToDefault (line 21) | function resetCtxToDefault(t){t.strokeStyle=t.fillStyle="#000000";t.fill... function getImageSmoothingEnabled (line 21) | function getImageSmoothingEnabled(t,e){if(e)return!0;const i=Util.singul... class CanvasGraphics (line 21) | class CanvasGraphics{constructor(t,e,i,s,n,{optionalContentConfig:a,mark... method constructor (line 21) | constructor(t,e,i,s,n,{optionalContentConfig:a,markedContentStack:r=nu... method getObject (line 21) | getObject(t,e=null){return"string"==typeof t?t.startsWith("g_")?this.c... method beginDrawing (line 21) | beginDrawing({transform:t,viewport:e,transparency:i=!1,background:s=nu... method executeOperatorList (line 21) | executeOperatorList(t,e,i,s){const n=t.argsArray,a=t.fnArray;let r=e||... method #De (line 21) | #De(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();th... method endDrawing (line 21) | endDrawing(){this.#De();this.cachedCanvases.clear();this.cachedPattern... method #Fe (line 21) | #Fe(){if(this.pageColors){const t=this.filterFactory.addHCMFilter(this... method _scaleImage (line 21) | _scaleImage(t,e){const i=t.width,s=t.height;let n,a,r=Math.max(Math.hy... method _createMaskCanvas (line 21) | _createMaskCanvas(t){const e=this.ctx,{width:i,height:s}=t,n=this.curr... method setLineWidth (line 21) | setLineWidth(t){t!==this.current.lineWidth&&(this._cachedScaleForStrok... method setLineCap (line 21) | setLineCap(t){this.ctx.lineCap=Ct[t]} method setLineJoin (line 21) | setLineJoin(t){this.ctx.lineJoin=St[t]} method setMiterLimit (line 21) | setMiterLimit(t){this.ctx.miterLimit=t} method setDash (line 21) | setDash(t,e){const i=this.ctx;if(void 0!==i.setLineDash){i.setLineDash... method setRenderingIntent (line 21) | setRenderingIntent(t){} method setFlatness (line 21) | setFlatness(t){} method setGState (line 21) | setGState(t){for(const[e,i]of t)switch(e){case"LW":this.setLineWidth(i... method inSMaskMode (line 21) | get inSMaskMode(){return!!this.suspendedCtx} method checkSMaskState (line 21) | checkSMaskState(){const t=this.inSMaskMode;this.current.activeSMask&&!... method beginSMaskMode (line 21) | beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode c... method endSMaskMode (line 21) | endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode call... method compose (line 21) | compose(t){if(!this.current.activeSMask)return;if(t){t[0]=Math.floor(t... method composeSMask (line 21) | composeSMask(t,e,i,s){const n=s[0],a=s[1],r=s[2]-n,o=s[3]-a;if(0!==r&&... method genericComposeSMask (line 21) | genericComposeSMask(t,e,i,s,n,a,r,o,l,h,d){let c=t.canvas,u=o-h,p=l-d;... method save (line 21) | save(){if(this.inSMaskMode){copyCtxState(this.ctx,this.suspendedCtx);t... method restore (line 21) | restore(){0===this.stateStack.length&&this.inSMaskMode&&this.endSMaskM... method transform (line 21) | transform(t,e,i,s,n,a){this.ctx.transform(t,e,i,s,n,a);this._cachedSca... method constructPath (line 21) | constructPath(t,e,i){const s=this.ctx,n=this.current;let a,r,o=n.x,l=n... method closePath (line 21) | closePath(){this.ctx.closePath()} method stroke (line 21) | stroke(t=!0){const e=this.ctx,i=this.current.strokeColor;e.globalAlpha... method closeStroke (line 21) | closeStroke(){this.closePath();this.stroke()} method fill (line 21) | fill(t=!0){const e=this.ctx,i=this.current.fillColor;let s=!1;if(this.... method eoFill (line 21) | eoFill(){this.pendingEOFill=!0;this.fill()} method fillStroke (line 21) | fillStroke(){this.fill(!1);this.stroke(!1);this.consumePath()} method eoFillStroke (line 21) | eoFillStroke(){this.pendingEOFill=!0;this.fillStroke()} method closeFillStroke (line 21) | closeFillStroke(){this.closePath();this.fillStroke()} method closeEOFillStroke (line 21) | closeEOFillStroke(){this.pendingEOFill=!0;this.closePath();this.fillSt... method endPath (line 21) | endPath(){this.consumePath()} method clip (line 21) | clip(){this.pendingClip=Tt} method eoClip (line 21) | eoClip(){this.pendingClip=Mt} method beginText (line 21) | beginText(){this.current.textMatrix=i;this.current.textMatrixScale=1;t... method endText (line 21) | endText(){const t=this.pendingTextPaths,e=this.ctx;if(void 0!==t){e.sa... method setCharSpacing (line 21) | setCharSpacing(t){this.current.charSpacing=t} method setWordSpacing (line 21) | setWordSpacing(t){this.current.wordSpacing=t} method setHScale (line 21) | setHScale(t){this.current.textHScale=t/100} method setLeading (line 21) | setLeading(t){this.current.leading=-t} method setFont (line 21) | setFont(t,e){const i=this.commonObjs.get(t),n=this.current;if(!i)throw... method setTextRenderingMode (line 21) | setTextRenderingMode(t){this.current.textRenderingMode=t} method setTextRise (line 21) | setTextRise(t){this.current.textRise=t} method moveText (line 21) | moveText(t,e){this.current.x=this.current.lineX+=t;this.current.y=this... method setLeadingMoveText (line 21) | setLeadingMoveText(t,e){this.setLeading(-e);this.moveText(t,e)} method setTextMatrix (line 21) | setTextMatrix(t,e,i,s,n,a){this.current.textMatrix=[t,e,i,s,n,a];this.... method nextLine (line 21) | nextLine(){this.moveText(0,this.current.leading)} method paintChar (line 21) | paintChar(t,e,i,s){const n=this.ctx,a=this.current,r=a.font,o=a.textRe... method isFontSubpixelAAEnabled (line 21) | get isFontSubpixelAAEnabled(){const{context:t}=this.cachedCanvases.get... method showText (line 21) | showText(t){const e=this.current,i=e.font;if(i.isType3Font)return this... method showType3Text (line 21) | showType3Text(t){const e=this.ctx,i=this.current,n=i.font,a=i.fontSize... method setCharWidth (line 21) | setCharWidth(t,e){} method setCharWidthAndBounds (line 21) | setCharWidthAndBounds(t,e,i,s,n,a){this.ctx.rect(i,s,n-i,a-s);this.ctx... method getColorN_Pattern (line 21) | getColorN_Pattern(t){let e;if("TilingPattern"===t[0]){const i=t[1],s=t... method setStrokeColorN (line 21) | setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(argu... method setFillColorN (line 21) | setFillColorN(){this.current.fillColor=this.getColorN_Pattern(argument... method setStrokeRGBColor (line 21) | setStrokeRGBColor(t,e,i){const s=Util.makeHexColor(t,e,i);this.ctx.str... method setFillRGBColor (line 21) | setFillRGBColor(t,e,i){const s=Util.makeHexColor(t,e,i);this.ctx.fillS... method _getPattern (line 21) | _getPattern(t,e=null){let i;if(this.cachedPatterns.has(t))i=this.cache... method shadingFill (line 21) | shadingFill(t){if(!this.contentVisible)return;const e=this.ctx;this.sa... method beginInlineImage (line 21) | beginInlineImage(){unreachable("Should not call beginInlineImage")} method beginImageData (line 21) | beginImageData(){unreachable("Should not call beginImageData")} method paintFormXObjectBegin (line 21) | paintFormXObjectBegin(t,e){if(this.contentVisible){this.save();this.ba... method paintFormXObjectEnd (line 21) | paintFormXObjectEnd(){if(this.contentVisible){this.restore();this.base... method beginGroup (line 21) | beginGroup(t){if(!this.contentVisible)return;this.save();if(this.inSMa... method endGroup (line 21) | endGroup(t){if(!this.contentVisible)return;this.groupLevel--;const e=t... method beginAnnotation (line 21) | beginAnnotation(t,e,i,s,n){this.#De();resetCtxToDefault(this.ctx);this... method endAnnotation (line 21) | endAnnotation(){if(this.annotationCanvas){this.ctx.restore();this.#Fe(... method paintImageMaskXObject (line 21) | paintImageMaskXObject(t){if(!this.contentVisible)return;const e=t.coun... method paintImageMaskXObjectRepeat (line 21) | paintImageMaskXObjectRepeat(t,e,i=0,s=0,n,a){if(!this.contentVisible)r... method paintImageMaskXObjectGroup (line 21) | paintImageMaskXObjectGroup(t){if(!this.contentVisible)return;const e=t... method paintImageXObject (line 21) | paintImageXObject(t){if(!this.contentVisible)return;const e=this.getOb... method paintImageXObjectRepeat (line 21) | paintImageXObjectRepeat(t,e,i,s){if(!this.contentVisible)return;const ... method applyTransferMapsToCanvas (line 21) | applyTransferMapsToCanvas(t){if("none"!==this.current.transferMaps){t.... method applyTransferMapsToBitmap (line 21) | applyTransferMapsToBitmap(t){if("none"===this.current.transferMaps)ret... method paintInlineImageXObject (line 21) | paintInlineImageXObject(t){if(!this.contentVisible)return;const i=t.wi... method paintInlineImageXObjectGroup (line 21) | paintInlineImageXObjectGroup(t,e){if(!this.contentVisible)return;const... method paintSolidColorImageMask (line 21) | paintSolidColorImageMask(){if(this.contentVisible){this.ctx.fillRect(0... method markPoint (line 21) | markPoint(t){} method markPointProps (line 21) | markPointProps(t,e){} method beginMarkedContent (line 21) | beginMarkedContent(t){this.markedContentStack.push({visible:!0})} method beginMarkedContentProps (line 21) | beginMarkedContentProps(t,e){"OC"===t?this.markedContentStack.push({vi... method endMarkedContent (line 21) | endMarkedContent(){this.markedContentStack.pop();this.contentVisible=t... method beginCompat (line 21) | beginCompat(){} method endCompat (line 21) | endCompat(){} method consumePath (line 21) | consumePath(t){const e=this.current.isEmptyClip();this.pendingClip&&th... method getSinglePixelWidth (line 21) | getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const t=get... method getScaleForStroking (line 21) | getScaleForStroking(){if(-1===this._cachedScaleForStroking[0]){const{l... method rescaleAndStroke (line 21) | rescaleAndStroke(t){const{ctx:e}=this,{lineWidth:i}=this.current,[s,n]... method isContentVisible (line 21) | isContentVisible(){for(let t=this.markedContentStack.length-1;t>=0;t--... class GlobalWorkerOptions (line 21) | class GlobalWorkerOptions{static#Re=null;static#Ie="";static get workerP... method workerPort (line 21) | static get workerPort(){return this.#Re} method workerPort (line 21) | static set workerPort(t){if(!("undefined"!=typeof Worker&&t instanceof... method workerSrc (line 21) | static get workerSrc(){return this.#Ie} method workerSrc (line 21) | static set workerSrc(t){if("string"!=typeof t)throw new Error("Invalid... function wrapReason (line 21) | function wrapReason(t){t instanceof Error||"object"==typeof t&&null!==t|... class MessageHandler (line 21) | class MessageHandler{constructor(t,e,i){this.sourceName=t;this.targetNam... method constructor (line 21) | constructor(t,e,i){this.sourceName=t;this.targetName=e;this.comObj=i;t... method on (line 21) | on(t,e){const i=this.actionHandler;if(i[t])throw new Error(`There is a... method send (line 21) | send(t,e,i){this.comObj.postMessage({sourceName:this.sourceName,target... method sendWithPromise (line 21) | sendWithPromise(t,e,i){const s=this.callbackId++,n=Promise.withResolve... method sendWithStream (line 21) | sendWithStream(t,e,i,s){const n=this.streamId++,a=this.sourceName,r=th... method #Oe (line 21) | #Oe(t){const e=t.streamId,i=this.sourceName,s=t.sourceName,n=this.comO... method #Le (line 21) | #Le(t){const e=t.streamId,i=this.sourceName,s=t.sourceName,n=this.comO... method #Ne (line 21) | async#Ne(t,e){await Promise.allSettled([t.startCall?.promise,t.pullCal... method destroy (line 21) | destroy(){this.comObj.removeEventListener("message",this._onComObjOnMe... class Metadata (line 21) | class Metadata{#Be;#He;constructor({parsedData:t,rawData:e}){this.#Be=t;... method constructor (line 21) | constructor({parsedData:t,rawData:e}){this.#Be=t;this.#He=e} method getRaw (line 21) | getRaw(){return this.#He} method get (line 21) | get(t){return this.#Be.get(t)??null} method getAll (line 21) | getAll(){return objectFromMap(this.#Be)} method has (line 21) | has(t){return this.#Be.has(t)} class OptionalContentGroup (line 21) | class OptionalContentGroup{#ze=!1;#Ue=!1;#je=!1;#$e=!0;constructor(t,{na... method constructor (line 21) | constructor(t,{name:e,intent:i,usage:s}){this.#ze=!!(t&r);this.#Ue=!!(... method visible (line 21) | get visible(){if(this.#je)return this.#$e;if(!this.#$e)return!1;const{... method _setVisible (line 21) | _setVisible(t,e,i=!1){t!==Ht&&unreachable("Internal method `_setVisibl... class OptionalContentConfig (line 21) | class OptionalContentConfig{#Ve=null;#We=new Map;#Ge=null;#qe=null;const... method constructor (line 21) | constructor(t,e=r){this.renderingIntent=e;this.name=null;this.creator=... method #Xe (line 21) | #Xe(t){const e=t.length;if(e<2)return!0;const i=t[0];for(let s=1;s0?objectFromMap(this.#We):null} method getGroup (line 21) | getGroup(t){return this.#We.get(t)||null} method getHash (line 21) | getHash(){if(null!==this.#Ve)return this.#Ve;const t=new MurmurHash3_6... class PDFDataTransportStream (line 21) | class PDFDataTransportStream{constructor(t,{disableRange:e=!1,disableStr... method constructor (line 21) | constructor(t,{disableRange:e=!1,disableStream:i=!1}){assert(t,'PDFDat... method _onReceiveData (line 21) | _onReceiveData({begin:t,chunk:e}){const i=e instanceof Uint8Array&&e.b... method _progressiveDataLength (line 21) | get _progressiveDataLength(){return this._fullRequestReader?._loaded??0} method _onProgress (line 21) | _onProgress(t){void 0===t.total?this._rangeReaders[0]?.onProgress?.({l... method _onProgressiveDone (line 21) | _onProgressiveDone(){this._fullRequestReader?.progressiveDone();this._... method _removeRangeReader (line 21) | _removeRangeReader(t){const e=this._rangeReaders.indexOf(t);e>=0&&this... method getFullReader (line 21) | getFullReader(){assert(!this._fullRequestReader,"PDFDataTransportStrea... method getRangeReader (line 21) | getRangeReader(t,e){if(e<=this._progressiveDataLength)return null;cons... method cancelAllRequests (line 21) | cancelAllRequests(t){this._fullRequestReader?.cancel(t);for(const e of... class PDFDataTransportStreamReader (line 21) | class PDFDataTransportStreamReader{constructor(t,e,i=!1,s=null){this._st... method constructor (line 21) | constructor(t,e,i=!1,s=null){this._stream=t;this._done=i||!1;this._fil... method _enqueue (line 21) | _enqueue(t){if(!this._done){if(this._requests.length>0){this._requests... method headersReady (line 21) | get headersReady(){return this._headersReady} method filename (line 21) | get filename(){return this._filename} method isRangeSupported (line 21) | get isRangeSupported(){return this._stream._isRangeSupported} method isStreamingSupported (line 21) | get isStreamingSupported(){return this._stream._isStreamingSupported} method contentLength (line 21) | get contentLength(){return this._stream._contentLength} method read (line 21) | async read(){if(this._queuedChunks.length>0){return{value:this._queued... method cancel (line 21) | cancel(t){this._done=!0;for(const t of this._requests)t.resolve({value... method progressiveDone (line 21) | progressiveDone(){this._done||(this._done=!0)} class PDFDataTransportStreamRangeReader (line 21) | class PDFDataTransportStreamRangeReader{constructor(t,e,i){this._stream=... method constructor (line 21) | constructor(t,e,i){this._stream=t;this._begin=e;this._end=i;this._queu... method _enqueue (line 21) | _enqueue(t){if(!this._done){if(0===this._requests.length)this._queuedC... method isStreamingSupported (line 21) | get isStreamingSupported(){return!1} method read (line 21) | async read(){if(this._queuedChunk){const t=this._queuedChunk;this._que... method cancel (line 21) | cancel(t){this._done=!0;for(const t of this._requests)t.resolve({value... function validateRangeRequestCapabilities (line 21) | function validateRangeRequestCapabilities({getResponseHeader:t,isHttp:e,... function extractFilenameFromHeader (line 21) | function extractFilenameFromHeader(t){const e=t("Content-Disposition");i... function createResponseStatusError (line 21) | function createResponseStatusError(t,e){return 404===t||0===t&&e.startsW... function validateResponseStatus (line 21) | function validateResponseStatus(t){return 200===t||206===t} function createFetchOptions (line 21) | function createFetchOptions(t,e,i){return{method:"GET",headers:t,signal:... function createHeaders (line 21) | function createHeaders(t){const e=new Headers;for(const i in t){const s=... function getArrayBuffer (line 21) | function getArrayBuffer(t){if(t instanceof Uint8Array)return t.buffer;if... class PDFFetchStream (line 21) | class PDFFetchStream{constructor(t){this.source=t;this.isHttp=/^https?:/... method constructor (line 21) | constructor(t){this.source=t;this.isHttp=/^https?:/i.test(t.url);this.... method _progressiveDataLength (line 21) | get _progressiveDataLength(){return this._fullRequestReader?._loaded??0} method getFullReader (line 21) | getFullReader(){assert(!this._fullRequestReader,"PDFFetchStream.getFul... method getRangeReader (line 21) | getRangeReader(t,e){if(e<=this._progressiveDataLength)return null;cons... method cancelAllRequests (line 21) | cancelAllRequests(t){this._fullRequestReader?.cancel(t);for(const e of... class PDFFetchStreamReader (line 21) | class PDFFetchStreamReader{constructor(t){this._stream=t;this._reader=nu... method constructor (line 21) | constructor(t){this._stream=t;this._reader=null;this._loaded=0;this._f... method headersReady (line 21) | get headersReady(){return this._headersCapability.promise} method filename (line 21) | get filename(){return this._filename} method contentLength (line 21) | get contentLength(){return this._contentLength} method isRangeSupported (line 21) | get isRangeSupported(){return this._isRangeSupported} method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method read (line 21) | async read(){await this._headersCapability.promise;const{value:t,done:... method cancel (line 21) | cancel(t){this._reader?.cancel(t);this._abortController.abort()} class PDFFetchStreamRangeReader (line 21) | class PDFFetchStreamRangeReader{constructor(t,e,i){this._stream=t;this._... method constructor (line 21) | constructor(t,e,i){this._stream=t;this._reader=null;this._loaded=0;con... method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method read (line 21) | async read(){await this._readCapability.promise;const{value:t,done:e}=... method cancel (line 21) | cancel(t){this._reader?.cancel(t);this._abortController.abort()} class NetworkManager (line 21) | class NetworkManager{constructor(t,e={}){this.url=t;this.isHttp=/^https?... method constructor (line 21) | constructor(t,e={}){this.url=t;this.isHttp=/^https?:/i.test(t);this.ht... method requestRange (line 21) | requestRange(t,e,i){const s={begin:t,end:e};for(const t in i)s[t]=i[t]... method requestFull (line 21) | requestFull(t){return this.request(t)} method request (line 21) | request(t){const e=new XMLHttpRequest,i=this.currXhrId++,s=this.pendin... method onProgress (line 21) | onProgress(t,e){const i=this.pendingRequests[t];i&&i.onProgress?.(e)} method onStateChange (line 21) | onStateChange(t,e){const i=this.pendingRequests[t];if(!i)return;const ... method getRequestXhr (line 21) | getRequestXhr(t){return this.pendingRequests[t].xhr} method isPendingRequest (line 21) | isPendingRequest(t){return t in this.pendingRequests} method abortRequest (line 21) | abortRequest(t){const e=this.pendingRequests[t].xhr;delete this.pendin... class PDFNetworkStream (line 21) | class PDFNetworkStream{constructor(t){this._source=t;this._manager=new N... method constructor (line 21) | constructor(t){this._source=t;this._manager=new NetworkManager(t.url,{... method _onRangeRequestReaderClosed (line 21) | _onRangeRequestReaderClosed(t){const e=this._rangeRequestReaders.index... method getFullReader (line 21) | getFullReader(){assert(!this._fullRequestReader,"PDFNetworkStream.getF... method getRangeReader (line 21) | getRangeReader(t,e){const i=new PDFNetworkStreamRangeRequestReader(thi... method cancelAllRequests (line 21) | cancelAllRequests(t){this._fullRequestReader?.cancel(t);for(const e of... class PDFNetworkStreamFullRequestReader (line 21) | class PDFNetworkStreamFullRequestReader{constructor(t,e){this._manager=t... method constructor (line 21) | constructor(t,e){this._manager=t;const i={onHeadersReceived:this._onHe... method _onHeadersReceived (line 21) | _onHeadersReceived(){const t=this._fullRequestId,e=this._manager.getRe... method _onDone (line 21) | _onDone(t){if(t)if(this._requests.length>0){this._requests.shift().res... method _onError (line 21) | _onError(t){this._storedError=createResponseStatusError(t,this._url);t... method _onProgress (line 21) | _onProgress(t){this.onProgress?.({loaded:t.loaded,total:t.lengthComput... method filename (line 21) | get filename(){return this._filename} method isRangeSupported (line 21) | get isRangeSupported(){return this._isRangeSupported} method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method contentLength (line 21) | get contentLength(){return this._contentLength} method headersReady (line 21) | get headersReady(){return this._headersReceivedCapability.promise} method read (line 21) | async read(){if(this._storedError)throw this._storedError;if(this._cac... method cancel (line 21) | cancel(t){this._done=!0;this._headersReceivedCapability.reject(t);for(... class PDFNetworkStreamRangeRequestReader (line 21) | class PDFNetworkStreamRangeRequestReader{constructor(t,e,i){this._manage... method constructor (line 21) | constructor(t,e,i){this._manager=t;const s={onDone:this._onDone.bind(t... method _close (line 21) | _close(){this.onClosed?.(this)} method _onDone (line 21) | _onDone(t){const e=t.chunk;if(this._requests.length>0){this._requests.... method _onError (line 21) | _onError(t){this._storedError=createResponseStatusError(t,this._url);f... method _onProgress (line 21) | _onProgress(t){this.isStreamingSupported||this.onProgress?.({loaded:t.... method isStreamingSupported (line 21) | get isStreamingSupported(){return!1} method read (line 21) | async read(){if(this._storedError)throw this._storedError;if(null!==th... method cancel (line 21) | cancel(t){this._done=!0;for(const t of this._requests)t.resolve({value... class PDFNodeStream (line 21) | class PDFNodeStream{constructor(t){this.source=t;this.url=function parse... method constructor (line 21) | constructor(t){this.source=t;this.url=function parseUrl(t){const e=Nod... method _progressiveDataLength (line 21) | get _progressiveDataLength(){return this._fullRequestReader?._loaded??0} method getFullReader (line 21) | getFullReader(){assert(!this._fullRequestReader,"PDFNodeStream.getFull... method getRangeReader (line 21) | getRangeReader(t,e){if(e<=this._progressiveDataLength)return null;cons... method cancelAllRequests (line 21) | cancelAllRequests(t){this._fullRequestReader?.cancel(t);for(const e of... class BaseFullReader (line 21) | class BaseFullReader{constructor(t){this._url=t.url;this._done=!1;this._... method constructor (line 21) | constructor(t){this._url=t.url;this._done=!1;this._storedError=null;th... method headersReady (line 21) | get headersReady(){return this._headersCapability.promise} method filename (line 21) | get filename(){return this._filename} method contentLength (line 21) | get contentLength(){return this._contentLength} method isRangeSupported (line 21) | get isRangeSupported(){return this._isRangeSupported} method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method read (line 21) | async read(){await this._readCapability.promise;if(this._done)return{v... method cancel (line 21) | cancel(t){this._readableStream?this._readableStream.destroy(t):this._e... method _error (line 21) | _error(t){this._storedError=t;this._readCapability.resolve()} method _setReadableStream (line 21) | _setReadableStream(t){this._readableStream=t;t.on("readable",(()=>{thi... class BaseRangeReader (line 21) | class BaseRangeReader{constructor(t){this._url=t.url;this._done=!1;this.... method constructor (line 21) | constructor(t){this._url=t.url;this._done=!1;this._storedError=null;th... method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method read (line 21) | async read(){await this._readCapability.promise;if(this._done)return{v... method cancel (line 21) | cancel(t){this._readableStream?this._readableStream.destroy(t):this._e... method _error (line 21) | _error(t){this._storedError=t;this._readCapability.resolve()} method _setReadableStream (line 21) | _setReadableStream(t){this._readableStream=t;t.on("readable",(()=>{thi... function createRequestOptions (line 21) | function createRequestOptions(t,e){return{protocol:t.protocol,auth:t.aut... class PDFNodeStreamFullReader (line 21) | class PDFNodeStreamFullReader extends BaseFullReader{constructor(t){supe... method constructor (line 21) | constructor(t){super(t);const handleResponse=e=>{if(404===e.statusCode... class PDFNodeStreamRangeReader (line 21) | class PDFNodeStreamRangeReader extends BaseRangeReader{constructor(t,e,i... method constructor (line 21) | constructor(t,e,i){super(t);this._httpHeaders={};for(const e in t.http... class PDFNodeStreamFsFullReader (line 21) | class PDFNodeStreamFsFullReader extends BaseFullReader{constructor(t){su... method constructor (line 21) | constructor(t){super(t);let e=decodeURIComponent(this._url.path);zt.te... class PDFNodeStreamFsRangeReader (line 21) | class PDFNodeStreamFsRangeReader extends BaseRangeReader{constructor(t,e... method constructor (line 21) | constructor(t,e,i){super(t);let s=decodeURIComponent(this._url.path);z... class TextLayer (line 21) | class TextLayer{#Ke=Promise.withResolvers();#ft=null;#Ye=!1;#Qe=!!global... method constructor (line 21) | constructor({textContentSource:t,container:e,viewport:i}){if(t instanc... method render (line 21) | render(){const pump=()=>{this.#ii.read().then((({value:t,done:e})=>{if... method update (line 21) | update({viewport:t,onBefore:e=null}){const i=t.scale*(globalThis.devic... method cancel (line 21) | cancel(){const t=new AbortException("TextLayer task cancelled.");this.... method textDivs (line 21) | get textDivs(){return this.#hi} method textContentItemsStr (line 21) | get textContentItemsStr(){return this.#oi} method #bi (line 21) | #bi(t){if(this.#Ye)return;this.#Ze.ctx??=TextLayer.#vi(this.#Je);const... method #yi (line 21) | #yi(t){const e=document.createElement("span"),i={angle:0,canvasWidth:0... method #Ai (line 21) | #Ai(t){const{div:e,properties:i,ctx:s,prevFontSize:n,prevFontFamily:a}... method cleanup (line 21) | static cleanup(){if(!(this.#mi.size>0)){this.#ui.clear();for(const{can... method #vi (line 21) | static#vi(t=null){let e=this.#pi.get(t||="");if(!e){const i=document.c... method #fi (line 21) | static#fi(){if(null!==this.#gi)return;const t=document.createElement("... method #wi (line 21) | static#wi(t,e){const i=this.#ui.get(t);if(i)return i;const s=this.#vi(... function renderTextLayer (line 21) | function renderTextLayer(){deprecated("`renderTextLayer`, please use `Te... function updateTextLayer (line 21) | function updateTextLayer(){deprecated("`updateTextLayer`, please use `Te... class XfaText (line 21) | class XfaText{static textContent(t){const e=[],i={items:e,styles:Object.... method textContent (line 21) | static textContent(t){const e=[],i={items:e,styles:Object.create(null)... method shouldBuildText (line 21) | static shouldBuildText(t){return!("textarea"===t||"input"===t||"option... method _createCanvas (line 21) | _createCanvas(t,e){return NodePackages.get("canvas").createCanvas(t,e)} method constructor (line 21) | constructor({ownerDocument:t=globalThis.document,enableHWA:e=!1}={}){sup... method _createCanvas (line 21) | _createCanvas(t,e){const i=this._document.createElement("canvas");i.widt... method _fetchData (line 21) | _fetchData(t,e){return node_utils_fetchData(t).then((t=>({cMapData:t,com... method constructor (line 21) | constructor({docId:t,ownerDocument:e=globalThis.document}={}){super();th... method #A (line 21) | get#A(){return this.#xi||=new Map} method #Ti (line 21) | get#Ti(){return this.#Si||=new Map} method #Mi (line 21) | get#Mi(){if(!this.#_i){const t=this.#Ci.createElement("div"),{style:e}=t... method #ki (line 21) | #ki(t){if(1===t.length){const e=t[0],i=new Array(256);for(let t=0;t<256;... method addFilter (line 21) | addFilter(t){if(!t)return"none";let e=this.#A.get(t);if(e)return e;const... method addHCMFilter (line 21) | addHCMFilter(t,e){const i=`${t}-${e}`,s="base";let n=this.#Ti.get(s);if(... method addAlphaFilter (line 21) | addAlphaFilter(t){let e=this.#A.get(t);if(e)return e;const[i]=this.#ki([... method addLuminosityFilter (line 21) | addLuminosityFilter(t){let e,i,s=this.#A.get(t||"luminosity");if(s)retur... method addHighlightHCMFilter (line 21) | addHighlightHCMFilter(t,e,i,s,n){const a=`${e}-${i}-${s}-${n}`;let r=thi... method destroy (line 21) | destroy(t=!1){if(!t||0===this.#Ti.size){if(this.#_i){this.#_i.parentNode... method #Li (line 21) | #Li(t){const e=this.#Ci.createElementNS(ct,"feColorMatrix");e.setAttribu... method #Ri (line 21) | #Ri(t){const e=this.#Ci.createElementNS(ct,"feColorMatrix");e.setAttribu... method #Pi (line 21) | #Pi(t){const e=this.#Ci.createElementNS(ct,"filter");e.setAttribute("col... method #Oi (line 21) | #Oi(t,e,i){const s=this.#Ci.createElementNS(ct,e);s.setAttribute("type",... method #Di (line 21) | #Di(t,e,i,s){const n=this.#Ci.createElementNS(ct,"feComponentTransfer");... method #Ii (line 21) | #Ii(t,e){const i=this.#Ci.createElementNS(ct,"feComponentTransfer");e.ap... method #Fi (line 21) | #Fi(t){this.#Mi.style.color=t;return getRGB(getComputedStyle(this.#Mi).g... method _fetchData (line 21) | _fetchData(t){return node_utils_fetchData(t)} function getDocument (line 21) | function getDocument(t={}){"string"==typeof t||t instanceof URL?t={url:t... function isRefProxy (line 21) | function isRefProxy(t){return"object"==typeof t&&Number.isInteger(t?.num... class PDFDocumentLoadingTask (line 21) | class PDFDocumentLoadingTask{static#Ei=0;constructor(){this._capability=... method constructor (line 21) | constructor(){this._capability=Promise.withResolvers();this._transport... method promise (line 21) | get promise(){return this._capability.promise} method destroy (line 21) | async destroy(){this.destroyed=!0;try{this._worker?.port&&(this._worke... class PDFDataRangeTransport (line 21) | class PDFDataRangeTransport{constructor(t,e,i=!1,s=null){this.length=t;t... method constructor (line 21) | constructor(t,e,i=!1,s=null){this.length=t;this.initialData=e;this.pro... method addRangeListener (line 21) | addRangeListener(t){this._rangeListeners.push(t)} method addProgressListener (line 21) | addProgressListener(t){this._progressListeners.push(t)} method addProgressiveReadListener (line 21) | addProgressiveReadListener(t){this._progressiveReadListeners.push(t)} method addProgressiveDoneListener (line 21) | addProgressiveDoneListener(t){this._progressiveDoneListeners.push(t)} method onDataRange (line 21) | onDataRange(t,e){for(const i of this._rangeListeners)i(t,e)} method onDataProgress (line 21) | onDataProgress(t,e){this._readyCapability.promise.then((()=>{for(const... method onDataProgressiveRead (line 21) | onDataProgressiveRead(t){this._readyCapability.promise.then((()=>{for(... method onDataProgressiveDone (line 21) | onDataProgressiveDone(){this._readyCapability.promise.then((()=>{for(c... method transportReady (line 21) | transportReady(){this._readyCapability.resolve()} method requestDataRange (line 21) | requestDataRange(t,e){unreachable("Abstract method PDFDataRangeTranspo... method abort (line 21) | abort(){} class PDFDocumentProxy (line 21) | class PDFDocumentProxy{constructor(t,e){this._pdfInfo=t;this._transport=... method constructor (line 21) | constructor(t,e){this._pdfInfo=t;this._transport=e} method annotationStorage (line 21) | get annotationStorage(){return this._transport.annotationStorage} method filterFactory (line 21) | get filterFactory(){return this._transport.filterFactory} method numPages (line 21) | get numPages(){return this._pdfInfo.numPages} method fingerprints (line 21) | get fingerprints(){return this._pdfInfo.fingerprints} method isPureXfa (line 21) | get isPureXfa(){return shadow(this,"isPureXfa",!!this._transport._html... method allXfaHtml (line 21) | get allXfaHtml(){return this._transport._htmlForXfa} method getPage (line 21) | getPage(t){return this._transport.getPage(t)} method getPageIndex (line 21) | getPageIndex(t){return this._transport.getPageIndex(t)} method getDestinations (line 21) | getDestinations(){return this._transport.getDestinations()} method getDestination (line 21) | getDestination(t){return this._transport.getDestination(t)} method getPageLabels (line 21) | getPageLabels(){return this._transport.getPageLabels()} method getPageLayout (line 21) | getPageLayout(){return this._transport.getPageLayout()} method getPageMode (line 21) | getPageMode(){return this._transport.getPageMode()} method getViewerPreferences (line 21) | getViewerPreferences(){return this._transport.getViewerPreferences()} method getOpenAction (line 21) | getOpenAction(){return this._transport.getOpenAction()} method getAttachments (line 21) | getAttachments(){return this._transport.getAttachments()} method getJSActions (line 21) | getJSActions(){return this._transport.getDocJSActions()} method getOutline (line 21) | getOutline(){return this._transport.getOutline()} method getOptionalContentConfig (line 21) | getOptionalContentConfig({intent:t="display"}={}){const{renderingInten... method getPermissions (line 21) | getPermissions(){return this._transport.getPermissions()} method getMetadata (line 21) | getMetadata(){return this._transport.getMetadata()} method getMarkInfo (line 21) | getMarkInfo(){return this._transport.getMarkInfo()} method getData (line 21) | getData(){return this._transport.getData()} method saveDocument (line 21) | saveDocument(){return this._transport.saveDocument()} method getDownloadInfo (line 21) | getDownloadInfo(){return this._transport.downloadInfoCapability.promise} method cleanup (line 21) | cleanup(t=!1){return this._transport.startCleanup(t||this.isPureXfa)} method destroy (line 21) | destroy(){return this.loadingTask.destroy()} method cachedPageNumber (line 21) | cachedPageNumber(t){return this._transport.cachedPageNumber(t)} method loadingParams (line 21) | get loadingParams(){return this._transport.loadingParams} method loadingTask (line 21) | get loadingTask(){return this._transport.loadingTask} method getFieldObjects (line 21) | getFieldObjects(){return this._transport.getFieldObjects()} method hasJSActions (line 21) | hasJSActions(){return this._transport.hasJSActions()} method getCalculationOrderIds (line 21) | getCalculationOrderIds(){return this._transport.getCalculationOrderIds()} class PDFPageProxy (line 21) | class PDFPageProxy{#Ni=null;#Bi=!1;constructor(t,e,i,s=!1){this._pageInd... method constructor (line 21) | constructor(t,e,i,s=!1){this._pageIndex=t;this._pageInfo=e;this._trans... method pageNumber (line 21) | get pageNumber(){return this._pageIndex+1} method rotate (line 21) | get rotate(){return this._pageInfo.rotate} method ref (line 21) | get ref(){return this._pageInfo.ref} method userUnit (line 21) | get userUnit(){return this._pageInfo.userUnit} method view (line 21) | get view(){return this._pageInfo.view} method getViewport (line 21) | getViewport({scale:t,rotation:e=this.rotate,offsetX:i=0,offsetY:s=0,do... method getAnnotations (line 21) | getAnnotations({intent:t="display"}={}){const{renderingIntent:e}=this.... method getJSActions (line 21) | getJSActions(){return this._transport.getPageJSActions(this._pageIndex)} method filterFactory (line 21) | get filterFactory(){return this._transport.filterFactory} method isPureXfa (line 21) | get isPureXfa(){return shadow(this,"isPureXfa",!!this._transport._html... method getXfa (line 21) | async getXfa(){return this._transport._htmlForXfa?.children[this._page... method render (line 21) | render({canvasContext:t,viewport:e,intent:i="display",annotationMode:s... method getOperatorList (line 21) | getOperatorList({intent:t="display",annotationMode:e=u.ENABLE,printAnn... method streamTextContent (line 21) | streamTextContent({includeMarkedContent:t=!1,disableNormalization:e=!1... method getTextContent (line 21) | getTextContent(t={}){if(this._transport._htmlForXfa)return this.getXfa... method getStructTree (line 21) | getStructTree(){return this._transport.getStructTree(this._pageIndex)} method _destroy (line 21) | _destroy(){this.destroyed=!0;const t=[];for(const e of this._intentSta... method cleanup (line 21) | cleanup(t=!1){this.#Bi=!0;const e=this.#zi(!1);t&&e&&(this._stats&&=ne... method #zi (line 21) | #zi(t=!1){this.#Hi();if(!this.#Bi||this.destroyed)return!1;if(t){this.... method #Hi (line 21) | #Hi(){if(this.#Ni){clearTimeout(this.#Ni);this.#Ni=null}} method _startRenderPage (line 21) | _startRenderPage(t,e){const i=this._intentStates.get(e);if(i){this._st... method _renderPageChunk (line 21) | _renderPageChunk(t,e){for(let i=0,s=t.length;ithis._numPages)return Prom... method getPageIndex (line 21) | getPageIndex(t){return isRefProxy(t)?this.messageHandler.sendWithPromi... method getAnnotations (line 21) | getAnnotations(t,e){return this.messageHandler.sendWithPromise("GetAnn... method getFieldObjects (line 21) | getFieldObjects(){return this.#Qi("GetFieldObjects")} method hasJSActions (line 21) | hasJSActions(){return this.#Qi("HasJSActions")} method getCalculationOrderIds (line 21) | getCalculationOrderIds(){return this.messageHandler.sendWithPromise("G... method getDestinations (line 21) | getDestinations(){return this.messageHandler.sendWithPromise("GetDesti... method getDestination (line 21) | getDestination(t){return"string"!=typeof t?Promise.reject(new Error("I... method getPageLabels (line 21) | getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLab... method getPageLayout (line 21) | getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLay... method getPageMode (line 21) | getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode"... method getViewerPreferences (line 21) | getViewerPreferences(){return this.messageHandler.sendWithPromise("Get... method getOpenAction (line 21) | getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAct... method getAttachments (line 21) | getAttachments(){return this.messageHandler.sendWithPromise("GetAttach... method getDocJSActions (line 21) | getDocJSActions(){return this.#Qi("GetDocJSActions")} method getPageJSActions (line 21) | getPageJSActions(t){return this.messageHandler.sendWithPromise("GetPag... method getStructTree (line 21) | getStructTree(t){return this.messageHandler.sendWithPromise("GetStruct... method getOutline (line 21) | getOutline(){return this.messageHandler.sendWithPromise("GetOutline",n... method getOptionalContentConfig (line 21) | getOptionalContentConfig(t){return this.#Qi("GetOptionalContentConfig"... method getPermissions (line 21) | getPermissions(){return this.messageHandler.sendWithPromise("GetPermis... method getMetadata (line 21) | getMetadata(){const t="GetMetadata",e=this.#Gi.get(t);if(e)return e;co... method getMarkInfo (line 21) | getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo"... method startCleanup (line 21) | async startCleanup(t=!1){if(!this.destroyed){await this.messageHandler... method cachedPageNumber (line 21) | cachedPageNumber(t){if(!isRefProxy(t))return null;const e=0===t.gen?`$... class PDFObjects (line 21) | class PDFObjects{#Ji=Object.create(null);#Zi(t){return this.#Ji[t]||={..... method #Zi (line 21) | #Zi(t){return this.#Ji[t]||={...Promise.withResolvers(),data:Xt}} method get (line 21) | get(t,e=null){if(e){const i=this.#Zi(t);i.promise.then((()=>e(i.data))... method has (line 21) | has(t){const e=this.#Ji[t];return!!e&&e.data!==Xt} method resolve (line 21) | resolve(t,e=null){const i=this.#Zi(t);i.data=e;i.resolve()} method clear (line 21) | clear(){for(const t in this.#Ji){const{data:e}=this.#Ji[t];e?.bitmap?.... method [Symbol.iterator] (line 21) | *[Symbol.iterator](){for(const t in this.#Ji){const{data:e}=this.#Ji[t];... class RenderTask (line 21) | class RenderTask{#ts=null;constructor(t){this.#ts=t;this.onContinue=null... method constructor (line 21) | constructor(t){this.#ts=t;this.onContinue=null} method promise (line 21) | get promise(){return this.#ts.capability.promise} method cancel (line 21) | cancel(t=0){this.#ts.cancel(null,t)} method separateAnnots (line 21) | get separateAnnots(){const{separateAnnots:t}=this.#ts.operatorList;if(... class InternalRenderTask (line 21) | class InternalRenderTask{#es=null;static#is=new WeakSet;constructor({cal... method constructor (line 21) | constructor({callback:t,params:e,objs:i,commonObjs:s,annotationCanvasM... method completed (line 21) | get completed(){return this.capability.promise.catch((function(){}))} method initializeGraphics (line 21) | initializeGraphics({transparency:t=!1,optionalContentConfig:e}){if(thi... method cancel (line 21) | cancel(t=null,e=0){this.running=!1;this.cancelled=!0;this.gfx?.endDraw... method operatorListChanged (line 21) | operatorListChanged(){if(this.graphicsReady){this.stepper?.updateOpera... method _continue (line 21) | _continue(){this.running=!0;this.cancelled||(this.task.onContinue?this... method _scheduleNext (line 21) | _scheduleNext(){this._useRequestAnimationFrame?this.#es=window.request... method _next (line 21) | async _next(){if(!this.cancelled){this.operatorListIdx=this.gfx.execut... function makeColorComp (line 21) | function makeColorComp(t){return Math.floor(255*Math.max(0,Math.min(1,t)... function scaleAndClamp (line 21) | function scaleAndClamp(t){return Math.max(0,Math.min(255,255*t))} class ColorConverters (line 21) | class ColorConverters{static CMYK_G([t,e,i,s]){return["G",1-Math.min(1,.... method CMYK_G (line 21) | static CMYK_G([t,e,i,s]){return["G",1-Math.min(1,.3*t+.59*i+.11*e+s)]} method G_CMYK (line 21) | static G_CMYK([t]){return["CMYK",0,0,0,1-t]} method G_RGB (line 21) | static G_RGB([t]){return["RGB",t,t,t]} method G_rgb (line 21) | static G_rgb([t]){return[t=scaleAndClamp(t),t,t]} method G_HTML (line 21) | static G_HTML([t]){const e=makeColorComp(t);return`#${e}${e}${e}`} method RGB_G (line 21) | static RGB_G([t,e,i]){return["G",.3*t+.59*e+.11*i]} method RGB_rgb (line 21) | static RGB_rgb(t){return t.map(scaleAndClamp)} method RGB_HTML (line 21) | static RGB_HTML(t){return`#${t.map(makeColorComp).join("")}`} method T_HTML (line 21) | static T_HTML(){return"#00000000"} method T_rgb (line 21) | static T_rgb(){return[null]} method CMYK_RGB (line 21) | static CMYK_RGB([t,e,i,s]){return["RGB",1-Math.min(1,t+s),1-Math.min(1... method CMYK_rgb (line 21) | static CMYK_rgb([t,e,i,s]){return[scaleAndClamp(1-Math.min(1,t+s)),sca... method CMYK_HTML (line 21) | static CMYK_HTML(t){const e=this.CMYK_RGB(t).slice(1);return this.RGB_... method RGB_CMYK (line 21) | static RGB_CMYK([t,e,i]){const s=1-t,n=1-e,a=1-i;return["CMYK",s,n,a,M... class XfaLayer (line 21) | class XfaLayer{static setupStorage(t,e,i,s,n){const a=s.getValue(e,{valu... method setupStorage (line 21) | static setupStorage(t,e,i,s,n){const a=s.getValue(e,{value:null});swit... method setAttributes (line 21) | static setAttributes({html:t,element:e,storage:i=null,intent:s,linkSer... method render (line 21) | static render(t){const e=t.annotationStorage,i=t.linkService,s=t.xfaHt... method update (line 21) | static update(t){const e=`matrix(${t.viewport.transform.join(",")})`;t... function getRectDims (line 21) | function getRectDims(t){return{width:t[2]-t[0],height:t[3]-t[1]}} class AnnotationElementFactory (line 21) | class AnnotationElementFactory{static create(t){switch(t.data.annotation... method create (line 21) | static create(t){switch(t.data.annotationType){case E:return new LinkA... class AnnotationElement (line 21) | class AnnotationElement{#ss=null;#ns=!1;#as=null;constructor(t,{isRender... method constructor (line 21) | constructor(t,{isRenderable:e=!1,ignoreBorder:i=!1,createQuadrilateral... method _hasPopupData (line 21) | static _hasPopupData({titleObj:t,contentsObj:e,richText:i}){return!!(t... method hasPopupData (line 21) | get hasPopupData(){return AnnotationElement._hasPopupData(this.data)} method updateEdited (line 21) | updateEdited(t){if(!this.container)return;this.#ss||={rect:this.data.r... method resetEdited (line 21) | resetEdited(){if(this.#ss){this.#rs(this.#ss.rect);this.#as?.popup.res... method #rs (line 21) | #rs(t){const{container:{style:e},data:{rect:i,rotation:s},parent:{view... method _createContainer (line 21) | _createContainer(t){const{data:e,parent:{page:i,viewport:s}}=this,n=do... method setRotation (line 21) | setRotation(t,e=this.container){if(!this.data.rect)return;const{pageWi... method _commonActions (line 21) | get _commonActions(){const setColor=(t,e,i)=>{const s=i.detail[t],n=s[... method _dispatchEventFromSandbox (line 21) | _dispatchEventFromSandbox(t,e){const i=this._commonActions;for(const s... method _setDefaultPropertiesFromJS (line 21) | _setDefaultPropertiesFromJS(t){if(!this.enableScripting)return;const e... method _createQuadrilaterals (line 21) | _createQuadrilaterals(){if(!this.container)return;const{quadPoints:t}=... method _createPopup (line 21) | _createPopup(){const{container:t,data:e}=this;t.setAttribute("aria-has... method render (line 21) | render(){unreachable("Abstract method `AnnotationElement.render` calle... method _getElementsByName (line 21) | _getElementsByName(t,e=null){const i=[];if(this._fieldObjects){const s... method show (line 21) | show(){this.container&&(this.container.hidden=!1);this.popup?.maybeSho... method hide (line 21) | hide(){this.container&&(this.container.hidden=!0);this.popup?.forceHid... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.container} method addHighlightArea (line 21) | addHighlightArea(){const t=this.getElementsToTriggerPopup();if(Array.i... method _isEditable (line 21) | get _isEditable(){return!1} method _editOnDoubleClick (line 21) | _editOnDoubleClick(){if(!this._isEditable)return;const{annotationEdito... class LinkAnnotationElement (line 21) | class LinkAnnotationElement extends AnnotationElement{constructor(t,e=nu... method constructor (line 21) | constructor(t,e=null){super(t,{isRenderable:!0,ignoreBorder:!!e?.ignor... method render (line 21) | render(){const{data:t,linkService:e}=this,i=document.createElement("a"... method #hs (line 21) | #hs(){this.container.setAttribute("data-internal-link","")} method _bindLink (line 21) | _bindLink(t,e){t.href=this.linkService.getDestinationHash(e);t.onclick... method _bindNamedAction (line 21) | _bindNamedAction(t,e){t.href=this.linkService.getAnchorUrl("");t.oncli... method #os (line 21) | #os(t,e,i=null){t.href=this.linkService.getAnchorUrl("");e.description... method #ls (line 21) | #ls(t,e){t.href=this.linkService.getAnchorUrl("");t.onclick=()=>{this.... method _bindJSAction (line 21) | _bindJSAction(t,e){t.href=this.linkService.getAnchorUrl("");const i=ne... method _bindResetFormAction (line 21) | _bindResetFormAction(t,e){const i=t.onclick;i||(t.href=this.linkServic... class TextAnnotationElement (line 21) | class TextAnnotationElement extends AnnotationElement{constructor(t){sup... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0})} method render (line 21) | render(){this.container.classList.add("textAnnotation");const t=docume... class WidgetAnnotationElement (line 21) | class WidgetAnnotationElement extends AnnotationElement{render(){return ... method render (line 21) | render(){return this.container} method showElementAndHideCanvas (line 21) | showElementAndHideCanvas(t){if(this.data.hasOwnCanvas){"CANVAS"===t.pr... method _getKeyModifier (line 21) | _getKeyModifier(t){return util_FeatureTest.platform.isMac?t.metaKey:t.... method _setEventListener (line 21) | _setEventListener(t,e,i,s,n){i.includes("mouse")?t.addEventListener(i,... method _setEventListeners (line 21) | _setEventListeners(t,e,i,s){for(const[n,a]of i)if("Action"===a||this.d... method _setBackgroundColor (line 21) | _setBackgroundColor(t){const e=this.data.backgroundColor||null;t.style... method _setTextStyle (line 21) | _setTextStyle(t){const e=["left","center","right"],{fontColor:i}=this.... method _setRequired (line 21) | _setRequired(t,e){e?t.setAttribute("required",!0):t.removeAttribute("r... class TextWidgetAnnotationElement (line 21) | class TextWidgetAnnotationElement extends WidgetAnnotationElement{constr... method constructor (line 21) | constructor(t){super(t,{isRenderable:t.renderForms||t.data.hasOwnCanva... method setPropertyOnSiblings (line 21) | setPropertyOnSiblings(t,e,i,s){const n=this.annotationStorage;for(cons... method render (line 21) | render(){const t=this.annotationStorage,e=this.data.id;this.container.... class SignatureWidgetAnnotationElement (line 21) | class SignatureWidgetAnnotationElement extends WidgetAnnotationElement{c... method constructor (line 21) | constructor(t){super(t,{isRenderable:!!t.data.hasOwnCanvas})} class CheckboxWidgetAnnotationElement (line 21) | class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement{co... method constructor (line 21) | constructor(t){super(t,{isRenderable:t.renderForms})} method render (line 21) | render(){const t=this.annotationStorage,e=this.data,i=e.id;let s=t.get... class RadioButtonWidgetAnnotationElement (line 21) | class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement... method constructor (line 21) | constructor(t){super(t,{isRenderable:t.renderForms})} method render (line 21) | render(){this.container.classList.add("buttonWidgetAnnotation","radioB... class PushButtonWidgetAnnotationElement (line 21) | class PushButtonWidgetAnnotationElement extends LinkAnnotationElement{co... method constructor (line 21) | constructor(t){super(t,{ignoreBorder:t.data.hasAppearance})} method render (line 21) | render(){const t=super.render();t.classList.add("buttonWidgetAnnotatio... class ChoiceWidgetAnnotationElement (line 21) | class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement{cons... method constructor (line 21) | constructor(t){super(t,{isRenderable:t.renderForms})} method render (line 21) | render(){this.container.classList.add("choiceWidgetAnnotation");const ... class PopupAnnotationElement (line 21) | class PopupAnnotationElement extends AnnotationElement{constructor(t){co... method constructor (line 21) | constructor(t){const{data:e,elements:i}=t;super(t,{isRenderable:Annota... method render (line 21) | render(){this.container.classList.add("popupAnnotation");const t=this.... class PopupElement (line 21) | class PopupElement{#ds=this.#cs.bind(this);#us=this.#ps.bind(this);#gs=t... method constructor (line 21) | constructor({container:t,color:e,elements:i,titleObj:s,modificationDat... method render (line 21) | render(){if(this.#Cs)return;const t=this.#Cs=document.createElement("d... method #Ps (line 21) | get#Ps(){const t=this.#Ts,e=this.#As;return!t?.str||e?.str&&e.str!==t.... method #Ds (line 21) | get#Ds(){return this.#Ps?.attributes?.style?.fontSize||0} method #Fs (line 21) | get#Fs(){return this.#Ps?.attributes?.style?.color||null} method #Rs (line 21) | #Rs(t){const e=[],i={str:t,html:{name:"div",attributes:{dir:"auto"},ch... method _formatContents (line 21) | _formatContents({str:t,dir:e}){const i=document.createElement("p");i.c... method #cs (line 21) | #cs(t){t.altKey||t.shiftKey||t.ctrlKey||t.metaKey||("Enter"===t.key||"... method updateEdited (line 21) | updateEdited({rect:t,popupContent:e}){this.#ss||={contentsObj:this.#As... method resetEdited (line 21) | resetEdited(){if(this.#ss){({contentsObj:this.#As,richText:this.#Ts}=t... method #Is (line 21) | #Is(){if(null!==this.#E)return;const{page:{view:t},viewport:{rawDims:{... method #bs (line 21) | #bs(){this.#Es=!this.#Es;if(this.#Es){this.#ms();this.#ft.addEventList... method #ms (line 21) | #ms(){this.#Cs||this.render();if(this.isVisible)this.#Es&&this.#ft.cla... method #ps (line 21) | #ps(){this.#ft.classList.remove("focused");if(!this.#Es&&this.isVisibl... method forceHide (line 21) | forceHide(){this.#ks=this.isVisible;this.#ks&&(this.#ft.hidden=!0)} method maybeShow (line 21) | maybeShow(){if(this.#ks){this.#Cs||this.#ms();this.#ks=!1;this.#ft.hid... method isVisible (line 21) | get isVisible(){return!1===this.#ft.hidden} class FreeTextAnnotationElement (line 21) | class FreeTextAnnotationElement extends AnnotationElement{constructor(t)... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0});this.textCon... method render (line 21) | render(){this.container.classList.add("freeTextAnnotation");if(this.te... method _isEditable (line 21) | get _isEditable(){return this.data.hasOwnCanvas} class LineAnnotationElement (line 21) | class LineAnnotationElement extends AnnotationElement{#Ls=null;construct... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0})} method render (line 21) | render(){this.container.classList.add("lineAnnotation");const t=this.d... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#Ls} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} class SquareAnnotationElement (line 21) | class SquareAnnotationElement extends AnnotationElement{#Os=null;constru... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0})} method render (line 21) | render(){this.container.classList.add("squareAnnotation");const t=this... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#Os} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} class CircleAnnotationElement (line 21) | class CircleAnnotationElement extends AnnotationElement{#Ns=null;constru... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0})} method render (line 21) | render(){this.container.classList.add("circleAnnotation");const t=this... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#Ns} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} class PolylineAnnotationElement (line 21) | class PolylineAnnotationElement extends AnnotationElement{#Bs=null;const... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0});this.contain... method render (line 21) | render(){this.container.classList.add(this.containerClassName);const{d... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#Bs} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} class PolygonAnnotationElement (line 21) | class PolygonAnnotationElement extends PolylineAnnotationElement{constru... method constructor (line 21) | constructor(t){super(t);this.containerClassName="polygonAnnotation";th... class CaretAnnotationElement (line 21) | class CaretAnnotationElement extends AnnotationElement{constructor(t){su... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0})} method render (line 21) | render(){this.container.classList.add("caretAnnotation");!this.data.po... class InkAnnotationElement (line 21) | class InkAnnotationElement extends AnnotationElement{#Hs=[];constructor(... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0});this.contain... method render (line 21) | render(){this.container.classList.add(this.containerClassName);const{d... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#Hs} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} class HighlightAnnotationElement (line 21) | class HighlightAnnotationElement extends AnnotationElement{constructor(t... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0,createQuadrila... method render (line 21) | render(){!this.data.popupRef&&this.hasPopupData&&this._createPopup();t... class UnderlineAnnotationElement (line 21) | class UnderlineAnnotationElement extends AnnotationElement{constructor(t... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0,createQuadrila... method render (line 21) | render(){!this.data.popupRef&&this.hasPopupData&&this._createPopup();t... class SquigglyAnnotationElement (line 21) | class SquigglyAnnotationElement extends AnnotationElement{constructor(t)... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0,createQuadrila... method render (line 21) | render(){!this.data.popupRef&&this.hasPopupData&&this._createPopup();t... class StrikeOutAnnotationElement (line 21) | class StrikeOutAnnotationElement extends AnnotationElement{constructor(t... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0,createQuadrila... method render (line 21) | render(){!this.data.popupRef&&this.hasPopupData&&this._createPopup();t... class StampAnnotationElement (line 21) | class StampAnnotationElement extends AnnotationElement{constructor(t){su... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0,ignoreBorder:!0})} method render (line 21) | render(){this.container.classList.add("stampAnnotation");!this.data.po... class FileAttachmentAnnotationElement (line 21) | class FileAttachmentAnnotationElement extends AnnotationElement{#zs=null... method constructor (line 21) | constructor(t){super(t,{isRenderable:!0});const{file:e}=this.data;this... method render (line 21) | render(){this.container.classList.add("fileAttachmentAnnotation");cons... method getElementsToTriggerPopup (line 21) | getElementsToTriggerPopup(){return this.#zs} method addHighlightArea (line 21) | addHighlightArea(){this.container.classList.add("highlightArea")} method #Us (line 21) | #Us(){this.downloadManager?.openOrDownloadData(this.content,this.filen... class AnnotationLayer (line 21) | class AnnotationLayer{#js=null;#$s=null;#Vs=new Map;constructor({div:t,a... method constructor (line 21) | constructor({div:t,accessibilityManager:e,annotationCanvasMap:i,annota... method #Ws (line 21) | #Ws(t,e){const i=t.firstChild||t;i.id=`${et}${e}`;this.div.append(t);t... method render (line 21) | async render(t){const{annotations:e}=t,i=this.div;setLayerDimensions(i... method update (line 21) | update({viewport:t}){const e=this.div;this.viewport=t;setLayerDimensio... method #Gs (line 21) | #Gs(){if(!this.#$s)return;const t=this.div;for(const[e,i]of this.#$s){... method getEditableAnnotations (line 21) | getEditableAnnotations(){return Array.from(this.#Vs.values())} method getEditableAnnotation (line 21) | getEditableAnnotation(t){return this.#Vs.get(t)} class FreeTextEditor (line 21) | class FreeTextEditor extends AnnotationEditor{#qs=this.editorDivBlur.bin... method _keyboardManager (line 21) | static get _keyboardManager(){const t=FreeTextEditor.prototype,arrowCh... method constructor (line 21) | constructor(t){super({...t,name:"freeTextEditor"});this.#vs=t.color||F... method initialize (line 21) | static initialize(t,e){AnnotationEditor.initialize(t,e,{strings:["pdfj... method updateDefaultParams (line 21) | static updateDefaultParams(t,e){switch(t){case g.FREETEXT_SIZE:FreeTex... method updateParams (line 21) | updateParams(t,e){switch(t){case g.FREETEXT_SIZE:this.#en(e);break;cas... method defaultPropertiesToUpdate (line 21) | static get defaultPropertiesToUpdate(){return[[g.FREETEXT_SIZE,FreeTex... method propertiesToUpdate (line 21) | get propertiesToUpdate(){return[[g.FREETEXT_SIZE,this.#Ds],[g.FREETEXT... method #en (line 21) | #en(t){const setFontsize=t=>{this.editorDiv.style.fontSize=`calc(${t}p... method #in (line 21) | #in(t){const setColor=t=>{this.#vs=this.editorDiv.style.color=t},e=thi... method _translateEmpty (line 21) | _translateEmpty(t,e){this._uiManager.translateSelectedEditors(t,e,!0)} method getInitialTranslation (line 21) | getInitialTranslation(){const t=this.parentScale;return[-FreeTextEdito... method rebuild (line 21) | rebuild(){if(this.parent){super.rebuild();null!==this.div&&(this.isAtt... method enableEditMode (line 21) | enableEditMode(){if(this.isInEditMode())return;this.parent.setEditingS... method disableEditMode (line 21) | disableEditMode(){if(this.isInEditMode()){this.parent.setEditingState(... method focusin (line 21) | focusin(t){if(this._focusEventsAllowed){super.focusin(t);t.target!==th... method onceAdded (line 21) | onceAdded(){if(!this.width){this.enableEditMode();this.editorDiv.focus... method isEmpty (line 21) | isEmpty(){return!this.editorDiv||""===this.editorDiv.innerText.trim()} method remove (line 21) | remove(){this.isEditing=!1;if(this.parent){this.parent.setEditingState... method #nn (line 21) | #nn(){const t=[];this.editorDiv.normalize();for(const e of this.editor... method #sn (line 21) | #sn(){const[t,e]=this.parentDimensions;let i;if(this.isAttachedToDOM)i... method commit (line 21) | commit(){if(!this.isInEditMode())return;super.commit();this.disableEdi... method shouldGetKeyboardEvents (line 21) | shouldGetKeyboardEvents(){return this.isInEditMode()} method enterInEditMode (line 21) | enterInEditMode(){this.enableEditMode();this.editorDiv.focus()} method dblclick (line 21) | dblclick(t){this.enterInEditMode()} method keydown (line 21) | keydown(t){if(t.target===this.div&&"Enter"===t.key){this.enterInEditMo... method editorDivKeydown (line 21) | editorDivKeydown(t){FreeTextEditor._keyboardManager.exec(this,t)} method editorDivFocus (line 21) | editorDivFocus(t){this.isEditing=!0} method editorDivBlur (line 21) | editorDivBlur(t){this.isEditing=!1} method editorDivInput (line 21) | editorDivInput(t){this.parent.div.classList.toggle("freetextEditing",t... method disableEditing (line 21) | disableEditing(){this.editorDiv.setAttribute("role","comment");this.ed... method enableEditing (line 21) | enableEditing(){this.editorDiv.setAttribute("role","textbox");this.edi... method render (line 21) | render(){if(this.div)return this.div;let t,e;if(this.width){t=this.x;e... method #an (line 21) | static#an(t){return(t.nodeType===Node.TEXT_NODE?t.nodeValue:t.innerTex... method editorDivPaste (line 21) | editorDivPaste(t){const e=t.clipboardData||window.clipboardData,{types... method #rn (line 21) | #rn(){this.editorDiv.replaceChildren();if(this.#Js)for(const t of this... method #ln (line 21) | #ln(){return this.#Js.replaceAll(" "," ")} method #on (line 21) | static#on(t){return t.replaceAll(" "," ")} method contentDiv (line 21) | get contentDiv(){return this.editorDiv} method deserialize (line 21) | static deserialize(t,e,i){let s=null;if(t instanceof FreeTextAnnotatio... method serialize (line 21) | serialize(t=!1){if(this.isEmpty())return null;if(this.deleted)return{p... method #hn (line 21) | #hn(t){const{value:e,fontSize:i,color:s,pageIndex:n}=this.#tn;return t... method renderAnnotationElement (line 21) | renderAnnotationElement(t){const e=super.renderAnnotationElement(t);if... method resetAnnotationElement (line 21) | resetAnnotationElement(t){super.resetAnnotationElement(t);t.resetEdite... class Outliner (line 21) | class Outliner{#dn;#cn=[];#un=[];constructor(t,e=0,i=0,s=!0){let n=1/0,a... method constructor (line 21) | constructor(t,e=0,i=0,s=!0){let n=1/0,a=-1/0,r=1/0,o=-1/0;const l=10**... method getOutlines (line 21) | getOutlines(){this.#cn.sort(((t,e)=>t[0]-e[0]||t[1]-e[1]||t[2]-e[2]));... method #fn (line 21) | #fn(t){const e=[],i=new Set;for(const i of t){const[t,s,n]=i;e.push([t... method #bn (line 21) | #bn(t){const e=this.#un;let i=0,s=e.length-1;for(;i<=s;){const n=i+s>>... method #gn (line 21) | #gn([,t,e]){const i=this.#bn(t);this.#un.splice(i,0,[t,e])} method #mn (line 21) | #mn([,t,e]){const i=this.#bn(t);for(let s=i;s{this.color=t;this.parent?.drawLayer.changeCo... method #Aa (line 21) | #Aa(t){const e=this.#kn,setThickness=t=>{this.#kn=t;this.#ya(t)};this.... method addEditToolbar (line 21) | async addEditToolbar(){const t=await super.addEditToolbar();if(!t)retu... method disableEditing (line 21) | disableEditing(){super.disableEditing();this.div.classList.toggle("dis... method enableEditing (line 21) | enableEditing(){super.enableEditing();this.div.classList.toggle("disab... method fixAndSetPosition (line 21) | fixAndSetPosition(){return super.fixAndSetPosition(this.#wa())} method getBaseTranslation (line 21) | getBaseTranslation(){return[0,0]} method getRect (line 21) | getRect(t,e){return super.getRect(t,e,this.#wa())} method onceAdded (line 21) | onceAdded(){this.parent.addUndoableEditor(this);this.div.focus()} method remove (line 21) | remove(){this.#xa();this._reportTelemetry({action:"deleted"});super.re... method rebuild (line 21) | rebuild(){if(this.parent){super.rebuild();if(null!==this.div){this.#fa... method setParent (line 21) | setParent(t){let e=!1;if(this.parent&&!t)this.#xa();else if(t){this.#f... method #ya (line 21) | #ya(t){if(!this.#la)return;this.#ma({highlightOutlines:this.#oa.getNew... method #xa (line 21) | #xa(){if(null!==this.#b&&this.parent){this.parent.drawLayer.remove(thi... method #fa (line 21) | #fa(t=this.parent){if(null===this.#b){({id:this.#b,clipPathId:this.#ia... method #va (line 21) | static#va({x:t,y:e,width:i,height:s},n){switch(n){case 90:return{x:1-e... method rotate (line 21) | rotate(t){const{drawLayer:e}=this.parent;let i;if(this.#la){t=(t-this.... method render (line 21) | render(){if(this.div)return this.div;const t=super.render();if(this.#p... method pointerover (line 21) | pointerover(){this.parent.drawLayer.addClass(this.#ua,"hovered")} method pointerleave (line 21) | pointerleave(){this.parent.drawLayer.removeClass(this.#ua,"hovered")} method #ha (line 21) | #ha(t){HighlightEditor._keyboardManager.exec(this,t)} method _moveCaret (line 21) | _moveCaret(t){this.parent.unselect(this);switch(t){case 0:case 2:this.... method #_a (line 21) | #_a(t){if(!this.#Zn)return;const e=window.getSelection();t?e.setPositi... method select (line 21) | select(){super.select();if(this.#ua){this.parent?.drawLayer.removeClas... method unselect (line 21) | unselect(){super.unselect();if(this.#ua){this.parent?.drawLayer.remove... method _mustFixPosition (line 21) | get _mustFixPosition(){return!this.#la} method show (line 21) | show(t=this._isVisible){super.show(t);if(this.parent){this.parent.draw... method #wa (line 21) | #wa(){return this.#la?this.rotation:0} method #Ea (line 21) | #Ea(){if(this.#la)return null;const[t,e]=this.pageDimensions,i=this.#e... method #Ca (line 21) | #Ca(t){return this.#oa.serialize(t,this.#wa())} method startHighlighting (line 21) | static startHighlighting(t,e,{target:i,x:s,y:n}){const{x:a,y:r,width:o... method #Sa (line 21) | static#Sa(t,e){this._freeHighlight.add(e)&&t.drawLayer.updatePath(this... method #Ta (line 21) | static#Ta(t,e){this._freeHighlight.isEmpty()?t.drawLayer.removeFreeHig... method deserialize (line 21) | static deserialize(t,e,i){const s=super.deserialize(t,e,i),{rect:[n,a,... method serialize (line 21) | serialize(t=!1){if(this.isEmpty()||t)return null;const e=this.getRect(... method canCreateNewEmptyEditor (line 21) | static canCreateNewEmptyEditor(){return!1} class InkEditor (line 21) | class InkEditor extends AnnotationEditor{#Ma=0;#ka=0;#Pa=this.canvasPoin... method constructor (line 21) | constructor(t){super({...t,name:"inkEditor"});this.color=t.color||null... method initialize (line 21) | static initialize(t,e){AnnotationEditor.initialize(t,e)} method updateDefaultParams (line 21) | static updateDefaultParams(t,e){switch(t){case g.INK_THICKNESS:InkEdit... method updateParams (line 21) | updateParams(t,e){switch(t){case g.INK_THICKNESS:this.#Aa(e);break;cas... method defaultPropertiesToUpdate (line 21) | static get defaultPropertiesToUpdate(){return[[g.INK_THICKNESS,InkEdit... method propertiesToUpdate (line 21) | get propertiesToUpdate(){return[[g.INK_THICKNESS,this.thickness||InkEd... method #Aa (line 21) | #Aa(t){const setThickness=t=>{this.thickness=t;this.#Va()},e=this.thic... method #in (line 21) | #in(t){const setColor=t=>{this.color=t;this.#Wa()},e=this.color;this.a... method #$a (line 21) | #$a(t){const setOpacity=t=>{this.opacity=t;this.#Wa()};t/=100;const e=... method rebuild (line 21) | rebuild(){if(this.parent){super.rebuild();if(null!==this.div){if(!this... method remove (line 21) | remove(){if(null!==this.canvas){this.isEmpty()||this.commit();this.can... method setParent (line 21) | setParent(t){!this.parent&&t?this._uiManager.removeShouldRescale(this)... method onScaleChanging (line 21) | onScaleChanging(){const[t,e]=this.parentDimensions,i=this.width*t,s=th... method enableEditMode (line 21) | enableEditMode(){if(!this.#Oa&&null!==this.canvas){super.enableEditMod... method disableEditMode (line 21) | disableEditMode(){if(this.isInEditMode()&&null!==this.canvas){super.di... method onceAdded (line 21) | onceAdded(){this._isDraggable=!this.isEmpty()} method isEmpty (line 21) | isEmpty(){return 0===this.paths.length||1===this.paths.length&&0===thi... method #Ka (line 21) | #Ka(){const{parentRotation:t,parentDimensions:[e,i]}=this;switch(t){ca... method #Ya (line 21) | #Ya(){const{ctx:t,color:e,opacity:i,thickness:s,parentScale:n,scaleFac... method #Qa (line 21) | #Qa(t,e){const i=this._uiManager._signal;this.canvas.addEventListener(... method #Za (line 21) | #Za(t,e){const[i,s]=this.currentPath.at(-1);if(this.currentPath.length... method #er (line 21) | #er(){if(0===this.currentPath.length)return;const t=this.currentPath.a... method #ir (line 21) | #ir(t,e){this.#ja=null;t=Math.min(Math.max(t,0),this.canvas.width);e=M... method #Ja (line 21) | #Ja(){if(!this.#Na)return;this.#Na=!1;const t=Math.ceil(this.thickness... method #tr (line 21) | #tr(t,e,i,s,n,a,r){const o=(e+s)/2,l=(i+n)/2,h=(s+a)/2,d=(n+r)/2;t.bez... method #sr (line 21) | #sr(){const t=this.currentPath;if(t.length<=2)return[[t[0],t[0],t.at(-... method #Wa (line 21) | #Wa(){if(this.isEmpty()){this.#nr();return}this.#Ya();const{canvas:t,c... method commit (line 21) | commit(){if(!this.#Oa){super.commit();this.isEditing=!1;this.disableEd... method focusin (line 21) | focusin(t){if(this._focusEventsAllowed){super.focusin(t);this.enableEd... method canvasPointerdown (line 21) | canvasPointerdown(t){if(0===t.button&&this.isInEditMode()&&!this.#Oa){... method canvasPointermove (line 21) | canvasPointermove(t){t.preventDefault();this.#Za(t.offsetX,t.offsetY)} method canvasPointerup (line 21) | canvasPointerup(t){t.preventDefault();this.#ar(t)} method canvasPointerleave (line 21) | canvasPointerleave(t){this.#ar(t)} method #ar (line 21) | #ar(t){this.canvas.removeEventListener("pointerleave",this.#Da);this.c... method #Ga (line 21) | #Ga(){this.canvas=document.createElement("canvas");this.canvas.width=t... method #qa (line 21) | #qa(){this.#Ha=new ResizeObserver((t=>{const e=t[0].contentRect;e.widt... method isResizable (line 21) | get isResizable(){return!this.isEmpty()&&this.#Oa} method render (line 21) | render(){if(this.div)return this.div;let t,e;if(this.width){t=this.x;e... method #Xa (line 21) | #Xa(){if(!this.#Ba)return;const[t,e]=this.parentDimensions;this.canvas... method setDimensions (line 21) | setDimensions(t,e){const i=Math.round(t),s=Math.round(e);if(this.#za==... method #rr (line 21) | #rr(t,e){const i=this.#or(),s=(t-i)/this.#ka,n=(e-i)/this.#Ma;this.sca... method #nr (line 21) | #nr(){const t=this.#or()/2;this.ctx.setTransform(this.scaleFactor,0,0,... method #lr (line 21) | static#lr(t){const e=new Path2D;for(let i=0,s=t.length;i{con... method deserialize (line 21) | static deserialize(t,e,i){if(t instanceof StampAnnotationElement)retur... method serialize (line 21) | serialize(t=!1,e=null){if(this.isEmpty())return null;const i={annotati... class AnnotationEditorLayer (line 21) | class AnnotationEditorLayer{#js;#Pr=!1;#Dr=null;#Fr=null;#Rr=null;#Ir=nu... method constructor (line 21) | constructor({uiManager:t,pageIndex:e,div:i,accessibilityManager:s,anno... method isEmpty (line 21) | get isEmpty(){return 0===this.#Or.size} method isInvisible (line 21) | get isInvisible(){return this.isEmpty&&this.#p.getMode()===p.NONE} method updateToolbar (line 21) | updateToolbar(t){this.#p.updateToolbar(t)} method updateMode (line 21) | updateMode(t=this.#p.getMode()){this.#Ur();switch(t){case p.NONE:this.... method hasTextLayer (line 21) | hasTextLayer(t){return t===this.#zr?.div} method addInkEditorIfNeeded (line 21) | addInkEditorIfNeeded(t){if(this.#p.getMode()!==p.INK)return;if(!t)for(... method setEditingState (line 21) | setEditingState(t){this.#p.setEditingState(t)} method addCommands (line 21) | addCommands(t){this.#p.addCommands(t)} method togglePointerEvents (line 21) | togglePointerEvents(t=!1){this.div.classList.toggle("disabled",!t)} method toggleAnnotationLayerPointerEvents (line 21) | toggleAnnotationLayerPointerEvents(t=!1){this.#Dr?.div.classList.toggl... method enable (line 21) | enable(){this.div.tabIndex=0;this.togglePointerEvents(!0);const t=new ... method disable (line 21) | disable(){this.#Hr=!0;this.div.tabIndex=-1;this.togglePointerEvents(!1... method getEditableAnnotation (line 21) | getEditableAnnotation(t){return this.#Dr?.getEditableAnnotation(t)||null} method setActiveEditor (line 21) | setActiveEditor(t){this.#p.getActive()!==t&&this.#p.setActiveEditor(t)} method enableTextSelection (line 21) | enableTextSelection(){this.div.tabIndex=-1;if(this.#zr?.div&&!this.#Ir... method disableTextSelection (line 21) | disableTextSelection(){this.div.tabIndex=0;if(this.#zr?.div&&this.#Ir)... method #jr (line 21) | #jr(t){this.#p.unselectAll();if(t.target===this.#zr.div){const{isMac:e... method enableClick (line 21) | enableClick(){if(this.#Rr)return;const t=this.#p._signal;this.#Rr=this... method disableClick (line 21) | disableClick(){if(this.#Rr){this.div.removeEventListener("pointerdown"... method attach (line 21) | attach(t){this.#Or.set(t.id,t);const{annotationElementId:e}=t;e&&this.... method detach (line 21) | detach(t){this.#Or.delete(t.id);this.#js?.removePointerInTextLayer(t.c... method remove (line 21) | remove(t){this.detach(t);this.#p.removeEditor(t);t.div.remove();t.isAt... method changeParent (line 21) | changeParent(t){if(t.parent!==this){if(t.parent&&t.annotationElementId... method add (line 21) | add(t){if(t.parent!==this||!t.isAttachedToDOM){this.changeParent(t);th... method moveEditorInDOM (line 21) | moveEditorInDOM(t){if(!t.isAttachedToDOM)return;const{activeElement:e}... method addOrRebuild (line 21) | addOrRebuild(t){if(t.needsToBeRebuilt()){t.parent||=this;t.rebuild();t... method addUndoableEditor (line 21) | addUndoableEditor(t){this.addCommands({cmd:()=>t._uiManager.rebuild(t)... method getNextId (line 21) | getNextId(){return this.#p.getId()} method #$r (line 21) | get#$r(){return AnnotationEditorLayer.#N.get(this.#p.getMode())} method _signal (line 21) | get _signal(){return this.#p._signal} method #Vr (line 21) | #Vr(t){const e=this.#$r;return e?new e.prototype.constructor(t):null} method canCreateNewEmptyEditor (line 21) | canCreateNewEmptyEditor(){return this.#$r?.canCreateNewEmptyEditor()} method pasteEditor (line 21) | pasteEditor(t,e){this.#p.updateToolbar(t);this.#p.updateMode(t);const{... method deserialize (line 21) | deserialize(t){return AnnotationEditorLayer.#N.get(t.annotationType??t... method createAndAddNewEditor (line 21) | createAndAddNewEditor(t,e,i={}){const s=this.getNextId(),n=this.#Vr({p... method #Wr (line 21) | #Wr(){const{x:t,y:e,width:i,height:s}=this.div.getBoundingClientRect()... method addNewEditor (line 21) | addNewEditor(){this.createAndAddNewEditor(this.#Wr(),!0)} method setSelected (line 21) | setSelected(t){this.#p.setSelected(t)} method toggleSelected (line 21) | toggleSelected(t){this.#p.toggleSelected(t)} method isSelected (line 21) | isSelected(t){return this.#p.isSelected(t)} method unselect (line 21) | unselect(t){this.#p.unselect(t)} method pointerup (line 21) | pointerup(t){const{isMac:e}=util_FeatureTest.platform;if(!(0!==t.butto... method pointerdown (line 21) | pointerdown(t){this.#p.getMode()===p.HIGHLIGHT&&this.enableTextSelecti... method findNewParent (line 21) | findNewParent(t,e,i){const s=this.#p.findParent(e,i);if(null===s||s===... method destroy (line 21) | destroy(){if(this.#p.getActive()?.parent===this){this.#p.commitOrRemov... method #Ur (line 21) | #Ur(){this.#Br=!0;for(const t of this.#Or.values())t.isEmpty()&&t.remo... method render (line 21) | render({viewport:t}){this.viewport=t;setLayerDimensions(this.div,t);fo... method update (line 21) | update({viewport:t}){this.#p.commitOrRemove();this.#Ur();const e=this.... method pageDimensions (line 21) | get pageDimensions(){const{pageWidth:t,pageHeight:e}=this.viewport.raw... method scale (line 21) | get scale(){return this.#p.viewParameters.realScale} class DrawLayer (line 21) | class DrawLayer{#xs=null;#b=0;#Gr=new Map;#qr=new Map;constructor({pageI... method constructor (line 21) | constructor({pageIndex:t}){this.pageIndex=t} method setParent (line 21) | setParent(t){if(this.#xs){if(this.#xs!==t){if(this.#Gr.size>0)for(cons... method _svgFactory (line 21) | static get _svgFactory(){return shadow(this,"_svgFactory",new DOMSVGFa... method #Xr (line 21) | static#Xr(t,{x:e=0,y:i=0,width:s=1,height:n=1}={}){const{style:a}=t;a.... method #Kr (line 21) | #Kr(t){const e=DrawLayer._svgFactory.create(1,1,!0);this.#xs.append(e)... method #Yr (line 21) | #Yr(t,e){const i=DrawLayer._svgFactory.createElement("clipPath");t.app... method highlight (line 21) | highlight(t,e,i,s=!1){const n=this.#b++,a=this.#Kr(t.box);a.classList.... method highlightOutline (line 21) | highlightOutline(t){const e=this.#b++,i=this.#Kr(t.box);i.classList.ad... method finalizeLine (line 21) | finalizeLine(t,e){const i=this.#qr.get(t);this.#qr.delete(t);this.upda... method updateLine (line 21) | updateLine(t,e){this.#Gr.get(t).firstChild.firstChild.setAttribute("d"... method removeFreeHighlight (line 21) | removeFreeHighlight(t){this.remove(t);this.#qr.delete(t)} method updatePath (line 21) | updatePath(t,e){this.#qr.get(t).setAttribute("d",e.toSVGPath())} method updateBox (line 21) | updateBox(t,e){DrawLayer.#Xr(this.#Gr.get(t),e)} method show (line 21) | show(t,e){this.#Gr.get(t).classList.toggle("hidden",!e)} method rotate (line 21) | rotate(t,e){this.#Gr.get(t).setAttribute("data-main-rotation",e)} method changeColor (line 21) | changeColor(t,e){this.#Gr.get(t).setAttribute("fill",e)} method changeOpacity (line 21) | changeOpacity(t,e){this.#Gr.get(t).setAttribute("fill-opacity",e)} method addClass (line 21) | addClass(t,e){this.#Gr.get(t).classList.add(e)} method removeClass (line 21) | removeClass(t,e){this.#Gr.get(t).classList.remove(e)} method remove (line 21) | remove(t){if(null!==this.#xs){this.#Gr.get(t).remove();this.#Gr.delete... method destroy (line 21) | destroy(){this.#xs=null;for(const t of this.#Gr.values())t.remove();th... FILE: src/NetworkOptimizer.Web/wwwroot/lib/pdf.worker.min.mjs function getVerbosityLevel (line 21) | function getVerbosityLevel(){return st} function info (line 21) | function info(e){st>=pA.INFOS&&console.log(`Info: ${e}`)} function warn (line 21) | function warn(e){st>=pA.WARNINGS&&console.log(`Warning: ${e}`)} function unreachable (line 21) | function unreachable(e){throw new Error(e)} function assert (line 21) | function assert(e,t){e||unreachable(t)} function createValidAbsoluteUrl (line 21) | function createValidAbsoluteUrl(e,t=null,i=null){if(!e)return null;try{i... function shadow (line 21) | function shadow(e,t,i,a=!1){Object.defineProperty(e,t,{value:i,enumerabl... function BaseException (line 21) | function BaseException(e,t){this.constructor===BaseException&&unreachabl... class PasswordException (line 21) | class PasswordException extends rt{constructor(e,t){super(e,"PasswordExc... method constructor (line 21) | constructor(e,t){super(e,"PasswordException");this.code=t} class UnknownErrorException (line 21) | class UnknownErrorException extends rt{constructor(e,t){super(e,"Unknown... method constructor (line 21) | constructor(e,t){super(e,"UnknownErrorException");this.details=t} class InvalidPDFException (line 21) | class InvalidPDFException extends rt{constructor(e){super(e,"InvalidPDFE... method constructor (line 21) | constructor(e){super(e,"InvalidPDFException")} class MissingPDFException (line 21) | class MissingPDFException extends rt{constructor(e){super(e,"MissingPDFE... method constructor (line 21) | constructor(e){super(e,"MissingPDFException")} class UnexpectedResponseException (line 21) | class UnexpectedResponseException extends rt{constructor(e,t){super(e,"U... method constructor (line 21) | constructor(e,t){super(e,"UnexpectedResponseException");this.status=t} class FormatError (line 21) | class FormatError extends rt{constructor(e){super(e,"FormatError")}} method constructor (line 21) | constructor(e){super(e,"FormatError")} class AbortException (line 21) | class AbortException extends rt{constructor(e){super(e,"AbortException")}} method constructor (line 21) | constructor(e){super(e,"AbortException")} function bytesToString (line 21) | function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreac... function stringToBytes (line 21) | function stringToBytes(e){"string"!=typeof e&&unreachable("Invalid argum... function string32 (line 21) | function string32(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8... function objectSize (line 21) | function objectSize(e){return Object.keys(e).length} class FeatureTest (line 21) | class FeatureTest{static get isLittleEndian(){return shadow(this,"isLitt... method isLittleEndian (line 21) | static get isLittleEndian(){return shadow(this,"isLittleEndian",functi... method isEvalSupported (line 21) | static get isEvalSupported(){return shadow(this,"isEvalSupported",func... method isOffscreenCanvasSupported (line 21) | static get isOffscreenCanvasSupported(){return shadow(this,"isOffscree... method platform (line 21) | static get platform(){return"undefined"!=typeof navigator&&"string"==t... method isCSSRoundSupported (line 21) | static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupport... class Util (line 21) | class Util{static makeHexColor(e,t,i){return`#${nt[e]}${nt[t]}${nt[i]}`}... method makeHexColor (line 21) | static makeHexColor(e,t,i){return`#${nt[e]}${nt[t]}${nt[i]}`} method scaleMinMax (line 21) | static scaleMinMax(e,t){let i;if(e[0]){if(e[0]<0){i=t[0];t[0]=t[2];t[2... method transform (line 21) | static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e... method applyTransform (line 21) | static applyTransform(e,t){return[e[0]*t[0]+e[1]*t[2]+t[4],e[0]*t[1]+e... method applyInverseTransform (line 21) | static applyInverseTransform(e,t){const i=t[0]*t[3]-t[1]*t[2];return[(... method getAxialAlignedBoundingBox (line 21) | static getAxialAlignedBoundingBox(e,t){const i=this.applyTransform(e,t... method inverseTransform (line 21) | static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-... method singularValueDecompose2dScale (line 21) | static singularValueDecompose2dScale(e){const t=[e[0],e[2],e[1],e[3]],... method normalizeRect (line 21) | static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2... method intersect (line 21) | static intersect(e,t){const i=Math.max(Math.min(e[0],e[2]),Math.min(t[... method #A (line 21) | static#A(e,t,i,a,s,r,n,g,o,c){if(o<=0||o>=1)return;const C=1-o,h=o*o,l... method #e (line 21) | static#e(e,t,i,a,s,r,n,g,o,c,C,h){if(Math.abs(o)<1e-12){Math.abs(c)>=1... method bezierBoundingBox (line 21) | static bezierBoundingBox(e,t,i,a,s,r,n,g,o){if(o){o[0]=Math.min(o[0],e... function stringToPDFString (line 21) | function stringToPDFString(e){if(e[0]>="ï"){let t;if("þ"===e[0]&&"ÿ"===e... function stringToUTF8String (line 21) | function stringToUTF8String(e){return decodeURIComponent(escape(e))} function utf8StringToString (line 21) | function utf8StringToString(e){return unescape(encodeURIComponent(e))} function isArrayEqual (line 21) | function isArrayEqual(e,t){if(e.length!==t.length)return!1;for(let i=0,a... function getModificationDate (line 21) | function getModificationDate(e=new Date){return[e.getUTCFullYear().toStr... class Name (line 21) | class Name{constructor(e){this.name=e}static get(e){return yt[e]||=new N... method constructor (line 21) | constructor(e){this.name=e} method get (line 21) | static get(e){return yt[e]||=new Name(e)} class Cmd (line 21) | class Cmd{constructor(e){this.cmd=e}static get(e){return mt[e]||=new Cmd... method constructor (line 21) | constructor(e){this.cmd=e} method get (line 21) | static get(e){return mt[e]||=new Cmd(e)} class Dict (line 21) | class Dict{constructor(e=null){this._map=Object.create(null);this.xref=e... method constructor (line 21) | constructor(e=null){this._map=Object.create(null);this.xref=e;this.obj... method assignXref (line 21) | assignXref(e){this.xref=e} method size (line 21) | get size(){return Object.keys(this._map).length} method get (line 21) | get(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=this._map[t... method getAsync (line 21) | async getAsync(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=... method getArray (line 21) | getArray(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=this._... method getRaw (line 21) | getRaw(e){return this._map[e]} method getKeys (line 21) | getKeys(){return Object.keys(this._map)} method getRawValues (line 21) | getRawValues(){return Object.values(this._map)} method set (line 21) | set(e,t){this._map[e]=t} method has (line 21) | has(e){return void 0!==this._map[e]} method forEach (line 21) | forEach(e){for(const t in this._map)e(t,this.get(t))} method empty (line 21) | static get empty(){const e=new Dict(null);e.set=(e,t)=>{unreachable("S... method merge (line 21) | static merge({xref:e,dictArray:t,mergeSubDicts:i=!1}){const a=new Dict... method clone (line 21) | clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.se... class Ref (line 21) | class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===t... method constructor (line 21) | constructor(e,t){this.num=e;this.gen=t} method toString (line 21) | toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`} method fromString (line 21) | static fromString(e){const t=wt[e];if(t)return t;const i=/^(\d+)R(\d*)... method get (line 21) | static get(e,t){const i=0===t?`${e}R`:`${e}R${t}`;return wt[i]||=new R... class RefSet (line 21) | class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){retur... method constructor (line 21) | constructor(e=null){this._set=new Set(e?._set)} method has (line 21) | has(e){return this._set.has(e.toString())} method put (line 21) | put(e){this._set.add(e.toString())} method remove (line 21) | remove(e){this._set.delete(e.toString())} method clear (line 21) | clear(){this._set.clear()} method [Symbol.iterator] (line 21) | [Symbol.iterator](){return this._set.values()} class RefSetCache (line 21) | class RefSetCache{constructor(){this._map=new Map}get size(){return this... method constructor (line 21) | constructor(){this._map=new Map} method size (line 21) | get size(){return this._map.size} method get (line 21) | get(e){return this._map.get(e.toString())} method has (line 21) | has(e){return this._map.has(e.toString())} method put (line 21) | put(e,t){this._map.set(e.toString(),t)} method putAlias (line 21) | putAlias(e,t){this._map.set(e.toString(),this.get(t))} method clear (line 21) | clear(){this._map.clear()} method items (line 21) | *items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]} method [Symbol.iterator] (line 21) | [Symbol.iterator](){return this._map.values()} function isName (line 21) | function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)} function isCmd (line 21) | function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)} function isDict (line 21) | function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get... function isRefsEqual (line 21) | function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen} class BaseStream (line 21) | class BaseStream{constructor(){this.constructor===BaseStream&&unreachabl... method constructor (line 21) | constructor(){this.constructor===BaseStream&&unreachable("Cannot initi... method length (line 21) | get length(){unreachable("Abstract getter `length` accessed")} method isEmpty (line 21) | get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")} method isDataLoaded (line 21) | get isDataLoaded(){return shadow(this,"isDataLoaded",!0)} method getByte (line 21) | getByte(){unreachable("Abstract method `getByte` called")} method getBytes (line 21) | getBytes(e){unreachable("Abstract method `getBytes` called")} method getImageData (line 21) | async getImageData(e,t){return this.getBytes(e,t)} method asyncGetBytes (line 21) | async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` cal... method isAsync (line 21) | get isAsync(){return!1} method canAsyncDecodeImageFromBuffer (line 21) | get canAsyncDecodeImageFromBuffer(){return!1} method peekByte (line 21) | peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e} method peekBytes (line 21) | peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t} method getUint16 (line 21) | getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1==... method getInt32 (line 21) | getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getBy... method getByteRange (line 21) | getByteRange(e,t){unreachable("Abstract method `getByteRange` called")} method getString (line 21) | getString(e){return bytesToString(this.getBytes(e))} method skip (line 21) | skip(e){this.pos+=e||1} method reset (line 21) | reset(){unreachable("Abstract method `reset` called")} method moveStart (line 21) | moveStart(){unreachable("Abstract method `moveStart` called")} method makeSubStream (line 21) | makeSubStream(e,t,i=null){unreachable("Abstract method `makeSubStream`... method getBaseStreams (line 21) | getBaseStreams(){return null} function getLookupTableFactory (line 21) | function getLookupTableFactory(e){let t;return function(){if(e){t=Object... class MissingDataException (line 21) | class MissingDataException extends rt{constructor(e,t){super(`Missing da... method constructor (line 21) | constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataExcepti... class ParserEOFException (line 21) | class ParserEOFException extends rt{constructor(e){super(e,"ParserEOFExc... method constructor (line 21) | constructor(e){super(e,"ParserEOFException")} class XRefEntryException (line 21) | class XRefEntryException extends rt{constructor(e){super(e,"XRefEntryExc... method constructor (line 21) | constructor(e){super(e,"XRefEntryException")} class XRefParseException (line 21) | class XRefParseException extends rt{constructor(e){super(e,"XRefParseExc... method constructor (line 21) | constructor(e){super(e,"XRefParseException")} function arrayBuffersToBytes (line 21) | function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uin... function getInheritableProperty (line 21) | function getInheritableProperty({dict:e,key:t,getArray:i=!1,stopWhenFoun... function toRomanNumerals (line 21) | function toRomanNumerals(e,t=!1){assert(Number.isInteger(e)&&e>0,"The nu... function log2 (line 21) | function log2(e){return e<=0?0:Math.ceil(Math.log2(e))} function readInt8 (line 21) | function readInt8(e,t){return e[t]<<24>>24} function readUint16 (line 21) | function readUint16(e,t){return e[t]<<8|e[t+1]} function readUint32 (line 21) | function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0} function isWhiteSpace (line 21) | function isWhiteSpace(e){return 32===e||9===e||13===e||10===e} function isNumberArray (line 21) | function isNumberArray(e,t){return Array.isArray(e)&&(null===t||e.length... function lookupMatrix (line 21) | function lookupMatrix(e,t){return isNumberArray(e,6)?e:t} function lookupRect (line 21) | function lookupRect(e,t){return isNumberArray(e,4)?e:t} function lookupNormalRect (line 21) | function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeR... function parseXFAPath (line 21) | function parseXFAPath(e){const t=/(.+)\[(\d+)\]$/;return e.split(".").ma... function escapePDFName (line 21) | function escapePDFName(e){const t=[];let i=0;for(let a=0,s=e.length;a"\n"===... function _collectJS (line 21) | function _collectJS(e,t,i,a){if(!e)return;let s=null;if(e instanceof Ref... function collectActions (line 21) | function collectActions(e,t,i){const a=Object.create(null),s=getInherita... function encodeToXmlString (line 21) | function encodeToXmlString(e){const t=[];let i=0;for(let a=0,s=e.length;... function validateFontName (line 21) | function validateFontName(e,t=!1){const i=/^("|').*("|')$/.exec(e);if(i&... function validateCSSFont (line 21) | function validateCSSFont(e){const t=new Set(["100","200","300","400","50... function recoverJsURL (line 21) | function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","w... function numberToString (line 21) | function numberToString(e){if(Number.isInteger(e))return e.toString();co... function getNewAnnotationsMap (line 21) | function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(c... function isAscii (line 21) | function isAscii(e){return/^[\x00-\x7F]*$/.test(e)} function stringToUTF16HexString (line 21) | function stringToUTF16HexString(e){const t=[];for(let i=0,a=e.length;i=this.end?-1:this.bytes[this.pos++]} method getBytes (line 21) | getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e)return t.su... method getByteRange (line 21) | getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.byte... method reset (line 21) | reset(){this.pos=this.start} method moveStart (line 21) | moveStart(){this.start=this.pos} method makeSubStream (line 21) | makeSubStream(e,t,i=null){return new Stream(this.bytes.buffer,e,t,i)} class StringStream (line 21) | class StringStream extends Stream{constructor(e){super(stringToBytes(e))}} method constructor (line 21) | constructor(e){super(stringToBytes(e))} class NullStream (line 21) | class NullStream extends Stream{constructor(){super(new Uint8Array(0))}} method constructor (line 21) | constructor(){super(new Uint8Array(0))} class ChunkedStream (line 21) | class ChunkedStream extends Stream{constructor(e,t,i){super(new Uint8Arr... method constructor (line 21) | constructor(e,t,i){super(new Uint8Array(e),0,e,null);this.chunkSize=t;... method getMissingChunks (line 21) | getMissingChunks(){const e=[];for(let t=0,i=this.numChunks;t=t)return;if(t<=this.progressiveDataLength)retur... method nextEmptyChunk (line 21) | nextEmptyChunk(e){const t=this.numChunks;for(let i=0;i=this.end)return-1;e>=this.progressive... method getBytes (line 21) | getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e){a>this.pro... method getByteRange (line 21) | getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressi... method makeSubStream (line 21) | makeSubStream(e,t,i=null){t?e+t>this.progressiveDataLength&&this.ensur... method getBaseStreams (line 21) | getBaseStreams(){return[this]} class ChunkedStreamManager (line 21) | class ChunkedStreamManager{constructor(e,t){this.length=t.length;this.ch... method constructor (line 21) | constructor(e,t){this.length=t.length;this.chunkSize=t.rangeChunkSize;... method sendRequest (line 21) | sendRequest(e,t){const i=this.pdfNetworkStream.getRangeReader(e,t);i.i... method requestAllChunks (line 21) | requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();t... method _requestChunks (line 21) | _requestChunks(e){const t=this.currRequestId++,i=new Set;this._chunksN... method getStream (line 21) | getStream(){return this.stream} method requestRange (line 21) | requestRange(e,t){t=Math.min(t,this.length);const i=this.getBeginChunk... method requestRanges (line 21) | requestRanges(e=[]){const t=[];for(const i of e){const e=this.getBegin... method groupChunks (line 21) | groupChunks(e){const t=[];let i=-1,a=-1;for(let s=0,r=e.length;s=.99554525?1:this.#l(0... method #l (line 21) | #l(e,t,i){return Math.max(e,Math.min(t,i))} method #Q (line 21) | #Q(e){return e<0?-this.#Q(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#I} method #E (line 21) | #E(e,t,i){if(0===e[0]&&0===e[1]&&0===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[... method #u (line 21) | #u(e,t,i){if(1===e[0]&&1===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[2];return}... method #d (line 21) | #d(e,t,i){const a=i;this.#c(CalRGBCS.#i,t,a);const s=CalRGBCS.#n;this.... method #t (line 21) | #t(e,t,i,a,s){const r=this.#l(0,1,e[t]*s),n=this.#l(0,1,e[t+1]*s),g=th... method getRgbItem (line 21) | getRgbItem(e,t,i,a){this.#t(e,t,i,a,1)} method getRgbBuffer (line 21) | getRgbBuffer(e,t,i,a,s,r,n){const g=1/((1<=6/29?e**3:108/841*(e-4/29)} method #p (line 21) | #p(e,t,i,a){return i+e*(a-i)/t} method #t (line 21) | #t(e,t,i,a,s){let r=e[t],n=e[t+1],g=e[t+2];if(!1!==i){r=this.#p(r,i,0,... method getRgbItem (line 21) | getRgbItem(e,t,i,a){this.#t(e,t,!1,i,a)} method getRgbBuffer (line 21) | getRgbBuffer(e,t,i,a,s,r,n){const g=(1<=0;s--){a+=e[s]+t[s];e[s]=2... function incHex (line 21) | function incHex(e,t){let i=1;for(let a=t;a>=0&&i>0;a--){i+=e[a];e[a]=255... class BinaryCMapStream (line 21) | class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=... method constructor (line 21) | constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=... method readByte (line 21) | readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]} method readNumber (line 21) | readNumber(){let e,t=0;do{const i=this.readByte();if(i<0)throw new For... method readSigned (line 21) | readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1} method readHex (line 21) | readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.p... method readHexNumber (line 21) | readHexNumber(e,t){let i;const a=this.tmpBuf;let s=0;do{const e=this.r... method readHexSigned (line 21) | readHexSigned(e,t){this.readHexNumber(e,t);const i=1&e[t]?255:0;let a=... method readString (line 21) | readString(){const e=this.readNumber(),t=new Array(e);for(let i=0;ii[a]... method _addPixelsNeg (line 21) | _addPixelsNeg(e,t){const i=this.codingLine;let a=this.codingPos;if(e>i... method _findTableCode (line 21) | _findTableCode(e,t,i,a){const s=a||0;for(let a=e;a<=t;++a){let e=this.... method _getTwoDimCode (line 21) | _getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Gt[t... method _getWhiteCode (line 21) | _getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t==... method _getBlackCode (line 21) | _getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===N... method _lookBits (line 21) | _lookBits(e){let t;for(;this.inputBits143){... method readBit (line 21) | readBit(e,t){let i=e[t]>>1,a=1&e[t];const s=qt[i],r=s.qe;let n,g=this.... class Jbig2Error (line 21) | class Jbig2Error extends rt{constructor(e){super(e,"Jbig2Error")}} method constructor (line 21) | constructor(e){super(e,"Jbig2Error")} class ContextCache (line 21) | class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new I... method getContexts (line 21) | getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)} class DecodingContext (line 21) | class DecodingContext{constructor(e,t,i){this.data=e;this.start=t;this.e... method constructor (line 21) | constructor(e,t,i){this.data=e;this.start=t;this.end=i} method decoder (line 21) | get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.... method contextCache (line 21) | get contextCache(){return shadow(this,"contextCache",new ContextCache)} function decodeInteger (line 21) | function decodeInteger(e,t,i){const a=e.getContexts(t);let s=1;function ... function decodeIAID (line 21) | function decodeIAID(e,t,i){const a=e.getContexts("IAID");let s=1;for(let... function decodeBitmap (line 21) | function decodeBitmap(e,t,i,a,s,r,n,g){if(e){return decodeMMRBitmap(new ... function decodeRefinement (line 21) | function decodeRefinement(e,t,i,a,s,r,n,g,o){let c=Xt[i].coding;0===i&&(... function decodeTextRegion (line 21) | function decodeTextRegion(e,t,i,a,s,r,n,g,o,c,C,h,l,Q,E,u,d,f,p){if(e&&t... function readSegmentHeader (line 21) | function readSegmentHeader(e,t){const i={};i.number=readUint32(e,t);cons... function readSegments (line 21) | function readSegments(e,t,i,a){const s=[];let r=i;for(;r>3,i=new... method drawBitmap (line 21) | drawBitmap(e,t){const i=this.currentPageInfo,a=e.width,s=e.height,r=i.... method onImmediateGenericRegion (line 21) | onImmediateGenericRegion(e,t,i,a){const s=e.info,r=new DecodingContext... method onImmediateLosslessGenericRegion (line 21) | onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...ar... method onSymbolDictionary (line 21) | onSymbolDictionary(e,t,i,a,s,r){let n,g;if(e.huffman){n=function getSy... method onImmediateTextRegion (line 21) | onImmediateTextRegion(e,t,i,a,s){const r=e.info;let n,g;const o=this.s... method onImmediateLosslessTextRegion (line 21) | onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)} method onPatternDictionary (line 21) | onPatternDictionary(e,t,i,a,s){let r=this.patterns;r||(this.patterns=r... method onImmediateHalftoneRegion (line 21) | onImmediateHalftoneRegion(e,t,i,a,s){const r=this.patterns[t[0]],n=e.i... method onImmediateLosslessHalftoneRegion (line 21) | onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...... method onTables (line 21) | onTables(e,t,i,a){let s=this.customTables;s||(this.customTables=s={});... class HuffmanLine (line 21) | class HuffmanLine{constructor(e){if(2===e.length){this.isOOB=!0;this.ran... method constructor (line 21) | constructor(e){if(2===e.length){this.isOOB=!0;this.rangeLow=0;this.pre... class HuffmanTreeNode (line 21) | class HuffmanTreeNode{constructor(e){this.children=[];if(e){this.isLeaf=... method constructor (line 21) | constructor(e){this.children=[];if(e){this.isLeaf=!0;this.rangeLength=... method buildTree (line 21) | buildTree(e,t){const i=e.prefixCode>>t&1;if(t<=0)this.children[i]=new ... method decodeNode (line 21) | decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.read... class HuffmanTable (line 21) | class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.ro... method constructor (line 21) | constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new Huffma... method decode (line 21) | decode(e){return this.rootNode.decodeNode(e)} method assignPrefixCodes (line 21) | assignPrefixCodes(e){const t=e.length;let i=0;for(let a=0;a=this.end)throw new Jbig2E... method readBits (line 21) | readBits(e){let t,i=0;for(t=e-1;t>=0;t--)i|=this.readBit()<=this.end?-1:this.data[this.position++]} function getCustomHuffmanTable (line 21) | function getCustomHuffmanTable(e,t,i){let a=0;for(let s=0,r=t.length;s0&&!e[r-1];)r--;... function getBlockBufferOffset (line 21) | function getBlockBufferOffset(e,t,i){return 64*((e.blocksPerLine+1)*t+i)} function decodeScan (line 21) | function decodeScan(e,t,i,a,s,r,n,g,o,c=!1){const C=i.mcusPerLine,h=i.pr... function quantizeAndInverse (line 21) | function quantizeAndInverse(e,t,i){const a=e.quantizationTable,s=e.block... function buildComponentData (line 21) | function buildComponentData(e,t){const i=t.blocksPerLine,a=t.blocksPerCo... function findNextFileMarker (line 21) | function findNextFileMarker(e,t,i=t){const a=e.length-1;let s=i0)){!function preRun(){if(a.preRun){"function"==ty... class JpxError (line 21) | class JpxError extends rt{constructor(e){super(e,"JpxError")}} method constructor (line 21) | constructor(e){super(e,"JpxError")} class JpxImage (line 21) | class JpxImage{static#y=null;static decode(e,t){t||={};this.#y||=Ii({war... method decode (line 21) | static decode(e,t){t||={};this.#y||=Ii({warn});const i=this.#y.decode(... method cleanup (line 21) | static cleanup(){this.#y=null} method parseImageProperties (line 21) | static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const i=t... class JpxStream (line 21) | class JpxStream extends DecodeStream{constructor(e,t,i){super(t);this.st... method constructor (line 21) | constructor(e,t,i){super(t);this.stream=e;this.dict=e.dict;this.maybeL... method bytes (line 21) | get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybe... method ensureBuffer (line 21) | ensureBuffer(e){} method readBlock (line 21) | readBlock(e){this.decodeImage(null,e)} method decodeImage (line 21) | decodeImage(e,t){if(this.eof)return this.buffer;e||=this.bytes;this.bu... method canAsyncDecodeImageFromBuffer (line 21) | get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync} class LZWStream (line 21) | class LZWStream extends DecodeStream{constructor(e,t,i){super(t);this.st... method constructor (line 21) | constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.cachedDat... method readBits (line 21) | readBits(e){let t=this.bitsCached,i=this.cachedData;for(;t=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=... class Lexer (line 21) | class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.str... method constructor (line 21) | constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];thi... method nextChar (line 21) | nextChar(){return this.currentChar=this.stream.getByte()} method peekChar (line 21) | peekChar(){return this.stream.peekByte()} method getNumber (line 21) | getNumber(){let e=this.currentChar,t=!1,i=0,a=1;if(45===e){a=-1;e=this... method getString (line 21) | getString(){let e=1,t=!1;const i=this.strBuf;i.length=0;let a=this.nex... method getName (line 21) | getName(){let e,t;const i=this.strBuf;i.length=0;for(;(e=this.nextChar... method _hexStringWarn (line 21) | _hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5... method getHexString (line 21) | getHexString(){const e=this.strBuf;e.length=0;let t,i,a=this.currentCh... method getObj (line 21) | getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return pt;if(e)10!... method skipToNextLine (line 21) | skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.... class Linearization (line 21) | class Linearization{static create(e){function getInt(e,t,i=!1){const a=e... method create (line 21) | static create(e){function getInt(e,t,i=!1){const a=e.get(t);if(Number.... class CMap (line 21) | class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.num... method constructor (line 21) | constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespace... method addCodespaceRange (line 21) | addCodespaceRange(e,t,i){this.codespaceRanges[e-1].push(t,i);this.numC... method mapCidRange (line 21) | mapCidRange(e,t,i){if(t-e>hi)throw new Error("mapCidRange - ignoring d... method mapBfRange (line 21) | mapBfRange(e,t,i){if(t-e>hi)throw new Error("mapBfRange - ignoring dat... method mapBfRangeToArray (line 21) | mapBfRangeToArray(e,t,i){if(t-e>hi)throw new Error("mapBfRangeToArray ... method mapOne (line 21) | mapOne(e,t){this._map[e]=t} method lookup (line 21) | lookup(e){return this._map[e]} method contains (line 21) | contains(e){return void 0!==this._map[e]} method forEach (line 21) | forEach(e){const t=this._map,i=t.length;if(i<=65536)for(let a=0;a10)return!1;let s=e.stackS... method parseCharStrings (line 21) | parseCharStrings({charStrings:e,localSubrIndex:t,globalSubrIndex:i,fdS... method emptyPrivateDictionary (line 21) | emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.... method parsePrivateDict (line 21) | parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDiction... method parseCharsets (line 21) | parseCharsets(e,t,i,a){if(0===e)return new CFFCharset(!0,Ri.ISO_ADOBE,... method parseEncoding (line 21) | parseEncoding(e,t,i,a){const s=Object.create(null),r=this.bytes;let n,... method parseFDSelect (line 21) | parseFDSelect(e,t){const i=this.bytes,a=i[e++],s=[];let r;switch(a){ca... class CFF (line 21) | class CFF{constructor(){this.header=null;this.names=[];this.topDict=null... method constructor (line 21) | constructor(){this.header=null;this.names=[];this.topDict=null;this.st... method duplicateFirstGlyph (line 21) | duplicateFirstGlyph(){if(this.charStrings.count>=65535){warn("Not enou... method hasGlyphId (line 21) | hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.c... class CFFHeader (line 21) | class CFFHeader{constructor(e,t,i,a){this.major=e;this.minor=t;this.hdrS... method constructor (line 21) | constructor(e,t,i,a){this.major=e;this.minor=t;this.hdrSize=i;this.off... class CFFStrings (line 21) | class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=39... method constructor (line 21) | constructor(){this.strings=[]} method get (line 21) | get(e){return e>=0&&e<=390?wi[e]:e-Di<=this.strings.length?this.string... method getSID (line 21) | getSID(e){let t=wi.indexOf(e);if(-1!==t)return t;t=this.strings.indexO... method add (line 21) | add(e){this.strings.push(e)} method count (line 21) | get count(){return this.strings.length} class CFFIndex (line 21) | class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.l... method constructor (line 21) | constructor(){this.objects=[];this.length=0} method add (line 21) | add(e){this.length+=e.length;this.objects.push(e)} method set (line 21) | set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t} method get (line 21) | get(e){return this.objects[e]} method count (line 21) | get count(){return this.objects.length} class CFFDict (line 21) | class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nam... method constructor (line 21) | constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.... method setByKey (line 21) | setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)re... method setByName (line 21) | setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Inv... method hasName (line 21) | hasName(e){return this.nameToKeyMap[e]in this.values} method getByName (line 21) | getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Inval... method removeByName (line 21) | removeByName(e){delete this.values[this.nameToKeyMap[e]]} method createTables (line 21) | static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaul... class CFFTopDict (line 21) | class CFFTopDict extends CFFDict{static get tables(){return shadow(this,... method tables (line 21) | static get tables(){return shadow(this,"tables",this.createTables(Si))} method constructor (line 21) | constructor(e){super(CFFTopDict.tables,e);this.privateDict=null} class CFFPrivateDict (line 21) | class CFFPrivateDict extends CFFDict{static get tables(){return shadow(t... method tables (line 21) | static get tables(){return shadow(this,"tables",this.createTables(ki))} method constructor (line 21) | constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null} class CFFCharset (line 21) | class CFFCharset{constructor(e,t,i,a){this.predefined=e;this.format=t;th... method constructor (line 21) | constructor(e,t,i,a){this.predefined=e;this.format=t;this.charset=i;th... class CFFEncoding (line 21) | class CFFEncoding{constructor(e,t,i,a){this.predefined=e;this.format=t;t... method constructor (line 21) | constructor(e,t,i,a){this.predefined=e;this.format=t;this.encoding=i;t... class CFFFDSelect (line 21) | class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIn... method constructor (line 21) | constructor(e,t){this.format=e;this.fdSelect=t} method getFDIndex (line 21) | getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]} class CFFOffsetTracker (line 21) | class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}is... method constructor (line 21) | constructor(){this.offsets=Object.create(null)} method isTracking (line 21) | isTracking(e){return e in this.offsets} method track (line 21) | track(e,t){if(e in this.offsets)throw new FormatError(`Already trackin... method offset (line 21) | offset(e){for(const t in this.offsets)this.offsets[t]+=e} method setEntryLocation (line 21) | setEntryLocation(e,t,i){if(!(e in this.offsets))throw new FormatError(... class CFFCompiler (line 21) | class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t... method constructor (line 21) | constructor(e){this.cff=e} method compile (line 21) | compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.pu... method encodeNumber (line 21) | encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.... method EncodeFloatRegExp (line 21) | static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",... method encodeFloat (line 21) | encodeFloat(e){let t=e.toString();const i=CFFCompiler.EncodeFloatRegEx... method encodeInteger (line 21) | encodeInteger(e){let t;t=e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+... method compileHeader (line 21) | compileHeader(e){return[e.major,e.minor,4,e.offSize]} method compileNameIndex (line 21) | compileNameIndex(e){const t=new CFFIndex;for(const i of e){const e=Mat... method compileTopDicts (line 21) | compileTopDicts(e,t,i){const a=[];let s=new CFFIndex;for(const r of e)... method compilePrivateDicts (line 21) | compilePrivateDicts(e,t,i){for(let a=0,s=e.length;a=this.firstChar&&e<=this.l... method amend (line 21) | amend(e){unreachable("Should not call amend()")} class CFFFont (line 21) | class CFFFont{constructor(e,t){this.properties=t;const i=new CFFParser(e... method constructor (line 21) | constructor(e,t){this.properties=t;const i=new CFFParser(e,t,Yi);this.... method numGlyphs (line 21) | get numGlyphs(){return this.cff.charStrings.count} method getCharset (line 21) | getCharset(){return this.cff.charset.charset} method getGlyphMapping (line 21) | getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:i,cM... method hasGlyphId (line 21) | hasGlyphId(e){return this.cff.hasGlyphId(e)} method _createBuiltInEncoding (line 21) | _createBuiltInEncoding(){const{charset:e,encoding:t}=this.cff;if(!e||!... function getUint32 (line 21) | function getUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0} function getUint16 (line 21) | function getUint16(e,t){return e[t]<<8|e[t+1]} function getInt16 (line 21) | function getInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16} function getInt8 (line 21) | function getInt8(e,t){return e[t]<<24>>24} function getFloat214 (line 21) | function getFloat214(e,t){return getInt16(e,t)/16384} function getSubroutineBias (line 21) | function getSubroutineBias(e){const t=e.length;let i=32768;t<1240?i=107:... function parseCmap (line 21) | function parseCmap(e,t,i){const a=1===getUint16(e,t+2)?getUint32(e,t+8):... function parseCff (line 21) | function parseCff(e,t,i,a){const s=new CFFParser(new Stream(e,t,i-t),{},... function lookupCmap (line 21) | function lookupCmap(e,t){const i=t.codePointAt(0);let a=0,s=0,r=e.length... function compileGlyf (line 21) | function compileGlyf(e,t,i){function moveTo(e,i){t.add(Ct,[e,i])}functio... function compileCharString (line 21) | function compileCharString(e,t,i,a){function moveTo(e,i){t.add(Ct,[e,i])... class Commands (line 21) | class Commands{cmds=[];add(e,t){if(t)if(isNumberArray(t,null))this.cmds.... method add (line 21) | add(e,t){if(t)if(isNumberArray(t,null))this.cmds.push(e,...t);else{war... class CompiledFont (line 21) | class CompiledFont{constructor(e){this.constructor===CompiledFont&&unrea... method constructor (line 21) | constructor(e){this.constructor===CompiledFont&&unreachable("Cannot in... method getPathJs (line 21) | getPathJs(e){const{charCode:t,glyphId:i}=lookupCmap(this.cmap,e);let a... method compileGlyph (line 21) | compileGlyph(e,t){if(!e||0===e.length||14===e[0])return $i;let i=this.... method compileGlyphImpl (line 21) | compileGlyphImpl(){unreachable("Children classes should implement this... method hasBuiltPath (line 21) | hasBuiltPath(e){const{charCode:t,glyphId:i}=lookupCmap(this.cmap,e);re... class TrueTypeCompiled (line 21) | class TrueTypeCompiled extends CompiledFont{constructor(e,t,i){super(i||... method constructor (line 21) | constructor(e,t,i){super(i||[488e-6,0,0,488e-6,0,0]);this.glyphs=e;thi... method compileGlyphImpl (line 21) | compileGlyphImpl(e,t){compileGlyf(e,t,this)} class Type2Compiled (line 21) | class Type2Compiled extends CompiledFont{constructor(e,t,i,a){super(i||[... method constructor (line 21) | constructor(e,t,i,a){super(i||[.001,0,0,.001,0,0]);this.glyphs=e.glyph... method compileGlyphImpl (line 21) | compileGlyphImpl(e,t,i){compileCharString(e,t,this,i)} class FontRendererFactory (line 21) | class FontRendererFactory{static create(e,t){const i=new Uint8Array(e.da... method create (line 21) | static create(e,t){const i=new Uint8Array(e.data);let a,s,r,n,g,o;cons... class GlyfTable (line 21) | class GlyfTable{constructor({glyfTable:e,isGlyphLocationsLong:t,locaTabl... method constructor (line 21) | constructor({glyfTable:e,isGlyphLocationsLong:t,locaTable:i,numGlyphs:... method getSize (line 21) | getSize(){return this.glyphs.reduce(((e,t)=>e+(t.getSize()+3&-4)),0)} method write (line 21) | write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),i=e>... method scale (line 21) | scale(e){for(let t=0,i=this.glyphs.length;t=-128&&this.argument1... method scale (line 21) | scale(e,t){} function writeInt16 (line 21) | function writeInt16(e,t,i){e[t]=i>>8&255;e[t+1]=255&i} function writeInt32 (line 21) | function writeInt32(e,t,i){e[t]=i>>24&255;e[t+1]=i>>16&255;e[t+2]=i>>8&2... function writeData (line 21) | function writeData(e,t,i){if(i instanceof Uint8Array)e.set(i,t);else if(... class OpenTypeFileBuilder (line 21) | class OpenTypeFileBuilder{constructor(e){this.sfnt=e;this.tables=Object.... method constructor (line 21) | constructor(e){this.sfnt=e;this.tables=Object.create(null)} method getSearchParams (line 21) | static getSearchParams(e,t){let i=1,a=0;for(;(i^e)>i;){i<<=1;a++}const... method toArray (line 21) | toArray(){let e=this.sfnt;const t=this.tables,i=Object.keys(t);i.sort(... method addTable (line 21) | addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already... class Type1CharString (line 21) | class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing... method constructor (line 21) | constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];t... method convert (line 21) | convert(e,t,i){const a=e.length;let s,r,n,g=!1;for(let o=0;oa)return!0;const ... function isHexDigit (line 21) | function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102} function decrypt (line 21) | function decrypt(e,t,i){if(i>=e.length)return new Uint8Array(0);let a,s,... function isSpecial (line 21) | function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||4... class Type1Parser (line 21) | class Type1Parser{constructor(e,t,i){if(t){const t=e.getBytes(),i=!((isH... method constructor (line 21) | constructor(e,t,i){if(t){const t=e.getBytes(),i=!((isHexDigit(t[0])||i... method readNumberArray (line 21) | readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getT... method readNumber (line 21) | readNumber(){const e=this.getToken();return parseFloat(e||0)} method readInt (line 21) | readInt(){const e=this.getToken();return 0|parseInt(e||0,10)} method readBoolean (line 21) | readBoolean(){return"true"===this.getToken()?1:0} method nextChar (line 21) | nextChar(){return this.currentChar=this.stream.getByte()} method prevChar (line 21) | prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.ge... method getToken (line 21) | getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;i... method readCharStrings (line 21) | readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)} method extractFontProgram (line 21) | extractFontProgram(e){const t=this.stream,i=[],a=[],s=Object.create(nu... method extractFontHeader (line 21) | extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t... function findBlock (line 21) | function findBlock(e,t,i){const a=e.length,s=t.length,r=a-s;let n=i,g=!1... class Type1Font (line 21) | class Type1Font{constructor(e,t,i){let a=i.length1,s=i.length2,r=t.peekB... method constructor (line 21) | constructor(e,t,i){let a=i.length1,s=i.length2,r=t.peekBytes(6);const ... method numGlyphs (line 21) | get numGlyphs(){return this.charstrings.length+1} method getCharset (line 21) | getCharset(){const e=[".notdef"];for(const{glyphName:t}of this.charstr... method getGlyphMapping (line 21) | getGlyphMapping(e){const t=this.charstrings;if(e.composite){const i=Ob... method hasGlyphId (line 21) | hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;ret... method getSeacs (line 21) | getSeacs(e){const t=[];for(let i=0,a=e.length;i>>8} function signedInt16 (line 21) | function signedInt16(e,t){const i=(e<<8)+t;return 32768&i?i-65536:i} function string16 (line 21) | function string16(e){return String.fromCharCode(e>>8&255,255&e)} function safeString16 (line 21) | function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return Str... function isTrueTypeCollectionFile (line 21) | function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peek... function getFontFileType (line 21) | function getFontFileType(e,{type:t,subtype:i,composite:a}){let s,r;if(fu... function applyStandardFontGlyphMap (line 21) | function applyStandardFontGlyphMap(e,t){for(const i in t)e[+i]=t[i]} function buildToFontChar (line 21) | function buildToFontChar(e,t,i){const a=[];let s;for(let i=0,r=e.length;... function isMacNameRecord (line 21) | function isMacNameRecord(e){return 1===e.platform&&0===e.encoding&&0===e... function isWinNameRecord (line 21) | function isWinNameRecord(e){return 3===e.platform&&1===e.encoding&&1033=... function convertCidString (line 21) | function convertCidString(e,t,i=!1){switch(t.length){case 1:return t.cha... function adjustMapping (line 21) | function adjustMapping(e,t,i,a){const s=Object.create(null),r=new Map,n=... function createCmapTable (line 21) | function createCmapTable(e,t,i){const a=function getRanges(e,t,i){const ... function createOS2Table (line 21) | function createOS2Table(e,t,i){i||={unitsPerEm:0,yMax:0,yMin:0,ascent:0,... function createPostTable (line 21) | function createPostTable(e){return"\0\0\0"+string32(Math.floor(65536*e.... function createPostscriptName (line 21) | function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](... function createNameTable (line 21) | function createNameTable(e,t){t||(t=[[],[]]);const i=[t[0][0]||"Original... class Font (line 21) | class Font{constructor(e,t,i){this.name=e;this.psName=null;this.mimetype... method constructor (line 21) | constructor(e,t,i){this.name=e;this.psName=null;this.mimetype=null;thi... method renderer (line 21) | get renderer(){return shadow(this,"renderer",FontRendererFactory.creat... method exportData (line 21) | exportData(e=!1){const t=e?[...la,...Qa]:la,i=Object.create(null);let ... method fallbackToSystemFont (line 21) | fallbackToSystemFont(e){this.missingFile=!0;const{name:t,type:i}=this;... method checkAndRepair (line 21) | checkAndRepair(e,t,i){const a=["OS/2","cmap","head","hhea","hmtx","max... method convert (line 21) | convert(e,t,i){i.fixedPitch=!1;i.builtInEncoding&&function adjustType1... method _charToGlyph (line 21) | _charToGlyph(e,t=!1){let i,a,s,r=this._glyphCache[e];if(r?.isSpace===t... method charsToGlyphs (line 21) | charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.... method getCharPositions (line 21) | getCharPositions(e){const t=[];if(this.cMap){const i=Object.create(nul... method glyphCacheValues (line 21) | get glyphCacheValues(){return Object.values(this._glyphCache)} method encodeString (line 21) | encodeString(e){const t=[],i=[],hasCurrentBufErrors=()=>t.length%2==1,... class ErrorFont (line 21) | class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_erro... method constructor (line 21) | constructor(e){this.error=e;this.loadedName="g_font_error";this.missin... method charsToGlyphs (line 21) | charsToGlyphs(){return[]} method encodeString (line 21) | encodeString(e){return[e]} method exportData (line 21) | exportData(e=!1){return{error:this.error}} class Pattern (line 21) | class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}st... method constructor (line 21) | constructor(){unreachable("Cannot initialize Pattern.")} method parseShading (line 21) | static parseShading(e,t,i,a,s){const r=e instanceof BaseStream?e.dict:... class BaseShading (line 21) | class BaseShading{static SMALL_NUMBER=1e-6;constructor(){this.constructo... method constructor (line 21) | constructor(){this.constructor===BaseShading&&unreachable("Cannot init... method getIR (line 21) | getIR(){unreachable("Abstract method `getIR` called.")} class RadialAxialShading (line 21) | class RadialAxialShading extends BaseShading{constructor(e,t,i,a,s){supe... method constructor (line 21) | constructor(e,t,i,a,s){super();this.shadingType=e.get("ShadingType");l... method getIR (line 21) | getIR(){const{coordsArr:e,shadingType:t}=this;let i,a,s,r,n;if(t===Ea)... class MeshStreamReader (line 21) | class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;thi... method constructor (line 21) | constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.buffe... method hasData (line 21) | get hasData(){if(this.stream.end)return this.stream.pos=PostScriptStack.MAX_STACK_SIZE)throw new... method pop (line 21) | pop(){if(this.stack.length<=0)throw new Error("PostScript function sta... method copy (line 21) | copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw n... method index (line 21) | index(e){this.push(this.stack[this.stack.length-e-1])} method roll (line 21) | roll(e,t){const i=this.stack,a=i.length-e,s=i.length-1,r=a+(t-Math.flo... class PostScriptEvaluator (line 21) | class PostScriptEvaluator{constructor(e){this.operators=e}execute(e){con... method constructor (line 21) | constructor(e){this.operators=e} method execute (line 21) | execute(e){const t=new PostScriptStack(e);let i=0;const a=this.operato... class AstNode (line 21) | class AstNode{constructor(e){this.type=e}visit(e){unreachable("abstract ... method constructor (line 21) | constructor(e){this.type=e} method visit (line 21) | visit(e){unreachable("abstract method")} class AstArgument (line 21) | class AstArgument extends AstNode{constructor(e,t,i){super("args");this.... method constructor (line 21) | constructor(e,t,i){super("args");this.index=e;this.min=t;this.max=i} method visit (line 21) | visit(e){e.visitArgument(this)} class AstLiteral (line 21) | class AstLiteral extends AstNode{constructor(e){super("literal");this.nu... method constructor (line 21) | constructor(e){super("literal");this.number=e;this.min=e;this.max=e} method visit (line 21) | visit(e){e.visitLiteral(this)} class AstBinaryOperation (line 21) | class AstBinaryOperation extends AstNode{constructor(e,t,i,a,s){super("b... method constructor (line 21) | constructor(e,t,i,a,s){super("binary");this.op=e;this.arg1=t;this.arg2... method visit (line 21) | visit(e){e.visitBinaryOperation(this)} class AstMin (line 21) | class AstMin extends AstNode{constructor(e,t){super("max");this.arg=e;th... method constructor (line 21) | constructor(e,t){super("max");this.arg=e;this.min=e.min;this.max=t} method visit (line 21) | visit(e){e.visitMin(this)} class AstVariable (line 21) | class AstVariable extends AstNode{constructor(e,t,i){super("var");this.i... method constructor (line 21) | constructor(e,t,i){super("var");this.index=e;this.min=t;this.max=i} method visit (line 21) | visit(e){e.visitVariable(this)} class AstVariableDefinition (line 21) | class AstVariableDefinition extends AstNode{constructor(e,t){super("defi... method constructor (line 21) | constructor(e,t){super("definition");this.variable=e;this.arg=t} method visit (line 21) | visit(e){e.visitVariableDefinition(this)} class ExpressionBuilderVisitor (line 21) | class ExpressionBuilderVisitor{constructor(){this.parts=[]}visitArgument... method constructor (line 21) | constructor(){this.parts=[]} method visitArgument (line 21) | visitArgument(e){this.parts.push("Math.max(",e.min,", Math.min(",e.max... method visitVariable (line 21) | visitVariable(e){this.parts.push("v",e.index)} method visitLiteral (line 21) | visitLiteral(e){this.parts.push(e.number)} method visitBinaryOperation (line 21) | visitBinaryOperation(e){this.parts.push("(");e.arg1.visit(this);this.p... method visitVariableDefinition (line 21) | visitVariableDefinition(e){this.parts.push("var ");e.variable.visit(th... method visitMin (line 21) | visitMin(e){this.parts.push("Math.min(");e.arg.visit(this);this.parts.... method toString (line 21) | toString(){return this.parts.join("")} function buildAddOperation (line 21) | function buildAddOperation(e,t){return"literal"===t.type&&0===t.number?e... function buildMulOperation (line 21) | function buildMulOperation(e,t){if("literal"===t.type){if(0===t.number)r... function buildSubOperation (line 21) | function buildSubOperation(e,t){if("literal"===t.type){if(0===t.number)r... function buildMinOperation (line 21) | function buildMinOperation(e,t){return e.min>=t?new AstLiteral(t):e.max<... class PostScriptCompiler (line 21) | class PostScriptCompiler{compile(e,t,i){const a=[],s=[],r=t.length>>1,n=... method compile (line 21) | compile(e,t,i){const a=[],s=[],r=t.length>>1,n=i.length>>1;let g,o,c,C... function isOdd (line 21) | function isOdd(e){return 0!=(1&e)} function isEven (line 21) | function isEven(e){return 0==(1&e)} function findUnequal (line 21) | function findUnequal(e,t,i){let a,s;for(a=t,s=e.length;a=0){this._hasMaxArea=!0;shadow(this,"MAX_A... method setMaxArea (line 21) | static setMaxArea(e){this._hasMaxArea||(this.MAX_AREA=e>>2)} method _areGoodDims (line 21) | static _areGoodDims(e,t){try{const i=new OffscreenCanvas(e,t),a=i.getC... method _guessMax (line 21) | static _guessMax(e,t,i,a){for(;e+i+1>>1;e=3981806797*e&ys|36045*e... function addState (line 21) | function addState(e,t,i,a,s){let r=e;for(let e=0,i=t.length-1;ea&&(e=a);return e} function resizeImageMask (line 21) | function resizeImageMask(e,t,i,a,s,r){const n=s*r;let g;g=t<=8?new Uint8... class PDFImage (line 21) | class PDFImage{constructor({xref:e,res:t,image:i,isInline:a=!1,smask:s=n... method constructor (line 21) | constructor({xref:e,res:t,image:i,isInline:a=!1,smask:s=null,mask:r=nu... method buildImage (line 21) | static async buildImage({xref:e,res:t,image:i,isInline:a=!1,pdfFunctio... method createRawMask (line 21) | static createRawMask({imgArray:e,width:t,height:i,imageIsFromDecodeStr... method createMask (line 21) | static async createMask({imgArray:e,width:t,height:i,imageIsFromDecode... method drawWidth (line 21) | get drawWidth(){return Math.max(this.width,this.smask?.width||0,this.m... method drawHeight (line 21) | get drawHeight(){return Math.max(this.height,this.smask?.height||0,thi... method decodeBuffer (line 21) | decodeBuffer(e){const t=this.bpc,i=this.numComps,a=this.decodeAddends,... method getComponents (line 21) | getComponents(e){const t=this.bpc;if(8===t)return e;const i=this.width... method fillOpacity (line 21) | async fillOpacity(e,t,i,a,s){const r=this.smask,n=this.mask;let g,o,c,... method undoPreblend (line 21) | undoPreblend(e,t,i){const a=this.smask?.matte;if(!a)return;const s=thi... method createImageData (line 21) | async createImageData(e=!1,t=!1){const i=this.drawWidth,a=this.drawHei... method fillGrayBuffer (line 21) | async fillGrayBuffer(e){const t=this.numComps;if(1!==t)throw new Forma... method createBitmap (line 21) | createBitmap(e,t,i,a){const s=new OffscreenCanvas(t,i),r=s.getContext(... method getImageBytes (line 21) | async getImageBytes(e,{drawWidth:t,drawHeight:i,forceRGBA:a=!1,forceRG... function normalizeBlendMode (line 21) | function normalizeBlendMode(e,t=!1){if(Array.isArray(e)){for(const t of ... function addLocallyCachedImageOps (line 21) | function addLocallyCachedImageOps(e,t){t.objId&&e.addDependency(t.objId)... class TimeSlotManager (line 21) | class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_... method constructor (line 21) | constructor(){this.reset()} method check (line 21) | check(){if(++this.checkednew TranslatedF... method buildPath (line 21) | buildPath(e,t,i,a=!1){const s=e.length-1;i||(i=[]);if(s<0||e.fnArray[s... method parseColorSpace (line 21) | parseColorSpace({cs:e,resources:t,localColorSpaceCache:i}){return Colo... method parseShading (line 21) | parseShading({shading:e,resources:t,localColorSpaceCache:i,localShadin... method handleColorN (line 21) | handleColorN(e,t,i,a,s,r,n,g,o,c){const C=i.pop();if(C instanceof Name... method _parseVisibilityExpression (line 21) | _parseVisibilityExpression(e,t,i){if(++t>10){warn("Visibility expressi... method parseMarkedContentProps (line 21) | async parseMarkedContentProps(e,t){let i;if(e instanceof Name){i=t.get... method getOperatorList (line 21) | getOperatorList({stream:e,task:t,resources:i,operatorList:a,initialSta... method getTextContent (line 21) | getTextContent({stream:e,task:t,resources:s,stateManager:r=null,includ... method extractDataStructures (line 21) | async extractDataStructures(e,t){const i=this.xref;let a;const s=this.... method _simpleFontToUnicode (line 21) | _simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple fon... method buildToUnicode (line 21) | async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>... method readToUnicode (line 21) | async readToUnicode(e){if(!e)return null;if(e instanceof Name){const t... method readCidToGidMap (line 21) | readCidToGidMap(e,t){const i=[];for(let a=0,s=e.length;a{if("#x"=... method _parseContent (line 21) | _parseContent(e,t){const i=[];let a=t;function skipWs(){for(;a0} method searchNode (line 21) | searchNode(e,t){if(t>=e.length)return this;const i=e[t];if(i.name.star... method dump (line 21) | dump(e){if("#text"!==this.nodeName){e.push(`<${this.nodeName}`);if(thi... class SimpleXMLParser (line 21) | class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e... method constructor (line 21) | constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._cur... method parseFromString (line 21) | parseFromString(e){this._currentFragment=[];this._stack=[];this._error... method onText (line 21) | onText(e){if(function isWhitespaceString(e){for(let t=0,i=e.length;t\\376\\377([^<]+... method _getSequence (line 21) | _getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&... method _parseArray (line 21) | _parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,i=th... method _parse (line 21) | _parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.first... method serializable (line 21) | get serializable(){return{parsedData:this._metadataMap,rawData:this._d... class DecryptStream (line 21) | class DecryptStream extends DecodeStream{constructor(e,t,i){super(t);thi... method constructor (line 21) | constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.decrypt=i... method readBlock (line 21) | readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str... class ARCFourCipher (line 21) | class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Ar... method constructor (line 21) | constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),i=e.lengt... method encryptBlock (line 21) | encryptBlock(e){let t=this.a,i=this.b;const a=this.s,s=e.length,r=new ... method decryptBlock (line 21) | decryptBlock(e){return this.encryptBlock(e)} method encrypt (line 21) | encrypt(e){return this.encryptBlock(e)} class Word64 (line 21) | class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.hig... method constructor (line 21) | constructor(e,t){this.high=0|e;this.low=0|t} method and (line 21) | and(e){this.high&=e.high;this.low&=e.low} method xor (line 21) | xor(e){this.high^=e.high;this.low^=e.low} method or (line 21) | or(e){this.high|=e.high;this.low|=e.low} method shiftRight (line 21) | shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{t... method shiftLeft (line 21) | shiftLeft(e){if(e>=32){this.high=this.low<>>0)+(e.low>>>0);let i=(this.high>>>0)+(e.hig... method copyTo (line 21) | copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=th... method assign (line 21) | assign(e){this.high=e.high;this.low=e.low} function rotr (line 21) | function rotr(e,t){return e>>>t|e<<32-t} function ch (line 21) | function ch(e,t,i){return e&t^~e&i} function maj (line 21) | function maj(e,t,i){return e&t^e&i^t&i} function sigma (line 21) | function sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)} function sigmaPrime (line 21) | function sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)} function littleSigma (line 21) | function littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3} function ch (line 21) | function ch(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.not();s.and(a)... function maj (line 21) | function maj(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.and(a);e.xor(... function sigma (line 21) | function sigma(e,t,i){e.assign(t);e.rotateRight(28);i.assign(t);i.rotate... function sigmaPrime (line 21) | function sigmaPrime(e,t,i){e.assign(t);e.rotateRight(14);i.assign(t);i.r... function littleSigma (line 21) | function littleSigma(e,t,i){e.assign(t);e.rotateRight(1);i.assign(t);i.r... function littleSigmaPrime (line 21) | function littleSigmaPrime(e,t,i){e.assign(t);e.rotateRight(19);i.assign(... class NullCipher (line 21) | class NullCipher{decryptBlock(e){return e}encrypt(e){return e}} method decryptBlock (line 21) | decryptBlock(e){return e} method encrypt (line 21) | encrypt(e){return e} class AESBaseCipher (line 21) | class AESBaseCipher{constructor(){this.constructor===AESBaseCipher&&unre... method constructor (line 21) | constructor(){this.constructor===AESBaseCipher&&unreachable("Cannot in... method _expandKey (line 21) | _expandKey(e){unreachable("Cannot call `_expandKey` on the base class")} method _decrypt (line 21) | _decrypt(e,t){let i,a,s;const r=new Uint8Array(16);r.set(e);for(let e=... method _encrypt (line 21) | _encrypt(e,t){const i=this._s;let a,s,r;const n=new Uint8Array(16);n.s... method _decryptBlock2 (line 21) | _decryptBlock2(e,t){const i=e.length;let a=this.buffer,s=this.bufferPo... method decryptBlock (line 21) | decryptBlock(e,t,i=null){const a=e.length,s=this.buffer;let r=this.buf... method encrypt (line 21) | encrypt(e,t){const i=e.length;let a=this.buffer,s=this.bufferPosition;... class AES128Cipher (line 21) | class AES128Cipher extends AESBaseCipher{constructor(e){super();this._cy... method constructor (line 21) | constructor(e){super();this._cyclesOfRepetition=10;this._keySize=160;t... method _expandKey (line 21) | _expandKey(e){const t=this._s,i=this._rcon,a=new Uint8Array(176);a.set... class AES256Cipher (line 21) | class AES256Cipher extends AESBaseCipher{constructor(e){super();this._cy... method constructor (line 21) | constructor(e){super();this._cyclesOfRepetition=14;this._keySize=224;t... method _expandKey (line 21) | _expandKey(e){const t=this._s,i=new Uint8Array(240);i.set(e);let a,s,r... class PDF17 (line 21) | class PDF17{checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+... method checkOwnerPassword (line 21) | checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(... method checkUserPassword (line 21) | checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0)... method getOwnerKey (line 21) | getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.... method getUserKey (line 21) | getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(... class PDF20 (line 21) | class PDF20{_hash(e,t,i){let a=Js(t,0,t.length).subarray(0,32),s=[0],r=0... method _hash (line 21) | _hash(e,t,i){let a=Js(t,0,t.length).subarray(0,32),s=[0],r=0;for(;r<64... method checkOwnerPassword (line 21) | checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(... method checkUserPassword (line 21) | checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0)... method getOwnerKey (line 21) | getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.... method getUserKey (line 21) | getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(... class CipherTransform (line 21) | class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;th... method constructor (line 21) | constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConst... method createStream (line 21) | createStream(e,t){const i=new this.StreamCipherConstructor;return new ... method decryptString (line 21) | decryptString(e){const t=new this.StringCipherConstructor;let i=string... method encryptString (line 21) | encryptString(e){const t=new this.StringCipherConstructor;if(t instanc... class CipherTransformFactory (line 21) | class CipherTransformFactory{static#k=new Uint8Array([40,191,78,94,78,11... method #R (line 21) | #R(e,t,i,a,s,r,n,g,o,c,C,h){if(t){const e=Math.min(127,t.length);t=t.s... method #N (line 21) | #N(e,t,i,a,s,r,n,g){const o=40+i.length+e.length,c=new Uint8Array(o);l... method #G (line 21) | #G(e,t,i,a){const s=new Uint8Array(32);let r=0;const n=Math.min(32,e.l... method #x (line 21) | #x(e,t,i,a=!1){const s=new Uint8Array(i.length+9),r=i.length;let n;for... method #U (line 21) | #U(e,t,i,a,s){if(!(t instanceof Name))throw new FormatError("Invalid c... method constructor (line 21) | constructor(e,t,i){const a=e.get("Filter");if(!isName(a,"Standard"))th... method createCipherTransform (line 21) | createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)r... function writeObject (line 21) | async function writeObject(e,t,i,{encrypt:a=null}){const s=a?.createCiph... function writeDict (line 21) | async function writeDict(e,t,i){t.push("<<");for(const a of e.getKeys())... function writeStream (line 21) | async function writeStream(e,t,i){let a=e.getBytes();const{dict:s}=e,[r,... function writeArray (line 21) | async function writeArray(e,t,i){t.push("[");let a=!0;for(const s of e){... function writeValue (line 21) | async function writeValue(e,t,i){if(e instanceof Name)t.push(`/${escapeP... function writeInt (line 21) | function writeInt(e,t,i,a){for(let s=t+i-1;s>i-1;s--){a[s]=255&e;e>>=8}r... function writeString (line 21) | function writeString(e,t,i){for(let a=0,s=e.length;a40){warn("StructTree MAX_DEPTH reached.");return... method addTopLevelNode (line 21) | addTopLevelNode(e,t){const i=this.rootDict.get("K");if(!i)return!1;if(... method serializable (line 21) | get serializable(){function nodeToSerializable(e,t,i=0){if(i>40){warn(... function isValidExplicitDest (line 21) | function isValidExplicitDest(e){if(!Array.isArray(e)||e.length<2)return!... function fetchDest (line 21) | function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return isValidEx... function fetchRemoteDest (line 21) | function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t... class Catalog (line 21) | class Catalog{constructor(e,t){this.pdfManager=e;this.xref=t;this._catDi... method constructor (line 21) | constructor(e,t){this.pdfManager=e;this.xref=t;this._catDict=t.getCata... method cloneDict (line 21) | cloneDict(){return this._catDict.clone()} method version (line 21) | get version(){const e=this._catDict.get("Version");if(e instanceof Nam... method lang (line 21) | get lang(){const e=this._catDict.get("Lang");return shadow(this,"lang"... method needsRendering (line 21) | get needsRendering(){const e=this._catDict.get("NeedsRendering");retur... method collection (line 21) | get collection(){let e=null;try{const t=this._catDict.get("Collection"... method acroForm (line 21) | get acroForm(){let e=null;try{const t=this._catDict.get("AcroForm");t ... method acroFormRef (line 21) | get acroFormRef(){const e=this._catDict.getRaw("AcroForm");return shad... method metadata (line 21) | get metadata(){const e=this._catDict.getRaw("Metadata");if(!(e instanc... method markInfo (line 21) | get markInfo(){let e=null;try{e=this._readMarkInfo()}catch(e){if(e ins... method _readMarkInfo (line 21) | _readMarkInfo(){const e=this._catDict.get("MarkInfo");if(!(e instanceo... method structTreeRoot (line 21) | get structTreeRoot(){let e=null;try{e=this._readStructTreeRoot()}catch... method _readStructTreeRoot (line 21) | _readStructTreeRoot(){const e=this._catDict.getRaw("StructTreeRoot"),t... method toplevelPagesDict (line 21) | get toplevelPagesDict(){const e=this._catDict.get("Pages");if(!(e inst... method documentOutline (line 21) | get documentOutline(){let e=null;try{e=this._readDocumentOutline()}cat... method _readDocumentOutline (line 21) | _readDocumentOutline(){let e=this._catDict.get("Outlines");if(!(e inst... method permissions (line 21) | get permissions(){let e=null;try{e=this._readPermissions()}catch(e){if... method _readPermissions (line 21) | _readPermissions(){const e=this.xref.trailer.get("Encrypt");if(!(e ins... method optionalContentConfig (line 21) | get optionalContentConfig(){let e=null;try{const t=this._catDict.get("... method #Y (line 21) | #Y(e){const t=this.xref.fetch(e),i={id:e.toString(),name:null,intent:n... method #v (line 21) | #v(e,t){function parseOnOff(e){const i=[];if(Array.isArray(e))for(cons... method setActualNumPages (line 21) | setActualNumPages(e=null){this._actualNumPages=e} method hasActualNumPages (line 21) | get hasActualNumPages(){return null!==this._actualNumPages} method _pagesCount (line 21) | get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Numb... method numPages (line 21) | get numPages(){return this.hasActualNumPages?this._actualNumPages:this... method destinations (line 21) | get destinations(){const e=this._readDests(),t=Object.create(null);if(... method getDestination (line 21) | getDestination(e){const t=this._readDests();if(t instanceof NameTree){... method _readDests (line 21) | _readDests(){const e=this._catDict.get("Names");return e?.has("Dests")... method pageLabels (line 21) | get pageLabels(){let e=null;try{e=this._readPageLabels()}catch(e){if(e... method _readPageLabels (line 21) | _readPageLabels(){const e=this._catDict.getRaw("PageLabels");if(!e)ret... method pageLayout (line 21) | get pageLayout(){const e=this._catDict.get("PageLayout");let t="";if(e... method pageMode (line 21) | get pageMode(){const e=this._catDict.get("PageMode");let t="UseNone";i... method viewerPreferences (line 21) | get viewerPreferences(){const e=this._catDict.get("ViewerPreferences")... method openAction (line 21) | get openAction(){const e=this._catDict.get("OpenAction"),t=Object.crea... method attachments (line 21) | get attachments(){const e=this._catDict.get("Names");let t=null;if(e i... method xfaImages (line 21) | get xfaImages(){const e=this._catDict.get("Names");let t=null;if(e ins... method _collectJavaScript (line 21) | _collectJavaScript(){const e=this._catDict.get("Names");let t=null;fun... method jsActions (line 21) | get jsActions(){const e=this._collectJavaScript();let t=collectActions... method fontFallback (line 21) | async fontFallback(e,t){const i=await Promise.all(this.fontCache);for(... method cleanup (line 21) | async cleanup(e=!1){clearGlobalCaches();this.globalImageCache.clear(e)... method getPageDict (line 21) | async getPageDict(e){const t=[this.toplevelPagesDict],i=new RefSet,a=t... method getAllPageDicts (line 21) | async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.eval... method getPageIndex (line 21) | getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)retur... method baseUrl (line 21) | get baseUrl(){const e=this._catDict.get("URI");if(e instanceof Dict){c... method parseDestDictionary (line 21) | static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:i=null,d... function addChildren (line 21) | function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else i... class ObjectLoader (line 21) | class ObjectLoader{constructor(e,t,i){this.dict=e;this.keys=t;this.xref=... method constructor (line 21) | constructor(e,t,i){this.dict=e;this.keys=t;this.xref=i;this.refSet=null} method load (line 21) | async load(){if(this.xref.stream.isDataLoaded)return;const{keys:e,dict... method _walk (line 21) | async _walk(e){const t=[],i=[];for(;e.length;){let a=e.pop();if(a inst... function stripQuotes (line 21) | function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.sl... function getInteger (line 21) | function getInteger({data:e,defaultValue:t,validate:i}){if(!e)return t;e... function getFloat (line 21) | function getFloat({data:e,defaultValue:t,validate:i}){if(!e)return t;e=e... function getKeyword (line 21) | function getKeyword({data:e,defaultValue:t,validate:i}){return e&&i(e=e.... function getStringOption (line 21) | function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0... function getMeasurement (line 21) | function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);... function getRatio (line 21) | function getRatio(e){if(!e)return{num:1,den:1};const t=e.trim().split(/\... function getRelevant (line 21) | function getRelevant(e){return e?e.trim().split(/\s+/).map((e=>({exclude... class HTMLResult (line 21) | class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new H... method FAILURE (line 21) | static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,nu... method EMPTY (line 21) | static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,n... method constructor (line 21) | constructor(e,t,i,a){this.success=e;this.html=t;this.bbox=i;this.break... method isBreak (line 21) | isBreak(){return!!this.breakNode} method breakNode (line 21) | static breakNode(e){return new HTMLResult(!1,null,null,e)} method success (line 21) | static success(e,t=null){return new HTMLResult(!0,e,t,null)} class FontFinder (line 21) | class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;th... method constructor (line 21) | constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new S... method add (line 21) | add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.... method addPdfFont (line 21) | addPdfFont(e){const t=e.cssFontInfo,i=t.fontFamily;let a=this.fonts.ge... method getDefault (line 21) | getDefault(){return this.defaultFont} method find (line 21) | find(e,t=!0){let i=this.fonts.get(e)||this.cache.get(e);if(i)return i;... function selectFont (line 21) | function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.... class FontInfo (line 21) | class FontInfo{constructor(e,t,i,a){this.lineHeight=i;this.paraMargin=t|... method constructor (line 21) | constructor(e,t,i,a){this.lineHeight=i;this.paraMargin=t||{top:0,botto... method defaultFont (line 21) | defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)... class FontSelector (line 21) | class FontSelector{constructor(e,t,i,a){this.fontFinder=a;this.stack=[ne... method constructor (line 21) | constructor(e,t,i,a){this.fontFinder=a;this.stack=[new FontInfo(e,t,i,... method pushData (line 21) | pushData(e,t,i){const a=this.stack.at(-1);for(const t of["typeface","p... method popFont (line 21) | popFont(){this.stack.pop()} method topFont (line 21) | topFont(){return this.stack.at(-1)} class TextMeasure (line 21) | class TextMeasure{constructor(e,t,i,a){this.glyphs=[];this.fontSelector=... method constructor (line 21) | constructor(e,t,i,a){this.glyphs=[];this.fontSelector=new FontSelector... method pushData (line 21) | pushData(e,t,i){this.fontSelector.pushData(e,t,i)} method popFont (line 21) | popFont(e){return this.fontSelector.popFont()} method addPara (line 21) | addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.para... method addString (line 21) | addString(e){if(!e)return;const t=this.fontSelector.topFont(),i=t.xfaF... method compute (line 21) | compute(e){let t=-1,i=0,a=0,s=0,r=0,n=0,g=!1,o=!0;for(let c=0,C=this.g... function parseExpression (line 21) | function parseExpression(e,t,i=!0){let a=e.match(Cn);if(!a)return null;l... function searchNode (line 21) | function searchNode(e,t,i,a=!0,s=!0){const r=parseExpression(i,a);if(!r)... function createDataNode (line 21) | function createDataNode(e,t,i){const a=parseExpression(i);if(!a)return n... class XFAObject (line 21) | class XFAObject{constructor(e,t,i=!1){this[Jr]=e;this[Yr]=t;this[Fn]=i;t... method constructor (line 21) | constructor(e,t,i=!1){this[Jr]=e;this[Yr]=t;this[Fn]=i;this[Rn]=null;t... method isXFAObject (line 21) | get isXFAObject(){return!0} method isXFAObjectArray (line 21) | get isXFAObjectArray(){return!1} method createNodes (line 21) | createNodes(e){let t=this,i=null;for(const{name:a,index:s}of e){for(le... method [Kr] (line 21) | [Kr](e){if(!this[Fn]||!this[Tr](e))return!1;const t=e[Yr],i=this[t];if... method [Tr] (line 21) | [Tr](e){return this.hasOwnProperty(e[Yr])&&e[Jr]===this[Jr]} method [Gr] (line 21) | [Gr](){return!1} method [Ws] (line 21) | [Ws](){return!1} method [Sr] (line 21) | [Sr](){return!1} method [kr] (line 21) | [kr](){return!1} method [Pr] (line 21) | [Pr](){this.para&&this[mr]()[ar].paraStack.pop()} method [Wr] (line 21) | [Wr](){this[mr]()[ar].paraStack.push(this.para)} method [zr] (line 21) | [zr](e){this.id&&this[Jr]===on.template.id&&e.set(this.id,this)} method [mr] (line 21) | [mr](){return this[yr].template} method [xr] (line 21) | [xr](){return!1} method [Ur] (line 21) | [Ur](){return!1} method [Xs] (line 21) | [Xs](e){e[Rn]=this;this[fn].push(e);!e[yr]&&this[yr]&&(e[yr]=this[yr])} method [jr] (line 21) | [jr](e){const t=this[fn].indexOf(e);this[fn].splice(t,1)} method [wr] (line 21) | [wr](){return this.hasOwnProperty("value")} method [$r] (line 21) | [$r](e){} method [qr] (line 21) | [qr](e){} method [sr] (line 21) | [sr](){} method [Vs] (line 21) | [Vs](e){delete this[Fn];if(this[_s]){e.clean(this[_s]);delete this[_s]}} method [br] (line 21) | [br](e){return this[fn].indexOf(e)} method [Fr] (line 21) | [Fr](e,t){t[Rn]=this;this[fn].splice(e,0,t);!t[yr]&&this[yr]&&(t[yr]=t... method [Mr] (line 21) | [Mr](){return!this.name} method [Hr] (line 21) | [Hr](){return""} method [en] (line 21) | [en](){return 0===this[fn].length?this[er]:this[fn].map((e=>e[en]())).... method [dn] (line 21) | get[dn](){const e=Object.getPrototypeOf(this);if(!e._attributes){const... method [Nr] (line 21) | [Nr](e){let t=this;for(;t;){if(t===e)return!0;t=t[pr]()}return!1} method [pr] (line 21) | [pr](){return this[Rn]} method [fr] (line 21) | [fr](){return this[pr]()} method [Er] (line 21) | [Er](e=null){return e?this[e]:this[fn]} method [ir] (line 21) | [ir](){const e=Object.create(null);this[er]&&(e.$content=this[er]);for... method [rn] (line 21) | [rn](){return null} method [an] (line 21) | [an](){return HTMLResult.EMPTY} method [ur] (line 21) | *[ur](){for(const e of this[Er]())yield e} method [wn] (line 21) | *[wn](e,t){for(const i of this[ur]())if(!e||t===e.has(i[Yr])){const e=... method [rr] (line 21) | [rr](){return null} method [js] (line 21) | [js](e,t){this[ar].children.push(e)} method [or] (line 21) | [or](){} method [Zs] (line 21) | [Zs]({filter:e=null,include:t=!0}){if(this[ar].generator){const e=this... method [_r] (line 21) | [_r](e){this[Gn]=new Set(Object.keys(e))} method [bn] (line 21) | [bn](e){const t=this[dn],i=this[Gn];return[...e].filter((e=>t.has(e)&&... method [Zr] (line 21) | [Zr](e,t=new Set){for(const i of this[fn])i[Nn](e,t)} method [Nn] (line 21) | [Nn](e,t){const i=this[Dn](e,t);i?this[En](i,e,t):this[Zr](e,t)} method [Dn] (line 21) | [Dn](e,t){const{use:i,usehref:a}=this;if(!i&&!a)return null;let s=null... method [En] (line 21) | [En](e,t,i){if(i.has(e)){warn("XFA - Cycle detected in prototypes use.... method [pn] (line 21) | static[pn](e){return Array.isArray(e)?e.map((e=>XFAObject[pn](e))):"ob... method [$s] (line 21) | [$s](){const e=Object.create(Object.getPrototypeOf(this));for(const t ... method [Er] (line 21) | [Er](e=null){return e?this[fn].filter((t=>t[Yr]===e)):this[fn]} method [Ir] (line 21) | [Ir](e){return this[e]} method [cr] (line 21) | [cr](e,t,i=!0){return Array.from(this[Cr](e,t,i))} method [Cr] (line 21) | *[Cr](e,t,i=!0){if("parent"!==e){for(const i of this[fn]){i[Yr]===e&&(... class XFAObjectArray (line 21) | class XFAObjectArray{constructor(e=1/0){this[Sn]=e;this[fn]=[]}get isXFA... method constructor (line 21) | constructor(e=1/0){this[Sn]=e;this[fn]=[]} method isXFAObject (line 21) | get isXFAObject(){return!1} method isXFAObjectArray (line 21) | get isXFAObjectArray(){return!0} method push (line 21) | push(e){if(this[fn].length<=this[Sn]){this[fn].push(e);return!0}warn(`... method isEmpty (line 21) | isEmpty(){return 0===this[fn].length} method dump (line 21) | dump(){return 1===this[fn].length?this[fn][0][ir]():this[fn].map((e=>e... method [$s] (line 21) | [$s](){const e=new XFAObjectArray(this[Sn]);e[fn]=this[fn].map((e=>e[$... method children (line 21) | get children(){return this[fn]} method clear (line 21) | clear(){this[fn].length=0} class XFAAttribute (line 21) | class XFAAttribute{constructor(e,t,i){this[Rn]=e;this[Yr]=t;this[er]=i;t... method constructor (line 21) | constructor(e,t,i){this[Rn]=e;this[Yr]=t;this[er]=i;this[Ar]=!1;this[n... method [pr] (line 21) | [pr](){return this[Rn]} method [Rr] (line 21) | [Rr](){return!0} method [hr] (line 21) | [hr](){return this[er].trim()} method [$r] (line 21) | [$r](e){e=e.value||"";this[er]=e.toString()} method [en] (line 21) | [en](){return this[er]} method [Nr] (line 21) | [Nr](e){return this[Rn]===e||this[Rn][Nr](e)} class XmlObject (line 21) | class XmlObject extends XFAObject{constructor(e,t,i={}){super(e,t);this[... method constructor (line 21) | constructor(e,t,i={}){super(e,t);this[er]="";this[mn]=null;if("#text"!... method [sn] (line 21) | [sn](e){const t=this[Yr];if("#text"===t){e.push(encodeToXmlString(this... method [Kr] (line 21) | [Kr](e){if(this[er]){const e=new XmlObject(this[Jr],"#text");this[Xs](... method [qr] (line 21) | [qr](e){this[er]+=e} method [sr] (line 21) | [sr](){if(this[er]&&this[fn].length>0){const e=new XmlObject(this[Jr],... method [an] (line 21) | [an](){return"#text"===this[Yr]?HTMLResult.success({name:"#text",value... method [Er] (line 21) | [Er](e=null){return e?this[fn].filter((t=>t[Yr]===e)):this[fn]} method [gr] (line 21) | [gr](){return this[un]} method [Ir] (line 21) | [Ir](e){const t=this[un].get(e);return void 0!==t?t:this[Er](e)} method [Cr] (line 21) | *[Cr](e,t){const i=this[un].get(e);i&&(yield i);for(const i of this[fn... method [nr] (line 21) | *[nr](e,t){const i=this[un].get(e);!i||t&&i[Ar]||(yield i);for(const i... method [Qr] (line 21) | *[Qr](e,t,i){for(const a of this[fn]){a[Yr]!==e||i&&a[Ar]||(yield a);t... method [Rr] (line 21) | [Rr](){return null===this[mn]?0===this[fn].length||this[fn][0][Jr]===o... method [hr] (line 21) | [hr](){return null===this[mn]?0===this[fn].length?this[er].trim():this... method [$r] (line 21) | [$r](e){e=e.value||"";this[er]=e.toString()} method [ir] (line 21) | [ir](e=!1){const t=Object.create(null);e&&(t.$ns=this[Jr]);this[er]&&(... class ContentObject (line 21) | class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[e... method constructor (line 21) | constructor(e,t){super(e,t);this[er]=""} method [qr] (line 21) | [qr](e){this[er]+=e} method [sr] (line 21) | [sr](){} class OptionObject (line 21) | class OptionObject extends ContentObject{constructor(e,t,i){super(e,t);t... method constructor (line 21) | constructor(e,t,i){super(e,t);this[kn]=i} method [sr] (line 21) | [sr](){this[er]=getKeyword({data:this[er],defaultValue:this[kn][0],val... method [Vs] (line 21) | [Vs](e){super[Vs](e);delete this[kn]} class StringObject (line 21) | class StringObject extends ContentObject{[sr](){this[er]=this[er].trim()}} method [sr] (line 21) | [sr](){this[er]=this[er].trim()} class IntegerObject (line 21) | class IntegerObject extends ContentObject{constructor(e,t,i,a){super(e,t... method constructor (line 21) | constructor(e,t,i,a){super(e,t);this[yn]=i;this[xn]=a} method [sr] (line 21) | [sr](){this[er]=getInteger({data:this[er],defaultValue:this[yn],valida... method [Vs] (line 21) | [Vs](e){super[Vs](e);delete this[yn];delete this[xn]} class Option01 (line 21) | class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1=... method constructor (line 21) | constructor(e,t){super(e,t,0,(e=>1===e))} class Option10 (line 21) | class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,(e=>0=... method constructor (line 21) | constructor(e,t){super(e,t,1,(e=>0===e))} function measureToString (line 21) | function measureToString(e){return"string"==typeof e?"0px":Number.isInte... method anchorType (line 21) | anchorType(e,t){const i=e[fr]();if(i&&(!i.layout||"position"===i.layout)... method dimensions (line 21) | dimensions(e,t){const i=e[fr]();let a=e.w;const s=e.h;if(i.layout?.inclu... method position (line 21) | position(e,t){const i=e[fr]();if(!i?.layout||"position"===i.layout){t.po... method rotate (line 21) | rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=... method presence (line 21) | presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";b... method hAlign (line 21) | hAlign(e,t){if("para"===e[Yr])switch(e.hAlign){case"justifyAll":t.textAl... method margin (line 21) | margin(e,t){e.margin&&(t.margin=e.margin[rn]().margin)} function setMinMaxDimensions (line 21) | function setMinMaxDimensions(e,t){if("position"===e[fr]().layout){e.minW... function layoutText (line 21) | function layoutText(e,t,i,a,s,r){const n=new TextMeasure(t,i,a,s);"strin... function layoutNode (line 21) | function layoutNode(e,t){let i=null,a=null,s=!1;if((!e.w||!e.h)&&e.value... function computeBbox (line 21) | function computeBbox(e,t,i){let a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e... function fixDimensions (line 21) | function fixDimensions(e){const t=e[fr]();if(t.layout?.includes("row")){... function layoutClass (line 21) | function layoutClass(e){switch(e.layout){case"position":default:return"x... function toStyle (line 21) | function toStyle(e,...t){const i=Object.create(null);for(const a of t){c... function createWrapper (line 21) | function createWrapper(e,t){const{attributes:i}=t,{style:a}=i,s={name:"d... function fixTextIndent (line 21) | function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(... function setAccess (line 21) | function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xf... function isPrintOnly (line 21) | function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].exclu... function getCurrentPara (line 21) | function getCurrentPara(e){const t=e[mr]()[ar].paraStack;return t.length... function setPara (line 21) | function setPara(e,t,i){if(i.attributes.class?.includes("xfaRich")){if(t... function setFontFamily (line 21) | function setFontFamily(e,t,i,a){if(!i){delete a.fontFamily;return}const ... function fixURL (line 21) | function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProt... function createLine (line 21) | function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===... function flushHTML (line 21) | function flushHTML(e){if(!e[ar])return null;const t={name:"div",attribut... function addHTML (line 21) | function addHTML(e,t,i){const a=e[ar],s=a.availableSpace,[r,n,g,o]=i;swi... function getAvailableSpace (line 21) | function getAvailableSpace(e){const t=e[ar].availableSpace,i=e.margin?e.... function checkDimensions (line 21) | function checkDimensions(e,t){if(null===e[mr]()[ar].firstUnsplittable)re... function getBorderDims (line 21) | function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.bor... function hasMargin (line 21) | function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.righ... function _setValue (line 21) | function _setValue(e,t){if(!e.value){const t=new Value({});e[Xs](t);e.va... function isRequired (line 21) | function isRequired(e){return"error"===e.validate?.nullTest} function setTabIndex (line 21) | function setTabIndex(e){for(;e;){if(!e.traversal){e[An]=e[pr]()[An];retu... function applyAssist (line 21) | function applyAssist(e,t){const i=e.assist;if(i){const e=i[an]();e&&(t.t... function ariaLabel (line 21) | function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t... function valueToHtml (line 21) | function valueToHtml(e){return HTMLResult.success({name:"div",attributes... function setFirstUnsplittable (line 21) | function setFirstUnsplittable(e){const t=e[mr]();if(null===t[ar].firstUn... function unsetFirstUnsplittable (line 21) | function unsetFirstUnsplittable(e){const t=e[mr]();t[ar].firstUnsplittab... function handleBreak (line 21) | function handleBreak(e){if(e[ar])return!1;e[ar]=Object.create(null);if("... function handleOverflow (line 21) | function handleOverflow(e,t,i){const a=e[mr](),s=a[ar].noLayoutFailure,r... class AppearanceFilter (line 21) | class AppearanceFilter extends StringObject{constructor(e){super(Hn,"app... method constructor (line 21) | constructor(e){super(Hn,"appearanceFilter");this.id=e.id||"";this.type... class Arc (line 21) | class Arc extends XFAObject{constructor(e){super(Hn,"arc",!0);this.circu... method constructor (line 21) | constructor(e){super(Hn,"arc",!0);this.circular=getInteger({data:e.cir... method [an] (line 21) | [an](){const e=this.edge||new Edge({}),t=e[rn](),i=Object.create(null)... class Area (line 21) | class Area extends XFAObject{constructor(e){super(Hn,"area",!0);this.col... method constructor (line 21) | constructor(e){super(Hn,"area",!0);this.colSpan=getInteger({data:e.col... method [ur] (line 21) | *[ur](){yield*getContainedChildren(this)} method [Mr] (line 21) | [Mr](){return!0} method [kr] (line 21) | [kr](){return!0} method [js] (line 21) | [js](e,t){const[i,a,s,r]=t;this[ar].width=Math.max(this[ar].width,i+s)... method [or] (line 21) | [or](){return this[ar].availableSpace} method [an] (line 21) | [an](e){const t=toStyle(this,"position"),i={style:t,id:this[nn],class:... class Assist (line 21) | class Assist extends XFAObject{constructor(e){super(Hn,"assist",!0);this... method constructor (line 21) | constructor(e){super(Hn,"assist",!0);this.id=e.id||"";this.role=e.role... method [an] (line 21) | [an](){return this.toolTip?.[er]||null} class Barcode (line 21) | class Barcode extends XFAObject{constructor(e){super(Hn,"barcode",!0);th... method constructor (line 21) | constructor(e){super(Hn,"barcode",!0);this.charEncoding=getKeyword({da... class Bind (line 21) | class Bind extends XFAObject{constructor(e){super(Hn,"bind",!0);this.mat... method constructor (line 21) | constructor(e){super(Hn,"bind",!0);this.match=getStringOption(e.match,... class BindItems (line 21) | class BindItems extends XFAObject{constructor(e){super(Hn,"bindItems");t... method constructor (line 21) | constructor(e){super(Hn,"bindItems");this.connection=e.connection||"";... class Bookend (line 21) | class Bookend extends XFAObject{constructor(e){super(Hn,"bookend");this.... method constructor (line 21) | constructor(e){super(Hn,"bookend");this.id=e.id||"";this.leader=e.lead... class BooleanElement (line 21) | class BooleanElement extends Option01{constructor(e){super(Hn,"boolean")... method constructor (line 21) | constructor(e){super(Hn,"boolean");this.id=e.id||"";this.name=e.name||... method [an] (line 21) | [an](e){return valueToHtml(1===this[er]?"1":"0")} class Border (line 21) | class Border extends XFAObject{constructor(e){super(Hn,"border",!0);this... method constructor (line 21) | constructor(e){super(Hn,"border",!0);this.break=getStringOption(e.brea... method [lr] (line 21) | [lr](){if(!this[ar]){const e=this.edge.children.slice();if(e.length<4)... method [rn] (line 21) | [rn](){const{edges:e}=this[lr](),t=e.map((e=>{const t=e[rn]();t.color|... class Break (line 21) | class Break extends XFAObject{constructor(e){super(Hn,"break",!0);this.a... method constructor (line 21) | constructor(e){super(Hn,"break",!0);this.after=getStringOption(e.after... class BreakAfter (line 21) | class BreakAfter extends XFAObject{constructor(e){super(Hn,"breakAfter",... method constructor (line 21) | constructor(e){super(Hn,"breakAfter",!0);this.id=e.id||"";this.leader=... class BreakBefore (line 21) | class BreakBefore extends XFAObject{constructor(e){super(Hn,"breakBefore... method constructor (line 21) | constructor(e){super(Hn,"breakBefore",!0);this.id=e.id||"";this.leader... method [an] (line 21) | [an](e){this[ar]={};return HTMLResult.FAILURE} class Button (line 21) | class Button extends XFAObject{constructor(e){super(Hn,"button",!0);this... method constructor (line 21) | constructor(e){super(Hn,"button",!0);this.highlight=getStringOption(e.... method [an] (line 21) | [an](e){const t=this[pr]()[pr](),i={name:"button",attributes:{id:this[... class Calculate (line 21) | class Calculate extends XFAObject{constructor(e){super(Hn,"calculate",!0... method constructor (line 21) | constructor(e){super(Hn,"calculate",!0);this.id=e.id||"";this.override... class Caption (line 21) | class Caption extends XFAObject{constructor(e){super(Hn,"caption",!0);th... method constructor (line 21) | constructor(e){super(Hn,"caption",!0);this.id=e.id||"";this.placement=... method [$r] (line 21) | [$r](e){_setValue(this,e)} method [lr] (line 21) | [lr](e){if(!this[ar]){let{width:t,height:i}=e;switch(this.placement){c... method [an] (line 21) | [an](e){if(!this.value)return HTMLResult.EMPTY;this[Wr]();const t=this... class Certificate (line 21) | class Certificate extends StringObject{constructor(e){super(Hn,"certific... method constructor (line 21) | constructor(e){super(Hn,"certificate");this.id=e.id||"";this.name=e.na... class Certificates (line 21) | class Certificates extends XFAObject{constructor(e){super(Hn,"certificat... method constructor (line 21) | constructor(e){super(Hn,"certificates",!0);this.credentialServerPolicy... class CheckButton (line 21) | class CheckButton extends XFAObject{constructor(e){super(Hn,"checkButton... method constructor (line 21) | constructor(e){super(Hn,"checkButton",!0);this.id=e.id||"";this.mark=g... method [an] (line 21) | [an](e){const t=toStyle("margin"),i=measureToString(this.size);t.width... class ChoiceList (line 21) | class ChoiceList extends XFAObject{constructor(e){super(Hn,"choiceList",... method constructor (line 21) | constructor(e){super(Hn,"choiceList",!0);this.commitOn=getStringOption... method [an] (line 21) | [an](e){const t=toStyle(this,"border","margin"),i=this[pr]()[pr](),a={... class Color (line 21) | class Color extends XFAObject{constructor(e){super(Hn,"color",!0);this.c... method constructor (line 21) | constructor(e){super(Hn,"color",!0);this.cSpace=getStringOption(e.cSpa... method [wr] (line 21) | [wr](){return!1} method [rn] (line 21) | [rn](){return this.value?Util.makeHexColor(this.value.r,this.value.g,t... class Comb (line 21) | class Comb extends XFAObject{constructor(e){super(Hn,"comb");this.id=e.i... method constructor (line 21) | constructor(e){super(Hn,"comb");this.id=e.id||"";this.numberOfCells=ge... class Connect (line 21) | class Connect extends XFAObject{constructor(e){super(Hn,"connect",!0);th... method constructor (line 21) | constructor(e){super(Hn,"connect",!0);this.connection=e.connection||""... class ContentArea (line 21) | class ContentArea extends XFAObject{constructor(e){super(Hn,"contentArea... method constructor (line 21) | constructor(e){super(Hn,"contentArea",!0);this.h=getMeasurement(e.h);t... method [an] (line 21) | [an](e){const t={left:measureToString(this.x),top:measureToString(this... class Corner (line 21) | class Corner extends XFAObject{constructor(e){super(Hn,"corner",!0);this... method constructor (line 21) | constructor(e){super(Hn,"corner",!0);this.id=e.id||"";this.inverted=ge... method [rn] (line 21) | [rn](){const e=toStyle(this,"visibility");e.radius=measureToString("sq... class DateElement (line 21) | class DateElement extends ContentObject{constructor(e){super(Hn,"date");... method constructor (line 21) | constructor(e){super(Hn,"date");this.id=e.id||"";this.name=e.name||"";... method [sr] (line 21) | [sr](){const e=this[er].trim();this[er]=e?new Date(e):null} method [an] (line 21) | [an](e){return valueToHtml(this[er]?this[er].toString():"")} class DateTime (line 21) | class DateTime extends ContentObject{constructor(e){super(Hn,"dateTime")... method constructor (line 21) | constructor(e){super(Hn,"dateTime");this.id=e.id||"";this.name=e.name|... method [sr] (line 21) | [sr](){const e=this[er].trim();this[er]=e?new Date(e):null} method [an] (line 21) | [an](e){return valueToHtml(this[er]?this[er].toString():"")} class DateTimeEdit (line 21) | class DateTimeEdit extends XFAObject{constructor(e){super(Hn,"dateTimeEd... method constructor (line 21) | constructor(e){super(Hn,"dateTimeEdit",!0);this.hScrollPolicy=getStrin... method [an] (line 21) | [an](e){const t=toStyle(this,"border","font","margin"),i=this[pr]()[pr... class Decimal (line 21) | class Decimal extends ContentObject{constructor(e){super(Hn,"decimal");t... method constructor (line 21) | constructor(e){super(Hn,"decimal");this.fracDigits=getInteger({data:e.... method [sr] (line 21) | [sr](){const e=parseFloat(this[er].trim());this[er]=isNaN(e)?null:e} method [an] (line 21) | [an](e){return valueToHtml(null!==this[er]?this[er].toString():"")} class DefaultUi (line 21) | class DefaultUi extends XFAObject{constructor(e){super(Hn,"defaultUi",!0... method constructor (line 21) | constructor(e){super(Hn,"defaultUi",!0);this.id=e.id||"";this.use=e.us... class Desc (line 21) | class Desc extends XFAObject{constructor(e){super(Hn,"desc",!0);this.id=... method constructor (line 21) | constructor(e){super(Hn,"desc",!0);this.id=e.id||"";this.use=e.use||""... class DigestMethod (line 21) | class DigestMethod extends OptionObject{constructor(e){super(Hn,"digestM... method constructor (line 21) | constructor(e){super(Hn,"digestMethod",["","SHA1","SHA256","SHA512","R... class DigestMethods (line 21) | class DigestMethods extends XFAObject{constructor(e){super(Hn,"digestMet... method constructor (line 21) | constructor(e){super(Hn,"digestMethods",!0);this.id=e.id||"";this.type... class Draw (line 21) | class Draw extends XFAObject{constructor(e){super(Hn,"draw",!0);this.anc... method constructor (line 21) | constructor(e){super(Hn,"draw",!0);this.anchorType=getStringOption(e.a... method [$r] (line 21) | [$r](e){_setValue(this,e)} method [an] (line 21) | [an](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===th... class Edge (line 21) | class Edge extends XFAObject{constructor(e){super(Hn,"edge",!0);this.cap... method constructor (line 21) | constructor(e){super(Hn,"edge",!0);this.cap=getStringOption(e.cap,["sq... method [rn] (line 21) | [rn](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:thi... class Encoding (line 21) | class Encoding extends OptionObject{constructor(e){super(Hn,"encoding",[... method constructor (line 21) | constructor(e){super(Hn,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.d... class Encodings (line 21) | class Encodings extends XFAObject{constructor(e){super(Hn,"encodings",!0... method constructor (line 21) | constructor(e){super(Hn,"encodings",!0);this.id=e.id||"";this.type=get... class Encrypt (line 21) | class Encrypt extends XFAObject{constructor(e){super(Hn,"encrypt",!0);th... method constructor (line 21) | constructor(e){super(Hn,"encrypt",!0);this.id=e.id||"";this.use=e.use|... class EncryptData (line 21) | class EncryptData extends XFAObject{constructor(e){super(Hn,"encryptData... method constructor (line 21) | constructor(e){super(Hn,"encryptData",!0);this.id=e.id||"";this.operat... class Encryption (line 21) | class Encryption extends XFAObject{constructor(e){super(Hn,"encryption",... method constructor (line 21) | constructor(e){super(Hn,"encryption",!0);this.id=e.id||"";this.type=ge... class EncryptionMethod (line 21) | class EncryptionMethod extends OptionObject{constructor(e){super(Hn,"enc... method constructor (line 21) | constructor(e){super(Hn,"encryptionMethod",["","AES256-CBC","TRIPLEDES... class EncryptionMethods (line 21) | class EncryptionMethods extends XFAObject{constructor(e){super(Hn,"encry... method constructor (line 21) | constructor(e){super(Hn,"encryptionMethods",!0);this.id=e.id||"";this.... class Event (line 21) | class Event extends XFAObject{constructor(e){super(Hn,"event",!0);this.a... method constructor (line 21) | constructor(e){super(Hn,"event",!0);this.activity=getStringOption(e.ac... class ExData (line 21) | class ExData extends ContentObject{constructor(e){super(Hn,"exData");thi... method constructor (line 21) | constructor(e){super(Hn,"exData");this.contentType=e.contentType||"";t... method [Sr] (line 21) | [Sr](){return"text/html"===this.contentType} method [Kr] (line 21) | [Kr](e){if("text/html"===this.contentType&&e[Jr]===on.xhtml.id){this[e... method [an] (line 21) | [an](e){return"text/html"===this.contentType&&this[er]?this[er][an](e)... class ExObject (line 21) | class ExObject extends XFAObject{constructor(e){super(Hn,"exObject",!0);... method constructor (line 21) | constructor(e){super(Hn,"exObject",!0);this.archive=e.archive||"";this... class ExclGroup (line 21) | class ExclGroup extends XFAObject{constructor(e){super(Hn,"exclGroup",!0... method constructor (line 21) | constructor(e){super(Hn,"exclGroup",!0);this.access=getStringOption(e.... method [kr] (line 21) | [kr](){return!0} method [wr] (line 21) | [wr](){return!0} method [$r] (line 21) | [$r](e){for(const t of this.field.children){if(!t.value){const e=new V... method [Ur] (line 21) | [Ur](){return this.layout.endsWith("-tb")&&0===this[ar].attempt&&this[... method [xr] (line 21) | [xr](){const e=this[fr]();if(!e[xr]())return!1;if(void 0!==this[ar]._i... method [rr] (line 21) | [rr](){return flushHTML(this)} method [js] (line 21) | [js](e,t){addHTML(this,e,t)} method [or] (line 21) | [or](){return getAvailableSpace(this)} method [an] (line 21) | [an](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===th... class Execute (line 21) | class Execute extends XFAObject{constructor(e){super(Hn,"execute");this.... method constructor (line 21) | constructor(e){super(Hn,"execute");this.connection=e.connection||"";th... class Extras (line 21) | class Extras extends XFAObject{constructor(e){super(Hn,"extras",!0);this... method constructor (line 21) | constructor(e){super(Hn,"extras",!0);this.id=e.id||"";this.name=e.name... class Field (line 21) | class Field extends XFAObject{constructor(e){super(Hn,"field",!0);this.a... method constructor (line 21) | constructor(e){super(Hn,"field",!0);this.access=getStringOption(e.acce... method [kr] (line 21) | [kr](){return!0} method [$r] (line 21) | [$r](e){_setValue(this,e)} method [an] (line 21) | [an](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[yr]=... class Fill (line 21) | class Fill extends XFAObject{constructor(e){super(Hn,"fill",!0);this.id=... method constructor (line 21) | constructor(e){super(Hn,"fill",!0);this.id=e.id||"";this.presence=getS... method [rn] (line 21) | [rn](){const e=this[pr](),t=e[pr]()[pr](),i=Object.create(null);let a=... class Filter (line 21) | class Filter extends XFAObject{constructor(e){super(Hn,"filter",!0);this... method constructor (line 21) | constructor(e){super(Hn,"filter",!0);this.addRevocationInfo=getStringO... class Float (line 21) | class Float extends ContentObject{constructor(e){super(Hn,"float");this.... method constructor (line 21) | constructor(e){super(Hn,"float");this.id=e.id||"";this.name=e.name||""... method [sr] (line 21) | [sr](){const e=parseFloat(this[er].trim());this[er]=isNaN(e)?null:e} method [an] (line 21) | [an](e){return valueToHtml(null!==this[er]?this[er].toString():"")} class template_Font (line 21) | class template_Font extends XFAObject{constructor(e){super(Hn,"font",!0)... method constructor (line 21) | constructor(e){super(Hn,"font",!0);this.baselineShift=getMeasurement(e... method [Vs] (line 21) | [Vs](e){super[Vs](e);this[yr].usedTypefaces.add(this.typeface)} method [rn] (line 21) | [rn](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)de... class Format (line 21) | class Format extends XFAObject{constructor(e){super(Hn,"format",!0);this... method constructor (line 21) | constructor(e){super(Hn,"format",!0);this.id=e.id||"";this.use=e.use||... class Handler (line 21) | class Handler extends StringObject{constructor(e){super(Hn,"handler");th... method constructor (line 21) | constructor(e){super(Hn,"handler");this.id=e.id||"";this.type=getStrin... class Hyphenation (line 21) | class Hyphenation extends XFAObject{constructor(e){super(Hn,"hyphenation... method constructor (line 21) | constructor(e){super(Hn,"hyphenation");this.excludeAllCaps=getInteger(... class Image (line 21) | class Image extends StringObject{constructor(e){super(Hn,"image");this.a... method constructor (line 21) | constructor(e){super(Hn,"image");this.aspect=getStringOption(e.aspect,... method [an] (line 21) | [an](){if(this.contentType&&!vn.has(this.contentType.toLowerCase()))re... class ImageEdit (line 21) | class ImageEdit extends XFAObject{constructor(e){super(Hn,"imageEdit",!0... method constructor (line 21) | constructor(e){super(Hn,"imageEdit",!0);this.data=getStringOption(e.da... method [an] (line 21) | [an](e){return"embed"===this.data?HTMLResult.success({name:"div",child... class Integer (line 21) | class Integer extends ContentObject{constructor(e){super(Hn,"integer");t... method constructor (line 21) | constructor(e){super(Hn,"integer");this.id=e.id||"";this.name=e.name||... method [sr] (line 21) | [sr](){const e=parseInt(this[er].trim(),10);this[er]=isNaN(e)?null:e} method [an] (line 21) | [an](e){return valueToHtml(null!==this[er]?this[er].toString():"")} class Issuers (line 21) | class Issuers extends XFAObject{constructor(e){super(Hn,"issuers",!0);th... method constructor (line 21) | constructor(e){super(Hn,"issuers",!0);this.id=e.id||"";this.type=getSt... class Items (line 21) | class Items extends XFAObject{constructor(e){super(Hn,"items",!0);this.i... method constructor (line 21) | constructor(e){super(Hn,"items",!0);this.id=e.id||"";this.name=e.name|... method [an] (line 21) | [an](){const e=[];for(const t of this[Er]())e.push(t[en]());return HTM... class Keep (line 21) | class Keep extends XFAObject{constructor(e){super(Hn,"keep",!0);this.id=... method constructor (line 21) | constructor(e){super(Hn,"keep",!0);this.id=e.id||"";const t=["none","c... class KeyUsage (line 21) | class KeyUsage extends XFAObject{constructor(e){super(Hn,"keyUsage");con... method constructor (line 21) | constructor(e){super(Hn,"keyUsage");const t=["","yes","no"];this.crlSi... class Line (line 21) | class Line extends XFAObject{constructor(e){super(Hn,"line",!0);this.han... method constructor (line 21) | constructor(e){super(Hn,"line",!0);this.hand=getStringOption(e.hand,["... method [an] (line 21) | [an](){const e=this[pr]()[pr](),t=this.edge||new Edge({}),i=t[rn](),a=... class Linear (line 21) | class Linear extends XFAObject{constructor(e){super(Hn,"linear",!0);this... method constructor (line 21) | constructor(e){super(Hn,"linear",!0);this.id=e.id||"";this.type=getStr... method [rn] (line 21) | [rn](e){e=e?e[rn]():"#FFFFFF";return`linear-gradient(${this.type.repla... class LockDocument (line 21) | class LockDocument extends ContentObject{constructor(e){super(Hn,"lockDo... method constructor (line 21) | constructor(e){super(Hn,"lockDocument");this.id=e.id||"";this.type=get... method [sr] (line 21) | [sr](){this[er]=getStringOption(this[er],["auto","0","1"])} class Manifest (line 21) | class Manifest extends XFAObject{constructor(e){super(Hn,"manifest",!0);... method constructor (line 21) | constructor(e){super(Hn,"manifest",!0);this.action=getStringOption(e.a... class Margin (line 21) | class Margin extends XFAObject{constructor(e){super(Hn,"margin",!0);this... method constructor (line 21) | constructor(e){super(Hn,"margin",!0);this.bottomInset=getMeasurement(e... method [rn] (line 21) | [rn](){return{margin:measureToString(this.topInset)+" "+measureToStrin... class Mdp (line 21) | class Mdp extends XFAObject{constructor(e){super(Hn,"mdp");this.id=e.id|... method constructor (line 21) | constructor(e){super(Hn,"mdp");this.id=e.id||"";this.permissions=getIn... class Medium (line 21) | class Medium extends XFAObject{constructor(e){super(Hn,"medium");this.id... method constructor (line 21) | constructor(e){super(Hn,"medium");this.id=e.id||"";this.imagingBBox=fu... class Message (line 21) | class Message extends XFAObject{constructor(e){super(Hn,"message",!0);th... method constructor (line 21) | constructor(e){super(Hn,"message",!0);this.id=e.id||"";this.use=e.use|... class NumericEdit (line 21) | class NumericEdit extends XFAObject{constructor(e){super(Hn,"numericEdit... method constructor (line 21) | constructor(e){super(Hn,"numericEdit",!0);this.hScrollPolicy=getString... method [an] (line 21) | [an](e){const t=toStyle(this,"border","font","margin"),i=this[pr]()[pr... class Occur (line 21) | class Occur extends XFAObject{constructor(e){super(Hn,"occur",!0);this.i... method constructor (line 21) | constructor(e){super(Hn,"occur",!0);this.id=e.id||"";this.initial=""!=... method [Vs] (line 21) | [Vs](){const e=this[pr](),t=this.min;""===this.min&&(this.min=e instan... class Oid (line 21) | class Oid extends StringObject{constructor(e){super(Hn,"oid");this.id=e.... method constructor (line 21) | constructor(e){super(Hn,"oid");this.id=e.id||"";this.name=e.name||"";t... class Oids (line 21) | class Oids extends XFAObject{constructor(e){super(Hn,"oids",!0);this.id=... method constructor (line 21) | constructor(e){super(Hn,"oids",!0);this.id=e.id||"";this.type=getStrin... class Overflow (line 21) | class Overflow extends XFAObject{constructor(e){super(Hn,"overflow");thi... method constructor (line 21) | constructor(e){super(Hn,"overflow");this.id=e.id||"";this.leader=e.lea... method [lr] (line 21) | [lr](){if(!this[ar]){const e=this[pr](),t=this[mr](),i=t[Vr](this.targ... class PageArea (line 21) | class PageArea extends XFAObject{constructor(e){super(Hn,"pageArea",!0);... method constructor (line 21) | constructor(e){super(Hn,"pageArea",!0);this.blankOrNotBlank=getStringO... method [Lr] (line 21) | [Lr](){if(!this[ar]){this[ar]={numberOfUse:0};return!0}return!this.occ... method [zs] (line 21) | [zs](){delete this[ar]} method [dr] (line 21) | [dr](){this[ar]||(this[ar]={numberOfUse:0});const e=this[pr]();if("ord... method [or] (line 21) | [or](){return this[ar].space||{width:0,height:0}} method [an] (line 21) | [an](){this[ar]||(this[ar]={numberOfUse:1});const e=[];this[ar].childr... class PageSet (line 21) | class PageSet extends XFAObject{constructor(e){super(Hn,"pageSet",!0);th... method constructor (line 21) | constructor(e){super(Hn,"pageSet",!0);this.duplexImposition=getStringO... method [zs] (line 21) | [zs](){for(const e of this.pageArea.children)e[zs]();for(const e of th... method [Lr] (line 21) | [Lr](){return!this.occur||-1===this.occur.max||this[ar].numberOfUse{(e=e.s... class SubjectDNs (line 21) | class SubjectDNs extends XFAObject{constructor(e){super(Hn,"subjectDNs",... method constructor (line 21) | constructor(e){super(Hn,"subjectDNs",!0);this.id=e.id||"";this.type=ge... class Submit (line 21) | class Submit extends XFAObject{constructor(e){super(Hn,"submit",!0);this... method constructor (line 21) | constructor(e){super(Hn,"submit",!0);this.embedPDF=getInteger({data:e.... class Template (line 21) | class Template extends XFAObject{constructor(e){super(Hn,"template",!0);... method constructor (line 21) | constructor(e){super(Hn,"template",!0);this.baseProfile=getStringOptio... method [sr] (line 21) | [sr](){0===this.subform.children.length&&warn("XFA - No subforms in te... method [xr] (line 21) | [xr](){return!0} method [Vr] (line 21) | [Vr](e,t){return e.startsWith("#")?[this[Dr].get(e.slice(1))]:searchNo... method [tn] (line 21) | *[tn](){if(!this.subform.children.length)return HTMLResult.success({na... class Text (line 21) | class Text extends ContentObject{constructor(e){super(Hn,"text");this.id... method constructor (line 21) | constructor(e){super(Hn,"text");this.id=e.id||"";this.maxChars=getInte... method [Ws] (line 21) | [Ws](){return!0} method [Kr] (line 21) | [Kr](e){if(e[Jr]===on.xhtml.id){this[er]=e;return!0}warn(`XFA - Invali... method [qr] (line 21) | [qr](e){this[er]instanceof XFAObject||super[qr](e)} method [sr] (line 21) | [sr](){"string"==typeof this[er]&&(this[er]=this[er].replaceAll("\r\n"... method [lr] (line 21) | [lr](){return"string"==typeof this[er]?this[er].split(/[\u2029\u2028\n... method [an] (line 21) | [an](e){if("string"==typeof this[er]){const e=valueToHtml(this[er]).ht... class TextEdit (line 21) | class TextEdit extends XFAObject{constructor(e){super(Hn,"textEdit",!0);... method constructor (line 21) | constructor(e){super(Hn,"textEdit",!0);this.allowRichText=getInteger({... method [an] (line 21) | [an](e){const t=toStyle(this,"border","font","margin");let i;const a=t... class Time (line 21) | class Time extends StringObject{constructor(e){super(Hn,"time");this.id=... method constructor (line 21) | constructor(e){super(Hn,"time");this.id=e.id||"";this.name=e.name||"";... method [sr] (line 21) | [sr](){const e=this[er].trim();this[er]=e?new Date(e):null} method [an] (line 21) | [an](e){return valueToHtml(this[er]?this[er].toString():"")} class TimeStamp (line 21) | class TimeStamp extends XFAObject{constructor(e){super(Hn,"timeStamp");t... method constructor (line 21) | constructor(e){super(Hn,"timeStamp");this.id=e.id||"";this.server=e.se... class ToolTip (line 21) | class ToolTip extends StringObject{constructor(e){super(Hn,"toolTip");th... method constructor (line 21) | constructor(e){super(Hn,"toolTip");this.id=e.id||"";this.rid=e.rid||""... class Traversal (line 21) | class Traversal extends XFAObject{constructor(e){super(Hn,"traversal",!0... method constructor (line 21) | constructor(e){super(Hn,"traversal",!0);this.id=e.id||"";this.use=e.us... class Traverse (line 21) | class Traverse extends XFAObject{constructor(e){super(Hn,"traverse",!0);... method constructor (line 21) | constructor(e){super(Hn,"traverse",!0);this.id=e.id||"";this.operation... method name (line 21) | get name(){return this.operation} method [Mr] (line 21) | [Mr](){return!1} class Ui (line 21) | class Ui extends XFAObject{constructor(e){super(Hn,"ui",!0);this.id=e.id... method constructor (line 21) | constructor(e){super(Hn,"ui",!0);this.id=e.id||"";this.use=e.use||"";t... method [lr] (line 21) | [lr](){if(void 0===this[ar]){for(const e of Object.getOwnPropertyNames... method [an] (line 21) | [an](e){const t=this[lr]();return t?t[an](e):HTMLResult.EMPTY} class Validate (line 21) | class Validate extends XFAObject{constructor(e){super(Hn,"validate",!0);... method constructor (line 21) | constructor(e){super(Hn,"validate",!0);this.formatTest=getStringOption... class Value (line 21) | class Value extends XFAObject{constructor(e){super(Hn,"value",!0);this.i... method constructor (line 21) | constructor(e){super(Hn,"value",!0);this.id=e.id||"";this.override=get... method [$r] (line 21) | [$r](e){const t=this[pr]();if(t instanceof Field&&t.ui?.imageEdit){if(... method [en] (line 21) | [en](){if(this.exData)return"string"==typeof this.exData[er]?this.exDa... method [an] (line 21) | [an](e){for(const t of Object.getOwnPropertyNames(this)){const i=this[... class Variables (line 21) | class Variables extends XFAObject{constructor(e){super(Hn,"variables",!0... method constructor (line 21) | constructor(e){super(Hn,"variables",!0);this.id=e.id||"";this.use=e.us... method [Mr] (line 21) | [Mr](){return!0} class TemplateNamespace (line 21) | class TemplateNamespace{static[gn](e,t){if(TemplateNamespace.hasOwnPrope... method [gn] (line 21) | static[gn](e,t){if(TemplateNamespace.hasOwnProperty(e)){const i=Templa... method appearanceFilter (line 21) | static appearanceFilter(e){return new AppearanceFilter(e)} method arc (line 21) | static arc(e){return new Arc(e)} method area (line 21) | static area(e){return new Area(e)} method assist (line 21) | static assist(e){return new Assist(e)} method barcode (line 21) | static barcode(e){return new Barcode(e)} method bind (line 21) | static bind(e){return new Bind(e)} method bindItems (line 21) | static bindItems(e){return new BindItems(e)} method bookend (line 21) | static bookend(e){return new Bookend(e)} method boolean (line 21) | static boolean(e){return new BooleanElement(e)} method border (line 21) | static border(e){return new Border(e)} method break (line 21) | static break(e){return new Break(e)} method breakAfter (line 21) | static breakAfter(e){return new BreakAfter(e)} method breakBefore (line 21) | static breakBefore(e){return new BreakBefore(e)} method button (line 21) | static button(e){return new Button(e)} method calculate (line 21) | static calculate(e){return new Calculate(e)} method caption (line 21) | static caption(e){return new Caption(e)} method certificate (line 21) | static certificate(e){return new Certificate(e)} method certificates (line 21) | static certificates(e){return new Certificates(e)} method checkButton (line 21) | static checkButton(e){return new CheckButton(e)} method choiceList (line 21) | static choiceList(e){return new ChoiceList(e)} method color (line 21) | static color(e){return new Color(e)} method comb (line 21) | static comb(e){return new Comb(e)} method connect (line 21) | static connect(e){return new Connect(e)} method contentArea (line 21) | static contentArea(e){return new ContentArea(e)} method corner (line 21) | static corner(e){return new Corner(e)} method date (line 21) | static date(e){return new DateElement(e)} method dateTime (line 21) | static dateTime(e){return new DateTime(e)} method dateTimeEdit (line 21) | static dateTimeEdit(e){return new DateTimeEdit(e)} method decimal (line 21) | static decimal(e){return new Decimal(e)} method defaultUi (line 21) | static defaultUi(e){return new DefaultUi(e)} method desc (line 21) | static desc(e){return new Desc(e)} method digestMethod (line 21) | static digestMethod(e){return new DigestMethod(e)} method digestMethods (line 21) | static digestMethods(e){return new DigestMethods(e)} method draw (line 21) | static draw(e){return new Draw(e)} method edge (line 21) | static edge(e){return new Edge(e)} method encoding (line 21) | static encoding(e){return new Encoding(e)} method encodings (line 21) | static encodings(e){return new Encodings(e)} method encrypt (line 21) | static encrypt(e){return new Encrypt(e)} method encryptData (line 21) | static encryptData(e){return new EncryptData(e)} method encryption (line 21) | static encryption(e){return new Encryption(e)} method encryptionMethod (line 21) | static encryptionMethod(e){return new EncryptionMethod(e)} method encryptionMethods (line 21) | static encryptionMethods(e){return new EncryptionMethods(e)} method event (line 21) | static event(e){return new Event(e)} method exData (line 21) | static exData(e){return new ExData(e)} method exObject (line 21) | static exObject(e){return new ExObject(e)} method exclGroup (line 21) | static exclGroup(e){return new ExclGroup(e)} method execute (line 21) | static execute(e){return new Execute(e)} method extras (line 21) | static extras(e){return new Extras(e)} method field (line 21) | static field(e){return new Field(e)} method fill (line 21) | static fill(e){return new Fill(e)} method filter (line 21) | static filter(e){return new Filter(e)} method float (line 21) | static float(e){return new Float(e)} method font (line 21) | static font(e){return new template_Font(e)} method format (line 21) | static format(e){return new Format(e)} method handler (line 21) | static handler(e){return new Handler(e)} method hyphenation (line 21) | static hyphenation(e){return new Hyphenation(e)} method image (line 21) | static image(e){return new Image(e)} method imageEdit (line 21) | static imageEdit(e){return new ImageEdit(e)} method integer (line 21) | static integer(e){return new Integer(e)} method issuers (line 21) | static issuers(e){return new Issuers(e)} method items (line 21) | static items(e){return new Items(e)} method keep (line 21) | static keep(e){return new Keep(e)} method keyUsage (line 21) | static keyUsage(e){return new KeyUsage(e)} method line (line 21) | static line(e){return new Line(e)} method linear (line 21) | static linear(e){return new Linear(e)} method lockDocument (line 21) | static lockDocument(e){return new LockDocument(e)} method manifest (line 21) | static manifest(e){return new Manifest(e)} method margin (line 21) | static margin(e){return new Margin(e)} method mdp (line 21) | static mdp(e){return new Mdp(e)} method medium (line 21) | static medium(e){return new Medium(e)} method message (line 21) | static message(e){return new Message(e)} method numericEdit (line 21) | static numericEdit(e){return new NumericEdit(e)} method occur (line 21) | static occur(e){return new Occur(e)} method oid (line 21) | static oid(e){return new Oid(e)} method oids (line 21) | static oids(e){return new Oids(e)} method overflow (line 21) | static overflow(e){return new Overflow(e)} method pageArea (line 21) | static pageArea(e){return new PageArea(e)} method pageSet (line 21) | static pageSet(e){return new PageSet(e)} method para (line 21) | static para(e){return new Para(e)} method passwordEdit (line 21) | static passwordEdit(e){return new PasswordEdit(e)} method pattern (line 21) | static pattern(e){return new template_Pattern(e)} method picture (line 21) | static picture(e){return new Picture(e)} method proto (line 21) | static proto(e){return new Proto(e)} method radial (line 21) | static radial(e){return new Radial(e)} method reason (line 21) | static reason(e){return new Reason(e)} method reasons (line 21) | static reasons(e){return new Reasons(e)} method rectangle (line 21) | static rectangle(e){return new Rectangle(e)} method ref (line 21) | static ref(e){return new RefElement(e)} method script (line 21) | static script(e){return new Script(e)} method setProperty (line 21) | static setProperty(e){return new SetProperty(e)} method signData (line 21) | static signData(e){return new SignData(e)} method signature (line 21) | static signature(e){return new Signature(e)} method signing (line 21) | static signing(e){return new Signing(e)} method solid (line 21) | static solid(e){return new Solid(e)} method speak (line 21) | static speak(e){return new Speak(e)} method stipple (line 21) | static stipple(e){return new Stipple(e)} method subform (line 21) | static subform(e){return new Subform(e)} method subformSet (line 21) | static subformSet(e){return new SubformSet(e)} method subjectDN (line 21) | static subjectDN(e){return new SubjectDN(e)} method subjectDNs (line 21) | static subjectDNs(e){return new SubjectDNs(e)} method submit (line 21) | static submit(e){return new Submit(e)} method template (line 21) | static template(e){return new Template(e)} method text (line 21) | static text(e){return new Text(e)} method textEdit (line 21) | static textEdit(e){return new TextEdit(e)} method time (line 21) | static time(e){return new Time(e)} method timeStamp (line 21) | static timeStamp(e){return new TimeStamp(e)} method toolTip (line 21) | static toolTip(e){return new ToolTip(e)} method traversal (line 21) | static traversal(e){return new Traversal(e)} method traverse (line 21) | static traverse(e){return new Traverse(e)} method ui (line 21) | static ui(e){return new Ui(e)} method validate (line 21) | static validate(e){return new Validate(e)} method value (line 21) | static value(e){return new Value(e)} method variables (line 21) | static variables(e){return new Variables(e)} function createText (line 21) | function createText(e){const t=new Text({});t[er]=e;return t} class Binder (line 21) | class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.da... method constructor (line 21) | constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datase... method _isConsumeData (line 21) | _isConsumeData(){return!this.emptyMerge&&this._mergeMode} method _isMatchTemplate (line 21) | _isMatchTemplate(){return!this._isConsumeData()} method bind (line 21) | bind(){this._bindElement(this.form,this.data);return this.form} method getData (line 21) | getData(){return this.data} method _bindValue (line 21) | _bindValue(e,t,i){e[tr]=t;if(e[wr]())if(t[Rr]()){const i=t[hr]();e[$r]... method _findDataByNameToConsume (line 21) | _findDataByNameToConsume(e,t,i,a){if(!e)return null;let s,r;for(let a=... method _setProperties (line 21) | _setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:i... method _bindItems (line 21) | _bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bind... method _bindOccurrences (line 21) | _bindOccurrences(e,t,i){let a;if(t.length>1){a=e[$s]();a[jr](a.occur);... method _createOccurrences (line 21) | _createOccurrences(e){if(!this.emptyMerge)return;const{occur:t}=e;if(!... method _getOccurInfo (line 21) | _getOccurInfo(e){const{name:t,occur:i}=e;if(!i||!t)return[1,1];const a... method _setAndBind (line 21) | _setAndBind(e,t){this._setProperties(e,t);this._bindItems(e,t);this._b... method _bindElement (line 21) | _bindElement(e,t){const i=[];this._createOccurrences(e);for(const a of... class DataHandler (line 21) | class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||... method constructor (line 21) | constructor(e,t){this.data=t;this.dataset=e.datasets||null} method serialize (line 21) | serialize(e){const t=[[-1,this.data[Er]()]];for(;t.length>0;){const i=... class Acrobat (line 21) | class Acrobat extends XFAObject{constructor(e){super(qn,"acrobat",!0);th... method constructor (line 21) | constructor(e){super(qn,"acrobat",!0);this.acrobat7=null;this.autoSave... class Acrobat7 (line 21) | class Acrobat7 extends XFAObject{constructor(e){super(qn,"acrobat7",!0);... method constructor (line 21) | constructor(e){super(qn,"acrobat7",!0);this.dynamicRender=null} class ADBE_JSConsole (line 21) | class ADBE_JSConsole extends OptionObject{constructor(e){super(qn,"ADBE_... method constructor (line 21) | constructor(e){super(qn,"ADBE_JSConsole",["delegate","Enable","Disable... class ADBE_JSDebugger (line 21) | class ADBE_JSDebugger extends OptionObject{constructor(e){super(qn,"ADBE... method constructor (line 21) | constructor(e){super(qn,"ADBE_JSDebugger",["delegate","Enable","Disabl... class AddSilentPrint (line 21) | class AddSilentPrint extends Option01{constructor(e){super(qn,"addSilent... method constructor (line 21) | constructor(e){super(qn,"addSilentPrint")} class AddViewerPreferences (line 21) | class AddViewerPreferences extends Option01{constructor(e){super(qn,"add... method constructor (line 21) | constructor(e){super(qn,"addViewerPreferences")} class AdjustData (line 21) | class AdjustData extends Option10{constructor(e){super(qn,"adjustData")}} method constructor (line 21) | constructor(e){super(qn,"adjustData")} class AdobeExtensionLevel (line 21) | class AdobeExtensionLevel extends IntegerObject{constructor(e){super(qn,... method constructor (line 21) | constructor(e){super(qn,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))} class Agent (line 21) | class Agent extends XFAObject{constructor(e){super(qn,"agent",!0);this.n... method constructor (line 21) | constructor(e){super(qn,"agent",!0);this.name=e.name?e.name.trim():"";... class AlwaysEmbed (line 21) | class AlwaysEmbed extends ContentObject{constructor(e){super(qn,"alwaysE... method constructor (line 21) | constructor(e){super(qn,"alwaysEmbed")} class Amd (line 21) | class Amd extends StringObject{constructor(e){super(qn,"amd")}} method constructor (line 21) | constructor(e){super(qn,"amd")} class config_Area (line 21) | class config_Area extends XFAObject{constructor(e){super(qn,"area");this... method constructor (line 21) | constructor(e){super(qn,"area");this.level=getInteger({data:e.level,de... class Attributes (line 21) | class Attributes extends OptionObject{constructor(e){super(qn,"attribute... method constructor (line 21) | constructor(e){super(qn,"attributes",["preserve","delegate","ignore"])} class AutoSave (line 21) | class AutoSave extends OptionObject{constructor(e){super(qn,"autoSave",[... method constructor (line 21) | constructor(e){super(qn,"autoSave",["disabled","enabled"])} class Base (line 21) | class Base extends StringObject{constructor(e){super(qn,"base")}} method constructor (line 21) | constructor(e){super(qn,"base")} class BatchOutput (line 21) | class BatchOutput extends XFAObject{constructor(e){super(qn,"batchOutput... method constructor (line 21) | constructor(e){super(qn,"batchOutput");this.format=getStringOption(e.f... class BehaviorOverride (line 21) | class BehaviorOverride extends ContentObject{constructor(e){super(qn,"be... method constructor (line 21) | constructor(e){super(qn,"behaviorOverride")} method [sr] (line 21) | [sr](){this[er]=new Map(this[er].trim().split(/\s+/).filter((e=>e.incl... class Cache (line 21) | class Cache extends XFAObject{constructor(e){super(qn,"cache",!0);this.t... method constructor (line 21) | constructor(e){super(qn,"cache",!0);this.templateCache=null} class Change (line 21) | class Change extends Option01{constructor(e){super(qn,"change")}} method constructor (line 21) | constructor(e){super(qn,"change")} class Common (line 21) | class Common extends XFAObject{constructor(e){super(qn,"common",!0);this... method constructor (line 21) | constructor(e){super(qn,"common",!0);this.data=null;this.locale=null;t... class Compress (line 21) | class Compress extends XFAObject{constructor(e){super(qn,"compress");thi... method constructor (line 21) | constructor(e){super(qn,"compress");this.scope=getStringOption(e.scope... class CompressLogicalStructure (line 21) | class CompressLogicalStructure extends Option01{constructor(e){super(qn,... method constructor (line 21) | constructor(e){super(qn,"compressLogicalStructure")} class CompressObjectStream (line 21) | class CompressObjectStream extends Option10{constructor(e){super(qn,"com... method constructor (line 21) | constructor(e){super(qn,"compressObjectStream")} class Compression (line 21) | class Compression extends XFAObject{constructor(e){super(qn,"compression... method constructor (line 21) | constructor(e){super(qn,"compression",!0);this.compressLogicalStructur... class Config (line 21) | class Config extends XFAObject{constructor(e){super(qn,"config",!0);this... method constructor (line 21) | constructor(e){super(qn,"config",!0);this.acrobat=null;this.present=nu... class Conformance (line 21) | class Conformance extends OptionObject{constructor(e){super(qn,"conforma... method constructor (line 21) | constructor(e){super(qn,"conformance",["A","B"])} class ContentCopy (line 21) | class ContentCopy extends Option01{constructor(e){super(qn,"contentCopy")}} method constructor (line 21) | constructor(e){super(qn,"contentCopy")} class Copies (line 21) | class Copies extends IntegerObject{constructor(e){super(qn,"copies",1,(e... method constructor (line 21) | constructor(e){super(qn,"copies",1,(e=>e>=1))} class Creator (line 21) | class Creator extends StringObject{constructor(e){super(qn,"creator")}} method constructor (line 21) | constructor(e){super(qn,"creator")} class CurrentPage (line 21) | class CurrentPage extends IntegerObject{constructor(e){super(qn,"current... method constructor (line 21) | constructor(e){super(qn,"currentPage",0,(e=>e>=0))} class Data (line 21) | class Data extends XFAObject{constructor(e){super(qn,"data",!0);this.adj... method constructor (line 21) | constructor(e){super(qn,"data",!0);this.adjustData=null;this.attribute... class Debug (line 21) | class Debug extends XFAObject{constructor(e){super(qn,"debug",!0);this.u... method constructor (line 21) | constructor(e){super(qn,"debug",!0);this.uri=null} class DefaultTypeface (line 21) | class DefaultTypeface extends ContentObject{constructor(e){super(qn,"def... method constructor (line 21) | constructor(e){super(qn,"defaultTypeface");this.writingScript=getStrin... class Destination (line 21) | class Destination extends OptionObject{constructor(e){super(qn,"destinat... method constructor (line 21) | constructor(e){super(qn,"destination",["pdf","pcl","ps","webClient","z... class DocumentAssembly (line 21) | class DocumentAssembly extends Option01{constructor(e){super(qn,"documen... method constructor (line 21) | constructor(e){super(qn,"documentAssembly")} class Driver (line 21) | class Driver extends XFAObject{constructor(e){super(qn,"driver",!0);this... method constructor (line 21) | constructor(e){super(qn,"driver",!0);this.name=e.name?e.name.trim():""... class DuplexOption (line 21) | class DuplexOption extends OptionObject{constructor(e){super(qn,"duplexO... method constructor (line 21) | constructor(e){super(qn,"duplexOption",["simplex","duplexFlipLongEdge"... class DynamicRender (line 21) | class DynamicRender extends OptionObject{constructor(e){super(qn,"dynami... method constructor (line 21) | constructor(e){super(qn,"dynamicRender",["forbidden","required"])} class Embed (line 21) | class Embed extends Option01{constructor(e){super(qn,"embed")}} method constructor (line 21) | constructor(e){super(qn,"embed")} class config_Encrypt (line 21) | class config_Encrypt extends Option01{constructor(e){super(qn,"encrypt")}} method constructor (line 21) | constructor(e){super(qn,"encrypt")} class config_Encryption (line 21) | class config_Encryption extends XFAObject{constructor(e){super(qn,"encry... method constructor (line 21) | constructor(e){super(qn,"encryption",!0);this.encrypt=null;this.encryp... class EncryptionLevel (line 21) | class EncryptionLevel extends OptionObject{constructor(e){super(qn,"encr... method constructor (line 21) | constructor(e){super(qn,"encryptionLevel",["40bit","128bit"])} class Enforce (line 21) | class Enforce extends StringObject{constructor(e){super(qn,"enforce")}} method constructor (line 21) | constructor(e){super(qn,"enforce")} class Equate (line 21) | class Equate extends XFAObject{constructor(e){super(qn,"equate");this.fo... method constructor (line 21) | constructor(e){super(qn,"equate");this.force=getInteger({data:e.force,... class EquateRange (line 21) | class EquateRange extends XFAObject{constructor(e){super(qn,"equateRange... method constructor (line 21) | constructor(e){super(qn,"equateRange");this.from=e.from||"";this.to=e.... method unicodeRange (line 21) | get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,i=this._unicodeRan... class Exclude (line 21) | class Exclude extends ContentObject{constructor(e){super(qn,"exclude")}[... method constructor (line 21) | constructor(e){super(qn,"exclude")} method [sr] (line 21) | [sr](){this[er]=this[er].trim().split(/\s+/).filter((e=>e&&["calculate... class ExcludeNS (line 21) | class ExcludeNS extends StringObject{constructor(e){super(qn,"excludeNS")}} method constructor (line 21) | constructor(e){super(qn,"excludeNS")} class FlipLabel (line 21) | class FlipLabel extends OptionObject{constructor(e){super(qn,"flipLabel"... method constructor (line 21) | constructor(e){super(qn,"flipLabel",["usePrinterSetting","on","off"])} class config_FontInfo (line 21) | class config_FontInfo extends XFAObject{constructor(e){super(qn,"fontInf... method constructor (line 21) | constructor(e){super(qn,"fontInfo",!0);this.embed=null;this.map=null;t... class FormFieldFilling (line 21) | class FormFieldFilling extends Option01{constructor(e){super(qn,"formFie... method constructor (line 21) | constructor(e){super(qn,"formFieldFilling")} class GroupParent (line 21) | class GroupParent extends StringObject{constructor(e){super(qn,"groupPar... method constructor (line 21) | constructor(e){super(qn,"groupParent")} class IfEmpty (line 21) | class IfEmpty extends OptionObject{constructor(e){super(qn,"ifEmpty",["d... method constructor (line 21) | constructor(e){super(qn,"ifEmpty",["dataValue","dataGroup","ignore","r... class IncludeXDPContent (line 21) | class IncludeXDPContent extends StringObject{constructor(e){super(qn,"in... method constructor (line 21) | constructor(e){super(qn,"includeXDPContent")} class IncrementalLoad (line 21) | class IncrementalLoad extends OptionObject{constructor(e){super(qn,"incr... method constructor (line 21) | constructor(e){super(qn,"incrementalLoad",["none","forwardOnly"])} class IncrementalMerge (line 21) | class IncrementalMerge extends Option01{constructor(e){super(qn,"increme... method constructor (line 21) | constructor(e){super(qn,"incrementalMerge")} class Interactive (line 21) | class Interactive extends Option01{constructor(e){super(qn,"interactive")}} method constructor (line 21) | constructor(e){super(qn,"interactive")} class Jog (line 21) | class Jog extends OptionObject{constructor(e){super(qn,"jog",["usePrinte... method constructor (line 21) | constructor(e){super(qn,"jog",["usePrinterSetting","none","pageSet"])} class LabelPrinter (line 21) | class LabelPrinter extends XFAObject{constructor(e){super(qn,"labelPrint... method constructor (line 21) | constructor(e){super(qn,"labelPrinter",!0);this.name=getStringOption(e... class Layout (line 21) | class Layout extends OptionObject{constructor(e){super(qn,"layout",["pag... method constructor (line 21) | constructor(e){super(qn,"layout",["paginate","panel"])} class Level (line 21) | class Level extends IntegerObject{constructor(e){super(qn,"level",0,(e=>... method constructor (line 21) | constructor(e){super(qn,"level",0,(e=>e>0))} class Linearized (line 21) | class Linearized extends Option01{constructor(e){super(qn,"linearized")}} method constructor (line 21) | constructor(e){super(qn,"linearized")} class Locale (line 21) | class Locale extends StringObject{constructor(e){super(qn,"locale")}} method constructor (line 21) | constructor(e){super(qn,"locale")} class LocaleSet (line 21) | class LocaleSet extends StringObject{constructor(e){super(qn,"localeSet")}} method constructor (line 21) | constructor(e){super(qn,"localeSet")} class Log (line 21) | class Log extends XFAObject{constructor(e){super(qn,"log",!0);this.mode=... method constructor (line 21) | constructor(e){super(qn,"log",!0);this.mode=null;this.threshold=null;t... class MapElement (line 21) | class MapElement extends XFAObject{constructor(e){super(qn,"map",!0);thi... method constructor (line 21) | constructor(e){super(qn,"map",!0);this.equate=new XFAObjectArray;this.... class MediumInfo (line 21) | class MediumInfo extends XFAObject{constructor(e){super(qn,"mediumInfo",... method constructor (line 21) | constructor(e){super(qn,"mediumInfo",!0);this.map=null} class config_Message (line 21) | class config_Message extends XFAObject{constructor(e){super(qn,"message"... method constructor (line 21) | constructor(e){super(qn,"message",!0);this.msgId=null;this.severity=null} class Messaging (line 21) | class Messaging extends XFAObject{constructor(e){super(qn,"messaging",!0... method constructor (line 21) | constructor(e){super(qn,"messaging",!0);this.message=new XFAObjectArray} class Mode (line 21) | class Mode extends OptionObject{constructor(e){super(qn,"mode",["append"... method constructor (line 21) | constructor(e){super(qn,"mode",["append","overwrite"])} class ModifyAnnots (line 21) | class ModifyAnnots extends Option01{constructor(e){super(qn,"modifyAnnot... method constructor (line 21) | constructor(e){super(qn,"modifyAnnots")} class MsgId (line 21) | class MsgId extends IntegerObject{constructor(e){super(qn,"msgId",1,(e=>... method constructor (line 21) | constructor(e){super(qn,"msgId",1,(e=>e>=1))} class NameAttr (line 21) | class NameAttr extends StringObject{constructor(e){super(qn,"nameAttr")}} method constructor (line 21) | constructor(e){super(qn,"nameAttr")} class NeverEmbed (line 21) | class NeverEmbed extends ContentObject{constructor(e){super(qn,"neverEmb... method constructor (line 21) | constructor(e){super(qn,"neverEmbed")} class NumberOfCopies (line 21) | class NumberOfCopies extends IntegerObject{constructor(e){super(qn,"numb... method constructor (line 21) | constructor(e){super(qn,"numberOfCopies",null,(e=>e>=2&&e<=5))} class OpenAction (line 21) | class OpenAction extends XFAObject{constructor(e){super(qn,"openAction",... method constructor (line 21) | constructor(e){super(qn,"openAction",!0);this.destination=null} class Output (line 21) | class Output extends XFAObject{constructor(e){super(qn,"output",!0);this... method constructor (line 21) | constructor(e){super(qn,"output",!0);this.to=null;this.type=null;this.... class OutputBin (line 21) | class OutputBin extends StringObject{constructor(e){super(qn,"outputBin")}} method constructor (line 21) | constructor(e){super(qn,"outputBin")} class OutputXSL (line 21) | class OutputXSL extends XFAObject{constructor(e){super(qn,"outputXSL",!0... method constructor (line 21) | constructor(e){super(qn,"outputXSL",!0);this.uri=null} class Overprint (line 21) | class Overprint extends OptionObject{constructor(e){super(qn,"overprint"... method constructor (line 21) | constructor(e){super(qn,"overprint",["none","both","draw","field"])} class Packets (line 21) | class Packets extends StringObject{constructor(e){super(qn,"packets")}[s... method constructor (line 21) | constructor(e){super(qn,"packets")} method [sr] (line 21) | [sr](){"*"!==this[er]&&(this[er]=this[er].trim().split(/\s+/).filter((... class PageOffset (line 21) | class PageOffset extends XFAObject{constructor(e){super(qn,"pageOffset")... method constructor (line 21) | constructor(e){super(qn,"pageOffset");this.x=getInteger({data:e.x,defa... class PageRange (line 21) | class PageRange extends StringObject{constructor(e){super(qn,"pageRange"... method constructor (line 21) | constructor(e){super(qn,"pageRange")} method [sr] (line 21) | [sr](){const e=this[er].trim().split(/\s+/).map((e=>parseInt(e,10))),t... class Pagination (line 21) | class Pagination extends OptionObject{constructor(e){super(qn,"paginatio... method constructor (line 21) | constructor(e){super(qn,"pagination",["simplex","duplexShortEdge","dup... class PaginationOverride (line 21) | class PaginationOverride extends OptionObject{constructor(e){super(qn,"p... method constructor (line 21) | constructor(e){super(qn,"paginationOverride",["none","forceDuplex","fo... class Part (line 21) | class Part extends IntegerObject{constructor(e){super(qn,"part",1,(e=>!1... method constructor (line 21) | constructor(e){super(qn,"part",1,(e=>!1))} class Pcl (line 21) | class Pcl extends XFAObject{constructor(e){super(qn,"pcl",!0);this.name=... method constructor (line 21) | constructor(e){super(qn,"pcl",!0);this.name=e.name||"";this.batchOutpu... class Pdf (line 21) | class Pdf extends XFAObject{constructor(e){super(qn,"pdf",!0);this.name=... method constructor (line 21) | constructor(e){super(qn,"pdf",!0);this.name=e.name||"";this.adobeExten... class Pdfa (line 21) | class Pdfa extends XFAObject{constructor(e){super(qn,"pdfa",!0);this.amd... method constructor (line 21) | constructor(e){super(qn,"pdfa",!0);this.amd=null;this.conformance=null... class Permissions (line 21) | class Permissions extends XFAObject{constructor(e){super(qn,"permissions... method constructor (line 21) | constructor(e){super(qn,"permissions",!0);this.accessibleContent=null;... class PickTrayByPDFSize (line 21) | class PickTrayByPDFSize extends Option01{constructor(e){super(qn,"pickTr... method constructor (line 21) | constructor(e){super(qn,"pickTrayByPDFSize")} class config_Picture (line 21) | class config_Picture extends StringObject{constructor(e){super(qn,"pictu... method constructor (line 21) | constructor(e){super(qn,"picture")} class PlaintextMetadata (line 21) | class PlaintextMetadata extends Option01{constructor(e){super(qn,"plaint... method constructor (line 21) | constructor(e){super(qn,"plaintextMetadata")} class Presence (line 21) | class Presence extends OptionObject{constructor(e){super(qn,"presence",[... method constructor (line 21) | constructor(e){super(qn,"presence",["preserve","dissolve","dissolveStr... class Present (line 21) | class Present extends XFAObject{constructor(e){super(qn,"present",!0);th... method constructor (line 21) | constructor(e){super(qn,"present",!0);this.behaviorOverride=null;this.... class Print (line 21) | class Print extends Option01{constructor(e){super(qn,"print")}} method constructor (line 21) | constructor(e){super(qn,"print")} class PrintHighQuality (line 21) | class PrintHighQuality extends Option01{constructor(e){super(qn,"printHi... method constructor (line 21) | constructor(e){super(qn,"printHighQuality")} class PrintScaling (line 21) | class PrintScaling extends OptionObject{constructor(e){super(qn,"printSc... method constructor (line 21) | constructor(e){super(qn,"printScaling",["appdefault","noScaling"])} class PrinterName (line 21) | class PrinterName extends StringObject{constructor(e){super(qn,"printerN... method constructor (line 21) | constructor(e){super(qn,"printerName")} class Producer (line 21) | class Producer extends StringObject{constructor(e){super(qn,"producer")}} method constructor (line 21) | constructor(e){super(qn,"producer")} class Ps (line 21) | class Ps extends XFAObject{constructor(e){super(qn,"ps",!0);this.name=e.... method constructor (line 21) | constructor(e){super(qn,"ps",!0);this.name=e.name||"";this.batchOutput... class Range (line 21) | class Range extends ContentObject{constructor(e){super(qn,"range")}[sr](... method constructor (line 21) | constructor(e){super(qn,"range")} method [sr] (line 21) | [sr](){this[er]=this[er].trim().split(/\s*,\s*/,2).map((e=>e.split("-"... class Record (line 21) | class Record extends ContentObject{constructor(e){super(qn,"record")}[sr... method constructor (line 21) | constructor(e){super(qn,"record")} method [sr] (line 21) | [sr](){this[er]=this[er].trim();const e=parseInt(this[er],10);!isNaN(e... class Relevant (line 21) | class Relevant extends ContentObject{constructor(e){super(qn,"relevant")... method constructor (line 21) | constructor(e){super(qn,"relevant")} method [sr] (line 21) | [sr](){this[er]=this[er].trim().split(/\s+/)} class Rename (line 21) | class Rename extends ContentObject{constructor(e){super(qn,"rename")}[sr... method constructor (line 21) | constructor(e){super(qn,"rename")} method [sr] (line 21) | [sr](){this[er]=this[er].trim();(this[er].toLowerCase().startsWith("xm... class RenderPolicy (line 21) | class RenderPolicy extends OptionObject{constructor(e){super(qn,"renderP... method constructor (line 21) | constructor(e){super(qn,"renderPolicy",["server","client"])} class RunScripts (line 21) | class RunScripts extends OptionObject{constructor(e){super(qn,"runScript... method constructor (line 21) | constructor(e){super(qn,"runScripts",["both","client","none","server"])} class config_Script (line 21) | class config_Script extends XFAObject{constructor(e){super(qn,"script",!... method constructor (line 21) | constructor(e){super(qn,"script",!0);this.currentPage=null;this.exclud... class ScriptModel (line 21) | class ScriptModel extends OptionObject{constructor(e){super(qn,"scriptMo... method constructor (line 21) | constructor(e){super(qn,"scriptModel",["XFA","none"])} class Severity (line 21) | class Severity extends OptionObject{constructor(e){super(qn,"severity",[... method constructor (line 21) | constructor(e){super(qn,"severity",["ignore","error","information","tr... class SilentPrint (line 21) | class SilentPrint extends XFAObject{constructor(e){super(qn,"silentPrint... method constructor (line 21) | constructor(e){super(qn,"silentPrint",!0);this.addSilentPrint=null;thi... class Staple (line 21) | class Staple extends XFAObject{constructor(e){super(qn,"staple");this.mo... method constructor (line 21) | constructor(e){super(qn,"staple");this.mode=getStringOption(e.mode,["u... class StartNode (line 21) | class StartNode extends StringObject{constructor(e){super(qn,"startNode")}} method constructor (line 21) | constructor(e){super(qn,"startNode")} class StartPage (line 21) | class StartPage extends IntegerObject{constructor(e){super(qn,"startPage... method constructor (line 21) | constructor(e){super(qn,"startPage",0,(e=>!0))} class SubmitFormat (line 21) | class SubmitFormat extends OptionObject{constructor(e){super(qn,"submitF... method constructor (line 21) | constructor(e){super(qn,"submitFormat",["html","delegate","fdf","xml",... class SubmitUrl (line 21) | class SubmitUrl extends StringObject{constructor(e){super(qn,"submitUrl")}} method constructor (line 21) | constructor(e){super(qn,"submitUrl")} class SubsetBelow (line 21) | class SubsetBelow extends IntegerObject{constructor(e){super(qn,"subsetB... method constructor (line 21) | constructor(e){super(qn,"subsetBelow",100,(e=>e>=0&&e<=100))} class SuppressBanner (line 21) | class SuppressBanner extends Option01{constructor(e){super(qn,"suppressB... method constructor (line 21) | constructor(e){super(qn,"suppressBanner")} class Tagged (line 21) | class Tagged extends Option01{constructor(e){super(qn,"tagged")}} method constructor (line 21) | constructor(e){super(qn,"tagged")} class config_Template (line 21) | class config_Template extends XFAObject{constructor(e){super(qn,"templat... method constructor (line 21) | constructor(e){super(qn,"template",!0);this.base=null;this.relevant=nu... class Threshold (line 21) | class Threshold extends OptionObject{constructor(e){super(qn,"threshold"... method constructor (line 21) | constructor(e){super(qn,"threshold",["trace","error","information","wa... class To (line 21) | class To extends OptionObject{constructor(e){super(qn,"to",["null","memo... method constructor (line 21) | constructor(e){super(qn,"to",["null","memory","stderr","stdout","syste... class TemplateCache (line 21) | class TemplateCache extends XFAObject{constructor(e){super(qn,"templateC... method constructor (line 21) | constructor(e){super(qn,"templateCache");this.maxEntries=getInteger({d... class Trace (line 21) | class Trace extends XFAObject{constructor(e){super(qn,"trace",!0);this.a... method constructor (line 21) | constructor(e){super(qn,"trace",!0);this.area=new XFAObjectArray} class Transform (line 21) | class Transform extends XFAObject{constructor(e){super(qn,"transform",!0... method constructor (line 21) | constructor(e){super(qn,"transform",!0);this.groupParent=null;this.ifE... class Type (line 21) | class Type extends OptionObject{constructor(e){super(qn,"type",["none","... method constructor (line 21) | constructor(e){super(qn,"type",["none","ascii85","asciiHex","ccittfax"... class Uri (line 21) | class Uri extends StringObject{constructor(e){super(qn,"uri")}} method constructor (line 21) | constructor(e){super(qn,"uri")} class config_Validate (line 21) | class config_Validate extends OptionObject{constructor(e){super(qn,"vali... method constructor (line 21) | constructor(e){super(qn,"validate",["preSubmit","prePrint","preExecute... class ValidateApprovalSignatures (line 21) | class ValidateApprovalSignatures extends ContentObject{constructor(e){su... method constructor (line 21) | constructor(e){super(qn,"validateApprovalSignatures")} method [sr] (line 21) | [sr](){this[er]=this[er].trim().split(/\s+/).filter((e=>["docReady","p... class ValidationMessaging (line 21) | class ValidationMessaging extends OptionObject{constructor(e){super(qn,"... method constructor (line 21) | constructor(e){super(qn,"validationMessaging",["allMessagesIndividuall... class Version (line 21) | class Version extends OptionObject{constructor(e){super(qn,"version",["1... method constructor (line 21) | constructor(e){super(qn,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])} class VersionControl (line 21) | class VersionControl extends XFAObject{constructor(e){super(qn,"VersionC... method constructor (line 21) | constructor(e){super(qn,"VersionControl");this.outputBelow=getStringOp... class ViewerPreferences (line 21) | class ViewerPreferences extends XFAObject{constructor(e){super(qn,"viewe... method constructor (line 21) | constructor(e){super(qn,"viewerPreferences",!0);this.ADBE_JSConsole=nu... class WebClient (line 21) | class WebClient extends XFAObject{constructor(e){super(qn,"webClient",!0... method constructor (line 21) | constructor(e){super(qn,"webClient",!0);this.name=e.name?e.name.trim()... class Whitespace (line 21) | class Whitespace extends OptionObject{constructor(e){super(qn,"whitespac... method constructor (line 21) | constructor(e){super(qn,"whitespace",["preserve","ltrim","normalize","... class Window (line 21) | class Window extends ContentObject{constructor(e){super(qn,"window")}[sr... method constructor (line 21) | constructor(e){super(qn,"window")} method [sr] (line 21) | [sr](){const e=this[er].trim().split(/\s*,\s*/,2).map((e=>parseInt(e,1... class Xdc (line 21) | class Xdc extends XFAObject{constructor(e){super(qn,"xdc",!0);this.uri=n... method constructor (line 21) | constructor(e){super(qn,"xdc",!0);this.uri=new XFAObjectArray;this.xsl... class Xdp (line 21) | class Xdp extends XFAObject{constructor(e){super(qn,"xdp",!0);this.packe... method constructor (line 21) | constructor(e){super(qn,"xdp",!0);this.packets=null} class Xsl (line 21) | class Xsl extends XFAObject{constructor(e){super(qn,"xsl",!0);this.debug... method constructor (line 21) | constructor(e){super(qn,"xsl",!0);this.debug=null;this.uri=null} class Zpl (line 21) | class Zpl extends XFAObject{constructor(e){super(qn,"zpl",!0);this.name=... method constructor (line 21) | constructor(e){super(qn,"zpl",!0);this.name=e.name?e.name.trim():"";th... class ConfigNamespace (line 21) | class ConfigNamespace{static[gn](e,t){if(ConfigNamespace.hasOwnProperty(... method [gn] (line 21) | static[gn](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigName... method acrobat (line 21) | static acrobat(e){return new Acrobat(e)} method acrobat7 (line 21) | static acrobat7(e){return new Acrobat7(e)} method ADBE_JSConsole (line 21) | static ADBE_JSConsole(e){return new ADBE_JSConsole(e)} method ADBE_JSDebugger (line 21) | static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)} method addSilentPrint (line 21) | static addSilentPrint(e){return new AddSilentPrint(e)} method addViewerPreferences (line 21) | static addViewerPreferences(e){return new AddViewerPreferences(e)} method adjustData (line 21) | static adjustData(e){return new AdjustData(e)} method adobeExtensionLevel (line 21) | static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)} method agent (line 21) | static agent(e){return new Agent(e)} method alwaysEmbed (line 21) | static alwaysEmbed(e){return new AlwaysEmbed(e)} method amd (line 21) | static amd(e){return new Amd(e)} method area (line 21) | static area(e){return new config_Area(e)} method attributes (line 21) | static attributes(e){return new Attributes(e)} method autoSave (line 21) | static autoSave(e){return new AutoSave(e)} method base (line 21) | static base(e){return new Base(e)} method batchOutput (line 21) | static batchOutput(e){return new BatchOutput(e)} method behaviorOverride (line 21) | static behaviorOverride(e){return new BehaviorOverride(e)} method cache (line 21) | static cache(e){return new Cache(e)} method change (line 21) | static change(e){return new Change(e)} method common (line 21) | static common(e){return new Common(e)} method compress (line 21) | static compress(e){return new Compress(e)} method compressLogicalStructure (line 21) | static compressLogicalStructure(e){return new CompressLogicalStructure... method compressObjectStream (line 21) | static compressObjectStream(e){return new CompressObjectStream(e)} method compression (line 21) | static compression(e){return new Compression(e)} method config (line 21) | static config(e){return new Config(e)} method conformance (line 21) | static conformance(e){return new Conformance(e)} method contentCopy (line 21) | static contentCopy(e){return new ContentCopy(e)} method copies (line 21) | static copies(e){return new Copies(e)} method creator (line 21) | static creator(e){return new Creator(e)} method currentPage (line 21) | static currentPage(e){return new CurrentPage(e)} method data (line 21) | static data(e){return new Data(e)} method debug (line 21) | static debug(e){return new Debug(e)} method defaultTypeface (line 21) | static defaultTypeface(e){return new DefaultTypeface(e)} method destination (line 21) | static destination(e){return new Destination(e)} method documentAssembly (line 21) | static documentAssembly(e){return new DocumentAssembly(e)} method driver (line 21) | static driver(e){return new Driver(e)} method duplexOption (line 21) | static duplexOption(e){return new DuplexOption(e)} method dynamicRender (line 21) | static dynamicRender(e){return new DynamicRender(e)} method embed (line 21) | static embed(e){return new Embed(e)} method encrypt (line 21) | static encrypt(e){return new config_Encrypt(e)} method encryption (line 21) | static encryption(e){return new config_Encryption(e)} method encryptionLevel (line 21) | static encryptionLevel(e){return new EncryptionLevel(e)} method enforce (line 21) | static enforce(e){return new Enforce(e)} method equate (line 21) | static equate(e){return new Equate(e)} method equateRange (line 21) | static equateRange(e){return new EquateRange(e)} method exclude (line 21) | static exclude(e){return new Exclude(e)} method excludeNS (line 21) | static excludeNS(e){return new ExcludeNS(e)} method flipLabel (line 21) | static flipLabel(e){return new FlipLabel(e)} method fontInfo (line 21) | static fontInfo(e){return new config_FontInfo(e)} method formFieldFilling (line 21) | static formFieldFilling(e){return new FormFieldFilling(e)} method groupParent (line 21) | static groupParent(e){return new GroupParent(e)} method ifEmpty (line 21) | static ifEmpty(e){return new IfEmpty(e)} method includeXDPContent (line 21) | static includeXDPContent(e){return new IncludeXDPContent(e)} method incrementalLoad (line 21) | static incrementalLoad(e){return new IncrementalLoad(e)} method incrementalMerge (line 21) | static incrementalMerge(e){return new IncrementalMerge(e)} method interactive (line 21) | static interactive(e){return new Interactive(e)} method jog (line 21) | static jog(e){return new Jog(e)} method labelPrinter (line 21) | static labelPrinter(e){return new LabelPrinter(e)} method layout (line 21) | static layout(e){return new Layout(e)} method level (line 21) | static level(e){return new Level(e)} method linearized (line 21) | static linearized(e){return new Linearized(e)} method locale (line 21) | static locale(e){return new Locale(e)} method localeSet (line 21) | static localeSet(e){return new LocaleSet(e)} method log (line 21) | static log(e){return new Log(e)} method map (line 21) | static map(e){return new MapElement(e)} method mediumInfo (line 21) | static mediumInfo(e){return new MediumInfo(e)} method message (line 21) | static message(e){return new config_Message(e)} method messaging (line 21) | static messaging(e){return new Messaging(e)} method mode (line 21) | static mode(e){return new Mode(e)} method modifyAnnots (line 21) | static modifyAnnots(e){return new ModifyAnnots(e)} method msgId (line 21) | static msgId(e){return new MsgId(e)} method nameAttr (line 21) | static nameAttr(e){return new NameAttr(e)} method neverEmbed (line 21) | static neverEmbed(e){return new NeverEmbed(e)} method numberOfCopies (line 21) | static numberOfCopies(e){return new NumberOfCopies(e)} method openAction (line 21) | static openAction(e){return new OpenAction(e)} method output (line 21) | static output(e){return new Output(e)} method outputBin (line 21) | static outputBin(e){return new OutputBin(e)} method outputXSL (line 21) | static outputXSL(e){return new OutputXSL(e)} method overprint (line 21) | static overprint(e){return new Overprint(e)} method packets (line 21) | static packets(e){return new Packets(e)} method pageOffset (line 21) | static pageOffset(e){return new PageOffset(e)} method pageRange (line 21) | static pageRange(e){return new PageRange(e)} method pagination (line 21) | static pagination(e){return new Pagination(e)} method paginationOverride (line 21) | static paginationOverride(e){return new PaginationOverride(e)} method part (line 21) | static part(e){return new Part(e)} method pcl (line 21) | static pcl(e){return new Pcl(e)} method pdf (line 21) | static pdf(e){return new Pdf(e)} method pdfa (line 21) | static pdfa(e){return new Pdfa(e)} method permissions (line 21) | static permissions(e){return new Permissions(e)} method pickTrayByPDFSize (line 21) | static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)} method picture (line 21) | static picture(e){return new config_Picture(e)} method plaintextMetadata (line 21) | static plaintextMetadata(e){return new PlaintextMetadata(e)} method presence (line 21) | static presence(e){return new Presence(e)} method present (line 21) | static present(e){return new Present(e)} method print (line 21) | static print(e){return new Print(e)} method printHighQuality (line 21) | static printHighQuality(e){return new PrintHighQuality(e)} method printScaling (line 21) | static printScaling(e){return new PrintScaling(e)} method printerName (line 21) | static printerName(e){return new PrinterName(e)} method producer (line 21) | static producer(e){return new Producer(e)} method ps (line 21) | static ps(e){return new Ps(e)} method range (line 21) | static range(e){return new Range(e)} method record (line 21) | static record(e){return new Record(e)} method relevant (line 21) | static relevant(e){return new Relevant(e)} method rename (line 21) | static rename(e){return new Rename(e)} method renderPolicy (line 21) | static renderPolicy(e){return new RenderPolicy(e)} method runScripts (line 21) | static runScripts(e){return new RunScripts(e)} method script (line 21) | static script(e){return new config_Script(e)} method scriptModel (line 21) | static scriptModel(e){return new ScriptModel(e)} method severity (line 21) | static severity(e){return new Severity(e)} method silentPrint (line 21) | static silentPrint(e){return new SilentPrint(e)} method staple (line 21) | static staple(e){return new Staple(e)} method startNode (line 21) | static startNode(e){return new StartNode(e)} method startPage (line 21) | static startPage(e){return new StartPage(e)} method submitFormat (line 21) | static submitFormat(e){return new SubmitFormat(e)} method submitUrl (line 21) | static submitUrl(e){return new SubmitUrl(e)} method subsetBelow (line 21) | static subsetBelow(e){return new SubsetBelow(e)} method suppressBanner (line 21) | static suppressBanner(e){return new SuppressBanner(e)} method tagged (line 21) | static tagged(e){return new Tagged(e)} method template (line 21) | static template(e){return new config_Template(e)} method templateCache (line 21) | static templateCache(e){return new TemplateCache(e)} method threshold (line 21) | static threshold(e){return new Threshold(e)} method to (line 21) | static to(e){return new To(e)} method trace (line 21) | static trace(e){return new Trace(e)} method transform (line 21) | static transform(e){return new Transform(e)} method type (line 21) | static type(e){return new Type(e)} method uri (line 21) | static uri(e){return new Uri(e)} method validate (line 21) | static validate(e){return new config_Validate(e)} method validateApprovalSignatures (line 21) | static validateApprovalSignatures(e){return new ValidateApprovalSignat... method validationMessaging (line 21) | static validationMessaging(e){return new ValidationMessaging(e)} method version (line 21) | static version(e){return new Version(e)} method versionControl (line 21) | static versionControl(e){return new VersionControl(e)} method viewerPreferences (line 21) | static viewerPreferences(e){return new ViewerPreferences(e)} method webClient (line 21) | static webClient(e){return new WebClient(e)} method whitespace (line 21) | static whitespace(e){return new Whitespace(e)} method window (line 21) | static window(e){return new Window(e)} method xdc (line 21) | static xdc(e){return new Xdc(e)} method xdp (line 21) | static xdp(e){return new Xdp(e)} method xsl (line 21) | static xsl(e){return new Xsl(e)} method zpl (line 21) | static zpl(e){return new Zpl(e)} class ConnectionSet (line 21) | class ConnectionSet extends XFAObject{constructor(e){super(On,"connectio... method constructor (line 21) | constructor(e){super(On,"connectionSet",!0);this.wsdlConnection=new XF... class EffectiveInputPolicy (line 21) | class EffectiveInputPolicy extends XFAObject{constructor(e){super(On,"ef... method constructor (line 21) | constructor(e){super(On,"effectiveInputPolicy");this.id=e.id||"";this.... class EffectiveOutputPolicy (line 21) | class EffectiveOutputPolicy extends XFAObject{constructor(e){super(On,"e... method constructor (line 21) | constructor(e){super(On,"effectiveOutputPolicy");this.id=e.id||"";this... class Operation (line 21) | class Operation extends StringObject{constructor(e){super(On,"operation"... method constructor (line 21) | constructor(e){super(On,"operation");this.id=e.id||"";this.input=e.inp... class RootElement (line 21) | class RootElement extends StringObject{constructor(e){super(On,"rootElem... method constructor (line 21) | constructor(e){super(On,"rootElement");this.id=e.id||"";this.name=e.na... class SoapAction (line 21) | class SoapAction extends StringObject{constructor(e){super(On,"soapActio... method constructor (line 21) | constructor(e){super(On,"soapAction");this.id=e.id||"";this.name=e.nam... class SoapAddress (line 21) | class SoapAddress extends StringObject{constructor(e){super(On,"soapAddr... method constructor (line 21) | constructor(e){super(On,"soapAddress");this.id=e.id||"";this.name=e.na... class connection_set_Uri (line 21) | class connection_set_Uri extends StringObject{constructor(e){super(On,"u... method constructor (line 21) | constructor(e){super(On,"uri");this.id=e.id||"";this.name=e.name||"";t... class WsdlAddress (line 21) | class WsdlAddress extends StringObject{constructor(e){super(On,"wsdlAddr... method constructor (line 21) | constructor(e){super(On,"wsdlAddress");this.id=e.id||"";this.name=e.na... class WsdlConnection (line 21) | class WsdlConnection extends XFAObject{constructor(e){super(On,"wsdlConn... method constructor (line 21) | constructor(e){super(On,"wsdlConnection",!0);this.dataDescription=e.da... class XmlConnection (line 21) | class XmlConnection extends XFAObject{constructor(e){super(On,"xmlConnec... method constructor (line 21) | constructor(e){super(On,"xmlConnection",!0);this.dataDescription=e.dat... class XsdConnection (line 21) | class XsdConnection extends XFAObject{constructor(e){super(On,"xsdConnec... method constructor (line 21) | constructor(e){super(On,"xsdConnection",!0);this.dataDescription=e.dat... class ConnectionSetNamespace (line 21) | class ConnectionSetNamespace{static[gn](e,t){if(ConnectionSetNamespace.h... method [gn] (line 21) | static[gn](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return Con... method connectionSet (line 21) | static connectionSet(e){return new ConnectionSet(e)} method effectiveInputPolicy (line 21) | static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)} method effectiveOutputPolicy (line 21) | static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)} method operation (line 21) | static operation(e){return new Operation(e)} method rootElement (line 21) | static rootElement(e){return new RootElement(e)} method soapAction (line 21) | static soapAction(e){return new SoapAction(e)} method soapAddress (line 21) | static soapAddress(e){return new SoapAddress(e)} method uri (line 21) | static uri(e){return new connection_set_Uri(e)} method wsdlAddress (line 21) | static wsdlAddress(e){return new WsdlAddress(e)} method wsdlConnection (line 21) | static wsdlConnection(e){return new WsdlConnection(e)} method xmlConnection (line 21) | static xmlConnection(e){return new XmlConnection(e)} method xsdConnection (line 21) | static xsdConnection(e){return new XsdConnection(e)} class datasets_Data (line 21) | class datasets_Data extends XmlObject{constructor(e){super(Pn,"data",e)}... method constructor (line 21) | constructor(e){super(Pn,"data",e)} method [Gr] (line 21) | [Gr](){return!0} class Datasets (line 21) | class Datasets extends XFAObject{constructor(e){super(Pn,"datasets",!0);... method constructor (line 21) | constructor(e){super(Pn,"datasets",!0);this.data=null;this.Signature=n... method [Kr] (line 21) | [Kr](e){const t=e[Yr];("data"===t&&e[Jr]===Pn||"Signature"===t&&e[Jr]=... class DatasetsNamespace (line 21) | class DatasetsNamespace{static[gn](e,t){if(DatasetsNamespace.hasOwnPrope... method [gn] (line 21) | static[gn](e,t){if(DatasetsNamespace.hasOwnProperty(e))return Datasets... method datasets (line 21) | static datasets(e){return new Datasets(e)} method data (line 21) | static data(e){return new datasets_Data(e)} class CalendarSymbols (line 21) | class CalendarSymbols extends XFAObject{constructor(e){super(Wn,"calenda... method constructor (line 21) | constructor(e){super(Wn,"calendarSymbols",!0);this.name="gregorian";th... class CurrencySymbol (line 21) | class CurrencySymbol extends StringObject{constructor(e){super(Wn,"curre... method constructor (line 21) | constructor(e){super(Wn,"currencySymbol");this.name=getStringOption(e.... class CurrencySymbols (line 21) | class CurrencySymbols extends XFAObject{constructor(e){super(Wn,"currenc... method constructor (line 21) | constructor(e){super(Wn,"currencySymbols",!0);this.currencySymbol=new ... class DatePattern (line 21) | class DatePattern extends StringObject{constructor(e){super(Wn,"datePatt... method constructor (line 21) | constructor(e){super(Wn,"datePattern");this.name=getStringOption(e.nam... class DatePatterns (line 21) | class DatePatterns extends XFAObject{constructor(e){super(Wn,"datePatter... method constructor (line 21) | constructor(e){super(Wn,"datePatterns",!0);this.datePattern=new XFAObj... class DateTimeSymbols (line 21) | class DateTimeSymbols extends ContentObject{constructor(e){super(Wn,"dat... method constructor (line 21) | constructor(e){super(Wn,"dateTimeSymbols")} class Day (line 21) | class Day extends StringObject{constructor(e){super(Wn,"day")}} method constructor (line 21) | constructor(e){super(Wn,"day")} class DayNames (line 21) | class DayNames extends XFAObject{constructor(e){super(Wn,"dayNames",!0);... method constructor (line 21) | constructor(e){super(Wn,"dayNames",!0);this.abbr=getInteger({data:e.ab... class Era (line 21) | class Era extends StringObject{constructor(e){super(Wn,"era")}} method constructor (line 21) | constructor(e){super(Wn,"era")} class EraNames (line 21) | class EraNames extends XFAObject{constructor(e){super(Wn,"eraNames",!0);... method constructor (line 21) | constructor(e){super(Wn,"eraNames",!0);this.era=new XFAObjectArray(2)} class locale_set_Locale (line 21) | class locale_set_Locale extends XFAObject{constructor(e){super(Wn,"local... method constructor (line 21) | constructor(e){super(Wn,"locale",!0);this.desc=e.desc||"";this.name="i... class locale_set_LocaleSet (line 21) | class locale_set_LocaleSet extends XFAObject{constructor(e){super(Wn,"lo... method constructor (line 21) | constructor(e){super(Wn,"localeSet",!0);this.locale=new XFAObjectArray} class Meridiem (line 21) | class Meridiem extends StringObject{constructor(e){super(Wn,"meridiem")}} method constructor (line 21) | constructor(e){super(Wn,"meridiem")} class MeridiemNames (line 21) | class MeridiemNames extends XFAObject{constructor(e){super(Wn,"meridiemN... method constructor (line 21) | constructor(e){super(Wn,"meridiemNames",!0);this.meridiem=new XFAObjec... class Month (line 21) | class Month extends StringObject{constructor(e){super(Wn,"month")}} method constructor (line 21) | constructor(e){super(Wn,"month")} class MonthNames (line 21) | class MonthNames extends XFAObject{constructor(e){super(Wn,"monthNames",... method constructor (line 21) | constructor(e){super(Wn,"monthNames",!0);this.abbr=getInteger({data:e.... class NumberPattern (line 21) | class NumberPattern extends StringObject{constructor(e){super(Wn,"number... method constructor (line 21) | constructor(e){super(Wn,"numberPattern");this.name=getStringOption(e.n... class NumberPatterns (line 21) | class NumberPatterns extends XFAObject{constructor(e){super(Wn,"numberPa... method constructor (line 21) | constructor(e){super(Wn,"numberPatterns",!0);this.numberPattern=new XF... class NumberSymbol (line 21) | class NumberSymbol extends StringObject{constructor(e){super(Wn,"numberS... method constructor (line 21) | constructor(e){super(Wn,"numberSymbol");this.name=getStringOption(e.na... class NumberSymbols (line 21) | class NumberSymbols extends XFAObject{constructor(e){super(Wn,"numberSym... method constructor (line 21) | constructor(e){super(Wn,"numberSymbols",!0);this.numberSymbol=new XFAO... class TimePattern (line 21) | class TimePattern extends StringObject{constructor(e){super(Wn,"timePatt... method constructor (line 21) | constructor(e){super(Wn,"timePattern");this.name=getStringOption(e.nam... class TimePatterns (line 21) | class TimePatterns extends XFAObject{constructor(e){super(Wn,"timePatter... method constructor (line 21) | constructor(e){super(Wn,"timePatterns",!0);this.timePattern=new XFAObj... class TypeFace (line 21) | class TypeFace extends XFAObject{constructor(e){super(Wn,"typeFace",!0);... method constructor (line 21) | constructor(e){super(Wn,"typeFace",!0);this.name=""|e.name} class TypeFaces (line 21) | class TypeFaces extends XFAObject{constructor(e){super(Wn,"typeFaces",!0... method constructor (line 21) | constructor(e){super(Wn,"typeFaces",!0);this.typeFace=new XFAObjectArray} class LocaleSetNamespace (line 21) | class LocaleSetNamespace{static[gn](e,t){if(LocaleSetNamespace.hasOwnPro... method [gn] (line 21) | static[gn](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleS... method calendarSymbols (line 21) | static calendarSymbols(e){return new CalendarSymbols(e)} method currencySymbol (line 21) | static currencySymbol(e){return new CurrencySymbol(e)} method currencySymbols (line 21) | static currencySymbols(e){return new CurrencySymbols(e)} method datePattern (line 21) | static datePattern(e){return new DatePattern(e)} method datePatterns (line 21) | static datePatterns(e){return new DatePatterns(e)} method dateTimeSymbols (line 21) | static dateTimeSymbols(e){return new DateTimeSymbols(e)} method day (line 21) | static day(e){return new Day(e)} method dayNames (line 21) | static dayNames(e){return new DayNames(e)} method era (line 21) | static era(e){return new Era(e)} method eraNames (line 21) | static eraNames(e){return new EraNames(e)} method locale (line 21) | static locale(e){return new locale_set_Locale(e)} method localeSet (line 21) | static localeSet(e){return new locale_set_LocaleSet(e)} method meridiem (line 21) | static meridiem(e){return new Meridiem(e)} method meridiemNames (line 21) | static meridiemNames(e){return new MeridiemNames(e)} method month (line 21) | static month(e){return new Month(e)} method monthNames (line 21) | static monthNames(e){return new MonthNames(e)} method numberPattern (line 21) | static numberPattern(e){return new NumberPattern(e)} method numberPatterns (line 21) | static numberPatterns(e){return new NumberPatterns(e)} method numberSymbol (line 21) | static numberSymbol(e){return new NumberSymbol(e)} method numberSymbols (line 21) | static numberSymbols(e){return new NumberSymbols(e)} method timePattern (line 21) | static timePattern(e){return new TimePattern(e)} method timePatterns (line 21) | static timePatterns(e){return new TimePatterns(e)} method typeFace (line 21) | static typeFace(e){return new TypeFace(e)} method typeFaces (line 21) | static typeFaces(e){return new TypeFaces(e)} class signature_Signature (line 21) | class signature_Signature extends XFAObject{constructor(e){super(jn,"sig... method constructor (line 21) | constructor(e){super(jn,"signature",!0)} class SignatureNamespace (line 21) | class SignatureNamespace{static[gn](e,t){if(SignatureNamespace.hasOwnPro... method [gn] (line 21) | static[gn](e,t){if(SignatureNamespace.hasOwnProperty(e))return Signatu... method signature (line 21) | static signature(e){return new signature_Signature(e)} class Stylesheet (line 21) | class Stylesheet extends XFAObject{constructor(e){super(Xn,"stylesheet",... method constructor (line 21) | constructor(e){super(Xn,"stylesheet",!0)} class StylesheetNamespace (line 21) | class StylesheetNamespace{static[gn](e,t){if(StylesheetNamespace.hasOwnP... method [gn] (line 21) | static[gn](e,t){if(StylesheetNamespace.hasOwnProperty(e))return Styles... method stylesheet (line 21) | static stylesheet(e){return new Stylesheet(e)} class xdp_Xdp (line 21) | class xdp_Xdp extends XFAObject{constructor(e){super(Zn,"xdp",!0);this.u... method constructor (line 21) | constructor(e){super(Zn,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=... method [Tr] (line 21) | [Tr](e){const t=on[e[Yr]];return t&&e[Jr]===t.id} class XdpNamespace (line 21) | class XdpNamespace{static[gn](e,t){if(XdpNamespace.hasOwnProperty(e))ret... method [gn] (line 21) | static[gn](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[... method xdp (line 21) | static xdp(e){return new xdp_Xdp(e)} function mapStyle (line 21) | function mapStyle(e,t,i){const a=Object.create(null);if(!e)return a;cons... class XhtmlObject (line 21) | class XhtmlObject extends XmlObject{constructor(e,t){super(Vn,t);this[zn... method constructor (line 21) | constructor(e,t){super(Vn,t);this[zn]=!1;this.style=e.style||""} method [Vs] (line 21) | [Vs](e){super[Vs](e);this.style=function checkStyle(e){return e.style?... method [Ws] (line 21) | [Ws](){return!ig.has(this[Yr])} method [qr] (line 21) | [qr](e,t=!1){if(t)this[zn]=!0;else{e=e.replaceAll(eg,"");this.style.in... method [Or] (line 21) | [Or](e,t=!0){const i=Object.create(null),a={top:NaN,bottom:NaN,left:Na... method [an] (line 21) | [an](e){const t=[];this[ar]={children:t};this[Zs]({});if(0===t.length&... class A (line 21) | class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL... method constructor (line 21) | constructor(e){super(e,"a");this.href=fixURL(e.href)||""} class B (line 21) | class B extends XhtmlObject{constructor(e){super(e,"b")}[Or](e){e.pushFo... method constructor (line 21) | constructor(e){super(e,"b")} method [Or] (line 21) | [Or](e){e.pushFont({weight:"bold"});super[Or](e);e.popFont()} class Body (line 21) | class Body extends XhtmlObject{constructor(e){super(e,"body")}[an](e){co... method constructor (line 21) | constructor(e){super(e,"body")} method [an] (line 21) | [an](e){const t=super[an](e),{html:i}=t;if(!i)return HTMLResult.EMPTY;... class Br (line 21) | class Br extends XhtmlObject{constructor(e){super(e,"br")}[en](){return"... method constructor (line 21) | constructor(e){super(e,"br")} method [en] (line 21) | [en](){return"\n"} method [Or] (line 21) | [Or](e){e.addString("\n")} method [an] (line 21) | [an](e){return HTMLResult.success({name:"br"})} class Html (line 21) | class Html extends XhtmlObject{constructor(e){super(e,"html")}[an](e){co... method constructor (line 21) | constructor(e){super(e,"html")} method [an] (line 21) | [an](e){const t=[];this[ar]={children:t};this[Zs]({});if(0===t.length)... class I (line 21) | class I extends XhtmlObject{constructor(e){super(e,"i")}[Or](e){e.pushFo... method constructor (line 21) | constructor(e){super(e,"i")} method [Or] (line 21) | [Or](e){e.pushFont({posture:"italic"});super[Or](e);e.popFont()} class Li (line 21) | class Li extends XhtmlObject{constructor(e){super(e,"li")}} method constructor (line 21) | constructor(e){super(e,"li")} class Ol (line 21) | class Ol extends XhtmlObject{constructor(e){super(e,"ol")}} method constructor (line 21) | constructor(e){super(e,"ol")} class P (line 21) | class P extends XhtmlObject{constructor(e){super(e,"p")}[Or](e){super[Or... method constructor (line 21) | constructor(e){super(e,"p")} method [Or] (line 21) | [Or](e){super[Or](e,!1);e.addString("\n");e.addPara();e.popFont()} method [en] (line 21) | [en](){return this[pr]()[Er]().at(-1)===this?super[en]():super[en]()+"... class Span (line 21) | class Span extends XhtmlObject{constructor(e){super(e,"span")}} method constructor (line 21) | constructor(e){super(e,"span")} class Sub (line 21) | class Sub extends XhtmlObject{constructor(e){super(e,"sub")}} method constructor (line 21) | constructor(e){super(e,"sub")} class Sup (line 21) | class Sup extends XhtmlObject{constructor(e){super(e,"sup")}} method constructor (line 21) | constructor(e){super(e,"sup")} class Ul (line 21) | class Ul extends XhtmlObject{constructor(e){super(e,"ul")}} method constructor (line 21) | constructor(e){super(e,"ul")} class XhtmlNamespace (line 21) | class XhtmlNamespace{static[gn](e,t){if(XhtmlNamespace.hasOwnProperty(e)... method [gn] (line 21) | static[gn](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamesp... method a (line 21) | static a(e){return new A(e)} method b (line 21) | static b(e){return new B(e)} method body (line 21) | static body(e){return new Body(e)} method br (line 21) | static br(e){return new Br(e)} method html (line 21) | static html(e){return new Html(e)} method i (line 21) | static i(e){return new I(e)} method li (line 21) | static li(e){return new Li(e)} method ol (line 21) | static ol(e){return new Ol(e)} method p (line 21) | static p(e){return new P(e)} method span (line 21) | static span(e){return new Span(e)} method sub (line 21) | static sub(e){return new Sub(e)} method sup (line 21) | static sup(e){return new Sup(e)} method ul (line 21) | static ul(e){return new Ul(e)} class UnknownNamespace (line 21) | class UnknownNamespace{constructor(e){this.namespaceId=e}[gn](e,t){retur... method constructor (line 21) | constructor(e){this.namespaceId=e} method [gn] (line 21) | [gn](e,t){return new XmlObject(this.namespaceId,e,t)} class Root (line 21) | class Root extends XFAObject{constructor(e){super(-1,"root",Object.creat... method constructor (line 21) | constructor(e){super(-1,"root",Object.create(null));this.element=null;... method [Kr] (line 21) | [Kr](e){this.element=e;return!0} method [sr] (line 21) | [sr](){super[sr]();if(this.element.template instanceof Template){this[... class Empty (line 21) | class Empty extends XFAObject{constructor(){super(-1,"",Object.create(nu... method constructor (line 21) | constructor(){super(-1,"",Object.create(null))} method [Kr] (line 21) | [Kr](e){return!1} class Builder (line 21) | class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnost... method constructor (line 21) | constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;th... method buildRoot (line 21) | buildRoot(e){return new Root(e)} method build (line 21) | build({nsPrefix:e,name:t,attributes:i,namespace:a,prefixes:s}){const r... method isNsAgnostic (line 21) | isNsAgnostic(){return this._nsAgnosticLevel>0} method _searchNamespace (line 21) | _searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(co... method _addNamespacePrefix (line 21) | _addNamespacePrefix(e){for(const{prefix:t,value:i}of e){const e=this._... method _getNamespaceToUse (line 21) | _getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this... method clean (line 21) | clean(e){const{hasNamespace:t,prefixes:i,nsAgnostic:a}=e;t&&(this._cur... class XFAParser (line 21) | class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();t... method constructor (line 21) | constructor(e=null,t=!1){super();this._builder=new Builder(e);this._st... method parse (line 21) | parse(e){this.parseXml(e);if(this._errorCode===Rs){this._current[sr]()... method onText (line 21) | onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText|... method onCdata (line 21) | onCdata(e){this._current[qr](e)} method _mkAttributes (line 21) | _mkAttributes(e,t){let i=null,a=null;const s=Object.create({});for(con... method _getNameAndPrefix (line 21) | _getNameAndPrefix(e,t){const i=e.indexOf(":");return-1===i?[e,null]:[e... method onBeginElement (line 21) | onBeginElement(e,t,i){const[a,s,r]=this._mkAttributes(t,e),[n,g]=this.... method onEndElement (line 21) | onEndElement(e){const t=this._current;if(t[Sr]()&&"string"==typeof t[e... method onError (line 21) | onError(e){this._errorCode=e} class XFAFactory (line 21) | class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAF... method constructor (line 21) | constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createD... method isValid (line 21) | isValid(){return this.root&&this.form} method _createPagesHelper (line 21) | _createPagesHelper(){const e=this.form[tn]();return new Promise(((t,i)... method _createPages (line 21) | async _createPages(){try{this.pages=await this._createPagesHelper();th... method getBoundingBox (line 21) | getBoundingBox(e){return this.dims[e]} method getNumPages (line 21) | async getNumPages(){this.pages||await this._createPages();return this.... method setImages (line 21) | setImages(e){this.form[yr].images=e} method setFonts (line 21) | setFonts(e){this.form[yr].fontFinder=new FontFinder(e);const t=[];for(... method appendFonts (line 21) | appendFonts(e,t){this.form[yr].fontFinder.add(e,t)} method getPages (line 21) | async getPages(){this.pages||await this._createPages();const e=this.pa... method serializeData (line 21) | serializeData(e){return this.dataHandler.serialize(e)} method _createDocument (line 21) | static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join("... method getRichTextAsHtml (line 21) | static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{... class AnnotationFactory (line 21) | class AnnotationFactory{static createGlobals(e){return Promise.all([e.en... method createGlobals (line 21) | static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"... method create (line 21) | static async create(e,t,i,a,s,r){const n=s?await this._getPageIndex(e,... method _create (line 21) | static _create(e,t,i,a,s=!1,r=null,n=null){const g=e.fetchIfRef(t);if(... method _getPageIndex (line 21) | static async _getPageIndex(e,t,i){try{const a=await e.fetchIfRefAsync(... method generateImages (line 21) | static generateImages(e,t,i){if(!i){warn("generateImages: OffscreenCan... method saveNewAnnotations (line 21) | static async saveNewAnnotations(e,t,i,a){const s=e.xref;let r;const n=... method printNewAnnotations (line 21) | static async printNewAnnotations(e,t,i,a,s){if(!a)return null;const{op... function getRgbColor (line 21) | function getRgbColor(e,t=new Uint8ClampedArray(3)){if(!Array.isArray(e))... function getPdfColorArray (line 21) | function getPdfColorArray(e){return Array.from(e,(e=>e/255))} function getQuadPoints (line 21) | function getQuadPoints(e,t){const i=e.getArray("QuadPoints");if(!isNumbe... function getTransformMatrix (line 21) | function getTransformMatrix(e,t,i){const[a,s,r,n]=Util.getAxialAlignedBo... class Annotation (line 21) | class Annotation{constructor(e){const{dict:t,xref:i,annotationGlobals:a}... method constructor (line 21) | constructor(e){const{dict:t,xref:i,annotationGlobals:a}=e;this.setTitl... method _hasFlag (line 21) | _hasFlag(e,t){return!!(e&t)} method _isViewable (line 21) | _isViewable(e){return!this._hasFlag(e,Z)&&!this._hasFlag(e,$)} method _isPrintable (line 21) | _isPrintable(e){return this._hasFlag(e,z)&&!this._hasFlag(e,V)&&!this.... method mustBeViewed (line 21) | mustBeViewed(e,t){const i=e?.get(this.data.id)?.noView;return void 0!=... method mustBePrinted (line 21) | mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!=... method viewable (line 21) | get viewable(){return null!==this.data.quadPoints&&(0===this.flags||th... method printable (line 21) | get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&t... method _parseStringHelper (line 21) | _parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):... method setDefaultAppearance (line 21) | setDefaultAppearance(e){const{dict:t,annotationGlobals:i}=e,a=getInher... method setTitle (line 21) | setTitle(e){this._title=this._parseStringHelper(e)} method setContents (line 21) | setContents(e){this._contents=this._parseStringHelper(e)} method setModificationDate (line 21) | setModificationDate(e){this.modificationDate="string"==typeof e?e:null} method setFlags (line 21) | setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&Z&&"Ann... method hasFlag (line 21) | hasFlag(e){return this._hasFlag(this.flags,e)} method setRectangle (line 21) | setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])} method setColor (line 21) | setColor(e){this.color=getRgbColor(e)} method setLineEndings (line 21) | setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)... method setRotation (line 21) | setRotation(e,t){this.rotation=0;let i=e instanceof Dict?e.get("R")||0... method setBorderAndBackgroundColors (line 21) | setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor... method setBorderStyle (line 21) | setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e inst... method setAppearance (line 21) | setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t insta... method setOptionalContent (line 21) | setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Na... method loadResources (line 21) | loadResources(e,t){return t.dict.getAsync("Resources").then((t=>{if(!t... method getOperatorList (line 21) | async getOperatorList(e,t,a,s,r){const{hasOwnCanvas:n,id:g,rect:c}=thi... method save (line 21) | async save(e,t,i){return null} method hasTextContent (line 21) | get hasTextContent(){return!1} method extractTextContent (line 21) | async extractTextContent(e,t,i){if(!this.appearance)return;const a=awa... method _transformPoint (line 21) | _transformPoint(e,t,i){const{rect:a}=this.data;t||=[0,0,1,1];i||=[1,0,... method getFieldObject (line 21) | getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this... method reset (line 21) | reset(){for(const e of this._streams)e.reset()} method _constructFieldName (line 21) | _constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown... class AnnotationBorderStyle (line 21) | class AnnotationBorderStyle{constructor(){this.width=1;this.style=hA;thi... method constructor (line 21) | constructor(){this.width=1;this.style=hA;this.dashArray=[3];this.horiz... method setWidth (line 21) | setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("num... method setStyle (line 21) | setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=hA;... method setDashArray (line 21) | setDashArray(e,t=!1){if(Array.isArray(e)){let i=!0,a=!0;for(const t of... method setHorizontalCornerRadius (line 21) | setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCorn... method setVerticalCornerRadius (line 21) | setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRa... class MarkupAnnotation (line 21) | class MarkupAnnotation extends Annotation{constructor(e){super(e);const{... method constructor (line 21) | constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.get... method setCreationDate (line 21) | setCreationDate(e){this.creationDate="string"==typeof e?e:null} method _setDefaultAppearance (line 21) | _setDefaultAppearance({xref:e,extra:t,strokeColor:i,fillColor:a,blendM... method createNewAnnotation (line 21) | static async createNewAnnotation(e,t,i,a){const s=t.ref||=e.getNewTemp... method createNewPrintAnnotation (line 21) | static async createNewPrintAnnotation(e,t,i,a){const s=await this.crea... class WidgetAnnotation (line 21) | class WidgetAnnotation extends Annotation{constructor(e){super(e);const{... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i,annotationGlobals:a}=e,s=t... method _decodeFormValue (line 21) | _decodeFormValue(e){return Array.isArray(e)?e.filter((e=>"string"==typ... method hasFieldFlag (line 21) | hasFieldFlag(e){return!!(this.data.fieldFlags&e)} method _isViewable (line 21) | _isViewable(e){return!0} method mustBeViewed (line 21) | mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!thi... method getRotationMatrix (line 21) | getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&... method getBorderAndBackgroundAppearances (line 21) | getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotat... method getOperatorList (line 21) | async getOperatorList(e,t,i,a,s){if(a&&!(this instanceof SignatureWidg... method _getMKDict (line 21) | _getMKDict(e){const t=new Dict(null);e&&t.set("R",e);this.borderColor&... method amendSavedDict (line 21) | amendSavedDict(e,t){} method save (line 21) | async save(e,t,a){const s=a?.get(this.data.id);let r=s?.value,n=s?.rot... method _getAppearance (line 21) | async _getAppearance(e,t,i,a){if(this.hasFieldFlag(sA))return null;con... method _getFontData (line 21) | static async _getFontData(e,t,i,a){const s=new OperatorList,r={font:nu... method _getTextWidth (line 21) | _getTextWidth(e,t){return t.charsToGlyphs(e).reduce(((e,t)=>e+t.width)... method _computeFontSize (line 21) | _computeFontSize(e,t,i,a,r){let{fontSize:n}=this.data.defaultAppearanc... method _renderText (line 21) | _renderText(e,t,i,a,s,r,n,g){let o;if(1===s){o=(a-this._getTextWidth(e... method _getSaveFieldResources (line 21) | _getSaveFieldResources(e){const{localResources:t,appearanceResources:i... method getFieldObject (line 21) | getFieldObject(){return null} class TextWidgetAnnotation (line 21) | class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super... method constructor (line 21) | constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=V... method hasTextContent (line 21) | get hasTextContent(){return!!this.appearance&&!this._needAppearances} method _getCombAppearance (line 21) | _getCombAppearance(e,t,i,a,s,r,n,g,o,c,C){const h=s/this.data.maxLen,l... method _getMultilineAppearance (line 21) | _getMultilineAppearance(e,t,i,a,s,r,n,g,o,c,C,h){const l=[],Q=s-2*g,E=... method _splitLine (line 21) | _splitLine(e,t,i,a,s={}){e=s.line||e;const r=s.glyphs||t.charsToGlyphs... method getFieldObject (line 21) | getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,def... class ButtonWidgetAnnotation (line 21) | class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){sup... method constructor (line 21) | constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppe... method getOperatorList (line 21) | async getOperatorList(e,t,a,s,r){if(this.data.pushButton)return super.... method save (line 21) | async save(e,t,i){return this.data.checkBox?this._saveCheckbox(e,t,i):... method _saveCheckbox (line 21) | async _saveCheckbox(e,t,i){if(!i)return null;const a=i.get(this.data.i... method _saveRadioButton (line 21) | async _saveRadioButton(e,t,i){if(!i)return null;const a=i.get(this.dat... method _getDefaultCheckedAppearance (line 21) | _getDefaultCheckedAppearance(e,t){const i=this.data.rect[2]-this.data.... method _processCheckBox (line 21) | _processCheckBox(e){const t=e.dict.get("AP");if(!(t instanceof Dict))r... method _processRadioButton (line 21) | _processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("... method _processPushButton (line 21) | _processPushButton(e){const{dict:t,annotationGlobals:i}=e;if(t.has("A"... method getFieldObject (line 21) | getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";... method fallbackFontDict (line 21) | get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("Zap... class ChoiceWidgetAnnotation (line 21) | class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){sup... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.indices=t.getArray... method getFieldObject (line 21) | getFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.d... method amendSavedDict (line 21) | amendSavedDict(e,t){if(!this.hasIndices)return;let i=e?.get(this.data.... method _getAppearance (line 21) | async _getAppearance(e,t,i,a){if(this.data.combo)return super._getAppe... class SignatureWidgetAnnotation (line 21) | class SignatureWidgetAnnotation extends WidgetAnnotation{constructor(e){... method constructor (line 21) | constructor(e){super(e);this.data.fieldValue=null;this.data.hasOwnCanv... method getFieldObject (line 21) | getFieldObject(){return{id:this.data.id,value:null,page:this.data.page... class TextAnnotation (line 21) | class TextAnnotation extends MarkupAnnotation{constructor(e){super(e);th... method constructor (line 21) | constructor(e){super(e);this.data.noRotate=!0;this.data.hasOwnCanvas=t... class LinkAnnotation (line 21) | class LinkAnnotation extends Annotation{constructor(e){super(e);const{di... method constructor (line 21) | constructor(e){super(e);const{dict:t,annotationGlobals:i}=e;this.data.... class PopupAnnotation (line 21) | class PopupAnnotation extends Annotation{constructor(e){super(e);const{d... method constructor (line 21) | constructor(e){super(e);const{dict:t}=e;this.data.annotationType=q;thi... class FreeTextAnnotation (line 21) | class FreeTextAnnotation extends MarkupAnnotation{constructor(e){super(e... method constructor (line 21) | constructor(e){super(e);this.data.hasOwnCanvas=!this.data.noHTML;this.... method hasTextContent (line 21) | get hasTextContent(){return this._hasAppearance} method createNewDict (line 21) | static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,fontSize:r,rect... method createNewAppearanceStream (line 21) | static async createNewAppearanceStream(e,t,i){const{baseFontRef:a,eval... class LineAnnotation (line 21) | class LineAnnotation extends MarkupAnnotation{constructor(e){super(e);co... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class SquareAnnotation (line 21) | class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class CircleAnnotation (line 21) | class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class PolylineAnnotation (line 21) | class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class PolygonAnnotation (line 21) | class PolygonAnnotation extends PolylineAnnotation{constructor(e){super(... method constructor (line 21) | constructor(e){super(e);this.data.annotationType=U} class CaretAnnotation (line 21) | class CaretAnnotation extends MarkupAnnotation{constructor(e){super(e);t... method constructor (line 21) | constructor(e){super(e);this.data.annotationType=K} class InkAnnotation (line 21) | class InkAnnotation extends MarkupAnnotation{constructor(e){super(e);thi... method constructor (line 21) | constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this... method createNewDict (line 21) | static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,opacity:r,paths... method createNewAppearanceStream (line 21) | static async createNewAppearanceStream(e,t,i){if(e.outlines)return thi... method createNewAppearanceStreamForHighlight (line 21) | static async createNewAppearanceStreamForHighlight(e,t,i){const{color:... class HighlightAnnotation (line 21) | class HighlightAnnotation extends MarkupAnnotation{constructor(e){super(... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... method createNewDict (line 21) | static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,opacity:r,rect:... method createNewAppearanceStream (line 21) | static async createNewAppearanceStream(e,t,i){const{color:a,rect:s,out... class UnderlineAnnotation (line 21) | class UnderlineAnnotation extends MarkupAnnotation{constructor(e){super(... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class SquigglyAnnotation (line 21) | class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class StrikeOutAnnotation (line 21) | class StrikeOutAnnotation extends MarkupAnnotation{constructor(e){super(... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationTyp... class StampAnnotation (line 21) | class StampAnnotation extends MarkupAnnotation{constructor(e){super(e);t... method constructor (line 21) | constructor(e){super(e);this.data.annotationType=v;this.data.hasOwnCan... method createImage (line 21) | static async createImage(e,t){const{width:i,height:a}=e,s=new Offscree... method createNewDict (line 21) | static createNewDict(e,t,{apRef:i,ap:a}){const{rect:s,rotation:r,user:... method createNewAppearanceStream (line 21) | static async createNewAppearanceStream(e,t,i){const{rotation:a}=e,{ima... class FileAttachmentAnnotation (line 21) | class FileAttachmentAnnotation extends MarkupAnnotation{constructor(e){s... method constructor (line 21) | constructor(e){super(e);const{dict:t,xref:i}=e,a=new FileSpec(t.get("F... function decodeString (line 21) | function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(... class DatasetXMLParser (line 21) | class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);t... method constructor (line 21) | constructor(e){super(e);this.node=null} method onEndElement (line 21) | onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e... class DatasetReader (line 21) | class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXML... method constructor (line 21) | constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttribu... method getValue (line 21) | getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(pa... class XRef (line 21) | class XRef{#K=null;constructor(e,t){this.stream=e;this.pdfManager=t;this... method constructor (line 21) | constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this.... method getNewPersistentRef (line 21) | getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPer... method getNewTemporaryRef (line 21) | getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemp... method resetNewTemporaryRef (line 21) | resetNewTemporaryRef(){this._newTemporaryRefNum=null;if(this._persiste... method setStartXRef (line 21) | setStartXRef(e){this.startXRefQueue=[e]} method parse (line 21) | parse(e=!1){let t,i,a;if(e){warn("Indexing all PDF objects");t=this.in... method processXRefTable (line 21) | processXRefTable(e){"tableState"in this||(this.tableState={entryNum:0,... method readXRefTable (line 21) | readXRefTable(e){const t=e.lexer.stream,i=this.tableState;t.pos=i.stre... method processXRefStream (line 21) | processXRefStream(e){if(!("streamState"in this)){const t=e.dict,i=t.ge... method readXRefStream (line 21) | readXRefStream(e){const t=this.streamState;e.pos=t.streamPos;const[i,a... method indexObjects (line 21) | indexObjects(){function readToken(e,t){let i="",a=e[t];for(;10!==a&&13... method readXRef (line 21) | readXRef(e=!1){const t=this.stream,i=new Set;for(;this.startXRefQueue.... method lastXRefStreamPos (line 21) | get lastXRefStreamPos(){return this.#K??(this._xrefStms.size>0?Math.ma... method getEntry (line 21) | getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null} method fetchIfRef (line 21) | fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e} method fetch (line 21) | fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is no... method fetchUncompressed (line 21) | fetchUncompressed(e,t,i=!1){const a=e.gen;let s=e.num;if(t.gen!==a){co... method fetchCompressed (line 21) | fetchCompressed(e,t,i=!1){const a=t.offset,s=this.fetch(Ref.get(a,0));... method fetchIfRefAsync (line 21) | async fetchIfRefAsync(e,t){return e instanceof Ref?this.fetchAsync(e,t... method fetchAsync (line 21) | async fetchAsync(e,t){try{return this.fetch(e,t)}catch(i){if(!(i insta... method getCatalogObj (line 21) | getCatalogObj(){return this.root} class Page (line 21) | class Page{constructor({pdfManager:e,xref:t,pageIndex:i,pageDict:a,ref:s... method constructor (line 21) | constructor({pdfManager:e,xref:t,pageIndex:i,pageDict:a,ref:s,globalId... method _getInheritableProperty (line 21) | _getInheritableProperty(e,t=!1){const i=getInheritableProperty({dict:t... method content (line 21) | get content(){return this.pageDict.getArray("Contents")} method resources (line 21) | get resources(){const e=this._getInheritableProperty("Resources");retu... method _getBoundingBox (line 21) | _getBoundingBox(e){if(this.xfaData)return this.xfaData.bbox;const t=lo... method mediaBox (line 21) | get mediaBox(){return shadow(this,"mediaBox",this._getBoundingBox("Med... method cropBox (line 21) | get cropBox(){return shadow(this,"cropBox",this._getBoundingBox("CropB... method userUnit (line 21) | get userUnit(){let e=this.pageDict.get("UserUnit");("number"!=typeof e... method view (line 21) | get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,... method rotate (line 21) | get rotate(){let e=this._getInheritableProperty("Rotate")||0;e%90!=0?e... method _onSubStreamError (line 21) | _onSubStreamError(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;... method getContentStream (line 21) | getContentStream(){return this.pdfManager.ensure(this,"content").then(... method xfaData (line 21) | get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.... method #T (line 21) | #T(e,t,i){for(const a of e)if(a.id){const e=Ref.fromString(a.id);if(!e... method saveNewAnnotations (line 21) | async saveNewAnnotations(e,t,i,a){if(this.xfaFactory)throw new Error("... method save (line 21) | save(e,t,i){const a=new PartialEvaluator({xref:this.xref,handler:e,pag... method loadResources (line 21) | loadResources(e){this.resourcesPromise||=this.pdfManager.ensure(this,"... method getOperatorList (line 21) | getOperatorList({handler:e,sink:t,task:i,intent:a,cacheKey:s,annotatio... method extractTextContent (line 21) | async extractTextContent({handler:e,task:t,includeMarkedContent:i,disa... method getStructTree (line 21) | async getStructTree(){const e=await this.pdfManager.ensureCatalog("str... method _parseStructTree (line 21) | _parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.pars... method getAnnotationsData (line 21) | async getAnnotationsData(e,t,i){const a=await this._parsedAnnotations;... method annotations (line 21) | get annotations(){const e=this._getInheritableProperty("Annots");retur... method _parsedAnnotations (line 21) | get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.... method jsActions (line 21) | get jsActions(){return shadow(this,"jsActions",collectActions(this.xre... function find (line 21) | function find(e,t,i=1024,a=!1){const s=t.length,r=e.peekBytes(i),n=r.len... class PDFDocument (line 21) | class PDFDocument{constructor(e,t){if(t.length<=0)throw new InvalidPDFEx... method constructor (line 21) | constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF... method parse (line 21) | parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,t... method linearization (line 21) | get linearization(){let e=null;try{e=Linearization.create(this.stream)... method startXRef (line 21) | get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.r... method checkHeader (line 21) | checkHeader(){const e=this.stream;e.reset();if(!find(e,rg))return;e.mo... method parseStartXRef (line 21) | parseStartXRef(){this.xref.setStartXRef(this.startXRef)} method numPages (line 21) | get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.n... method _hasOnlyDocumentSignatures (line 21) | _hasOnlyDocumentSignatures(e,t=0){return!!Array.isArray(e)&&e.every((e... method _xfaStreams (line 21) | get _xfaStreams(){const e=this.catalog.acroForm;if(!e)return null;cons... method xfaDatasets (line 21) | get xfaDatasets(){const e=this._xfaStreams;if(!e)return shadow(this,"x... method xfaData (line 21) | get xfaData(){const e=this._xfaStreams;if(!e)return null;const t=Objec... method xfaFactory (line 21) | get xfaFactory(){let e;this.pdfManager.enableXfa&&this.catalog.needsRe... method isPureXfa (line 21) | get isPureXfa(){return!!this.xfaFactory&&this.xfaFactory.isValid()} method htmlForXfa (line 21) | get htmlForXfa(){return this.xfaFactory?this.xfaFactory.getPages():null} method loadXfaImages (line 21) | async loadXfaImages(){const e=await this.pdfManager.ensureCatalog("xfa... method loadXfaFonts (line 21) | async loadXfaFonts(e,t){const i=await this.pdfManager.ensureCatalog("a... method serializeXfaData (line 21) | async serializeXfaData(e){return this.xfaFactory?this.xfaFactory.seria... method version (line 21) | get version(){return this.catalog.version||this._version} method formInfo (line 21) | get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSigna... method documentInfo (line 21) | get documentInfo(){const e={PDFFormatVersion:this.version,Language:thi... method fingerprints (line 21) | get fingerprints(){function validate(e){return"string"==typeof e&&e.le... method _getLinearizationPage (line 21) | async _getLinearizationPage(e){const{catalog:t,linearization:i,xref:a}... method getPage (line 21) | getPage(e){const t=this._pagePromises.get(e);if(t)return t;const{catal... method checkFirstPage (line 21) | async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if... method checkLastPage (line 21) | async checkLastPage(e=!1){const{catalog:t,pdfManager:i}=this;t.setActu... method fontFallback (line 21) | fontFallback(e,t){return this.catalog.fontFallback(e,t)} method cleanup (line 21) | async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearG... method #q (line 21) | async#q(e,t,i,a,s){const{xref:r}=this;if(!(t instanceof Ref)||s.has(t)... method fieldObjects (line 21) | get fieldObjects(){if(!this.formInfo.hasFields)return shadow(this,"fie... method hasJSActions (line 21) | get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.e... method _parseHasJSActions (line 21) | async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManag... method calculationOrderIds (line 21) | get calculationOrderIds(){const e=this.catalog.acroForm;if(!e?.has("CO... method annotationGlobals (line 21) | get annotationGlobals(){return shadow(this,"annotationGlobals",Annotat... class BasePdfManager (line 21) | class BasePdfManager{constructor(e){this.constructor===BasePdfManager&&u... method constructor (line 21) | constructor(e){this.constructor===BasePdfManager&&unreachable("Cannot ... method docId (line 21) | get docId(){return this._docId} method password (line 21) | get password(){return this._password} method docBaseUrl (line 21) | get docBaseUrl(){return this._docBaseUrl} method catalog (line 21) | get catalog(){return this.pdfDocument.catalog} method ensureDoc (line 21) | ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)} method ensureXRef (line 21) | ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)} method ensureCatalog (line 21) | ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)} method getPage (line 21) | getPage(e){return this.pdfDocument.getPage(e)} method fontFallback (line 21) | fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)} method loadXfaFonts (line 21) | loadXfaFonts(e,t){return this.pdfDocument.loadXfaFonts(e,t)} method loadXfaImages (line 21) | loadXfaImages(){return this.pdfDocument.loadXfaImages()} method serializeXfaData (line 21) | serializeXfaData(e){return this.pdfDocument.serializeXfaData(e)} method cleanup (line 21) | cleanup(e=!1){return this.pdfDocument.cleanup(e)} method ensure (line 21) | async ensure(e,t,i){unreachable("Abstract method `ensure` called")} method requestRange (line 21) | requestRange(e,t){unreachable("Abstract method `requestRange` called")} method requestLoadedStream (line 21) | requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedS... method sendProgressiveData (line 21) | sendProgressiveData(e){unreachable("Abstract method `sendProgressiveDa... method updatePassword (line 21) | updatePassword(e){this._password=e} method terminate (line 21) | terminate(e){unreachable("Abstract method `terminate` called")} class LocalPdfManager (line 21) | class LocalPdfManager extends BasePdfManager{constructor(e){super(e);con... method constructor (line 21) | constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=... method ensure (line 21) | async ensure(e,t,i){const a=e[t];return"function"==typeof a?a.apply(e,... method requestRange (line 21) | requestRange(e,t){return Promise.resolve()} method requestLoadedStream (line 21) | requestLoadedStream(e=!1){return this._loadedStreamPromise} method terminate (line 21) | terminate(e){} class NetworkPdfManager (line 21) | class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);t... method constructor (line 21) | constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.... method ensure (line 21) | async ensure(e,t,i){try{const a=e[t];return"function"==typeof a?a.appl... method requestRange (line 21) | requestRange(e,t){return this.streamManager.requestRange(e,t)} method requestLoadedStream (line 21) | requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)} method sendProgressiveData (line 21) | sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})} method terminate (line 21) | terminate(e){this.streamManager.abort(e)} function wrapReason (line 21) | function wrapReason(e){e instanceof Error||"object"==typeof e&&null!==e|... class MessageHandler (line 21) | class MessageHandler{constructor(e,t,i){this.sourceName=e;this.targetNam... method constructor (line 21) | constructor(e,t,i){this.sourceName=e;this.targetName=t;this.comObj=i;t... method on (line 21) | on(e,t){const i=this.actionHandler;if(i[e])throw new Error(`There is a... method send (line 21) | send(e,t,i){this.comObj.postMessage({sourceName:this.sourceName,target... method sendWithPromise (line 21) | sendWithPromise(e,t,i){const a=this.callbackId++,s=Promise.withResolve... method sendWithStream (line 21) | sendWithStream(e,t,i,a){const s=this.streamId++,r=this.sourceName,n=th... method #P (line 21) | #P(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comOb... method #O (line 21) | #O(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comOb... method #W (line 21) | async#W(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall... method destroy (line 21) | destroy(){this.comObj.removeEventListener("message",this._onComObjOnMe... class PDFWorkerStream (line 21) | class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLen... method constructor (line 21) | constructor(e){this._msgHandler=e;this._contentLength=null;this._fullR... method getFullReader (line 21) | getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFu... method getRangeReader (line 21) | getRangeReader(e,t){const i=new PDFWorkerStreamRangeReader(e,t,this._m... method cancelAllRequests (line 21) | cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of... class PDFWorkerStreamReader (line 21) | class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onPro... method constructor (line 21) | constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLe... method headersReady (line 21) | get headersReady(){return this._headersReady} method contentLength (line 21) | get contentLength(){return this._contentLength} method isStreamingSupported (line 21) | get isStreamingSupported(){return this._isStreamingSupported} method isRangeSupported (line 21) | get isRangeSupported(){return this._isRangeSupported} method read (line 21) | async read(){const{value:e,done:t}=await this._reader.read();return t?... method cancel (line 21) | cancel(e){this._reader.cancel(e)} class PDFWorkerStreamRangeReader (line 21) | class PDFWorkerStreamRangeReader{constructor(e,t,i){this._msgHandler=i;t... method constructor (line 21) | constructor(e,t,i){this._msgHandler=i;this.onProgress=null;const a=thi... method isStreamingSupported (line 21) | get isStreamingSupported(){return!1} method read (line 21) | async read(){const{value:e,done:t}=await this._reader.read();return t?... method cancel (line 21) | cancel(e){this._reader.cancel(e)} class WorkerTask (line 21) | class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._cap... method constructor (line 21) | constructor(e){this.name=e;this.terminated=!1;this._capability=Promise... method finished (line 21) | get finished(){return this._capability.promise} method finish (line 21) | finish(){this._capability.resolve()} method terminate (line 21) | terminate(){this.terminated=!0} method ensureNotTerminated (line 21) | ensureNotTerminated(){if(this.terminated)throw new Error("Worker task ... class WorkerMessageHandler (line 21) | class WorkerMessageHandler{static setup(e,t){let i=!1;e.on("test",(funct... method setup (line 21) | static setup(e,t){let i=!1;e.on("test",(function(t){if(!i){i=!0;e.send... method createDocumentHandler (line 21) | static createDocumentHandler(e,t){let i,a=!1,s=null;const r=new Set,n=... method initializeFromPort (line 21) | static initializeFromPort(e){const t=new MessageHandler("worker","main... FILE: src/NetworkOptimizer.WiFi/Analyzers/SiteHealthScorer.cs class SiteHealthScorer (line 10) | public class SiteHealthScorer method SiteHealthScorer (line 14) | public SiteHealthScorer(SiteHealthScorerOptions? options = null) method Calculate (line 22) | public SiteHealthScore Calculate( method CalculateStats (line 60) | private HealthSummaryStats CalculateStats( method CalculateSignalQuality (line 108) | private ScoreDimension CalculateSignalQuality(List logger) method GetPattern (line 40) | public AntennaPattern? GetPattern(string model, string band, string? a... method GetAzimuthGain (line 82) | public float GetAzimuthGain(string model, string band, int azimuthDegr... method HasOmniVariant (line 95) | public bool HasOmniVariant(string model) method GetAntennaVariants (line 108) | public List GetAntennaVariants(string model) method StripModelSuffix (line 125) | private static string StripModelSuffix(string model) method GetElevationGain (line 137) | public float GetElevationGain(string model, string band, int elevation... method GetElevation0Gain (line 150) | public float GetElevation0Gain(string model, string band, int elevatio... method GetAllBaseModelNames (line 163) | public List GetAllBaseModelNames() method GetSupportedBands (line 178) | public List GetSupportedBands(string model) method EnsureLoaded (line 191) | private void EnsureLoaded() method FindPatternFile (line 225) | private static string? FindPatternFile() FILE: src/NetworkOptimizer.WiFi/Data/ApModelCatalog.cs class ApModelCatalog (line 7) | public static class ApModelCatalog class ModeDefaults (line 12) | public class ModeDefaults class BandDefaults (line 22) | public class BandDefaults class ApModelInfo (line 39) | public class ApModelInfo method BuildCatalog (line 417) | public static List BuildCatalog(AntennaPatternLoader patt... method GetBandDefaults (line 465) | public static BandDefaults GetBandDefaults(string model, string band) method TryGetBandDefaults (line 490) | public static bool TryGetBandDefaults(string model, string band, out B... method NormalizeBandKey (line 513) | private static string NormalizeBandKey(string band) => method ResolveForMode (line 520) | public static (int antennaGainDbi, int maxTxPowerDbm, int defaultTxPow... FILE: src/NetworkOptimizer.WiFi/Data/MaterialAttenuation.cs class MaterialAttenuation (line 8) | public static class MaterialAttenuation type AttenuationValues (line 10) | public record AttenuationValues(double Ghz2_4, double Ghz5, double Ghz6); method GetAttenuation (line 93) | public static double GetAttenuation(string material, string band) method GetCenterFrequencyMhz (line 108) | public static double GetCenterFrequencyMhz(string band) FILE: src/NetworkOptimizer.WiFi/Data/MountTypeHelper.cs class MountTypeHelper (line 6) | public static class MountTypeHelper method GetDefaultMountType (line 22) | public static string GetDefaultMountType(string model) method Resolve (line 51) | public static string Resolve(string? savedMountType, string model) FILE: src/NetworkOptimizer.WiFi/Helpers/ChannelSpanHelper.cs class ChannelSpanHelper (line 9) | public static class ChannelSpanHelper method GetChannelSpan (line 15) | public static (int Low, int High) GetChannelSpan(RadioBand band, int p... method GetChannelWidthSpan (line 39) | public static List GetChannelWidthSpan(RadioBand band, int primar... method SpansOverlap (line 98) | public static bool SpansOverlap((int Low, int High) a, (int Low, int H... method SignalToInterferenceWeight (line 105) | public static double SignalToInterferenceWeight(int signalDbm) => method ComputeOverlapFactor (line 112) | public static double ComputeOverlapFactor( method GetBondingGroupStart5GHz (line 149) | public static int GetBondingGroupStart5GHz(int primaryChannel, int width) method GetBondingGroupStart6GHz (line 174) | public static int GetBondingGroupStart6GHz(int primaryChannel, int width) FILE: src/NetworkOptimizer.WiFi/Helpers/SignalClassification.cs class SignalClassification (line 12) | public static class SignalClassification method GetSignalClass (line 18) | public static string GetSignalClass(int dbm, RadioBand band) => band s... method GetSignalClass (line 50) | public static string GetSignalClass(int dbm, string? bandString) => method GetSignalClass (line 56) | public static string GetSignalClass(int? dbm, RadioBand band) => method GetSignalClass (line 62) | public static string GetSignalClass(int? dbm, string? bandString) => method IsWeakSignal (line 69) | public static bool IsWeakSignal(int dbm, RadioBand band) => band switch method IsCriticalSignal (line 79) | public static bool IsCriticalSignal(int dbm, RadioBand band) => band s... method GetWeakThreshold (line 89) | public static int GetWeakThreshold(RadioBand band) => band switch method GetBarCount (line 99) | public static int GetBarCount(string signalClass) => signalClass switch method ParseBand (line 108) | private static RadioBand ParseBand(string? bandString) => bandString s... FILE: src/NetworkOptimizer.WiFi/IWiFiDataProvider.cs type IWiFiDataProvider (line 10) | public interface IWiFiDataProvider method GetAccessPointsAsync (line 15) | Task> GetAccessPointsAsync(CancellationToken... method GetWirelessClientsAsync (line 20) | Task> GetWirelessClientsAsync(Cancellatio... method GetSiteMetricsAsync (line 28) | Task> GetSiteMetricsAsync( method GetClientMetricsAsync (line 41) | Task> GetClientMetricsAsync( method GetWlanConfigurationsAsync (line 51) | Task> GetWlanConfigurationsAsync(CancellationT... method GetRoamingEventsAsync (line 59) | Task> GetRoamingEventsAsync( method GetChannelScanResultsAsync (line 71) | Task> GetChannelScanResultsAsync( type MetricGranularity (line 91) | public enum MetricGranularity FILE: src/NetworkOptimizer.WiFi/Models/AccessPointSnapshot.cs class AccessPointSnapshot (line 6) | public class AccessPointSnapshot class MeshChildInfo (line 78) | public class MeshChildInfo class RadioSnapshot (line 91) | public class RadioSnapshot type RadioBand (line 170) | public enum RadioBand class VapSnapshot (line 181) | public class VapSnapshot class RadioBandExtensions (line 223) | public static class RadioBandExtensions method FromUniFiCode (line 228) | public static RadioBand FromUniFiCode(string? code) method ToDisplayString (line 242) | public static string ToDisplayString(this RadioBand band) method ToUniFiCode (line 256) | public static string ToUniFiCode(this RadioBand band) method ToPropagationBand (line 270) | public static string ToPropagationBand(this RadioBand band) => band sw... method MatchesPropagationBand (line 282) | public static bool MatchesPropagationBand(string? dataBand, string pro... FILE: src/NetworkOptimizer.WiFi/Models/ChannelRecommendation.cs class ApChannelRecommendation (line 6) | public class ApChannelRecommendation class ChannelPlan (line 32) | public class ChannelPlan class InterferenceGraph (line 68) | public class InterferenceGraph class ApNode (line 100) | public class ApNode class MeshConstraint (line 134) | public class MeshConstraint type DfsPreference (line 144) | public enum DfsPreference class RecommendationOptions (line 157) | public class RecommendationOptions FILE: src/NetworkOptimizer.WiFi/Models/ChannelScanResult.cs class ChannelScanResult (line 6) | public class ChannelScanResult class ChannelInfo (line 30) | public class ChannelInfo class NeighborNetwork (line 72) | public class NeighborNetwork FILE: src/NetworkOptimizer.WiFi/Models/ClientConnectionEvent.cs class ClientConnectionEvent (line 6) | public class ClientConnectionEvent method GetRadioBandDisplay (line 89) | public string? GetRadioBandDisplay() => RadioBand switch method GetPreviousRadioBandDisplay (line 100) | public string? GetPreviousRadioBandDisplay() => PreviousRadioBand switch type ClientConnectionEventType (line 112) | public enum ClientConnectionEventType FILE: src/NetworkOptimizer.WiFi/Models/PropagationModels.cs class HeatmapRequest (line 6) | public class HeatmapRequest class HeatmapResponse (line 42) | public class HeatmapResponse class PropagationAp (line 69) | public class PropagationAp class PropagationWall (line 91) | public class PropagationWall class LatLng (line 106) | public class LatLng class BuildingFloorInfo (line 115) | public class BuildingFloorInfo class ApPropagationContext (line 130) | public class ApPropagationContext class SignalMeasurement (line 145) | public class SignalMeasurement class AntennaPattern (line 159) | public class AntennaPattern FILE: src/NetworkOptimizer.WiFi/Models/RegulatoryChannelData.cs class RegulatoryChannelData (line 10) | public class RegulatoryChannelData method GetChannels (line 32) | public int[] GetChannels(RadioBand band, int width, bool includeDfs = ... method Parse (line 87) | public static RegulatoryChannelData Parse(JsonElement dataElement) method ParseChannelArray (line 114) | private static int[] ParseChannelArray(JsonElement element, string pro... FILE: src/NetworkOptimizer.WiFi/Models/RoamingEvent.cs class RoamingEvent (line 6) | public class RoamingEvent type RoamingType (line 68) | public enum RoamingType FILE: src/NetworkOptimizer.WiFi/Models/RoamingTopology.cs class RoamingTopology (line 7) | public class RoamingTopology class RoamingClient (line 22) | public class RoamingClient class RoamingEdge (line 34) | public class RoamingEdge class RoamingDirectionStats (line 66) | public class RoamingDirectionStats class ClientRoamingStats (line 97) | public class ClientRoamingStats class RoamingVertex (line 117) | public class RoamingVertex class RoamingRadioInfo (line 135) | public class RoamingRadioInfo FILE: src/NetworkOptimizer.WiFi/Models/WiFiMetrics.cs class SiteWiFiMetrics (line 6) | public class SiteWiFiMetrics class BandMetrics (line 27) | public class BandMetrics class ClientWiFiMetrics (line 63) | public class ClientWiFiMetrics class ChannelChangeEvent (line 120) | public class ChannelChangeEvent FILE: src/NetworkOptimizer.WiFi/Models/WirelessClientSnapshot.cs class WirelessClientSnapshot (line 6) | public class WirelessClientSnapshot class ClientCapabilities (line 113) | public class ClientCapabilities FILE: src/NetworkOptimizer.WiFi/Models/WlanConfiguration.cs class WlanConfiguration (line 6) | public class WlanConfiguration class MinRateSettings (line 107) | public class MinRateSettings FILE: src/NetworkOptimizer.WiFi/Providers/UniFiLiveDataProvider.cs class UniFiLiveDataProvider (line 14) | public class UniFiLiveDataProvider : IWiFiDataProvider method UniFiLiveDataProvider (line 20) | public UniFiLiveDataProvider(UniFiApiClient client, UniFiDiscovery dis... method GetAccessPointsAsync (line 30) | public async Task> GetAccessPointsAsync(Canc... method GetWirelessClientsAsync (line 87) | public async Task> GetWirelessClientsAsyn... method GetSiteMetricsAsync (line 140) | public async Task> GetSiteMetricsAsync( method GetApMetricsAsync (line 194) | public async Task> GetApMetricsAsync( method GetChannelChangeEventsAsync (line 254) | public async Task> GetChannelChangeEventsAsync( method ParseChannelChangeEvents (line 272) | private List ParseChannelChangeEvents(JsonElement ... method GetClientMetricsAsync (line 341) | public async Task> GetClientMetricsAsync( method GetWlanConfigurationsAsync (line 412) | public async Task> GetWlanConfigurationsAsync(... method ParseBands (line 454) | private static List ParseBands(List? bands) method GetRoamingEventsAsync (line 478) | public async Task> GetRoamingEventsAsync( method GetClientConnectionEventsAsync (line 493) | public async Task> GetClientConnectionEven... method ParseClientConnectionEvents (line 511) | private List ParseClientConnectionEvents(JsonEl... method GetNestedString (line 666) | private static string? GetNestedString(JsonElement el, string prop) method GetRoamingTopologyAsync (line 676) | public async Task GetRoamingTopologyAsync(Cancellati... method GetChannelScanResultsAsync (line 690) | public async Task> GetChannelScanResultsAsync( method CorrectMeshNeighborChannels (line 826) | private void CorrectMeshNeighborChannels(List aps, L... method MapToAccessPointSnapshot (line 887) | private AccessPointSnapshot MapToAccessPointSnapshot(DiscoveredDevice ... method MapToWirelessClientSnapshot (line 1013) | private WirelessClientSnapshot MapToWirelessClientSnapshot( method MapHistoricalToWirelessClientSnapshot (line 1064) | private WirelessClientSnapshot MapHistoricalToWirelessClientSnapshot( method ParseWifiGeneration (line 1093) | private static int? ParseWifiGeneration(string? radioProto) method ParseSiteMetrics (line 1111) | private List ParseSiteMetrics(JsonElement data) method ParseApMetrics (line 1219) | private List ParseApMetrics(JsonElement data) method EnrichWithChannelInfoAsync (line 1312) | private async Task EnrichWithChannelInfoAsync( method ParseClientMetrics (line 1402) | private List ParseClientMetrics(JsonElement data, s... method ParseRoamingTopology (line 1531) | private RoamingTopology? ParseRoamingTopology(JsonElement data) method ParseDirectionStats (line 1630) | private RoamingDirectionStats ParseDirectionStats(JsonElement el) method GetDoubleOrNull (line 1646) | private static double? GetDoubleOrNull(JsonElement el, string prop) method GetIntOrNull (line 1653) | private static int? GetIntOrNull(JsonElement el, string prop) method GetLongOrNull (line 1663) | private static long? GetLongOrNull(JsonElement el, string prop) method InferBandFromRate (line 1678) | private static RadioBand? InferBandFromRate(string protocol, long maxR... FILE: src/NetworkOptimizer.WiFi/Rules/BandSteeringRule.cs class BandSteeringRule (line 7) | public class BandSteeringRule : IWiFiOptimizerRule method Evaluate (line 16) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/CoChannelInterferenceRule.cs class CoChannelInterferenceRule (line 10) | public class CoChannelInterferenceRule : IWiFiOptimizerRule method CoChannelInterferenceRule (line 14) | public CoChannelInterferenceRule(PropagationService propagationService) method EvaluateAll (line 21) | public IEnumerable EvaluateAll(WiFiOptimizerContext ctx) method Evaluate (line 93) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/CoverageGapRule.cs class CoverageGapRule (line 11) | public class CoverageGapRule : IWiFiOptimizerRule method Evaluate (line 25) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/DhcpIssuesRule.cs class DhcpIssuesRule (line 7) | public class DhcpIssuesRule : IWiFiOptimizerRule method Evaluate (line 11) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/High2GHzConcentrationRule.cs class High2GHzConcentrationRule (line 9) | public class High2GHzConcentrationRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/HighApLoadRule.cs class HighApLoadRule (line 9) | public class HighApLoadRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/HighPowerOverlapRule.cs class HighPowerOverlapRule (line 10) | public class HighPowerOverlapRule : IWiFiOptimizerRule method HighPowerOverlapRule (line 14) | public HighPowerOverlapRule(PropagationService propagationService) method EvaluateAll (line 26) | public IEnumerable EvaluateAll(WiFiOptimizerContext ctx) method Evaluate (line 91) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/HighPowerRule.cs class HighPowerRule (line 9) | public class HighPowerRule : IWiFiOptimizerRule method Evaluate (line 13) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/HighRadioUtilizationRule.cs class HighRadioUtilizationRule (line 9) | public class HighRadioUtilizationRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/HighTxRetryRule.cs class HighTxRetryRule (line 9) | public class HighTxRetryRule : IWiFiOptimizerRule method Evaluate (line 24) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/IWiFiOptimizerRule.cs type IWiFiOptimizerRule (line 7) | public interface IWiFiOptimizerRule method Evaluate (line 19) | HealthIssue? Evaluate(WiFiOptimizerContext context); method EvaluateAll (line 25) | IEnumerable EvaluateAll(WiFiOptimizerContext context) FILE: src/NetworkOptimizer.WiFi/Rules/IoTSsidSeparationRule.cs class IoTSsidSeparationRule (line 12) | public class IoTSsidSeparationRule : IWiFiOptimizerRule method Evaluate (line 21) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/LegacyClientAirtimeRule.cs class LegacyClientAirtimeRule (line 9) | public class LegacyClientAirtimeRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/LoadImbalanceRule.cs class LoadImbalanceRule (line 12) | public class LoadImbalanceRule : IWiFiOptimizerRule method LoadImbalanceRule (line 16) | public LoadImbalanceRule(PropagationService propagationService) method Evaluate (line 33) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/MinRssiEnabledRule.cs class MinRssiEnabledRule (line 9) | public class MinRssiEnabledRule : IWiFiOptimizerRule method Evaluate (line 13) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/MinRssiRule.cs class MinRssiRule (line 9) | public class MinRssiRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/MinimumDataRatesRule.cs class MinimumDataRatesRule (line 9) | public class MinimumDataRatesRule : IWiFiOptimizerRule method Evaluate (line 18) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/NonStandardChannelRule.cs class NonStandardChannelRule (line 9) | public class NonStandardChannelRule : IWiFiOptimizerRule method EvaluateAll (line 15) | public IEnumerable EvaluateAll(WiFiOptimizerContext ctx) method Evaluate (line 45) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/RoamingAssistantRule.cs class RoamingAssistantRule (line 10) | public class RoamingAssistantRule : IWiFiOptimizerRule method Evaluate (line 14) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/TxPowerVariationRule.cs class TxPowerVariationRule (line 9) | public class TxPowerVariationRule : IWiFiOptimizerRule method Evaluate (line 13) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/WeakSignalPopulationRule.cs class WeakSignalPopulationRule (line 10) | public class WeakSignalPopulationRule : IWiFiOptimizerRule method Evaluate (line 19) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) FILE: src/NetworkOptimizer.WiFi/Rules/WiFiOptimizerContext.cs class WiFiOptimizerContext (line 9) | public class WiFiOptimizerContext FILE: src/NetworkOptimizer.WiFi/Rules/WiFiOptimizerEngine.cs class WiFiOptimizerEngine (line 8) | public class WiFiOptimizerEngine method WiFiOptimizerEngine (line 13) | public WiFiOptimizerEngine( method EvaluateRules (line 24) | public void EvaluateRules(SiteHealthScore score, WiFiOptimizerContext ... method EvaluateRules (line 52) | public List EvaluateRules(WiFiOptimizerContext context) FILE: src/NetworkOptimizer.WiFi/Rules/WideChannelWidthRule.cs class WideChannelWidthRule (line 12) | public class WideChannelWidthRule : IWiFiOptimizerRule method Evaluate (line 19) | public HealthIssue? Evaluate(WiFiOptimizerContext ctx) => null; method EvaluateAll (line 21) | public IEnumerable EvaluateAll(WiFiOptimizerContext context) method BuildInfoIssue (line 79) | private static HealthIssue BuildInfoIssue(string apName, string bandNa... method BuildWeakSignalIssue (line 98) | private static HealthIssue BuildWeakSignalIssue( FILE: src/NetworkOptimizer.WiFi/Services/ChannelRecommendationService.cs class ChannelRecommendationService (line 13) | public class ChannelRecommendationService method GetBandStressMultiplier (line 147) | private static double GetBandStressMultiplier(RadioBand band) => band ... method ChannelRecommendationService (line 154) | public ChannelRecommendationService( method BuildInterferenceGraph (line 165) | public InterferenceGraph BuildInterferenceGraph( method Optimize (line 269) | public ChannelPlan Optimize( method ScoreAssignment (line 682) | public double ScoreAssignment( method ScoreAp (line 784) | private double ScoreAp( method ComputeStressPenalty (line 876) | private (double Historical, double Fallback) ComputeStressPenalty( method ComputeStressScale (line 954) | private double ComputeStressScale( method ComputeInternalWeight (line 1015) | private double ComputeInternalWeight( method ClonePropAp (line 1071) | private static PropagationAp ClonePropAp(PropagationAp source, RadioSn... method BuildExternalLoad (line 1088) | private void BuildExternalLoad( method PropagateHistoricalStress (line 1218) | private static void PropagateHistoricalStress(InterferenceGraph graph,... method BuildScanChannelData (line 1297) | private static void BuildScanChannelData( method BuildMeshConstraints (line 1324) | private static void BuildMeshConstraints( method ResolveMeshGroups (line 1353) | private static void ResolveMeshGroups(InterferenceGraph graph) method ViolatesApDegradation (line 1376) | private bool ViolatesApDegradation( method AreMeshPair (line 1392) | private static bool AreMeshPair(InterferenceGraph graph, int i, int j) method GetValidChannelsWithWidth (line 1404) | private (int[] Channels, int Width, bool DfsFallback) GetValidChannels... method DeduplicateByBondingGroup (line 1433) | private static int[] DeduplicateByBondingGroup(int[] channels, RadioBa... method GetValidChannels (line 1454) | private int[] GetValidChannels( method GetMaxValidChannels (line 1491) | private static int GetMaxValidChannels(InterferenceGraph graph) => method CountChanges (line 1498) | private static int CountChanges( method ApplyMeshConstraints (line 1511) | private (int Channel, int Width)[] ApplyMeshConstraints( method AddDfsPenalty (line 1523) | private double AddDfsPenalty( method ExhaustiveSearch (line 1553) | private (( int Channel, int Width)[] Assignment, double Score) Exhaust... method GreedyLocalSearch (line 1629) | private ((int Channel, int Width)[] Assignment, double Score) GreedyLo... method GetSearchIndices (line 1755) | private static List GetSearchIndices(InterferenceGraph graph, Has... method LogGraphDetails (line 1776) | private void LogGraphDetails(InterferenceGraph graph, RadioBand band, ... method LogPerApChannelScores (line 1862) | private void LogPerApChannelScores( method LogRecommendationSummary (line 1983) | private void LogRecommendationSummary( FILE: src/NetworkOptimizer.WiFi/Services/PropagationService.cs class PropagationService (line 11) | public class PropagationService method PropagationService (line 24) | public PropagationService(AntennaPatternLoader antennaLoader, ILogger<... method ComputeHeatmap (line 33) | public HeatmapResponse ComputeHeatmap( method AdjustWithMeasurements (line 134) | public void AdjustWithMeasurements(HeatmapResponse heatmap, List PrecomputeWallSegments(List method IsMeshModel (line 656) | private static bool IsMeshModel(string model) => method GetPatternNativeMount (line 659) | private string GetPatternNativeMount(string model, string band, string... method IsStandMountModel (line 682) | private static bool IsStandMountModel(string model) method FindSmallestContainingBuilding (line 693) | private static BuildingFloorInfo? FindSmallestContainingBuilding(List<... method HasFloorZero (line 716) | private static bool HasFloorZero(List? buildings, d... type WallSegment (line 724) | internal struct WallSegment FILE: src/NetworkOptimizer.WiFi/SiteHealthScore.cs class SiteHealthScore (line 7) | public class SiteHealthScore class ScoreDimension (line 53) | public class ScoreDimension class ScoreFactor (line 74) | public class ScoreFactor class HealthIssue (line 92) | public class HealthIssue type HealthDimension (line 132) | public enum HealthDimension type HealthIssueSeverity (line 143) | public enum HealthIssueSeverity class HealthSummaryStats (line 153) | public class HealthSummaryStats FILE: src/NetworkOptimizer.WiFi/WiFiAnalysisHelpers.cs class WiFiAnalysisHelpers (line 10) | public static class WiFiAnalysisHelpers method SortByIp (line 23) | public static List SortByIp(IEnumerable SortByIp(IEnumerable FilterOutMeshPairs( method GetInterferenceThresholdDbm (line 119) | public static double GetInterferenceThresholdDbm(RadioBand band) => ba... method FilterByPropagation (line 130) | public static List FilterByPropagation( FILE: src/OpenSpeedTest/assets/js/app-2.5.4.js function _ (line 24) | function _(el) { function func (line 36) | function func() { function uiLoaded (line 155) | function uiLoaded(argument) { function calcMeasure (line 206) | function calcMeasure() { function createChart (line 213) | function createChart(element, values) { function calcPoints (line 228) | function calcPoints() { function calcMaxValue (line 242) | function calcMaxValue() { function getRandom (line 516) | function getRandom() { function reSett (line 568) | function reSett() { function setFinal (line 583) | function setFinal() { function isValidHttpUrl (line 655) | function isValidHttpUrl(str) { function removeEvts (line 809) | function removeEvts() { function ShowIP (line 817) | function ShowIP() { function runTasks (line 825) | function runTasks() { function hiEnter (line 873) | function hiEnter(e) { function testRun (line 894) | function testRun() { function OpenSpeedtest (line 901) | function OpenSpeedtest() { function downReq (line 1067) | function downReq() { function upReq (line 1074) | function upReq() { function reportCurrentSpeed (line 1101) | function reportCurrentSpeed(now) { function SendReQ (line 1151) | function SendReQ(i) { function SendUpReq (line 1200) | function SendUpReq(i) { function sendPing (line 1260) | function sendPing() { function readServerList (line 1274) | function readServerList() { function sendPingRequest (line 1313) | function sendPingRequest(serverListElm, callback) { FILE: src/OpenSpeedTest/assets/js/darkmode.js function changeSkin (line 2) | function changeSkin(){dayModeMob=document.getElementById("daymode-Mob");... function setSkin (line 4) | function setSkin(a){"dark"===a&&(dayModeMob.style.display="none",nightMo... function toggleSkin (line 5) | function toggleSkin(){(darkStyle=document.getElementById("darkmode"))?se... function createCookie (line 5) | function createCookie(a,c,b){if(b){var d=new Date;d.setTime(d.getTime()+... function getCookieValue (line 6) | function getCookieValue(a,c){return(c=document.cookie.match("(^|;)\\s*"+... FILE: src/OpenSpeedTest/assets/js/geolocation.js function startLocationWatch (line 16) | function startLocationWatch() { function startHighAccuracyWatch (line 45) | function startHighAccuracyWatch() { function getLocationFormData (line 68) | function getLocationFormData() { FILE: src/cfspeedtest/main.go function main (line 16) | func main() { function run (line 59) | func run(cfg speedtest.Config) speedtest.Result { function errorResult (line 122) | func errorResult(msg string) speedtest.Result { FILE: src/cfspeedtest/speedtest/latency.go function MeasureLatency (line 16) | func MeasureLatency(ctx context.Context, client *http.Client) (*LatencyR... function ComputeLatencyStats (line 82) | func ComputeLatencyStats(samples []float64) (median, jitter float64) { FILE: src/cfspeedtest/speedtest/metadata.go constant baseURL (line 12) | baseURL = "https://speed.cloudflare.com" constant downloadPath (line 13) | downloadPath = "__down?bytes=" constant uploadPath (line 14) | uploadPath = "__up" function FetchMetadata (line 18) | func FetchMetadata(ctx context.Context, client *http.Client) (*Metadata,... FILE: src/cfspeedtest/speedtest/servertiming.go function parseServerTiming (line 14) | func parseServerTiming(resp *http.Response) float64 { FILE: src/cfspeedtest/speedtest/sockopt_unix.go function setSocketBuffers (line 7) | func setSocketBuffers(network, address string, c syscall.RawConn) error { FILE: src/cfspeedtest/speedtest/sockopt_windows.go function setSocketBuffers (line 7) | func setSocketBuffers(network, address string, c syscall.RawConn) error { FILE: src/cfspeedtest/speedtest/throughput.go constant minDownloadChunkSize (line 15) | minDownloadChunkSize = 100_000 constant SampleInterval (line 16) | SampleInterval = 200 * time.Millisecond constant ProbeInterval (line 17) | ProbeInterval = 500 * time.Millisecond constant WarmupFraction (line 18) | WarmupFraction = 0.20 constant ReadBufferSize (line 19) | ReadBufferSize = 262144 function NewWorkerClient (line 24) | func NewWorkerClient(timeout time.Duration, ifaceName string) (*http.Cli... type CountingReader (line 38) | type CountingReader struct method Read (line 43) | func (cr *CountingReader) Read(p []byte) (int, error) { function MeasureThroughput (line 54) | func MeasureThroughput(ctx context.Context, isUpload bool, cfg Config) (... FILE: src/cfspeedtest/speedtest/transport.go function NewTransport (line 13) | func NewTransport(ifaceName string) (*http.Transport, error) { function NewThroughputTransport (line 37) | func NewThroughputTransport(ifaceName string, maxConns int) (*http.Trans... function NewClient (line 72) | func NewClient(cfg Config, timeout time.Duration) (*http.Client, error) { function ResolveInterfaceAddr (line 85) | func ResolveInterfaceAddr(name string) (*net.TCPAddr, error) { FILE: src/cfspeedtest/speedtest/types.go type Result (line 6) | type Result struct type Metadata (line 19) | type Metadata struct type LatencyResult (line 28) | type LatencyResult struct type ThroughputResult (line 34) | type ThroughputResult struct type Config (line 42) | type Config struct function DefaultConfig (line 54) | func DefaultConfig() Config { FILE: src/uwnspeedtest/main.go function main (line 20) | func main() { function run (line 63) | func run(cfg uwn.UwnConfig) speedtest.Result { function errorResult (line 223) | func errorResult(msg string) speedtest.Result { FILE: src/uwnspeedtest/uwn/discovery.go constant tokenURL (line 15) | tokenURL = "https://sp-dir.uwn.com/api/v1/tokens" constant serversURL (line 16) | serversURL = "https://sp-dir.uwn.com/api/v2/servers" constant ipInfoURL (line 17) | ipInfoURL = "https://sp-dir.uwn.com/api/v1/ip" constant userAgent (line 18) | userAgent = "ui-speed-linux-arm64/1.3.4" constant pingAttempts (line 19) | pingAttempts = 3 constant pingTimeout (line 20) | pingTimeout = 3 * time.Second type IpInfo (line 24) | type IpInfo struct function FetchIpInfo (line 32) | func FetchIpInfo(ctx context.Context, client *http.Client) (*IpInfo, err... function FetchToken (line 57) | func FetchToken(ctx context.Context, client *http.Client) (string, error) { function DiscoverServers (line 86) | func DiscoverServers(ctx context.Context, client *http.Client) ([]Server... function SelectServers (line 113) | func SelectServers(ctx context.Context, client *http.Client, token strin... function pingServer (line 163) | func pingServer(ctx context.Context, client *http.Client, serverURL, tok... function haversine (line 203) | func haversine(lat1, lon1, lat2, lon2 float64) float64 { FILE: src/uwnspeedtest/uwn/latency.go function MeasureLatency (line 18) | func MeasureLatency(ctx context.Context, server Server, ifaceName string... FILE: src/uwnspeedtest/uwn/throughput.go constant uploadSize (line 17) | uploadSize = 2_000_000 constant downloadSize (line 18) | downloadSize = 104_857_600 constant warmupTime (line 19) | warmupTime = 2 * time.Second function MeasureThroughput (line 25) | func MeasureThroughput(ctx context.Context, isUpload bool, cfg UwnConfig... FILE: src/uwnspeedtest/uwn/types.go type Server (line 4) | type Server struct type tokenResponse (line 18) | type tokenResponse struct type UwnConfig (line 24) | type UwnConfig struct FILE: src/wansteer/config.go type Config (line 10) | type Config struct type WANInterface (line 44) | type WANInterface struct type TrafficClass (line 53) | type TrafficClass struct type MatchCriteria (line 64) | type MatchCriteria struct function loadConfig (line 80) | func loadConfig(path string) (*Config, error) { function validateConfig (line 133) | func validateConfig(cfg *Config) error { function validateMatch (line 163) | func validateMatch(m *MatchCriteria, idx int, name string) error { FILE: src/wansteer/health.go type HealthChecker (line 12) | type HealthChecker struct method checkAll (line 49) | func (h *HealthChecker) checkAll() { method update (line 61) | func (h *HealthChecker) update(wan string, reachable bool) { method isHealthy (line 122) | func (h *HealthChecker) isHealthy(wan string) bool { method unhealthyWANs (line 130) | func (h *HealthChecker) unhealthyWANs() map[string]bool { method snapshot (line 143) | func (h *HealthChecker) snapshot() map[string]WANHealth { method setBackoff (line 159) | func (h *HealthChecker) setBackoff(b bool) { method pruneTransitions (line 167) | func (h *HealthChecker) pruneTransitions(wan string, now time.Time) { method isUnstableLocked (line 182) | func (h *HealthChecker) isUnstableLocked(wan string) bool { method anyUnstable (line 187) | func (h *HealthChecker) anyUnstable() bool { method unstableWANs (line 201) | func (h *HealthChecker) unstableWANs() map[string]bool { method checkStability (line 218) | func (h *HealthChecker) checkStability() bool { method resetStableSince (line 247) | func (h *HealthChecker) resetStableSince() { function newHealthChecker (line 31) | func newHealthChecker(cfg *Config, onStateChange func(string, bool, bool... function ping (line 258) | func ping(target, iface string, timeoutSecs int) bool { FILE: src/wansteer/main.go function main (line 16) | func main() { function waitForWANStability (line 229) | func waitForWANStability(cfg *Config) { function isInterfaceUp (line 298) | func isInterfaceUp(name string) bool { FILE: src/wansteer/rules.go constant chainName (line 14) | chainName = "WAN_STEER" function applyRules (line 18) | func applyRules(cfg *Config) error { function addTrafficClassRules (line 55) | func addTrafficClassRules(tc *TrafficClass, wan *WANInterface) error { function buildSourceMatchers (line 101) | func buildSourceMatchers(m *MatchCriteria) [][]string { function buildDestMatchers (line 123) | func buildDestMatchers(m *MatchCriteria) [][]string { function buildSharedArgs (line 141) | func buildSharedArgs(tc *TrafficClass) []string { function connmarkSharedArgs (line 187) | func connmarkSharedArgs(tc *TrafficClass) []string { function removeRules (line 216) | func removeRules() error { function reapplyRules (line 233) | func reapplyRules(cfg *Config, disabledWANs map[string]bool) error { function hasJump (line 248) | func hasJump() bool { function ruleCount (line 258) | func ruleCount() int { function expectedRuleCount (line 275) | func expectedRuleCount(cfg *Config, disabledWANs map[string]bool) int { function countEnabled (line 295) | func countEnabled(cfg *Config) int { function normalizePortsForIptables (line 306) | func normalizePortsForIptables(ports []string) []string { function flushAllSteeredConntrack (line 316) | func flushAllSteeredConntrack(cfg *Config) { function activeTargetWANs (line 326) | func activeTargetWANs(cfg *Config) map[string]bool { function initSFECooldown (line 345) | func initSFECooldown(cooldownSeconds int) { function flushSFE (line 360) | func flushSFE() { function flushSFEForce (line 377) | func flushSFEForce() { function doFlushSFE (line 385) | func doFlushSFE() { function flushConntrackForMark (line 401) | func flushConntrackForMark(fwmark string) { function run (line 421) | func run(name string, args ...string) error { FILE: src/wansteer/status.go type Status (line 10) | type Status struct type WANHealth (line 24) | type WANHealth struct type TrafficClassStatus (line 32) | type TrafficClassStatus struct function writeStatus (line 40) | func writeStatus(path string, status *Status) error { function buildStatus (line 53) | func buildStatus(cfg *Config, startedAt time.Time, lastReconcile time.Ti... FILE: src/wansteer/wansteer_test.go function validConfig (line 14) | func validConfig() *Config { function TestValidateConfig_Valid (line 38) | func TestValidateConfig_Valid(t *testing.T) { function TestValidateConfig_MissingWANInterfaces (line 44) | func TestValidateConfig_MissingWANInterfaces(t *testing.T) { function TestValidateConfig_MissingDefaultWAN (line 52) | func TestValidateConfig_MissingDefaultWAN(t *testing.T) { function TestValidateConfig_DefaultWANNotInInterfaces (line 60) | func TestValidateConfig_DefaultWANNotInInterfaces(t *testing.T) { function TestValidateConfig_NoMatchCriteria (line 68) | func TestValidateConfig_NoMatchCriteria(t *testing.T) { function TestValidateConfig_PortsWithoutProtocol (line 76) | func TestValidateConfig_PortsWithoutProtocol(t *testing.T) { function TestValidateConfig_InvalidProbability (line 87) | func TestValidateConfig_InvalidProbability(t *testing.T) { function TestValidateConfig_InvalidTargetWAN (line 107) | func TestValidateConfig_InvalidTargetWAN(t *testing.T) { function TestValidateConfig_EmptyTargetWAN (line 115) | func TestValidateConfig_EmptyTargetWAN(t *testing.T) { function TestValidateMatch_SrcRangesCountAsValid (line 123) | func TestValidateMatch_SrcRangesCountAsValid(t *testing.T) { function TestValidateMatch_DstRangesCountAsValid (line 133) | func TestValidateMatch_DstRangesCountAsValid(t *testing.T) { function TestValidateMatch_SrcMACsCountAsValid (line 143) | func TestValidateMatch_SrcMACsCountAsValid(t *testing.T) { function TestValidateMatch_ProtocolAloneIsValid (line 153) | func TestValidateMatch_ProtocolAloneIsValid(t *testing.T) { function TestValidateMatch_InvalidProtocol (line 161) | func TestValidateMatch_InvalidProtocol(t *testing.T) { function TestNormalizePortsForIptables_DashToColon (line 173) | func TestNormalizePortsForIptables_DashToColon(t *testing.T) { function TestNormalizePortsForIptables_SinglePort (line 180) | func TestNormalizePortsForIptables_SinglePort(t *testing.T) { function TestNormalizePortsForIptables_Multiple (line 187) | func TestNormalizePortsForIptables_Multiple(t *testing.T) { function TestNormalizePortsForIptables_Empty (line 200) | func TestNormalizePortsForIptables_Empty(t *testing.T) { function TestExpectedRuleCount_SingleCIDR (line 211) | func TestExpectedRuleCount_SingleCIDR(t *testing.T) { function TestExpectedRuleCount_MultipleDstCIDRs (line 219) | func TestExpectedRuleCount_MultipleDstCIDRs(t *testing.T) { function TestExpectedRuleCount_SrcAndDstCrossProduct (line 229) | func TestExpectedRuleCount_SrcAndDstCrossProduct(t *testing.T) { function TestExpectedRuleCount_DisabledClassNotCounted (line 240) | func TestExpectedRuleCount_DisabledClassNotCounted(t *testing.T) { function TestExpectedRuleCount_RangesIncluded (line 249) | func TestExpectedRuleCount_RangesIncluded(t *testing.T) { function TestExpectedRuleCount_MixedSrcTypes (line 263) | func TestExpectedRuleCount_MixedSrcTypes(t *testing.T) { function TestExpectedRuleCount_MultipleClasses (line 278) | func TestExpectedRuleCount_MultipleClasses(t *testing.T) { function TestExpectedRuleCount_UnhealthyWANExcluded (line 294) | func TestExpectedRuleCount_UnhealthyWANExcluded(t *testing.T) { function TestActiveTargetWANs_EnabledOnly (line 326) | func TestActiveTargetWANs_EnabledOnly(t *testing.T) { function TestActiveTargetWANs_DisabledExcluded (line 344) | func TestActiveTargetWANs_DisabledExcluded(t *testing.T) { function TestConnmarkSharedArgs_NoProtocol (line 360) | func TestConnmarkSharedArgs_NoProtocol(t *testing.T) { function TestConnmarkSharedArgs_WithProtocolAndPorts (line 368) | func TestConnmarkSharedArgs_WithProtocolAndPorts(t *testing.T) { function TestConnmarkSharedArgs_MultiplePortsUseMultiport (line 389) | func TestConnmarkSharedArgs_MultiplePortsUseMultiport(t *testing.T) { function TestLoadConfig_Defaults (line 414) | func TestLoadConfig_Defaults(t *testing.T) { function TestLoadConfig_CustomValuesNotOverridden (line 462) | func TestLoadConfig_CustomValuesNotOverridden(t *testing.T) { function TestHealthChecker_StartsHealthy (line 508) | func TestHealthChecker_StartsHealthy(t *testing.T) { function TestHealthChecker_FailThreshold (line 520) | func TestHealthChecker_FailThreshold(t *testing.T) { function TestHealthChecker_PassThreshold (line 550) | func TestHealthChecker_PassThreshold(t *testing.T) { function TestHealthChecker_FailResetsPassCount (line 576) | func TestHealthChecker_FailResetsPassCount(t *testing.T) { function TestHealthChecker_UnhealthyWANs (line 603) | func TestHealthChecker_UnhealthyWANs(t *testing.T) { function TestHealthChecker_Snapshot (line 619) | func TestHealthChecker_Snapshot(t *testing.T) { function TestBuildStatus_PopulatesFields (line 642) | func TestBuildStatus_PopulatesFields(t *testing.T) { function TestFlushSFE_NoSysfs (line 680) | func TestFlushSFE_NoSysfs(t *testing.T) { function TestFlushSFE_Idempotent (line 687) | func TestFlushSFE_Idempotent(t *testing.T) { function TestLoadConfig_StabilityDefaults (line 699) | func TestLoadConfig_StabilityDefaults(t *testing.T) { function TestLoadConfig_StabilityCustomValues (line 744) | func TestLoadConfig_StabilityCustomValues(t *testing.T) { function TestHealthChecker_InstabilityDetection (line 798) | func TestHealthChecker_InstabilityDetection(t *testing.T) { function TestHealthChecker_InstabilityWindowExpiry (line 830) | func TestHealthChecker_InstabilityWindowExpiry(t *testing.T) { function TestHealthChecker_StabilityRecovery (line 856) | func TestHealthChecker_StabilityRecovery(t *testing.T) { function TestHealthChecker_ResetStableSince (line 892) | func TestHealthChecker_ResetStableSince(t *testing.T) { function TestHealthChecker_OnlyTargetWANUnstable (line 919) | func TestHealthChecker_OnlyTargetWANUnstable(t *testing.T) { function TestSFEFlushCooldown (line 946) | func TestSFEFlushCooldown(t *testing.T) { function TestSFEFlushForce_BypassesCooldown (line 987) | func TestSFEFlushForce_BypassesCooldown(t *testing.T) { function TestBuildStatus_BackoffFields (line 1016) | func TestBuildStatus_BackoffFields(t *testing.T) { FILE: tests/FluentAssertionsLicense.cs class FluentAssertionsLicenseInitializer (line 12) | public static class FluentAssertionsLicenseInitializer method Initialize (line 14) | public static void Initialize() FILE: tests/NetworkOptimizer.Agents.Tests/DeploymentResultTests.cs class DeploymentResultTests (line 7) | public class DeploymentResultTests method CreateSuccess_SetsCorrectProperties (line 11) | [Fact] method CreateSuccess_AllAgentTypes_WorkCorrectly (line 35) | [Fact] method CreateFailure_SetsCorrectProperties (line 53) | [Fact] method DeploymentStep_DefaultValues_AreCorrect (line 81) | [Fact] method DeploymentResult_CanAddSteps (line 95) | [Fact] method VerificationResult_DefaultValues_AreCorrect (line 127) | [Fact] method DeploymentResult_CanSetVerification (line 141) | [Fact] method DeploymentResult_CanAddDeployedFiles (line 170) | [Fact] FILE: tests/NetworkOptimizer.Agents.Tests/ScriptRendererTests.cs class ScriptRendererTests (line 10) | public class ScriptRendererTests : IDisposable method ScriptRendererTests (line 16) | public ScriptRendererTests() method Dispose (line 24) | public void Dispose() method CreateTestConfig (line 32) | private static AgentConfiguration CreateTestConfig(AgentType agentType... method RenderTemplateStringAsync_SimpleVariable_RendersCorrectly (line 62) | [Fact] method RenderTemplateStringAsync_AllBasicVariables_RendersCorrectly (line 76) | [Fact] method RenderTemplateStringAsync_ConditionalIsUdm_RendersCorrectly (line 108) | [Fact] method RenderTemplateStringAsync_ConditionalIsUcg_RendersCorrectly (line 122) | [Fact] method RenderTemplateStringAsync_ConditionalIsLinux_RendersCorrectly (line 136) | [Fact] method RenderTemplateStringAsync_ConditionalIsUnifi_UDM_RendersCorrectly (line 150) | [Fact] method RenderTemplateStringAsync_ConditionalIsUnifi_UCG_RendersCorrectly (line 164) | [Fact] method RenderTemplateStringAsync_ConditionalIsUnifi_Linux_RendersCorrectly (line 178) | [Fact] method RenderTemplateStringAsync_Tags_RendersCorrectly (line 192) | [Fact] method RenderTemplateStringAsync_InvalidTemplate_ThrowsException (line 206) | [Fact] method RenderTemplateStringAsync_EmptyTemplate_ReturnsEmpty (line 221) | [Fact] method RenderTemplateStringAsync_NoVariables_ReturnsAsIs (line 235) | [Fact] method RenderTemplateAsync_ValidTemplateFile_RendersCorrectly (line 253) | [Fact] method RenderTemplateAsync_FileNotFound_ThrowsException (line 269) | [Fact] method RenderTemplateAsync_InvalidTemplateContent_ThrowsException (line 283) | [Fact] method GetTemplatesForAgent_UDM_ReturnsCorrectTemplates (line 304) | [Fact] method GetTemplatesForAgent_UCG_ReturnsCorrectTemplates (line 317) | [Fact] method GetTemplatesForAgent_Linux_ReturnsCorrectTemplates (line 330) | [Fact] method GetTemplatesForAgent_UnknownType_ThrowsException (line 343) | [Fact] method ValidateTemplates_AllTemplatesExist_ReturnsTrue (line 361) | [Fact] method ValidateTemplates_SomeTemplatesMissing_ReturnsFalse (line 377) | [Fact] method ValidateTemplates_NoTemplatesExist_ReturnsFalse (line 393) | [Fact] method ListAvailableTemplates_WithTemplates_ReturnsFileNames (line 408) | [Fact] method ListAvailableTemplates_NoTemplates_ReturnsEmpty (line 424) | [Fact] method ListAvailableTemplates_DirectoryNotExists_ReturnsEmpty (line 434) | [Fact] method ListAvailableTemplates_OnlyTemplateExtension_FiltersCorrectly (line 447) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/AlertCooldownTrackerTests.cs class AlertCooldownTrackerTests (line 6) | public class AlertCooldownTrackerTests method IsInCooldown_FirstFire_ReturnsFalse (line 10) | [Fact] method IsInCooldown_AfterRecordFired_WithinWindow_ReturnsTrue (line 16) | [Fact] method IsInCooldown_AfterRecordFired_ZeroCooldown_ReturnsFalse (line 24) | [Fact] method IsInCooldown_AfterRecordFired_NegativeCooldown_ReturnsFalse (line 32) | [Fact] method IsInCooldown_DifferentKeys_Independent (line 40) | [Fact] method RecordFired_UpdatesExistingKey (line 50) | [Fact] method Cleanup_RemovesExpiredEntries (line 60) | [Fact] method Cleanup_KeepsRecentEntries (line 71) | [Fact] method IsInCooldown_VeryShortCooldown_EventuallyExpires (line 82) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/AlertCorrelationServiceTests.cs class AlertCorrelationServiceTests (line 12) | public class AlertCorrelationServiceTests method AlertCorrelationServiceTests (line 17) | public AlertCorrelationServiceTests() method CreateTestEvent (line 23) | private static AlertEvent CreateTestEvent( method GetCorrelationKey_WithDeviceIp_ReturnsDeviceKey (line 40) | [Fact] method GetCorrelationKey_WithoutDeviceIp_ReturnsSourceKey (line 50) | [Fact] method GetCorrelationKey_NoDotInEventType_NoDeviceIp_ReturnsNull (line 60) | [Fact] method GetCorrelationKey_DeviceIpTakesPriority_OverSourceKey (line 75) | [Fact] method CorrelateAsync_NoExistingIncident_CreatesNew (line 90) | [Fact] method CorrelateAsync_NullCorrelationKey_ReturnsNull (line 115) | [Fact] method CorrelateAsync_ExistingIncidentWithinWindow_AddsToIt (line 136) | [Fact] method CorrelateAsync_ExistingIncidentOutsideWindow_CreatesNew (line 166) | [Fact] method CorrelateAsync_ExistingIncident_DoesNotDowngradeSeverity (line 198) | [Fact] method CorrelateAsync_RepositoryThrows_ReturnsNull (line 227) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/AlertEventBusTests.cs class AlertEventBusTests (line 8) | public class AlertEventBusTests method CreateTestEvent (line 10) | private static AlertEvent CreateTestEvent(string eventType = "test.eve... method PublishAsync_SingleEvent_CanBeConsumed (line 21) | [Fact] method PublishAsync_MultipleEvents_ConsumedInOrder (line 41) | [Fact] method ConsumeAsync_Cancellation_StopsEnumeration (line 64) | [Fact] method PublishAsync_BoundedOverflow_DropsOldest (line 85) | [Fact] method PublishAsync_PreservesAllEventProperties (line 110) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/AlertRuleEvaluatorTests.cs class AlertRuleEvaluatorTests (line 10) | public class AlertRuleEvaluatorTests method AlertRuleEvaluatorTests (line 15) | public AlertRuleEvaluatorTests() method CreateTestEvent (line 20) | private static AlertEvent CreateTestEvent( method CreateTestRule (line 38) | private static AlertRule CreateTestRule( method Evaluate_WildcardPattern_MatchesAll (line 64) | [Fact] method Evaluate_EmptyPattern_MatchesAll (line 75) | [Fact] method Evaluate_ExactMatch_Matches (line 86) | [Fact] method Evaluate_ExactMatch_CaseInsensitive (line 97) | [Fact] method Evaluate_ExactMatch_NoMatch (line 108) | [Fact] method Evaluate_PrefixWildcard_MatchesSamePrefix (line 119) | [Fact] method Evaluate_PrefixWildcard_MatchesMultipleSubTypes (line 130) | [Fact] method Evaluate_PrefixWildcard_NoMatchDifferentPrefix (line 140) | [Fact] method Evaluate_PrefixWildcard_NoMatchPartialPrefix (line 151) | [Fact] method Evaluate_EventMeetsSeverity_Matches (line 167) | [Fact] method Evaluate_EventBelowSeverity_NoMatch (line 178) | [Fact] method Evaluate_EventEqualsSeverity_Matches (line 189) | [Fact] method Evaluate_SourceMatches_Matches (line 204) | [Fact] method Evaluate_SourceDoesNotMatch_NoMatch (line 215) | [Fact] method Evaluate_EmptySourceFilter_MatchesAll (line 226) | [Fact] method Evaluate_SourceComparison_CaseInsensitive (line 237) | [Fact] method Evaluate_NoTargetDevices_MatchesAll (line 252) | [Fact] method Evaluate_DeviceIdInTargetList_Matches (line 263) | [Fact] method Evaluate_DeviceIpInTargetList_Matches (line 274) | [Fact] method Evaluate_DeviceNotInTargetList_NoMatch (line 285) | [Fact] method Evaluate_DisabledRule_Skipped (line 300) | [Fact] method Evaluate_WithinCooldown_Suppressed (line 315) | [Fact] method Evaluate_NoCooldown_AlwaysMatches (line 334) | [Fact] method Evaluate_DifferentDevices_IndependentCooldown (line 346) | [Fact] method Evaluate_MultipleMatchingRules_ReturnsAll (line 370) | [Fact] method MatchesEventType_ReturnsExpected (line 391) | [Theory] FILE: tests/NetworkOptimizer.Alerts.Tests/Delivery/NtfyDeliveryChannelTests.cs class NtfyDeliveryChannelTests (line 8) | public class NtfyDeliveryChannelTests method MapPriority_ReturnsExpectedNtfyPriority (line 10) | [Theory] method MapTag_ReturnsExpectedEmojiShortcode (line 20) | [Theory] method MapPriority_CriticalIsHighest (line 30) | [Fact] method MapPriority_AllValuesInNtfyRange (line 43) | [Fact] method MapTag_AllSeveritiesReturnNonEmpty (line 53) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/Delivery/WebhookDeliveryChannelTests.cs class WebhookDeliveryChannelTests (line 7) | public class WebhookDeliveryChannelTests method ComputeHmacSha256_KnownInput_ProducesExpectedHash (line 9) | [Fact] method ComputeHmacSha256_SameInputSameSecret_ProducesSameHash (line 21) | [Fact] method ComputeHmacSha256_DifferentSecrets_ProduceDifferentHashes (line 33) | [Fact] method ComputeHmacSha256_DifferentPayloads_ProduceDifferentHashes (line 44) | [Fact] method ComputeHmacSha256_EmptyPayload_StillProducesHash (line 55) | [Fact] FILE: tests/NetworkOptimizer.Alerts.Tests/ScheduleCalculationTests.cs class ScheduleCalculationTests (line 6) | public class ScheduleCalculationTests method NonAnchored_WithScheduledRunTime_BasesNextRunOnScheduledTime (line 8) | [Fact] method NonAnchored_WithScheduledRunTime_WalksForwardIfInPast (line 25) | [Fact] method NonAnchored_WithoutScheduledRunTime_FallsBackToUtcNow (line 43) | [Fact] method NonAnchored_FrequencyZero_ReturnsFallback (line 59) | [Fact] method Anchored_IgnoresScheduledRunTime (line 71) | [Fact] method Anchored_FrequencyZero_ReturnsFallback (line 89) | [Fact] method NonAnchored_ScheduledTimeJustBeforeNow_NextRunIsInFuture (line 101) | [Fact] method Anchored_HourlyWithLateAnchor_FindsNextHourlySlot (line 113) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/FirewallGroupHelperTests.cs class FirewallGroupHelperTests (line 10) | public class FirewallGroupHelperTests method IncludesPort_SinglePortsAndLists_ReturnsExpected (line 16) | [Theory] method IncludesPort_PortRanges_ReturnsExpected (line 31) | [Theory] method IncludesPort_MixedPortsAndRanges_ReturnsExpected (line 47) | [Theory] method IncludesPort_InvalidInputs_ReturnsFalse (line 61) | [Theory] method ResolvePortGroup_ValidPortGroup_ReturnsCommaSeparatedPorts (line 77) | [Fact] method ResolvePortGroup_PortGroupWithRange_PreservesRange (line 96) | [Fact] method ResolvePortGroup_NonexistentGroup_ReturnsNull (line 115) | [Fact] method ResolvePortGroup_WrongGroupType_ReturnsNull (line 125) | [Fact] method ResolvePortGroup_EmptyGroupMembers_ReturnsNull (line 144) | [Fact] method ResolvePortGroup_NullGroups_ReturnsNull (line 163) | [Fact] method ResolveAddressGroup_ValidAddressGroup_ReturnsIpList (line 175) | [Fact] method ResolveAddressGroup_IPv6AddressGroup_ReturnsIpList (line 197) | [Fact] method ResolveAddressGroup_WithCidr_PreservesCidr (line 218) | [Fact] method ResolveAddressGroup_PortGroup_ReturnsNull (line 238) | [Fact] method AllowsProtocol_NormalMode_ReturnsExpected (line 261) | [Theory] method AllowsProtocol_OppositeMode_ReturnsExpected (line 277) | [Theory] method BlocksProtocol_NormalMode_ReturnsExpected (line 294) | [Theory] method BlocksProtocol_OppositeMode_ReturnsExpected (line 308) | [Theory] method RuleAllowsPortAndProtocol_MatchingPortAndProtocol_ReturnsTrue (line 325) | [Fact] method RuleAllowsPortAndProtocol_WrongPort_ReturnsFalse (line 342) | [Fact] method RuleAllowsPortAndProtocol_WrongProtocol_ReturnsFalse (line 359) | [Fact] method RuleAllowsPortAndProtocol_InvertedPorts_ReturnsFalse (line 376) | [Fact] method RuleAllowsPortAndProtocol_InvertedProtocol_ReturnsFalse (line 393) | [Fact] method RuleAllowsPortAndProtocol_PortRange_ReturnsTrue (line 410) | [Fact] method RuleBlocksPortAndProtocol_MatchingPortAndProtocol_ReturnsTrue (line 431) | [Fact] method RuleBlocksPortAndProtocol_InvertedPorts_ReturnsFalse (line 448) | [Fact] method RuleBlocksPortAndProtocol_InvertedProtocolIcmp_BlocksUdp (line 466) | [Fact] method RuleBlocksPortAndProtocol_InvertedProtocolUdp_DoesNotBlockUdp (line 485) | [Fact] method RuleBlocksPortAndProtocol_NoPortRestriction_BlocksAllPorts (line 504) | [Fact] method RuleBlocksPortAndProtocol_EmptyPortRestriction_BlocksAllPorts (line 523) | [Fact] method RuleBlocksPortAndProtocol_SpecificPort_DoesNotBlockOtherPorts (line 540) | [Fact] method RuleBlocksPortAndProtocol_PortList_BlocksListedPorts (line 558) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/FirewallRuleAnalyzerTests.cs class FirewallRuleAnalyzerTests (line 12) | public class FirewallRuleAnalyzerTests method FirewallRuleAnalyzerTests (line 18) | public FirewallRuleAnalyzerTests() method AnalyzeManagementNetworkFirewallAccess_NoIsolatedMgmtNetworks_ReturnsNoIssues (line 28) | [Fact] method AnalyzeManagementNetworkFirewallAccess_IsolatedMgmtWithNoRules_ReturnsAllIssues (line 45) | [Fact] method AnalyzeManagementNetworkFirewallAccess_HasUniFiAccessRule_ReturnsMissingAfcAndNtp (line 65) | [Fact] method AnalyzeManagementNetworkFirewallAccess_HasAfcAccessRule_ReturnsMissingUniFiAndNtp (line 90) | [Fact] method AnalyzeManagementNetworkFirewallAccess_HasAllThreeRules_ReturnsNoIssues (line 115) | [Fact] method AnalyzeManagementNetworkFirewallAccess_NtpByPort123_ReturnsNoNtpIssue (line 145) | [Fact] method AnalyzeManagementNetworkFirewallAccess_SeparateRules_MatchesAll (line 174) | [Fact] method AnalyzeManagementNetworkFirewallAccess_CombinedRule_MatchesBothUniFiAndAfc (line 203) | [Fact] method AnalyzeManagementNetworkFirewallAccess_DisabledRule_NotCounted (line 230) | [Fact] method AnalyzeManagementNetworkFirewallAccess_BlockRule_NotCounted (line 259) | [Fact] method AnalyzeManagementNetworkFirewallAccess_NonManagementNetwork_Ignored (line 282) | [Fact] method AnalyzeManagementNetworkFirewallAccess_No5GDevice_No5GIssue (line 299) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GDevice_Returns5GIssue (line 317) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GRuleByConfig_No5GIssue (line 335) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GRuleWithPartialDomains_No5GIssue (line 367) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GRuleByIp_No5GIssue (line 400) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GRuleByMac_No5GIssue (line 442) | [Fact] method AnalyzeManagementNetworkFirewallAccess_Has5GRuleByAnySource_No5GIssue (line 484) | [Fact] method AnalyzeManagementNetworkFirewallAccess_SeverityAndScoreImpact_Correct (line 525) | [Fact] method AnalyzeManagementNetworkFirewallAccess_InternetBlockedViaFirewallRule_ReturnsAllIssues (line 546) | [Fact] method AnalyzeManagementNetworkFirewallAccess_InternetBlockedViaFirewallRule_WithAllowRules_ReturnsNoIssues (line 584) | [Fact] method AnalyzeManagementNetworkFirewallAccess_AllowRuleEclipsesBlockRule_InternetNotActuallyBlocked (line 643) | [Fact] method AnalyzeManagementNetworkFirewallAccess_BlockRuleBeforeAllowRule_InternetBlocked (line 694) | [Fact] method AnalyzeManagementNetworkFirewallAccess_NtpViaPortGroup_SatisfiesRequirement (line 746) | [Fact] method AnalyzeManagementNetworkFirewallAccess_UniFiAccessRuleEclipsedByBlockRule_ReportsMissing (line 811) | [Fact] method AnalyzeManagementNetworkFirewallAccess_UniFiAccessRuleNotEclipsed_NoIssue (line 867) | [Fact] method AnalyzeManagementNetworkFirewallAccess_AfcAccessRuleEclipsedByBlockRule_ReportsMissing (line 923) | [Fact] method AnalyzeManagementNetworkFirewallAccess_AfcAccessRuleNotEclipsed_NoIssue (line 978) | [Fact] method AnalyzeManagementNetworkFirewallAccess_BlockRuleTargetsInternalZone_DoesNotEclipseExternalAccess (line 1033) | [Fact] method AnalyzeManagementNetworkFirewallAccess_DnsBlockRule_DoesNotEclipseHttpsAccess (line 1112) | [Fact] method AnalyzeManagementNetworkFirewallAccess_CidrBlockRuleEclipsesIpAllow_Reports5GIssue (line 1187) | [Fact] method AnalyzeManagementNetworkFirewallAccess_CidrBlockRuleDoesNotCoverAllow_No5GIssue (line 1243) | [Fact] method AnalyzeManagementNetworkFirewallAccess_OppositeIpsBlockRuleEclipsesAllow_Reports5GIssue (line 1299) | [Fact] method AnalyzeManagementNetworkFirewallAccess_BareIpBlockRuleCoversMatchingBareIpAllow_Reports5GIssue (line 1357) | [Fact] method DetectShadowedRules_EmptyRules_ReturnsNoIssues (line 1416) | [Fact] method DetectShadowedRules_SingleRule_ReturnsNoIssues (line 1426) | [Fact] method DetectShadowedRules_AllowBeforeDeny_ReturnsSubvertIssue (line 1439) | [Fact] method DetectShadowedRules_DenyBeforeAllow_ReturnsShadowedIssue (line 1454) | [Fact] method DetectShadowedRules_SameAction_ReturnsNoIssues (line 1470) | [Fact] method DetectShadowedRules_DisabledRules_Ignored (line 1484) | [Fact] method DetectShadowedRules_PredefinedRules_Ignored (line 1498) | [Fact] method DetectShadowedRules_NarrowAllowBeforeBroadDeny_ReturnsExceptionPattern (line 1512) | [Fact] method DetectShadowedRules_BroadBlockToNetworkBeforeNarrowAllowToIp_ReturnsShadowedIssue (line 1529) | [Fact] method DetectShadowedRules_ExceptionToExternalBlock_SetsExternalAccessDescription (line 1576) | [Fact] method DetectShadowedRules_ExceptionToGatewayBlock_SetsEmptyDescription (line 1617) | [Fact] method DetectShadowedRules_ExceptionToNetworkBlock_SetsEmptyDescription (line 1661) | [Fact] method DetectShadowedRules_ExceptionToIoTNetworkBlock_IncludesPurposeInDescription (line 1703) | [Fact] method DetectShadowedRules_ExceptionToSecurityNetworkBlock_IncludesPurposeInDescription (line 1751) | [Fact] method DetectShadowedRules_ExceptionWithDestinationIp_LooksUpNetworkPurpose (line 1797) | [Fact] method DetectShadowedRules_ExceptionToGenericBlock_SetsFirewallExceptionDescription (line 1853) | [Fact] method DetectShadowedRules_UniFiDomainException_IsFiltered (line 1893) | [Fact] method DetectShadowedRules_AfcDomainException_IsFiltered (line 1930) | [Fact] method DetectShadowedRules_NtpDomainException_IsFiltered (line 1967) | [Fact] method DetectShadowedRules_NtpPortException_IsFiltered (line 2004) | [Fact] method DetectShadowedRules_5gDomainException_IsFiltered (line 2042) | [Fact] method DetectShadowedRules_NonMgmtServiceException_IsNotFiltered (line 2079) | [Fact] method DetectShadowedRules_FindsAllExceptionPatterns (line 2116) | [Fact] method DetectShadowedRules_NarrowDenyWithDomains_DoesNotShadowBroadAllow (line 2168) | [Fact] method DetectShadowedRules_NarrowDenyWithNetworks_DoesNotShadowBroadAllow (line 2211) | [Fact] method DetectShadowedRules_NarrowDenyWithIps_DoesNotShadowBroadAllow (line 2252) | [Fact] method DetectShadowedRules_NarrowDenyWithAppIds_DoesNotShadowBroadAllow (line 2293) | [Fact] method DetectShadowedRules_BroadDeny_DoesShadowNarrowAllow (line 2334) | [Fact] method DetectShadowedRules_BroadDeny_DoesShadowAppBasedAllow (line 2377) | [Fact] method DetectShadowedRules_BroadDeny_DoesShadowAppCategoryAllow (line 2420) | [Fact] method DetectPermissiveRules_EmptyRules_ReturnsNoIssues (line 2466) | [Fact] method DetectPermissiveRules_AnyAnyAnyAccept_ReturnsCriticalIssue (line 2476) | [Fact] method DetectPermissiveRules_AnySourceAccept_ReturnsBroadRuleIssue (line 2493) | [Fact] method DetectPermissiveRules_AnyDestAccept_ReturnsBroadRuleIssue (line 2509) | [Fact] method DetectPermissiveRules_DisabledRule_Ignored (line 2524) | [Fact] method DetectPermissiveRules_PredefinedRule_Ignored (line 2537) | [Fact] method DetectPermissiveRules_DenyRule_NoIssue (line 2553) | [Fact] method DetectPermissiveRules_SpecificSourceAndDest_NoIssue (line 2566) | [Fact] method DetectPermissiveRules_V2ApiFormat_SpecificSourceIps_NotFlaggedAtAll (line 2581) | [Fact] method DetectPermissiveRules_V2ApiFormat_AnyDestWithSpecificPorts_NotFlaggedAsBroad (line 2607) | [Fact] method DetectPermissiveRules_AnySourceWithSpecificPorts_NotFlaggedAsBroad (line 2634) | [Fact] method DetectPermissiveRules_V2ApiFormat_AnyAny_FlaggedAsPermissive (line 2660) | [Fact] method DetectPermissiveRules_V2ApiFormat_SpecificDestIps_NotFlaggedAsAnyAny (line 2685) | [Fact] method DetectPermissiveRules_V2ApiFormat_NetworkTarget_NotFlaggedAsAnyAny (line 2709) | [Fact] method DetectPermissiveRules_V2ApiFormat_ClientMacs_NotFlaggedAsAnyAny (line 2734) | [Fact] method DetectPermissiveRules_SourceMacAnyDest_NotFlaggedAsBroad (line 2758) | [Fact] method DetectPermissiveRules_AnySourceSpecificDestIps_NotFlaggedAsBroad (line 2783) | [Fact] method DetectPermissiveRules_AnySourceAnyDest_NoMacsOrIps_StillFlaggedAsBroad (line 2808) | [Fact] method DetectPermissiveRules_V2ApiFormat_SpecificProtocol_NotFlaggedAsAnyAny (line 2832) | [Fact] method DetectPermissiveRules_AnyAnyAllWithDestPorts_NotFlaggedAsPermissive (line 2857) | [Fact] method DetectPermissiveRules_AnyAnyAllWithSourcePort_NotFlaggedAsPermissive (line 2883) | [Fact] method DetectPermissiveRules_AnySourceInCustomZone_NotFlaggedAsBroad (line 2908) | [Fact] method DetectPermissiveRules_AnySourceInDefaultZoneWithFewNetworks_NotFlaggedAsBroad (line 2943) | [Fact] method DetectPermissiveRules_AnySourceInDefaultZoneWithManyNetworks_FlaggedAsBroad (line 2976) | [Fact] method DetectPermissiveRules_AnySourceNoZone_StillFlaggedAsBroad (line 3010) | [Fact] method CheckInterVlanIsolation_V2ApiFormat_HasBlockRule_NoIssue (line 3031) | [Fact] method CheckInterVlanIsolation_V2ApiFormat_ReverseDirection_StillFlagsForwardDirection (line 3060) | [Fact] method CheckInterVlanIsolation_V2ApiFormat_BothDirections_NoIssue (line 3092) | [Fact] method CheckInterVlanIsolation_AllowRuleBetweenIsolatedNetworks_FlaggedAsBroadRule (line 3132) | [Fact] method CheckInterVlanIsolation_AllowRuleBetweenGuestAndCorporate_FlaggedAsCritical (line 3167) | [Fact] method CheckInterVlanIsolation_AllowRuleBetweenCorporateNetworks_NotFlagged (line 3198) | [Fact] method CheckInterVlanIsolation_AllowRuleToExternalZone_NotFlaggedAsIsolationBypass (line 3230) | [Fact] method CheckInterVlanIsolation_AllowRuleWithAnyDestination_NoExternalZoneId_DirectionalCheck (line 3282) | [Fact] method CheckInterVlanIsolation_AllowRuleEclipsedByBlockRule_NotFlaggedAsIsolationBypass (line 3318) | [Fact] method CheckInterVlanIsolation_AllowRuleBeforeBlockRule_FlaggedAsIsolationBypass (line 3368) | [Fact] method CheckInterVlanIsolation_CorporateToManagement_NoBlockRule_FlaggedAsCritical (line 3416) | [Fact] method CheckInterVlanIsolation_HomeToManagement_NoBlockRule_FlaggedAsCritical (line 3433) | [Fact] method CheckInterVlanIsolation_HomeWithIsolation_ToManagement_NoIssue (line 3449) | [Theory] method CheckInterVlanIsolation_CorporateWithIsolation_ToManagement_NoIssue (line 3468) | [Theory] method CheckInterVlanIsolation_SecurityToManagement_NoBlockRule_FlaggedAsCritical (line 3487) | [Fact] method CheckInterVlanIsolation_GuestToCorporate_NoBlockRule_FlaggedAsCritical (line 3503) | [Fact] method CheckInterVlanIsolation_IoTToCorporate_NoBlockRule_FlaggedAsRecommended (line 3519) | [Fact] method CheckInterVlanIsolation_AllowRuleCorporateToManagement_FlaggedAsCritical (line 3535) | [Fact] method CheckInterVlanIsolation_ManagementWithSystemIsolation_StillChecksInbound (line 3565) | [Fact] method CheckInterVlanIsolation_SecurityWithSystemIsolation_StillChecksInbound (line 3586) | [Fact] method CheckInterVlanIsolation_GuestToSecurityWithIsolation_StillChecksInbound (line 3607) | [Fact] method CheckInterVlanIsolation_ManagementWithIsolation_HasBlockRule_NoIssue (line 3624) | [Fact] method CheckInterVlanIsolation_ManagementToSecurity_NoBlockRule_FlagsMissing (line 3656) | [Fact] method CheckInterVlanIsolation_ManagementToSecurity_WithSourceIsolation_NoIssue (line 3675) | [Fact] method CheckInterVlanIsolation_PrinterToSecurity_NoBlockRule_FlagsMissing (line 3693) | [Fact] method CheckInterVlanIsolation_PrinterToManagement_NoBlockRule_FlagsMissing (line 3711) | [Fact] method CheckInterVlanIsolation_DmzToSecurity_NoBlockRule_FlagsMissing (line 3729) | [Fact] method CheckInterVlanIsolation_DmzToManagement_NoBlockRule_FlagsMissing (line 3747) | [Fact] method CheckInterVlanIsolation_UnknownToSecurity_NoBlockRule_FlagsMissing (line 3765) | [Fact] method CheckInterVlanIsolation_UnknownToManagement_NoBlockRule_FlagsMissing (line 3783) | [Fact] method CheckInterVlanIsolation_DestinationIsolationDoesNotSatisfy_StillFlagsIssue (line 3801) | [Fact] method CheckInterVlanIsolation_IoTToCorporate_FlagsEvenWhenCorporateHasIsolation (line 3820) | [Fact] method CheckInterVlanIsolation_IoTToHome_FlagsEvenWhenHomeHasIsolation (line 3839) | [Fact] method CheckInterVlanIsolation_GuestToCorporate_FlagsEvenWhenCorporateHasIsolation (line 3858) | [Fact] method CheckInterVlanIsolation_GuestToHome_FlagsEvenWhenHomeHasIsolation (line 3876) | [Fact] method CheckInterVlanIsolation_IoTToCorporate_NoFlagWhenIoTHasIsolation (line 3894) | [Fact] method CheckInterVlanIsolation_GuestToHome_NoFlagWhenGuestHasIsolation (line 3912) | [Fact] method CheckInterVlanIsolation_CorporateToHome_NoBlockRule_FlaggedAsRecommended (line 3930) | [Fact] method CheckInterVlanIsolation_HomeToCorporate_NoBlockRule_FlaggedAsRecommended (line 3949) | [Fact] method CheckInterVlanIsolation_CorporateToHome_WithBlockRule_NoIssue (line 3968) | [Fact] method CheckInterVlanIsolation_CorporateToHome_Bidirectional_BlockOneDirection_StillFlagsOther (line 3997) | [Fact] method CheckInterVlanIsolation_CorporateWithIsolation_ToHome_NoIssue (line 4030) | [Theory] method CheckInterVlanIsolation_HomeWithIsolation_ToCorporate_NoIssue (line 4049) | [Theory] method CheckInterVlanIsolation_AllowRuleCorporateToHome_FlaggedAsIsolationBypass (line 4068) | [Fact] method CheckInterVlanIsolation_AllowRuleHomeToCorporate_FlaggedAsIsolationBypass (line 4100) | [Fact] method CheckInterVlanIsolation_IoTToServer_NoBlockRule_FlaggedAsMissing (line 4136) | [Fact] method CheckInterVlanIsolation_GuestToServer_NoBlockRule_FlaggedAsCritical (line 4153) | [Fact] method CheckInterVlanIsolation_CorporateToServer_NoBlockRule_NotFlagged (line 4171) | [Fact] method CheckInterVlanIsolation_HomeToServer_NoBlockRule_NotFlagged (line 4188) | [Fact] method CheckInterVlanIsolation_ServerToManagement_NoBlockRule_FlaggedAsCritical (line 4205) | [Fact] method CheckInterVlanIsolation_ServerToSecurity_NoBlockRule_FlaggedAsMissing (line 4222) | [Fact] method CheckInterVlanIsolation_IoTToServer_WithBlockRule_NoIssue (line 4239) | [Fact] method CheckInterVlanIsolation_IoTToServer_AllowRule_FlaggedAsBypassed (line 4269) | [Fact] method CheckInterVlanIsolation_IoTToServer_DnsOnlyUdp_NotFlaggedAsBypassed (line 4300) | [Fact] method CheckInterVlanIsolation_IoTToServer_DnsTcpUdp_NotFlaggedAsBypassed (line 4331) | [Fact] method CheckInterVlanIsolation_IoTToServer_DnsWithOtherPorts_StillFlagged (line 4362) | [Fact] method CheckInterVlanIsolation_IoTToServer_AllPortsTcp_StillFlagged (line 4393) | [Fact] method CheckInterVlanIsolation_IoTToServer_NoPortSpecified_StillFlagged (line 4424) | [Fact] method CheckInterVlanIsolation_MediaToCorporate_NoBlockRule_FlaggedAsMissing (line 4458) | [Fact] method CheckInterVlanIsolation_CorporateToMedia_NoBlockRule_NotFlagged (line 4475) | [Fact] method CheckInterVlanIsolation_GuestToMedia_NoBlockRule_NotFlagged (line 4494) | [Fact] method CheckInterVlanIsolation_IoTAndMedia_NoPeerIsolation (line 4512) | [Fact] method CheckInterVlanIsolation_MediaToServer_NoBlockRule_FlaggedAsMissing (line 4532) | [Fact] method CheckInterVlanIsolation_MediaWithIsolation_ToCorporate_NoIssue (line 4549) | [Fact] method CheckInterVlanIsolation_AllowRuleMediaToCorporate_FlaggedAsIsolationBypassed (line 4566) | [Fact] method CheckInterVlanIsolation_BlockRuleWithConnectionStateAll_NoIssue (line 4599) | [Fact] method CheckInterVlanIsolation_BlockRuleWithOnlyInvalidState_StillFlagsIssue (line 4630) | [Fact] method CheckInterVlanIsolation_BlockRuleWithNewState_NoIssue (line 4662) | [Fact] method CheckInterVlanIsolation_BlockRuleWithNoConnectionStateType_NoIssue (line 4694) | [Fact] method CheckInterVlanIsolation_BlockRuleWithNewOnlyState_NoIssue (line 4725) | [Fact] method CheckInterVlanIsolation_AllowRuleBeforeBlockRule_FlagsIssue (line 4757) | [Fact] method CheckInterVlanIsolation_AllowRuleWithNoBlockRule_BypassedNotMissing (line 4796) | [Fact] method CheckInterVlanIsolation_BlockRuleBeforeAllowRule_NoIssue (line 4840) | [Fact] method CheckInterVlanIsolation_SpecificBlockRuleBeforeGenericAllowRule_NoIssue (line 4881) | [Fact] method DetectOrphanedRules_EmptyRules_ReturnsNoIssues (line 4928) | [Fact] method DetectOrphanedRules_ValidNetworkReference_NoIssue (line 4939) | [Fact] method DetectOrphanedRules_InvalidSourceNetwork_ReturnsOrphanedIssue (line 4954) | [Fact] method DetectOrphanedRules_InvalidDestNetwork_ReturnsOrphanedIssue (line 4972) | [Fact] method DetectOrphanedRules_DisabledRule_Ignored (line 4988) | [Fact] method DetectOrphanedRules_AnySourceType_NotOrphaned (line 5003) | [Fact] method CheckInterVlanIsolation_EmptyNetworks_ReturnsNoIssues (line 5022) | [Fact] method CheckInterVlanIsolation_IsolatedNetworkEnabled_NoIssue (line 5033) | [Fact] method CheckInterVlanIsolation_NonIsolatedIoT_MissingRule_ReturnsIssue (line 5049) | [Fact] method CheckInterVlanIsolation_NonIsolatedIoT_HasDropRule_NoIssue (line 5067) | [Fact] method CheckInterVlanIsolation_Rfc1918BlockRule_NoIssue (line 5085) | [Fact] method CheckInterVlanIsolation_LegacyEstablishedRelatedAboveRfc1918Block_NoIssue (line 5123) | [Fact] method CheckInterVlanIsolation_NonIsolatedGuest_MissingRule_ReturnsIssue (line 5183) | [Fact] method CheckInterVlanIsolation_DisabledDropRule_StillMissing (line 5199) | [Fact] method CheckInternetDisabledBroadAllow_InternetEnabled_NoIssue (line 5221) | [Fact] method CheckInternetDisabledBroadAllow_InternetDisabled_BroadAllowRule_ReturnsIssue (line 5249) | [Fact] method CheckInternetDisabledBroadAllow_HttpPort_ReturnsIssue (line 5282) | [Fact] method CheckInternetDisabledBroadAllow_HttpsPort_ReturnsIssue (line 5314) | [Fact] method CheckInternetDisabledBroadAllow_Port80_Udp_NoIssue (line 5346) | [Fact] method CheckInternetDisabledBroadAllow_Port80_Tcp_ReturnsIssue (line 5376) | [Fact] method CheckInternetDisabledBroadAllow_Port80_TcpUdp_ReturnsIssue (line 5406) | [Fact] method CheckInternetDisabledBroadAllow_Port443_Udp_ReturnsIssue (line 5435) | [Fact] method CheckInternetDisabledBroadAllow_Port443_Tcp_ReturnsIssue (line 5465) | [Fact] method CheckInternetDisabledBroadAllow_ExternalZone_AllProtocols_ReturnsIssue (line 5495) | [Fact] method CheckInternetDisabledBroadAllow_ExternalZone_SpecificProtocol_NoIssue (line 5528) | [Fact] method CheckInternetDisabledBroadAllow_DisabledRule_NoIssue (line 5559) | [Fact] method CheckInternetDisabledBroadAllow_NarrowRule_NoIssue (line 5587) | [Fact] method CheckInternetDisabledBroadAllow_PortRange_ReturnsIssue (line 5617) | [Fact] method CheckInternetDisabledBroadAllow_HttpAppId_ReturnsIssue (line 5648) | [Fact] method CheckInternetDisabledBroadAllow_WebServicesCategory_ReturnsIssue (line 5679) | [Fact] method CheckInternetDisabledBroadAllow_PredefinedRule_NoIssue (line 5710) | [Fact] method CheckInternetDisabledBroadAllow_SpecificDomains_NoIssue (line 5738) | [Fact] method CheckInternetDisabledBroadAllow_NtpPort_NoIssue (line 5767) | [Fact] method CheckInternetDisabledBroadAllow_MatchOppositeNetworks_ExcludesNetwork (line 5798) | [Fact] method CheckInternetDisabledBroadAllow_MatchOppositeNetworks_IncludesOtherNetworks (line 5834) | [Fact] method CheckInternetDisabledBroadAllow_PortGroupWithHttp_ReturnsIssue (line 5865) | [Fact] method CheckInternetDisabledBroadAllow_PortGroupNotResolved_StillDetectsExternalZone (line 5917) | [Fact] method CheckInternetDisabledBroadAllow_SourceCidrCoversNetwork_ReturnsIssue (line 5963) | [Fact] method CheckInternetDisabledBroadAllow_SourceCidrDoesNotCoverNetwork_NoIssue (line 6003) | [Fact] method CheckInternetDisabledBroadAllow_InternetBlockedViaFirewall_BroadAllowRule_ReturnsIssue (line 6041) | [Fact] method CheckInternetDisabledBroadAllow_WebBlockRule_DoesNotEclipsePortAllow_ReturnsIssue (line 6100) | [Fact] method CheckInternetDisabledBroadAllow_PortSpecificBlock_DoesNotEclipse_ReturnsIssue (line 6167) | [Fact] method CheckInternetDisabledBroadAllow_IpSpecificBlock_DoesNotEclipse_ReturnsIssue (line 6234) | [Fact] method CheckInternetDisabledBroadAllow_FullInternetBlock_Eclipses_NoIssue (line 6301) | [Fact] method CheckInternetDisabledBroadAllow_TcpBlockDoesNotEclipseTcpUdpAllow_ReturnsIssue (line 6366) | [Fact] method CheckInternetDisabledBroadAllow_TcpUdpBlockEclipsesTcpAllow_NoIssue (line 6432) | [Fact] method CheckInternetDisabledBroadAllow_AllProtocolBlockEclipsesTcpAllow_NoIssue (line 6496) | [Fact] method CheckInternetDisabledBroadAllow_BlockInternalZone_DoesNotEclipseExternalAllow_ReturnsIssue (line 6560) | [Fact] method CheckInternetDisabledBroadAllow_BlockNoZone_Eclipses_NoIssue (line 6626) | [Fact] method CheckInternetDisabledBroadAllow_MatchOppositeProtocol_TcpExcluded_DoesNotEclipseTcpAllow_ReturnsIssue (line 6690) | [Fact] method AnalyzeFirewallRules_EmptyInput_ReturnsNoIssues (line 6761) | [Fact] method AnalyzeFirewallRules_CombinesAllChecks (line 6772) | [Fact] method AnalyzeManagementNetworkFirewallAccess_MatchOppositeNetworks_ExcludesSpecifiedNetwork (line 6800) | [Fact] method AnalyzeManagementNetworkFirewallAccess_MatchOppositeNetworks_ExcludesMgmtNetwork_NoMatch (line 6861) | [Fact] method AnalyzeManagementNetworkFirewallAccess_NormalNetworkMatch_OnlyAppliesToSpecified (line 6898) | [Fact] method CheckInterVlanIsolation_MatchOppositeSource_BlocksAllExceptSpecified (line 6934) | [Fact] method CheckInterVlanIsolation_MatchOppositeDestination_BlocksToAllExceptSpecified (line 6974) | [Fact] method CheckInterVlanIsolation_BothMatchOpposite_ComplexScenario (line 7014) | [Fact] method CheckInterVlanIsolation_MatchOpposite_ExcludesBothDirections_FlagsMissing (line 7057) | [Fact] method AnalyzeManagementNetworkFirewallAccess_AnySourceMatchingTarget_AppliesToAllNetworks (line 7096) | [Fact] method AnalyzeManagementNetworkFirewallAccess_IpSourceMatchingTarget_DoesNotMatchByNetworkId (line 7147) | [Fact] method DetectNetworkIsolationExceptions_NoIsolatedNetworks_ReturnsNoIssues (line 7183) | [Fact] method DetectNetworkIsolationExceptions_NoPredefinedIsolatedNetworksRule_ReturnsNoIssues (line 7205) | [Fact] method DetectNetworkIsolationExceptions_UserAllowRuleFromIsolatedNetwork_ReturnsIssue (line 7225) | [Fact] method DetectNetworkIsolationExceptions_UserAllowRuleToIsolatedNetwork_ReturnsNoIssue (line 7251) | [Fact] method DetectNetworkIsolationExceptions_UserAllowRuleBetweenIsolatedNetworks_ReturnsIssue (line 7276) | [Fact] method DetectNetworkIsolationExceptions_PredefinedAllowRule_IsIgnored (line 7304) | [Fact] method DetectNetworkIsolationExceptions_DisabledUserAllowRule_IsIgnored (line 7327) | [Fact] method DetectNetworkIsolationExceptions_ManagementNetwork_HasCorrectPurposeSuffix (line 7350) | [Fact] method DetectNetworkIsolationExceptions_ManagementNtpRule_IsExcluded (line 7371) | [Fact] method DetectNetworkIsolationExceptions_ManagementUniFiRule_IsExcluded (line 7392) | [Fact] method DetectNetworkIsolationExceptions_MultipleAllowRules_ReturnsMultipleIssues (line 7413) | [Fact] method DetectNetworkIsolationExceptions_BlockRule_IsIgnored (line 7436) | [Fact] method DetectNetworkIsolationExceptions_SourceCidrCoversIsolatedNetwork_ReturnsIssue (line 7456) | [Fact] method DetectNetworkIsolationExceptions_SourceCidrDoesNotCoverIsolatedNetwork_ReturnsNoIssue (line 7480) | [Fact] method DetectNetworkIsolationExceptions_ExternalDestinationRule_ReturnsNoIssue (line 7502) | [Fact] method DetectNetworkIsolationExceptions_InternalDestinationRule_ReturnsIssue (line 7544) | [Fact] method CreateFirewallRuleWithSourceCidr (line 7598) | private static FirewallRule CreateFirewallRuleWithSourceCidr( method CreateFirewallRuleWithPort (line 7616) | private static FirewallRule CreateFirewallRuleWithPort( method CreatePredefinedIsolatedNetworksRule (line 7638) | private static FirewallRule CreatePredefinedIsolatedNetworksRule(strin... method CreateFirewallRuleWithDestination (line 7651) | private static FirewallRule CreateFirewallRuleWithDestination( method AppliesToSourceNetwork_MatchingZones_NetworkSource_ReturnsTrue (line 7678) | [Fact] method AppliesToSourceNetwork_MismatchedZones_NetworkSource_ReturnsFalse (line 7699) | [Fact] method AppliesToSourceNetwork_MatchingZones_AnySource_ReturnsTrue (line 7719) | [Fact] method AppliesToSourceNetwork_MismatchedZones_AnySource_ReturnsFalse (line 7738) | [Fact] method AppliesToSourceNetwork_MatchingZones_IpCidrSource_ReturnsTrue (line 7757) | [Fact] method AppliesToSourceNetwork_MismatchedZones_IpCidrSource_ReturnsFalse (line 7777) | [Fact] method AppliesToSourceNetwork_RuleHasNoZone_StillMatchesBySource (line 7797) | [Fact] method AppliesToSourceNetwork_NetworkHasNoZone_StillMatchesBySource (line 7818) | [Fact] method CheckInterVlanIsolation_BlockRuleZonesMatchNetworks_NoIssue (line 7843) | [Fact] method CheckInterVlanIsolation_BlockRuleSourceZoneMismatch_ReturnsIssue (line 7878) | [Fact] method CheckInterVlanIsolation_CorporateAndHome_DifferentZones_PredefinedBlockAll_NoIssue (line 7913) | [Fact] method CheckInterVlanIsolation_IoTAndCorporate_DifferentZones_PredefinedBlockAll_NoIssue (line 7960) | [Fact] method CheckInterVlanIsolation_GuestAndCorporate_DifferentZones_PredefinedBlockAll_NoIssue (line 7994) | [Fact] method CheckInterVlanIsolation_HomeAndManagement_DifferentZones_PredefinedBlockAll_NoIssue (line 8028) | [Fact] method CheckInterVlanIsolation_IoTAndSecurity_DifferentZones_PredefinedBlockAll_NoIssue (line 8062) | [Fact] method CheckInterVlanIsolation_LegacyEstRelAllowPlusRfc1918Block_FindsBlockRule (line 8100) | [Fact] method CheckInterVlanIsolation_LegacyDropInvalidPlusRfc1918Block_FindsBlockRule (line 8157) | [Fact] method CheckInterVlanIsolation_LegacyBlockAllToGroup_AnySourceMatchesAllNetworks (line 8212) | [Fact] method DetectPermissiveRules_LegacyEstRelAllow_NotFlaggedAsPermissive (line 8250) | [Fact] method CheckInterVlanIsolation_FullLegacyRuleChain_OnlyLegitimateIssues (line 8280) | [Fact] method Evaluator_ForNewConnections_SkipsDropInvalidBlockRule (line 8377) | [Fact] method Evaluator_ForNewConnections_SkipsEstRelAllowRule (line 8417) | [Fact] method CheckInterVlanIsolation_MultiNetworkLegacyRfc1918Posture_NoSpuriousIssues (line 8457) | [Fact] method DetectPermissiveRules_MultiNetworkLegacyPosture_NoFalsePositives (line 8591) | [Fact] method CreateNetwork (line 8654) | private static NetworkInfo CreateNetwork( method CreateFirewallRule (line 8678) | private static FirewallRule CreateFirewallRule( FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/FirewallRuleEvaluatorTests.cs class FirewallRuleEvaluatorTests (line 8) | public class FirewallRuleEvaluatorTests method Evaluate_NoMatchingRules_ReturnsNullEffectiveRule (line 12) | [Fact] method Evaluate_SingleBlockRule_ReturnsBlocked (line 27) | [Fact] method Evaluate_SingleAllowRule_ReturnsAllowed (line 43) | [Fact] method Evaluate_AllowRuleBeforeBlockRule_ReturnsAllowedWithEclipsedBlock (line 59) | [Fact] method Evaluate_BlockRuleBeforeAllowRule_ReturnsBlockedWithEclipsedAllow (line 77) | [Fact] method Evaluate_RulesNotInIndexOrder_SortsByIndex (line 95) | [Fact] method Evaluate_DisabledRulesIgnored (line 111) | [Fact] method Evaluate_BlockRuleWithOnlyInvalidState_NotConsideredBlocking (line 130) | [Fact] method Evaluate_MultipleAllowRules_ReturnsFirstByIndex (line 153) | [Fact] method IsTrafficBlocked_EffectiveBlockRule_ReturnsTrue (line 172) | [Fact] method IsTrafficBlocked_AllowRuleEclipsesBlock_ReturnsFalse (line 185) | [Fact] method IsTrafficBlocked_NoMatchingRules_ReturnsFalse (line 199) | [Fact] method IsTrafficAllowed_EffectiveAllowRule_ReturnsTrue (line 213) | [Fact] method IsTrafficAllowed_BlockRuleEclipsesAllow_ReturnsFalse (line 226) | [Fact] method IsTrafficAllowed_NoMatchingRules_ReturnsFalse (line 240) | [Fact] method GetEffectiveBlockRule_EffectiveBlockExists_ReturnsRule (line 254) | [Fact] method GetEffectiveBlockRule_AllowRuleEclipsesBlock_ReturnsNull (line 268) | [Fact] method GetEffectiveAllowRule_EffectiveAllowExists_ReturnsRule (line 286) | [Fact] method GetEffectiveAllowRule_BlockRuleEclipsesAllow_ReturnsNull (line 300) | [Fact] method Evaluate_RejectAction_TreatedAsBlock (line 318) | [Fact] method Evaluate_DenyAction_TreatedAsBlock (line 331) | [Fact] method Evaluate_BlockWithConnectionStateAll_IsBlocking (line 344) | [Fact] method Evaluate_BlockWithNewInCustomStates_IsBlocking (line 362) | [Fact] method Evaluate_PredicateFiltersCorrectly (line 381) | [Fact] method Evaluate_ForNewConnections_SkipsRespondOnlyAllowRules (line 401) | [Fact] method Evaluate_ForNewConnections_AllowsRegularAllowRules (line 430) | [Fact] method Evaluate_ForNewConnections_NoMatchingRulesAfterFiltering (line 451) | [Fact] method Evaluate_ForNewConnections_BlockRulesStillMatch (line 472) | [Fact] method Evaluate_ForNewConnections_MultipleRespondOnlySkipped (line 487) | [Fact] method Evaluate_ForNewConnections_EclipsedBlockRuleDetected (line 514) | [Fact] method CreateRule (line 540) | private static FirewallRule CreateRule( FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/FirewallRuleOverlapDetectorTests.cs class FirewallRuleOverlapDetectorTests (line 9) | public class FirewallRuleOverlapDetectorTests method ProtocolsOverlap_SameProtocol_ReturnsTrue (line 13) | [Theory] method ProtocolsOverlap_DifferentProtocols_ReturnsFalse (line 26) | [Theory] method ProtocolsOverlap_AllMatchesEverything_ReturnsTrue (line 38) | [Theory] method ProtocolsOverlap_TcpUdpOverlapsWithTcpOrUdp_ReturnsTrue (line 52) | [Theory] method ProtocolsOverlap_TcpUdpDoesNotOverlapWithIcmp_ReturnsFalse (line 66) | [Fact] method ProtocolsOverlap_NullProtocolTreatedAsAll_ReturnsTrue (line 75) | [Fact] method ProtocolsOverlap_OppositeProtocol_SameProtocol_NoOverlap (line 84) | [Fact] method ProtocolsOverlap_OppositeProtocol_DifferentProtocol_Overlaps (line 94) | [Fact] method ProtocolsOverlap_OppositeProtocol_IcmpVsTcp_Overlaps (line 104) | [Fact] method ProtocolsOverlap_BothOpposite_AlwaysOverlaps (line 114) | [Fact] method ProtocolsOverlap_OppositeAll_NoOverlap (line 124) | [Fact] method ProtocolsOverlap_OppositeVsTcpUdp_Overlaps (line 134) | [Fact] method ProtocolsOverlap_OppositeTcpUdpVsTcp_NoOverlap (line 144) | [Fact] method SourcesOverlap_BothAny_ReturnsTrue (line 158) | [Fact] method SourcesOverlap_OneIsAny_ReturnsTrue (line 167) | [Fact] method SourcesOverlap_NullMatchingTargetTreatedAsAny_ReturnsTrue (line 176) | [Fact] method SourcesOverlap_NetworkVsIp_ReturnsTrue (line 185) | [Fact] method SourcesOverlap_ClientVsNetwork_ReturnsFalse (line 196) | [Fact] method SourcesOverlap_ClientVsIp_ReturnsFalse (line 206) | [Fact] method SourcesOverlap_SameNetworkIds_ReturnsTrue (line 216) | [Fact] method SourcesOverlap_DifferentNetworkIds_ReturnsFalse (line 225) | [Fact] method SourcesOverlap_SameIps_ReturnsTrue (line 234) | [Fact] method SourcesOverlap_DifferentIps_ReturnsFalse (line 243) | [Fact] method DestinationsOverlap_BothAny_ReturnsTrue (line 256) | [Fact] method DestinationsOverlap_OneIsAny_ReturnsTrue (line 265) | [Fact] method DestinationsOverlap_DifferentTargetTypes_ReturnsFalse (line 274) | [Fact] method DestinationsOverlap_WebVsIp_ReturnsFalse (line 283) | [Fact] method DestinationsOverlap_SameNetworkIds_ReturnsTrue (line 292) | [Fact] method DestinationsOverlap_DifferentNetworkIds_ReturnsFalse (line 301) | [Fact] method DestinationsOverlap_SameIps_ReturnsTrue (line 310) | [Fact] method DestinationsOverlap_SameWebDomains_ReturnsTrue (line 319) | [Fact] method DestinationsOverlap_DifferentWebDomains_ReturnsFalse (line 328) | [Fact] method DestinationsOverlap_NetworkVsIp_ReturnsTrue (line 337) | [Fact] method DestinationsOverlap_IpVsNetwork_ReturnsTrue (line 348) | [Fact] method DomainsOverlap_ExactMatch_ReturnsTrue (line 362) | [Fact] method DomainsOverlap_CaseInsensitive_ReturnsTrue (line 371) | [Fact] method DomainsOverlap_SubdomainMatch_ReturnsTrue (line 380) | [Fact] method DomainsOverlap_ParentDomainMatch_ReturnsTrue (line 389) | [Fact] method DomainsOverlap_DifferentDomains_ReturnsFalse (line 398) | [Fact] method DomainsOverlap_SimilarButNotSubdomain_ReturnsFalse (line 407) | [Fact] method DomainsOverlap_MultipleDomainsOneMatch_ReturnsTrue (line 417) | [Fact] method PortsOverlap_BothNull_ReturnsTrue (line 430) | [Fact] method PortsOverlap_OneNull_ReturnsTrue (line 439) | [Fact] method PortsOverlap_SamePort_ReturnsTrue (line 448) | [Fact] method PortsOverlap_DifferentPorts_ReturnsFalse (line 457) | [Fact] method PortsOverlap_CommaSeparatedWithOverlap_ReturnsTrue (line 466) | [Fact] method PortsOverlap_CommaSeparatedNoOverlap_ReturnsFalse (line 475) | [Fact] method PortsOverlap_RangeOverlap_ReturnsTrue (line 484) | [Fact] method PortsOverlap_RangeNoOverlap_ReturnsFalse (line 493) | [Fact] method PortsOverlap_RangeToRangeOverlap_ReturnsTrue (line 502) | [Fact] method PortsOverlap_MixedFormatOverlap_ReturnsTrue (line 511) | [Fact] method PortsOverlap_NonTcpUdpProtocol_IgnoresPorts (line 520) | [Fact] method PortsOverlap_AllProtocolWithSpecificPorts_ComparesPorts (line 530) | [Fact] method PortsOverlap_AllProtocolWithSpecificPorts_SamePort_ReturnsTrue (line 540) | [Fact] method PortsOverlap_AllProtocolWithNoPorts_ReturnsTrue (line 549) | [Fact] method PortsOverlap_AllProtocolSnmpVsApiPorts_ReturnsFalse (line 559) | [Fact] method PortsOverlap_BothAllProtocolDifferentPorts_ReturnsFalse (line 569) | [Fact] method PortsOverlap_BothAllProtocolNoPorts_ReturnsTrue (line 579) | [Fact] method PortsOverlap_AllProtocolOnRightSide_ComparesPorts (line 588) | [Fact] method PortsOverlap_AllProtocolOnRightSideNoPorts_ReturnsTrue (line 598) | [Fact] method PortsOverlap_BothAllProtocolOverlappingPorts_ReturnsTrue (line 607) | [Fact] method PortsOverlap_AllProtocolUnresolvedPortGroup_ReturnsTrue (line 616) | [Fact] method PortsOverlap_TcpUnresolvedPortGroup_ReturnsTrue (line 627) | [Fact] method SourcePortsOverlap_BothNull_ReturnsTrue (line 641) | [Fact] method SourcePortsOverlap_OneNull_ReturnsTrue (line 650) | [Fact] method SourcePortsOverlap_SamePorts_ReturnsTrue (line 659) | [Fact] method SourcePortsOverlap_OverlappingPorts_ReturnsTrue (line 668) | [Fact] method SourcePortsOverlap_DisjointPorts_ReturnsFalse (line 677) | [Fact] method SourcePortsOverlap_OppositeSourcePorts_DisjointBecomeOverlapping (line 686) | [Fact] method SourcePortsOverlap_OppositeSourcePorts_DifferentPorts_Overlap (line 697) | [Fact] method SourcePortsOverlap_BothOpposite_AlwaysOverlap (line 708) | [Fact] method SourcePortsOverlap_IcmpProtocol_IgnoresSourcePorts (line 718) | [Fact] method SourcePortsOverlap_AllProtocol_WithSpecificSourcePorts_ComparesNormally (line 728) | [Fact] method ParsePortString_SinglePort_ReturnsCorrectSet (line 742) | [Fact] method ParsePortString_CommaSeparated_ReturnsCorrectSet (line 750) | [Fact] method ParsePortString_Range_ReturnsCorrectSet (line 758) | [Fact] method ParsePortString_MixedFormat_ReturnsCorrectSet (line 766) | [Fact] method ParsePortString_WithSpaces_ReturnsCorrectSet (line 774) | [Fact] method IcmpTypesOverlap_NonIcmpProtocol_ReturnsTrue (line 786) | [Fact] method IcmpTypesOverlap_BothAny_ReturnsTrue (line 795) | [Fact] method IcmpTypesOverlap_OneAny_ReturnsTrue (line 804) | [Fact] method IcmpTypesOverlap_SameType_ReturnsTrue (line 813) | [Fact] method IcmpTypesOverlap_DifferentTypes_ReturnsFalse (line 822) | [Fact] method IcmpTypesOverlap_NullTreatedAsAny_ReturnsTrue (line 831) | [Fact] method IcmpTypesOverlap_OneRuleAllProtocol_ReturnsTrue (line 840) | [Fact] method IpRangesOverlap_ExactMatch_ReturnsTrue (line 853) | [Fact] method IpRangesOverlap_DifferentIps_ReturnsFalse (line 862) | [Fact] method IpRangesOverlap_IpInCidr_ReturnsTrue (line 871) | [Fact] method IpRangesOverlap_IpOutsideCidr_ReturnsFalse (line 880) | [Fact] method IpRangesOverlap_OverlappingCidrs_ReturnsTrue (line 889) | [Fact] method IpRangesOverlap_NonOverlappingCidrs_ReturnsFalse (line 898) | [Fact] method IpRangesOverlap_MultipleIpsOneMatch_ReturnsTrue (line 907) | [Fact] method IpMatchesCidr_IpInCidr_ReturnsTrue (line 920) | [Fact] method IpMatchesCidr_IpOutsideCidr_ReturnsFalse (line 926) | [Fact] method IpMatchesCidr_IpAtNetworkBoundary_ReturnsTrue (line 932) | [Fact] method IpMatchesCidr_Slash16_ReturnsTrue (line 939) | [Fact] method IpMatchesCidr_Slash8_ReturnsTrue (line 945) | [Fact] method IpMatchesCidr_CidrInCidr_ReturnsTrue (line 951) | [Fact] method IpMatchesCidr_NotCidr_ReturnsFalse (line 958) | [Fact] method IpOverlapsWithNetworks_IpInNetworkCidr_ReturnsTrue (line 969) | [Fact] method IpOverlapsWithNetworks_IpNotInNetworkCidr_ReturnsFalse (line 982) | [Fact] method IpOverlapsWithNetworks_NoNetworkConfigs_ReturnsTrueConservatively (line 996) | [Fact] method IpOverlapsWithNetworks_NetworkIdNotFound_ReturnsTrueConservatively (line 1006) | [Fact] method IpOverlapsWithNetworks_MultipleNetworks_IpInOneOfThem_ReturnsTrue (line 1020) | [Fact] method IpOverlapsWithNetworks_MultipleNetworks_IpNotInAny_ReturnsFalse (line 1034) | [Fact] method IpOverlapsWithNetworks_EmptyIps_ReturnsFalse (line 1048) | [Fact] method IpOverlapsWithNetworks_EmptyNetworkIds_ReturnsFalse (line 1061) | [Fact] method SourcesOverlap_NetworkVsIp_WithNetworkConfigs_IpInCidr_ReturnsTrue (line 1078) | [Fact] method SourcesOverlap_NetworkVsIp_WithNetworkConfigs_IpNotInCidr_ReturnsFalse (line 1095) | [Fact] method SourcesOverlap_IpVsNetwork_WithNetworkConfigs_IpNotInCidr_ReturnsFalse (line 1113) | [Fact] method DestinationsOverlap_NetworkVsIp_WithNetworkConfigs_IpInCidr_ReturnsTrue (line 1135) | [Fact] method DestinationsOverlap_NetworkVsIp_WithNetworkConfigs_IpNotInCidr_ReturnsFalse (line 1152) | [Fact] method RulesOverlap_AllowNasDoH_VsBlockMgmtInternet_WithNetworkConfigs_ReturnsFalse (line 1173) | [Fact] method RulesOverlap_AllowDeviceOnMgmt_VsBlockMgmtInternet_WithNetworkConfigs_ReturnsTrue (line 1206) | [Fact] method RulesOverlap_IdenticalRules_ReturnsTrue (line 1240) | [Fact] method RulesOverlap_DifferentProtocols_ReturnsFalse (line 1261) | [Fact] method RulesOverlap_DifferentDestTypes_ReturnsFalse (line 1270) | [Fact] method RulesOverlap_WebVsIcmp_ReturnsFalse (line 1285) | [Fact] method RulesOverlap_BroadAllowVsSpecificDeny_ReturnsTrue (line 1302) | [Fact] method RulesOverlap_DifferentPorts_ReturnsFalse (line 1321) | [Fact] method RulesOverlap_DifferentSourceNetworks_ReturnsFalse (line 1338) | [Fact] method RulesOverlap_BlockToNetworkVsAllowToIp_ReturnsTrue (line 1355) | [Fact] method ZonesOverlap_BothNoZones_ReturnsTrue (line 1379) | [Fact] method ZonesOverlap_SameSourceZone_ReturnsTrue (line 1388) | [Fact] method ZonesOverlap_DifferentSourceZones_ReturnsFalse (line 1397) | [Fact] method ZonesOverlap_SameDestZone_ReturnsTrue (line 1406) | [Fact] method ZonesOverlap_DifferentDestZones_ReturnsFalse (line 1415) | [Fact] method ZonesOverlap_OneHasZoneOneDoesNot_ReturnsTrue (line 1424) | [Fact] method RulesOverlap_DifferentZones_ReturnsFalse (line 1433) | [Fact] method SourcesOverlap_BothNormalWithIntersection_ReturnsTrue (line 1455) | [Fact] method SourcesOverlap_BothInverted_AlwaysReturnsTrue (line 1468) | [Fact] method SourcesOverlap_OneInvertedAllNormalIpsInException_ReturnsFalse (line 1485) | [Fact] method SourcesOverlap_OneInvertedSomeNormalIpsNotInException_ReturnsTrue (line 1503) | [Fact] method SourcesOverlap_NetworksOneInvertedNoOverlap_ReturnsFalse (line 1521) | [Fact] method DestinationsOverlap_BothInverted_AlwaysReturnsTrue (line 1543) | [Fact] method DestinationsOverlap_OneInvertedNoOverlap_ReturnsFalse (line 1558) | [Fact] method DestinationsOverlap_NetworksInvertedWithOverlap_ReturnsTrue (line 1576) | [Fact] method PortsOverlap_BothNormalWithIntersection_ReturnsTrue (line 1597) | [Fact] method PortsOverlap_BothInverted_AlwaysReturnsTrue (line 1606) | [Fact] method PortsOverlap_OneInvertedAllPortsInException_ReturnsFalse (line 1615) | [Fact] method PortsOverlap_OneInvertedSomePortsNotInException_ReturnsTrue (line 1627) | [Fact] method RulesOverlap_AllowWithIps_DenyWithOppositeIpsContainingAllowIps_NoOverlap (line 1643) | [Fact] method RulesOverlap_DifferentDestinationZones_NoOverlap (line 1671) | [Fact] method RulesOverlap_AllowApiPorts_DenySnmpWithInverseIps_NoOverlap (line 1692) | [Fact] method RulesOverlap_DisjointSourcePorts_ReturnsFalse (line 1721) | [Fact] method RulesOverlap_OverlappingSourcePorts_ReturnsTrue (line 1737) | [Fact] method RulesOverlap_OppositeProtocol_SameProtocol_ReturnsFalse (line 1753) | [Fact] method RulesOverlap_OppositeProtocol_DifferentProtocol_ReturnsTrue (line 1768) | [Fact] method RulesOverlap_AllProtocolWithSpecificPorts_DisjointFromOtherPorts_ReturnsFalse (line 1782) | [Fact] method IpMatchesCidr_IPv6Address_InCidr_ReturnsTrue (line 1801) | [Fact] method IpMatchesCidr_IPv6Address_OutsideCidr_ReturnsFalse (line 1809) | [Fact] method IpMatchesCidr_IPv6_Slash64_BoundaryCheck (line 1817) | [Fact] method IpMatchesCidr_IPv6_Slash128_ExactMatch (line 1827) | [Fact] method IpMatchesCidr_MixedAddressFamilies_ReturnsFalse (line 1837) | [Fact] method ParsePortString_InvertedRange_ReturnsEmptySet (line 1849) | [Fact] method ParsePortString_MixedWithInvertedRange_OnlyValidPartsIncluded (line 1861) | [Fact] method ParsePortString_InvalidPortNumber_Ignored (line 1871) | [Fact] method ParsePortString_EmptyString_ReturnsEmptySet (line 1879) | [Fact] method ParsePortString_PortAbove65535_StopsAtLimit (line 1887) | [Fact] method DomainsOverlap_PublicSuffix_MatchesSubdomain (line 1903) | [Fact] method DomainsOverlap_DifferentTld_NoMatch (line 1916) | [Fact] method DomainsOverlap_PartialSuffixNoMatch (line 1926) | [Fact] method DomainsOverlap_EmptyList_ReturnsFalse (line 1937) | [Fact] method DomainsOverlap_BothEmpty_ReturnsFalse (line 1946) | [Fact] method IsNarrowerScope_ClientVsAny_ReturnsTrue (line 1959) | [Fact] method IsNarrowerScope_IpVsAny_ReturnsTrue (line 1976) | [Fact] method IsNarrowerScope_NetworkVsAny_ReturnsTrue (line 1991) | [Fact] method IsNarrowerScope_BothAny_ReturnsFalse (line 2008) | [Fact] method IsNarrowerScope_BroadIpVsAny_ReturnsFalse (line 2022) | [Fact] method IsNarrowerScope_FewerNetworksVsMoreNetworks_ReturnsTrue (line 2039) | [Fact] method IsNarrowerScope_ClientSourceToFewNetworks_VsAnySourceToManyNetworks_ReturnsTrue (line 2057) | [Fact] method IsNarrowerScope_SpecificIpsToVpnCidr_VsAnyToSameCidr_ReturnsTrue (line 2076) | [Fact] method AppsOverlap_SameAppIds_ReturnsTrue (line 2099) | [Fact] method AppsOverlap_DifferentAppIds_ReturnsFalse (line 2109) | [Fact] method AppsOverlap_SameCategoryIds_ReturnsTrue (line 2120) | [Fact] method AppsOverlap_DifferentCategoryIds_ReturnsFalse (line 2130) | [Fact] method AppsOverlap_AppsWithBroadCategory_ReturnsTrue (line 2140) | [Fact] method AppsOverlap_AppsWithSpecificCategory_ReturnsFalse (line 2151) | [Fact] method AppsOverlap_CategoryWithSpecificApp_ReturnsFalse (line 2162) | [Fact] method AppsOverlap_PartialAppIdOverlap_ReturnsTrue (line 2172) | [Fact] method AppsOverlap_NoAppsOrCategories_ReturnsFalse (line 2182) | [Fact] method AppsOverlap_OneHasAppOneHasNothing_ReturnsFalse (line 2192) | [Fact] method RulesOverlap_DifferentAppRules_ReturnsFalse (line 2202) | [Fact] method RulesOverlap_SameAppRules_ReturnsTrue (line 2222) | [Fact] method RulesOverlap_AppRuleVsRegionRule_ReturnsFalse (line 2241) | [Fact] method DestinationsOverlap_AppVsRegion_ReturnsFalse (line 2262) | [Fact] method DestinationsOverlap_AppVsAny_ReturnsTrue (line 2275) | [Fact] method CreateRule (line 2292) | private static FirewallRule CreateRule( FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/FirewallRuleParserTests.cs class FirewallRuleParserTests (line 11) | public class FirewallRuleParserTests method FirewallRuleParserTests (line 16) | public FirewallRuleParserTests() method ExtractFirewallRules_EmptyArray_ReturnsEmptyList (line 24) | [Fact] method ExtractFirewallRules_NonGatewayDevice_ReturnsEmptyList (line 34) | [Fact] method ExtractFirewallRules_GatewayWithNoRules_ReturnsEmptyList (line 44) | [Fact] method ExtractFirewallRules_GatewayWithRules_ReturnsRules (line 54) | [Fact] method ExtractFirewallRules_UdmDevice_ReturnsRules (line 76) | [Fact] method ExtractFirewallRules_UxgDevice_ReturnsRules (line 94) | [Fact] method ExtractFirewallRules_WrappedDataResponse_ReturnsRules (line 110) | [Fact] method ExtractFirewallRules_SingleDevice_ReturnsRules (line 129) | [Fact] method ExtractFirewallRules_MultipleRules_ReturnsAll (line 146) | [Fact] method ExtractFirewallRules_DeviceWithoutType_SkipsDevice (line 163) | [Fact] method ExtractFirewallPolicies_NullData_ReturnsEmptyList (line 180) | [Fact] method ExtractFirewallPolicies_EmptyArray_ReturnsEmptyList (line 190) | [Fact] method ExtractFirewallPolicies_ValidPolicy_ReturnsRule (line 200) | [Fact] method ExtractFirewallPolicies_WrappedDataResponse_ReturnsRules (line 223) | [Fact] method ExtractFirewallPolicies_WithSourceNetworkIds_ParsesCorrectly (line 239) | [Fact] method ExtractFirewallPolicies_WithWebDomains_ParsesCorrectly (line 260) | [Fact] method ExtractFirewallPolicies_WithDestinationPort_ParsesCorrectly (line 279) | [Fact] method ExtractFirewallPolicies_WithSourceIps_ParsesCorrectly (line 296) | [Fact] method ExtractFirewallPolicies_WithClientMacs_ParsesCorrectly (line 314) | [Fact] method ExtractFirewallPolicies_PredefinedRule_MarksAsPredefined (line 331) | [Fact] method ExtractFirewallPolicies_DisabledRule_MarksAsDisabled (line 346) | [Fact] method ExtractFirewallPolicies_WithZoneIds_ParsesCorrectly (line 361) | [Fact] method ExtractFirewallPolicies_WithMatchOppositeFlags_ParsesCorrectly (line 382) | [Fact] method ExtractFirewallPolicies_WithIcmpTypename_ParsesCorrectly (line 409) | [Fact] method ExtractFirewallPolicies_MissingId_GeneratesId (line 425) | [Fact] method ParseFirewallRule_ValidRule_ReturnsRule (line 445) | [Fact] method ParseFirewallRule_MissingId_ReturnsNull (line 468) | [Fact] method ParseFirewallRule_RuleIdProperty_ParsesId (line 481) | [Fact] method ParseFirewallRule_WithSourceInfo_ParsesCorrectly (line 495) | [Fact] method ParseFirewallRule_WithDestinationInfo_ParsesCorrectly (line 513) | [Fact] method ParseFirewallRule_WithNetworkId_ParsesCorrectly (line 531) | [Fact] method ParseFirewallRule_WithHitCount_ParsesCorrectly (line 548) | [Fact] method ParseFirewallRule_ZeroHitCount_HasBeenHitFalse (line 563) | [Fact] method ParseFirewallRule_WithRuleset_ParsesCorrectly (line 577) | [Fact] method ParseFirewallRule_WithNestedSourceNetworkIds_ParsesCorrectly (line 591) | [Fact] method ParseFirewallRule_WithNestedWebDomains_ParsesCorrectly (line 608) | [Fact] method ParseFirewallRule_DisabledRule_ParsesCorrectly (line 625) | [Fact] method ParseFirewallRule_MissingEnabled_DefaultsToTrue (line 639) | [Fact] method MapRulesetToZones_WAN_OUT_MapsToInternalToExternal (line 657) | [Fact] method MapRulesetToZones_WAN_IN_MapsToExternalToInternal (line 666) | [Fact] method MapRulesetToZones_LAN_IN_MapsToInternalToInternal (line 675) | [Fact] method MapRulesetToZones_LAN_OUT_MapsToInternalToNull (line 684) | [Fact] method MapRulesetToZones_LAN_LOCAL_MapsToInternalToGateway (line 693) | [Fact] method MapRulesetToZones_GUEST_IN_MapsToInternalToInternal (line 702) | [Fact] method MapRulesetToZones_GUEST_OUT_MapsToInternalToNull (line 711) | [Fact] method MapRulesetToZones_GUEST_LOCAL_MapsToInternalToGateway (line 720) | [Fact] method MapRulesetToZones_NullRuleset_ReturnsNulls (line 729) | [Fact] method MapRulesetToZones_EmptyRuleset_ReturnsNulls (line 738) | [Fact] method MapRulesetToZones_UnknownRuleset_ReturnsNulls (line 747) | [Fact] method MapRulesetToZones_CaseInsensitive_MapsCorrectly (line 756) | [Fact] method ParseFirewallRule_WithRuleset_SetsZoneIdsFromMapping (line 772) | [Fact] method ParseFirewallRule_WithWAN_IN_Ruleset_SetsCorrectZones (line 791) | [Fact] method ParseFirewallRule_WithLAN_LOCAL_Ruleset_SetsGatewayDestination (line 806) | [Fact] method ParseFirewallRule_WithoutRuleset_ZonesAreNull (line 821) | [Fact] method LegacyZoneIdConstants_HaveCorrectValues (line 837) | [Fact] method ParseFirewallPolicy_ValidPolicy_ReturnsRule (line 855) | [Fact] method ParseFirewallPolicy_MissingId_GeneratesId (line 876) | [Fact] method ParseFirewallPolicy_EmptyId_GeneratesId (line 891) | [Fact] method ParseFirewallPolicy_FullSourceInfo_ParsesAllFields (line 907) | [Fact] method ParseFirewallPolicy_FullDestinationInfo_ParsesAllFields (line 937) | [Fact] method ParseFirewallPolicy_EnabledDefaultsToTrue (line 969) | [Fact] method ParseFirewallPolicy_IndexDefaultsToZero (line 982) | [Fact] method ParseFirewallPolicy_PredefinedDefaultsToFalse (line 995) | [Fact] method ParseFirewallPolicy_DestinationPortGroupReference_FlattensToPortString (line 1012) | [Fact] method ParseFirewallPolicy_DestinationPortGroupWithMultiplePorts_JoinsWithCommas (line 1044) | [Fact] method ParseFirewallPolicy_DestinationPortGroupWithRange_PreservesRange (line 1074) | [Fact] method ParseFirewallPolicy_SourceIpGroupReference_FlattensToIpList (line 1103) | [Fact] method ParseFirewallPolicy_DestinationIpGroupReference_FlattensToIpList (line 1138) | [Fact] method ParseFirewallPolicy_IpGroupWithRange_PreservesRange (line 1171) | [Fact] method ParseFirewallPolicy_NoGroupsSet_DoesNotFlatten (line 1200) | [Fact] method ParseFirewallPolicy_NonexistentGroupReference_DoesNotFlatten (line 1220) | [Fact] method ParseFirewallPolicy_PortMatchingTypeNotObject_DoesNotFlatten (line 1249) | [Fact] method ParseFirewallPolicy_MatchingTargetTypeNotObject_DoesNotFlatten (line 1279) | [Fact] method ParseFirewallPolicy_WrongGroupType_DoesNotFlatten (line 1309) | [Fact] method ParseFirewallPolicy_SourcePortGroupReference_FlattensCorrectly (line 1338) | [Fact] method ParseFirewallPolicy_BothSourceAndDestGroupRefs_FlattensBoth (line 1367) | [Fact] method SetFirewallGroups_NullGroups_ClearsGroups (line 1412) | [Fact] method ParseFirewallPolicy_EmptyPortGroup_DoesNotFlatten (line 1442) | [Fact] method ParseFirewallPolicy_IPv6AddressGroup_FlattensCorrectly (line 1471) | [Fact] method ParseFirewallPolicy_IPv6AddressGroupWithCidr_FlattensCorrectly (line 1502) | [Fact] method ParseFirewallPolicy_SourceMatchOppositePorts_ParsesCorrectly (line 1539) | [Fact] method ParseFirewallPolicy_WithAppIds_ParsesCorrectly (line 1562) | [Fact] method ParseFirewallPolicy_WithoutAppIds_AppIdsIsNull (line 1587) | [Fact] method ParseFirewallPolicy_WithEmptyAppIds_AppIdsIsEmpty (line 1604) | [Fact] method ParseCombinedTrafficRule_WithAppIds_ParsesCorrectly (line 1626) | [Fact] method ParseCombinedTrafficRule_SetsProtocolToAll (line 1655) | [Fact] method ParseCombinedTrafficRule_MapsRulesetToZones (line 1671) | [Fact] method ParseCombinedTrafficRule_PrefersIPv4Ruleset (line 1690) | [Fact] method ParseCombinedTrafficRule_NonAppRule_ReturnsNull (line 1709) | [Fact] method ParseCombinedTrafficRule_NoAppIds_ReturnsNull (line 1723) | [Fact] method ParseCombinedTrafficRule_EmptyAppIds_ReturnsNull (line 1736) | [Fact] method ExtractCombinedTrafficRules_ExtractsOnlyAppRules (line 1750) | [Fact] method ExtractCombinedTrafficRules_EmptyArray_ReturnsEmptyList (line 1780) | [Fact] method ExtractCombinedTrafficRules_NotArray_ReturnsEmptyList (line 1790) | [Fact] method ParseCombinedTrafficRule_TrafficDirectionTo_SetsDestZoneToExternal (line 1800) | [Fact] method ParseCombinedTrafficRule_TrafficDirectionFrom_SetsSourceZoneToExternal (line 1822) | [Fact] method ParseCombinedTrafficRule_NoTrafficDirection_FallsBackToRuleset (line 1843) | [Fact] method ParseFirewallRule_WithDstFirewallGroupIds_ResolvesPortGroups (line 1868) | [Fact] method ParseFirewallRule_WithMultipleDstFirewallGroupIds_CombinesPorts (line 1901) | [Fact] method ParseFirewallRule_WithDstPortSet_IgnoresFirewallGroupIds (line 1941) | [Fact] method ParseFirewallRule_WithAddressGroupInDstFirewallGroupIds_IgnoresNonPortGroups (line 1974) | [Fact] method ParseFirewallRule_WithAddressGroupInSrcFirewallGroupIds_PopulatesSourceIps (line 2010) | [Fact] method ParseFirewallRule_WithAddressGroupInDstFirewallGroupIds_PopulatesDestinationIps (line 2042) | [Fact] method ParseFirewallRule_WithMixedGroupsInDstFirewallGroupIds_ResolvesBoth (line 2074) | [Fact] method ParseFirewallRule_WithDirectSrcAddress_PopulatesSourceIps (line 2114) | [Fact] method ParseFirewallRule_WithDirectDstAddress_PopulatesDestinationIps (line 2134) | [Fact] method ParseFirewallRule_WithSrcNetworkConfId_PopulatesSourceNetworkIds (line 2154) | [Fact] method ParseFirewallRule_WithDstNetworkConfId_PopulatesDestinationNetworkIds (line 2174) | [Fact] method ParseFirewallRule_AllStatesFalse_ConnectionStateTypeNull (line 2198) | [Fact] method ParseFirewallRule_AllStatesTrue_ConnectionStateTypeAll (line 2221) | [Fact] method ParseFirewallRule_EstablishedRelatedOnly_ConnectionStateTypeCustom (line 2244) | [Fact] method ParseFirewallRule_NewAndEstablished_AllowsNewConnections (line 2270) | [Fact] method ParseFirewallRule_NoStateFields_ConnectionStateTypeNull (line 2294) | [Fact] method ParseFirewallRule_EmptySourceFields_SetsSourceMatchingTargetAny (line 2318) | [Fact] method ParseFirewallRule_WithSrcNetworkConfId_DoesNotSetAny (line 2344) | [Fact] method ParseFirewallRule_WithAddressGroupIds_DoesNotSetAny (line 2370) | [Fact] method ParseFirewallRule_WithSrcAddress_SetsIpMatchingTarget (line 2397) | [Fact] method ParseFirewallRule_ResolvedAddressGroup_SetsIpNotAny (line 2424) | [Fact] method ParseFirewallRule_ProtocolMatchExceptedTrue_SetsMatchOppositeProtocol (line 2467) | [Fact] method ParseFirewallRule_ProtocolMatchExceptedFalse_DoesNotSetMatchOppositeProtocol (line 2486) | [Fact] method ParseFirewallRule_EstablishedRelatedAllowWithEmptyFields_MatchingTargetsNull (line 2509) | [Fact] method ParseFirewallRule_DropInvalidStateWithEmptyFields_MatchingTargetsNull (line 2548) | [Fact] method ParseFirewallRule_StatelessBlockWithEmptySource_GetsAnySource (line 2583) | [Fact] method ParseFirewallRule_StatelessBlockWithAddrGroupSrcAndDst_GetsIpMatching (line 2617) | [Fact] method ParseFirewallRule_NetworkconfSrcWithAddrGroupDst_GetsCorrectTargets (line 2654) | [Fact] method ParseFirewallRule_NetworkconfSrcAndDst_GetsBothNetwork (line 2691) | [Fact] method ParseFirewallRule_NetworkconfSrcWithMixedAddrAndPortGroupDst_ResolvesCorrectly (line 2716) | [Fact] method ParseFirewallRule_AddrGroupSrcAndDst_GetsBothIp (line 2761) | [Fact] method ParseFirewallRule_NetworkconfSrcWithAddrGroupDst_LegacyAllowRule (line 2805) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/HttpAppIdsTests.cs class HttpAppIdsTests (line 7) | public class HttpAppIdsTests method IsHttpApp_ReturnsExpectedResult (line 11) | [Theory] method IsWebCategory_ReturnsExpectedResult (line 28) | [Theory] method Http_HasExpectedValue (line 43) | [Fact] method Https_HasExpectedValue (line 49) | [Fact] method Http3_HasExpectedValue (line 55) | [Fact] method WebServicesCategory_HasExpectedValue (line 61) | [Fact] method AllHttpAppIds_ContainsAllHttpTypes (line 67) | [Fact] method AllWebCategoryIds_ContainsWebServicesCategory (line 76) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/PortProfileResolutionTests.cs class PortProfileResolutionTests (line 15) | public class PortProfileResolutionTests method PortProfileResolutionTests (line 19) | public PortProfileResolutionTests() method ExtractSwitches_PortWithProfile_ResolvesForwardModeFromProfile (line 24) | [Fact] method ExtractSwitches_PortWithProfileButNoForward_UsesPortForwardMode (line 60) | [Fact] method ExtractSwitches_PortWithMissingProfile_UsesPortForwardMode (line 94) | [Fact] method ExtractSwitches_PortWithoutProfile_UsesPortForwardMode (line 120) | [Fact] method ExtractSwitches_NoProfilesProvided_UsesPortForwardMode (line 153) | [Fact] method ExtractSwitches_CaseInsensitiveProfileLookup (line 179) | [Fact] method ExtractSwitches_MultiplePortsWithDifferentProfiles (line 213) | [Fact] method Integration_PortWithDisabledProfile_NotFlaggedByUnusedPortRule (line 263) | [Fact] method Integration_PortWithoutProfileResolution_WouldBeFlagged (line 312) | [Fact] method Integration_MixedPorts_OnlyProfiledPortsResolved (line 350) | [Fact] method Integration_CustomNamedPort_WithOldTimestamp_ShouldBeFlagged (line 413) | [Fact] method Integration_CustomNamedPort_WithNoTimestamp_ShouldBeFlagged (line 451) | [Fact] method ExtractSwitches_PortWithProfileVlan_ProfileVlanTakesPrecedence (line 488) | [Fact] method ExtractSwitches_PortWithProfileButNoVlan_UsesPortNativeNetworkId (line 535) | [Fact] method ExtractSwitches_PortWithoutVlanAndProfileHasVlan_UsesProfileVlan (line 579) | [Fact] method Integration_PortWithProfileVlan_WiredSubnetMismatchUsesProfileVlan (line 624) | [Fact] method Integration_PortWithoutProfilesProvided_KeepsBaseVlan (line 709) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/PortSecurityAnalyzerTests.cs class PortSecurityAnalyzerTests (line 15) | public class PortSecurityAnalyzerTests method PortSecurityAnalyzerTests (line 20) | public PortSecurityAnalyzerTests() method Constructor_WithLogger_CreatesInstance (line 28) | [Fact] method Constructor_WithDetectionService_InjectsIntoRules (line 35) | [Fact] method ExtractSwitches_EmptyDeviceData_ReturnsEmptyList (line 50) | [Fact] method ExtractSwitches_DeviceWithNoPortTable_ReturnsEmptyList (line 61) | [Fact] method ExtractSwitches_SwitchWithPorts_ReturnsSwitchInfo (line 74) | [Fact] method ExtractSwitches_GatewayDevice_MarkedAsGateway (line 100) | [Fact] method ExtractSwitches_MultipleDevices_SortsGatewayFirst (line 120) | [Fact] method ExtractSwitches_PortWithWanNetwork_MarkedAsWan (line 149) | [Fact] method ExtractSwitches_PortWithUplink_MarkedAsUplink (line 168) | [Fact] method ExtractSwitches_PortWithPoe_ExtractsPoeInfo (line 187) | [Fact] method ExtractSwitches_WithClients_CorrelatesClients (line 208) | [Fact] method ExtractSwitches_WithDnsConfig_ExtractsDnsInfo (line 240) | [Fact] method ExtractSwitches_WithSwitchCaps_ExtractsCapabilities (line 266) | [Fact] method ExtractSwitches_PortWithCustomForward_NormalizesToCustom (line 288) | [Fact] method ExtractSwitches_PortWithIsolation_MarkedAsIsolated (line 307) | [Fact] method ExtractSwitches_PortWithSecurityMacs_ExtractsMacAddresses (line 326) | [Fact] method AnalyzePorts_EmptySwitches_ReturnsEmptyList (line 356) | [Fact] method AnalyzePorts_SwitchWithPorts_RunsRulesAgainstPorts (line 367) | [Fact] method AnalyzePorts_UxInApMode_SkipsAuditIssues (line 388) | [Fact] method AnalyzePorts_UxAsGateway_StillAudited (line 434) | [Fact] method AnalyzeHardening_EmptySwitches_ReturnsEmptyList (line 483) | [Fact] method AnalyzeHardening_DisabledPorts_ReportsMeasure (line 494) | [Fact] method AnalyzeHardening_PortSecurityEnabled_ReportsMeasure (line 515) | [Fact] method AnalyzeHardening_MacRestrictions_ReportsMeasure (line 535) | [Fact] method AnalyzeHardening_CamerasOnSecurityVlan_ReportsMeasure (line 555) | [Fact] method AnalyzeHardening_IsolatedCameras_ReportsMeasure (line 585) | [Fact] method CalculateStatistics_EmptySwitches_ReturnsZeroStats (line 609) | [Fact] method CalculateStatistics_MultiplePorts_CalculatesCorrectly (line 621) | [Fact] method CalculateStatistics_UnprotectedPorts_CountsCorrectly (line 651) | [Fact] method CalculateStatistics_Dot1xPorts_ExcludedFromUnprotected (line 676) | [Fact] method ExtractAccessPointLookup_EmptyData_ReturnsEmptyDict (line 711) | [Fact] method ExtractAccessPointLookup_AccessPoints_ReturnsLookup (line 721) | [Fact] method ExtractAccessPointLookup_NonApDevices_Ignored (line 744) | [Fact] method ExtractAccessPointInfoLookup_IncludesModelInfo (line 760) | [Fact] method ExtractAccessPointInfoLookup_DeviceWithIsAccessPoint_Included (line 780) | [Fact] method ExtractWirelessClients_NullClients_ReturnsEmptyList (line 801) | [Fact] method ExtractWirelessClients_OnlyWiredClients_ReturnsEmptyList (line 811) | [Fact] method ExtractWirelessClients_ProtectDeviceWithDifferentNetworkId_UsesProtectNetworkId (line 825) | [Fact] method ExtractWirelessClients_ProtectDeviceWithSameNetworkId_UsesNetworkId (line 867) | [Fact] method ExtractWirelessClients_ProtectDeviceWithNullNetworkId_FallsBackToNetworkApiId (line 904) | [Fact] method ExtractWirelessClients_NonProtectDevice_UsesNetworkApiId (line 941) | [Fact] method AnalyzeWirelessClients_EmptyList_ReturnsEmptyIssues (line 984) | [Fact] method ExtractSwitches_ApWith1Port_SkippedAsPassthrough (line 999) | [Fact] method ExtractSwitches_ApWith2Ports_SkippedAsPassthrough (line 1020) | [Fact] method ExtractSwitches_ApWith4Ports_IncludedAndMarkedAsAp (line 1042) | [Fact] method ExtractSwitches_ApWith3Ports_IncludedAndMarkedAsAp (line 1071) | [Fact] method ExtractSwitches_SwitchNotMarkedAsAp (line 1095) | [Fact] method ExtractSwitches_GatewayActingAsAp_MarkedAsAp (line 1118) | [Fact] method ExtractSwitches_MixedDevices_CorrectlyClassified (line 1160) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesForwardMode (line 1230) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesNativeNetworkId (line 1259) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesExcludedNetworkIds (line 1288) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesEmptyExcludedNetworkIds (line 1322) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesPortSecurity (line 1354) | [Fact] method ExtractSwitches_PortWithProfile_ResolvesIsolation (line 1385) | [Fact] method ExtractSwitches_PortWithUnknownProfile_UsesPortSettings (line 1414) | [Fact] method ExtractSwitches_PortWithoutProfile_UsesPortSettings (line 1444) | [Fact] method ExtractSwitches_LagChildPort_MarkedAsLagChild (line 1478) | [Fact] method ExtractSwitches_LagParentPort_NotMarkedAsLagChild (line 1502) | [Fact] method ExtractSwitches_MultipleLagChildPorts_AllMarked (line 1525) | [Fact] method ExtractSwitches_PortWithLagIdxButNoAggregatedBy_NotMarkedAsLagChild (line 1550) | [Fact] method ExtractSwitches_PortWithAggregatedByFalse_NotMarkedAsLagChild (line 1571) | [Fact] method ExtractSwitches_RegularPortsUnaffectedByLagDetection (line 1591) | [Fact] method AnalyzePorts_LagChildPortWithForwardAll_DoesNotTriggerVlanAudit (line 1614) | [Fact] method AnalyzePorts_LagChildPort_StillCheckedByUnusedPortRule (line 1643) | [Fact] method AddRule_CustomRule_IsExecuted (line 1670) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/ProtectCameraFallbackTests.cs class ProtectCameraFallbackTests (line 19) | public class ProtectCameraFallbackTests method ProtectCameraFallbackTests (line 23) | public ProtectCameraFallbackTests() method AnalyzeProtectCameraPlacement_CameraNotOnAnyPort_FlagsWrongVlan (line 33) | [Fact] method AnalyzeProtectCameraPlacement_CameraOnSecurityVlan_ReturnsNoIssues (line 69) | [Fact] method AnalyzeProtectCameraPlacement_CameraAlreadyOnPort_SkippedByFallback (line 89) | [Fact] method AnalyzeProtectCameraPlacement_CameraAlreadyFlagged_SkippedForDedup (line 116) | [Fact] method AnalyzeProtectCameraPlacement_NoProtectCameras_ReturnsEmpty (line 137) | [Fact] method AnalyzeProtectCameraPlacement_NvrOnCorporateVlan_FlaggedWithNvrMessage (line 154) | [Fact] method AnalyzeProtectCameraPlacement_NvrOnManagementVlan_CorrectlyPlaced (line 178) | [Fact] method AnalyzeProtectCameraPlacement_CameraWithUplinkMac_FindsSwitchAndPort (line 198) | [Fact] method AnalyzeProtectCameraPlacement_CameraNoConnectionNetworkId_Skipped (line 229) | [Fact] method AnalyzeProtectCameraPlacement_MultipleCameras_OnlyFlagsWronglyPlaced (line 249) | [Fact] method AnalyzeProtectCameraPlacement_WirelessCameraMacInAlreadyFlagged_SkippedForDedup (line 275) | [Fact] method AnalyzeProtectCameraPlacement_MixedWiredAndWirelessCameras_OnlyFlagsNonWireless (line 300) | [Fact] method CreateSwitch (line 330) | private static SwitchInfo CreateSwitch(string name, string macAddress,... method CreatePort (line 350) | private static PortInfo CreatePort( FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/UpnpSecurityAnalyzerTests.cs class UpnpSecurityAnalyzerTests (line 11) | public class UpnpSecurityAnalyzerTests method UpnpSecurityAnalyzerTests (line 16) | public UpnpSecurityAnalyzerTests() method Analyze_UpnpStatusNull_ReturnsNoIssues (line 24) | [Fact] method Analyze_UpnpDisabled_ReturnsHardeningNote (line 38) | [Fact] method Analyze_UpnpEnabledOnSingleHomeNetwork_ReturnsInformational (line 53) | [Fact] method Analyze_UpnpEnabledOnSingleGamingNetwork_ReturnsInformational (line 71) | [Fact] method Analyze_UpnpEnabledOnNonHomeNetwork_ReturnsCritical (line 88) | [Fact] method Analyze_UpnpEnabledOnMultipleNonHomeNetworks_ReturnsCriticalListingAll (line 111) | [Fact] method Analyze_UpnpEnabledOnBothHomeAndNonHomeNetworks_ReturnsBothIssues (line 134) | [Fact] method Analyze_UpnpGloballyEnabledButNotBoundToAnyNetwork_ReturnsHardeningNote (line 153) | [Fact] method Analyze_UpnpEnabledOnMultipleHomeNetworks_ReturnsRecommended (line 172) | [Fact] method Analyze_DisabledNetworkWithUpnp_StillFlagged (line 197) | [Fact] method Analyze_UpnpEnabledOnGuestNetwork_ReturnsCritical (line 217) | [Fact] method Analyze_UpnpEnabledOnCorporateNetwork_ReturnsCritical (line 238) | [Fact] method Analyze_UpnpEnabledOnSecurityNetwork_ReturnsCritical (line 259) | [Fact] method Analyze_UpnpMappingsWithOnlyPrivilegedPorts_NoPortsExposedInfo (line 284) | [Fact] method Analyze_UpnpMappingsWithMixedPorts_ReportsBoth (line 309) | [Fact] method Analyze_UpnpMappingsWithNonPrivilegedPorts_ReturnsInfo (line 329) | [Fact] method Analyze_UpnpMappingsWithPortRange_DetectsPrivilegedPorts (line 351) | [Fact] method Analyze_UpnpMappingsWithCommaList_ParsesAllPorts (line 368) | [Fact] method Analyze_NoUpnpMappings_NoPortIssues (line 388) | [Fact] method Analyze_StaticPortForwardsNonPrivileged_ReturnsInformational (line 406) | [Fact] method Analyze_StaticPortForwardsOnlyPrivileged_NoGenericInfo (line 429) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_Unrestricted_ReturnsWarning (line 455) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_Restricted_FirewallGroup_ReturnsInfo (line 477) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_Restricted_IpAddress_ReturnsInfo (line 500) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_OrphanedFirewallGroup_ReturnsWarning (line 523) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_LimitingEnabledButNoGroup_ReturnsWarning (line 544) | [Fact] method Analyze_PrivilegedPorts_HomeNetwork_IpTypeButNoSrc_ReturnsWarning (line 564) | [Fact] method Analyze_PrivilegedPorts_CorporateNetwork_Unrestricted_ReturnsInfo (line 584) | [Fact] method Analyze_PrivilegedPorts_CorporateNetwork_Restricted_ReturnsInfo (line 605) | [Fact] method Analyze_PrivilegedPorts_MixedRestricted_HomeNetwork_ReturnsWarning (line 627) | [Fact] method Analyze_StaticPortForwardsMixedPorts_ReportsBoth (line 649) | [Fact] method Analyze_StaticPrivilegedPorts_ShowsServiceNames (line 668) | [Fact] method Analyze_DisabledStaticPortForwards_NotReported (line 690) | [Fact] method Analyze_MixedUpnpAndStatic_ReportsBoth (line 708) | [Fact] method Analyze_UpnpDisabled_StillReportsStaticForwards (line 728) | [Fact] method Analyze_UpnpDisabled_NoUpnpIssues (line 748) | [Fact] method Analyze_EmptyNetworkList_HandlesGracefully (line 774) | [Fact] method Analyze_NullPortForwardRules_HandlesGracefully (line 789) | [Fact] method Analyze_RuleWithEmptyPort_SkipsRule (line 803) | [Fact] method Analyze_ApplicationNameExtracted_ShowsInMessage (line 822) | [Fact] method CreateNetwork (line 850) | private static NetworkInfo CreateNetwork( method CreateUpnpRule (line 870) | private static UniFiPortForwardRule CreateUpnpRule(string port, string... method CreateStaticRule (line 882) | private static UniFiPortForwardRule CreateStaticRule( FILE: tests/NetworkOptimizer.Audit.Tests/Analyzers/VlanAnalyzerTests.cs class VlanAnalyzerTests (line 13) | public class VlanAnalyzerTests method VlanAnalyzerTests (line 19) | public VlanAnalyzerTests() method AnalyzeNetworkIsolation_SecurityNetworkNotIsolated_ReturnsCriticalIssue (line 30) | [Fact] method AnalyzeNetworkIsolation_SecurityNetworkIsolated_ReturnsNoIssues (line 49) | [Fact] method AnalyzeNetworkIsolation_ManagementNetworkNotIsolated_ReturnsCriticalIssue (line 65) | [Fact] method AnalyzeNetworkIsolation_ManagementNetworkIsolated_ReturnsNoIssues (line 84) | [Fact] method AnalyzeNetworkIsolation_IoTNetworkNotIsolated_ReturnsRecommendedIssue (line 100) | [Fact] method AnalyzeNetworkIsolation_IoTNetworkIsolated_ReturnsNoIssues (line 119) | [Fact] method AnalyzeNetworkIsolation_MediaNetworkNotIsolated_ReturnsRecommendedIssue (line 135) | [Fact] method AnalyzeNetworkIsolation_MediaNetworkIsolated_ReturnsNoIssues (line 155) | [Fact] method AnalyzeNetworkIsolation_NativeVlan_SkipsCheck (line 171) | [Fact] method AnalyzeNetworkIsolation_NativeVlanManagement_ReturnsIssue (line 187) | [Fact] method AnalyzeNetworkIsolation_NativeVlanWithPurposeOverride_ReturnsIssue (line 201) | [Fact] method AnalyzeNetworkIsolation_MultipleNetworks_ReturnsAllIssues (line 215) | [Fact] method AnalyzeNetworkIsolation_FirewallRuleBlocksToAny_NoIssue (line 236) | [Fact] method AnalyzeNetworkIsolation_FirewallRuleBlocksToOtherNetworks_NoIssue (line 265) | [Fact] method AnalyzeNetworkIsolation_FirewallRuleDisabled_StillFlagsIssue (line 301) | [Fact] method AnalyzeNetworkIsolation_FirewallRuleAllowAction_StillFlagsIssue (line 330) | [Fact] method AnalyzeNetworkIsolation_Rfc1918BlockRule_NoIssue (line 359) | [Fact] method AnalyzeNetworkIsolation_FirewallRuleSpecificPort_StillFlagsIssue (line 398) | [Fact] method AnalyzeNetworkIsolation_CustomZoneBlockToInternalZone_NoIssue (line 428) | [Fact] method AnalyzeNetworkIsolation_CustomZoneMultipleBlockRulesToAllZones_NoIssue (line 475) | [Fact] method AnalyzeNetworkIsolation_CustomZonePartialBlockRules_StillFlagsIssue (line 536) | [Fact] method AnalyzeNetworkIsolation_CustomZoneNoBlockRules_StillFlagsIssue (line 586) | [Fact] method AnalyzeNetworkIsolation_BlockToExternalZoneDoesNotCountAsIsolation (line 616) | [Fact] method AnalyzeNetworkIsolation_MatchOppositeWithMultipleExclusions_StillFlagsIssue (line 662) | [Fact] method AnalyzeNetworkIsolation_SecurityNetworkInCustomZone_NoIssue (line 700) | [Fact] method AnalyzeNetworkIsolation_IoTNetworkInCustomZone_NoIssue (line 744) | [Fact] method AnalyzeNetworkIsolation_InternalToInternalZoneRule_NoIssue (line 788) | [Fact] method AnalyzeNetworkIsolation_DisabledCustomZoneRule_StillFlagsIssue (line 831) | [Fact] method ClassifyNetwork_IoTPatterns_ReturnsIoT (line 879) | [Theory] method ClassifyNetwork_MediaPatterns_ReturnsMedia (line 890) | [Theory] method ClassifyNetwork_MediaWordBoundary_ReturnsMedia (line 905) | [Theory] method ClassifyNetwork_FalsePositivePatterns_DoesNotMatchMedia (line 919) | [Theory] method ClassifyNetwork_SecurityPatterns_ReturnsSecurity (line 930) | [Theory] method ClassifyNetwork_HotspotDoesNotMatchNoT_ReturnsGuest (line 945) | [Fact] method ClassifyNetwork_ManagementPatterns_ReturnsManagement (line 954) | [Theory] method ClassifyNetwork_GuestPatterns_ReturnsGuest (line 965) | [Theory] method ClassifyNetwork_CorporatePatterns_ReturnsCorporate (line 976) | [Theory] method ClassifyNetwork_CorporateWordBoundaryPatterns_ReturnsCorporate (line 986) | [Theory] method ClassifyNetwork_NetworkNames_DoNotMatchCorporate (line 1015) | [Theory] method ClassifyNetwork_HomePatterns_ReturnsHome (line 1030) | [Theory] method ClassifyNetwork_GamingPatterns_ReturnsGaming (line 1041) | [Theory] method ClassifyNetwork_GameWordBoundary_ReturnsGaming (line 1057) | [Theory] method ClassifyNetwork_GameChangerCompany_DoesNotMatchHome (line 1068) | [Fact] method ClassifyNetwork_ServerPatterns_ReturnsServer (line 1077) | [Theory] method ClassifyNetwork_ServerWordBoundaryPatterns_ReturnsServer (line 1090) | [Theory] method ClassifyNetwork_ServerWordBoundary_EmbeddedPatterns_DoNotMatch (line 1108) | [Theory] method ClassifyNetwork_ExplicitGuestPurpose_ReturnsGuest (line 1118) | [Fact] method ClassifyNetwork_Vlan1WithUnknownName_ReturnsManagement (line 1125) | [Fact] method ClassifyNetwork_Vlan1WithHomeName_ReturnsHome (line 1133) | [Fact] method ClassifyNetwork_DefaultName_ReturnsHome (line 1141) | [Theory] method ClassifyNetwork_LanName_ReturnsHome (line 1151) | [Fact] method ClassifyNetwork_MainName_ReturnsHome (line 1158) | [Theory] method ClassifyNetwork_UnknownName_ReturnsUnknown (line 1168) | [Fact] method ClassifyNetwork_WordBoundary_HyphenDelimiter_Matches (line 1182) | [Theory] method ClassifyNetwork_WordBoundary_UnderscoreDelimiter_Matches (line 1195) | [Theory] method ClassifyNetwork_WordBoundary_NumberDelimiter_Matches (line 1206) | [Theory] method ClassifyNetwork_WordBoundary_HyphenDelimiter_OtherPatterns (line 1218) | [Theory] method ClassifyNetwork_WordBoundary_EmbeddedPatterns_DoNotMatch (line 1231) | [Theory] method ClassifyNetwork_WordBoundary_EmbeddedPatterns_DoNotMatchOther (line 1249) | [Theory] method ClassifyNetwork_HomeNameNoInternetAndIsolated_ReturnsSecurity (line 1267) | [Fact] method ClassifyNetwork_HomeNameNoInternetNotIsolated_ReturnsUnknown (line 1276) | [Fact] method ClassifyNetwork_CorporateNameNoInternetAndIsolated_ReturnsSecurity (line 1285) | [Fact] method ClassifyNetwork_CorporateNameNoInternetNotIsolated_ReturnsUnknown (line 1294) | [Fact] method ClassifyNetwork_PrivateCamerasNoInternetIsolated_ReturnsSecurity (line 1303) | [Fact] method ClassifyNetwork_TrustedDevicesNoInternetIsolated_ReturnsSecurity (line 1313) | [Fact] method ClassifyNetwork_HomeNameWithInternet_ReturnsHome (line 1324) | [Fact] method ClassifyNetwork_CorporateNameWithInternet_ReturnsCorporate (line 1333) | [Fact] method ClassifyNetwork_UnknownNameIsolatedNoInternet_ReturnsSecurity (line 1344) | [Fact] method ClassifyNetwork_UnknownNameIsolatedWithInternet_ReturnsIoT (line 1353) | [Fact] method ClassifyNetwork_UnknownNameNotIsolated_ReturnsUnknown (line 1362) | [Fact] method ClassifyNetwork_SecurityNameIsolatedNoInternet_ReturnsSecurity (line 1373) | [Fact] method ClassifyNetwork_IoTNameIsolatedWithInternet_ReturnsIoT (line 1382) | [Fact] method ClassifyNetwork_ManagementNameIsolated_ReturnsManagement (line 1391) | [Fact] method ClassifyNetwork_HomeNameNullFlags_ReturnsHome (line 1402) | [Fact] method ClassifyNetwork_UnknownNameNullFlags_ReturnsUnknown (line 1411) | [Fact] method ClassifyNetwork_HomeNameInternetNullIsolationTrue_ReturnsHome (line 1420) | [Fact] method ClassifyNetwork_GuestNameNoInternet_ReturnsGuest (line 1431) | [Fact] method ClassifyNetwork_ExplicitGuestPurposeNoInternet_ReturnsGuest (line 1440) | [Fact] method ClassifyNetwork_SecurityNameNotIsolatedWithInternet_ReturnsSecurity (line 1451) | [Fact] method ClassifyNetwork_IoTNameNotIsolatedNoInternet_ReturnsIoT (line 1461) | [Fact] method ClassifyNetwork_Vlan1DefaultNameNoInternetIsolated_ReturnsManagement (line 1472) | [Fact] method ClassifyNetwork_Vlan1HomeNameNoInternetIsolated_ReturnsManagement (line 1481) | [Fact] method ClassifyNetwork_NonVlan1DefaultNameNoInternetIsolated_ReturnsSecurity (line 1490) | [Fact] method ClassifyNetwork_DefaultNameWithInternet_ReturnsHome (line 1499) | [Fact] method ClassifyNetwork_Vlan1NoPatternMatchNoInternetIsolated_ReturnsManagement (line 1508) | [Fact] method IsIoTNetwork_VariousInputs_ReturnsExpected (line 1521) | [Theory] method IsMediaNetwork_VariousInputs_ReturnsExpected (line 1538) | [Theory] method IsHomeNetwork_VariousInputs_ReturnsExpected (line 1558) | [Theory] method IsGamingNetwork_VariousInputs_ReturnsExpected (line 1577) | [Theory] method IsSecurityNetwork_VariousInputs_ReturnsExpected (line 1596) | [Theory] method IsManagementNetwork_VariousInputs_ReturnsExpected (line 1612) | [Theory] method FindIoTNetwork_WithIoTNetwork_ReturnsNetwork (line 1629) | [Fact] method FindIoTNetwork_WithoutIoTNetwork_ReturnsNull (line 1645) | [Fact] method FindSecurityNetwork_WithSecurityNetwork_ReturnsNetwork (line 1659) | [Fact] method FindSecurityNetwork_WithoutSecurityNetwork_ReturnsNull (line 1675) | [Fact] method GetNetworkDisplay_RegularVlan_ReturnsNameAndVlan (line 1693) | [Fact] method GetNetworkDisplay_NativeVlan_ReturnsNameVlanAndNative (line 1703) | [Fact] method AnalyzeDnsConfiguration_SharedDns_ReturnsIssue (line 1717) | [Fact] method AnalyzeDnsConfiguration_DifferentDns_ReturnsNoIssues (line 1732) | [Fact] method AnalyzeDnsConfiguration_NoDnsServers_ReturnsNoIssues (line 1746) | [Fact] method AnalyzeManagementVlanDhcp_ClientsWithoutFixedIps_ReturnsIssue (line 1764) | [Fact] method AnalyzeManagementVlanDhcp_AllClientsHaveFixedIps_ReturnsNoIssues (line 1787) | [Fact] method AnalyzeManagementVlanDhcp_NoClientsOnNetwork_ReturnsNoIssues (line 1806) | [Fact] method AnalyzeManagementVlanDhcp_DhcpDisabled_ReturnsNoIssues (line 1824) | [Fact] method AnalyzeManagementVlanDhcp_NativeVlan_ClientsWithoutFixedIps_StillFlagged (line 1842) | [Fact] method AnalyzeManagementVlanDhcp_NullClients_ReturnsNoIssues (line 1861) | [Fact] method AnalyzeManagementVlanDhcp_DeviceNameFallback_UsesHostnameThenMac (line 1874) | [Fact] method AnalyzeGatewayConfiguration_IoTWithRouting_ReturnsIssue (line 1899) | [Fact] method AnalyzeGatewayConfiguration_GuestWithRouting_ReturnsIssue (line 1913) | [Fact] method AnalyzeGatewayConfiguration_NoRouting_ReturnsNoIssues (line 1927) | [Fact] method AnalyzeInternetAccess_SecurityNetworkHasInternet_ReturnsCriticalIssue (line 1945) | [Fact] method AnalyzeInternetAccess_SecurityNetworkNoInternet_ReturnsNoIssues (line 1964) | [Fact] method AnalyzeInternetAccess_ManagementNetworkHasInternet_ReturnsRecommendedIssue (line 1980) | [Fact] method AnalyzeInternetAccess_ManagementNetworkNoInternet_ReturnsNoIssues (line 1999) | [Fact] method AnalyzeInternetAccess_IoTNetworkHasInternet_ReturnsNoIssues (line 2015) | [Fact] method AnalyzeInternetAccess_NativeVlan_SkipsCheck (line 2031) | [Fact] method AnalyzeInternetAccess_NativeVlanManagement_ReturnsIssue (line 2047) | [Fact] method AnalyzeInternetAccess_NativeVlanWithPurposeOverride_ReturnsIssue (line 2061) | [Fact] method AnalyzeInternetAccess_HomeNetworkHasInternet_ReturnsNoIssues (line 2075) | [Fact] method AnalyzeInternetAccess_SecurityNetwork_InternetBlockedViaFirewallRule_ReturnsNoIssues (line 2098) | [Fact] method AnalyzeInternetAccess_ManagementNetwork_InternetBlockedViaFirewallRule_ReturnsNoIssues (line 2128) | [Fact] method AnalyzeInternetAccess_SecurityNetwork_DisabledFirewallRule_ReturnsIssue (line 2158) | [Fact] method AnalyzeInternetAccess_SecurityNetwork_AllowRuleNotBlock_ReturnsIssue (line 2188) | [Fact] method AnalyzeInternetAccess_SecurityNetwork_PartialProtocolBlock_ReturnsIssue (line 2218) | [Fact] method AnalyzeInternetAccess_FirewallRuleBlocksMultipleNetworks_BothTreatedAsBlocked (line 2248) | [Fact] method AnalyzeInternetAccess_FirewallRuleBlocksOneOfTwoNetworks_OneIssueReturned (line 2296) | [Fact] method AnalyzeInternetAccess_NoExternalZoneId_FallsBackToConfigSetting (line 2333) | [Fact] method AnalyzeInternetAccess_NoFirewallRulesProvided_UsesConfigSettingOnly (line 2361) | [Fact] method AnalyzeInternetAccess_BothMethodsBlockInternet_ReturnsNoIssues (line 2380) | [Fact] method AnalyzeInternetAccess_RuleTargetsWrongZone_ReturnsIssue (line 2410) | [Fact] method AnalyzeInternetAccess_DropAndRejectActionsAlsoCount_ReturnsNoIssues (line 2442) | [Fact] method AnalyzeInternetAccess_IpSourceExactCidrCoversSubnet_ReturnsNoIssues (line 2472) | [Fact] method AnalyzeInternetAccess_IpSourceBroaderCidrCoversSubnet_ReturnsNoIssues (line 2502) | [Fact] method AnalyzeInternetAccess_IpSourceMultipleCidrsOneCovering_ReturnsNoIssues (line 2532) | [Fact] method AnalyzeInternetAccess_IpSourceBroadCidrCoversTwoNetworks_ReturnsNoIssues (line 2563) | [Fact] method AnalyzeInternetAccess_IpSourceCidrsCoversThreeNetworks_ReturnsNoIssues (line 2599) | [Fact] method AnalyzeInternetAccess_IpSourceCidrCoversOnlyOneOfTwo_OneIssueReturned (line 2641) | [Fact] method AnalyzeInternetAccess_IpSourceCidrDoesNotCoverSubnet_ReturnsIssue (line 2679) | [Fact] method AnalyzeInternetAccess_CustomZoneRuleBlocksNetworkInSameZone_ReturnsNoIssues (line 2711) | [Fact] method AnalyzeInternetAccess_CustomZoneRuleDoesNotApplyToNetworkInDifferentZone_ReturnsIssue (line 2752) | [Fact] method AnalyzeInternetAccess_InvalidStateOnlyBlockRule_DoesNotCountAsInternetBlock (line 2793) | [Fact] method ExtractNetworks_RedesignatesVlan1AsManagement_PreservesFirewallZoneId (line 2839) | [Fact] method ApplyPurposeOverrides_ChangesPurpose (line 2888) | [Fact] method ApplyPurposeOverrides_SamePurpose_StillSetsOverrideFlag (line 2909) | [Fact] method ApplyPurposeOverrides_InvalidEnumValue_Skipped (line 2926) | [Fact] method ApplyPurposeOverrides_NetworkIdNotFound_Skipped (line 2943) | [Fact] method ApplyPurposeOverrides_NullOrEmpty_NoOp (line 2960) | [Fact] method ApplyPurposeOverrides_CaseInsensitive (line 2975) | [Fact] method ApplyPurposeOverrides_PreservesAllProperties (line 2991) | [Fact] method ApplyPurposeOverrides_MultipleOverrides (line 3042) | [Fact] method CreateNetwork (line 3070) | private static NetworkInfo CreateNetwork( method CreateInternetBlockRule (line 3099) | private static FirewallRule CreateInternetBlockRule( method CreateInternetBlockRuleWithIpSource (line 3122) | private static FirewallRule CreateInternetBlockRuleWithIpSource( method AnalyzeInfrastructureVlanPlacement_IdealNetwork_SwitchOnManagement_NoIssues (line 3149) | [Fact] method AnalyzeInfrastructureVlanPlacement_IdealNetwork_SwitchOnHomeVlan_FlagsCritical (line 3172) | [Fact] method AnalyzeInfrastructureVlanPlacement_NonIdealVlans_APOnIoTVlan_FlagsCritical (line 3200) | [Fact] method AnalyzeInfrastructureVlanPlacement_GatewayOnAnyVlan_NoIssues (line 3229) | [Fact] method AnalyzeInfrastructureVlanPlacement_MultipleDevicesWrongVlan_FlagsAll (line 3249) | [Fact] method AnalyzeInfrastructureVlanPlacement_NoManagementNetwork_NoIssues (line 3276) | [Fact] method AnalyzeInfrastructureVlanPlacement_CellularModemOnGuestVlan_FlagsCritical (line 3295) | [Fact] method AnalyzeInfrastructureVlanPlacement_Vlan1AsDefault_SwitchOnVlan1_NoIssues (line 3316) | [Fact] method AnalyzeInfrastructureVlanPlacement_Vlan1AsLan_SwitchOnVlan1_NoIssues (line 3337) | [Fact] method AnalyzeInfrastructureVlanPlacement_Vlan1AsDefault_SwitchOnHomeVlan_FlagsCritical (line 3357) | [Fact] method AnalyzeInfrastructureVlanPlacement_Vlan1NotManagement_UsesExplicitMgmtVlan (line 3381) | [Fact] method AnalyzeInfrastructureVlanPlacement_Vlan1NotManagement_SwitchOnMgmtVlan99_NoIssues (line 3406) | [Fact] method AnalyzeInfrastructureVlanPlacement_RecommendedAction_NoReclassifyHint (line 3426) | [Fact] method CreateDeviceJson (line 3448) | private static System.Text.Json.JsonElement CreateDeviceJson(string ty... method CreateMultipleDevicesJson (line 3465) | private static System.Text.Json.JsonElement CreateMultipleDevicesJson(... FILE: tests/NetworkOptimizer.Audit.Tests/AuditScorerTests.cs class AuditScorerTests (line 10) | public class AuditScorerTests method AuditScorerTests (line 15) | public AuditScorerTests() method CalculateScore_NoIssues_Returns100 (line 23) | [Fact] method CalculateScore_SingleCriticalIssue_DeductsPoints (line 36) | [Fact] method CalculateScore_CriticalDeductionsCappedAt50 (line 52) | [Fact] method CalculateScore_RecommendedDeductionsCappedAt30 (line 68) | [Fact] method CalculateScore_InformationalDeductionsCappedAt10 (line 84) | [Fact] method CalculateScore_AllSeveritiesMaxDeduction_Returns10 (line 100) | [Fact] method CalculateScore_HardeningBonus_80PercentHardening_Adds5Points (line 126) | [Fact] method CalculateScore_HardeningBonus_60PercentHardening_Adds3Points (line 141) | [Fact] method CalculateScore_HardeningBonus_4Measures_Adds3Points (line 157) | [Fact] method CalculateScore_HardeningBonus_MaxBonus_Is8Points (line 173) | [Fact] method CalculateScore_NeverExceeds100 (line 189) | [Fact] method CalculateScore_NeverBelowZero (line 204) | [Fact] method DeterminePosture_Score90Plus_NoCritical_ReturnsExcellent (line 224) | [Theory] method DeterminePosture_Score75To89_NoCritical_ReturnsGood (line 234) | [Theory] method DeterminePosture_Score60To74_NoCritical_ReturnsFair (line 244) | [Theory] method DeterminePosture_Score40To59_NoCritical_ReturnsNeedsAttention (line 254) | [Theory] method DeterminePosture_ScoreBelow40_NoCritical_ReturnsCritical (line 264) | [Theory] method DeterminePosture_MoreThan5Critical_ReturnsCritical_RegardlessOfScore (line 274) | [Theory] method DeterminePosture_3To5Critical_ReturnsNeedsAttention_RegardlessOfScore (line 283) | [Theory] method GetPostureDescription_ReturnsExpectedDescription (line 297) | [Theory] method GetRecommendations_NoIssues_ReturnsMaintainMessage (line 313) | [Fact] method GetRecommendations_CriticalIssues_ReturnsActionableItems (line 326) | [Fact] method GetRecommendations_LowHardeningPercentage_ReturnsImproveHardening (line 345) | [Fact] method GetRecommendations_ManyUnusedPorts_ReturnsDisableUnused (line 358) | [Fact] method GetScoreLabel_ReturnsExpectedLabel (line 381) | [Theory] method CalculateFilteredScore_NoIssues_Returns100 (line 403) | [Fact] method CalculateFilteredScore_WithCriticalIssues_DeductsPoints (line 414) | [Fact] method CalculateFilteredScore_WithMixedSeverities_CalculatesCorrectly (line 430) | [Fact] method CalculateFilteredScore_WithHardening_AddsBonus (line 449) | [Fact] method CalculateScore_HardeningBonus_40PercentHardening_Adds2Points (line 472) | [Fact] method CalculateScore_HardeningBonus_2Measures_Adds2Points (line 486) | [Fact] method CalculateScore_HardeningBonus_1Measure_Adds1Point (line 500) | [Fact] method GetRecommendations_PermissiveFirewallRules_ReturnsRestrictMessage (line 518) | [Fact] method GetRecommendations_ManyMacRestrictionIssues_ReturnsMacRestrictionMessage (line 532) | [Fact] method GetRecommendations_IsolationIssues_ReturnsEnableIsolationMessage (line 545) | [Fact] method GetRecommendations_HighUnprotectedPorts_ReturnsSecureMessage (line 558) | [Fact] method GenerateExecutiveSummary_NoIssues_ReturnsExcellentMessage (line 574) | [Fact] method GenerateExecutiveSummary_WithIssues_ReturnsWarningMessage (line 592) | [Fact] method GenerateExecutiveSummary_WithOnlyRecommendedIssues_ReturnsImprovementMessage (line 611) | [Fact] method GenerateExecutiveSummary_SingleCriticalIssue_UsesSingularForm (line 632) | [Fact] method CreateAuditResult (line 655) | private static AuditResult CreateAuditResult( method CreateIssue (line 690) | private static AuditIssue CreateIssue(AuditSeverity severity, int scor... FILE: tests/NetworkOptimizer.Audit.Tests/ConfigAuditEngineTests.cs class ConfigAuditEngineTests (line 10) | public class ConfigAuditEngineTests method ConfigAuditEngineTests (line 16) | public ConfigAuditEngineTests() method Constructor_NullLogger_ThrowsArgumentNullException (line 31) | [Fact] method Constructor_NullLoggerFactory_ThrowsArgumentNullException (line 40) | [Fact] method Constructor_ValidParams_CreatesInstance (line 49) | [Fact] method RunAuditFromFile_FileNotFound_ThrowsFileNotFoundException (line 61) | [Fact] method RunAuditFromFile_EmptyPath_ThrowsFileNotFoundException (line 70) | [Fact] method ExportToJson_ValidResult_ReturnsValidJson (line 82) | [Fact] method ExportToJson_ResultWithIssues_IncludesIssues (line 94) | [Fact] method ExportToJson_ResultWithClientName_IncludesClientName (line 111) | [Fact] method GenerateTextReport_ValidResult_ReturnsNonEmptyReport (line 125) | [Fact] method GenerateTextReport_WithClientName_IncludesClientName (line 135) | [Fact] method GenerateTextReport_WithNetworks_IncludesNetworkTopology (line 145) | [Fact] method GenerateTextReport_WithCriticalIssues_IncludesCriticalSection (line 164) | [Fact] method GenerateTextReport_WithRecommendedIssues_IncludesRecommendedSection (line 184) | [Fact] method GenerateTextReport_WithHardeningMeasures_IncludesMeasures (line 203) | [Fact] method GenerateTextReport_WithSwitches_IncludesSwitchDetails (line 215) | [Fact] method GenerateTextReport_WithGateway_MarksAsGateway (line 236) | [Fact] method SaveResults_InvalidFormat_ThrowsArgumentException (line 258) | [Fact] method SaveResults_JsonFormat_WritesFile (line 277) | [Fact] method SaveResults_TextFormat_WritesFile (line 297) | [Fact] method SaveResults_TxtFormat_WritesFile (line 317) | [Fact] method RunAudit_EmptyDeviceArray_ReturnsResult (line 339) | [Fact] method RunAudit_InvalidJson_ThrowsInvalidOperationException (line 351) | [Fact] method RunAudit_NullClientName_SetsToNull (line 360) | [Fact] method RunAudit_MinimalDevice_CalculatesScore (line 370) | [Fact] method RunAudit_MinimalDevice_SetsPosture (line 381) | [Fact] method GetRecommendations_EmptyResult_ReturnsEmptyList (line 395) | [Fact] method GetRecommendations_WithIssues_ReturnsList (line 406) | [Fact] method GenerateExecutiveSummary_ValidResult_ReturnsNonEmptySummary (line 426) | [Fact] method CreateDeviceJsonWithNetworks (line 440) | private static string CreateDeviceJsonWithNetworks() method RunAudit_NoClientHistory_SkipsOfflineAnalysis (line 479) | [Fact] method RunAudit_EmptyClientHistory_SkipsOfflineAnalysis (line 499) | [Fact] method RunAudit_OfflineIoTOnCorporate_CreatesIssue (line 517) | [Fact] method RunAudit_OfflineIoTOnIoTVlan_NoIssue (line 551) | [Fact] method RunAudit_OfflineWiredDevice_Skipped (line 581) | [Fact] method RunAudit_OnlineClient_NotFlaggedAsOffline (line 610) | [Fact] method RunAudit_StaleOfflineClient_GetsInformationalSeverity (line 645) | [Fact] method RunAudit_RecentOfflineClient_GetsCriticalOrRecommended (line 680) | [Fact] method RunAudit_OfflineClientWithNameDetection_CreatesIssue (line 716) | [Fact] method RunAudit_OfflineUnknownDevice_NoIssue (line 748) | [Fact] method RunAudit_OfflineClientNoNetwork_NoIssue (line 780) | [Fact] method CreateDeviceJsonWithPrinterVlan (line 810) | private static string CreateDeviceJsonWithPrinterVlan() method RunAudit_OfflinePrinterOnIoTVlan_StrictMode_CreatesIssue (line 849) | [Fact] method RunAudit_OfflinePrinterOnIoTVlan_LenientMode_CreatesInformationalIssue (line 887) | [Fact] method RunAudit_OfflinePrinterOnPrinterVlan_NoIssue (line 925) | [Fact] method RunAudit_StaleOfflinePrinter_GetsInformationalSeverity (line 958) | [Fact] method RunAudit_OfflineCloudCameraOnCorporate_RecommendsIoTVlan (line 993) | [Fact] method RunAudit_OfflineCloudCameraOnIoTVlan_NoIssue (line 1034) | [Fact] method RunAudit_OfflineSelfHostedCameraOnCorporate_RecommendsSecurityVlan (line 1066) | [Fact] method RunAudit_OfflineCloudSecuritySystemOnCorporate_RecommendsIoTVlan (line 1103) | [Fact] method RunAudit_OfflineCloudSecuritySystemOnIoTVlan_NoIssue (line 1142) | [Fact] method RunAudit_WithDohSettings_PopulatesDnsSecurityInfo (line 1178) | [Fact] method RunAudit_WithDohAndWanDns_PopulatesWanDnsInfo (line 1200) | [Fact] method RunAudit_WithThirdPartyDns_PopulatesThirdPartyInfo (line 1221) | [Fact] method RunAudit_WithEmptySettings_DnsSecurityShowsNotEnabled (line 1265) | [Fact] method RunAudit_WithNoSettingsOrFirewallRules_DnsSecurityIsNull (line 1286) | [Fact] method RunAudit_WithDns53BlockRule_ShowsDnsLeakProtection (line 1298) | [Fact] method CreateDeviceJsonWithDoh (line 1331) | private static string CreateDeviceJsonWithDoh() method CreateDeviceJsonWithDohAndWanDns (line 1353) | private static string CreateDeviceJsonWithDohAndWanDns() method CreateSettingsDataWithDoh (line 1383) | private static System.Text.Json.JsonElement CreateSettingsDataWithDoh() method RunAudit_AccessPortWithManyTaggedVlans_UsesAllNetworksIncludingDisabled (line 1400) | [Fact] method RunAudit_AccessPortVlanCount_ExcludesWanAndVpnNetworks (line 1424) | [Fact] method RunAudit_AccessPortVlanCount_IncludesGuestNetworks (line 1456) | [Fact] method RunAudit_AccessPortVlanCount_IncludesVlanOnlyNetworks (line 1484) | [Fact] method CreateDeviceJsonWithMacRestrictedTrunkPort (line 1512) | private static string CreateDeviceJsonWithMacRestrictedTrunkPort() method CreateNetworkConfigsWithDisabled (line 1571) | private static List CreateNetworkConfigsWithDisabl... method CreateDeviceJsonWithSelectiveTaggedVlans (line 1585) | private static string CreateDeviceJsonWithSelectiveTaggedVlans() method CreateMinimalAuditResult (line 1640) | private static AuditResult CreateMinimalAuditResult(string? clientName... FILE: tests/NetworkOptimizer.Audit.Tests/Constants/DetectionConstantsTests.cs class DetectionConstantsTests (line 6) | public class DetectionConstantsTests method ConfidenceScores_AreInDescendingOrder (line 8) | [Fact] method MaxConfidence_Is100 (line 23) | [Fact] method ProtectCameraConfidence_Is100 (line 29) | [Fact] method HistoricalClientWindow_Is14Days (line 36) | [Fact] method OfflineThreshold_Is30Days (line 42) | [Fact] method MultiSourceAgreementBoost_Is10 (line 48) | [Fact] method OuiConfidenceLevels_HaveExpectedValues (line 54) | [Theory] FILE: tests/NetworkOptimizer.Audit.Tests/DeviceNameHintsTests.cs class DeviceNameHintsTests (line 9) | public class DeviceNameHintsTests method IsIoTDeviceName_WithNullOrEmpty_ReturnsFalse (line 13) | [Theory] method IsIoTDeviceName_WithIoTKeyword_ReturnsTrue (line 21) | [Theory] method IsIoTDeviceName_WithNonIoTName_ReturnsFalse (line 37) | [Theory] method IsIoTDeviceName_IsCaseInsensitive (line 48) | [Fact] method IsCameraDeviceName_WithNullOrEmpty_ReturnsFalse (line 60) | [Theory] method IsCameraDeviceName_WithCameraKeyword_ReturnsTrue (line 68) | [Theory] method IsCameraDeviceName_WithNonCameraName_ReturnsFalse (line 81) | [Theory] method IsCameraDeviceName_IsCaseInsensitive (line 92) | [Fact] method IsAccessPointName_WithNullOrEmpty_ReturnsFalse (line 104) | [Theory] method IsAccessPointName_WithAPKeyword_ReturnsTrue (line 112) | [Theory] method IsAccessPointName_WithNonAPName_ReturnsFalse (line 123) | [Theory] method IsAccessPointName_IsCaseInsensitive (line 137) | [Fact] method IsAccessPointName_WithWordBoundaryAP_ReturnsTrue (line 145) | [Theory] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/DnatDnsAnalyzerTests.cs class DnatDnsAnalyzerTests (line 12) | public class DnatDnsAnalyzerTests method CreateTestNetworks (line 18) | private static List CreateTestNetworks(params (string id,... method CreateTestNetworksWithVlans (line 30) | private static List CreateTestNetworksWithVlans(params (s... method CreateDnatRule (line 42) | private static string CreateDnatRule( method ParseNatRules (line 90) | private static JsonElement ParseNatRules(params string[] rules) method Analyze_WithNullNatRules_ReturnsEmptyResult (line 100) | [Fact] method Analyze_WithEmptyNetworks_ReturnsEmptyResult (line 112) | [Fact] method Analyze_WithNonDhcpNetwork_StillChecksCoverage (line 122) | [Fact] method Analyze_WithEmptyNatRulesArray_ReturnsNoCoverage (line 136) | [Fact] method Analyze_WithNetworkRefDnat_CoversSpecificNetwork (line 153) | [Fact] method Analyze_WithMultipleNetworkRefDnat_CoversAllNetworks (line 172) | [Fact] method Analyze_WithSubnetDnat_CoversMatchingNetwork (line 194) | [Fact] method Analyze_WithLargerSubnetDnat_CoversMultipleNetworks (line 210) | [Fact] method Analyze_WithSmallerSubnetDnat_DoesNotCoverLargerNetwork (line 227) | [Fact] method Analyze_WithNonMatchingSubnet_DoesNotCover (line 243) | [Fact] method Analyze_WithSingleIpDnat_FlagsAsAbnormal (line 262) | [Fact] method Analyze_WithMultipleSingleIpDnat_FlagsAllAsAbnormal (line 278) | [Fact] method Analyze_WithInvertedSingleIp_CoversAllNetworks (line 296) | [Fact] method Analyze_WithInvertedSingleIp_SetsCorrectCoverageType (line 316) | [Fact] method Analyze_WithNonInvertedSingleIp_StillFlaggedAsAbnormal (line 331) | [Fact] method CreateTestFirewallGroups (line 350) | private static Dictionary CreateTestFirewa... method Analyze_WithFirewallGroupPort53_RecognizesDnsRule (line 371) | [Fact] method Analyze_WithFirewallGroupPort53_NoGroups_SkipsRule (line 409) | [Fact] method Analyze_WithFirewallGroupMultipleCidrs_CoversAllSubnets (line 440) | [Fact] method Analyze_WithFirewallGroupMultipleCidrs_PartialCoverage (line 497) | [Fact] method Analyze_WithMultipleAddressGroups_AggregatesAddresses (line 546) | [Fact] method Analyze_WithTcpOnlyDnat_IgnoresRule (line 602) | [Fact] method Analyze_WithTcpUdpDnat_IncludesRule (line 616) | [Fact] method Analyze_WithAllProtocolDnat_IncludesRule (line 630) | [Fact] method Analyze_WithDisabledDnat_IgnoresRule (line 648) | [Fact] method Analyze_WithNonPort53Dnat_IgnoresRule (line 666) | [Fact] method Analyze_WithPort53InRange_IncludesRule (line 679) | [Fact] method Analyze_WithPort53InList_IncludesRule (line 692) | [Fact] method Analyze_WithSnatRule_IgnoresRule (line 709) | [Fact] method Analyze_SetsRedirectTargetFromFirstRule (line 737) | [Fact] method Analyze_WithMixedCoverageTypes_CumulativesCoverage (line 754) | [Fact] method CidrCoversSubnet_ExactMatch_ReturnsTrue (line 779) | [Fact] method CidrCoversSubnet_LargerCidrCoversSmaller_ReturnsTrue (line 785) | [Fact] method CidrCoversSubnet_SmallerCidrDoesNotCoverLarger_ReturnsFalse (line 791) | [Fact] method CidrCoversSubnet_DifferentNetwork_ReturnsFalse (line 797) | [Fact] method CidrCoversSubnet_ClassA_ReturnsTrue (line 803) | [Fact] method CidrCoversSubnet_InvalidCidr_ReturnsFalse (line 809) | [Fact] method Analyze_WithInInterface_SourceAny_CoversInterfaceNetwork (line 820) | [Fact] method Analyze_WithInInterface_AndNetworkRef_BothWork (line 839) | [Fact] method Analyze_ExtractsInInterfaceFromRule (line 856) | [Fact] method Analyze_WithMultipleInterfaceRules_CoversMultipleNetworks (line 869) | [Fact] method Analyze_InterfaceCoverageType_SetCorrectly (line 889) | [Fact] method Analyze_TracksRedirectIpPerRule (line 907) | [Fact] method Analyze_RedirectTargetIp_UsesFirstRule (line 924) | [Fact] method Analyze_WithExcludedVlans_ExcludesNetworksFromCoverageCheck (line 944) | [Fact] method Analyze_WithExcludedVlans_NullExclusions_IncludesAllNetworks (line 968) | [Fact] method Analyze_WithExcludedVlans_EmptyExclusions_IncludesAllNetworks (line 985) | [Fact] method Analyze_WithExcludedVlans_AllNetworksExcluded_ReturnsFullCoverage (line 1003) | [Fact] method Analyze_WithExcludedVlans_ExcludingUncoveredNetwork_AchievesFullCoverage (line 1022) | [Fact] method Analyze_WithExcludedVlans_MultipleVlansExcluded (line 1042) | [Fact] method Analyze_WithExcludedVlans_NonMatchingVlanId_NoEffect (line 1067) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/DnsAppIdsTests.cs class DnsAppIdsTests (line 7) | public class DnsAppIdsTests method AllDnsAppIds_ContainsExpectedIds (line 9) | [Fact] method Dns_HasCorrectValue (line 18) | [Fact] method DnsOverTls_HasCorrectValue (line 24) | [Fact] method DnsOverHttps_HasCorrectValue (line 30) | [Fact] method IsDnsApp_WithValidDnsAppId_ReturnsTrue (line 36) | [Theory] method IsDnsApp_WithInvalidAppId_ReturnsFalse (line 45) | [Theory] method IsDns53App_WithDnsAppId_ReturnsTrue (line 54) | [Fact] method IsDns53App_WithOtherDnsAppId_ReturnsFalse (line 60) | [Fact] method IsPort853App_WithDotAppId_ReturnsTrue (line 67) | [Fact] method IsPort853App_WithOtherAppId_ReturnsFalse (line 73) | [Fact] method IsPort443App_WithDohAppId_ReturnsTrue (line 80) | [Fact] method IsPort443App_WithOtherAppId_ReturnsFalse (line 86) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/DnsSecurityAnalyzerTests.cs class DnsSecurityAnalyzerTests (line 16) | public class DnsSecurityAnalyzerTests : IDisposable method DnsSecurityAnalyzerTests (line 23) | public DnsSecurityAnalyzerTests() method CreateMockHttpClient (line 39) | private static HttpClient CreateMockHttpClient(HttpStatusCode statusCo... method ParseFirewallRules (line 60) | private List ParseFirewallRules(JsonElement json, List CreateDhcpNetworks(params (string id,... method DeriveGatewayFromSubnet (line 4050) | private static string? DeriveGatewayFromSubnet(string subnet) method CreateDnatNatRules (line 4060) | private static JsonElement CreateDnatNatRules(params (string networkCo... method CreateSubnetDnatNatRules (line 4076) | private static JsonElement CreateSubnetDnatNatRules(params (string sub... method Analyze_WithDnatFullCoverageAndDoH_SuppressesDnsNo53BlockIssue (line 4092) | [Fact] method Analyze_WithDnatPartialCoverage_GeneratesBothIssues (line 4115) | [Fact] method Analyze_WithDnatSingleIpRule_GeneratesInformationalIssue (line 4134) | [Fact] method Analyze_WithBothFirewallBlockAndDnat_NoIssues (line 4160) | [Fact] method Analyze_WithDnatFullCoverageButNoDoH_StillGeneratesDoHIssue (line 4186) | [Fact] method Analyze_WithSubnetDnatCoveringAllNetworks_ProvidesFullCoverage (line 4203) | [Fact] method Analyze_DnatResultPropertiesPopulatedCorrectly (line 4222) | [Fact] method Analyze_WithThirdPartyDnsAndDnatFullCoverage_SuppressesDnsNo53BlockIssue (line 4241) | [Fact] method Analyze_WithThirdPartyDnsAndNoDnatAndNoFirewallBlock_GeneratesDnsNo53BlockIssue (line 4281) | [Fact] method Analyze_WithThirdPartyDnsAndDnatPartialCoverage_OnlyPartialCoverageIssue (line 4319) | [Fact] method Analyze_WithThirdPartyDnsAndFirewallBlock_NoDnsNo53BlockIssue (line 4371) | [Fact] method Analyze_WithThirdPartyDnsAndFirewallBlockAndDnat_NoDnsNo53BlockIssue (line 4419) | [Fact] method Analyze_RealWorldScenario_MultipleVlansWithPiholeAndFullDnatCoverage (line 4472) | [Fact] method Analyze_RealWorldScenario_MultipleVlansWithPartialDnatCoverage (line 4542) | [Fact] method Analyze_RealWorldScenario_PerNetworkDnatRules (line 4598) | [Fact] method Analyze_RealWorldScenario_MixedDhcpAndStaticNetworksAllNeedCoverage (line 4653) | [Fact] method Analyze_DnatWithPihole_RedirectsToPiholeIp_NoIssue (line 4702) | [Fact] method Analyze_DnatWithPihole_RedirectsToGateway_RaisesIssue (line 4728) | [Fact] method Analyze_DnatWithDoH_RedirectsToGateway_NoIssue (line 4756) | [Fact] method Analyze_DnatWithDoH_RedirectsToRandomIp_RaisesIssue (line 4786) | [Fact] method Analyze_DnatWithDoH_RedirectsToVlanGateway_NoIssue (line 4816) | [Fact] method Analyze_DnatWithDoH_VlanRulePointsToNativeGateway_NoIssue (line 4871) | [Fact] method Analyze_DnatWithDoH_VlanRulePointsToDifferentVlanGateway_RaisesIssue (line 4919) | [Fact] method Analyze_DnatWithDoH_OneRuleWrongDestination_RaisesIssue (line 4976) | [Fact] method Analyze_DnatWithNoDnsControl_SkipsDestinationValidation (line 5035) | [Fact] method Analyze_DnatWithMultiplePiholes_AnyPiholeIpIsValid (line 5059) | [Fact] method Analyze_DnatWrongDestination_WillNotSuppressDnsNo53Block (line 5084) | [Fact] method Analyze_WithDns53BlockRule_MatchOppositeNetworks_ExcludesSpecifiedNetwork (line 5120) | [Fact] method Analyze_WithDns53BlockRule_SpecificNetworks_OnlyCoversListedNetworks (line 5157) | [Fact] method Analyze_WithDns53BlockRule_SourceAny_CoversAllNetworks (line 5191) | [Fact] method Analyze_WithDns53BlockRule_MultipleRulesCombineCoverage (line 5224) | [Fact] method Analyze_WithDnatRule_MatchOpposite_CoversAllExceptSpecified (line 5268) | [Fact] method Analyze_WithDnatRule_NoMatchOpposite_OnlyCoversSpecifiedNetwork (line 5304) | [Fact] method Analyze_WithDns53PartialCoverage_DnatFullCoverage_SuppressesPartialIssue (line 5338) | [Fact] method Analyze_DnatWithIpRange_MatchesMultipleThirdPartyDnsServers (line 5381) | [Fact] method Analyze_DnatWithIpRange_OrderIndependent_DhcpOrderDiffersFromRange (line 5436) | [Fact] method Analyze_DnatWithIpRange_GatewayAndThirdPartyDns_BothValid (line 5496) | [Fact] method Analyze_DnatWithIpRange_ThirdPartyFirstGatewaySecond_BothValid (line 5562) | [Fact] method Analyze_DnatWithIpRange_PartialMatch_GeneratesInvalidDestinationIssue (line 5628) | [Fact] method Analyze_DnatWithCorporateOnlyThirdPartyDns_ValidatesAgainstGateway (line 5683) | [Fact] method ParseIpOrRange_SingleIp_ReturnsSingleIp (line 5759) | [Fact] method ParseIpOrRange_NullOrEmpty_ReturnsEmptyList (line 5769) | [Fact] method ParseIpOrRange_ValidRange_ReturnsAllIps (line 5777) | [Fact] method ParseIpOrRange_ThreeIpRange_ReturnsAllIps (line 5789) | [Fact] method ParseIpOrRange_CrossSubnetRange_ReturnsSingleValue (line 5800) | [Fact] method ParseIpOrRange_InvalidIpFormat_ReturnsSingleValue (line 5811) | [Fact] method ParseIpOrRange_ReversedRange_ReturnsSingleValue (line 5821) | [Fact] method IsValidRedirectTarget_VariousInputs_ReturnsExpected (line 5832) | [Theory] method IsValidRedirectTarget_NullOrEmpty_ReturnsTrue (line 5854) | [Fact] method IsValidRedirectTarget_CaseInsensitive_ReturnsTrue (line 5865) | [Fact] method DnatRuleInfo_HasRestrictedDestination_NoAddress_ReturnsFalse (line 5879) | [Fact] method DnatRuleInfo_HasRestrictedDestination_EmptyAddress_ReturnsFalse (line 5895) | [Fact] method DnatRuleInfo_HasRestrictedDestination_AddressWithInvert_ReturnsFalse (line 5911) | [Fact] method DnatRuleInfo_HasRestrictedDestination_AddressRangeWithInvert_ReturnsFalse (line 5927) | [Fact] method DnatRuleInfo_HasRestrictedDestination_AddressWithoutInvert_ReturnsTrue (line 5943) | [Fact] method DnatRuleInfo_HasRestrictedDestination_AddressRangeWithoutInvert_ReturnsTrue (line 5959) | [Fact] method Analyze_DnatWithNoDestinationAddress_NoRestrictedDestinationIssue (line 5975) | [Fact] method Analyze_DnatWithInvertedDestination_NoRestrictedDestinationIssue (line 6025) | [Fact] method Analyze_DnatWithInvertedDestinationRange_NoRestrictedDestinationIssue (line 6083) | [Fact] method Analyze_DnatWithSpecificDestination_GeneratesRestrictedDestinationIssue (line 6140) | [Fact] method Analyze_DnatWithSpecificDestinationNoInvertField_GeneratesRestrictedDestinationIssue (line 6197) | [Fact] method Analyze_DnatWithSpecificDestinationRange_GeneratesRestrictedDestinationIssue (line 6252) | [Fact] method Analyze_WithCustomSdnsStamp_ParsesProviderInfo (line 6312) | [Fact] method Analyze_WithDisabledCustomServer_NotConfigured (line 6340) | [Fact] method Analyze_WithMultipleCustomServers_ParsesAll (line 6368) | [Fact] method Analyze_WithWanDnsAutoMode_DetectsIspDns (line 6404) | [Fact] method Analyze_WithWanDnsDhcpMode_DetectsIspDns (line 6424) | [Fact] method Analyze_WithWanDnsStaticMode_NotIspDns (line 6444) | [Fact] method Analyze_WithDevicePortTable_ExtractsWanDns (line 6471) | [Fact] method Analyze_WithMultipleWanInterfaces_ExtractsAllDns (line 6505) | [Fact] method Analyze_WithWanInterfaceNoDns_SetsIspDns (line 6541) | [Fact] method Analyze_WithNonGatewayDevice_IgnoresPortTable (line 6571) | [Fact] method Analyze_WithEmptyPortTableDns_FallsBackToNetworkConfig (line 6599) | [Fact] method Analyze_WithMultiWan_FallsBackToCorrectNetworkConfig (line 6644) | [Fact] method Analyze_WithPortTableDnsPresent_DoesNotOverrideFromNetworkConfig (line 6705) | [Fact] method Analyze_WithDeviceStaticDnsPointingToGateway_NoIssue (line 6750) | [Fact] method Analyze_WithDeviceStaticDnsNotPointingToGateway_RaisesIssue (line 6779) | [Fact] method Analyze_WithDeviceUsingDhcp_AssumesCorrect (line 6808) | [Fact] method Analyze_WithNoGatewayIp_SkipsDeviceDnsValidation (line 6837) | [Fact] method Analyze_WithAdGuardHomeOnlyNetwork_DetectsProvider (line 6862) | [Fact] method Analyze_WithUnknownThirdPartyDns_UsesGenericName (line 6891) | [Fact] method CreateAdGuardHomeMockClient (line 6916) | private static HttpClient CreateAdGuardHomeMockClient() method Analyze_WithNoDhcpNetworks_SkipsConsistencyCheck (line 6953) | [Fact] method Analyze_WithEmptyNetworksList_HandlesGracefully (line 6976) | [Fact] method Analyze_AllNetworksSameDnsIp_NoIpMismatchIssue (line 6994) | [Fact] method Analyze_OneNetworkDifferentDnsIp_FlagsIpMismatch (line 7014) | [Fact] method Analyze_DualDnsWithGatewaySecondary_NoIpMismatch (line 7037) | [Fact] method Analyze_CorporateNetworkDifferentDnsIp_NotFlaggedAsMismatch (line 7058) | [Fact] method Analyze_SingleNetworkWithThirdPartyDns_NoIpMismatchCheck (line 7079) | [Fact] method Analyze_DualPiholeInstances_NoIpMismatch (line 7095) | [Fact] method Analyze_DualPiholeWithOneNetworkMissing_FlagsMismatch (line 7123) | [Fact] method Analyze_DualPiholeWithOneNetworkDifferentSecondary_FlagsMismatch (line 7145) | [Fact] method Analyze_DualPiholeWithManagementExcluded_NoIpMismatch (line 7167) | [Fact] method Analyze_PiholeWithGatewayFallback_NoIpMismatch (line 7188) | [Fact] method Analyze_IsolationNetworksDifferentDns_InformationalNotRecommended (line 7209) | [Fact] method Analyze_MixedPurposeDifferentDns_RemainsRecommended (line 7236) | [Fact] method Analyze_SecurityAndDmzDifferentDns_InformationalNotRecommended (line 7259) | [Fact] method Analyze_ServerNetworkDifferentDns_InformationalNotRecommended (line 7283) | [Fact] method Analyze_MixOfIsolationAndTrustedDifferentDns_RemainsRecommended (line 7305) | [Fact] method Analyze_WithRawDeviceData_AnalyzesApDns (line 7332) | [Fact] method Analyze_WithApDnsNotPointingToGateway_RaisesIssue (line 7366) | [Fact] method Analyze_WithDeviceDnsPointingToNonDefaultVlanGateway_NoIssue (line 7400) | [Fact] method Analyze_WithDeviceDnsPointingToNativeVlanGateway_NoIssue (line 7446) | [Fact] method Analyze_WithDeviceDnsPointingToPihole_NoIssue (line 7483) | [Fact] method Analyze_WithDeviceDnsPointingToExternalDns_StillRaisesIssue (line 7530) | [Fact] method Analyze_LegacyLanInRule_DoT853_DetectsAsBlocking (line 7570) | [Fact] method Analyze_LegacyLanInRule_Dns53Udp_NotDetectedAsBlocking (line 7606) | [Fact] method Analyze_LegacyWanOutRule_Dns53Udp_DetectedAsBlocking (line 7642) | [Fact] method Analyze_LegacyGuestInRule_DoT853_NotDetectedAsBlocking (line 7678) | [Fact] method Analyze_DmzNetworkWithoutThirdPartyDns_GetsInfoIssueNotInconsistentConfig (line 7718) | [Fact] method Analyze_GuestNetworkWithoutThirdPartyDns_GetsInfoIssueNotInconsistentConfig (line 7785) | [Fact] method Analyze_IsUniFiGuestNetworkWithoutThirdPartyDns_GetsInfoIssue (line 7851) | [Fact] method Analyze_RegularNetworkWithoutThirdPartyDns_StillGetsInconsistentConfig (line 7914) | [Fact] method Analyze_WithoutZoneLookup_GuestNetworkByPurposeStillGetsInfoIssue (line 7979) | [Fact] method Analyze_DmzNetworkWithoutZoneLookup_NotIdentifiedAsDmz (line 8025) | [Fact] method Analyze_DmzInfoIssue_HasZeroScoreImpact (line 8076) | [Fact] method Analyze_GuestInfoIssue_HasZeroScoreImpact (line 8138) | [Fact] method Analyze_MultipleDmzNetworks_GroupedInSingleInfoIssue (line 8197) | [Fact] method Analyze_SecurityNetworkWithoutThirdPartyDns_GetsInfoIssueNotInconsistentConfig (line 8275) | [Fact] method Analyze_ManagementNetworkWithoutThirdPartyDns_GetsInfoIssueNotInconsistentConfig (line 8340) | [Fact] method Analyze_DnatPartialCoverage_SecurityNetworkIncludedInPartialCoverage (line 8405) | [Fact] method Analyze_DnatPartialCoverage_SecurityAndManagementIncludedWithOtherNetworks (line 8444) | [Fact] method Analyze_RegularNetworkWithPublicDns_CreatesRecommendedSeverityIssue (line 8508) | [Fact] method Analyze_DmzNetworkWithPublicDns_CreatesInformationalSeverityIssue (line 8549) | [Fact] method Analyze_MixedDmzAndRegularWithPublicDns_CreatesSeparateIssues (line 8594) | [Fact] method Analyze_PrivateDnsOutsideSubnets_CreatesRecommendedSeverityIssue (line 8658) | [Fact] method Analyze_NetworkWithInternalDns_NoExternalDnsIssue (line 8699) | [Fact] method Analyze_NetworkWithGatewayAsDns_NoExternalDnsIssue (line 8736) | [Fact] method Analyze_WithSdnsStamp_IdentifiesProviderFromStampHostname (line 8777) | [Fact] method Analyze_WithGoogleSdnsStamp_IdentifiesProviderFromStampHostname (line 8817) | [Fact] method Analyze_WithNoEnabledServers_DoesNotIdentifyProvider (line 8858) | [Fact] method Analyze_WithUnrecognizedServerName_DoesNotIdentifyProvider (line 8898) | [Fact] method Analyze_WithMixedEnabledAndDisabledServers_UsesFirstEnabled (line 8932) | [Fact] method Analyze_WithNextDnsServerName_IdentifiesNextDns (line 8976) | [Fact] method CreateAnalyzerWithPiholeDetection (line 9016) | private DnsSecurityAnalyzer CreateAnalyzerWithPiholeDetection() method Analyze_WanDnsMatchesThirdPartyDns_MarksAsMatched (line 9049) | [Fact] method Analyze_WanDnsDoesNotMatchThirdPartyDns_UnknownIp_MarksAsMismatched (line 9104) | [Fact] method Analyze_WanDnsPointsToKnownProvider_WithThirdPartyDetected_MarksAsMatched (line 9157) | [Fact] method Analyze_PartialWanDnsMatchThirdPartyDns_RequiresAllToMatch (line 9212) | [Fact] method Analyze_MultipleWanInterfacesWithThirdPartyDns_AllMatch (line 9268) | [Fact] method Analyze_NoDoh_WithThirdPartyDns_WanDnsMatchesPihole_MarksAsMatched (line 9329) | [Fact] method Analyze_NoDoh_WithThirdPartyDns_WanDnsDoesNotMatchPihole_MarksAsMismatched (line 9387) | [Fact] method Analyze_NoDoh_NoThirdPartyDns_SkipsWanDnsValidation (line 9432) | [Fact] method Analyze_NoDoh_WithThirdPartyDns_PartialWanDnsMatch_MarksAsMismatched (line 9481) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/DnsStampDecoderTests.cs class DnsStampDecoderTests (line 7) | public class DnsStampDecoderTests method Decode_NullInput_ReturnsNull (line 11) | [Fact] method Decode_EmptyInput_ReturnsNull (line 18) | [Fact] method Decode_InvalidBase64_ReturnsNull (line 25) | [Fact] method Decode_TooShortData_ReturnsNull (line 32) | [Fact] method Decode_CloudflareDoHStamp_ReturnsCorrectInfo (line 44) | [Fact] method Decode_GoogleDoHStamp_ReturnsCorrectInfo (line 58) | [Fact] method Decode_DoHStamp_ParsesPath (line 72) | [Fact] method Decode_DoTStamp_ReturnsCorrectProtocol (line 88) | [Fact] method Decode_StampWithoutPrefix_StillDecodes (line 106) | [Fact] method Decode_StampWithDnssec_ParsesDnssecFlag (line 122) | [Fact] method Decode_IpWithPort_ParsesPortCorrectly (line 139) | [Fact] method Decode_ValidStamp_PreservesRawStamp (line 155) | [Fact] method GetDisplaySummary_WithProvider_IncludesProviderName (line 170) | [Fact] method GetDisplaySummary_WithDnssec_IncludesDnssecFeature (line 182) | [Fact] method Decode_ProtocolNames_AreCorrect (line 201) | [Theory] method GetDisplaySummary_WithNoLogging_IncludesNoLogFeature (line 219) | [Fact] method GetDisplaySummary_WithFiltering_IncludesFilteredFeature (line 236) | [Fact] method GetDisplaySummary_NoProvider_UsesHostname (line 263) | [Fact] method GetDisplaySummary_NoHostnameNoProvider_UsesUnknown (line 280) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/DohProviderRegistryTests.cs class DohProviderRegistryTests (line 8) | public class DohProviderRegistryTests : IDisposable method DohProviderRegistryTests (line 10) | public DohProviderRegistryTests() method Dispose (line 16) | public void Dispose() method IdentifyProvider_KnownHostname_ReturnsCorrectProvider (line 23) | [Theory] method IdentifyProvider_NextDnsHostname_ReturnsNextDns (line 42) | [Fact] method IdentifyProvider_UnknownHostname_ReturnsNull (line 51) | [Fact] method IdentifyProvider_NullHostname_ReturnsNull (line 59) | [Fact] method IdentifyProvider_EmptyHostname_ReturnsNull (line 67) | [Fact] method IdentifyProvider_CaseInsensitive_ReturnsProvider (line 75) | [Fact] method IdentifyProviderFromName_KnownPrefix_ReturnsProvider (line 88) | [Theory] method IdentifyProviderFromName_UnknownName_ReturnsNull (line 102) | [Fact] method IdentifyProviderFromName_NullName_ReturnsNull (line 110) | [Fact] method IdentifyProviderFromName_EmptyName_ReturnsNull (line 118) | [Fact] method IdentifyProviderFromName_CaseInsensitive_ReturnsProvider (line 126) | [Fact] method IdentifyProviderFromIp_KnownIp_ReturnsProvider (line 139) | [Theory] method IdentifyProviderFromIp_NextDnsPrefixMatch_ReturnsNextDns (line 157) | [Fact] method IdentifyProviderFromIp_UnknownIp_ReturnsNull (line 167) | [Fact] method IdentifyProviderFromIp_NullIp_ReturnsNull (line 175) | [Fact] method IdentifyProviderFromIp_EmptyIp_ReturnsNull (line 183) | [Fact] method MatchesIp_ExactMatch_ReturnsTrue (line 195) | [Fact] method MatchesIp_PrefixMatch_ReturnsTrue (line 205) | [Fact] method MatchesIp_NoMatch_ReturnsFalse (line 216) | [Fact] method MatchesIp_NullIp_ReturnsFalse (line 226) | [Fact] method MatchesIp_EmptyIp_ReturnsFalse (line 236) | [Fact] method Providers_ContainsExpectedProviders (line 250) | [Fact] method Providers_AllHaveRequiredFields (line 263) | [Fact] method Providers_NextDnsSupportsFiltering (line 276) | [Fact] method Providers_CloudflareDoesNotSupportFiltering (line 285) | [Fact] method ReverseDnsLookupAsync_NullIp_ReturnsNull (line 298) | [Fact] method ReverseDnsLookupAsync_EmptyIp_ReturnsNull (line 306) | [Fact] method ReverseDnsLookupAsync_InvalidIp_ReturnsNull (line 314) | [Fact] method IdentifyProviderFromIpWithPtrAsync_NullIp_ReturnsNullProvider (line 326) | [Fact] method IdentifyProviderFromIpWithPtrAsync_EmptyIp_ReturnsNullProvider (line 335) | [Fact] method IdentifyProviderFromIpWithPtrAsync_KnownStaticIp_FallsBackToStaticMatch (line 344) | [Fact] method IdentifyProviderFromIp_NextDnsIpv6_ReturnsNextDns (line 360) | [Theory] method MatchesIp_NextDnsIpv6PrefixMatch_ReturnsTrue (line 373) | [Fact] method MatchesIp_Ipv6CaseInsensitive_ReturnsTrue (line 383) | [Fact] method MatchesIp_UnknownIpv6_ReturnsFalse (line 393) | [Fact] method IdentifyProviderFromIp_UnknownIpv6_ReturnsNull (line 402) | [Fact] method ExtractNextDnsProfileId_ValidPath_ReturnsProfileId (line 414) | [Theory] method ExtractNextDnsProfileId_InvalidPath_ReturnsNull (line 426) | [Theory] method ExtractProfileIdFromNextDnsIpv6_ValidIpv6_ReturnsProfileId (line 437) | [Theory] method ExtractProfileIdFromNextDnsIpv6_InvalidIpv6_ReturnsNull (line 450) | [Theory] method NextDnsIpv6MatchesProfile_VariousScenarios_ReturnsExpected (line 463) | [Theory] method NextDnsIpv6MatchesProfile_CaseInsensitive_ReturnsTrue (line 477) | [Theory] FILE: tests/NetworkOptimizer.Audit.Tests/Dns/ThirdPartyDnsDetectorTests.cs class ThirdPartyDnsDetectorTests (line 12) | public class ThirdPartyDnsDetectorTests : IDisposable method ThirdPartyDnsDetectorTests (line 16) | public ThirdPartyDnsDetectorTests() method Dispose (line 23) | public void Dispose() method CreateDetector (line 28) | private ThirdPartyDnsDetector CreateDetector(HttpClient? httpClient = ... method CreateMockHttpClient (line 34) | private static HttpClient CreateMockHttpClient(HttpStatusCode statusCo... method CreateTimeoutHttpClient (line 52) | private static HttpClient CreateTimeoutHttpClient() method CreateUrlAwareMockHttpClient (line 69) | private static HttpClient CreateUrlAwareMockHttpClient(Dictionary CreateVlanNetworks(int count) method CreateAccessPortWithClient (line 1123) | private static PortInfo CreateAccessPortWithClient( method CreateTrunkPort (line 1160) | private static PortInfo CreateTrunkPort( method CreateTrunkPortWithClient (line 1193) | private static PortInfo CreateTrunkPortWithClient( method CreateTrunkPortWithLastConnectionMac (line 1237) | private static PortInfo CreateTrunkPortWithLastConnectionMac( method CreateTrunkPortWithAllowedMacs (line 1265) | private static PortInfo CreateTrunkPortWithAllowedMacs( method CreateTrunkPortWithServerClient (line 1294) | private static PortInfo CreateTrunkPortWithServerClient( method Evaluate_ForwardAllWithBlockAllTaggedVlans_NoIssue (line 1329) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/AuditRuleBaseTests.cs class AuditRuleBaseTests (line 9) | public class AuditRuleBaseTests method AuditRuleBaseTests (line 13) | public AuditRuleBaseTests() method CreateIssue_WithConnectedClientName_UsesClientName (line 20) | [Fact] method CreateIssue_WithConnectedClientHostname_UsesHostname (line 36) | [Fact] method CreateIssue_WithConnectedClientNameAndHostname_PrefersName (line 52) | [Fact] method CreateIssue_WithHistoricalClientDisplayName_UsesDisplayName (line 72) | [Fact] method CreateIssue_WithHistoricalClientName_UsesName (line 88) | [Fact] method CreateIssue_WithHistoricalClientHostname_UsesHostname (line 104) | [Fact] method CreateIssue_ConnectedClientTakesPriorityOverHistorical (line 120) | [Fact] method CreateIssue_HistoricalClientTakesPriorityOverPortName (line 137) | [Fact] method CreateIssue_WithCustomPortName_UsesPortName (line 157) | [Fact] method CreateIssue_WithBareNumber_FallsBackToPortIndex (line 173) | [Fact] method CreateIssue_WithDefaultPortPattern_FallsBackToPortIndex (line 189) | [Theory] method CreateIssue_WithSfpPlusPattern_FallsBackToPortIndex (line 210) | [Theory] method CreateIssue_WithSfp28Pattern_FallsBackToPortIndex (line 230) | [Theory] method CreateIssue_WithQsfp28Pattern_FallsBackToPortIndex (line 250) | [Theory] method CreateIssue_WithQsfpPlusPattern_FallsBackToPortIndex (line 270) | [Theory] method CreateIssue_WithBaseSfpPattern_FallsBackToPortIndex (line 289) | [Theory] method CreateIssue_WithDescriptivePortName_UsesPortName (line 311) | [Theory] method CreateIssue_WithSfpInDescriptiveName_UsesPortName (line 333) | [Fact] method CreateIssue_WithEmptyPortName_FallsBackToPortIndex (line 353) | [Fact] method CreateIssue_WithWhitespacePortName_FallsBackToPortIndex (line 369) | [Fact] method CreateIssue_WithEmptyClientName_TriesNextPriority (line 385) | [Fact] method CreatePort (line 406) | private static PortInfo CreatePort( class TestableAuditRule (line 434) | private class TestableAuditRule : AuditRuleBase method Evaluate (line 441) | public override AuditIssue? Evaluate(PortInfo port, List CreateNetworkList(params NetworkInfo[... method Evaluate_CloudCameraDevice_ReturnsNull (line 866) | [Fact] method Evaluate_RingCamera_ReturnsNull (line 897) | [Fact] method Evaluate_NestCamera_ReturnsNull (line 928) | [Fact] method Evaluate_GoogleNestCamera_ByName_ReturnsNull (line 959) | [Fact] method Evaluate_WyzeCamera_ReturnsNull (line 990) | [Fact] method Evaluate_BlinkCamera_ReturnsNull (line 1021) | [Fact] method Evaluate_ArloCamera_ReturnsNull (line 1052) | [Fact] method Evaluate_SelfHostedCamera_StillDetected (line 1083) | [Fact] method Evaluate_UniFiProtectCamera_StillDetected (line 1115) | [Fact] method Evaluate_EufyCamera_StillDetected (line 1147) | [Fact] method Evaluate_OfflineCamera_RecentlyActive_ReturnsCritical (line 1183) | [Fact] method Evaluate_OfflineCamera_StaleOlderThan2Weeks_ReturnsInformational (line 1205) | [Fact] method Evaluate_OfflineCamera_NoLastConnectionSeen_ReturnsInformational (line 1227) | [Fact] method Evaluate_SecuritySystemOnCorporateVlan_ReturnsIssue (line 1252) | [Fact] method Evaluate_SecuritySystemOnCorporateVlan_MessageStartsWithSecuritySystem (line 1269) | [Fact] method Evaluate_SecuritySystemOnSecurityVlan_ReturnsNull (line 1285) | [Fact] method Evaluate_CameraOnCorporateVlan_MessageStartsWithCamera (line 1300) | [Fact] method Evaluate_ProtectNvr_OnManagementVlan_ReturnsNull (line 1320) | [Fact] method Evaluate_ProtectNvr_OnSecurityVlan_ReturnsNull (line 1339) | [Fact] method Evaluate_ProtectNvr_OnCorporateVlan_ReturnsCriticalIssue (line 1358) | [Fact] method Evaluate_ProtectNvr_OnIoTVlan_ReturnsCriticalIssue (line 1378) | [Fact] method Evaluate_ProtectNvr_OnGuestVlan_ReturnsCriticalIssue (line 1398) | [Fact] method Evaluate_ProtectNvr_IssueMessageStartsWithNvr (line 1418) | [Fact] method Evaluate_ProtectNvr_RecommendsManagementOrSecurity (line 1439) | [Fact] method Evaluate_ProtectCamera_StillFlaggedOnManagementVlan (line 1462) | [Fact] method CreateProtectPort (line 1486) | private static PortInfo CreateProtectPort(string mac, NetworkInfo netw... method Evaluate_ProtectCamera_OnTrunkPort_StillDetected (line 1514) | [Fact] method Evaluate_ProtectCamera_OnNativePort_NoClient_DetectedViaLastConnectionMac (line 1550) | [Fact] method Evaluate_ProtectCamera_DetectedViaHistoricalClientMac (line 1583) | [Fact] method Evaluate_ProtectCamera_CorrectlyOnSecurityVlan_ReturnsNull (line 1614) | [Fact] method Evaluate_ProtectNvr_DetectedViaProtectCameras_OnCorporateVlan_ShowsNvrMessage (line 1643) | [Fact] method Evaluate_ProtectCamera_NoConnectionNetworkId_ReturnsNull (line 1675) | [Fact] method Evaluate_NonProtectDevice_NotAffectedByProtectCameraCollection (line 1704) | [Fact] method Evaluate_ProtectCamera_OnDisabledPort_DetectedViaHistoricalClient (line 1740) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/FirewallAnyAnyRuleTests.cs class FirewallAnyAnyRuleTests (line 8) | public class FirewallAnyAnyRuleTests method IsAnyAnyRule_DisabledRule_ReturnsFalse (line 12) | [Fact] method IsAnyAnyRule_AnySourceAnyDestAllProtocolAccept_ReturnsTrue (line 30) | [Fact] method IsAnyAnyRule_EmptySourceAndDest_ReturnsTrue (line 48) | [Fact] method IsAnyAnyRule_DropAction_ReturnsFalse (line 68) | [Fact] method IsAnyAnyRule_RejectAction_ReturnsFalse (line 86) | [Fact] method IsAnyAnyRule_SpecificSource_ReturnsFalse (line 104) | [Fact] method IsAnyAnyRule_SpecificDestination_ReturnsFalse (line 123) | [Fact] method IsAnyAnyRule_SpecificProtocol_ReturnsFalse (line 142) | [Fact] method CreateIssue_ReturnsCorrectSeverity (line 164) | [Fact] method CreateIssue_ReturnsCorrectType (line 179) | [Fact] method CreateIssue_ScoreImpactIs15 (line 192) | [Fact] method CreateIssue_IncludesRuleName (line 205) | [Fact] method CreateIssue_IncludesMetadata (line 218) | [Fact] method CreateIssue_IncludesRecommendedAction (line 243) | [Fact] method IsAnyAnyRule_WithDestinationPort_ReturnsFalse (line 257) | [Fact] method IsAnyAnyRule_WithSourcePort_ReturnsFalse (line 275) | [Fact] method CreateFirewallRule (line 295) | private static FirewallRule CreateFirewallRule( FILE: tests/NetworkOptimizer.Audit.Tests/Rules/IotVlanRuleTests.cs class IotVlanRuleTests (line 13) | public class IotVlanRuleTests method IotVlanRuleTests (line 18) | public IotVlanRuleTests() method RuleId_ReturnsExpectedValue (line 27) | [Fact] method RuleName_ReturnsExpectedValue (line 33) | [Fact] method Severity_IsCritical (line 39) | [Fact] method ScoreImpact_Is10 (line 45) | [Fact] method Evaluate_DesktopDevice_ReturnsNull (line 55) | [Fact] method Evaluate_LaptopDevice_ReturnsNull (line 69) | [Fact] method Evaluate_ServerDevice_ReturnsNull (line 83) | [Fact] method Evaluate_UnknownDevice_ReturnsNull (line 97) | [Fact] method Evaluate_PortDown_ReturnsNull (line 115) | [Fact] method Evaluate_TrunkPort_ReturnsNull (line 129) | [Fact] method Evaluate_UplinkPort_ReturnsNull (line 143) | [Fact] method Evaluate_WanPort_ReturnsNull (line 157) | [Fact] method Evaluate_SmartPlugOnIoTVlan_ReturnsNull (line 175) | [Fact] method Evaluate_SmartHubOnSecurityVlan_ReturnsNull (line 190) | [Fact] method Evaluate_SmartThermostatOnIoTVlan_ReturnsNull (line 205) | [Fact] method Evaluate_SmartPlugOnCorporateVlan_ReturnsRecommendedIssue (line 224) | [Fact] method Evaluate_SmartThermostatOnCorporateVlan_ReturnsRecommendedIssue (line 242) | [Fact] method Evaluate_SmartLockOnGuestVlan_ReturnsCriticalIssue (line 260) | [Fact] method Evaluate_SmartHubOnCorporateVlan_ReturnsCriticalIssue (line 277) | [Fact] method Evaluate_SmartTVOnCorporateVlan_ReturnsRecommended (line 297) | [Fact] method Evaluate_StreamingDeviceOnCorporateVlan_ReturnsRecommended (line 314) | [Fact] method Evaluate_MediaPlayerOnCorporateVlan_ReturnsRecommended (line 331) | [Fact] method Evaluate_SmartSpeakerOnCorporateVlan_ReturnsRecommended (line 348) | [Fact] method Evaluate_RoboticVacuumOnCorporateVlan_ReturnsRecommended (line 365) | [Fact] method Evaluate_IssueIncludesPortDetails (line 386) | [Fact] method Evaluate_IssueRecommendsIoTNetwork (line 410) | [Fact] method Evaluate_IssueIncludesMetadata (line 429) | [Fact] method Evaluate_IssueDeviceNameIncludesSwitchContext (line 448) | [Fact] method Evaluate_DownPortWithoutMacRestriction_ReturnsNull (line 473) | [Fact] method Evaluate_DownPortWithIoTMacRestriction_OnCorporateVlan_ReturnsIssue (line 490) | [Fact] method Evaluate_DownPortWithIoTMacRestriction_OnIoTVlan_ReturnsNull (line 511) | [Fact] method Evaluate_DownPortWithNonIoTMacRestriction_ReturnsNull (line 530) | [Fact] method Evaluate_DownPortWithIoTPortName_OnCorporateVlan_ReturnsIssue (line 549) | [Fact] method Evaluate_DownPortWithMacRestriction_DeviceNameUsesPortName (line 568) | [Fact] method Evaluate_DownPortWithMacRestriction_NoPortName_UsesDetectedCategory (line 589) | [Fact] method Evaluate_DownPortWithLastConnectionMac_IoTDevice_OnCorporateVlan_ReturnsIssue (line 611) | [Fact] method Evaluate_DownPortWithLastConnectionMac_OnIoTVlan_ReturnsNull (line 632) | [Fact] method Evaluate_DownPortWithLastConnectionMac_NonIoTDevice_ReturnsNull (line 651) | [Fact] method Evaluate_DownPortWithBothLastConnectionAndMacRestriction_UsesHighestConfidence (line 670) | [Fact] method Evaluate_DownPortWithNoMacInfo_ReturnsNull (line 691) | [Fact] method Evaluate_UpPortNoClient_WithLastConnectionMac_IoTDevice_OnCorporateVlan_ReturnsIssue (line 709) | [Fact] method Evaluate_UpPortNoClient_WithMacRestriction_IoTDevice_OnCorporateVlan_ReturnsIssue (line 738) | [Fact] method Evaluate_UpPortNoClient_WithNoMacInfo_ReturnsNull (line 765) | [Fact] method CreatePort (line 796) | private static PortInfo CreatePort( method GetDetectableName (line 853) | private static string? GetDetectableName(ClientDeviceCategory category... method CreateNetworkList (line 879) | private static List CreateNetworkList(params NetworkInfo[... method Evaluate_StreamingDevice_AllowAllStreaming_ReturnsInformational (line 895) | [Fact] method Evaluate_StreamingDevice_AllowAppleOnly_NonApple_ReturnsRecommended (line 917) | [Fact] method Evaluate_SmartTV_AllowAllTVs_ReturnsInformational (line 939) | [Fact] method Evaluate_SmartTV_AllowNameBrandOnly_Generic_ReturnsRecommended (line 961) | [Fact] method Evaluate_SmartTV_NoAllowance_ReturnsRecommended (line 984) | [Fact] method Evaluate_HighRiskDevice_AllowanceDoesNotApply_ReturnsCritical (line 999) | [Fact] method Evaluate_OfflineDevice_HighRisk_RecentlyActive_ReturnsCritical (line 1026) | [Fact] method Evaluate_OfflineDevice_HighRisk_StaleOlderThan2Weeks_ReturnsInformational (line 1048) | [Fact] method Evaluate_OfflineDevice_LowRisk_RecentlyActive_ReturnsRecommended (line 1070) | [Fact] method Evaluate_OfflineDevice_LowRisk_StaleOlderThan2Weeks_ReturnsInformational (line 1091) | [Fact] method Evaluate_OfflineDevice_NoLastConnectionSeen_ReturnsInformational (line 1113) | [Fact] method Evaluate_OfflineDevice_Exactly2WeeksAgo_ReturnsCritical (line 1134) | [Fact] method Evaluate_OnlineDevice_DoesNotApply2WeekLogic (line 1157) | [Fact] method Evaluate_PrinterOnCorporateVlan_ReturnsIssue (line 1182) | [Fact] method Evaluate_PrinterOnIoTVlan_ReturnsNull (line 1198) | [Fact] method Evaluate_ActivePort_WithOuiAndMac_DeviceNameUsesOuiAndMacSuffix (line 1217) | [Fact] method Evaluate_ActivePort_NoOuiNoName_DeviceNameUsesMac (line 1252) | [Fact] method Evaluate_OfflineDevice_WithHistoricalClientDisplayName_UsesDisplayName (line 1291) | [Fact] method Evaluate_OfflineDevice_WithHistoricalClientHostname_UsesHostname (line 1326) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/MacRestrictionRuleTests.cs class MacRestrictionRuleTests (line 9) | public class MacRestrictionRuleTests method MacRestrictionRuleTests (line 13) | public MacRestrictionRuleTests() method RuleId_ReturnsExpectedValue (line 20) | [Fact] method Severity_IsRecommended (line 26) | [Fact] method ScoreImpact_Is3 (line 32) | [Fact] method Evaluate_PortNotUp_ReturnsNull (line 42) | [Fact] method Evaluate_TrunkPort_ReturnsNull (line 55) | [Fact] method Evaluate_UplinkPort_ReturnsNull (line 68) | [Fact] method Evaluate_WanPort_ReturnsNull (line 81) | [Fact] method Evaluate_SwitchDoesNotSupportMacAcls_ReturnsNull (line 94) | [Fact] method Evaluate_ServerNetwork_NoDot1x_ReturnsNull (line 107) | [Fact] method Evaluate_ServerNetwork_Dot1xAvailable_ReturnsIssue (line 121) | [Fact] method Evaluate_ServerNetwork_Dot1xAlreadySecured_ReturnsNull (line 136) | [Fact] method Evaluate_PortSecurityEnabled_ReturnsNull (line 155) | [Fact] method Evaluate_HasAllowedMacAddresses_ReturnsNull (line 168) | [Fact] method Evaluate_CustomModeWithoutNativeNetwork_ReturnsNull (line 184) | [Fact] method Evaluate_CustomModeWithNativeNetwork_ReturnsIssue (line 195) | [Fact] method Evaluate_NetworkFabricDeviceConnected_ReturnsNull (line 210) | [Theory] method Evaluate_EndpointDeviceConnected_ReturnsIssue (line 229) | [Theory] method Evaluate_PortNameSuggestsAP_ReturnsNull (line 250) | [Theory] method Evaluate_PortNameDoesNotSuggestAP_ReturnsIssue (line 267) | [Theory] method Evaluate_UnprotectedAccessPort_ReturnsIssue (line 288) | [Fact] method Evaluate_UnprotectedAccessPort_IncludesPortDetails (line 304) | [Fact] method Evaluate_UnprotectedAccessPort_IncludesNetworkName (line 325) | [Fact] method Evaluate_Dot1xSecuredPort_ReturnsNull (line 351) | [Theory] method Evaluate_NonSecuredDot1xMode_ReturnsIssue (line 363) | [Theory] method Evaluate_PortWithUnrestrictedAccessProfile_ReturnsNull (line 380) | [Fact] method Evaluate_PortWithProfileAllowingTaggedVlans_ReturnsIssue (line 400) | [Fact] method Evaluate_PortWithProfileForwardCustomize_ReturnsIssue (line 419) | [Fact] method Evaluate_PortWithAccessProfileButSecurityEnabled_ReturnsNull (line 439) | [Fact] method Evaluate_PortWithTrunkProfileAndNoSecurity_ReturnsNull (line 459) | [Fact] method Evaluate_PortWithNoProfile_ReturnsIssue (line 478) | [Fact] method CreatePort (line 493) | private static PortInfo CreatePort( FILE: tests/NetworkOptimizer.Audit.Tests/Rules/PortIsolationRuleTests.cs class PortIsolationRuleTests (line 10) | public class PortIsolationRuleTests method PortIsolationRuleTests (line 14) | public PortIsolationRuleTests() method RuleId_ReturnsExpectedValue (line 21) | [Fact] method RuleName_ReturnsExpectedValue (line 27) | [Fact] method Severity_IsRecommended (line 33) | [Fact] method ScoreImpact_Is4 (line 39) | [Fact] method Evaluate_PortDown_ReturnsNull (line 49) | [Fact] method Evaluate_TrunkPort_ReturnsNull (line 64) | [Fact] method Evaluate_UplinkPort_ReturnsNull (line 79) | [Fact] method Evaluate_WanPort_ReturnsNull (line 94) | [Fact] method Evaluate_SwitchDoesNotSupportIsolation_ReturnsNull (line 113) | [Fact] method Evaluate_RegularDevice_ReturnsNull (line 132) | [Fact] method Evaluate_ServerDevice_ReturnsNull (line 147) | [Fact] method Evaluate_CameraOnSecurityVlanWithIsolation_ReturnsNull (line 166) | [Fact] method Evaluate_CameraOnSecurityVlanWithoutIsolation_ReturnsIssue (line 181) | [Fact] method Evaluate_NVROnSecurityVlanWithoutIsolation_ReturnsIssue (line 201) | [Fact] method Evaluate_CameraOnWrongVlan_ReturnsNull (line 217) | [Fact] method Evaluate_IoTDeviceOnIoTVlanWithIsolation_ReturnsNull (line 236) | [Fact] method Evaluate_IoTDeviceOnIoTVlanWithoutIsolation_ReturnsIssue (line 251) | [Fact] method Evaluate_HueBridgeOnIoTVlanWithoutIsolation_ReturnsIssue (line 270) | [Fact] method Evaluate_IoTDeviceOnWrongVlan_ReturnsNull (line 286) | [Fact] method Evaluate_IssueIncludesMetadata (line 305) | [Fact] method Evaluate_IssueIncludesPortDetails (line 332) | [Fact] method CreatePort (line 359) | private static PortInfo CreatePort( method CreateNetworkList (line 396) | private static List CreateNetworkList(params NetworkInfo[... FILE: tests/NetworkOptimizer.Audit.Tests/Rules/PortNameHelperTests.cs class PortNameHelperTests (line 7) | public class PortNameHelperTests method IsDefaultPortName_StandardPortNames_ReturnsTrue (line 11) | [Theory] method IsDefaultPortName_SfpVariants_ReturnsTrue (line 30) | [Theory] method IsDefaultPortName_QsfpVariants_ReturnsTrue (line 54) | [Theory] method IsDefaultPortName_BareNumbers_ReturnsTrue (line 74) | [Theory] method IsDefaultPortName_NullOrEmpty_ReturnsTrue (line 89) | [Theory] method IsCustomPortName_ActualCustomNames_ReturnsTrue (line 103) | [Theory] method IsCustomPortName_DefaultNames_ReturnsFalse (line 124) | [Theory] method IsDefaultPortName_WithWhitespace_ReturnsTrue (line 141) | [Theory] method IsDefaultPortName_PortWithDescription_ReturnsFalse (line 151) | [Fact] method IsDefaultPortName_SfpWithDescription_ReturnsFalse (line 158) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/UnusedPortRuleTests.cs class UnusedPortRuleTests (line 11) | public class UnusedPortRuleTests method UnusedPortRuleTests (line 15) | public UnusedPortRuleTests() method RuleId_ReturnsExpectedValue (line 22) | [Fact] method RuleName_ReturnsExpectedValue (line 28) | [Fact] method Severity_IsRecommended (line 34) | [Fact] method ScoreImpact_Is2 (line 40) | [Fact] method Evaluate_PortUp_ReturnsNull (line 50) | [Fact] method Evaluate_PortUpWithDefaultName_ReturnsNull (line 64) | [Fact] method Evaluate_UplinkPort_ReturnsNull (line 82) | [Fact] method Evaluate_WanPort_ReturnsNull (line 96) | [Fact] method Evaluate_PortDisabled_ReturnsNull (line 114) | [Fact] method Evaluate_PortDisabledWithDefaultName_ReturnsNull (line 128) | [Fact] method Evaluate_PortDownWithCustomName_RecentlyActive_ReturnsNull (line 146) | [Fact] method Evaluate_PortDownWithDescriptiveName_RecentlyActive_ReturnsNull (line 161) | [Fact] method Evaluate_PortDownWithWorkstationName_RecentlyActive_ReturnsNull (line 176) | [Fact] method Evaluate_PortDownWithCustomName_OldActivity_ReturnsIssue (line 191) | [Fact] method Evaluate_UnnamedPortDownNotDisabled_ReturnsIssue (line 210) | [Fact] method Evaluate_DefaultNamedPortDownNotDisabled_ReturnsIssue (line 228) | [Fact] method Evaluate_SfpPortDownNotDisabled_ReturnsIssue (line 243) | [Fact] method Evaluate_SfpPlusPortDownNotDisabled_ReturnsIssue (line 258) | [Fact] method Evaluate_PortDownWithAllForwardMode_ReturnsIssue (line 273) | [Fact] method Evaluate_IssueIncludesMetadata (line 291) | [Fact] method Evaluate_IssueIncludesPortDetails (line 314) | [Fact] method Evaluate_VariousDefaultNames_ReturnsIssue (line 340) | [Theory] method Evaluate_VariousCustomNames_RecentlyActive_ReturnsNull (line 364) | [Theory] method Evaluate_VariousCustomNames_OldActivity_ReturnsIssue (line 385) | [Theory] method Evaluate_UnnamedPort_ActiveWithin15Days_ReturnsNull (line 407) | [Fact] method Evaluate_UnnamedPort_InactiveOver15Days_ReturnsIssue (line 422) | [Fact] method Evaluate_NamedPort_ActiveWithin45Days_ReturnsNull (line 437) | [Fact] method Evaluate_NamedPort_InactiveOver45Days_ReturnsIssue (line 452) | [Fact] method Evaluate_PortWithNoLastConnectionSeen_ReturnsIssue (line 467) | [Fact] method Evaluate_InvalidTimestamp_VeryOld_ReturnsNull (line 485) | [Fact] method Evaluate_InvalidTimestamp_ZeroEpoch_ReturnsNull (line 501) | [Fact] method Evaluate_InvalidTimestamp_Year2000_ReturnsNull (line 516) | [Fact] method Evaluate_ValidOldTimestamp_JustUnderThreshold_ReturnsNull (line 531) | [Fact] method Evaluate_ValidOldTimestamp_BeyondThreshold_ReturnsIssue (line 547) | [Fact] method Evaluate_ValidOldTimestamp_FiveYearsAgo_ReturnsIssue (line 562) | [Fact] method Evaluate_ValidTimestamp_JustUnderBoundary_ReturnsIssue (line 577) | [Fact] method Evaluate_InvalidTimestamp_JustPastBoundary_ReturnsNull (line 592) | [Fact] method SetThresholds_ChangesUnnamedPortThreshold (line 611) | [Fact] method SetThresholds_ChangesNamedPortThreshold (line 630) | [Fact] method Evaluate_HardwareDisabledPort_ReturnsNull (line 653) | [Fact] method Evaluate_HardwareDisabledPort_NativeMode_ReturnsNull (line 667) | [Fact] method Evaluate_HardwareEnabledPort_StillFlagged (line 681) | [Fact] method Evaluate_IsEnabledDefaultsToTrue (line 695) | [Fact] method Evaluate_PortWithUnrestrictedAccessProfile_ReturnsNull (line 713) | [Fact] method Evaluate_PortWithProfileAllowingTaggedVlans_ReturnsIssue (line 734) | [Fact] method Evaluate_PortWithTrunkProfile_ReturnsIssue (line 754) | [Fact] method Evaluate_PortWithNoProfile_ReturnsIssue (line 773) | [Fact] method CreatePort (line 789) | private static PortInfo CreatePort( method CreateNetworkList (line 825) | private static List CreateNetworkList(params NetworkInfo[... FILE: tests/NetworkOptimizer.Audit.Tests/Rules/VlanPlacementCheckerTests.cs class VlanPlacementCheckerTests (line 12) | public class VlanPlacementCheckerTests method CheckIoTPlacement_ReturnsCorrectPlacementStatus (line 24) | [Theory] method CheckIoTPlacement_GameConsoleOnGamingNetwork_IsCorrectlyPlaced (line 41) | [Fact] method CheckIoTPlacement_StreamingDeviceOnMediaNetwork_IsCorrectlyPlaced (line 52) | [Fact] method CheckIoTPlacement_SmartTVOnMediaNetwork_IsCorrectlyPlaced (line 63) | [Fact] method CheckIoTPlacement_SmartLockOnMediaNetwork_IsNotCorrectlyPlaced (line 74) | [Fact] method CheckIoTPlacement_SmartLockOnGamingNetwork_IsNotCorrectlyPlaced (line 86) | [Fact] method CheckIoTPlacement_DetectsLowRiskDevices (line 98) | [Theory] method CheckIoTPlacement_RecommendsLowestVlanIoTNetwork (line 118) | [Fact] method CheckIoTPlacement_LowRiskDevice_GetsRecommendedSeverity (line 132) | [Fact] method CheckIoTPlacement_HighRiskDevice_GetsCriticalSeverity (line 144) | [Fact] method CheckIoTPlacement_NoIoTNetwork_ReturnsFallbackLabel (line 156) | [Fact] method CheckCameraPlacement_ReturnsCorrectPlacementStatus (line 176) | [Theory] method CheckCameraPlacement_AlwaysReturnsCriticalSeverity (line 190) | [Fact] method CheckCameraPlacement_RecommendsLowestVlanSecurityNetwork (line 201) | [Fact] method CheckCameraPlacement_NoSecurityNetwork_ReturnsFallbackLabel (line 214) | [Fact] method CheckCameraPlacement_UsesProvidedScoreImpact (line 229) | [Fact] method CheckIoTPlacement_StreamingDevice_AppleWithAllowApple_ReturnsInformational (line 243) | [Fact] method CheckIoTPlacement_StreamingDevice_RokuWithAllowApple_StaysRecommended (line 262) | [Fact] method CheckIoTPlacement_StreamingDevice_AllowAll_ReturnsInformationalForAnyVendor (line 280) | [Fact] method CheckIoTPlacement_SmartTV_NameBrandWithAllowNameBrand_ReturnsInformational (line 298) | [Theory] method CheckIoTPlacement_SmartTV_OffBrandWithAllowNameBrand_StaysRecommended (line 319) | [Fact] method CheckIoTPlacement_SmartTV_AllowAll_ReturnsInformationalForAnyVendor (line 337) | [Fact] method CheckIoTPlacement_HighRiskDevice_IgnoresAllowanceSettings (line 355) | [Fact] method CheckIoTPlacement_StreamingDevice_NullVendor_StaysRecommended (line 379) | [Fact] method CheckIoTPlacement_WithNullAllowanceSettings_UsesDefaultSeverity (line 396) | [Fact] method CheckIoTPlacement_SmartPlug_IsLowRiskButNotInAllowanceSettings (line 414) | [Fact] method CheckIoTPlacement_SmartSpeaker_AppleWithAllowApple_ReturnsInformational (line 438) | [Fact] method CheckIoTPlacement_SmartSpeaker_AmazonWithAllowApple_StaysRecommended (line 459) | [Fact] method CheckIoTPlacement_SmartSpeaker_GoogleWithAllowApple_StaysRecommended (line 479) | [Fact] method CheckPrinterPlacement_OnPrinterVlan_IsAlwaysCorrect (line 510) | [Fact] method CheckPrinterPlacement_LenientMode_OnIoT_FlagsWithInformationalSeverity (line 522) | [Fact] method CheckPrinterPlacement_LenientMode_OnSecurity_FlagsWithInformationalSeverity (line 536) | [Fact] method CheckPrinterPlacement_StrictMode_RequiresPrinterVlan (line 549) | [Fact] method CheckPrinterPlacement_StrictMode_NoPrinterVlan_AcceptsIoT (line 564) | [Fact] method CheckPrinterPlacement_StrictMode_NoPrinterVlan_AcceptsSecurity (line 577) | [Fact] method CheckPrinterPlacement_OnCorporate_IsAlwaysIncorrect (line 588) | [Fact] method CheckPrinterPlacement_DefaultAllowance_UsesInformationalSeverity (line 600) | [Fact] method CheckPrinterPlacement_RecommendsPrinterVlanOverIoT (line 613) | [Fact] method CheckPrinterPlacement_NoNetworks_ReturnsFallbackLabel (line 625) | [Fact] method BuildMetadata_IncludesAllRequiredFields (line 644) | [Fact] method BuildMetadata_IncludesLowRiskFlag_WhenProvided (line 667) | [Fact] method BuildMetadata_ExcludesLowRiskFlag_WhenNotProvided (line 678) | [Fact] method BuildMetadata_HandlesNullVendor (line 689) | [Fact] method BuildMetadata_HandlesNullNetwork (line 704) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/VlanSubnetMismatchRuleTests.cs class VlanSubnetMismatchRuleTests (line 12) | public class VlanSubnetMismatchRuleTests method VlanSubnetMismatchRuleTests (line 16) | public VlanSubnetMismatchRuleTests() method RuleId_ReturnsExpectedValue (line 23) | [Fact] method Severity_IsCritical (line 29) | [Fact] method ScoreImpact_Is10 (line 35) | [Fact] method RuleName_ReturnsExpectedValue (line 41) | [Fact] method Evaluate_NoVirtualNetworkOverride_ReturnsNull (line 51) | [Fact] method Evaluate_NoClientIp_ReturnsNull (line 69) | [Fact] method Evaluate_NoNetworkSubnet_ReturnsNull (line 87) | [Fact] method Evaluate_IpMatchesSubnet_ReturnsNull (line 109) | [Fact] method Evaluate_IpMatchesSubnet_ClassB_ReturnsNull (line 128) | [Fact] method Evaluate_IpMatchesSubnet_SmallSubnet_ReturnsNull (line 146) | [Fact] method Evaluate_FixedIpMatchesSubnet_ReturnsNull (line 164) | [Fact] method Evaluate_IpDoesNotMatchSubnet_ReturnsIssue (line 187) | [Fact] method Evaluate_FixedIpDoesNotMatchSubnet_ReturnsIssue (line 212) | [Fact] method Evaluate_IpOutsideSmallSubnet_ReturnsIssue (line 233) | [Fact] method Evaluate_IssueIncludesMetadata (line 255) | [Fact] method Evaluate_IssueIncludesFixedIpInMetadata_WhenPresent (line 281) | [Fact] method Evaluate_RecommendedAction_ForFixedIp (line 305) | [Fact] method Evaluate_RecommendedAction_ForDhcp (line 327) | [Fact] method Evaluate_IssueIncludesClientDetails (line 348) | [Fact] method Evaluate_FindsNetworkByVlan_WhenNetworkNull (line 379) | [Fact] method Evaluate_InvalidIpAddress_ReturnsNull (line 403) | [Fact] method Evaluate_InvalidSubnetFormat_ReturnsNull (line 421) | [Fact] method Evaluate_EmptySubnet_ReturnsNull (line 439) | [Fact] method CreateNetwork (line 461) | private static NetworkInfo CreateNetwork( method CreateWirelessClient (line 478) | private static WirelessClientInfo CreateWirelessClient( FILE: tests/NetworkOptimizer.Audit.Tests/Rules/WiredSubnetMismatchRuleTests.cs class WiredSubnetMismatchRuleTests (line 12) | public class WiredSubnetMismatchRuleTests method WiredSubnetMismatchRuleTests (line 16) | public WiredSubnetMismatchRuleTests() method RuleId_ReturnsExpectedValue (line 23) | [Fact] method Severity_IsCritical (line 29) | [Fact] method ScoreImpact_Is10 (line 35) | [Fact] method RuleName_ReturnsExpectedValue (line 41) | [Fact] method Evaluate_NoConnectedClient_ReturnsNull (line 51) | [Fact] method Evaluate_UplinkPort_ReturnsNull (line 66) | [Fact] method Evaluate_WanPort_ReturnsNull (line 82) | [Fact] method Evaluate_TrunkPort_ReturnsNull (line 98) | [Fact] method Evaluate_NoClientIp_ReturnsNull (line 114) | [Fact] method Evaluate_NoNetworkSubnet_ReturnsNull (line 130) | [Fact] method Evaluate_NoNetworkFound_ReturnsNull (line 146) | [Fact] method Evaluate_IpMatchesSubnet_ReturnsNull (line 167) | [Fact] method Evaluate_IpMatchesSubnet_ClassB_ReturnsNull (line 183) | [Fact] method Evaluate_IpMatchesSubnet_SmallSubnet_ReturnsNull (line 199) | [Fact] method Evaluate_FixedIpMatchesSubnet_ReturnsNull (line 215) | [Fact] method Evaluate_IpDoesNotMatchSubnet_ReturnsIssue (line 235) | [Fact] method Evaluate_FixedIpDoesNotMatchSubnet_ReturnsIssue (line 256) | [Fact] method Evaluate_IpOutsideSmallSubnet_ReturnsIssue (line 273) | [Fact] method Evaluate_IssueIncludesMetadata (line 293) | [Fact] method Evaluate_IssueIncludesFixedIpInMetadata_WhenPresent (line 315) | [Fact] method Evaluate_RecommendedAction_ForFixedIp (line 335) | [Fact] method Evaluate_RecommendedAction_ForDhcp (line 353) | [Fact] method Evaluate_IssueIncludesPortDetails (line 371) | [Fact] method Evaluate_DeviceName_UsesClientName (line 391) | [Fact] method Evaluate_DeviceName_UsesHostname_WhenNoName (line 408) | [Fact] method Evaluate_DeviceName_UsesOuiAndMac_WhenNoNameOrHostname (line 425) | [Fact] method Evaluate_DeviceName_UsesMac_WhenNoOtherInfo (line 443) | [Fact] method Evaluate_InvalidIpAddress_ReturnsNull (line 464) | [Fact] method Evaluate_InvalidSubnetFormat_ReturnsNull (line 480) | [Fact] method Evaluate_EmptySubnet_ReturnsNull (line 496) | [Fact] method Evaluate_IPv6Address_ReturnsNull (line 512) | [Fact] method CreateNetwork (line 532) | private static NetworkInfo CreateNetwork( method CreateClient (line 549) | private static UniFiClientResponse CreateClient( method CreateSwitch (line 571) | private static SwitchInfo CreateSwitch(string name = "Switch 1", strin... method CreatePort (line 582) | private static PortInfo CreatePort( method CreatePortWithDifferentNetworkId (line 606) | private static PortInfo CreatePortWithDifferentNetworkId(PortInfo orig... FILE: tests/NetworkOptimizer.Audit.Tests/Rules/WirelessCameraVlanRuleTests.cs class WirelessCameraVlanRuleTests (line 12) | public class WirelessCameraVlanRuleTests method WirelessCameraVlanRuleTests (line 16) | public WirelessCameraVlanRuleTests() method RuleId_ReturnsExpectedValue (line 23) | [Fact] method Severity_IsCritical (line 29) | [Fact] method ScoreImpact_Is8 (line 35) | [Fact] method Evaluate_DesktopDevice_ReturnsNull (line 45) | [Fact] method Evaluate_SmartPlugDevice_ReturnsNull (line 59) | [Fact] method Evaluate_CameraOnSecurityVlan_ReturnsNull (line 77) | [Fact] method Evaluate_SecuritySystemOnSecurityVlan_ReturnsNull (line 92) | [Fact] method Evaluate_CameraOnCorporateVlan_ReturnsIssue (line 111) | [Fact] method Evaluate_CameraOnIoTVlan_ReturnsIssue (line 130) | [Fact] method Evaluate_SecuritySystemOnGuestVlan_ReturnsIssue (line 146) | [Fact] method Evaluate_IssueIncludesClientDetails (line 165) | [Fact] method Evaluate_IssueRecommendsSecurityNetwork (line 190) | [Fact] method Evaluate_IssueIncludesMetadata (line 208) | [Fact] method Evaluate_CloudCameraDevice_ReturnsNull (line 229) | [Fact] method Evaluate_CloudSecuritySystemDevice_ReturnsNull (line 244) | [Fact] method Evaluate_ClientWithNullNetwork_ReturnsNull (line 263) | [Fact] method CreateWirelessClient (line 281) | private static WirelessClientInfo CreateWirelessClient( method CreateNetworkList (line 312) | private static List CreateNetworkList(params NetworkInfo[... method Evaluate_WirelessNvr_OnManagementVlan_ReturnsNull (line 328) | [Fact] method Evaluate_WirelessNvr_OnCorporateVlan_ReturnsCriticalIssue (line 343) | [Fact] method CreateWirelessNvrClient (line 360) | private static WirelessClientInfo CreateWirelessNvrClient( method Evaluate_SecuritySystemOnWrongVlan_MessageStartsWithSecuritySystem (line 400) | [Fact] method Evaluate_CameraOnWrongVlan_MessageStartsWithCamera (line 416) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Rules/WirelessIotVlanRuleTests.cs class WirelessIotVlanRuleTests (line 12) | public class WirelessIotVlanRuleTests method WirelessIotVlanRuleTests (line 16) | public WirelessIotVlanRuleTests() method RuleId_ReturnsExpectedValue (line 23) | [Fact] method Severity_IsCritical (line 29) | [Fact] method ScoreImpact_Is10 (line 35) | [Fact] method Evaluate_DesktopDevice_ReturnsNull (line 45) | [Fact] method Evaluate_DesktopDevice2_ReturnsNull (line 59) | [Fact] method Evaluate_UnknownDevice_ReturnsNull (line 73) | [Fact] method Evaluate_SmartPlugOnIoTVlan_ReturnsNull (line 91) | [Fact] method Evaluate_SmartSpeakerOnSecurityVlan_ReturnsNull (line 106) | [Fact] method Evaluate_SmartPlugOnCorporateVlan_ReturnsRecommendedIssue (line 125) | [Fact] method Evaluate_SmartThermostatOnGuestVlan_ReturnsIssue (line 144) | [Fact] method Evaluate_SmartTVOnCorporateVlan_ReturnsWarning (line 164) | [Fact] method Evaluate_StreamingDeviceOnCorporateVlan_ReturnsWarning (line 181) | [Fact] method Evaluate_MediaPlayerOnCorporateVlan_ReturnsWarning (line 198) | [Fact] method Evaluate_IssueIncludesClientDetails (line 219) | [Fact] method Evaluate_IssueRecommendsIoTNetwork (line 244) | [Fact] method Evaluate_IssueIncludesMetadata (line 262) | [Fact] method Evaluate_PrinterOnCorporateVlan_ReturnsIssue (line 284) | [Fact] method Evaluate_PrinterOnIoTVlan_ReturnsNull (line 300) | [Fact] method Evaluate_ClientWithNullNetwork_ReturnsNull (line 319) | [Fact] method Evaluate_StreamingDevice_AllowAllStreaming_ReturnsInformational (line 337) | [Fact] method Evaluate_SmartTV_AllowAllTVs_ReturnsInformational (line 360) | [Fact] method CreateWirelessClient (line 386) | private static WirelessClientInfo CreateWirelessClient( method CreateNetworkList (line 417) | private static List CreateNetworkList(params NetworkInfo[... FILE: tests/NetworkOptimizer.Audit.Tests/Services/DeviceTypeDetectionServiceTests.cs class DeviceTypeDetectionServiceTests (line 14) | public class DeviceTypeDetectionServiceTests method DeviceTypeDetectionServiceTests (line 18) | public DeviceTypeDetectionServiceTests() method DetectDeviceType_NameContainsPlug_ReturnsSmartPlug (line 25) | [Theory] method DetectDeviceType_NameContainsLightingKeyword_ReturnsSmartLighting (line 49) | [Theory] method DetectDeviceType_NameContainsAppleTV_ReturnsStreamingDevice (line 75) | [Theory] method DetectDeviceType_AppleTVWithDevIdOverride_NameOverrideWins (line 101) | [Fact] method DetectDeviceType_PlugVendorOui_DefaultsToSmartPlug (line 125) | [Theory] method DetectDeviceType_PlugVendorWithLightingName_ReturnsSmartLighting (line 149) | [Theory] method DetectDeviceType_WyzeCameraName_ReturnsCloudCamera (line 170) | [Theory] method DetectDeviceType_CyncCameraName_ReturnsSelfHostedCamera (line 192) | [Theory] method DetectDeviceType_RingVendor_ReturnsCloudCamera (line 212) | [Fact] method DetectDeviceType_FurboVendor_ReturnsCloudCamera (line 231) | [Fact] method DetectDeviceType_AppleOuiWithSmartTVFingerprint_UsesOuiForStreamingDevice (line 254) | [Theory] method DetectDeviceType_AppleOuiWithIoTGenericFingerprint_UsesOuiForSmartSpeaker (line 281) | [Theory] method DetectDeviceType_AppleOuiWithGenericFingerprintButNoMacOuiMatch_UsesFingerprint (line 306) | [Fact] method DetectDeviceType_AppleHomePodWithSiriOrHomePodInName_StillDetectsCorrectly (line 328) | [Theory] method DetectDeviceType_AppleOuiWithSpecificFingerprint_DoesNotOverride (line 351) | [Theory] method DetectDeviceType_AppleWithUserOverride_MacOuiDoesNotOverride (line 377) | [Theory] method DetectDeviceType_AppleHomePodUnknownMac_VendorOverrideFallback (line 401) | [Fact] method DetectDeviceType_AppleTVUnknownMac_VendorOverrideFallback (line 424) | [Fact] method DetectDeviceType_NestOrGoogleWithCameraName_ReturnsCloudCamera (line 451) | [Theory] method DetectDeviceType_FurboVendorVariations_ReturnsCloudCamera (line 477) | [Theory] method DetectDeviceType_IoTDeviceNames_OverridesOui (line 500) | [Theory] method DetectDeviceType_CamWithWordBoundary_ReturnsCamera (line 523) | [Theory] method DetectDeviceType_CamInWord_DoesNotMatchCamera (line 541) | [Fact] method DetectDeviceType_AppleWatch_ReturnsSmartphone (line 559) | [Theory] method DetectDeviceType_AppleOuiWithSmartSensorFingerprint_ReturnsSmartphone (line 582) | [Theory] method DetectDeviceType_GoProWithOuiAndCameraFingerprint_ReturnsIoT (line 609) | [Theory] method DetectDeviceType_GoProWithVendorIdAndCameraFingerprint_ReturnsIoT (line 636) | [Fact] method DetectDeviceType_NonGoProCameraWithDevCat106_ReturnsCamera (line 660) | [Fact] method DetectDeviceType_PixelPhone_ReturnsSmartphone (line 684) | [Theory] method DetectDeviceType_PixelNonPhone_DoesNotOverrideToSmartphone (line 709) | [Theory] method DetectDeviceType_WatchMisfingerprinted_CorrectToSmartphone (line 741) | [Theory] method DetectDeviceType_WatchWithNoFingerprint_CorrectToSmartphone (line 764) | [Fact] method DetectDeviceType_WatchSubstring_DoesNotCorrectToSmartphone (line 783) | [Theory] method DetectDeviceType_WatchCorrection_PreservesVendor (line 805) | [Theory] method DetectDeviceType_VRHeadset_ReturnsGameConsole (line 834) | [Theory] method DetectDeviceType_VRPrefixTag_ReturnsGameConsole (line 861) | [Fact] method DetectDeviceType_LightsInName_DoesNotMatchNAS (line 881) | [Theory] method DetectDeviceType_ActualNAS_ReturnsNAS (line 901) | [Theory] method DetectDeviceType_CameraFingerprint_WithoutNameOverride_ReturnsCamera (line 924) | [Fact] method DetectDeviceType_NoFingerprintData_UsesNamePattern (line 942) | [Fact] method DetectFromPortName_CameraPort_ReturnsCamera (line 964) | [Fact] method DetectFromPortName_PlugPort_ReturnsSmartPlug (line 977) | [Fact] method SetClientHistory_WithValidList_PopulatesLookup (line 994) | [Fact] method SetClientHistory_WithNull_ClearsLookup (line 1016) | [Fact] method SetClientHistory_WithEmptyList_ClearsLookup (line 1039) | [Fact] method DetectFromMac_WithHistoryFingerprint_ReturnsCorrectCategory (line 1062) | [Fact] method DetectFromMac_WithHistoryNamePattern_ReturnsCorrectCategory (line 1086) | [Fact] method DetectFromMac_WithoutHistory_FallsBackToOuiDatabase (line 1109) | [Fact] method DetectFromMac_CaseInsensitiveLookup_FindsMatch (line 1124) | [Fact] method DetectFromMac_EmptyMac_ReturnsUnknown (line 1146) | [Fact] method DetectFromMac_NullMac_ReturnsUnknown (line 1156) | [Fact] method DetectFromMac_HistoryUsesDisplayName_WhenNameNull (line 1166) | [Fact] method SetClientHistory_FiltersEntriesWithEmptyMac (line 1189) | [Fact] method DetectFromMac_HistoryCameraFingerprint_WithCloudVendor_ReturnsCloudCamera (line 1209) | [Theory] method DetectFromMac_HistorySecuritySystemFingerprint_WithCloudVendor_ReturnsCloudSecuritySystem (line 1242) | [Theory] method DetectFromMac_HistoryCameraFingerprint_WithLocalVendor_ReturnsCamera (line 1267) | [Fact] method IsIoT_IoTDeviceCategories_ReturnsTrue (line 1295) | [Theory] method IsSurveillance_SurveillanceCategories_ReturnsTrue (line 1308) | [Theory] method IsIoT_NonIoTCategories_ReturnsFalse (line 1317) | [Theory] method DetectDeviceType_HomePod_SetsAppleVendor (line 1331) | [Theory] method DetectDeviceType_EchoDevices_SetsAmazonVendor (line 1353) | [Theory] method DetectDeviceType_GoogleNestSpeakers_SetsGoogleVendor (line 1377) | [Theory] method DetectFromMac_AppleSpeakerOui_ReturnsSmartSpeaker (line 1400) | [Theory] method DetectDeviceType_MetaVR_SetsMetaVendor (line 1434) | [Theory] method DetectDeviceType_HTCVive_SetsHTCVendor (line 1455) | [Fact] method DetectDeviceType_ValveIndex_SetsValveVendor (line 1473) | [Fact] method DetectDeviceType_PSVR_SetsSonyVendor (line 1491) | [Fact] method DetectDeviceType_Pico_SetsPicoVendor (line 1509) | [Fact] method DetectDeviceType_GenericVRTag_PreservesOuiVendor (line 1527) | [Fact] method DetectDeviceType_UniFiProtectCamera_Wired_ReturnsCamera (line 1550) | [Theory] method DetectDeviceType_UniFiProtectCamera_WiFi_ReturnsCamera (line 1582) | [Theory] method DetectDeviceType_UniFiProtectCamera_WithCloudKeywordInName_StillReturnsCamera (line 1616) | [Fact] method DetectDeviceType_UniFiProtectCamera_BypassesFingerprint (line 1643) | [Fact] method DetectDeviceType_UniFiProtectCamera_BypassesNameOverride (line 1673) | [Fact] method DetectDeviceType_NotInProtectCollection_UsesNormalDetection (line 1698) | [Fact] method DetectDeviceType_RingCamera_SetsRingVendor (line 1728) | [Theory] method DetectDeviceType_NestGoogleCamera_SetsGoogleVendor (line 1749) | [Theory] method DetectDeviceType_WyzeCamera_SetsWyzeVendor (line 1770) | [Theory] method DetectDeviceType_BlinkCamera_SetsAmazonVendor (line 1791) | [Theory] method DetectDeviceType_ArloCamera_SetsArloVendor (line 1811) | [Theory] method DetectDeviceType_SimpliSafeVendor_ReturnsCloudCamera (line 1832) | [Fact] method DetectDeviceType_TpLinkCameraVendor_ReturnsCloudCamera (line 1851) | [Fact] method DetectDeviceType_CanaryVendor_ReturnsCloudCamera (line 1870) | [Fact] method DetectDeviceType_CloudCameraVendor_FingerprintVendorTakesPriorityOverOui (line 1889) | [Fact] method DetectDeviceType_NonCloudCameraVendor_RemainsCamera (line 1912) | [Fact] method DetectDeviceType_CameraNameWithCloudOui_BecomesCloudCamera (line 1932) | [Fact] method DetectDeviceType_CameraNameWithNonCloudOui_RemainsCamera (line 1951) | [Fact] method DetectDeviceType_VendorWithCloudKeywordSubstring_DoesNotFalsePositive (line 1970) | [Theory] method DetectDeviceType_ActualCloudVendor_BecomesCloudCamera (line 1994) | [Theory] method DetectDeviceType_Ecobee_SetsEcobeeVendor (line 2041) | [Theory] method DetectDeviceType_NestThermostat_SetsGoogleVendor (line 2062) | [Theory] method DetectDeviceType_GenericThermostat_PreservesOuiVendor (line 2082) | [Fact] method DetectDeviceType_GenericPlug_PreservesOuiVendor (line 2105) | [Fact] method DetectDeviceType_GenericBulb_PreservesOuiVendor (line 2124) | [Fact] method DetectDeviceType_GenericPrinter_PreservesOuiVendor (line 2143) | [Fact] method DetectDeviceType_GenericCamera_PreservesOuiVendor (line 2162) | [Fact] method DetectDeviceType_GenericCamera_WithCloudOui_SetsCloudCameraAndPreservesVendor (line 2181) | [Fact] method DetectDeviceType_SimpliSafeBasestation_ReturnsCloudSecuritySystem (line 2204) | [Theory] method DetectDeviceType_SimpliSafeCameraByName_ReturnsCloudCamera (line 2226) | [Theory] method DetectDeviceType_SimpliSafeVendorWithCameraFingerprint_ReturnsCloudCamera (line 2248) | [Fact] method DetectDeviceType_SimpliSafeOuiWithBasestationName_ReturnsCloudSecuritySystem (line 2267) | [Theory] method DetectDeviceType_GenericCameraNameWithVendorOui_ClassifiesCorrectly (line 2295) | [Theory] method DetectDeviceType_CloudVendorInName_BecomesCloudCamera (line 2321) | [Theory] method DetectDeviceType_SimpliSafeInName_WithCameraKeyword_ReturnsCloudCamera (line 2345) | [Fact] method DetectDeviceType_CameraNameWithWrongFingerprint_OverridesToCamera (line 2368) | [Theory] method DetectDeviceType_CloudCameraNameWithWrongFingerprint_OverridesToCloudCamera (line 2392) | [Theory] method DetectDeviceType_CameraNameWithCameraFingerprint_KeepsCamera (line 2414) | [Fact] method IsIoT_CloudSecuritySystem_ReturnsTrue (line 2437) | [Fact] method IsSurveillance_CloudSecuritySystem_ReturnsTrue (line 2444) | [Fact] method IsHighRiskIoT_CloudSecuritySystem_ReturnsTrue (line 2451) | [Fact] method IsCloudSurveillance_ReturnsCorrectValue (line 2458) | [Theory] method DetectDeviceType_NestProtectSmokeAlarm_DoesNotReturnCamera (line 2474) | [Theory] method DetectDeviceType_NestProtect_WithIoTFingerprint_ReturnsIoT (line 2498) | [Fact] method DetectDeviceType_NestProtect_WithoutFingerprint_DoesNotReturnCamera (line 2518) | [Fact] method DetectDeviceType_ProtectKeyword_NotInCameraPatterns (line 2539) | [Fact] method DetectDeviceType_UniFiProtectCamera_StillDetectedViaAPI (line 2559) | [Fact] method DetectDeviceType_UniFiProtect_AIKey_StillDetectedViaAPI (line 2586) | [Fact] method DetectDeviceType_ProtectNvr_SetsIsNvrMetadata (line 2616) | [Fact] method DetectDeviceType_ProtectCamera_DoesNotSetIsNvrMetadata (line 2641) | [Fact] method ProtectCameraCollection_IsNvr_ReturnsTrueForNvr (line 2669) | [Fact] method ProtectCameraCollection_IsNvr_ReturnsFalseForCamera (line 2680) | [Fact] method ProtectCameraCollection_IsNvr_ReturnsFalseForUnknownMac (line 2691) | [Fact] method ProtectCameraCollection_IsNvr_ReturnsFalseForNull (line 2702) | [Fact] method DetectDeviceType_UnasWithCameraOui_ClassifiedAsNasWhenDriveDeviceKnown (line 2716) | [Fact] method DetectDeviceType_UnasSecondNic_ClassifiedAsNasWhenDriveDeviceKnown (line 2741) | [Fact] method DetectFromMac_UnasWithCameraOui_ClassifiedAsNasWhenDriveDeviceKnown (line 2764) | [Fact] method DetectDeviceType_ActualProtectCamera_StillDetectedAsCamera (line 2781) | [Fact] method DetectDeviceType_UnasWithoutDriveData_FallsBackToMacOui (line 2806) | [Fact] method ProtectCameraCollection_IsDriveDevice_ReturnsTrueForKnownMac (line 2827) | [Fact] method ProtectCameraCollection_IsDriveDevice_ReturnsFalseForUnknownMac (line 2837) | [Fact] method ProtectCameraCollection_DriveDeviceCount_ReturnsCorrectCount (line 2848) | [Fact] method DetectDeviceType_DriveDeviceTakesPriorityOverNamePattern (line 2859) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Services/FingerprintDetectorTests.cs class FingerprintDetectorTests (line 13) | public class FingerprintDetectorTests method FingerprintDetectorTests (line 17) | public FingerprintDetectorTests() method Constructor_WithoutDatabase_CreatesInstance (line 24) | [Fact] method Constructor_WithDatabase_CreatesInstance (line 31) | [Fact] method Detect_CameraDevCat_ReturnsCamera (line 43) | [Theory] method Detect_SecuritySystemDevCat_ReturnsSecuritySystem (line 61) | [Theory] method Detect_SmartLightingDevCat_ReturnsSmartLighting (line 78) | [Theory] method Detect_SmartPlugDevCat_ReturnsSmartPlug (line 96) | [Theory] method Detect_ThermostatDevCat_ReturnsSmartThermostat (line 113) | [Theory] method Detect_SmartLockDevCat_ReturnsSmartLock (line 129) | [Theory] method Detect_SmartSensorDevCat_ReturnsSmartSensor (line 145) | [Theory] method Detect_SmartApplianceDevCat_ReturnsSmartAppliance (line 164) | [Theory] method Detect_SmartHubDevCat_ReturnsSmartHub (line 185) | [Theory] method Detect_RoboticVacuumDevCat_ReturnsRoboticVacuum (line 202) | [Theory] method Detect_SmartTVDevCat_ReturnsSmartTV (line 218) | [Theory] method Detect_StreamingDeviceDevCat_ReturnsStreamingDevice (line 235) | [Theory] method Detect_SmartSpeakerDevCat_ReturnsSmartSpeaker (line 253) | [Theory] method Detect_MediaPlayerDevCat_ReturnsMediaPlayer (line 270) | [Theory] method Detect_GameConsoleDevCat_ReturnsGameConsole (line 290) | [Fact] method Detect_LaptopDevCat_ReturnsLaptop (line 304) | [Fact] method Detect_DesktopDevCat_ReturnsDesktop (line 314) | [Theory] method Detect_ServerDevCat_ReturnsServer (line 327) | [Fact] method Detect_SmartphoneDevCat_ReturnsSmartphone (line 341) | [Theory] method Detect_TabletDevCat_ReturnsTablet (line 357) | [Fact] method Detect_NasDevCat_ReturnsNas (line 371) | [Theory] method Detect_VoIPDevCat_ReturnsVoIP (line 387) | [Theory] method Detect_GenericPhoneDevCat26_ReturnsSmartphone (line 400) | [Fact] method Detect_IoTGenericDevCat_ReturnsIoTGeneric (line 416) | [Theory] method Detect_AccessPointDevCat_ReturnsAccessPoint (line 437) | [Theory] method Detect_SwitchDevCat_ReturnsSwitch (line 449) | [Fact] method Detect_RouterDevCat_ReturnsRouter (line 459) | [Theory] method Detect_PrinterDevCat_ReturnsPrinter (line 476) | [Theory] method Detect_ScannerDevCat_ReturnsScanner (line 489) | [Fact] method Detect_DevIdOverrideWithDatabase_ResolvesViaDatabase (line 503) | [Fact] method Detect_DevIdOverrideWithoutDatabase_FallsBackToDevCat (line 528) | [Fact] method Detect_DevIdOverrideWithMetadata_IncludesMetadata (line 546) | [Fact] method Detect_NoFingerprintData_ReturnsUnknown (line 579) | [Fact] method Detect_UnmappedDevCat_ReturnsUnknown (line 589) | [Fact] method Detect_DevIdOverrideResolved_HasHighestConfidence (line 603) | [Fact] method Detect_DevCat_HasHighConfidence (line 622) | [Fact] method Detect_SecurityDevices_RecommendSecurityNetwork (line 636) | [Theory] method Detect_IoTDevices_RecommendIoTNetwork (line 648) | [Theory] method Detect_UserDevices_RecommendCorporateNetwork (line 662) | [Theory] method Detect_MediaDevices_RecommendIoTNetwork (line 676) | [Theory] method Detect_InfrastructureDevices_RecommendManagementNetwork (line 689) | [Theory] method Detect_WithDatabase_IncludesVendorName (line 706) | [Fact] method Detect_WithDatabase_IncludesTypeName (line 725) | [Fact] method Detect_DevIdOverrideUnknownType_FallsBackToDevCat (line 740) | [Fact] method Detect_WithDatabaseLookup_UsesDevTypeId (line 756) | [Fact] method Detect_DevIdOverrideCamera_ReturnsCamera (line 773) | [Fact] method Detect_DevIdOverrideSmartHub_ReturnsSmartHub (line 787) | [Fact] method Detect_DevIdOverrideSpeaker_ReturnsSmartSpeaker (line 801) | [Fact] method Detect_DevIdOverrideLighting_ReturnsSmartLighting (line 815) | [Fact] method Detect_DevIdOverrideThermostat_ReturnsSmartThermostat (line 829) | [Fact] method Detect_DevIdOverrideLock_ReturnsSmartLock (line 843) | [Fact] method Detect_DevIdOverrideVacuum_ReturnsRoboticVacuum (line 857) | [Fact] method Detect_DevIdOverrideGameConsole_ReturnsGameConsole (line 871) | [Fact] method Detect_DevIdOverridePrinter_ReturnsPrinter (line 885) | [Fact] method Detect_DevIdOverrideNas_ReturnsNas (line 899) | [Fact] method Detect_DevIdOverrideSmartPlug_ReturnsSmartPlug (line 913) | [Fact] method Detect_DevIdOverrideSmartTv_ReturnsSmartTV (line 927) | [Fact] method Detect_DevIdOverrideVoIP_ReturnsVoIP (line 941) | [Fact] method Detect_DevIdOverrideNoDevTypeId_FallsBackToDevCat (line 955) | [Fact] method Detect_DevIdOverrideUnmappedDevTypeId_FallsBackToDevCat (line 970) | [Fact] method GetRecommendedNetwork_Camera_ReturnsSecurity (line 989) | [Fact] method GetRecommendedNetwork_SmartPlug_ReturnsIoT (line 996) | [Fact] method GetRecommendedNetwork_Desktop_ReturnsCorporate (line 1003) | [Fact] method GetRecommendedNetwork_AccessPoint_ReturnsManagement (line 1010) | [Fact] method GetRecommendedNetwork_Unknown_ReturnsUnknown (line 1017) | [Fact] method GetRecommendedNetwork_IoTCategory_ReturnsIoT (line 1024) | [Theory] method GetRecommendedNetwork_InfrastructureCategory_ReturnsManagement (line 1043) | [Theory] method GetRecommendedNetwork_CorporateCategory_ReturnsCorporate (line 1053) | [Theory] method Detect_DevTypeId_CameraTypes_MapsCorrectly (line 1073) | [Theory] method Detect_DevTypeId_LightingTypes_MapsCorrectly (line 1093) | [Theory] method Detect_DevTypeId_PlugTypes_MapsCorrectly (line 1111) | [Theory] method Detect_DevTypeId_HvacTypes_MapsCorrectly (line 1127) | [Theory] method Detect_DevTypeId_LockTypes_MapsCorrectly (line 1144) | [Theory] method Detect_DevTypeId_SensorTypes_MapsCorrectly (line 1160) | [Theory] method Detect_DevTypeId_ApplianceTypes_MapsCorrectly (line 1179) | [Theory] method Detect_DevTypeId_HubTypes_MapsCorrectly (line 1199) | [Theory] method Detect_DevTypeId_VacuumTypes_MapsCorrectly (line 1216) | [Theory] method Detect_DevTypeId_TvTypes_MapsCorrectly (line 1231) | [Theory] method Detect_DevTypeId_StreamingTypes_MapsCorrectly (line 1247) | [Theory] method Detect_DevTypeId_SpeakerTypes_MapsCorrectly (line 1264) | [Theory] method Detect_DevTypeId_MediaPlayerTypes_MapsCorrectly (line 1280) | [Theory] method Detect_DevTypeId_ComputerTypes_MapsCorrectly (line 1300) | [Theory] method Detect_DevTypeId_StorageTypes_MapsCorrectly (line 1319) | [Theory] method Detect_DevTypeId_MobileTypes_MapsCorrectly (line 1334) | [Theory] method Detect_DevTypeId_VoIPTypes_MapsCorrectly (line 1353) | [Theory] method Detect_DevTypeId_InfrastructureTypes_MapsCorrectly (line 1369) | [Theory] method Detect_DevTypeId_PrinterTypes_MapsCorrectly (line 1389) | [Theory] method Detect_DevTypeId_GenericIoTTypes_MapsCorrectly (line 1406) | [Theory] method Detect_DevCat_MapsCorrectly (line 1429) | [Theory] method Detect_DevCatWithDevIdOverride_IncludesUnmatchedInMetadata (line 1446) | [Fact] method Detect_InvalidDevTypeId_FallsBackToDevCat (line 1460) | [Fact] method Detect_EmptyDevTypeId_FallsBackToDevCat (line 1475) | [Fact] method Detect_WhitespaceDevTypeId_FallsBackToDevCat (line 1489) | [Fact] method Detect_NullDatabase_HandlesGracefully (line 1507) | [Fact] method Detect_DevIdOverrideNotInDatabase_FallsBackToDevCat (line 1519) | [Fact] method Detect_NoDevCatNoDevIdOverride_ReturnsUnknown (line 1533) | [Fact] method Detect_NullClient_ReturnsUnknown (line 1544) | [Fact] method Detect_WithVendorInfo_IncludesVendorName (line 1554) | [Fact] method Detect_DevIdOverride_NoDevVendor_FallsBackToDeviceEntryVendorId (line 1570) | [Fact] method Detect_DevIdOverride_WithDevVendor_UsesDeviceEntryVendorNotClient (line 1599) | [Fact] method Detect_DevIdOverride_NoDevVendor_NoDeviceEntryVendorId_ReturnsNullVendor (line 1628) | [Fact] method Detect_DevIdOverride_InvalidDeviceEntryVendorId_ReturnsNullVendor (line 1652) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Services/FirewallZoneLookupTests.cs class FirewallZoneLookupTests (line 11) | public class FirewallZoneLookupTests method CreateStandardZones (line 13) | private static List CreateStandardZones() => method Constructor_WithZones_LoadsAllZones (line 25) | [Fact] method Constructor_WithNullZones_HasNoData (line 40) | [Fact] method Constructor_WithEmptyZones_HasNoData (line 52) | [Fact] method GetZoneById_ExistingId_ReturnsZone (line 68) | [Fact] method GetZoneById_NonExistingId_ReturnsNull (line 84) | [Fact] method GetZoneById_NullId_ReturnsNull (line 98) | [Fact] method GetZoneById_CaseInsensitive (line 112) | [Fact] method GetZoneByKey_ExistingKey_ReturnsZone (line 131) | [Fact] method GetZoneByKey_CaseInsensitive (line 147) | [Fact] method IsDmzZone_DmzZoneId_ReturnsTrue (line 166) | [Fact] method IsDmzZone_NonDmzZoneId_ReturnsFalse (line 180) | [Fact] method IsDmzZone_NullZoneId_ReturnsFalse (line 194) | [Fact] method IsDmzZone_NonExistentZoneId_ReturnsFalse (line 208) | [Fact] method IsHotspotZone_HotspotZoneId_ReturnsTrue (line 226) | [Fact] method IsHotspotZone_NonHotspotZoneId_ReturnsFalse (line 240) | [Fact] method IsHotspotZone_NullZoneId_ReturnsFalse (line 254) | [Fact] method IsExternalZone_ExternalZoneId_ReturnsTrue (line 272) | [Fact] method IsExternalZone_NonExternalZoneId_ReturnsFalse (line 286) | [Fact] method IsInternalZone_InternalZoneId_ReturnsTrue (line 304) | [Fact] method IsInternalZone_NonInternalZoneId_ReturnsFalse (line 318) | [Fact] method GetExternalZoneId_ReturnsCorrectId (line 336) | [Fact] method GetDmzZoneId_ReturnsCorrectId (line 350) | [Fact] method GetHotspotZoneId_ReturnsCorrectId (line 364) | [Fact] method GetExternalZoneId_NoZoneData_ReturnsNull (line 378) | [Fact] method ValidateWanZoneAssumption_CorrectExternalZone_ReturnsTrue (line 395) | [Fact] method ValidateWanZoneAssumption_WrongZone_ReturnsFalseWithWarning (line 410) | [Fact] method ValidateWanZoneAssumption_UnknownZoneId_ReturnsFalseWithWarning (line 426) | [Fact] method ValidateWanZoneAssumption_NoZoneData_ReturnsTrue (line 442) | [Fact] method ValidateWanZoneAssumption_NullZoneId_ReturnsTrue (line 456) | [Fact] method ValidateExternalZoneId_MatchesLookup_ReturnsTrue (line 474) | [Fact] method ValidateExternalZoneId_DoesNotMatchLookup_ReturnsFalseWithWarning (line 489) | [Fact] method ValidateExternalZoneId_NoExternalZoneInLookup_ReturnsFalseWithWarning (line 505) | [Fact] method ValidateExternalZoneId_NoZoneData_ReturnsTrue (line 525) | [Fact] method ValidateExternalZoneId_NullDeterminedId_ReturnsTrue (line 538) | [Fact] FILE: tests/NetworkOptimizer.Audit.Tests/Services/MacOuiDetectorTests.cs class MacOuiDetectorTests (line 10) | public class MacOuiDetectorTests method Detect_NullMac_ReturnsUnknown (line 16) | [Fact] method Detect_EmptyMac_ReturnsUnknown (line 23) | [Fact] method Detect_CuratedOui_ReturnsExpectedCategory (line 34) | [Theory] method Detect_MacWithDashes_NormalizesCorrectly (line 59) | [Fact] method Detect_MacWithDots_NormalizesCorrectly (line 69) | [Fact] method Detect_MacWithNoSeparators_NormalizesCorrectly (line 79) | [Fact] method Detect_ShortMac_ReturnsUnknown (line 89) | [Fact] method Detect_UnknownOui_ReturnsUnknown (line 102) | [Fact] method Detect_CuratedOui_IncludesMetadata (line 115) | [Fact] method Detect_CloudCameraOui_ReturnsCloudCamera (line 130) | [Theory] method Detect_SelfHostedCameraOui_ReturnsCamera (line 148) | [Theory] method Detect_AdditionalIotDevices_ReturnsCorrectCategory (line 165) | [Theory] method Detect_GameConsolesAndStreaming_ReturnsCorrectCategory (line 197) | [Theory] method Detect_RingAndAmazonOuis_ReturnsCorrectCategory (line 215) | [Theory] method Detect_SonosOuis_ReturnsMediaPlayer (line 233) | [Theory] FILE: tests/NetworkOptimizer.Core.Tests/Caching/AsyncCachedValueTests.cs class AsyncCachedValueTests (line 7) | public class AsyncCachedValueTests method Constructor_NullFactory_ThrowsArgumentNullException (line 11) | [Fact] method Constructor_ValidParameters_CreatesInstance (line 22) | [Fact] method GetAsync_FirstCall_ExecutesFactory (line 36) | [Fact] method GetAsync_SecondCallWithinExpiry_ReturnsCachedValue (line 57) | [Fact] method GetAsync_CallAfterExpiry_RefreshesCacheAsync (line 80) | [Fact] method GetAsync_ForceRefresh_AlwaysExecutesFactory (line 104) | [Fact] method GetAsync_ConcurrentCalls_OnlyExecutesFactoryOnce (line 129) | [Fact] method GetAsync_FactoryThrowsException_PropagatesException (line 158) | [Fact] method GetAsync_FactoryReturnsNull_CachesAndReturnsNull (line 174) | [Fact] method Invalidate_ClearsCache_NextCallRefreshes (line 202) | [Fact] method Invalidate_MultipleCalls_DoesNotThrow (line 226) | [Fact] method Invalidate_BeforeAnyGet_DoesNotThrow (line 247) | [Fact] method GetAsync_ZeroExpiry_AlwaysRefreshes (line 266) | [Fact] method GetAsync_VeryLongExpiry_NeverExpiresInReasonableTime (line 291) | [Fact] method GetAsync_AsyncFactory_ProperlyAwaits (line 318) | [Fact] FILE: tests/NetworkOptimizer.Core.Tests/Extensions/ServiceProviderExtensionsTests.cs class ServiceProviderExtensionsTests (line 8) | public class ServiceProviderExtensionsTests type ITestService (line 10) | private interface ITestService method GetValue (line 12) | string GetValue(); class TestService (line 15) | private class TestService : ITestService method GetValue (line 17) | public string GetValue() => "test-value"; class DisposableTestService (line 20) | private class DisposableTestService : ITestService, IDisposable method GetValue (line 23) | public string GetValue() => IsDisposed ? throw new ObjectDisposedExc... method Dispose (line 24) | public void Dispose() => IsDisposed = true; method WithScopedService_ResolvesServiceAndExecutesAction (line 29) | [Fact] method WithScopedService_DisposesScope (line 44) | [Fact] method WithScopedService_ServiceNotRegistered_ThrowsException (line 66) | [Fact] method WithScopedService_ActionReturnsNull_ReturnsNull (line 80) | [Fact] method WithScopedService_ActionThrows_PropagatesException (line 95) | [Fact] method WithScopedService_ReturnsDifferentTypes (line 111) | [Fact] method WithScopedServiceAsync_ResolvesServiceAndExecutesAction (line 134) | [Fact] method WithScopedServiceAsync_DisposesScope (line 154) | [Fact] method WithScopedServiceAsync_ActionThrows_PropagatesException (line 178) | [Fact] method WithScopedServiceAsync_SyncAction_WorksCorrectly (line 198) | [Fact] method WithScopedServiceAsyncVoid_ResolvesServiceAndExecutesAction (line 218) | [Fact] method WithScopedServiceAsyncVoid_DisposesScope (line 240) | [Fact] method WithScopedServiceAsyncVoid_ActionThrows_PropagatesException (line 263) | [Fact] FILE: tests/NetworkOptimizer.Core.Tests/Helpers/CloudflareIpRangesTests.cs class CloudflareIpRangesTests (line 7) | public class CloudflareIpRangesTests method IsCloudflareOnly_AllCloudflareIPv4Ranges_ReturnsTrue (line 11) | [Fact] method IsCloudflareOnly_AllCloudflareRanges_ReturnsTrue (line 17) | [Fact] method IsCloudflareOnly_SubsetOfCloudflareRanges_ReturnsTrue (line 23) | [Fact] method IsCloudflareOnly_MixedCloudflareAndOther_ReturnsFalse (line 30) | [Fact] method IsCloudflareOnly_OnlyNonCloudflare_ReturnsFalse (line 37) | [Fact] method IsCloudflareOnly_EmptyList_ReturnsFalse (line 44) | [Fact] method IsCloudflareOnly_Null_ReturnsFalse (line 50) | [Fact] method IsCloudflareOnly_SingleCloudflareRange_ReturnsTrue (line 56) | [Fact] method IsCloudflareOnly_IPv6CloudflareRanges_ReturnsTrue (line 62) | [Fact] method IsCloudflareOnly_SingleIpInCloudflareRange_ReturnsTrue (line 69) | [Fact] method IsCloudflareOnly_SingleIpNotInCloudflare_ReturnsFalse (line 76) | [Fact] method IsCloudflareOnly_SubnetWithinCloudflareRange_ReturnsTrue (line 83) | [Fact] method IsCloudflareOnly_SubnetLargerThanCloudflareRange_ReturnsFalse (line 90) | [Fact] method IsCloudflareOnly_CloudflarePlusFewManagementIPs_ReturnsTrue (line 97) | [Fact] method IsCloudflareOnly_CloudflarePlusSlash32_ReturnsTrue (line 108) | [Fact] method IsCloudflareOnly_CloudflarePlusNonCfSubnet_ReturnsFalse (line 115) | [Fact] method IsCloudflareOnly_CloudflarePlusTooManyManagementIPs_ReturnsFalse (line 123) | [Fact] method IsCloudflareOnly_OnlyManagementIPsNoCf_ReturnsFalse (line 132) | [Fact] method ContainsCloudflareRange_MixedList_ReturnsTrue (line 144) | [Fact] method ContainsCloudflareRange_NoCloudflare_ReturnsFalse (line 151) | [Fact] method ContainsCloudflareRange_Null_ReturnsFalse (line 158) | [Fact] method IPv4Ranges_Contains15Entries (line 168) | [Fact] method IPv6Ranges_Contains7Entries (line 174) | [Fact] method AllRanges_ContainsBothIPv4AndIPv6 (line 180) | [Fact] FILE: tests/NetworkOptimizer.Core.Tests/Helpers/DisplayFormattersTests.cs class DisplayFormattersTests (line 7) | public class DisplayFormattersTests method StripDevicePrefix_NullOrWhitespace_ReturnsEmptyOrOriginal (line 11) | [Theory] method StripDevicePrefix_BracketedPrefix_StripsPrefix (line 21) | [Theory] method StripDevicePrefix_ParentheticalPrefix_StripsPrefix (line 33) | [Theory] method StripDevicePrefix_DashSeparatedPrefix_StripsPrefix (line 43) | [Theory] method StripDevicePrefix_ColonSeparatedPrefix_StripsPrefix (line 53) | [Theory] method StripDevicePrefix_NoPrefixOrSuffix_ReturnsOriginal (line 63) | [Theory] method StripDevicePrefix_InvalidPrefixFormat_ReturnsOriginal (line 73) | [Theory] method StripDevicePrefix_CurlyBracePrefix_StripsPrefix (line 84) | [Theory] method StripDevicePrefix_PlainSuffix_StripsSuffix (line 94) | [Theory] method StripDevicePrefix_BracketedSuffix_StripsSuffix (line 106) | [Theory] method StripDevicePrefix_ParentheticalSuffix_StripsSuffix (line 116) | [Theory] method StripDevicePrefix_CurlyBraceSuffix_StripsSuffix (line 126) | [Theory] method StripDevicePrefix_BothPrefixAndSuffix_StripsBoth (line 136) | [Theory] method StripDevicePrefix_CaseInsensitive_StripsCorrectly (line 146) | [Theory] method StripDevicePrefix_NonKeywordSuffix_PreservesSuffix (line 157) | [Theory] method ExtractNetworkName_NullOrWhitespace_ReturnsNetwork (line 171) | [Theory] method ExtractNetworkName_WithPrefixAndSuffix_ExtractsCleanName (line 181) | [Theory] method ExtractNetworkName_OnlyBrackets_ReturnsOriginalBecauseNoContentAfterBracket (line 191) | [Fact] method FormatDeviceName_DifferentTypes_FormatsCorrectly (line 204) | [Theory] method FormatDeviceName_AlreadyPrefixed_StripsAndReapplies (line 215) | [Fact] method FormatDeviceName_GatewayOverridesAP (line 222) | [Fact] method ParseDeviceOnNetworkDevice_Null_ReturnsEmptyTuple (line 234) | [Fact] method ParseDeviceOnNetworkDevice_Empty_ReturnsEmptyTuple (line 243) | [Fact] method ParseDeviceOnNetworkDevice_Whitespace_ReturnsWhitespace (line 252) | [Fact] method ParseDeviceOnNetworkDevice_NoOnPattern_ReturnsOriginal (line 262) | [Fact] method ParseDeviceOnNetworkDevice_ValidPattern_ParsesCorrectly (line 273) | [Fact] method ParseDeviceOnNetworkDevice_WithBandSuffix_StripsBand (line 284) | [Fact] method ParseDeviceOnNetworkDevice_With24GHzBand_StripsBand (line 295) | [Fact] method GetNetworkDeviceLabel_NullOrWhitespace_ReturnsDevice (line 310) | [Theory] method GetNetworkDeviceLabel_KnownTypes_ReturnsFormattedLabel (line 320) | [Theory] method GetNetworkDeviceLabel_UnknownTypes_ReturnsWithColon (line 336) | [Theory] method FormatNetworkWithVlan_WithVlanId_FormatsCorrectly (line 350) | [Fact] method FormatNetworkWithVlan_NoVlanId_ReturnsNetworkName (line 357) | [Fact] method FormatNetworkWithVlan_NullNetworkName_ReturnsUnknown (line 364) | [Fact] method FormatNetworkWithVlan_NullBoth_ReturnsUnknown (line 371) | [Fact] method FormatVlanDisplay_NativeVlan_ShowsNativeIndicator (line 382) | [Fact] method FormatVlanDisplay_NonNativeVlan_ShowsJustNumber (line 389) | [Theory] method GetLinkStatus_NotUp_ReturnsDown (line 403) | [Fact] method GetLinkStatus_VariousSpeeds_FormatsCorrectly (line 410) | [Theory] method GetPoeStatus_WithPower_ShowsWatts (line 427) | [Fact] method GetPoeStatus_ModeOff_ShowsOff (line 434) | [Fact] method GetPoeStatus_EnabledButNoPower_ShowsOff (line 441) | [Fact] method GetPoeStatus_NotEnabled_ShowsNA (line 448) | [Fact] method GetPortSecurityStatus_VariousConfigs_FormatsCorrectly (line 459) | [Theory] method GetPortSecurityStatus_Dot1xSecured_Returns8021X (line 473) | [Theory] method GetPortSecurityStatus_NonSecuredDot1x_ReturnsDash (line 482) | [Theory] method GetPortSecurityStatus_MacCountTakesPriorityOverDot1x (line 492) | [Fact] method GetIsolationStatus_BooleanValue_FormatsCorrectly (line 504) | [Theory] method GetWanDnsDisplay_NotConfigured_ReturnsNotConfigured (line 517) | [Fact] method GetWanDnsDisplay_MatchedServers_ShowsProviderInfo (line 535) | [Fact] method GetWanDnsDisplay_WrongOrder_ShowsCorrectPrefix (line 554) | [Fact] method GetWanDnsDisplay_WithMismatch_ShowsIncorrect (line 572) | [Fact] method GetWanDnsStatus_NotConfigured_ReturnsNotConfigured (line 592) | [Fact] method GetWanDnsStatus_MatchedCorrectOrder_ReturnsMatched (line 599) | [Fact] method GetWanDnsStatus_MatchedWrongOrder_ReturnsWrongOrder (line 606) | [Fact] method GetWanDnsStatus_Mismatched_ReturnsMismatched (line 613) | [Fact] method GetDeviceDnsDisplay_NoDevices_ReturnsNoDevices (line 620) | [Fact] method GetDeviceDnsDisplay_AllPointToGateway_ReturnsCorrectMessage (line 627) | [Fact] method GetDeviceDnsDisplay_SomeMisconfigured_ShowsCount (line 634) | [Fact] method GetDeviceDnsDisplay_WithDhcpDevices_ShowsDhcpCount (line 641) | [Fact] method GetDeviceDnsStatus_NoDevices_ReturnsNoDevices (line 648) | [Fact] method GetDeviceDnsStatus_Correct_ReturnsCorrect (line 655) | [Fact] method GetDeviceDnsStatus_Misconfigured_ReturnsMisconfigured (line 662) | [Fact] method GetDohStatusDisplay_NotEnabled_ReturnsNotConfigured (line 669) | [Fact] method GetDohStatusDisplay_WithProviders_ShowsProviders (line 676) | [Fact] method GetDohStatusDisplay_AutoMode_ShowsAutoSuffix (line 683) | [Fact] method GetDohStatusDisplay_WithConfigNames_ShowsConfigNames (line 690) | [Fact] method GetProtectionStatusDisplay_FullProtection_ReturnsFullProtection (line 700) | [Fact] method GetProtectionStatusDisplay_PartialProtection_ShowsProtectionList (line 708) | [Fact] method GetProtectionStatusDisplay_OnlyDoH_ShowsDoHOnly (line 719) | [Fact] method GetProtectionStatusDisplay_NoProtection_ReturnsNotProtected (line 727) | [Fact] method GetCorrectDnsOrder_WithDns2First_ReordersToDns1First (line 739) | [Fact] method GetCorrectDnsOrder_AlreadyCorrect_ReturnsSameOrder (line 750) | [Fact] method FormatOrdinal_ReturnsCorrectSuffix (line 765) | [Theory] method NormalizeWanDisplay_NormalizesCorrectly (line 796) | [Theory] method IsGenericWanName_GenericNames_ReturnsTrue (line 810) | [Theory] method IsGenericWanName_CustomNames_ReturnsFalse (line 829) | [Theory] FILE: tests/NetworkOptimizer.Core.Tests/Helpers/NetworkUtilitiesTests.cs class NetworkUtilitiesTests (line 8) | public class NetworkUtilitiesTests method IsIpInSubnet_String_ValidCases (line 12) | [Theory] method IsIpInSubnet_String_NullOrEmptySubnet_ReturnsFalse (line 28) | [Theory] method IsIpInSubnet_String_InvalidIp_ReturnsFalse (line 36) | [Theory] method IsIpInSubnet_String_InvalidSubnetFormat_ReturnsFalse (line 44) | [Theory] method IsIpInSubnet_String_SlashZero_MatchesAll (line 55) | [Fact] method IsIpInSubnet_String_Slash32_ExactMatch (line 63) | [Fact] method IsIpInSubnet_String_NonStandardPrefixLengths (line 71) | [Theory] method IsIpInSubnet_IPAddress_ValidCases (line 86) | [Theory] method IsIpInSubnet_IPv6_ValidCases (line 99) | [Theory] method IsIpInSubnet_IPv6_Slash128_ExactMatch (line 111) | [Fact] method IsIpInSubnet_IPv6_SlashZero_MatchesAll (line 119) | [Fact] method IsIpInSubnet_MixedAddressFamilies_ReturnsFalse (line 127) | [Fact] method IsIpInSubnet_IPv6_LinkLocal (line 137) | [Fact] method IsIpInSubnet_IPv6_Slash48 (line 146) | [Theory] method IsIpInAnySubnet_IpInFirstSubnet_ReturnsTrue (line 159) | [Fact] method IsIpInAnySubnet_IpInLastSubnet_ReturnsTrue (line 166) | [Fact] method IsIpInAnySubnet_IpNotInAnySubnet_ReturnsFalse (line 173) | [Fact] method IsIpInAnySubnet_EmptySubnetList_ReturnsFalse (line 180) | [Fact] method IsIpInAnySubnet_InvalidIp_ReturnsFalse (line 186) | [Fact] method IsIpInAnySubnet_SubnetListWithNullAndEmpty_SkipsThem (line 193) | [Fact] method IsIpInAnySubnet_ExternalDnsNotInInternalSubnets (line 200) | [Fact] method IsPrivateIpAddress_PrivateIps_ReturnsTrue (line 226) | [Theory] method IsPrivateIpAddress_PrivateIpv6_ReturnsTrue (line 242) | [Theory] method IsPrivateIpAddress_PublicIpv6_ReturnsFalse (line 254) | [Theory] method IsPrivateIpAddress_PublicIps_ReturnsFalse (line 262) | [Theory] method IsPrivateIpAddress_InvalidIp_ReturnsFalse (line 276) | [Theory] method IsPublicIpAddress_ValidCases (line 289) | [Theory] method IsPublicIpAddress_InvalidIp_ReturnsFalse (line 300) | [Fact] method CidrCoversSubnet_IPv4_ValidCases (line 310) | [Theory] method CidrCoversSubnet_IPv6_ValidCases (line 322) | [Theory] method CidrCoversSubnet_MixedFamilies_ReturnsFalse (line 332) | [Fact] method CidrCoversSubnet_InvalidInput_ReturnsFalse (line 339) | [Theory] method ExpandIpRange_SingleIp_ReturnsSingleIp (line 353) | [Fact] method ExpandIpRange_NullOrEmpty_ReturnsEmptyList (line 360) | [Fact] method ExpandIpRange_ValidRange_ReturnsAllIps (line 367) | [Fact] method ExpandIpRange_TwoIpRange_ReturnsBothIps (line 377) | [Fact] method ExpandIpRange_CrossSubnetRange_ReturnsSingleValue (line 385) | [Fact] method ExpandIpRange_ReversedRange_ReturnsSingleValue (line 393) | [Fact] method ExpandIpRange_InvalidIp_ReturnsSingleValue (line 401) | [Fact] method ParseCidr_ValidIPv4_ReturnsNetworkAndPrefix (line 412) | [Fact] method ParseCidr_ValidIPv6_ReturnsNetworkAndPrefix (line 421) | [Fact] method ParseCidr_InvalidInput_ReturnsNull (line 430) | [Theory] method NormalizeControllerUrl_NullOrWhitespace_ReturnsAsIs (line 446) | [Theory] method NormalizeControllerUrl_BareHostname_PrependsHttps (line 455) | [Theory] method NormalizeControllerUrl_WithScheme_PreservesScheme (line 464) | [Theory] method NormalizeControllerUrl_TrailingSlash_Removed (line 474) | [Theory] method NormalizeControllerUrl_WithPath_StripsPath (line 483) | [Theory] method NormalizeControllerUrl_NonDefaultPort_PortPreserved (line 493) | [Theory] method NormalizeControllerUrl_DefaultPort_PortOmitted (line 504) | [Theory] method NormalizeControllerUrl_Whitespace_Trimmed (line 512) | [Theory] method NormalizeControllerUrl_QueryAndFragment_Stripped (line 521) | [Theory] FILE: tests/NetworkOptimizer.Diagnostics.Tests/Analyzers/ApLockAnalyzerTests.cs class ApLockAnalyzerTests (line 10) | public class ApLockAnalyzerTests method ApLockAnalyzerTests (line 15) | public ApLockAnalyzerTests() method Analyze_EmptyClients_ReturnsEmptyList (line 21) | [Fact] method Analyze_NoLockedClients_ReturnsEmptyList (line 35) | [Fact] method Analyze_WiredClient_IsIgnored (line 58) | [Fact] method Analyze_LockedClientWithoutApMac_IsIgnored (line 82) | [Fact] method Analyze_LockedWirelessClient_ReturnsIssue (line 106) | [Fact] method Analyze_ApNotFound_ShowsUnknownAp (line 141) | [Fact] method Analyze_MultipleLockedClients_ReturnsAllIssues (line 166) | [Fact] method Analyze_ClientWithRoamCount_IncludesRoamCountInResult (line 213) | [Fact] method Analyze_MobileDevice_ReturnsSeverityWarning (line 249) | [Fact] method Analyze_StationaryDevice_ReturnsSeverityInfo (line 277) | [Fact] method Analyze_UnknownDeviceHighRoamCount_ReturnsSeverityWarning (line 305) | [Fact] method Analyze_UnknownDeviceLowRoamCount_ReturnsSeverityUnknown (line 334) | [Fact] method Analyze_ClientWithName_UsesName (line 367) | [Fact] method Analyze_ClientWithOnlyHostname_UsesHostname (line 396) | [Fact] method Analyze_ClientWithNoNameOrHostname_UsesMac (line 425) | [Fact] method AnalyzeOfflineClients_EmptyHistory_ReturnsEmpty (line 458) | [Fact] method AnalyzeOfflineClients_LockedOfflineClient_ReturnsIssue (line 473) | [Fact] method AnalyzeOfflineClients_ClientCurrentlyOnline_IsExcluded (line 505) | [Fact] method AnalyzeOfflineClients_WiredClient_IsExcluded (line 533) | [Fact] method AnalyzeOfflineClients_ClientWithDisplayName_UsesDisplayName (line 561) | [Fact] method Analyze_MobileDevice_RecommendationSuggestsRemovingLock (line 596) | [Fact] method Analyze_StationaryDevice_RecommendationConfirmsLockIsAppropriate (line 626) | [Fact] FILE: tests/NetworkOptimizer.Diagnostics.Tests/Analyzers/PerformanceAnalyzerTests.cs class PerformanceAnalyzerTests (line 13) | public class PerformanceAnalyzerTests method PerformanceAnalyzerTests (line 18) | public PerformanceAnalyzerTests() method CheckHardwareAcceleration_NoGateway_ReturnsEmpty (line 26) | [Fact] method CheckHardwareAcceleration_Enabled_ReturnsEmpty (line 39) | [Fact] method CheckHardwareAcceleration_Null_ReturnsEmpty (line 52) | [Fact] method CheckHardwareAcceleration_Disabled_ReturnsIssue (line 65) | [Fact] method CheckHardwareAcceleration_Disabled_NetFlowEnabled_Suppressed (line 82) | [Fact] method CheckHardwareAcceleration_Disabled_NetFlowDisabled_ReturnsIssue (line 96) | [Fact] method IsNetFlowEnabled_Enabled_ReturnsTrue (line 111) | [Fact] method IsNetFlowEnabled_Disabled_ReturnsFalse (line 118) | [Fact] method IsNetFlowEnabled_NoSettings_ReturnsFalse (line 125) | [Fact] method IsNetFlowEnabled_NoNetFlowKey_ReturnsFalse (line 131) | [Fact] method CheckJumboFrames_AlreadyEnabled_ReturnsEmpty (line 142) | [Fact] method CheckJumboFrames_NoHighSpeedPorts_ReturnsEmpty (line 153) | [Fact] method CheckJumboFrames_OneHighSpeedPort_ReturnsEmpty (line 164) | [Fact] method CheckJumboFrames_TwoHighSpeedPorts_ReturnsIssue (line 175) | [Fact] method CheckJumboFrames_TenGigPorts_ReturnsIssue (line 189) | [Fact] method CheckJumboFrames_NullSettings_ReturnsIssueIfHighSpeedPorts (line 201) | [Fact] method CheckJumboFrames_UplinkPortsExcluded (line 211) | [Fact] method CheckFlowControl_AlreadyEnabled_ReturnsEmpty (line 232) | [Fact] method CheckFlowControl_FastWan_ReturnsIssue (line 244) | [Fact] method CheckFlowControl_SlowWan_NoMixedSpeeds_ReturnsEmpty (line 260) | [Fact] method CheckFlowControl_MixedSpeedsWithManyWifiDevices_ReturnsIssue (line 272) | [Fact] method CheckFlowControl_MixedSpeedsFewWifiDevices_ReturnsEmpty (line 287) | [Fact] method CheckFlowControl_BothConditions_DescriptionMentionsBoth (line 300) | [Fact] method CheckFlowControl_WanPortsExcludedFromSpeedTiers (line 315) | [Fact] method CheckCellularQos_NoGateway_ReturnsEmpty (line 339) | [Fact] method CheckCellularQos_NoCellularWan_ReturnsEmpty (line 350) | [Fact] method CheckCellularQos_CellularWan_NoQosRules_ReturnsAllCategories (line 362) | [Fact] method CheckCellularQos_CellularWan_AllCategoriesCovered_ReturnsEmpty (line 377) | [Fact] method CheckCellularQos_FailoverMode_RecommendationSeverity (line 391) | [Fact] method CheckCellularQos_LoadBalanced_InfoSeverity (line 404) | [Fact] method CheckCellularQos_SmallDataPlan_RecommendationSeverity (line 417) | [Fact] method CheckCellularQos_LargeDataPlan_LoadBalanced_InfoSeverity (line 431) | [Fact] method CheckCellularQos_AllIssuesAreCellularCategory (line 445) | [Fact] method CheckCellularQos_LteWanType_Detected (line 457) | [Fact] method CheckCellularQos_WirelessLteWanType_Detected (line 469) | [Fact] method CheckCellularQos_RecommendationsContainHowToLink (line 480) | [Fact] method GetTargetedAppIds_NullData_ReturnsEmpty (line 496) | [Fact] method GetTargetedAppIds_DisabledRules_Skipped (line 504) | [Fact] method GetTargetedAppIds_PrioritizeRules_Skipped (line 517) | [Fact] method GetTargetedAppIds_WrongWan_Skipped (line 530) | [Fact] method GetTargetedAppIds_NoWanField_Skipped (line 543) | [Fact] method GetTargetedAppIds_MatchingWan_Collected (line 556) | [Fact] method GetTargetedAppIds_MultipleRules_Aggregated (line 571) | [Fact] method GetTargetedAppIds_NullCellularWanId_AcceptsAllRules (line 585) | [Fact] method IsCellularFailover_NullEnrichedData_ReturnsTrue (line 603) | [Fact] method IsCellularFailover_FailoverOnly_ReturnsTrue (line 613) | [Fact] method IsCellularFailover_Weighted_ReturnsFalse (line 624) | [Fact] method IsCellularFailover_CaseInsensitiveMatch (line 635) | [Fact] method IsCellularFailover_NoMatchingNetworkGroup_ReturnsTrue (line 646) | [Fact] method GetModemDataLimit_NullModem_ReturnsDisabled (line 661) | [Fact] method GetModemDataLimit_NoAdditionalData_ReturnsDisabled (line 670) | [Fact] method GetModemDataLimit_DataLimitEnabled_ReturnsLimit (line 680) | [Fact] method GetModemDataLimit_DataLimitDisabled_ReturnsDisabled (line 691) | [Fact] method GetCellularWanConfigId_NullEnrichedData_ReturnsNull (line 705) | [Fact] method GetCellularWanConfigId_MatchingNetworkGroup_ReturnsId (line 715) | [Fact] method GetCellularWanConfigId_NoMatch_ReturnsNull (line 726) | [Fact] method GlobalSwitchSettings_NullSettings_ReturnsNull (line 741) | [Fact] method GlobalSwitchSettings_ParsesJumboEnabled (line 749) | [Fact] method GlobalSwitchSettings_ParsesFlowControlEnabled (line 760) | [Fact] method GlobalSwitchSettings_ParsesExclusions (line 771) | [Fact] method GlobalSwitchSettings_ExclusionsCaseInsensitive (line 783) | [Fact] method GlobalSwitchSettings_GetEffectiveJumboFrames_NonExcludedUsesGlobal (line 793) | [Fact] method GlobalSwitchSettings_GetEffectiveJumboFrames_ExcludedUsesDeviceLevel (line 803) | [Fact] method GlobalSwitchSettings_GetEffectiveFlowControl_ExcludedUsesDeviceLevel (line 813) | [Fact] method CheckJumboFrames_GlobalOn_ExcludedDeviceOff_ReturnsMismatchIssue (line 827) | [Fact] method CheckJumboFrames_GlobalOn_ExcludedDeviceOn_SuggestsAbsorbingGlobal (line 846) | [Fact] method CheckJumboFrames_GlobalOff_AllExcludedOn_ReturnsPerDeviceIssue (line 867) | [Fact] method CheckJumboFrames_GlobalOff_SomeExcludedOn_ReturnsMismatchWithHighSpeedPorts (line 886) | [Fact] method CheckFlowControl_GlobalOn_ExcludedDeviceOff_ReturnsMismatchIssue (line 917) | [Fact] method CheckFlowControl_GlobalOff_AllExcludedOn_ReturnsPerDeviceIssue (line 938) | [Fact] method CheckFlowControl_GlobalOn_ExcludedDeviceOn_SuggestsAbsorbingGlobal (line 959) | [Fact] method CheckFlowControl_GlobalOn_ExcludedGateway_IgnoresGateway (line 982) | [Fact] method CheckFlowControl_GlobalOff_ExcludedGatewayOn_IgnoresGateway (line 998) | [Fact] method CheckFlowControl_GlobalOn_ProfileWithFcOff_FlagsProfile (line 1015) | [Fact] method CheckFlowControl_GlobalOn_ProfileWithFcOn_NoIssue (line 1033) | [Fact] method CheckFlowControl_GlobalOn_ProfileWithFcNull_NoIssue (line 1049) | [Fact] method CheckFlowControl_GlobalOff_ProfileWithFcOff_NoProfileIssue (line 1065) | [Fact] method CheckFlowControl_GlobalOn_PortWithFcOffProfile_FlagsDevice (line 1081) | [Fact] method CheckFlowControl_GlobalOn_PortFcOffDirect_NoProfile_FlagsDevice (line 1109) | [Fact] method CheckFlowControl_GlobalOn_PortFcOff_ProfileFcNull_StillFlags (line 1130) | [Fact] method CheckFlowControl_GlobalOn_UplinkPortWithFcOff_FlagsUplink (line 1153) | [Fact] method CheckFlowControl_GlobalOn_DownPortWithFcOff_StillFlags (line 1170) | [Fact] method CheckFlowControl_GlobalOn_ExcludedDeviceFcOff_SkipsPortCheck (line 1187) | [Fact] method CheckFlowControl_GlobalOn_NoProfiles_NoProfileIssues (line 1208) | [Fact] method CheckFlowControl_GlobalOn_MultipleProfilesFcOff_FlagsEach (line 1220) | [Fact] method CountHighSpeedAccessPorts_NoPorts_ReturnsZero (line 1245) | [Fact] method CountHighSpeedAccessPorts_ExcludesUplinks (line 1258) | [Fact] method CountHighSpeedAccessPorts_ExcludesDownPorts (line 1273) | [Fact] method CountHighSpeedAccessPorts_ExcludesWanPorts (line 1288) | [Fact] method CountHighSpeedAccessPorts_AcrossMultipleSwitches (line 1303) | [Fact] method Analyze_PerformanceChecksDisabled_SkipsPerformance (line 1319) | [Fact] method Analyze_CellularChecksDisabled_SkipsCellular (line 1331) | [Fact] method Analyze_BothEnabled_RunsBoth (line 1344) | [Fact] method CreateGateway (line 1362) | private static UniFiDeviceResponse CreateGateway(bool? hardwareOffload... method CreateGatewayWithWan (line 1374) | private static UniFiDeviceResponse CreateGatewayWithWan(string wanKey,... method CreateModem (line 1392) | private static UniFiDeviceResponse CreateModem(bool dataLimitEnabled, ... method CreateSwitch (line 1417) | private static UniFiDeviceResponse CreateSwitch(string id, string name) method CreateSwitchWithPorts (line 1428) | private static UniFiDeviceResponse CreateSwitchWithPorts(params int[] ... method CreateWanNetwork (line 1441) | private static List CreateWanNetwork(int downloadM... method CreateWirelessClients (line 1458) | private static List CreateWirelessClients(int count) method CreateSettings (line 1468) | private static JsonDocument CreateSettings( method CreateSettingsWithNetFlow (line 1487) | private static JsonDocument CreateSettingsWithNetFlow(bool netflowEnab... method CreateEnrichedConfig (line 1508) | private static JsonDocument CreateEnrichedConfig( method CreateQosRuleJson (line 1526) | private static string CreateQosRuleJson( method CreateQosRulesDoc (line 1542) | private static JsonDocument CreateQosRulesDoc(string[] ruleJsons) method CreateQosRulesForAllCategories (line 1547) | private static JsonDocument CreateQosRulesForAllCategories(string wanId) FILE: tests/NetworkOptimizer.Diagnostics.Tests/Analyzers/PortProfile8021xAnalyzerTests.cs class PortProfile8021xAnalyzerTests (line 8) | public class PortProfile8021xAnalyzerTests method PortProfile8021xAnalyzerTests (line 12) | public PortProfile8021xAnalyzerTests() method Analyze_EmptyProfiles_ReturnsEmptyList (line 19) | [Fact] method Analyze_EmptyNetworks_ReturnsEmptyList (line 33) | [Fact] method Analyze_AccessProfile_ReturnsNoIssues (line 54) | [Fact] method Analyze_DisabledProfile_ReturnsNoIssues (line 78) | [Fact] method Analyze_TrunkProfileWithOneVlan_ReturnsNoIssues (line 106) | [Fact] method Analyze_TrunkProfileWithTwoVlans_ReturnsNoIssues (line 125) | [Fact] method Analyze_TrunkProfileWithThreeVlans_ReturnsIssue (line 144) | [Fact] method Analyze_AllowAllVlans_NullExcludedList_ReturnsIssue (line 170) | [Fact] method Analyze_AllowAllVlans_EmptyExcludedList_ReturnsIssue (line 191) | [Fact] method Analyze_Dot1xCtrlAuto_ReturnsIssue (line 216) | [Fact] method Analyze_Dot1xCtrlAutoUppercase_ReturnsIssue (line 234) | [Fact] method Analyze_Dot1xCtrlNull_ReturnsIssue (line 251) | [Fact] method Analyze_Dot1xCtrlForceAuthorized_ReturnsNoIssues (line 269) | [Fact] method Analyze_Dot1xCtrlForceUnauthorized_ReturnsNoIssues (line 286) | [Fact] method Analyze_MixedProfiles_ReturnsOnlyIssues (line 307) | [Fact] method Analyze_RecommendationText_IncludesProfileName (line 348) | [Fact] method Analyze_RecommendationText_MentionsForceAuthorized (line 366) | [Fact] method Analyze_RecommendationText_AllowAllVlans_SaysAllVlans (line 384) | [Fact] method Analyze_RecommendationText_SpecificVlans_SaysVlanCount (line 402) | [Fact] method Analyze_NetworksWithZeroVlan_AreExcluded (line 426) | [Fact] method Analyze_NetworksWithNullVlan_AreExcluded (line 451) | [Fact] method Analyze_ExcludedNetworkNotInList_IgnoresUnknownNetworkIds (line 476) | [Fact] method CreateSampleNetworks (line 506) | private static List CreateSampleNetworks(int count) method CreateTrunkProfile (line 519) | private static UniFiPortProfile CreateTrunkProfile( FILE: tests/NetworkOptimizer.Diagnostics.Tests/Analyzers/PortProfileSuggestionAnalyzerTests.cs class PortProfileSuggestionAnalyzerTests (line 8) | public class PortProfileSuggestionAnalyzerTests method PortProfileSuggestionAnalyzerTests (line 12) | public PortProfileSuggestionAnalyzerTests() method Analyze_EmptyDevices_ReturnsEmptyList (line 17) | [Fact] method Analyze_NoTrunkPorts_ReturnsEmptyList (line 32) | [Fact] method Analyze_SingleTrunkPort_ReturnsEmptyList (line 63) | [Fact] method Analyze_EmptyNetworks_ReturnsEmptyList (line 93) | [Fact] method Analyze_EmptyPortProfiles_HandlesGracefully (line 108) | [Fact] method Analyze_DeviceWithNullPortTable_HandlesGracefully (line 138) | [Fact] method Analyze_ProfileForcesPoEOff_ExcludesPortsWithPoEEnabled (line 167) | [Fact] method Analyze_ProfileForcesPoEOff_IncludesSfpPortsWithoutPoECapability (line 230) | [Fact] method Analyze_ProfileForcesSpeed_IncludesPortsWithMatchingSpeed (line 288) | [Fact] method Analyze_ProfileForcesSpeed_ExcludesPortsWithDifferentSpeed (line 350) | [Fact] method Analyze_ProfileUsesAutoneg_ExcludesPortsWithForcedSpeed (line 413) | [Fact] method Analyze_ProfileForcesSpeedNoExistingPorts_SuggestsApplyingToSameSpeedPorts (line 475) | [Fact] method Analyze_SomePortsUseProfile_ReturnsExtendUsageSuggestion (line 536) | [Fact] method Analyze_NoPortsUseMatchingProfile_ReturnsApplyExistingSuggestion (line 592) | [Fact] method Analyze_TwoOrMoreMatchingPortsNoProfile_ReturnsCreateNewSuggestion (line 645) | [Fact] method Analyze_SingleMatchingPortNoProfile_ReturnsEmptyList (line 687) | [Fact] method Analyze_ProfileForcesPoEOffAndSpeed_AppliesBothFilters (line 726) | [Fact] method Analyze_AllCandidatesFilteredOut_CreatesFallbackSuggestion (line 801) | [Fact] method Analyze_SomePortsCompatibleSomeExcluded_ReturnsBothSuggestions (line 866) | [Fact] method Analyze_SingleExcludedPort_NoFallbackSuggestion (line 942) | [Fact] method Analyze_ExcludedPortsWithDifferentSpeeds_NoFallbackSuggestion (line 1004) | [Fact] method Analyze_ExcludedPortsWithSameForcedSpeed_CreatesFallbackSuggestion (line 1064) | [Fact] method Analyze_ExcludedAutonegPortsDifferentSpeeds_CreatesFallbackSuggestion (line 1126) | [Fact] method Analyze_ExcludedPortsMixedAutonegSameSpeed_CreatesFallbackSuggestion (line 1190) | [Fact] method Analyze_FiveOrMorePortsForCreateNew_ReturnsSeverityRecommendation (line 1256) | [Fact] method Analyze_FourPortsForCreateNew_ReturnsSeverityInfo (line 1293) | [Fact] method Analyze_ThreeOrMorePortsForExtendUsage_ReturnsSeverityRecommendation (line 1329) | [Fact] method Analyze_TwoPortsForExtendUsage_ReturnsSeverityInfo (line 1382) | [Fact] method Analyze_ExcludesWanAndVpnNetworks (line 1437) | [Fact] method Analyze_ForcedSpeedProfileExcludesDifferentSpeedPorts (line 1488) | [Fact] method Analyze_ForcedSpeedProfileNotEnoughPortsAtSingleSpeed_ReturnsEmpty (line 1555) | [Fact] method Analyze_ExcludedPortsMatchAlternateProfile_SuggestsAlternateProfileInsteadOfCreate (line 1611) | [Fact] method Analyze_ExcludedPortsNoAlternateProfile_CreatesFallbackSuggestion (line 1688) | [Fact] method Analyze_ExcludedPortsAlternateProfileIncompatiblePoE_CreatesFallbackSuggestion (line 1750) | [Fact] method Analyze_OnePortUsingProfileTwoWithout_SuggestsExtendToAll (line 1821) | [Fact] method Analyze_TwoPortsUsingProfileTwoWithout_SuggestsExtendToAll (line 1882) | [Fact] method Analyze_ExtendSuggestion_ExcludesPoEPortsWhenProfileForcesPoEOff (line 1948) | [Fact] method Analyze_ExtendSuggestion_ExcludesForcedSpeedPortsWhenProfileUsesAutoneg (line 2008) | [Fact] method Analyze_ExtendSuggestion_ExcludesPoEDisabledPortsWhenExistingUsersHavePoEEnabled (line 2068) | [Fact] method Analyze_ExtendSuggestion_DoesNotSuggestForPortsWithDifferentProfile (line 2129) | [Fact] method Analyze_ExtendSuggestion_OnlySuggestsForPortsWithoutAnyProfile (line 2192) | [Fact] method Analyze_MultipleProfilesInSameVlanGroup_SuggestsExtendForEach (line 2267) | [Fact] method Analyze_TwoPortsUsingProfileOneWithout_SuggestsExtendToThird (line 2352) | [Fact] method Analyze_ThreePortsUsingProfileOneWithout_SuggestsExtendToFourth (line 2418) | [Fact] method Analyze_ExcludedAutonegPortsAtDifferentSpeeds_MatchAlternateAutonegProfile (line 2487) | [Fact] method Analyze_PortsWithDifferentProfileSameVlans_SuggestsApplyNotExtend (line 2572) | [Fact] method Analyze_AllPortsWithoutMatchingProfile_SuggestsApplyExisting (line 2675) | [Fact] method Analyze_MixedPoEPorts_NoProfilesAssigned_PrefersPoEEnabledPorts (line 2738) | [Fact] method Analyze_MixedPoEPorts_ProfileForcesPoEOff_ExcludesPoEEnabledPorts (line 2829) | [Fact] method Analyze_AllSamePoEState_NoGroupingSplitNeeded (line 2900) | [Fact] method Analyze_CreateNew_MixedPoEPorts_SplitsByPoEState (line 2956) | [Fact] method Analyze_CreateNew_AllSamePoEState_SingleSuggestion (line 3037) | [Fact] method Analyze_ThreePoEStates_GroupsCorrectly (line 3086) | [Fact] method Analyze_PoECapableButDisabled_GroupsWithNonPoEPorts (line 3165) | [Fact] method Analyze_ApplyExisting_PoECapableButDisabled_TreatedAsNonPoE (line 3220) | [Fact] method Analyze_CreateNew_TwoMixedPoEPorts_KeepsTogether (line 3287) | [Fact] method Analyze_CreateNew_ThreeMixedPoEPorts_KeepsTogether (line 3335) | [Fact] method Analyze_CreateNew_FourMixedPoEPorts_SplitsIntoBothViable (line 3383) | [Fact] method Analyze_CreateNew_FiveMixedPoEPorts_SplitsUnevenly (line 3444) | [Fact] method Analyze_CreateNew_AllPoEEnabled_SingleSuggestionWithPoESuffix (line 3508) | [Fact] method Analyze_CreateNew_AllNonPoE_SingleSuggestionWithoutPoESuffix (line 3554) | [Fact] method Analyze_ForcedSpeedProfile_NoExistingUsers_UsesProfileSpeedNotPortSpeed (line 3595) | [Fact] method Analyze_ForcedSpeedProfile_NoExistingUsers_MatchesCorrectSpeedPorts (line 3650) | [Fact] method Analyze_FallbackGrouping_AllAutonegDifferentSpeeds_GroupsByPoE (line 3721) | [Fact] method Analyze_FallbackGrouping_MixedAutonegForcedSameSpeed_GroupsTogether (line 3788) | [Fact] method Analyze_FallbackGrouping_ForcedSpeedDifferentSpeeds_SeparateGroups (line 3848) | [Fact] method Analyze_FallbackGrouping_AutonegLeftoversGroupTogether (line 3906) | [Fact] method Analyze_DisabledPortsBelowThreshold_NoSuggestion (line 3989) | [Fact] method Analyze_DisabledPoEPortsAtThreshold_CreateNewSuggestion (line 4020) | [Fact] method Analyze_DisabledPortsWithExistingProfile_ApplyExistingSuggestion (line 4057) | [Fact] method Analyze_TwoDisabledPortsWithExistingProfile_ApplyExistingSuggestion (line 4102) | [Fact] method Analyze_TwoDisabledPortsWithoutExistingProfile_NoSuggestion (line 4144) | [Fact] method Analyze_FourDisabledPortsWithoutExistingProfile_NoSuggestion (line 4177) | [Fact] method Analyze_DisabledPortsWithExistingProfileAssigned_NoSuggestion (line 4212) | [Fact] method Analyze_UnrestrictedAccessPortsBelowThreshold_NoSuggestion (line 4250) | [Fact] method Analyze_UnrestrictedAccessPortsAtThreshold_CreateNewSuggestion (line 4283) | [Fact] method Analyze_UnrestrictedAccessPortsWithExistingProfile_ApplyExistingSuggestion (line 4324) | [Fact] method Analyze_TwoAccessPortsWithExistingProfile_ApplyExistingSuggestion (line 4374) | [Fact] method Analyze_TwoAccessPortsWithoutExistingProfile_NoSuggestion (line 4421) | [Fact] method Analyze_UnrestrictedAccessPortsDifferentVlans_SeparateSuggestions (line 4457) | [Fact] method Analyze_AccessPortsWithProfileAssigned_NoSuggestion (line 4513) | [Fact] method Analyze_DisabledPortsAcrossMultipleSwitches_CombinedSuggestion (line 4550) | [Fact] method Analyze_AccessPortsWithDirectMacRestriction_ExcludedFromSuggestion (line 4598) | [Fact] FILE: tests/NetworkOptimizer.Diagnostics.Tests/Analyzers/TrunkConsistencyAnalyzerTests.cs class TrunkConsistencyAnalyzerTests (line 8) | public class TrunkConsistencyAnalyzerTests method TrunkConsistencyAnalyzerTests (line 12) | public TrunkConsistencyAnalyzerTests() method Analyze_EmptyDevices_ReturnsEmptyList (line 17) | [Fact] method Analyze_SingleDevice_ReturnsEmptyList (line 32) | [Fact] method Analyze_DevicesNotConnected_ReturnsEmptyList (line 60) | [Fact] method Analyze_EmptyNetworks_ReturnsEmptyList (line 96) | [Fact] method Analyze_EmptyPortProfiles_HandlesGracefully (line 111) | [Fact] method Analyze_TwoConnectedSwitches_BothTrunks_NoMismatch_ReturnsEmpty (line 144) | [Fact] method Analyze_TwoConnectedSwitches_VlanMismatch_ReturnsIssue (line 197) | [Fact] method Analyze_AccessPortsNotTrunks_NoIssues (line 253) | [Fact] method Analyze_VlanOnMostTrunks_HighConfidence (line 309) | [Fact] method Analyze_PortWithProfile_UsesProfileVlans (line 387) | [Fact] method Analyze_MismatchedVlans_GeneratesRecommendation (line 454) | [Fact] method Analyze_UplinkMacNotFoundInDeviceList_ReturnsEmpty (line 514) | [Fact] method Analyze_DuplicateLinkDetection_ProcessesOnlyOnce (line 543) | [Fact] method Analyze_PortNotFoundInPortTable_ReturnsEmpty (line 594) | [Fact] method Analyze_FindsUplinkByPortName (line 635) | [Fact] method Analyze_FallsBackToHighestPortNumber (line 693) | [Fact] method Analyze_NullPortTable_ReturnsEmpty (line 757) | [Fact] FILE: tests/NetworkOptimizer.Diagnostics.Tests/DiagnosticsEngineTests.cs class DiagnosticsEngineTests (line 9) | public class DiagnosticsEngineTests method DiagnosticsEngineTests (line 14) | public DiagnosticsEngineTests() method RunDiagnostics_EmptyData_ReturnsEmptyResult (line 22) | [Fact] method RunDiagnostics_SetsTimestamp (line 42) | [Fact] method RunDiagnostics_SetsDuration (line 60) | [Fact] method RunDiagnostics_AllAnalyzersDisabled_ReturnsEmptyResult (line 78) | [Fact] method RunDiagnostics_OnlyApLockEnabled_RunsOnlyApLock (line 103) | [Fact] method RunDiagnostics_DefaultOptions_RunsAllAnalyzers (line 144) | [Fact] method RunDiagnostics_MultipleIssues_CalculatesTotalCorrectly (line 180) | [Fact] method RunDiagnostics_MobileDevicesLocked_CountsWarnings (line 225) | [Fact] method RunDiagnostics_NullOptions_UsesDefaults (line 270) | [Fact] method RunDiagnostics_WithClientHistory_AnalyzesOfflineClients (line 288) | [Fact] method RunDiagnostics_WithClientHistory_SkipsOnlineClients (line 327) | [Fact] method RunDiagnostics_EmptyClientHistory_DoesNotThrow (line 374) | [Fact] method RunDiagnostics_NullClientHistory_DoesNotThrow (line 390) | [Fact] method RunDiagnostics_ApLockDisabled_DoesNotAnalyzeHistory (line 406) | [Fact] method RunDiagnostics_OnlyTrunkConsistencyEnabled_RunsOnlyTrunk (line 445) | [Fact] method RunDiagnostics_OnlyPortProfileEnabled_RunsOnlyPortProfile (line 486) | [Fact] method RunDiagnostics_TrunkMismatch_FindsIssue (line 527) | [Fact] method RunDiagnostics_SimilarPorts_GeneratesSuggestion (line 546) | [Fact] method CreateSampleClients (line 565) | private static List CreateSampleClients() method CreateSampleDevices (line 578) | private static List CreateSampleDevices() method CreateSampleNetworks (line 592) | private static List CreateSampleNetworks() method CreateDevicesWithTrunkMismatch (line 605) | private static List CreateDevicesWithTrunkMismatch() method CreateDevicesWithSimilarPorts (line 649) | private static List CreateDevicesWithSimilarPorts() method CreateNetworksForPortProfile (line 700) | private static List CreateNetworksForPortProfile() FILE: tests/NetworkOptimizer.Monitoring.Tests/AlertEngineTests.cs class AlertEngineTests (line 10) | public class AlertEngineTests method AlertEngineTests (line 15) | public AlertEngineTests() method Constructor_ThrowsOnNullLogger (line 23) | [Fact] method Constructor_InitializesDefaultThresholds (line 30) | [Fact] method AddThreshold_AddsToCollection (line 43) | [Fact] method AddThreshold_UpdatesExistingWithSameId (line 65) | [Fact] method AddThreshold_ThrowsOnNull (line 94) | [Fact] method RemoveThreshold_RemovesFromCollection (line 101) | [Fact] method RemoveThreshold_NonExistentId_DoesNotThrow (line 121) | [Fact] method GetActiveAlerts_InitiallyEmpty (line 135) | [Fact] method GetAlertHistory_InitiallyEmpty (line 141) | [Fact] method AcknowledgeAlert_UpdatesAlertStatus (line 147) | [Fact] method ResolveAlert_UpdatesAlertStatus (line 187) | [Fact] method ClearOldAlerts_RemovesResolvedOldAlerts (line 222) | [Fact] method EvaluateDeviceMetrics_ThrowsOnNull (line 260) | [Fact] method EvaluateInterfaceMetrics_ThrowsOnNull (line 267) | [Fact] method EvaluateDeviceMetrics_BelowThreshold_ReturnsEmpty (line 274) | [Fact] FILE: tests/NetworkOptimizer.Monitoring.Tests/AlertThresholdTests.cs class AlertThresholdTests (line 10) | public class AlertThresholdTests method IsExceeded_GreaterThan_ReturnsCorrectResult (line 14) | [Theory] method IsExceeded_GreaterThanOrEqual_ReturnsCorrectResult (line 24) | [Theory] method IsExceeded_LessThan_ReturnsCorrectResult (line 34) | [Theory] method IsExceeded_LessThanOrEqual_ReturnsCorrectResult (line 44) | [Theory] method IsExceeded_Equal_ReturnsCorrectResult (line 54) | [Theory] method IsExceeded_NotEqual_ReturnsCorrectResult (line 64) | [Theory] method IsActiveNow_DisabledThreshold_ReturnsFalse (line 77) | [Fact] method IsActiveNow_NoTimeWindows_ReturnsTrue (line 84) | [Fact] method AppliesTo_NoTargets_ReturnsTrue (line 95) | [Fact] method AppliesTo_MatchingDeviceIp_ReturnsTrue (line 104) | [Fact] method AppliesTo_NonMatchingDeviceIp_ReturnsFalse (line 116) | [Fact] method AppliesTo_MatchingDeviceType_ReturnsTrue (line 128) | [Fact] method AppliesTo_NonMatchingDeviceType_ReturnsFalse (line 140) | [Fact] method AppliesTo_Interface_NoTargets_ReturnsTrue (line 156) | [Fact] method AppliesTo_Interface_MatchingDescription_ReturnsTrue (line 165) | [Fact] method AppliesTo_Interface_NonMatchingDescription_ReturnsFalse (line 177) | [Fact] method CreateDeviceMetrics (line 193) | private static DeviceMetrics CreateDeviceMetrics(string ip, string hos... method CreateInterfaceMetrics (line 205) | private static InterfaceMetrics CreateInterfaceMetrics(string name, st... FILE: tests/NetworkOptimizer.Monitoring.Tests/CellularModemStatsTests.cs class CellularModemStatsTests (line 7) | public class CellularModemStatsTests method PrimarySignal_WithBothLteAndNr5g_Prefers5gWithData (line 11) | [Fact] method PrimarySignal_WithEmptyNr5g_FallsBackToLte (line 23) | [Fact] method PrimarySignal_WithNullNr5g_UsesLte (line 36) | [Fact] method PrimarySignal_WithOnlyNr5gData_UsesNr5g (line 48) | [Fact] method PrimarySignal_WithNoSignal_ReturnsNull (line 61) | [Fact] method SignalQuality_LteWithRsrpOnly_CalculatesCorrectly (line 77) | [Theory] method SignalQuality_5gWithRsrpOnly_CalculatesCorrectly (line 101) | [Theory] method SignalQuality_SameRsrp_5gScoresLowerThanLte (line 120) | [Fact] method SignalQuality_LteWithAllMetrics_CalculatesWeightedScore (line 144) | [Fact] method SignalQuality_5gWithAllMetrics_CalculatesWeightedScore (line 160) | [Fact] method SignalQuality_WithExcellentSignal_ReturnsHigh (line 176) | [Fact] method SignalQuality_WithPoorSignal_ReturnsLow (line 188) | [Fact] method SignalQuality_WithEmptyNr5g_UsesLteMetrics (line 200) | [Fact] method SignalQuality_WithNoSignal_ReturnsZero (line 216) | [Fact] method NetworkMode_WithLteOnly_ReturnsLte (line 232) | [Fact] method NetworkMode_WithEmptyNr5g_ReturnsLte (line 244) | [Fact] method NetworkMode_WithBothLteAndNr5g_ReturnsNsa (line 257) | [Fact] method NetworkMode_WithNr5gOnly_ReturnsSa (line 269) | [Fact] method SignalInfo_Bars_CalculatesCorrectly (line 285) | [Theory] method SignalInfo_Bars_WithNoRsrp_ReturnsZero (line 298) | [Fact] FILE: tests/NetworkOptimizer.Monitoring.Tests/DeviceMetricsTests.cs class DeviceMetricsTests (line 7) | public class DeviceMetricsTests method DeviceMetrics_DefaultValues_AreCorrect (line 11) | [Fact] method DeviceMetrics_Timestamp_DefaultsToUtcNow (line 42) | [Fact] method UptimeSpan_ConvertsFromHundredthsOfSeconds (line 56) | [Fact] method UptimeSpan_ZeroUptime_ReturnsZeroSpan (line 69) | [Fact] method UptimeSpan_LargeValues_CalculatesCorrectly (line 79) | [Theory] method UptimeDays_CalculatesCorrectly (line 99) | [Theory] method UsedMemoryMB_ConvertsFromBytes (line 117) | [Fact] method TotalMemoryMB_ConvertsFromBytes (line 127) | [Fact] method FreeMemoryMB_ConvertsFromBytes (line 137) | [Fact] method MemoryMB_ZeroValues_ReturnZero (line 147) | [Fact] method TotalMemoryMB_VariousValues_CalculatesCorrectly (line 164) | [Theory] method Interfaces_CanAddInterfaces (line 182) | [Fact] method Interfaces_InterfaceCount_CanBeSetIndependently (line 197) | [Fact] method DeviceType_AllValuesAreDefined (line 216) | [Fact] method DeviceType_Unknown_IsDefault (line 231) | [Fact] method DeviceMetrics_CanSetAllProperties (line 242) | [Fact] method DeviceMetrics_ErrorMessage_CanBeSet (line 296) | [Fact] method DeviceMetrics_Temperature_NullByDefault (line 311) | [Fact] method DeviceMetrics_Temperature_CanBeSet (line 321) | [Fact] FILE: tests/NetworkOptimizer.Monitoring.Tests/InterfaceMetricsTests.cs class InterfaceMetricsTests (line 7) | public class InterfaceMetricsTests method InterfaceMetrics_DefaultValues_AreCorrect (line 11) | [Fact] method InterfaceMetrics_Timestamp_DefaultsToUtcNow (line 46) | [Fact] method IsUp_ReturnsCorrectValue (line 60) | [Theory] method IsEnabled_ReturnsCorrectValue (line 82) | [Theory] method SpeedMbps_WithHighSpeed_ReturnsHighSpeed (line 100) | [Fact] method SpeedMbps_WithoutHighSpeed_ConvertsSpeedToBitsThenMbps (line 114) | [Fact] method SpeedMbps_WithZeroSpeed_ReturnsZero (line 128) | [Fact] method SpeedMbps_VariousSpeeds_CalculatesCorrectly (line 142) | [Theory] method SpeedGbps_CalculatesCorrectly (line 165) | [Theory] method TotalInPackets_SumsAllInPacketTypes (line 186) | [Fact] method TotalInPackets_WithZeros_ReturnsZero (line 201) | [Fact] method TotalOutPackets_SumsAllOutPacketTypes (line 215) | [Fact] method TotalInProblems_SumsErrorsAndDiscards (line 234) | [Fact] method TotalOutProblems_SumsErrorsAndDiscards (line 252) | [Fact] method ShouldMonitor_PhysicalInterfaces_ReturnsTrue (line 270) | [Theory] method ShouldMonitor_Loopback_ReturnsFalse (line 289) | [Theory] method ShouldMonitor_BridgeInterfaces_ReturnsFalse (line 305) | [Theory] method ShouldMonitor_DockerInterfaces_ReturnsFalse (line 321) | [Theory] method ShouldMonitor_VethInterfaces_ReturnsFalse (line 337) | [Theory] method ShouldMonitor_IfbInterfaces_ReturnsFalse (line 353) | [Theory] method ShouldMonitor_VirbrInterfaces_ReturnsFalse (line 369) | [Theory] method ShouldMonitor_TunnelInterfaces_ReturnsFalse (line 385) | [Theory] method ShouldMonitor_TapInterfaces_ReturnsFalse (line 401) | [Theory] method ShouldMonitor_NullInterfaces_ReturnsFalse (line 417) | [Theory] method ShouldMonitor_CaseInsensitive (line 433) | [Fact] method ShouldMonitor_ChecksNameIfDescriptionMatches (line 445) | [Fact] FILE: tests/NetworkOptimizer.Monitoring.Tests/MetricsAggregatorTests.cs class MetricsAggregatorTests (line 10) | public class MetricsAggregatorTests method MetricsAggregatorTests (line 15) | public MetricsAggregatorTests() method Constructor_NullLogger_ThrowsArgumentNullException (line 23) | [Fact] method Constructor_DefaultMaxBatchSize_IsThousand (line 34) | [Fact] method Constructor_CustomMaxBatchSize_IsRespected (line 56) | [Fact] method AddDeviceMetrics_NullDeviceMetrics_ThrowsArgumentNullException (line 82) | [Fact] method AddDeviceMetrics_BasicDevice_AddsInterfaceCountAndReachability (line 93) | [Fact] method AddDeviceMetrics_WithUptime_AddsUptimeMetric (line 108) | [Fact] method AddDeviceMetrics_ZeroUptime_DoesNotAddUptimeMetric (line 125) | [Fact] method AddDeviceMetrics_WithCpuUsage_AddsCpuMetric (line 140) | [Fact] method AddDeviceMetrics_ZeroCpuUsage_DoesNotAddCpuMetric (line 157) | [Fact] method AddDeviceMetrics_WithMemoryUsage_AddsMemoryUsageMetric (line 172) | [Fact] method AddDeviceMetrics_WithTotalMemory_AddsAllMemoryMetrics (line 189) | [Fact] method AddDeviceMetrics_ZeroTotalMemory_DoesNotAddMemoryBytesMetrics (line 208) | [Fact] method AddDeviceMetrics_WithTemperature_AddsTemperatureMetric (line 225) | [Fact] method AddDeviceMetrics_NullTemperature_DoesNotAddTemperatureMetric (line 242) | [Fact] method AddDeviceMetrics_Reachable_AddsReachableMetricAsOne (line 257) | [Fact] method AddDeviceMetrics_NotReachable_AddsReachableMetricAsZero (line 274) | [Fact] method AddDeviceMetrics_SetsCorrectDeviceInfo (line 291) | [Fact] method AddDeviceMetrics_SetsCorrectSource (line 309) | [Fact] method AddDeviceMetrics_SetsCorrectTags (line 323) | [Fact] method AddDeviceMetrics_EmptyHostname_DoesNotAddHostnameTag (line 347) | [Fact] method AddDeviceMetrics_AllMetricsSources_AreSupported (line 363) | [Fact] method AddInterfaceMetrics_NullList_ThrowsArgumentNullException (line 381) | [Fact] method AddInterfaceMetrics_EmptyList_AddsNoMetrics (line 392) | [Fact] method AddInterfaceMetrics_AddsStatusMetrics (line 406) | [Fact] method AddInterfaceMetrics_InterfaceDown_IsUpMetricIsZero (line 424) | [Fact] method AddInterfaceMetrics_WithSpeed_AddsSpeedMetric (line 439) | [Fact] method AddInterfaceMetrics_WithHighSpeed_AddsSpeedMetric (line 454) | [Fact] method AddInterfaceMetrics_ZeroSpeed_DoesNotAddSpeedMetric (line 469) | [Fact] method AddInterfaceMetrics_AddsTrafficCounters (line 485) | [Fact] method AddInterfaceMetrics_AddsPacketCounters (line 502) | [Fact] method AddInterfaceMetrics_WithUnicastPackets_AddsUnicastMetrics (line 520) | [Fact] method AddInterfaceMetrics_ZeroUnicastPackets_DoesNotAddUnicastMetrics (line 537) | [Fact] method AddInterfaceMetrics_WithMulticastPackets_AddsMulticastMetrics (line 554) | [Fact] method AddInterfaceMetrics_ZeroMulticastPackets_DoesNotAddMulticastMetrics (line 571) | [Fact] method AddInterfaceMetrics_WithBroadcastPackets_AddsBroadcastMetrics (line 588) | [Fact] method AddInterfaceMetrics_ZeroBroadcastPackets_DoesNotAddBroadcastMetrics (line 605) | [Fact] method AddInterfaceMetrics_AddsErrorAndDiscardMetrics (line 622) | [Fact] method AddInterfaceMetrics_WithUnknownProtos_AddsUnknownProtosMetric (line 643) | [Fact] method AddInterfaceMetrics_ZeroUnknownProtos_DoesNotAddUnknownProtosMetric (line 658) | [Fact] method AddInterfaceMetrics_SetsCorrectInterfaceTags (line 673) | [Fact] method AddInterfaceMetrics_EmptyInterfaceName_DoesNotAddNameTag (line 699) | [Fact] method AddInterfaceMetrics_SetsInterfaceDescription (line 715) | [Fact] method AddInterfaceMetrics_MultipleInterfaces_AddsMetricsForAll (line 730) | [Fact] method AddInterfaceMetrics_SetsCorrectSource (line 752) | [Fact] method AddCustomMetric_EmptyName_ThrowsArgumentException (line 770) | [Theory] method AddCustomMetric_EmptyDeviceIp_ThrowsArgumentException (line 784) | [Theory] method AddCustomMetric_ValidInput_AddsMetric (line 798) | [Fact] method AddCustomMetric_WithTags_IncludesTags (line 813) | [Fact] method AddCustomMetric_NullTags_CreatesEmptyTagsDictionary (line 833) | [Fact] method AddCustomMetric_NormalizesMetricName (line 846) | [Fact] method AddCustomMetric_NegativeValue_IsAccepted (line 858) | [Fact] method AddCustomMetric_ZeroValue_IsAccepted (line 870) | [Fact] method AddCustomMetric_LargeValue_IsAccepted (line 882) | [Fact] method GetBatch_EmptyBatch_ReturnsEmptyBatch (line 898) | [Fact] method GetBatch_WithMetrics_ReturnsBatchWithMetrics (line 911) | [Fact] method GetBatch_ReturnsNewBatchInstance (line 926) | [Fact] method GetBatch_ReturnsCopyOfMetrics (line 941) | [Fact] method GetBatch_UnderMaxSize_IsReadyIsFalse (line 956) | [Fact] method GetBatch_AtMaxSize_IsReadyIsTrue (line 973) | [Fact] method GetBatch_OverMaxSize_IsReadyIsTrue (line 990) | [Fact] method GetBatch_HasValidBatchId (line 1008) | [Fact] method GetBatch_HasRecentCreatedAt (line 1018) | [Fact] method ClearBatch_EmptyBatch_DoesNotThrow (line 1032) | [Fact] method ClearBatch_WithMetrics_RemovesAllMetrics (line 1042) | [Fact] method ClearBatch_AllowsAddingNewMetrics (line 1058) | [Fact] method ClearBatch_ResetsIsReadyFlag (line 1074) | [Fact] method GetBatchCount_EmptyBatch_ReturnsZero (line 1098) | [Fact] method GetBatchCount_WithMetrics_ReturnsCorrectCount (line 1108) | [Fact] method GetBatchCount_AfterClear_ReturnsZero (line 1123) | [Fact] method GetBatchCount_MatchesBatchCount (line 1137) | [Fact] method NormalizeMetricName_VariousInputs_NormalizesCorrectly (line 1156) | [Theory] method AddMetrics_ConcurrentAccess_DoesNotCorrupt (line 1180) | [Fact] method GetBatchCount_ConcurrentAccess_ReturnsConsistentCount (line 1206) | [Fact] method AggregatedMetric_DefaultValues_AreCorrect (line 1243) | [Fact] method MetricsBatch_DefaultValues_AreCorrect (line 1264) | [Fact] method MetricsBatch_Count_ReflectsMetricsList (line 1279) | [Fact] method MetricSource_AllValuesAreDefined (line 1291) | [Fact] method CreateDeviceMetrics (line 1306) | private static DeviceMetrics CreateDeviceMetrics() method CreateInterfaceMetrics (line 1319) | private static InterfaceMetrics CreateInterfaceMetrics(string descript... FILE: tests/NetworkOptimizer.Monitoring.Tests/QmicliParserTests.cs class QmicliParserTests (line 7) | public class QmicliParserTests method ParseSignalInfo_LteSection_ParsesCorrectly (line 11) | [Fact] method ParseSignalInfo_Nr5gSection_ParsesCorrectly (line 36) | [Fact] method ParseSignalInfo_BothLteAndNr5g_ParsesBoth (line 61) | [Fact] method ParseSignalInfo_EmptyOutput_ReturnsBothNull (line 89) | [Fact] method ParseSignalInfo_NoSignalSections_ReturnsBothNull (line 103) | [Fact] method ParseSignalInfo_PartialLteData_ParsesAvailableMetrics (line 121) | [Fact] method ParseServingSystem_FullOutput_ParsesCorrectly (line 143) | [Fact] method ParseServingSystem_RoamingOn_ReturnsTrue (line 174) | [Fact] method ParseServingSystem_RoamingOff_ReturnsFalse (line 190) | [Fact] method ParseServingSystem_EmptyOutput_ReturnsDefaults (line 206) | [Fact] method ParseCellLocationInfo_WithServingCell_ParsesCorrectly (line 227) | [Fact] method ParseCellLocationInfo_WithNeighborCells_ParsesAll (line 264) | [Fact] method ParseCellLocationInfo_WithTimingAdvance_ParsesValue (line 299) | [Fact] method ParseCellLocationInfo_EmptyOutput_ReturnsNullAndEmptyList (line 319) | [Fact] method ParseRfBandInfo_LteBand_ParsesCorrectly (line 337) | [Fact] method ParseRfBandInfo_Nr5gBand_ParsesCorrectly (line 361) | [Fact] method ParseRfBandInfo_NoBandwidth_ParsesNullBandwidth (line 384) | [Fact] method ParseRfBandInfo_EmptyOutput_ReturnsNull (line 403) | [Fact] method ParseRfBandInfo_NoRadioInterface_ReturnsNull (line 416) | [Fact] method ParseSignalInfo_NegativeDecimalValues_ParsesCorrectly (line 436) | [Fact] method ParseSignalInfo_WindowsLineEndings_ParsesCorrectly (line 457) | [Fact] method ParseServingSystem_VariousRoamingValues_ParsesCorrectly (line 471) | [Fact] FILE: tests/NetworkOptimizer.Monitoring.Tests/SnmpConfigurationTests.cs class SnmpConfigurationTests (line 7) | public class SnmpConfigurationTests method SnmpConfiguration_DefaultValues_AreCorrect (line 11) | [Fact] method SnmpConfiguration_ExcludeInterfacePatterns_HasExpectedPatterns (line 38) | [Fact] method Validate_InvalidPort_LessThanOne_ThrowsException (line 59) | [Theory] method Validate_InvalidPort_GreaterThan65535_ThrowsException (line 78) | [Theory] method Validate_ValidPort_DoesNotThrow (line 97) | [Theory] method Validate_InvalidTimeout_ThrowsException (line 118) | [Theory] method Validate_ValidTimeout_DoesNotThrow (line 137) | [Theory] method Validate_NegativeRetryCount_ThrowsException (line 158) | [Theory] method Validate_ValidRetryCount_DoesNotThrow (line 176) | [Theory] method Validate_InvalidPollingInterval_ThrowsException (line 197) | [Theory] method Validate_V1V2c_WithEmptyCommunity_ThrowsException (line 220) | [Theory] method Validate_V1V2c_WithWhitespaceCommunity_ThrowsException (line 241) | [Theory] method Validate_V1V2c_WithValidCommunity_DoesNotThrow (line 262) | [Theory] method Validate_V3_WithEmptyUsername_ThrowsException (line 285) | [Fact] method Validate_V3_WithWhitespaceUsername_ThrowsException (line 304) | [Fact] method Validate_V3_WithAuthProtocolAndNoPassword_ThrowsException (line 323) | [Fact] method Validate_V3_WithPrivProtocolAndNoPassword_ThrowsException (line 344) | [Fact] method Validate_V3_WithNoAuthProtocol_DoesNotRequireAuthPassword (line 367) | [Fact] method Validate_V3_WithNoPrivProtocol_DoesNotRequirePrivPassword (line 388) | [Fact] method Validate_V3_FullyConfigured_DoesNotThrow (line 409) | [Fact] method Validate_V3_AllAuthProtocols_WithPassword_DoesNotThrow (line 422) | [Theory] method Validate_V3_AllPrivProtocols_WithPassword_DoesNotThrow (line 447) | [Theory] method Clone_CreatesIndependentCopy (line 476) | [Fact] method Clone_CopiesAllProperties (line 496) | [Fact] method Clone_ExcludePatternsList_IsIndependent (line 546) | [Fact] method SnmpVersion_HasCorrectValues (line 566) | [Fact] method AuthenticationProtocol_HasCorrectValues (line 574) | [Fact] method PrivacyProtocol_HasCorrectValues (line 585) | [Fact] method CreateValidV2cConfig (line 599) | private static SnmpConfiguration CreateValidV2cConfig() method CreateValidV3Config (line 608) | private static SnmpConfiguration CreateValidV3Config() method CreateFullyConfiguredConfig (line 621) | private static SnmpConfiguration CreateFullyConfiguredConfig() FILE: tests/NetworkOptimizer.Reports.Tests/BrandingOptionsTests.cs class BrandingOptionsTests (line 7) | public class BrandingOptionsTests method BrandingOptions_DefaultValues_AreCorrect (line 11) | [Fact] method OzarkConnect_Factory_ReturnsCorrectOptions (line 30) | [Fact] method Generic_Factory_ReturnsCorrectOptions (line 43) | [Fact] method BrandingOptions_CanSetAllProperties (line 59) | [Fact] class ColorSchemeTests (line 85) | public class ColorSchemeTests method ColorScheme_DefaultValues_AreCorrect (line 89) | [Fact] method OzarkConnect_Factory_ReturnsCorrectColors (line 111) | [Fact] method Generic_Factory_ReturnsCorrectColors (line 123) | [Fact] method HighContrast_Factory_ReturnsCorrectColors (line 135) | [Fact] method HexToRgb_ValidHex_ReturnsCorrectRgb (line 151) | [Theory] method HexToRgb_BrandColors_ReturnsCorrectRgb (line 169) | [Theory] method HexToRgb_InvalidHex_ThrowsException (line 184) | [Theory] method GetPrimaryRgb_ReturnsCorrectValues (line 204) | [Fact] method GetSecondaryRgb_ReturnsCorrectValues (line 219) | [Fact] method GetSuccessRgb_ReturnsCorrectValues (line 234) | [Fact] method GetWarningRgb_ReturnsCorrectValues (line 249) | [Fact] method GetCriticalRgb_ReturnsCorrectValues (line 264) | [Fact] FILE: tests/NetworkOptimizer.Reports.Tests/ReportDataTests.cs class ReportDataTests (line 7) | public class ReportDataTests method ReportData_DefaultValues_AreCorrect (line 9) | [Fact] class SecurityScoreTests (line 32) | public class SecurityScoreTests method CalculateRating_VariousCounts_ReturnsCorrectRating (line 36) | [Theory] method SecurityScore_DefaultValues_AreCorrect (line 59) | [Fact] class NetworkInfoTests (line 77) | public class NetworkInfoTests method GetDisplayName_NativeVlan_ShowsNativeIndicator (line 79) | [Fact] method GetDisplayName_NonNativeVlan_ShowsJustNumber (line 92) | [Fact] method ParsePurpose_VariousPurposes_ReturnsCorrectType (line 105) | [Theory] class SwitchDetailTests (line 127) | public class SwitchDetailTests method TotalPorts_ReturnsPortCount (line 129) | [Fact] method DisabledPorts_CountsCorrectly (line 147) | [Fact] method MacRestrictedPorts_CountsCorrectly (line 165) | [Fact] method UnprotectedActivePorts_CountsCorrectly (line 183) | [Fact] class AccessPointDetailTests (line 209) | public class AccessPointDetailTests method TotalClients_ReturnsClientCount (line 211) | [Fact] method IoTClients_CountsCorrectly (line 228) | [Fact] method CameraClients_CountsCorrectly (line 246) | [Fact] class PortDetailTests (line 265) | public class PortDetailTests method MacRestrictionCount_ReturnsPortSecurityMacsCount (line 267) | [Fact] method GetStatus_VariousForwardModes_ReturnsCorrectStatus (line 280) | [Theory] method GetStatus_NativeNoMac_ReturnsWarning (line 297) | [Fact] method GetStatus_NativeWithMac_ReturnsOk (line 317) | [Fact] method GetStatus_NotUpNotDisabled_ReturnsOff (line 337) | [Fact] method GetStatus_Uplink_ReturnsTrunk (line 351) | [Fact] method GetStatus_CustomWithApName_ReturnsAP (line 365) | [Fact] method GetStatus_IoTDeviceOnWrongVlan_ReturnsWarning (line 379) | [Fact] method GetStatus_IoTDeviceOnIoTVlan_ReturnsOk (line 399) | [Fact] class AuditIssueTests (line 421) | public class AuditIssueTests method GetDeviceDisplay_WirelessIssue_ReturnsClientName (line 423) | [Fact] method GetDeviceDisplay_WirelessNoName_ReturnsClientMac (line 441) | [Fact] method GetDeviceDisplay_WiredWithOnPattern_ReturnsClientPart (line 459) | [Fact] method GetDeviceDisplay_WiredNoOnPattern_ReturnsSwitchName (line 476) | [Fact] method GetPortDisplay_WirelessWithBand_ReturnsApAndBand (line 493) | [Fact] method GetPortDisplay_WirelessNoBand_ReturnsApOnly (line 511) | [Fact] method GetPortDisplay_WiredWithPortId_ReturnsPortIdAndName (line 529) | [Fact] method GetPortDisplay_WiredWithPortIndex_ReturnsPortInfo (line 547) | [Fact] method GetPortDisplay_WiredWithOnPattern_IncludesSwitchPart (line 565) | [Fact] class DnsSecuritySummaryTests (line 585) | public class DnsSecuritySummaryTests method GetDnsLeakProtectionDetail_NoProtection_ReturnsCanBypass (line 589) | [Fact] method GetDnsLeakProtectionDetail_Dns53Only_ReturnsBlocked (line 607) | [Fact] method GetDnsLeakProtectionDetail_Dns53PartialCoverageNoDnat_ReturnsPartiallyBlocked (line 626) | [Fact] method GetDnsLeakProtectionDetail_DnatOnly_ReturnsRedirected (line 645) | [Fact] method GetDnsLeakProtectionDetail_BothProtections_ReturnsRedirectedAndBlocked (line 663) | [Fact] method GetDnsLeakProtectionDetail_PartialBlockCoverage_ReturnsPartiallyBlocked (line 682) | [Fact] class PortSecuritySummaryTests (line 704) | public class PortSecuritySummaryTests method ProtectionPercentage_CalculatesCorrectly (line 706) | [Fact] method ProtectionPercentage_ZeroPorts_ReturnsZero (line 724) | [Fact] method ProtectionPercentage_FullProtection_Returns100 (line 737) | [Fact] FILE: tests/NetworkOptimizer.Sqm.Tests/BaselineCalculatorTests.cs class BaselineCalculatorTests (line 8) | public class BaselineCalculatorTests method AddSample_WithSampleObject_AddsSample (line 12) | [Fact] method AddSample_WithValues_CreatesSampleCorrectly (line 35) | [Fact] method AddSample_MultipleSameHour_AveragesCorrectly (line 52) | [Fact] method CalculateBaseline_NoSamples_ReturnsEmptyBaseline (line 92) | [Fact] method CalculateBaseline_CalculatesMedian_OddCount (line 106) | [Fact] method CalculateBaseline_CalculatesMedian_EvenCount (line 122) | [Fact] method CalculateBaseline_CalculatesMinMax (line 139) | [Fact] method CalculateBaseline_CalculatesStandardDeviation (line 156) | [Fact] method CalculateBaseline_168Samples_MarksComplete (line 172) | [Fact] method GetBaselineTable_ReturnsCurrentTable (line 207) | [Fact] method LoadBaselineTable_ReplacesCurrentTable (line 227) | [Fact] method CalculateBlendedSpeed_WithinThreshold_Uses60_40Blend (line 251) | [Fact] method CalculateBlendedSpeed_BelowThreshold_Uses80_20Blend (line 267) | [Fact] method CalculateBlendedSpeed_VariousScenarios (line 283) | [Theory] method GetLearningProgress_NoData_ReturnsZero (line 305) | [Fact] method GetLearningProgress_PartialData_ReturnsPercentage (line 318) | [Fact] method IsLearningComplete_NotComplete_ReturnsFalse (line 348) | [Fact] method GetCurrentBaselineSpeed_NoBaseline_ReturnsNull (line 367) | [Fact] method GetBaselineSpeed_SpecificTime_ReturnsCorrectBaseline (line 380) | [Fact] method UpdateHourlyBaseline_NewEntry_CreatesBaseline (line 403) | [Fact] method UpdateHourlyBaseline_ExistingEntry_UpdatesWithEMA (line 428) | [Fact] method UpdateHourlyBaseline_UpdatesMinMax (line 447) | [Fact] method ExportToShellFormat_ReturnsKeyValuePairs (line 468) | [Fact] method ImportFromShellFormat_CreatesBaselineTable (line 495) | [Fact] method ImportFromShellFormat_InvalidKey_SkipsEntry (line 518) | [Fact] method ImportFromShellFormat_InvalidValue_SkipsEntry (line 538) | [Fact] FILE: tests/NetworkOptimizer.Sqm.Tests/InputSanitizerTests.cs class InputSanitizerTests (line 10) | public class InputSanitizerTests method ValidatePingHost_ValidIPv4_ReturnsValid (line 14) | [Theory] method ValidatePingHost_ValidIPv6_ReturnsValid (line 28) | [Theory] method ValidatePingHost_ValidHostname_ReturnsValid (line 39) | [Theory] method ValidatePingHost_EmptyOrNull_ReturnsInvalid (line 52) | [Theory] method ValidatePingHost_CommandInjectionAttempts_ReturnsInvalid (line 63) | [Theory] method ValidatePingHost_InvalidHostnameFormat_ReturnsInvalid (line 81) | [Theory] method ValidateSpeedtestServerId_EmptyOrNull_ReturnsValid (line 95) | [Theory] method ValidateSpeedtestServerId_ValidNumeric_ReturnsValid (line 106) | [Theory] method ValidateSpeedtestServerId_NonNumeric_ReturnsInvalid (line 117) | [Theory] method ValidateSpeedtestServerId_TooLong_ReturnsInvalid (line 131) | [Fact] method SanitizeConnectionName_ValidNames_ReturnsSanitized (line 143) | [Theory] method SanitizeConnectionName_EmptyOrNull_ReturnsWan (line 155) | [Theory] method SanitizeConnectionName_CommandInjectionAttempts_RemovesDangerousChars (line 165) | [Theory] method SanitizeConnectionName_LongName_TruncatesTo32Chars (line 190) | [Fact] method SanitizeConnectionName_OnlySpecialChars_ReturnsWan (line 198) | [Fact] method ValidateCronSchedule_ValidSchedules_ReturnsValid (line 209) | [Theory] method ValidateCronSchedule_MinimalSchedule_ReturnsValid (line 222) | [Theory] method ValidateCronSchedule_EmptyOrNull_ReturnsInvalid (line 232) | [Theory] method ValidateCronSchedule_InvalidValues_ReturnsInvalid (line 243) | [Theory] method ValidateCronSchedule_CommandInjectionAttempts_ReturnsInvalid (line 255) | [Theory] method ValidateInterface_ValidNames_ReturnsValid (line 270) | [Theory] method ValidateInterface_EmptyOrNull_ReturnsInvalid (line 285) | [Theory] method ValidateInterface_CommandInjectionAttempts_ReturnsInvalid (line 296) | [Theory] method ValidateInterface_TooLong_ReturnsInvalid (line 309) | [Fact] method EscapeForShellDoubleQuote_SafeStrings_ReturnsUnchanged (line 321) | [Theory] method EscapeForShellDoubleQuote_DangerousChars_EscapesThem (line 330) | [Theory] method EscapeForShellDoubleQuote_EmptyOrNull_ReturnsEmpty (line 341) | [Theory] FILE: tests/NetworkOptimizer.Sqm.Tests/LatencyMonitorTests.cs class LatencyMonitorTests (line 8) | public class LatencyMonitorTests method CreateConfig (line 10) | private static SqmConfiguration CreateConfig( method CalculateRateAdjustment_HighLatency_DecreasesRate (line 35) | [Fact] method CalculateRateAdjustment_HighLatency_CalculatesDeviationsCorrectly (line 53) | [Fact] method CalculateRateAdjustment_HighLatency_EnforcesMinimumRate (line 69) | [Fact] method CalculateRateAdjustment_LowLatency_BelowLowerBound_AppliesDoubleIncrease (line 89) | [Fact] method CalculateRateAdjustment_LowLatency_NearMidBound_NormalizesToMid (line 107) | [Fact] method CalculateRateAdjustment_LowLatency_AboveMidBound_KeepsCurrentRate (line 123) | [Fact] method CalculateRateAdjustment_NormalLatency_BelowLowerBound_AppliesIncrease (line 143) | [Fact] method CalculateRateAdjustment_NormalLatency_NearMidBound_NormalizesToOptimal (line 161) | [Fact] method CalculateRateAdjustment_NormalLatency_AboveThreshold_MaintainsRate (line 177) | [Fact] method IsLatencyHigh_VariousValues_ReturnsCorrectResult (line 197) | [Theory] method CalculateDeviationCount_VariousLatencies_ReturnsCorrectCount (line 221) | [Theory] method GeneratePingCommand_GeneratesCorrectCommand (line 245) | [Fact] method ParsePingOutput_ValidOutput_ReturnsAverageLatency (line 267) | [Fact] method ParsePingOutput_NoRttLine_ReturnsNull (line 286) | [Fact] method ParsePingOutput_MalformedRtt_ReturnsNull (line 302) | [Fact] method ParsePingOutput_EmptyOutput_ReturnsNull (line 317) | [Fact] method CalculateDecreaseMultiplier_VariousDeviations_ReturnsCorrectMultiplier (line 335) | [Theory] method CalculateIncreaseMultiplier_VariousSteps_ReturnsCorrectMultiplier (line 358) | [Theory] method NeedsRecovery_VariousRates_ReturnsCorrectResult (line 380) | [Theory] method GetRateBounds_ReturnsCorrectBounds (line 403) | [Fact] FILE: tests/NetworkOptimizer.Sqm.Tests/ScriptGeneratorTests.cs class ScriptGeneratorTests (line 8) | public class ScriptGeneratorTests method GenerateAllScripts_WithGermanLocale_UsesDecimalPointNotComma (line 10) | [Fact] method GenerateAllScripts_BlendingWeights_NoFloatingPointArtifacts (line 66) | [Fact] method GenerateAllScripts_ContainsIfbDeviceCheck_InBothScripts (line 94) | [Fact] method GenerateAllScripts_IfbCheck_AppearsBeforeTcCommands (line 132) | [Fact] method GenerateAllScripts_IfbDeviceName_DerivedFromInterface (line 172) | [Theory] method GenerateAllScripts_WhenLinkSpeedSet_EmbedsLinkCeilingClampInBothScripts (line 201) | [Fact] method GenerateAllScripts_SpeedtestProbeRate_IsAboveLineRate (line 231) | [Fact] method GenerateAllScripts_WhenLinkSpeedUnknown_EmitsZeroAndSkipsClamp (line 255) | [Fact] method GenerateAllScripts_OverriddenLinkSpeed_UsesOverrideInScripts (line 282) | [Fact] method ApplyProfileSettings_WithLinkSpeedOverride_StoresOverriddenValue (line 309) | [Fact] method ApplyProfileSettings_WithNullLinkSpeed_LeavesLinkSpeedNull (line 329) | [Fact] method ExtractHeredocSection (line 348) | private static string ExtractHeredocSection(string script, string deli... FILE: tests/NetworkOptimizer.Sqm.Tests/SpeedtestIntegrationTests.cs class SpeedtestIntegrationTests (line 8) | public class SpeedtestIntegrationTests method CreateConfig (line 10) | private static SqmConfiguration CreateConfig( method ParseSpeedtestJson_ValidJson_ReturnsResult (line 27) | [Fact] method ParseSpeedtestJson_InvalidJson_ReturnsNull (line 49) | [Fact] method ParseSpeedtestJson_EmptyJson_ReturnsNull (line 63) | [Fact] method BytesPerSecToMbps_VariousValues_ConvertsCorrectly (line 80) | [Theory] method CalculateEffectiveRate_AppliesOverheadMultiplier (line 102) | [Fact] method CalculateEffectiveRate_EnforcesMinimum (line 116) | [Fact] method CalculateEffectiveRate_EnforcesMaximum (line 130) | [Fact] method CalculateEffectiveRate_RoundsToWholeNumber (line 144) | [Fact] method ProcessSpeedtestResult_WithoutBaseline_UsesMeasuredSpeed (line 162) | [Fact] method ProcessSpeedtestResult_WithBaseline_BlendsSpeed (line 184) | [Fact] method ProcessSpeedtestResult_Applies95PercentSafetyCap (line 216) | [Fact] method CreateSample_CreatesCorrectSample (line 242) | [Fact] method IsValidResult_NullResult_ReturnsFalse (line 269) | [Fact] method IsValidResult_ZeroDownload_ReturnsFalse (line 282) | [Fact] method IsValidResult_ZeroUpload_ReturnsFalse (line 301) | [Fact] method IsValidResult_ZeroLatency_ReturnsFalse (line 320) | [Fact] method IsValidResult_UnreasonablyLowSpeed_ReturnsFalse (line 339) | [Fact] method IsValidResult_UnreasonablyHighSpeed_ReturnsFalse (line 358) | [Fact] method IsValidResult_ValidResult_ReturnsTrue (line 377) | [Fact] method CalculateVariancePercent_VariousValues_ReturnsCorrectPercentage (line 400) | [Theory] method DetermineBlendRatio_VariousVariances_ReturnsCorrectRatio (line 424) | [Theory] FILE: tests/NetworkOptimizer.Sqm.Tests/SqmManagerTests.cs class SqmManagerTests (line 8) | public class SqmManagerTests method CreateConfig (line 10) | private static SqmConfiguration CreateConfig( method Constructor_InitializesCorrectly (line 41) | [Fact] method ConfigureSqm_UpdatesConfiguration (line 57) | [Fact] method StartLearningMode_ActivatesLearningMode (line 81) | [Fact] method StopLearningMode_DeactivatesLearningMode (line 95) | [Fact] method IsLearningComplete_NoData_ReturnsFalse (line 114) | [Fact] method GetLearningProgress_InitialState_ReturnsZero (line 127) | [Fact] method GetStatus_ReturnsCurrentStatus (line 144) | [Fact] method TriggerSpeedtest_ValidJson_ProcessesResult (line 163) | [Fact] method TriggerSpeedtest_InvalidJson_ThrowsException (line 182) | [Fact] method TriggerSpeedtest_ZeroBandwidth_ThrowsException (line 196) | [Fact] method TriggerSpeedtest_UpdatesStatus (line 215) | [Fact] method TriggerSpeedtest_InLearningMode_UpdatesBaseline (line 237) | [Fact] method ApplyRateAdjustment_HighLatency_DecreasesRate (line 262) | [Fact] method ApplyRateAdjustment_UpdatesStatus (line 279) | [Fact] method LoadBaseline_UpdatesBaselineCalculator (line 301) | [Fact] method GetBaselineTable_ReturnsCurrentTable (line 324) | [Fact] method ExportBaselineForScript_ReturnsShellFormat (line 341) | [Fact] method GenerateScripts_ReturnsScriptDictionary (line 368) | [Fact] method GenerateScriptsToDirectory_CreatesDirectory (line 381) | [Fact] method GetRateBounds_ReturnsCorrectBounds (line 408) | [Fact] method ValidateConfiguration_ValidConfig_ReturnsNoErrors (line 428) | [Fact] method ValidateConfiguration_EmptyInterface_ReturnsError (line 441) | [Fact] method ValidateConfiguration_ZeroMaxDownloadSpeed_ReturnsError (line 454) | [Fact] method ValidateConfiguration_MinGreaterThanMax_ReturnsError (line 467) | [Fact] method ValidateConfiguration_AbsoluteMaxLessThanMax_ReturnsError (line 480) | [Fact] method ValidateConfiguration_InvalidOverheadMultiplier_ReturnsError (line 493) | [Fact] method ValidateConfiguration_EmptyPingHost_ReturnsError (line 506) | [Fact] method ValidateConfiguration_InvalidBaselineLatency_ReturnsError (line 519) | [Fact] method ValidateConfiguration_InvalidLatencyThreshold_ReturnsError (line 532) | [Fact] method ValidateConfiguration_InvalidLatencyDecrease_ReturnsError (line 545) | [Fact] method ValidateConfiguration_InvalidLatencyIncrease_ReturnsError (line 558) | [Fact] method ValidateConfiguration_InvalidPingInterval_ReturnsError (line 571) | [Fact] method ValidateConfiguration_MultipleErrors_ReturnsAllErrors (line 584) | [Fact] FILE: tests/NetworkOptimizer.Sqm.Tests/WanInterfaceExtractionTests.cs class WanInterfaceExtractionTests (line 11) | public class WanInterfaceExtractionTests method ExtractWanInterfaces (line 17) | private static List ExtractWanInterfaces( class WanInterfaceTestResult (line 114) | private class WanInterfaceTestResult method ExtractWanInterfaces_PppoeConnection_UsesPhysicalInterfaceForNetworkGroupLookup (line 125) | [Fact] method ExtractWanInterfaces_PppoeWithoutPhysicalIfname_FallsBackToName (line 187) | [Fact] method ExtractWanInterfaces_PppoeWithSmartqDisabled_ShowsAsNotEligible (line 228) | [Fact] method ExtractWanInterfaces_StandardDhcp_WorksAsExpected (line 267) | [Fact] method ExtractWanInterfaces_MultipleWansWithMixedTypes_ExtractsAllCorrectly (line 308) | [Fact] method ExtractWanInterfaces_PppoeNetworkGroupNotInEthernetOverrides_FallsBackToUplinkIfname (line 374) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/AgentRepositoryTests.cs class AgentRepositoryTests (line 11) | public class AgentRepositoryTests : IDisposable method AgentRepositoryTests (line 16) | public AgentRepositoryTests() method Dispose (line 27) | public void Dispose() method SaveAgentConfigAsync_SavesConfig (line 32) | [Fact] method GetAgentConfigAsync_ReturnsCorrectConfig (line 49) | [Fact] method GetAllAgentConfigsAsync_ReturnsOrderedByName (line 67) | [Fact] method DeleteAgentConfigAsync_RemovesConfig (line 85) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/AuditRepositoryTests.cs class AuditRepositoryTests (line 11) | public class AuditRepositoryTests : IDisposable method AuditRepositoryTests (line 16) | public AuditRepositoryTests() method Dispose (line 27) | public void Dispose() method SaveAuditResultAsync_SavesAndReturnsId (line 34) | [Fact] method SaveAuditResultAsync_SetsCreatedAt (line 56) | [Fact] method GetAuditResultAsync_ReturnsCorrectResult (line 72) | [Fact] method GetAuditResultAsync_ReturnsNullForNonExistent (line 91) | [Fact] method GetAuditHistoryAsync_ReturnsAllResults (line 98) | [Fact] method GetAuditHistoryAsync_FiltersByDevice (line 112) | [Fact] method GetAuditHistoryAsync_OrdersByDateDescending (line 128) | [Fact] method GetAuditHistoryAsync_RespectsLimit (line 143) | [Fact] method DeleteOldAuditsAsync_DeletesOldRecords (line 162) | [Fact] method GetLatestAuditResultAsync_ReturnsNewestResult (line 179) | [Fact] method GetLatestAuditResultAsync_ReturnsNullWhenEmpty (line 195) | [Fact] method GetDismissedIssuesAsync_ReturnsAllDismissed (line 206) | [Fact] method GetDismissedIssuesAsync_OrdersByDismissedAtDescending (line 220) | [Fact] method SaveDismissedIssueAsync_AddsIssue (line 234) | [Fact] method DeleteDismissedIssueAsync_RemovesIssue (line 246) | [Fact] method ClearAllDismissedIssuesAsync_RemovesAllIssues (line 258) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/CredentialProtectionServiceTests.cs class CredentialProtectionServiceTests (line 7) | public class CredentialProtectionServiceTests : IDisposable method CredentialProtectionServiceTests (line 12) | public CredentialProtectionServiceTests() method Dispose (line 28) | public void Dispose() method Encrypt_ValidPlaintext_ReturnsEncryptedString (line 39) | [Fact] method Encrypt_EmptyString_ReturnsEmptyString (line 54) | [Fact] method Encrypt_NullString_ReturnsNull (line 64) | [Fact] method Encrypt_SameInputTwice_ProducesDifferentOutputs (line 74) | [Fact] method Encrypt_SpecialCharacters_HandlesCorrectly (line 88) | [Fact] method Encrypt_UnicodeCharacters_HandlesCorrectly (line 102) | [Fact] method Encrypt_LongPassword_HandlesCorrectly (line 116) | [Fact] method Decrypt_EncryptedString_ReturnsOriginalPlaintext (line 134) | [Fact] method Decrypt_EmptyString_ReturnsEmptyString (line 148) | [Fact] method Decrypt_NullString_ReturnsNull (line 158) | [Fact] method Decrypt_PlaintextWithoutPrefix_ReturnsAsIs (line 168) | [Fact] method Decrypt_InvalidEncryptedData_ReturnsEmpty (line 181) | [Fact] method Decrypt_TruncatedEncryptedData_ReturnsEmpty (line 194) | [Fact] method IsEncrypted_EncryptedString_ReturnsTrue (line 217) | [Fact] method IsEncrypted_PlaintextString_ReturnsFalse (line 230) | [Fact] method IsEncrypted_NullString_ReturnsFalse (line 243) | [Fact] method IsEncrypted_EmptyString_ReturnsFalse (line 253) | [Fact] method IsEncrypted_StringStartingWithEncButNotEncrypted_ReturnsTrue (line 263) | [Fact] method EncryptDecrypt_Roundtrip_PreservesData (line 280) | [Theory] method EncryptDecrypt_MultipleRoundtrips_AllPreserveData (line 295) | [Fact] method EnsureKeyExists_DoesNotThrow (line 322) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/ModemRepositoryTests.cs class ModemRepositoryTests (line 11) | public class ModemRepositoryTests : IDisposable method ModemRepositoryTests (line 16) | public ModemRepositoryTests() method Dispose (line 27) | public void Dispose() method GetModemConfigurationsAsync_ReturnsAllOrderedByName (line 32) | [Fact] method GetEnabledModemConfigurationsAsync_ReturnsOnlyEnabled (line 47) | [Fact] method GetModemConfigurationAsync_ReturnsById (line 62) | [Fact] method SaveModemConfigurationAsync_CreatesNew (line 75) | [Fact] method DeleteModemConfigurationAsync_RemovesModem (line 86) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/SettingsRepositoryTests.cs class SettingsRepositoryTests (line 11) | public class SettingsRepositoryTests : IDisposable method SettingsRepositoryTests (line 16) | public SettingsRepositoryTests() method Dispose (line 27) | public void Dispose() method GetSystemSettingAsync_ReturnsValue (line 34) | [Fact] method GetSystemSettingAsync_ReturnsNullForMissing (line 45) | [Fact] method SaveSystemSettingAsync_CreatesNewSetting (line 52) | [Fact] method SaveSystemSettingAsync_UpdatesExistingSetting (line 62) | [Fact] method SaveLicenseAsync_SavesAndReturnsId (line 78) | [Fact] method GetLicenseAsync_ReturnsActiveLicense (line 94) | [Fact] method GetLicenseAsync_ReturnsNullWhenNoActiveLicense (line 110) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/SpeedTestRepositoryTests.cs class SpeedTestRepositoryTests (line 13) | public class SpeedTestRepositoryTests : IDisposable method SpeedTestRepositoryTests (line 18) | public SpeedTestRepositoryTests() method Dispose (line 29) | public void Dispose() method GetGatewaySshSettingsAsync_ReturnsSettings (line 36) | [Fact] method SaveGatewaySshSettingsAsync_UpdatesExisting (line 53) | [Fact] method SaveIperf3ResultAsync_SetsTestTime (line 74) | [Fact] method GetRecentIperf3ResultsAsync_ReturnsOrderedByTimeDesc (line 91) | [Fact] method GetRecentIperf3ResultsAsync_RespectsCount (line 109) | [Fact] method GetIperf3ResultsForDeviceAsync_FiltersCorrectly (line 128) | [Fact] method ClearIperf3HistoryAsync_RemovesAllResults (line 144) | [Fact] method SearchIperf3ResultsAsync_EmptyFilter_ReturnsAll (line 167) | [Fact] method SearchIperf3ResultsAsync_FiltersByDeviceHost (line 181) | [Fact] method SearchIperf3ResultsAsync_FiltersByDeviceName (line 197) | [Fact] method SearchIperf3ResultsAsync_FiltersByClientMac (line 213) | [Fact] method SearchIperf3ResultsAsync_FiltersByHopInPath (line 229) | [Fact] method SearchIperf3ResultsAsync_FiltersByHopMac (line 266) | [Fact] method SearchIperf3ResultsAsync_IsCaseInsensitive (line 299) | [Fact] method SearchIperf3ResultsAsync_NoMatch_ReturnsEmpty (line 313) | [Fact] method SearchIperf3ResultsAsync_RespectsCountLimit (line 327) | [Fact] method SearchIperf3ResultsAsync_RespectsHoursFilter (line 346) | [Fact] method SearchIperf3ResultsAsync_ReturnsOrderedByTimeDesc (line 361) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/SqmRepositoryTests.cs class SqmRepositoryTests (line 11) | public class SqmRepositoryTests : IDisposable method SqmRepositoryTests (line 16) | public SqmRepositoryTests() method Dispose (line 27) | public void Dispose() method SaveSqmBaselineAsync_SavesAndReturnsId (line 32) | [Fact] method GetSqmBaselineAsync_ReturnsCorrectBaseline (line 44) | [Fact] method GetSqmBaselineAsync_ReturnsNullWhenNotFound (line 58) | [Fact] method GetAllSqmBaselinesAsync_ReturnsAll (line 65) | [Fact] method GetAllSqmBaselinesAsync_FiltersByDevice (line 79) | [Fact] method DeleteSqmBaselineAsync_RemovesBaseline (line 94) | [Fact] method CreateSqmBaseline (line 108) | private static SqmBaseline CreateSqmBaseline( FILE: tests/NetworkOptimizer.Storage.Tests/UniFiRepositoryTests.cs class UniFiRepositoryTests (line 11) | public class UniFiRepositoryTests : IDisposable method UniFiRepositoryTests (line 16) | public UniFiRepositoryTests() method Dispose (line 27) | public void Dispose() method GetUniFiConnectionSettingsAsync_ReturnsSettings (line 34) | [Fact] method GetUniFiConnectionSettingsAsync_ReturnsNullWhenEmpty (line 51) | [Fact] method SaveUniFiConnectionSettingsAsync_CreatesSettings (line 58) | [Fact] method SaveUniFiConnectionSettingsAsync_UpdatesExisting (line 75) | [Fact] method GetUniFiSshSettingsAsync_ReturnsSettings (line 103) | [Fact] method SaveUniFiSshSettingsAsync_UpdatesExisting (line 120) | [Fact] method GetDeviceSshConfigurationsAsync_ReturnsAllOrderedByName (line 141) | [Fact] method GetDeviceSshConfigurationAsync_ReturnsById (line 159) | [Fact] method SaveDeviceSshConfigurationAsync_CreatesNew (line 172) | [Fact] method SaveDeviceSshConfigurationAsync_UpdatesExisting (line 183) | [Fact] method DeleteDeviceSshConfigurationAsync_RemovesDevice (line 200) | [Fact] FILE: tests/NetworkOptimizer.Storage.Tests/WanDataUsageServiceTests.cs class WanDataUsageServiceTests (line 8) | public class WanDataUsageServiceTests method GetBillingCycleDates_DayAfterBillingDay_CycleStartsThisMonth (line 12) | [Fact] method GetBillingCycleDates_DayBeforeBillingDay_CycleStartsLastMonth (line 22) | [Fact] method GetBillingCycleDates_OnBillingDay_CycleStartsToday (line 32) | [Fact] method GetBillingCycleDates_Day1_FirstOfMonth (line 42) | [Fact] method GetBillingCycleDates_Day28_EndOfMonth (line 52) | [Fact] method GetBillingCycleDates_ClampsDayAbove28 (line 63) | [Fact] method GetBillingCycleDates_YearBoundary (line 73) | [Fact] method CalculateUsageFromSnapshots_EmptyList_ReturnsZero (line 86) | [Fact] method CalculateUsageFromSnapshots_SingleSnapshot_ReturnsZero (line 93) | [Fact] method CalculateUsageFromSnapshots_TwoSnapshots_ReturnsDelta (line 105) | [Fact] method CalculateUsageFromSnapshots_MultipleSnapshots_SumsDeltas (line 119) | [Fact] method CalculateUsageFromSnapshots_CounterReset_SkipsResetDelta (line 136) | [Fact] method CalculateUsageFromSnapshots_CounterResetAtStart_SkipsFirstDelta (line 157) | [Fact] method CalculateUsageFromSnapshots_LargeValues_HandlesCorrectly (line 177) | [Fact] method CalculateUsageFromSnapshots_BaselineWithBootTime_IncludesRawBytes (line 195) | [Fact] method CalculateUsageFromSnapshots_BaselineSingleSnapshot_ReturnsRawBytes (line 213) | [Fact] method CalculateUsageFromSnapshots_NonBaselineSingleSnapshot_ReturnsZero (line 230) | [Fact] method CalculateUsageFromSnapshots_BootBeforeCycleStart_NoBaseline (line 242) | [Fact] method CalculateUsageFromSnapshots_OldSnapshotWithoutBootTime_FallsBackToIsBaseline (line 261) | [Fact] method CalculateUsageFromSnapshots_NoCycleStart_FallsBackToIsBaseline (line 279) | [Fact] method WanKeyToNetworkGroup_MapsCorrectly (line 296) | [Theory] FILE: tests/NetworkOptimizer.Threats.Tests/BruteForceDetectorTests.cs class BruteForceDetectorTests (line 7) | public class BruteForceDetectorTests method CreateEvent (line 11) | private static ThreatEvent CreateEvent( method Detect_TwentyEventsOnSshPortWithinTenMinutes_DetectsPattern (line 33) | [Fact] method Detect_NineteenEvents_DoesNotDetect (line 53) | [Fact] method Detect_NonBruteForcePort_DoesNotDetect (line 69) | [Fact] method Detect_AllTargetPorts_AreMonitored (line 86) | [Theory] method Detect_EventsSpreadBeyondTenMinutes_DoesNotDetect (line 115) | [Fact] method Detect_MultipleSourcesSamePort_DetectsEachIndependently (line 134) | [Fact] method Detect_SameSourceDifferentPorts_DetectsEachPortSeparately (line 155) | [Fact] method Detect_EmptyEventList_ReturnsEmpty (line 175) | [Fact] method Detect_PatternDescription_ContainsDetails (line 183) | [Fact] method Detect_Confidence_ScalesWithEventCount (line 199) | [Fact] method Detect_ConfidenceCappedAtOne_WhenAllInWindow (line 214) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/CrowdSecClientTests.cs class CrowdSecClientTests (line 8) | public class CrowdSecClientTests method CrowdSecClientTests (line 12) | public CrowdSecClientTests() method LoadRateLimitState_SetsCurrentState (line 19) | [Fact] method GetRateLimitState_ReturnsCurrentCountAndDate (line 30) | [Fact] method GetIpReputationAsync_EmptyApiKey_ReturnsError (line 41) | [Fact] method GetIpReputationAsync_NullApiKey_ReturnsError (line 50) | [Fact] method IsRateLimited_InitialState_ReturnsFalse (line 59) | [Fact] method LoadRateLimitState_Overwrite_ReplacesState (line 65) | [Fact] method GetRateLimitState_InitialState_ReturnsZeroToday (line 79) | [Fact] method TestApiKeyAsync_EmptyKey_ReturnsFalse (line 87) | [Fact] method TestApiKeyAsync_NullKey_ReturnsFalse (line 96) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/DDoSDetectorTests.cs class DDoSDetectorTests (line 7) | public class DDoSDetectorTests method Detect_SufficientEventsAndSources_DetectsPattern (line 11) | [Fact] method Detect_NotEnoughEvents_ReturnsEmpty (line 39) | [Fact] method Detect_NotEnoughUniqueSources_ReturnsEmpty (line 65) | [Fact] method Detect_EmptyEvents_ReturnsEmpty (line 91) | [Fact] method Detect_EventsSpreadTooFarApart_ReturnsEmpty (line 98) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/ExploitCampaignDetectorTests.cs class ExploitCampaignDetectorTests (line 7) | public class ExploitCampaignDetectorTests method Detect_ThreeSourcesFromSameSubnet_DetectsPattern (line 11) | [Fact] method Detect_TwoSources_NotEnough (line 40) | [Fact] method Detect_DifferentSubnets_NoPattern (line 66) | [Fact] method Detect_EmptyEvents_ReturnsEmpty (line 97) | [Fact] method Detect_NonExploitationStages_ReturnsEmpty (line 104) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/ExposureValidatorTests.cs class ExposureValidatorTests (line 11) | public class ExposureValidatorTests method ExposureValidatorTests (line 18) | public ExposureValidatorTests() method CreatePortForwardRule (line 25) | private static UniFiPortForwardRule CreatePortForwardRule( method CreateThreatEvent (line 42) | private static ThreatEvent CreateThreatEvent( method ValidateAsync_PortForwardMatchingThreatDestPort_GeneratesExposedService (line 65) | [Fact] method ValidateAsync_PortForwardNotTargeted_ReturnsZeroThreats (line 95) | [Fact] method ValidateAsync_GeoBlockRecommendation_GeneratedWithCountryData (line 116) | [Fact] method ValidateAsync_EmptyRules_ReturnsEmptyReport (line 148) | [Fact] method ValidateAsync_NullRules_ReturnsEmptyReport (line 163) | [Fact] method ValidateAsync_MultipleRulesMultiplePorts_TracksEachService (line 176) | [Fact] method ValidateAsync_PortRange_ExpandsAndMatches (line 203) | [Fact] method ValidateAsync_TopSignatures_LimitedToFive (line 228) | [Fact] method ValidateAsync_GeoBlockRecommendation_NotGeneratedWithFewThreats (line 257) | [Fact] method ValidateAsync_ForwardTarget_FormattedCorrectly (line 282) | [Fact] method ValidateAsync_SeverityBreakdown_PopulatedFromEvents (line 304) | [Fact] method ValidateAsync_OnlyCountsIncomingTraffic (line 332) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/FlowInterestFilterTests.cs class FlowInterestFilterTests (line 7) | public class FlowInterestFilterTests method Parse (line 9) | private static JsonElement Parse(string json) => JsonDocument.Parse(js... method IsInteresting_BlockedAction_ReturnsTrue (line 11) | [Fact] method IsInteresting_HighRisk_ReturnsTrue (line 18) | [Fact] method IsInteresting_MediumRisk_ReturnsTrue (line 25) | [Fact] method IsInteresting_IncomingSensitivePort_ReturnsTrue (line 32) | [Fact] method IsInteresting_IncomingRdp_ReturnsTrue (line 39) | [Fact] method IsInteresting_LowRiskAllowedOutgoingNormalPort_ReturnsFalse (line 46) | [Fact] method IsInteresting_LowRiskAllowedIncomingNormalPort_ReturnsFalse (line 53) | [Fact] method IsInteresting_CaseInsensitiveAction_ReturnsTrue (line 60) | [Fact] method IsInteresting_CaseInsensitiveRisk_ReturnsTrue (line 67) | [Fact] method IsInteresting_MissingFields_ReturnsFalse (line 74) | [Fact] method IsInteresting_IncomingSqlServer_ReturnsTrue (line 81) | [Fact] method IsInteresting_OutgoingSuspiciousPort4444_ReturnsTrue (line 88) | [Fact] method IsInteresting_OutgoingSuspiciousPortIRC6667_ReturnsTrue (line 95) | [Fact] method IsInteresting_OutgoingNormalPort443_LowRisk_ReturnsFalse (line 102) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/KillChainClassifierTests.cs class KillChainClassifierTests (line 7) | public class KillChainClassifierTests method CreateEvent (line 11) | private static ThreatEvent CreateEvent( method Classify_ScanCategory_ReturnsReconnaissance (line 34) | [Theory] method Classify_ScanInSignatureName_ReturnsReconnaissance (line 49) | [Fact] method Classify_ExploitCategoryBlocked_ReturnsAttemptedExploitation (line 59) | [Theory] method Classify_ExploitCategoryDetected_ReturnsActiveExploitation (line 78) | [Theory] method Classify_PostExploitCategory_ReturnsPostExploitation (line 91) | [Theory] method Classify_TrojanInSignatureName_ReturnsPostExploitation (line 108) | [Fact] method Classify_PostExploitAndExploitKeywords_ReturnsPostExploitation (line 118) | [Fact] method Classify_UnknownCategoryHighSeverityDetected_ReturnsActiveExploitation (line 129) | [Fact] method Classify_UnknownCategoryHighSeverityBlocked_ReturnsAttemptedExploitation (line 137) | [Fact] method Classify_UnknownCategoryCriticalSeverityDetected_ReturnsActiveExploitation (line 145) | [Fact] method Classify_UnknownCategoryLowSeverity_ReturnsReconnaissance (line 153) | [Fact] method Classify_UnknownCategoryMediumSeverity_ReturnsReconnaissance (line 161) | [Fact] method Classify_LowercaseScan_ReturnsReconnaissance (line 171) | [Fact] method Classify_MixedCaseExploit_ReturnsCorrectStage (line 179) | [Fact] method CreateFlowEvent (line 189) | private static ThreatEvent CreateFlowEvent( method Classify_FlowOutgoingHighRisk_ReturnsPostExploitation (line 215) | [Fact] method Classify_FlowIncomingAllowedSensitivePort_ReturnsActiveExploitation (line 223) | [Fact] method Classify_FlowIncomingBlockedSensitivePort_ReturnsAttemptedExploitation (line 231) | [Fact] method Classify_FlowIncomingBlockedNormalPort_ReturnsReconnaissance (line 239) | [Fact] method Classify_FlowHighSeverityAllowed_ReturnsActiveExploitation (line 247) | [Fact] method Classify_FlowLowRiskOutgoing_ReturnsMonitored (line 255) | [Fact] method Classify_IpsEventStillUsesKeywords (line 263) | [Fact] method Classify_InfoSeverityIps_ReturnsMonitored (line 275) | [Fact] method Classify_InfoSeverityFlow_ReturnsMonitored (line 283) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/ScanSweepDetectorTests.cs class ScanSweepDetectorTests (line 7) | public class ScanSweepDetectorTests method CreateReconEvent (line 11) | private static ThreatEvent CreateReconEvent( method Detect_FiveDistinctPortsWithinWindow_DetectsPattern (line 33) | [Fact] method Detect_FourDistinctPorts_DoesNotDetect (line 56) | [Fact] method Detect_FivePortsOutsideSixHourWindow_DoesNotDetect (line 76) | [Fact] method Detect_MultipleSourceIps_DetectsIndependently (line 97) | [Fact] method Detect_SamePortRepeated_DoesNotCount (line 133) | [Fact] method Detect_NonReconEvents_AreIgnored (line 153) | [Fact] method Detect_EmptyEventList_ReturnsEmpty (line 172) | [Fact] method Detect_PatternDescription_ContainsSourceIpAndPortCount (line 180) | [Fact] method Detect_ConfidenceScaling_IncreasesWithPortCount (line 197) | [Fact] method Detect_MonitoredEvents_AreIncluded (line 220) | [Fact] FILE: tests/NetworkOptimizer.Threats.Tests/ThreatEventNormalizerTests.cs class ThreatEventNormalizerTests (line 9) | public class ThreatEventNormalizerTests method ThreatEventNormalizerTests (line 13) | public ThreatEventNormalizerTests() method NormalizeV1Events_ValidJson_ReturnsNormalizedEvents (line 21) | [Fact] method NormalizeV1Events_MultipleEvents_ReturnsAll (line 64) | [Fact] method NormalizeV1Events_MissingId_SkipsEvent (line 81) | [Fact] method NormalizeV1Events_NonArrayInput_ReturnsEmpty (line 95) | [Fact] method NormalizeV1Events_EmptyArray_ReturnsEmpty (line 105) | [Fact] method NormalizeV1Events_UsesCategory_FromAlert (line 115) | [Fact] method NormalizeV2Events_ValidJson_ReturnsNormalizedEvents (line 142) | [Fact] method NormalizeV2Events_NoDataProperty_ReturnsEmpty (line 186) | [Fact] method NormalizeV2Events_EmptyData_ReturnsEmpty (line 196) | [Fact] method NormalizeV2Events_FallsBackToDestIp_WhenDstIpMissing (line 206) | [Fact] method NormalizeSeverity_MapsCorrectly (line 240) | [Theory] method NormalizeAction_MapsCorrectly (line 256) | [Theory] method NormalizeV1Events_DuplicateIds_ReturnsAll (line 276) | [Fact] method NormalizeV1Events_DedupByInnerAlertId_CanBeAppliedPostNormalization (line 295) | [Fact] method NormalizeV1Events_TimestampConversion_IsUtc (line 319) | [Fact] method NormalizeFlowEvents_ValidFlow_ReturnsNormalizedEvent (line 337) | [Fact] method NormalizeFlowEvents_BlockedFlow_SetsBlockedAction (line 384) | [Fact] method NormalizeFlowEvents_NoData_ReturnsEmpty (line 417) | [Fact] method NormalizeFlowEvents_EmptyData_ReturnsEmpty (line 426) | [Fact] method NormalizeFlowEvents_MissingId_SkipsEvent (line 435) | [Fact] method NormalizeFlowEvents_NoDomain_DomainIsNull (line 462) | [Fact] method MapFlowSeverity_MapsCorrectly (line 492) | [Theory] FILE: tests/NetworkOptimizer.Threats.Tests/ThreatPatternAnalyzerTests.cs class ThreatPatternAnalyzerTests (line 9) | public class ThreatPatternAnalyzerTests method ThreatPatternAnalyzerTests (line 13) | public ThreatPatternAnalyzerTests() method DetectPatterns_EmptyList_ReturnsEmpty (line 19) | [Fact] method DetectPatterns_ScanSweepEvents_DetectsPortScan (line 27) | [Fact] method DetectPatterns_BruteForceEvents_DetectsBruteForce (line 54) | [Fact] method DetectPatterns_NoPatternEvents_ReturnsEmpty (line 81) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/CgnatIpDetectionTests.cs class CgnatIpDetectionTests (line 12) | public class CgnatIpDetectionTests method IsCgnatIp (line 18) | private static bool IsCgnatIp(string? ip) method IsCgnatIp_CgnatRange_ReturnsTrue (line 37) | [Theory] method IsCgnatIp_NonCgnat100Range_ReturnsFalse (line 54) | [Theory] method IsCgnatIp_PrivateIps_ReturnsFalse (line 69) | [Theory] method IsCgnatIp_PublicIps_ReturnsFalse (line 85) | [Theory] method IsCgnatIp_NullOrEmpty_ReturnsFalse (line 98) | [Theory] method IsCgnatIp_InvalidFormat_ReturnsFalse (line 107) | [Theory] FILE: tests/NetworkOptimizer.UniFi.Tests/ClientIpEnricherTests.cs class ClientIpEnricherTests (line 11) | public class ClientIpEnricherTests method BuildMacToIpLookup_WithActiveClients_UsesIpField (line 15) | [Fact] method BuildMacToIpLookup_WithHistoryClients_UsesLastIpField (line 36) | [Fact] method BuildMacToIpLookup_PrefersIpOverLastIp (line 54) | [Fact] method BuildMacToIpLookup_IsCaseInsensitive (line 70) | [Fact] method BuildMacToIpLookup_WithNullHistory_ReturnsEmptyLookup (line 87) | [Fact] method BuildMacToIpLookup_WithEmptyHistory_ReturnsEmptyLookup (line 98) | [Fact] method BuildMacToIpLookup_SkipsEntriesWithNullMac (line 111) | [Fact] method BuildMacToIpLookup_SkipsEntriesWithEmptyMac (line 129) | [Fact] method BuildMacToIpLookup_SkipsEntriesWithNullLastIp (line 146) | [Fact] method BuildMacToIpLookup_SkipsEntriesWithEmptyLastIp (line 164) | [Fact] method BuildMacToIpLookup_WithDuplicateMacs_UsesFirst (line 181) | [Fact] method GetEnrichedIp_WithPrimaryIp_ReturnsPrimaryIp (line 203) | [Fact] method GetEnrichedIp_WithNullPrimaryIp_ReturnsHistoryIp (line 219) | [Fact] method GetEnrichedIp_WithEmptyPrimaryIp_ReturnsHistoryIp (line 235) | [Fact] method GetEnrichedIp_WithNoPrimaryIpAndNoHistoryMatch_ReturnsNull (line 251) | [Fact] method GetEnrichedIp_WithNullMac_ReturnsNull (line 267) | [Fact] method GetEnrichedIp_WithEmptyMac_ReturnsNull (line 283) | [Fact] method GetEnrichedIp_MacLookupIsCaseInsensitive (line 299) | [Fact] method UxClientWithoutIp_GetsIpFromHistory (line 319) | [Fact] method MultipleUxClientsWithoutIps_AllGetEnrichedFromHistory (line 355) | [Fact] method MixedClients_SomeWithIpsSomeWithout (line 379) | [Fact] method ClientNotInHistory_ReturnsNullWhenNoStatStaIp (line 411) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/DaisyChainPathTests.cs class DaisyChainPathTests (line 17) | public class DaisyChainPathTests method DaisyChainPathTests (line 24) | public DaisyChainPathTests() method BuildHopList_ClientAndServerOnSameSwitch_PathOnlyIncludesSwitch (line 45) | [Fact] method BuildHopList_ServerDownstreamFromClientSwitch_GatewayNotInPath (line 87) | [Fact] method BuildHopList_ServerDownstreamFromClientSwitch_ServerSwitchInPath (line 117) | [Fact] method BuildHopList_ServerDownstreamFromClientSwitch_BothSwitchesInPath (line 147) | [Fact] method BuildHopList_ServerDownstreamFromClientSwitch_CorrectHopOrder (line 182) | [Fact] method BuildHopList_InterVlanRouting_GatewayInPath (line 229) | [Fact] method BuildHopList_TargetIsGateway_PathIncludesGateway (line 274) | [Fact] method BuildHopList_TargetIsGateway_LagUplink_ShowsAggregateSpeed (line 313) | [Fact] method BuildHopList_DaisyChain_LagUplink_ShowsAggregateSpeed (line 361) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/DeviceTypeClassificationTests.cs class DeviceTypeClassificationTests (line 14) | public class DeviceTypeClassificationTests method CreateDeviceMacSet (line 23) | private static HashSet CreateDeviceMacSet(params string[] macs... method FromUniFiApiType_GatewayTypes_ReturnsGateway (line 28) | [Theory] method FromUniFiApiType_SwitchTypes_ReturnsSwitch (line 45) | [Theory] method FromUniFiApiType_AccessPointTypes_ReturnsAccessPoint (line 57) | [Theory] method FromUniFiApiType_CellularModemTypes_ReturnsCellularModem (line 69) | [Theory] method FromUniFiApiType_BuildingBridgeTypes_ReturnsBuildingBridge (line 81) | [Theory] method FromUniFiApiType_CloudKeyTypes_ReturnsCloudKey (line 93) | [Theory] method FromUniFiApiType_DeviceBridgeTypes_ReturnsDeviceBridge (line 107) | [Theory] method FromUniFiApiType_NasTypes_ReturnsNAS (line 121) | [Theory] method FromUniFiApiType_NvrTypes_ReturnsProtectDevice (line 133) | [Theory] method FromUniFiApiType_PhoneTypes_ReturnsTalkDevice (line 145) | [Theory] method FromUniFiApiType_AccessoryTypes_ReturnsAccessory (line 157) | [Theory] method FromUniFiApiType_CableModemTypes_ReturnsCableModem (line 169) | [Theory] method FromUniFiApiType_TravelRouterTypes_ReturnsTravelRouter (line 181) | [Theory] method FromUniFiApiType_UnknownOrEmptyTypes_ReturnsUnknown (line 193) | [Theory] method FromUniFiApiType_SmartPowerDevices_ReturnsSmartPower (line 211) | [Theory] method FromUniFiApiType_RegularAccessPoints_ReturnsAccessPoint (line 226) | [Theory] method FromUniFiApiType_NonUapWithSmartPowerModel_UsesTypeClassification (line 242) | [Theory] method UniFiDeviceResponse_DeviceType_UsesModelForClassification (line 254) | [Fact] method UniFiDeviceResponse_DeviceType_RegularAp_ReturnsAccessPoint (line 273) | [Fact] method DetermineDeviceType_UspStrip_ReturnsSmartPower (line 296) | [Fact] method DetermineDeviceType_UspPlug_ReturnsSmartPower (line 315) | [Fact] method DetermineDeviceType_UdmWithNoUplink_ReturnsGateway (line 338) | [Fact] method DetermineDeviceType_UdmWithUplinkToNonUniFiDevice_ReturnsGateway (line 359) | [Fact] method DetermineDeviceType_UcgWithNoUplink_ReturnsGateway (line 381) | [Fact] method DetermineDeviceType_UxgWithNoUplink_ReturnsGateway (line 401) | [Fact] method DetermineDeviceType_UxExpressUplinkToGateway_ReturnsAccessPoint (line 424) | [Fact] method DetermineDeviceType_Ux7UplinkToSwitch_ReturnsAccessPoint (line 448) | [Fact] method DetermineDeviceType_UxExpressAsStandaloneGateway_ReturnsGateway (line 471) | [Fact] method DetermineDeviceType_DreamRouterUplinkToGateway_ReturnsAccessPoint (line 493) | [Fact] method DetermineDeviceType_UxExpressWirelessUplink_ReturnsAccessPoint (line 516) | [Fact] method DetermineDeviceType_Switch_ReturnsSwitch (line 546) | [Fact] method DetermineDeviceType_AccessPoint_ReturnsAccessPoint (line 566) | [Fact] method DetermineDeviceType_CellularModem_ReturnsCellularModem (line 585) | [Fact] method DetermineDeviceType_CloudKey_ReturnsCloudKey (line 603) | [Fact] method DetermineDeviceType_BuildingBridge_ReturnsBuildingBridge (line 621) | [Fact] method DetermineDeviceType_UdmWithEmptyUplinkMac_ReturnsGateway (line 643) | [Fact] method DetermineDeviceType_UdmWithNullUplinkMac_ReturnsGateway (line 662) | [Fact] method DetermineDeviceType_CaseInsensitiveUplinkMacMatching (line 681) | [Fact] method DetermineDeviceType_UnknownType_ReturnsUnknown (line 701) | [Fact] method DetermineDeviceType_NullType_ReturnsUnknown (line 719) | [Fact] method DetermineDeviceType_TypicalHomeNetwork_GatewayAndMeshAp (line 741) | [Fact] method DetermineDeviceType_SmallOffice_UxExpressAsOnlyGateway (line 778) | [Fact] method DetermineDeviceType_EnterpriseNetwork_MultipleDeviceTypes (line 799) | [Fact] method DetermineDeviceType_ChainedMeshNetwork (line 852) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/DiscoveredClientTests.cs class DiscoveredClientTests (line 6) | public class DiscoveredClientTests method EffectiveNetworkId_WhenNoOverride_ReturnsNetworkId (line 10) | [Fact] method EffectiveNetworkId_WhenOverrideEnabled_ReturnsOverrideId (line 25) | [Fact] method EffectiveNetworkId_WhenOverrideEnabledButIdNull_ReturnsNetworkId (line 40) | [Fact] method EffectiveNetworkId_WhenOverrideEnabledButIdEmpty_ReturnsNetworkId (line 55) | [Fact] method EffectiveNetworkId_WhenOverrideDisabledAndIdSet_ReturnsNetworkId (line 70) | [Fact] method Vlan_DefaultsToNull (line 89) | [Fact] method Vlan_CanBeSet (line 99) | [Fact] method EffectiveNetworkId_WirelessCameraWithOverride (line 116) | [Fact] method EffectiveNetworkId_WiredDeviceNoOverride (line 141) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/Fixtures/NetworkTestData.cs class NetworkTestData (line 10) | public static class NetworkTestData method CreateGateway (line 45) | public static DiscoveredDevice CreateGateway( method CreateSwitch (line 70) | public static DiscoveredDevice CreateSwitch( method CreateWiredAccessPoint (line 102) | public static DiscoveredDevice CreateWiredAccessPoint( method CreateMeshAccessPoint (line 131) | public static DiscoveredDevice CreateMeshAccessPoint( method CreateWiredClient (line 174) | public static DiscoveredClient CreateWiredClient( method CreateStaleWirelessClient (line 201) | public static DiscoveredClient CreateStaleWirelessClient( method CreateWirelessClient (line 232) | public static DiscoveredClient CreateWirelessClient( method CreateMloClient (line 270) | public static DiscoveredClient CreateMloClient( method CreateWiredClientPath (line 333) | public static NetworkPath CreateWiredClientPath(int linkSpeedMbps = 1000) method CreateWirelessClientPath (line 406) | public static NetworkPath CreateWirelessClientPath( method CreateMeshClientPath (line 502) | public static NetworkPath CreateMeshClientPath( method CreateAsymmetricWirelessClientPath (line 621) | public static NetworkPath CreateAsymmetricWirelessClientPath( method CreateMeshApTargetPath (line 724) | public static NetworkPath CreateMeshApTargetPath( method CreateBasicTopology (line 826) | public static NetworkTopology CreateBasicTopology() method CreateMultiVlanTopology (line 859) | public static NetworkTopology CreateMultiVlanTopology() method CreateDaisyChainTopology (line 908) | public static NetworkTopology CreateDaisyChainTopology(int linkSpeedMb... method CreateDaisyChainServerPosition (line 988) | public static ServerPosition CreateDaisyChainServerPosition() method CreateGatewayServerPosition (line 1007) | public static ServerPosition CreateGatewayServerPosition() method CreateSameSwitchServerPosition (line 1026) | public static ServerPosition CreateSameSwitchServerPosition() method CreateLagDaisyChainTopology (line 1050) | public static NetworkTopology CreateLagDaisyChainTopology() method CreateLagDaisyChainRawDevices (line 1130) | public static Dictionary CreateLagDaisyCh... FILE: tests/NetworkOptimizer.UniFi.Tests/Fixtures/TopologyBuilder.cs class TopologyBuilder (line 11) | public class TopologyBuilder class DeviceEntry (line 20) | private class DeviceEntry class PortEntry (line 27) | private class PortEntry class LagEntry (line 36) | private class LagEntry class ClientEntry (line 42) | private class ClientEntry class NetworkEntry (line 47) | private class NetworkEntry class ServerEntry (line 52) | private class ServerEntry method WithGateway (line 77) | public TopologyBuilder WithGateway( method WithSwitch (line 152) | public TopologyBuilder WithSwitch( method WithAP (line 229) | public TopologyBuilder WithAP( method WithMeshAP (line 286) | public TopologyBuilder WithMeshAP( method WithWiredClient (line 336) | public TopologyBuilder WithWiredClient( method WithWirelessClient (line 364) | public TopologyBuilder WithWirelessClient( method WithNetwork (line 410) | public TopologyBuilder WithNetwork( method WithServer (line 438) | public TopologyBuilder WithServer( method BuildTopology (line 467) | public NetworkTopology BuildTopology() method BuildRawDevices (line 482) | public Dictionary BuildRawDevices() method BuildServerPosition (line 560) | public ServerPosition BuildServerPosition() method GetDevice (line 582) | public DiscoveredDevice? GetDevice(string mac) => method GetClient (line 588) | public DiscoveredClient? GetClient(string mac) => method EnsurePortInTable (line 598) | private static void EnsurePortInTable(List ports, int portI... method GenerateIp (line 615) | private static string GenerateIp(string mac) FILE: tests/NetworkOptimizer.UniFi.Tests/GatewayApExclusionTests.cs class GatewayApExclusionTests (line 13) | public class GatewayApExclusionTests method CreateGatewayDevice (line 19) | private static DiscoveredDevice CreateGatewayDevice( method UdmProFamily_Excluded (line 43) | [Theory] method Efg_Excluded (line 57) | [Theory] method EfgCore_ExcludedByPrefix (line 69) | [Fact] method OtherGatewayOnly_NotMatchedButNoRadios (line 81) | [Theory] method Udm_Allowed (line 103) | [Fact] method Udr_Allowed (line 114) | [Fact] method Udr7_Allowed (line 124) | [Fact] method Ux_Allowed (line 135) | [Fact] method Ux7_Allowed (line 145) | [Fact] method Udw_Allowed (line 155) | [Fact] method Udr5GMax_Allowed (line 165) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/LagSpeedTests.cs class LagSpeedTests (line 8) | public class LagSpeedTests method AggregatedBy_False_DeserializesToNull (line 12) | [Fact] method AggregatedBy_Integer_DeserializesToValue (line 21) | [Fact] method NonLagPort_ReturnsIndividualSpeed (line 34) | [Fact] method LagParent_ReturnsSumOfAllMemberSpeeds (line 46) | [Fact] method LagChild_ReturnsSameAggregateAsParent (line 61) | [Fact] method LagWithDownChild_ExcludesDownPortFromAggregate (line 79) | [Fact] method PortNotFound_ReturnsZero (line 93) | [Fact] method LagWithDownParent_ExcludesParentSpeed (line 104) | [Fact] method TwoChildLag_ReturnsCorrectAggregate (line 118) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/NetworkPathAnalyzerIntegrationTests.cs class StaleWirelessClientDetectionTests (line 15) | public class StaleWirelessClientDetectionTests method StaleWirelessClient_HasNoApMac (line 21) | [Fact] method StaleWirelessClient_TriggersIncompletePathCondition (line 39) | [Fact] method NormalWirelessClient_DoesNotTriggerIncompletePathCondition (line 55) | [Fact] method WiredClient_DoesNotTriggerIncompletePathCondition (line 72) | [Fact] method MloClient_DoesNotTriggerIncompletePathCondition (line 89) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/NetworkPathAnalyzerTests.cs class NetworkPathAnalyzerTests (line 12) | public class NetworkPathAnalyzerTests method HasWirelessConnection_WiredPath_ReturnsFalse (line 16) | [Fact] method HasWirelessConnection_WirelessClientPath_ReturnsTrue (line 26) | [Fact] method HasWirelessConnection_MeshClientPath_ReturnsTrue (line 36) | [Fact] method HasWirelessConnection_WirelessClientFollowedByAP_ReturnsTrue (line 46) | [Fact] method HasWirelessConnection_ClientFollowedByAP_ReturnsTrue_BackwardsCompat (line 63) | [Fact] method HasWirelessConnection_APFollowedBySwitch_ReturnsFalse (line 81) | [Fact] method HasWirelessConnection_APFollowedByAP_WiredBackhaul_ReturnsFalse (line 98) | [Fact] method HasWirelessConnection_APFollowedByAP_WirelessMesh_ReturnsTrue (line 116) | [Fact] method HasWirelessSegment_WiredPath_ReturnsFalse (line 137) | [Fact] method HasWirelessSegment_PathWithAP_ReturnsTrue (line 147) | [Fact] method SwitchHopCount_SingleSwitch_ReturnsOne (line 161) | [Fact] method SwitchHopCount_NoSwitches_ReturnsZero (line 171) | [Fact] method CalculateEfficiency_ValidPath_CalculatesCorrectly (line 193) | [Fact] method CalculateEfficiency_ZeroRealisticMax_DoesNotThrow (line 212) | [Fact] method CalculateEfficiency_AssignsCorrectGrade (line 234) | [Theory] method GenerateInsights_Wired100Mbps_RecommendsUpgrade (line 267) | [Fact] method GenerateInsights_Wireless86Mbps_DoesNotRecommendUpgrade (line 287) | [Fact] method GenerateInsights_MeshPath_DoesNotRecommendGigabitUpgrade (line 307) | [Fact] method GenerateInsights_WirelessPath_AddsWirelessInsight (line 329) | [Fact] method GenerateInsights_GatewayTarget_AddsGatewayInsight (line 353) | [Fact] method GenerateInsights_APTarget_PerformingWell_AddsAPInsight (line 375) | [Fact] method GenerateInsights_Maxing1GbE_RecommendsUpgrade (line 400) | [Fact] method GenerateInsights_HighRetransmits_AddsPacketLossInsight (line 424) | [Fact] method GenerateInsights_WirelessClientRetransmits_RecommendsSignalCheck (line 448) | [Fact] method MeshClientPath_HasCorrectHopCount (line 476) | [Fact] method MeshClientPath_MeshAPHasWirelessEgress (line 486) | [Fact] method MeshClientPath_WiredAPHasWirelessIngress (line 501) | [Fact] method MeshClientPath_ClientHopHasClientSpeed_NotMeshBackhaulSpeed (line 515) | [Fact] method MeshClientPath_HasTwoAPHops (line 531) | [Fact] method MeshClientPath_APToAPIsWirelessConnection (line 544) | [Fact] method WiredPath_IdentifiesBottleneck (line 558) | [Fact] method WiredPath_AllSameSpeed_NoRealBottleneck (line 581) | [Fact] method InterVlanPath_RequiresRouting (line 596) | [Fact] method SameVlanPath_DoesNotRequireRouting (line 616) | [Fact] method CreateMeshAccessPoint_HasWirelessUplink (line 630) | [Fact] method CreateWiredAccessPoint_HasWiredUplink (line 645) | [Fact] method CreateMloClient_HasMultipleLinks (line 656) | [Fact] method CreateMloClient_TotalRateIsSum (line 670) | [Fact] method CreateBasicTopology_HasAllDevices (line 684) | [Fact] method TailscaleHop_HasWanPortNames (line 700) | [Fact] method TeleportHop_HasWanPortNames (line 720) | [Fact] method WanHop_HasWanPortNames (line 740) | [Fact] method VpnHop_HasWanPortNames (line 760) | [Fact] method VpnPath_BottleneckDescription_ShowsWan (line 780) | [Fact] method ExternalPath_IsExternalPath_IsTrue (line 822) | [Fact] method GenerateInsights_ExternalPath_DoesNotShowGatewayWarning (line 841) | [Fact] method NetworkHop_MloEnabled_DefaultsToNull (line 877) | [Fact] method NetworkHop_MloEnabled_CanBeSetToTrue (line 892) | [Fact] method NetworkHop_MloEnabled_CanBeSetToFalse (line 908) | [Fact] method NetworkPath_WithMloEnabledAp_TracksMloStatus (line 924) | [Fact] method NetworkPath_WithMloDisabledAp_TracksMloStatus (line 947) | [Fact] method MloSsidMatching_ApBroadcastsMloSsid_ShouldBeTrue (line 974) | [Fact] method MloSsidMatching_ApDoesNotBroadcastMloSsid_ShouldBeFalse (line 988) | [Fact] method MloSsidMatching_CaseInsensitive_ShouldMatch (line 1002) | [Fact] method MloSsidMatching_NoMloEnabledSsids_ShouldBeFalse (line 1016) | [Fact] method MloSsidMatching_EmptyVapTable_ShouldBeFalse (line 1030) | [Fact] method Wifi7Capability_ApWithIs11BeRadio_IsWifi7Capable (line 1048) | [Fact] method Wifi7Capability_ApWithoutIs11BeRadio_IsNotWifi7Capable (line 1066) | [Fact] method Wifi7Capability_EmptyRadioTable_IsNotWifi7Capable (line 1083) | [Fact] method Wifi7Capability_NullRadioTable_IsNotWifi7Capable (line 1096) | [Fact] method MloRequiresWifi7_NonWifi7ApWithMloSsid_ShouldNotEnableMlo (line 1109) | [Fact] method MloRequiresWifi7_Wifi7ApWithMloSsid_ShouldEnableMlo (line 1132) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/NetworkPathTests.cs class NetworkPathTests (line 7) | public class NetworkPathTests method NetworkPath_DefaultValues_AreCorrect (line 11) | [Fact] method NetworkPath_CalculatedAt_DefaultsToNearNow (line 41) | [Fact] method SwitchHopCount_NoHops_ReturnsZero (line 55) | [Fact] method SwitchHopCount_NoSwitches_ReturnsZero (line 65) | [Fact] method SwitchHopCount_MultipleSwitches_CountsCorrectly (line 83) | [Fact] method HasWirelessSegment_NoHops_ReturnsFalse (line 107) | [Fact] method HasWirelessSegment_NoAps_ReturnsFalse (line 117) | [Fact] method HasWirelessSegment_WithAp_ReturnsTrue (line 135) | [Fact] method HasWirelessConnection_NoHops_ReturnsFalse (line 157) | [Fact] method HasWirelessConnection_SingleHop_ReturnsFalse (line 167) | [Fact] method HasWirelessConnection_WirelessClientToAp_ReturnsTrue (line 183) | [Fact] method HasWirelessConnection_ClientToAp_ReturnsTrue_BackwardsCompat (line 200) | [Fact] method HasWirelessConnection_ApToAp_WirelessMesh_ReturnsTrue (line 218) | [Fact] method HasWirelessConnection_ApToAp_WiredBackhaul_ReturnsFalse (line 235) | [Fact] method HasWirelessConnection_ApToSwitch_ReturnsFalse (line 252) | [Fact] method HasWirelessConnection_SwitchToAp_ReturnsFalse (line 269) | [Fact] method HasWirelessConnection_ComplexPathWithWirelessClient_ReturnsTrue (line 286) | [Fact] method HasWirelessConnection_ComplexPathWithMesh_ReturnsTrue (line 307) | [Fact] method HasWirelessConnection_ComplexPathWithWiredBackhaul_ReturnsFalse (line 326) | [Fact] method HasWirelessConnection_WiredPathWithAp_ReturnsFalse (line 345) | [Fact] method NetworkPath_CanSetAllProperties (line 367) | [Fact] method NetworkPath_InvalidPath_CanSetErrorMessage (line 417) | [Fact] class NetworkHopTests (line 435) | public class NetworkHopTests method NetworkHop_DefaultValues_AreCorrect (line 439) | [Fact] method HopType_AllValuesAreDefined (line 476) | [Fact] method HopType_DefaultValue_IsClient (line 489) | [Fact] method NetworkHop_CanSetAllProperties (line 500) | [Fact] method NetworkHop_WirelessHop_CanSetAllWirelessProperties (line 543) | [Fact] method NetworkHop_BottleneckHop_CanBeMarked (line 578) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/PathAnalysisResultTests.cs class PathAnalysisResultTests (line 7) | public class PathAnalysisResultTests method PathAnalysisResult_DefaultValues_AreCorrect (line 11) | [Fact] method CalculateEfficiency_ZeroRealisticMax_DoesNotCalculate (line 37) | [Fact] method CalculateEfficiency_CalculatesCorrectPercentage (line 56) | [Theory] method CalculateEfficiency_AssignsCorrectGrade (line 79) | [Theory] method CalculateEfficiency_AsymmetricSpeeds_CalculatesBothCorrectly (line 112) | [Fact] method GenerateInsights_GatewayTest_SkipsPerformanceWarnings (line 137) | [Fact] method GenerateInsights_ApTestPerformingWell_NotesLimitedByCpu (line 166) | [Fact] method GenerateInsights_ApTestBelowThreshold_GeneratesNormalInsights (line 191) | [Fact] method GenerateInsights_WirelessConnection_NotesVariableSpeed (line 218) | [Fact] method GenerateInsights_PoorPerformance_AddsCongestionWarning (line 249) | [Fact] method GenerateInsights_FairPerformance_NotesModeratePerformance (line 268) | [Fact] method GenerateInsights_LargeAsymmetry_RecommendsDuplexCheck (line 287) | [Fact] method GenerateInsights_100MbpsLink_RecommendsUpgrade (line 310) | [Fact] method GenerateInsights_WirelessWith100MbpsTheo_DoesNotRecommendUpgrade (line 333) | [Fact] method GenerateInsights_MaxingOutGigabit_Recommends25GUpgrade (line 361) | [Fact] method GenerateInsights_NoRetransmits_NoRetransmitInsights (line 388) | [Fact] method GenerateInsights_ElevatedRetransmits_WirelessClient_RecommendsSignalCheck (line 412) | [Fact] method GenerateInsights_ElevatedRetransmits_MeshedAp_RecommendsBackhaulCheck (line 444) | [Fact] method GenerateInsights_UniFiDevice_HigherRetransmitThreshold (line 477) | [Fact] method GenerateInsights_BidirectionalRetransmits_WiredPath_RecommendsCableCheck (line 504) | [Fact] method PerformanceGrade_AllValuesAreDefined (line 540) | [Fact] method PerformanceGrade_OrderIsCorrect (line 552) | [Fact] method GetDirectionalRatesFromPath_MeshAp_FlipsChildPerspectiveToParent (line 566) | [Fact] method GetDirectionalRatesFromPath_MeshAp_SymmetricRates_StillWorks (line 601) | [Fact] method GetDirectionalRatesFromPath_WiredAp_ReturnsNull (line 632) | [Fact] method GetDirectionalRatesFromPath_WanPath_UsesIngressEgressSpeeds (line 657) | [Fact] method GetDirectionalRatesFromPath_TailscalePath_UsesWanSpeeds (line 687) | [Fact] method GetDirectionalRatesFromPath_SymmetricWan_ReturnsNull (line 717) | [Fact] method GetDirectionalRatesFromPath_WirelessClient_ReturnsNull (line 747) | [Fact] method IsAsymmetric_VariousDifferences_ReturnsCorrectly (line 776) | [Theory] method IsAsymmetric_NullRx_ReturnsFalse (line 793) | [Fact] method IsAsymmetric_NullTx_ReturnsFalse (line 799) | [Fact] method IsAsymmetric_BothNull_ReturnsFalse (line 805) | [Fact] method IsAsymmetric_ZeroRx_ReturnsFalse (line 811) | [Fact] method IsAsymmetric_ZeroTx_ReturnsFalse (line 817) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/PathTrace/BuildHopListTests.cs class BuildHopListTests (line 16) | public class BuildHopListTests method BuildHopListTests (line 20) | public BuildHopListTests() method SimpleWiredPath_MixedSpeeds_AllHopSpeedsCorrect (line 44) | [Fact] method GatewayAsTarget_DoesNotUseFallbackWanSpeed (line 122) | [Fact] method InterVlanRouting_PathTraversesGateway (line 187) | [Fact] method WirelessClientPath_CorrectRatesAndBottleneck (line 246) | [Fact] method MeshAPBackhaul_WirelessEgressFlagsSet (line 324) | [Fact] method LagAggregateLink_ShowsAggregateSpeed (line 389) | [Fact] method LagAggregateLink_TrafficTraversesLag_ShowsAggregateSpeed (line 453) | [Fact] method DaisyChainSwitches_DifferentSpeedsAtEachLayer (line 520) | [Fact] method SameSwitchPath_NoGatewayHop (line 587) | [Fact] method APWithEmptyPortTable_SpeedResolvesFromSwitchSide (line 653) | [Fact] method APWithPortTable_UpstreamMissing_FallsBackToLocalPort (line 708) | [Fact] method NoTarget_ReturnsEarlyWithMinimalPath (line 762) | [Fact] method GatewayAsTarget_ServerChainAddedCorrectly (line 798) | [Fact] method InterVlanRouting_DaisyChain_SwitchAppearsTwice (line 856) | [Fact] method MidPathBottleneck_10G_10G_1G_10G_5G (line 909) | [Fact] method MidPathBottleneck_2500G_Sandwiched_By_10G (line 954) | [Fact] method MidPathBottleneck_InterVlan_1G_Between_10G (line 999) | [Fact] method MidPathBottleneck_GatewayTarget_1G_Between_10G (line 1045) | [Fact] method MidPathBottleneck_DirectServerToClient_NoRouting (line 1080) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/RadioFormatHelperTests.cs class RadioFormatHelperTests (line 7) | public class RadioFormatHelperTests method FormatBand_KnownBands_ReturnsHumanReadable (line 11) | [Theory] method FormatBand_CaseInsensitive (line 24) | [Theory] method FormatBand_UnknownBands_ReturnsOriginal (line 38) | [Theory] method FormatBand_NullOrEmpty_ReturnsEmpty (line 51) | [Theory] method FormatProtocol_KnownProtocols_ReturnsWiFiGeneration (line 67) | [Theory] method FormatProtocol_CaseInsensitive (line 84) | [Theory] method FormatProtocol_AxWith6GHz_ReturnsWiFi6E (line 101) | [Fact] method FormatProtocol_AxWith5GHz_ReturnsWiFi6 (line 111) | [Fact] method FormatProtocol_AxWith24GHz_ReturnsWiFi6 (line 121) | [Fact] method FormatProtocol_AxWith6E_CaseInsensitive (line 131) | [Theory] method FormatProtocol_UnknownProtocols_ReturnsWiFiWithOriginal (line 144) | [Theory] method FormatProtocol_NullOrEmpty_ReturnsEmpty (line 156) | [Theory] method FormatProtocolSuffix_KnownProtocols_ReturnsSuffix (line 172) | [Theory] method FormatProtocolSuffix_AxWith6GHz_Returns6ESuffix (line 189) | [Fact] method FormatProtocolSuffix_AxWithout6GHz_Returns6Suffix (line 199) | [Fact] method FormatProtocolSuffix_UnknownProtocols_ReturnsParenthesized (line 209) | [Theory] method FormatProtocolSuffix_NullOrEmpty_ReturnsEmpty (line 221) | [Theory] method FormatProtocolSuffix_CaseInsensitive (line 233) | [Theory] FILE: tests/NetworkOptimizer.UniFi.Tests/SnapshotIntegrationTests.cs class SnapshotIntegrationTests (line 12) | public class SnapshotIntegrationTests method AsymmetricWirelessPath_PreservesDirectionalRates (line 16) | [Fact] method SymmetricWirelessPath_NotDetectedAsAsymmetric (line 39) | [Fact] method AsymmetricDetection_ThresholdBehavior (line 57) | [Theory] method MeshApTargetPath_GetDirectionalRates_FlipsChildPerspective (line 75) | [Fact] method MeshApTargetPath_SymmetricRates_StillReturnsValues (line 103) | [Fact] method WiredApPath_GetDirectionalRates_ReturnsNull (line 128) | [Fact] method SnapshotComparison_CurrentHigher_UsesCurrentRate (line 163) | [Fact] method SnapshotComparison_SnapshotHigher_UsesSnapshotRate (line 182) | [Fact] method SnapshotComparison_MixedHigher_PicksBestOfEach (line 200) | [Fact] method ClientRoamed_SnapshotSkipped_UsesCurrentRatesOnly (line 222) | [Fact] method ClientNotRoamed_SnapshotUsed_PicksMaxRates (line 249) | [Fact] method MeshDevice_SnapshotComparison_PicksMaxRates (line 279) | [Fact] method MeshDevice_NotInSnapshot_UsesCurrentRatesOnly (line 301) | [Fact] method PathAnalysis_AsymmetricWirelessClient_DetectsAsymmetry (line 320) | [Fact] method PathAnalysis_MeshApTarget_CorrectDirectionalMapping (line 348) | [Fact] method PathAnalysis_WiredClient_NoAsymmetricDetection (line 376) | [Fact] method MloClient_SnapshotComparison_SummedRatesCompared (line 394) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiClientResponseTests.cs class UniFiClientResponseTests (line 7) | public class UniFiClientResponseTests method EffectiveNetworkId_WhenNoOverride_ReturnsNetworkId (line 11) | [Fact] method EffectiveNetworkId_WhenOverrideEnabled_ReturnsOverrideId (line 26) | [Fact] method EffectiveNetworkId_WhenOverrideEnabledButIdNull_ReturnsNetworkId (line 41) | [Fact] method EffectiveNetworkId_WhenOverrideEnabledButIdEmpty_ReturnsNetworkId (line 56) | [Fact] method EffectiveNetworkId_WhenOverrideDisabledAndIdSet_ReturnsNetworkId (line 71) | [Fact] method Vlan_DefaultsToNull (line 90) | [Fact] method Vlan_CanBeSet (line 100) | [Fact] method VirtualNetworkOverrideEnabled_DefaultsToFalse (line 117) | [Fact] method VirtualNetworkOverrideId_DefaultsToNull (line 127) | [Fact] method EffectiveNetworkId_ReolinkCameraOnIOTSsidWithCamerasOverride (line 141) | [Fact] method EffectiveNetworkId_CameraWithMatchingNetworkIdAndOverride (line 165) | [Fact] method EffectiveNetworkId_SimpliSafeCameraNoOverride (line 186) | [Fact] method BestIp_WhenIpSet_ReturnsIp (line 210) | [Fact] method BestIp_WhenIpEmptyAndLastIpSet_ReturnsLastIp (line 225) | [Fact] method BestIp_WhenIpNullAndLastIpSet_ReturnsLastIp (line 240) | [Fact] method BestIp_WhenIpAndLastIpEmpty_ReturnsFixedIp (line 254) | [Fact] method BestIp_WhenAllEmpty_ReturnsNull (line 269) | [Fact] method BestIp_DefaultClient_ReturnsNull (line 284) | [Fact] method BestIp_UxClientScenario_FallsBackToLastIp (line 294) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiFingerprintDatabaseTests.cs class UniFiFingerprintDatabaseTests (line 9) | public class UniFiFingerprintDatabaseTests method UniFiFingerprintDatabase_DefaultValues_AreCorrect (line 13) | [Fact] method GetDeviceTypeName_ExistingId_ReturnsName (line 32) | [Fact] method GetDeviceTypeName_NonExistingId_ReturnsNull (line 45) | [Fact] method GetDeviceTypeName_NullId_ReturnsNull (line 56) | [Fact] method GetFamilyName_ExistingId_ReturnsName (line 71) | [Fact] method GetFamilyName_NonExistingId_ReturnsNull (line 84) | [Fact] method GetFamilyName_NullId_ReturnsNull (line 95) | [Fact] method GetVendorName_ExistingId_ReturnsName (line 109) | [Fact] method GetVendorName_NonExistingId_ReturnsNull (line 122) | [Fact] method GetVendorName_NullId_ReturnsNull (line 133) | [Fact] method Merge_EmptyOther_NoChanges (line 147) | [Fact] method Merge_NewEntries_AddsAll (line 163) | [Fact] method Merge_DuplicateKeys_DoesNotOverwrite (line 191) | [Fact] method Merge_DevIds_MergesCorrectly (line 214) | [Fact] method FingerprintDeviceEntry_DefaultValues_AreCorrect (line 238) | [Fact] method FingerprintDeviceEntry_CanSetAllProperties (line 256) | [Fact] method StringOrNumberConverter_ReadString_ReturnsString (line 289) | [Theory] method StringOrNumberConverter_ReadNumber_ReturnsString (line 307) | [Theory] method StringOrNumberConverter_ReadNull_ReturnsNull (line 326) | [Fact] method StringOrNumberConverter_ReadInvalidToken_ThrowsJsonException (line 341) | [Fact] method StringOrNumberConverter_WriteString_WritesCorrectJson (line 366) | [Fact] method StringOrNumberConverter_WriteNull_WritesNull (line 383) | [Fact] method StringOrNumberConverter_Deserialization_WorksWithModel (line 400) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiFirewallZoneTests.cs class UniFiFirewallZoneTests (line 11) | public class UniFiFirewallZoneTests method Deserialize_FullZone_MapsAllProperties (line 20) | [Fact] method Deserialize_ExternalZone_CorrectlyMapsSystemZone (line 54) | [Fact] method Deserialize_MinimalZone_HasDefaults (line 80) | [Fact] method Deserialize_ZoneArray_DeserializesCorrectly (line 107) | [Fact] method Deserialize_HotspotZone_MapsCorrectly (line 146) | [Fact] method FirewallZoneKeys_Internal_HasCorrectValue (line 175) | [Fact] method FirewallZoneKeys_External_HasCorrectValue (line 181) | [Fact] method FirewallZoneKeys_Gateway_HasCorrectValue (line 187) | [Fact] method FirewallZoneKeys_Vpn_HasCorrectValue (line 193) | [Fact] method FirewallZoneKeys_Hotspot_HasCorrectValue (line 199) | [Fact] method FirewallZoneKeys_Dmz_HasCorrectValue (line 205) | [Fact] method NewZone_HasEmptyDefaults (line 215) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiNetworkConfigTests.cs class UniFiNetworkConfigTests (line 12) | public class UniFiNetworkConfigTests method Deserialize_EnabledTrue_ReturnsTrue (line 14) | [Fact] method Deserialize_EnabledFalse_ReturnsFalse (line 22) | [Fact] method Deserialize_EnabledMissing_DefaultsToTrue (line 30) | [Fact] method Deserialize_PppoeWanWithoutEnabled_IsIncludedInEnabledFilter (line 40) | [Fact] method Deserialize_ExplicitlyDisabledWan_IsExcludedFromEnabledFilter (line 60) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiProductDatabaseTests.cs class UniFiProductDatabaseTests (line 7) | public class UniFiProductDatabaseTests method GetProductName_NullOrEmpty_ReturnsUnknown (line 11) | [Theory] method GetProductName_DreamMachineFamily_ReturnsCorrectName (line 23) | [Theory] method GetProductName_CloudGateways_ReturnsCorrectName (line 37) | [Theory] method GetProductName_SecurityGateways_ReturnsCorrectName (line 50) | [Theory] method GetProductName_NextGenGateways_ReturnsCorrectName (line 64) | [Theory] method GetProductName_DreamRouters_ReturnsCorrectName (line 79) | [Theory] method GetProductName_UniFiExpress_ReturnsCorrectName (line 92) | [Theory] method GetProductName_FlexSwitches_ReturnsCorrectName (line 104) | [Theory] method GetProductName_Flex25GSwitches_ReturnsCorrectName (line 117) | [Theory] method GetProductName_UltraSwitches_ReturnsCorrectName (line 130) | [Theory] method GetProductName_ProSwitches_ReturnsCorrectName (line 143) | [Theory] method GetProductName_ProMaxSwitches_ReturnsCorrectName (line 157) | [Theory] method GetProductName_EnterpriseSwitches_ReturnsCorrectName (line 171) | [Theory] method GetProductName_AggregationSwitches_ReturnsCorrectName (line 185) | [Theory] method GetProductName_WiFi7APs_ReturnsCorrectName (line 198) | [Theory] method GetProductName_WiFi6APs_ReturnsCorrectName (line 214) | [Theory] method GetProductName_WiFi6EAPs_ReturnsCorrectName (line 229) | [Theory] method GetProductName_ACAPs_ReturnsCorrectName (line 242) | [Theory] method GetProductName_LegacyAPs_ReturnsCorrectName (line 257) | [Theory] method GetProductName_NVRsAndNAS_ReturnsCorrectName (line 272) | [Theory] method GetProductName_CellularDevices_ReturnsCorrectName (line 285) | [Theory] method GetProductName_UnknownModel_ReturnsOriginalCode (line 298) | [Fact] method GetProductName_CaseInsensitive (line 311) | [Theory] method GetProductName_CloudKeys_ReturnsCorrectName (line 328) | [Theory] method GetProductName_DreamWallAndFortress_ReturnsCorrectName (line 341) | [Theory] method GetProductName_HDAPs_ReturnsCorrectName (line 353) | [Theory] method GetProductName_EnterpriseWiFi7_ReturnsCorrectName (line 368) | [Theory] method GetProductName_BuildingBridges_ReturnsCorrectName (line 381) | [Theory] method GetProductName_SmartPower_ReturnsCorrectName (line 394) | [Theory] method GetProductName_PowerDistribution_ReturnsCorrectName (line 406) | [Theory] method GetProductName_EnterpriseCampus_ReturnsCorrectName (line 419) | [Theory] method GetProductName_DataCenterLeaf_ReturnsCorrectName (line 432) | [Theory] method GetProductName_WiFi7InternalCodes_ReturnsCorrectName (line 443) | [Theory] method GetProductNameFromShortname_NullOrEmpty_ReturnsUnknown (line 460) | [Theory] method GetProductNameFromShortname_DreamMachineFamily_ReturnsCorrectName (line 472) | [Theory] method GetProductNameFromShortname_CloudGateways_ReturnsCorrectName (line 486) | [Theory] method GetProductNameFromShortname_SecurityGateways_ReturnsCorrectName (line 498) | [Theory] method GetProductNameFromShortname_NextGenGateways_ReturnsCorrectName (line 510) | [Theory] method GetProductNameFromShortname_DreamRouters_ReturnsCorrectName (line 523) | [Theory] method GetProductNameFromShortname_UniFiExpress_ReturnsCorrectName (line 535) | [Theory] method GetProductNameFromShortname_FlexSwitches_ReturnsCorrectName (line 548) | [Theory] method GetProductNameFromShortname_Flex25GSwitches_ReturnsCorrectName (line 561) | [Theory] method GetProductNameFromShortname_UltraSwitches_ReturnsCorrectName (line 574) | [Theory] method GetProductNameFromShortname_ProSwitches_ReturnsCorrectName (line 585) | [Theory] method GetProductNameFromShortname_AggregationSwitches_ReturnsCorrectName (line 599) | [Theory] method GetProductNameFromShortname_WiFi7APs_ReturnsCorrectName (line 612) | [Theory] method GetProductNameFromShortname_WiFi6APs_ReturnsCorrectName (line 624) | [Theory] method GetProductNameFromShortname_WiFi6EAPs_ReturnsCorrectName (line 638) | [Theory] method GetProductNameFromShortname_ACAPs_ReturnsCorrectName (line 651) | [Theory] method GetProductNameFromShortname_LegacyAPs_ReturnsCorrectName (line 666) | [Theory] method GetProductNameFromShortname_NVRs_ReturnsCorrectName (line 678) | [Theory] method GetProductNameFromShortname_CellularDevices_ReturnsCorrectName (line 690) | [Theory] method GetProductNameFromShortname_CloudKeys_ReturnsCorrectName (line 702) | [Theory] method GetProductNameFromShortname_Fortress_ReturnsCorrectName (line 714) | [Theory] method GetProductNameFromShortname_EnterpriseWiFi7_ReturnsCorrectName (line 725) | [Theory] method GetProductNameFromShortname_DeviceBridge_ReturnsCorrectName (line 738) | [Theory] method GetProductNameFromShortname_SmartPower_ReturnsCorrectName (line 749) | [Theory] method GetProductNameFromShortname_EnterpriseCampus_ReturnsCorrectName (line 761) | [Theory] method GetProductNameFromShortname_DataCenterLeaf_ReturnsCorrectName (line 776) | [Theory] method GetProductNameFromShortname_WiFi7InternalCodes_ReturnsCorrectName (line 787) | [Theory] method GetProductNameFromShortname_UnknownShortname_ReturnsOriginal (line 800) | [Fact] method GetProductNameFromShortname_CaseInsensitive (line 813) | [Theory] method GetBestProductName_KnownModel_ReturnsModelLookup (line 830) | [Fact] method GetBestProductName_NoMatchingModel_UsesShortnameLookup (line 844) | [Fact] method GetBestProductName_NoLookupMatches_FallsBackToShortname (line 858) | [Fact] method GetBestProductName_OnlyModel_FallsBackToModel (line 872) | [Fact] method GetBestProductName_AllNull_ReturnsUnknown (line 886) | [Fact] method GetBestProductName_OfficialModel_PrefersOverLegacyShortname (line 896) | [Fact] method GetBestProductName_OnlyLegacyShortname_StillWorks (line 911) | [Fact] method CanRunIperf3_NullOrEmpty_ReturnsTrue (line 929) | [Theory] method CanRunIperf3_FlexSwitches_ReturnsFalse (line 941) | [Theory] method CanRunIperf3_UltraSwitches_ReturnsFalse (line 957) | [Theory] method CanRunIperf3_LiteSwitches_ReturnsFalse (line 970) | [Theory] method CanRunIperf3_IndustrialAndProMax_ReturnsFalse (line 982) | [Theory] method CanRunIperf3_LegacyUS8Switches_ReturnsFalse (line 996) | [Theory] method CanRunIperf3_EnterpriseAndAggregation_ReturnsFalse (line 1009) | [Theory] method CanRunIperf3_LegacyUAPs_ReturnsFalse (line 1022) | [Theory] method CanRunIperf3_ACAPs_ReturnsFalse (line 1038) | [Theory] method CanRunIperf3_SupportedDevices_ReturnsTrue (line 1055) | [Theory] method CanRunIperf3_CaseInsensitive (line 1071) | [Theory] method CanRunIperf3_TwoParams_UsesGetBestProductName (line 1088) | [Fact] method CanRunIperf3_TwoParams_SupportedDevice_ReturnsTrue (line 1102) | [Fact] method CanRunIperf3_TwoParams_AllNull_ReturnsTrue (line 1116) | [Fact] method IsCellularModem_NullOrEmpty_ReturnsFalse (line 1130) | [Theory] method IsCellularModem_OfficialModemCodes_ReturnsTrue (line 1142) | [Theory] method IsCellularModem_CaseInsensitive (line 1159) | [Theory] method IsCellularModem_NonModemDevices_ReturnsFalse (line 1172) | [Theory] method IsCellularModem_ThreeParams_ModelOrShortname_ReturnsTrue (line 1190) | [Theory] method IsCellularModem_ThreeParams_UmbbDeviceType_ReturnsTrue (line 1203) | [Theory] method IsCellularModem_ThreeParams_AllNull_ReturnsFalse (line 1216) | [Fact] method IsCellularModem_ThreeParams_NonModemDevices_ReturnsFalse (line 1226) | [Theory] method IsCellularModem_ThreeParams_RealWorldU5GMax_ReturnsTrue (line 1239) | [Fact] method IsCellularModem_ThreeParams_RealWorldULTE_ReturnsTrue (line 1254) | [Fact] method GetDefaultQmiDevicePath_NullOrEmpty_ReturnsDefaultPath (line 1273) | [Theory] method GetDefaultQmiDevicePath_LteModelCodes_ReturnsCdcWdm0 (line 1285) | [Theory] method GetDefaultQmiDevicePath_LteProductNames_ReturnsCdcWdm0 (line 1299) | [Theory] method GetDefaultQmiDevicePath_CaseInsensitive (line 1311) | [Theory] method GetDefaultQmiDevicePath_5gModems_ReturnsWwan0Qmi0 (line 1325) | [Theory] method GetDefaultQmiDevicePath_UnknownOrNonModem_ReturnsDefaultPath (line 1343) | [Theory] FILE: tests/NetworkOptimizer.UniFi.Tests/UniFiWlanConfigTests.cs class UniFiWlanConfigTests (line 11) | public class UniFiWlanConfigTests method Deserialize_MloEnabled_ParsesCorrectly (line 13) | [Fact] method Deserialize_MloDisabled_ParsesCorrectly (line 34) | [Fact] method Deserialize_MloMissing_DefaultsToFalse (line 55) | [Fact] method Deserialize_ApGroupModeAll_ParsesCorrectly (line 75) | [Fact] method Deserialize_ApGroupIds_ParsesCorrectly (line 96) | [Fact] method Deserialize_WlanBands_ParsesCorrectly (line 120) | [Fact] method Deserialize_FullSample_IgnoresUnknownFields (line 143) | [Fact] method Deserialize_DoesNotExposeSensitiveFields (line 188) | [Fact] FILE: tests/NetworkOptimizer.UniFi.Tests/WirelessRateSnapshotTests.cs class WirelessRateSnapshotTests (line 10) | public class WirelessRateSnapshotTests method WirelessRateSnapshot_NewInstance_HasEmptyDictionaries (line 14) | [Fact] method WirelessRateSnapshot_ClientRates_CaseInsensitiveLookup (line 27) | [Fact] method WirelessRateSnapshot_MeshUplinkRates_CaseInsensitiveLookup (line 40) | [Fact] method WirelessRateSnapshot_ClientRates_StoresAllFields (line 52) | [Fact] method WirelessRateSnapshot_ClientRates_NullApMac_Allowed (line 71) | [Fact] method RateComparison_SelectsMaximum (line 89) | [Theory] method RateComparison_IndependentForTxAndRx (line 102) | [Fact] method RoamingDetection_SameAp_ShouldUseSnapshot (line 126) | [Fact] method RoamingDetection_DifferentAp_ShouldSkipSnapshot (line 141) | [Fact] method RoamingDetection_SameApDifferentCase_ShouldUseSnapshot (line 156) | [Fact] method RoamingDetection_NullSnapshotApMac_ShouldUseSnapshot (line 171) | [Fact] method RoamingDetection_EmptySnapshotApMac_ShouldUseSnapshot (line 186) | [Fact] method MeshSnapshot_ClientNotInSnapshot_UsesCurrentRates (line 205) | [Fact] method MeshSnapshot_DeviceInSnapshot_ComparesRates (line 220) | [Fact] method MeshSnapshot_CurrentRatesHigher_UsesCurrentRates (line 242) | [Fact] method Snapshot_MultipleClients_IndependentRates (line 268) | [Fact] method Snapshot_MultipleMeshDevices_IndependentRates (line 284) | [Fact] method Snapshot_ZeroRates_HandledCorrectly (line 298) | [Fact] method RateComparison_AsymmetricSnapshotAndCurrent_PicksBestOfEach (line 314) | [Fact] FILE: tests/NetworkOptimizer.Web.Tests/WanSteerDeploymentServiceTests.cs class WanSteerDeploymentServiceTests (line 7) | public class WanSteerDeploymentServiceTests class ParseIpRulesTests (line 9) | public class ParseIpRulesTests method Parses_single_eth_interface (line 11) | [Fact] method Parses_multiple_wan_interfaces (line 23) | [Fact] method Parses_ppp_interfaces (line 42) | [Fact] method Returns_empty_for_no_fwmark_rules (line 53) | [Fact] method Returns_empty_for_empty_output (line 66) | [Fact] method Parses_vlan_tagged_interface (line 72) | [Fact] method Parses_gre_interface (line 84) | [Fact] method Parses_real_gateway_output_with_mixed_interfaces (line 96) | [Fact] method Ignores_non_matching_fwmark_masks (line 117) | [Fact] class SanitizeWanKeyTests (line 129) | public class SanitizeWanKeyTests method Converts_to_kebab_case (line 131) | [Theory] class SplitCidrsAndRangesTests (line 146) | public class SplitCidrsAndRangesTests method Separates_cidrs_from_ranges (line 148) | [Fact] method All_cidrs_no_ranges (line 159) | [Fact] method All_ranges_no_cidrs (line 170) | [Fact] method Empty_array_returns_empty_lists (line 181) | [Fact] method Bare_ip_without_dash_goes_to_cidrs (line 192) | [Fact] class ParseDelimitedOutputTests (line 204) | public class ParseDelimitedOutputTests method Parses_multiple_sections (line 206) | [Fact] method Returns_empty_for_no_delimiters (line 221) | [Fact] method Handles_empty_sections (line 229) | [Fact] class GetSectionTests (line 241) | public class GetSectionTests method Returns_value_for_existing_key (line 243) | [Fact] method Returns_empty_for_missing_key (line 251) | [Fact] class GenerateBootScriptTests (line 260) | public class GenerateBootScriptTests method Contains_shebang_and_binary_path (line 262) | [Fact] method Includes_sleep_delay_for_unifi_boot (line 272) | [Fact] method Checks_binary_is_executable (line 280) | [Fact] FILE: tests/NetworkOptimizer.Web.Tests/WanSteerValidationTests.cs class WanSteerValidationTests (line 8) | public class WanSteerValidationTests class ValidateCidrListTests (line 10) | public class ValidateCidrListTests method Accepts_valid_cidr (line 12) | [Fact] method Accepts_bare_ip (line 20) | [Fact] method Accepts_ip_range (line 28) | [Fact] method Accepts_mixed_entries (line 36) | [Fact] method Rejects_invalid_format (line 45) | [Fact] method Rejects_octet_out_of_range (line 53) | [Fact] method Rejects_prefix_out_of_range (line 61) | [Fact] method Handles_invalid_json (line 69) | [Fact] method Validates_range_endpoint_octets (line 77) | [Fact] class ValidateMacListTests (line 86) | public class ValidateMacListTests method Accepts_valid_mac (line 88) | [Fact] method Accepts_uppercase_mac (line 96) | [Fact] method Rejects_invalid_mac (line 104) | [Fact] method Rejects_mac_with_dashes (line 112) | [Fact] class ValidatePortListTests (line 121) | public class ValidatePortListTests method Accepts_single_port (line 123) | [Fact] method Accepts_port_range (line 131) | [Fact] method Rejects_non_numeric_port (line 139) | [Fact] method Rejects_port_above_65535 (line 147) | [Fact] method Rejects_port_zero (line 155) | [Fact] class ValidateRuleTests (line 164) | public class ValidateRuleTests method MakeValidRule (line 166) | private static WanSteerTrafficClass MakeValidRule() => new() method Accepts_valid_rule (line 174) | [Fact] method Requires_name (line 181) | [Fact] method Requires_target_wan (line 189) | [Fact] method Rejects_zero_probability (line 197) | [Fact] method Rejects_probability_over_one (line 205) | [Fact] method Requires_at_least_one_match_criterion (line 213) | [Fact] method Protocol_only_is_valid_match_criterion (line 225) | [Fact] method Ports_without_protocol_errors (line 238) | [Fact] method Mac_only_source_is_valid (line 251) | [Fact] class ToJsonArrayNormalizeCidrsTests (line 265) | public class ToJsonArrayNormalizeCidrsTests method Appends_slash32_to_bare_ips (line 267) | [Fact] method Preserves_existing_cidrs (line 274) | [Fact] method Preserves_ip_ranges (line 281) | [Fact] method Handles_multiline_input (line 288) | [Fact] method Returns_null_for_empty_input (line 295) | [Fact] method Trims_whitespace_and_skips_blank_lines (line 303) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/BssidIdentifierTests.cs class BssidIdentifierTests (line 6) | public class BssidIdentifierTests class IdentifyByBssid (line 8) | public class IdentifyByBssid method ReturnsNull_WhenBssidIsNull (line 10) | [Fact] method ReturnsNull_WhenBssidIsEmpty (line 16) | [Fact] method ReturnsXboxWiFiDirect_ForMatchingBssid_ColonSeparator (line 22) | [Fact] method ReturnsXboxWiFiDirect_ForMatchingBssid_DashSeparator (line 28) | [Fact] method ReturnsXboxWiFiDirect_ForMatchingBssid_NoSeparator (line 34) | [Fact] method ReturnsXboxWiFiDirect_ForMatchingBssid_DotSeparator (line 40) | [Fact] method ReturnsXboxWiFiDirect_ForMatchingBssid_LowerCase (line 46) | [Fact] method ReturnsNull_ForUnknownBssid (line 52) | [Fact] method ReturnsNull_ForInvalidBssidLength (line 58) | [Fact] method ReturnsNull_ForBssidTooLong (line 64) | [Fact] class GetDisplayName (line 71) | public class GetDisplayName method ReturnsSsid_WhenSsidIsProvided (line 73) | [Fact] method ReturnsHiddenWithIdentifier_ForKnownBssid (line 79) | [Fact] method ReturnsHiddenWithIdentifier_ForKnownBssid_EmptySsid (line 85) | [Fact] method ReturnsHidden_ForUnknownBssid (line 91) | [Fact] method ReturnsHidden_ForNullBssid (line 97) | [Fact] method ReturnsSsid_EvenWhenBssidIsNull (line 103) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/ChannelRecommendationServiceTests.cs class ChannelRecommendationServiceTests (line 11) | public class ChannelRecommendationServiceTests method ChannelRecommendationServiceTests (line 15) | public ChannelRecommendationServiceTests() method CreateAp (line 24) | private static AccessPointSnapshot CreateAp( method BuildInterferenceGraph_TwoAps_CreatesCorrectGraph (line 53) | [Fact] method BuildInterferenceGraph_OfflineAp_Excluded (line 69) | [Fact] method BuildInterferenceGraph_DifferentBand_NotIncluded (line 87) | [Fact] method BuildInterferenceGraph_UnplacedAps_UseDefaultWeight (line 101) | [Fact] method BuildInterferenceGraph_MeshPair_CreatesConstraint (line 116) | [Fact] method BuildInterferenceGraph_ExternalLoad_FromScanResults (line 134) | [Fact] method BuildInterferenceGraph_OwnNetworkNeighbors_Excluded (line 162) | [Fact] method ScoreAssignment_CoChannelAps_HigherScore (line 190) | [Fact] method ScoreAssignment_MeshPair_ExcludedFromScore (line 208) | [Fact] method Optimize_ThreeApsOnSameChannel_RecommendsSeparation (line 229) | [Fact] method Optimize_SingleAp_NoChange (line 252) | [Fact] method Optimize_MeshPair_SharesChannel (line 267) | [Fact] method Optimize_DfsExclude_NoDfsChannelsRecommended (line 289) | [Fact] method Optimize_PinnedAp_ChannelUnchanged (line 310) | [Fact] method Optimize_EmptyGraph_ReturnsEmptyPlan (line 329) | [Fact] method Optimize_2_4GHz_UsesNonOverlappingChannels (line 339) | [Fact] method Optimize_ScoreImproves (line 357) | [Fact] method Optimize_AlreadyOptimal_NoChange (line 374) | [Fact] method Optimize_ReportsUnplacedCount (line 390) | [Fact] method Optimize_MeshChildMarkedConstrained (line 404) | [Fact] method Optimize_ZeroInterference_PreservesCurrentChannels (line 421) | [Fact] method Optimize_6GHz_NoInterference_KeepsCurrentChannels (line 443) | [Fact] method Optimize_2_4GHz_AlwaysUsesOnly_1_6_11 (line 465) | [Fact] method Optimize_80MHz_DoesNotRecommendSameBondingGroup (line 484) | [Fact] method BuildExternalLoad_TriangulatedNeighborApplied (line 520) | [Fact] method BuildExternalLoad_DirectObservationUnchanged (line 558) | [Fact] method BuildExternalLoad_OwnNetworkExcludedFromTriangulation (line 589) | [Fact] method BuildExternalLoad_MultipleObserversTakeMax (line 620) | [Fact] method Optimize_VetoedMoveInvalidatesOtherMoves_RevertsToAvoidWorsening (line 668) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/ChannelSpanHelperTests.cs class ChannelSpanHelperTests (line 8) | public class ChannelSpanHelperTests method GetChannelSpan_2_4GHz_20MHz_ReturnsPlusMinus2 (line 12) | [Fact] method GetChannelSpan_2_4GHz_40MHz_ReturnsPlusMinus4 (line 19) | [Fact] method GetChannelSpan_2_4GHz_ClampsToValidRange (line 26) | [Fact] method GetChannelSpan_5GHz_20MHz_ReturnsSingleChannel (line 34) | [Fact] method GetChannelSpan_5GHz_80MHz_ReturnsBondingGroup (line 41) | [Fact] method GetChannelSpan_5GHz_160MHz_ReturnsBondingGroup (line 53) | [Fact] method GetChannelSpan_6GHz_80MHz_ReturnsBondingGroup (line 60) | [Fact] method GetChannelSpan_6GHz_320MHz_RespectsUNIIBoundary (line 67) | [Fact] method SpansOverlap_IdenticalSpans_ReturnsTrue (line 81) | [Fact] method SpansOverlap_NonOverlapping_ReturnsFalse (line 87) | [Fact] method SpansOverlap_PartialOverlap_ReturnsTrue (line 93) | [Fact] method SignalToInterferenceWeight_StrongSignal_Returns1 (line 101) | [Fact] method SignalToInterferenceWeight_WeakSignal_Returns0_1 (line 107) | [Fact] method SignalToInterferenceWeight_TypicalSpacing_Returns0_625 (line 113) | [Fact] method SignalToInterferenceWeight_ClampsAbove (line 119) | [Fact] method ComputeOverlapFactor_2_4GHz_SameChannel_Returns1 (line 127) | [Fact] method ComputeOverlapFactor_2_4GHz_Adjacent_Returns0_7 (line 134) | [Fact] method ComputeOverlapFactor_2_4GHz_NonOverlapping_Returns0 (line 141) | [Fact] method ComputeOverlapFactor_5GHz_SameChannel_Returns1 (line 148) | [Fact] method ComputeOverlapFactor_5GHz_SameBondingGroup_Returns0_7 (line 155) | [Fact] method ComputeOverlapFactor_5GHz_DifferentGroups_Returns0 (line 163) | [Fact] method GetChannelWidthSpan_5GHz_80MHz_Returns4Channels (line 172) | [Fact] method GetChannelWidthSpan_2_4GHz_20MHz_ReturnsOverlappingRange (line 179) | [Fact] method GetChannelWidthSpan_2_4GHz_40MHz_WithExtChannel (line 186) | [Fact] method GetBondingGroupStart5GHz_40MHz_ReturnsCorrectStart (line 196) | [Fact] method GetBondingGroupStart6GHz_40MHz_UsesFormula (line 203) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/CoChannelInterferenceRuleTests.cs class CoChannelInterferenceRuleTests (line 11) | public class CoChannelInterferenceRuleTests method CoChannelInterferenceRuleTests (line 16) | public CoChannelInterferenceRuleTests() method CreateAp (line 23) | private static AccessPointSnapshot CreateAp(string mac, string name, R... method CreateContext (line 39) | private static WiFiOptimizerContext CreateContext( method WithoutPropagationContext_AllCoChannelApsFlagged (line 52) | [Fact] method WithPropagationContext_FarApartAps_NoIssue (line 71) | [Fact] method WithPropagationContext_CloseAps_StillFlagged (line 108) | [Fact] method MixedPlacement_TwoUnplacedAps_AssumedToInterfere (line 145) | [Fact] method MixedPlacement_SingleUnplacedAp_NoIssue (line 192) | [Fact] method DifferentChannels_NoIssue (line 232) | [Fact] method SingleApOnChannel_NoIssue (line 247) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/CoverageGapRuleTests.cs class CoverageGapRuleTests (line 8) | public class CoverageGapRuleTests method CreateContext (line 12) | private static WiFiOptimizerContext CreateContext( method CreateAp (line 24) | private static AccessPointSnapshot CreateAp(string mac, string name) =... method CreateClient (line 30) | private static WirelessClientSnapshot CreateClient(string apMac, int? ... method NoIssue_WhenNoAps (line 38) | [Fact] method NoIssue_WhenFewerThanThreeClientsWithSignal (line 45) | [Fact] method NoIssue_WhenAllClientsHaveStrongSignal (line 59) | [Fact] method NoIssue_WhenWeakPercentageBelowThreshold (line 74) | [Fact] method ReturnsIssue_WhenHalfOrMoreClientsHaveWeakSignal (line 90) | [Fact] method ClientsWithoutSignal_AreExcludedFromCountAndPercentage (line 111) | [Fact] method ClientsWithoutSignal_DoNotInflateMinThreshold (line 129) | [Fact] method DisplayedCount_MatchesPercentageDenominator (line 151) | [Fact] method MultipleAps_WithCoverageGaps_ReturnsMultiApIssue (line 174) | [Fact] method MixedBands_SameSignal_DifferentOutcome (line 198) | [Fact] method Band6GHz_WeakAt88_NotWeakAt85 (line 226) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/LoadImbalanceRuleTests.cs class LoadImbalanceRuleTests (line 11) | public class LoadImbalanceRuleTests method LoadImbalanceRuleTests (line 15) | public LoadImbalanceRuleTests() method CreateAp (line 22) | private static AccessPointSnapshot CreateAp( method CreateClient (line 35) | private static WirelessClientSnapshot CreateClient(string apMac, int? ... method CreateContext (line 42) | private static WiFiOptimizerContext CreateContext( method SingleAp_NoIssue (line 60) | [Fact] method NoClients_NoIssue (line 69) | [Fact] method BalancedLoad_NoIssue (line 82) | [Fact] method HighImbalance_Warning (line 96) | [Fact] method NoPropagationContext_RecommendationSuggestsSignalMap (line 116) | [Fact] method WithPropagationContext_RecommendationOmitsSignalMap (line 133) | [Fact] method TiedClientCounts_DifferentAps_InDescription (line 159) | [Fact] method TwoAps_EqualClients_NoIssue (line 183) | [Fact] method FarApart_AllStrongSignal_Suppressed (line 202) | [Fact] method FarApart_SomeWeakSignal_DowngradedToInfo (line 225) | [Fact] method CloseAps_StillWarning (line 258) | [Fact] method FarApart_ClientWithNullSignal_NotSuppressed (line 281) | [Fact] method PropagationContext_OneApNotPlaced_FallsThrough (line 311) | [Fact] method CreatePropagationContext (line 349) | private static ApPropagationContext CreatePropagationContext( FILE: tests/NetworkOptimizer.WiFi.Tests/PropagationInterferenceTests.cs class PropagationInterferenceTests (line 10) | public class PropagationInterferenceTests method PropagationInterferenceTests (line 14) | public PropagationInterferenceTests() method CreateAp (line 20) | private static PropagationAp CreateAp(string mac, double lat, double l... method CloseAps_SameFloor_SameBand_Interfere (line 32) | [Fact] method DistantAps_SameFloor_DoNotInterfere (line 44) | [Fact] method CloseAps_2_4GHz_HigherRange_StillInterfere (line 56) | [Fact] method DistantAps_DifferentFloors_DoNotInterfere (line 68) | [Fact] method CloseAps_SeparatedByConcreteWall_ReducedSignal (line 80) | [Fact] method ModerateDistance_WithMultipleConcreteWalls_MayNotInterfere (line 114) | [Fact] method DifferentBuildings_ExteriorWalls_ReduceInterference (line 151) | [Fact] method Threshold_IsConfigurable (line 187) | [Fact] method UnplacedAp_ReturnsFalse (line 203) | [Fact] method LowPowerAps_ReducedInterferenceRange (line 221) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/RegulatoryChannelDataTests.cs class RegulatoryChannelDataTests (line 8) | public class RegulatoryChannelDataTests method BuildTestJson (line 13) | private static JsonElement BuildTestJson( class Parse (line 49) | public class Parse method Parses2_4GHzChannels (line 51) | [Fact] method Parses5GHzChannelsAtMultipleWidths (line 65) | [Fact] method Parses6GHzChannelsAtMultipleWidths (line 84) | [Fact] method HandlesEmptyJson (line 99) | [Fact] method HandlesPartialData (line 113) | [Fact] class GetChannels (line 127) | public class GetChannels method CreateUsData (line 129) | private static RegulatoryChannelData CreateUsData() method Returns5GHzChannelsAtCorrectWidth (line 156) | [Theory] method Excludes5GHzDfsChannelsWhenRequested (line 167) | [Fact] method Excludes5GHzDfsAtSpecificWidth (line 180) | [Fact] method Returns6GHzPscChannelsOnly (line 190) | [Fact] method Returns2_4GHzChannels (line 212) | [Fact] method FallsBackToBase20MHzForUnknownWidth (line 220) | [Fact] method ReturnsEmptyForUnknownBand (line 230) | [Fact] method DfsFilterDoesNotAffect2_4GHz (line 238) | [Fact] method DfsFilterDoesNotAffect6GHz (line 247) | [Fact] method Returns6GHzAllChannelsWhenNoPscData (line 257) | [Fact] class ParseRealApiResponse (line 275) | public class ParseRealApiResponse method ParsesUsRegulatoryDomain (line 277) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/SignalClassificationTests.cs class SignalClassificationTests (line 8) | public class SignalClassificationTests method GetSignalClass_5GHz_CorrectClassification (line 12) | [Theory] method GetSignalClass_2_4GHz_CorrectClassification (line 23) | [Theory] method GetSignalClass_6GHz_CorrectClassification (line 34) | [Theory] method SameSignal_ClassifiedDifferentlyByBand (line 47) | [Fact] method SameSignal_Minus68_ClassifiedDifferentlyByBand (line 56) | [Fact] method UnknownBand_Uses5GHzThresholds (line 67) | [Fact] method StringBandOverload_MatchesEnumOverload (line 76) | [Theory] method NullBandString_DefaultsTo5GHz (line 86) | [Fact] method NullSignal_ReturnsEmptyString (line 95) | [Fact] method NullableSignalWithValue_ReturnsCorrectClass (line 101) | [Fact] method IsWeakSignal_BandAwareThresholds (line 109) | [Theory] method IsWeakSignal_SameSignalDifferentBands (line 121) | [Fact] method IsCriticalSignal_BandAwareThresholds (line 132) | [Theory] method GetWeakThreshold_ReturnsBandSpecificValues (line 146) | [Theory] method BoundaryValues_ExactThresholds_5GHz (line 157) | [Fact] FILE: tests/NetworkOptimizer.WiFi.Tests/WiFiAnalysisHelpersTests.cs class WiFiAnalysisHelpersTests (line 7) | public class WiFiAnalysisHelpersTests class SortByIp (line 9) | public class SortByIp method ReturnsEmptyList_WhenInputIsEmpty (line 11) | [Fact] method ReturnsSingleAp_WhenOnlyOneAp (line 18) | [Fact] method SortsNumericallNotLexicographically (line 26) | [Fact] method SortsAcrossOctets (line 40) | [Fact] method PlacesNullIpsAtEnd (line 54) | [Fact] method PlacesInvalidIpsAtEnd (line 66) | [Fact] method PlacesIpv6AtEnd (line 78) | [Fact] method CreateAp (line 90) | private static AccessPointSnapshot CreateAp(string name, string? ip)... class FilterOutMeshPairs (line 98) | public class FilterOutMeshPairs method ReturnsSameList_WhenLessThanTwoAps (line 100) | [Fact] method ReturnsEmptyList_WhenInputIsEmpty (line 111) | [Fact] method ReturnsAllAps_WhenNoMeshRelationships (line 120) | [Fact] method ReturnsEmptyList_WhenAllApsAreMeshPairs (line 134) | [Fact] method ReturnsNonMeshAps_WhenMixedWithMeshPairs (line 150) | [Fact] method IsCaseInsensitiveForMacAddresses (line 168) | [Fact] method DoesNotFilterMeshPairs_WhenBandDoesNotMatch (line 184) | [Fact] method DoesNotFilterMeshPairs_WhenChannelDoesNotMatch (line 201) | [Fact] method CreateAp (line 218) | private static AccessPointSnapshot CreateAp(string name, string mac)... method CreateMeshChild (line 226) | private static AccessPointSnapshot CreateMeshChild(