← APU Loudness LimiterUser Manual · v5.7.1

1. Introduction


APU Loudness Limiter demonstration

APU Loudness Limiter is a modern loudness limiter plug-in released by APU Software, LLC. This plug-in is designed to simultaneously perform limiting across multiple loudness types (see loudness type). Here you can read about the different features and parameters available with the plug-in, and get a general sense of how it differs from other limiters and why.

2. Parameters


This software supports a variety of parameters, most of which can be adjusted in real-time. This section provides an overview of each parameter, with each subsection detailing the parameters for the associated tab in the user interface. From within the user interface, you can also hover the mouse over a slider, combo-box, or checkbox to see a popup description of the parameter.

2.1. Limiting


The limiting tab contains configuration and visualization for loudness limiting. This section details each of the individual parameters and components.

2.1.1. Presets


Loudness Limiter’s presets combo-box contains a collection of basic presets, one for each combination of loudness type and latency configuration. The low-latency presets introduce minimal delay, while the look-ahead presets introduce more delay in exchange for the ability to preemptively respond to the source signal.

See look-ahead for an understanding of how delay compensation works in the plug-in.

The preset browser includes user-scope load options for ordinary preset changes. Reset on preset load runs a filtered parameter reset before the preset is applied. Load preset visuals controls whether the preset can change the hinted theme and visualization settings. Full Reset always restores all default parameter values, regardless of these options. You can switch between loading dark or light themes through the dark mode parameter.

Currently, the following presets are available (“Full Reset” restores all default parameter values):

2.1.2. Loudness type


Limiting can be applied across a variety of loudness types. Each loudness type supports channel-split or channel-linked processing. Channel-split treats each channel independently, while channel-linked integrates across all channels.

Three of the supported loudness types use a popular modern measurement standard for perceived loudness called LUFS. These loudness types are momentary (400ms window), short-term (3s window) and Integrated (infinite window).

There are also two peak loudness types (True Peak and Peak) as well as traditional RMS. True Peak is an improvement on peak which takes into consideration waveform behavior between samples, which allows it to properly respond to inter-sample peaks. Peak mode loudness types use a blocksize window.

Integrated loudness type window can be reset by pressing the reset button.

2.1.3. Target range presets


Target range presets are provided for convenience as an example set of industry related loudness ranges. The average loudness and limiter peak are provided in the preset names in parenthesis. These values were transcribed from the RTW delivery standards page.

Currently, the following target range presets are available:

2.1.4. Output type


The output type options allows you to configure which type of samples to output.

Output gain and dry/wet are bypassed for Delta output type

2.1.5. Limiter threshold


The limiter threshold parameter determines the loudness at which the limiter starts to apply gain reduction. Loudness values above threshold are raised to the limiter ceiling.

2.1.6. Limiter ceiling


The limiter ceiling parameter determines the maximum peak loudness value that the limiter will allow. When the limiter detects a peak above this value, it will pre-emptively begin to apply gain reduction. Note that make-up gain is not automatically applied.


The limiter threshold link parameter allows you to link the limiter threshold and limiter ceiling parameters. When linked, the ceiling will automatically adjust to match the threshold.

2.1.8. Limiter attack


The limiter attack parameter determines the amount of time to look into the future when detecting peaks. Shorter attack times will result in more aggressive gain reduction, with the results becoming more gritty and distorted. Longer attack times will result in more transparent gain reduction, but will push the average level of the audio further down.

Limiter attack requires that the attack budget parameter is configured via the settings tab. This method of look-ahead configuration is used to support real-time adjustments of look-ahead without causing stuttering which would otherwise interfere with A/B testing.

Note that attack budget adds latency to the limiter in order to function.

2.1.9. Look-ahead


The look-ahead parameter allows you to configure how far in advance the loudness measurement looks for the source signal. This can be used to align Loudness Limiter’s response to account for the loudness window time and/or release time, or simply as a creative effect.

Look-ahead requires that the look-ahead budget parameter is configured via the settings tab. This method of look-ahead configuration is used to support real-time adjustments of look-ahead without causing stuttering which would otherwise interfere with A/B testing.

Note that look-ahead budget adds latency to the limiter in order to function.

2.1.10. Compensation target


The compensation target slider sets the loudness target used by compensation learning.

When Learn is active, Loudness Limiter compares the selected compensation mode output measurement against this target and updates the live compensation gain. The target is independent from the individual limiter threshold and ceiling controls.

2.1.11. Compensation mode


The compensation mode combo-box chooses how Loudness Limiter measures the output signal while compensation learning is active.

Both modes are intended for learn-then-lock workflows: start learning on a representative pass, then lock the learned correction for normal playback or export.

Compensation is independent from the individual limiter enable chips. It is applied after loudness limiting and before Peak/True Peak limiting.

2.1.12. Compensation gain


The compensation gain slider stores an additional global gain offset in dB for Loudness Limiter.

The offset is applied after loudness limiting and before the peak limiters. This lets you correct delivery loudness while still allowing Peak and True Peak limiters to protect the output ceiling.

When compensation learning is off, you can edit this value directly for manual trim. When learning is on, the slider shows the live learned value, but the stored parameter is only updated once you lock learning.

2.1.13. Compensation action


The compensation action button changes behavior based on the current compensation state.

Limiter learning is intended for a learn-then-lock render workflow: run a representative pass, lock the learned correction, then render normally.

2.1.14. RMS window


The RMS window parameter allows you to adjust the duration of the RMS window in milliseconds. Lower window durations respond more quickly to changes in loudness, while higher window durations provide a more stable loudness measurement. The RMS window is used by the RMS loudness type.

2.1.15. Momentary window


The momentary window parameter allows you to adjust the duration of the momentary window in milliseconds. Lower window durations respond more quickly to changes in loudness, while higher window durations provide a more stable loudness measurement. The momentary window is used by the Momentary loudness type.

2.1.16. Short-term window


The short-term window parameter allows you to adjust the duration of the short-term window in milliseconds. Lower window durations respond more quickly to changes in loudness, while higher window durations provide a more stable loudness measurement. The short-term window is used by the Short-term loudness type.

2.1.17. Visualization


The visualization component displays a continuously evolving real-time view of your source, target, and output loudness over time. There are currently two main types of visualizations: history and histogram. History displays a rolling window of the most recent history of loudness samples. Histogram divides this history up into buckets and displays the relative proportion of each bucket in real-time.

You can hover the mouse over a bucket to see the loudness range the bucket corresponds to.

The visualization component also displays the current limiter ceiling overlays for the active loudness type, allowing you to see where limiting begins. Detailed visualization settings can be adjusted from the visualization tab, with some features also available by right clicking on the visualization component.

You can double-click the visualization component to resize and hide everything else.

2.1.18. Raster type


The raster type parameter allows you to specify the type of raster visualization. You can select between history and histogram views, with either loudness or delta values. Loudness values match the currently selected loudness type while delta values take the difference between source and target or output loudness.

Delta view is useful for determining how much loudness is being changed, and how much residual there is between target and output loudness.

You can also visualize target vs output residual via breath residual option.

2.1.19. Sidechain


The sidechain toggle allows you to enable/disable sidechain processing. When enabled, the source signal will come from the plug-in’s sidechain channel(s). This allows you to drive compression/expansion using an external source, which can be used for example to duck the sidechain signal.

In order to prevent overshoots, Peak and True Peak limiting do not use the sidechain signal.

2.1.20. Ballistics type


The ballistics type combo-box allows you to change Loudness Limiter’s ballistics behavior.

Inertial ballistics are more responsive to sudden changes in loudness, but may sound less natural.

2.1.21. IIR contour type


The IIR contour type combo-box allows you to change the LUFS loudness type’s IIR filter contour. The following contours are supported:

Contours other than K-weighting no longer conform to the LUFS standard, but are provided for flavor and perceptual precision.

2.1.22. Input gain


The input gain parameter allows you to apply additional gain to the input of the limiter.

2.1.23. Release


The release parameter allows you to specify the amount of time it takes for a given amount of gain amplification to be applied to the source signal. Attack is configured by limiter attack, while release refers to the “release” of this gain reduction.

Release is a traditional ballistic parameter, similar to what you will find on most compressors. See the Linear release parameter for more direct release behavior. In addition to specifying the release in milliseconds, you can specify it in samples, BPM-relative units, or ratio of look-ahead duration.

2.1.24. Release hold


The release parameter allows you to specify the amount of delay before release phase begins.

Release hold maintains gain reduction (“attack”) for the specified release hold time.

2.1.25. Linear Release


The linear release parameter allows you to directly specify the rate of change in gain amplification applied to the source signal. Release refers to the “release” of the limiter’s gain reduction. More generally, release refers to gain amplification since it isn’t always necessary for the limiter to “attack” prior to “release” and the two are not always correlated.

The linear release parameter is different from traditional ballistic parameters. The actual rate of change in gain reduction with the traditional controls is dependent on both the attack or release time and the residual between target gain reduction and current gain reduction. This means the alterations made to the source signal are a complicated combination of the audio’s dynamics. For linear release, the actual rate of change is constant.

This setting can be configured to apply directly, completely overriding the release ballistics, or as a limit to the rate. The former can be a way to get extremely fast response, while the latter can serve as a barrier to prevent the limiter from releasing too rapidly during extreme fluctuations in source loudness.

2.1.26. Dry/Wet


The dry/wet parameter allows you to configure the percentage of limiting to mix into the dry signal.

2.1.27. Output gain


The output gain parameter allows you to apply additional gain to the output of the limiter.

2.2. Loudness


The loudness tab contains parameters relating to loudness measurements and detector behavior.

2.2.1. Adaptive startup


The adaptive startup parameter enables or disables adaptive startup behavior for loudness measurements. When enabled, the loudness window begins small and grows as the window fills. This can be useful for reducing transient artifacts at the start of playback.

2.2.2. Adaptive edges


The adaptive edges parameter enables or disables adaptive edge detection for loudness measurements. When enabled, loudness values crossing the configured adaptive threshold, or silence, will be detected and the loudness window will be reset. This causes the adaptive startup behavior to apply to every transition to/from silence. This can be useful for reducing transient artifacts during sudden changes in loudness.

2.2.3. Adaptive type


The adaptive type parameter allows adaptive startup and adaptive edges to be configured for Silence or adaptive threshold modes. Silence mode will only reset the loudness window when the input signal is silent. Adaptive threshold mode will reset the loudness window when the input signal crosses the configured adaptive threshold.

2.2.4. Adaptive threshold


The adaptive threshold parameter allows you to configure the threshold used by adaptive edges in adaptive threshold mode. This threshold is specified in the same units as the current loudness type.

2.3. Visualization


The visualization tab contains parameters related to real-time configuration of Loudness Limiter’s visualizations. This section describes these various settings.

2.3.1. Auto range


The auto range parameter enables or disables the visualization’s auto range finding capabilities. This feature operates by analyzing the continuous histogram at each frame to determine a reasonable range for that moment in time. This range is then followed and adjusted smoothly over time.

2.3.2. Visual range presets


Visual range presets are provided for convenience as an example set of industry related loudness ranges.

Currently, the following visual range presets are available:

2.3.3. Loudness range


The loudness range parameter allows the visualization loudness range to be set manually. In order for this range to be enabled and used, the visual range presets parameter must be set to “Custom Range”

Note that there are separate loudness ranges for windowed loudness types and peak loudness types.

See range sliders for information about range sliders in general.

2.3.4. Snapshots


The snapshots feature allows you to take a snapshot of the current histogram. This can be useful for comparing histograms.

Each source/target/output signal has its own snapshot. The snapshots are persisted with plug-in state, so they will be available when you reopen the project.

Snapshots can be operated using the popup menu or via keyboard shortcuts.

The following snapshot parameters are available:

On Windows, use Ctrl instead of Cmd.

2.3.5. Layout options


The options menu allows you to configure the layout of the visualization. The following options are available:

Each layout mode has an AUTO option which automatically selects the best layout mode based on the current context.

2.3.6. Layout source mode


The layout source mode parameter allows you to configure the layout of the visualization’s source panel.

Currently, the following layout source modes are available:

2.3.7. Layout target mode


The layout target mode parameter allows you to configure the layout of the visualization’s target panel.

Currently, the following layout target modes are available:

2.3.8. Layout output mode


The layout output mode parameter allows you to configure the layout of the visualization’s output panel.

Currently, the following layout output modes are available:

2.3.9. Delta field type


The delta field type parameter allows you to specify the type of delta field used by the visualization.

The delta field is basically a mapping from each source pixel on the screen to a destination pixel. Pixel shaders are used to iteratively apply this delta field using interpolation and some light dithering effects. This feature is purely for aesthetic purposes and has no effect on the audio.

Raster type effects are drawn into the delta field on each frame.

2.3.10. Bits per pixel


The bits-per-pixel parameter determines the number of bits per pixel to use when rendering visualizations. The default bpp is the best performing. You can increase bpp to improve visual quality.

2.3.11. Breath residual


The breath residual parameter can be used to help visualize limiter behavior. For each frame of the visualization, the current residual between target and output loudness is calculated and used to multiply the magnitude of the visualization delta field.

This feature helps you find sections of audio where the limiter is having a difficult time keeping up with the amount of target gain. This can help guide the configuration of the release and linear release parameters. The direction of the multiplication factor is also set to reflect whether the residual occurred in the attack or release direction, so it’s possible to get a sense of the overall balance between these residuals.

2.3.12. Bar Mode


The “Bar mode” parameter enables/disables bar mode. In bar mode, the visualizations will be drawn as vertical bars instead of sloped lines. This feature is purely for aesthetic purposes and has no effect on the audio.

2.3.13. Bucket size


The bucket size parameter determines the size in pixels of visualization buckets (rectangles).

2.3.14. Histogram hold


The histogram hold parameter enables or disables “hold” mode for the histogram raster types. While “hold” mode is enabled, the histogram will continuously accumulate measurements indefinitely. This can be used to capture a full duration view of your source audio. This allows you to easily adjust ranges to target to a specific region of the full dynamic range.

The histogram will still continuously accumulate measurements while “hold” mode is disabled, but for each new measurement the oldest measurement in history is replaced. This results in a continuously evolving histogram of duration specified by the history length parameter.

2.3.15. Delta X/Y/T


The delta X/Y/T parameters are provided to the visualization delta field in order to manipulate the delta field in real-time. The exact behavior of each parameter depends on the active delta field type.

2.3.16. Delta field


The delta field parameter allows you to enable or disable the visualization delta field.

The delta field is basically a mapping from each source pixel on the screen to a destination pixel. Pixel shaders are used to iteratively apply this delta field using interpolation and some light dithering effects. This feature is purely for aesthetic purposes and has no effect on the audio.

Raster type effects are drawn into the delta field on each frame.

2.3.17. Shader params


The shader parameters control various aspects of visualization rendering. The following options are available:

2.3.18. Show thresholds


The show thresholds parameter allows you to enable or disable threshold drawing in the visualization.

If this option is disabled, thresholds will still be drawn while changing the associated parameters.

Thresholds include limiter ceiling for each loudness type.

2.3.19. Panel params


The panel parameters control various aspects of panel rendering. The following options are available:

2.3.20. History length


The history length parameter allows you to change the duration of visualization history. This history is a rolling-window where each new loudness sample pushes out the oldest sample, maintaining a continuous history length with the duration you’ve configured here. Note that this setting applies both to history and histogram raster types.

During histogram hold the histogram has an effectively infinite history length.

2.3.21. Show peak meter


The show peak meter parameter allows you to enable or disable peak meter and gain reduction drawing next to the visualizer.

Positive gain delta is drawn from bottom-up, negative gain delta is drawn from top-down.

2.3.22. Show history peak


The show history peak parameter allows you to enable or disable peak hold drawing for history raster visualizations.

This option is only shown while the active raster type includes history.

2.3.23. Show axis labels


The show axis labels parameter allows you to enable or disable axis drawing in the visualization.

The axis is scaled relative to the loudness range, which can be manual or auto range.

2.3.24. Show axis lines


The show axis lines parameter allows you to enable or disable axis line drawing in the visualization.

axis lines are drawn at each Show axis labels.

2.3.25. Show param context


The show param context parameter allows you to enable or disable param context text bubbles during parameter changes.

2.4. Theme


The theme tab contains parameters related to color themes. Here you can select between the bank of color theme presets, or configure the individual colors yourself.

2.4.1. Theme presets


The theme presets combo-box allows you to switch between a variety of theme presets. Each theme has a light and dark variation. Switching between theme presets will load values into source color, normal color, target color and output color.

Currently, the following themes are available:

2.4.2. Source color


The source color parameters control the red, green, and blue components of the source color.

The source color is used in a variety of contexts, from interactive widgets to visualization elements. This color signifies that an element relates to the source signal in some way. This color is expected to contrast against the normal color to some extent.

2.4.3. Normal color


The normal color parameters control the red, green, and blue components of the “normal” color.

The normal color is used in a variety of contexts, from interactive widgets to visualization elements. This color signifies that an element is essentially neutral, not related to source, target or output signal. This color is expected to contrast against the source color, target color, and output color to some degree.

2.4.4. Target color


The target color parameters control the red, green, and blue components of the target color.

The target color is used in a variety of contexts, from interactive widgets to visualization elements. This color signifies that an element relates to the target signal in some way. This color is expected to contrast against the normal color to some extent.

2.4.5. Output color


The output color parameters control the red, green, and blue components of the output color.

The output color is used in a variety of contexts, from interactive widgets to visualization elements. This color signifies that an element relates to the output signal in some way. This color is expected to contrast against the normal color to some extent.

2.4.6. Textures


The textures configuration allows you to change the user interface textures.

The panel texture is used for the background of the user interface and has the shader params applied. The meter texture is used to fill the visualization effects. The background texture is used throughout the plug-in for shading.

These settings are stored with user scope, so you don’t need to change them with every instance. Closing a texture will reverted to the default internal texture.

Typically, the panel texture should be very dark and the meter texture should be very light.

2.5. Settings


The settings tab contains various additional parameters. These parameters are broken down between General and Latency parameters. Since Latency parameters impact delay compensation, changes to these parameters are deferred until you click the Apply button. It is generally not advisable to automate the parameters in the Latency section.

2.5.1. BPM


The bpm option allows you to set the BPM used by tempo-relative parameters.

2.5.2. Host BPM


The host bpm option enables usage of the host’s BPM for tempo-relative parameters. When disabled, the bpm parameter is used instead.

This parameter is not available (nor applicable) to the standalone application.

2.5.3. Dither


The dither parameter determines the strength of ballistics dithering. This parameter applies only to dithering ballistics type modes.

2.5.4. Velocity sensitive knobs


If enabled, this will turn on velocity-sensitive dragging, so that the faster the mouse moves, the bigger the movement to the knobs. This helps when making accurate small-scale adjustments.

This parameter is saved at user scope, so it will be remembered between sessions.

2.5.5. UI Scaling


The UI scaling option allows you to set the scaling of the user interface. This is useful for high-DPI displays, where the default scaling may be too small to read comfortably.

This parameter is saved at user scope, so it will be remembered between sessions.

2.5.6. Axis Scaling


The axis scaling option allows you to set the scaling of the axis ticks, labels and text bubbles. This is useful for high-DPI displays, where the default scaling may be too small to read comfortably.

This parameter is saved at user scope, so it will be remembered between sessions.

2.5.7. Dark mode


The dark mode toggle enables/disables dark mode. When enabled, theme colors have their brightness inverted.

2.5.8. Gain change write


The gain change write mode controls how the plug-in publishes the latest signed gain change to the host as an automatable parameter. This can be useful for recording the plug-in’s gain changes directly to an automation lane when supported by the DAW.

Disabled turns gain change write off.

Native uses the format-native write path when available. For non-VST3 plug-ins, Native falls back to the same behavior as Compatibility.

Compatibility uses the generic host-notify write path, which may work in more places but is less elegant than Native when the host supports the native path.

Host support for plug-in generated automation varies. When supported, put the host into Write or Touch mode and record the Gain Change Write parameter.

Gain change write is output-only. The recorded automation lane is not read back into the plug-in’s processing.

2.5.9. Blocksize


The block size parameter determines the time resolution of Loudness Limiter’s source loudness measurements. Generally speaking, lower block sizes will give more accurate results. However, lower block sizes also require more CPU resources, so it is necessary to find a balance. You can squeeze improved quality and/or performance out of the limiter by tuning this setting based on your available CPU resources.

Fast attack and/or release times may benefit from similarly low block size.

BPM units for block size are evaluated once at the time you press Apply.

2.5.10. Look-ahead budget


The look-ahead budget parameter determines the latency budget which is available for the look-ahead parameter. Once you have configured a look-ahead budget, you can adjust the look-ahead parameter in real-time within this range without introducing artifacts.

2.5.11. Attack budget


The attack budget parameter determines the latency budget which is available for the limiter attack parameters. Once you have configured an attack budget, you can adjust the limiter attack parameters in real-time within this range without introducing artifacts.

2.5.12. Delay compensation


The delay compensation parameter determines whether or not the plug-in will report latency to the host. Delay compensation is used by hosts to keep audio synchronized across channels.

The delay compensation option is not available (nor applicable) to the standalone application.

2.6. Update


The update tab allows you to check for the latest product versions. Just click “Check for updates” to see the latest version numbers. If you’re not running the latest version, you can click “Download” to open the download page in your default browser.

2.7. About


The about tab contains basic information about the plug-in. This is also where you can activate or deactivate your product keys and check license status.

3. Standalone CLI


APU Loudness Limiter’s standalone application exposes a small user-facing command-line interface for loading, saving, and resetting standalone preset files. This section documents the supported options only.

Supported options:

Processing order:

Examples:

Compatibility:

4. Glossary


This section defines some of the concepts used within the software.

4.1. Range sliders


Range sliders are used throughout the plug-in in order to specify the upper and lower boundaries of a range. These ranges can be controlled via mouse in various ways.

4.2. History


One of the primary views into your audio that this software provides is real-time history. The history view maintains a recent history of loudness measurements, continuously displaying them in FIFO order. This view helps you understand how the signal is changing over time, in real-time. History length and bucket size can be configured dynamically without forcing the history to reset.

4.3. Histogram


One of the primary views into your audio that this software provides is a real-time histogram. Histograms in general provide a quick and intuitive way to understand the relative frequency of different measurements. This is very useful when judging the overall dynamic range of the audio. The histogram provided by this software is capable of changing history length, bucket size and size continuously.

4.4. Source


The term “source” is used throughout the plug-in to identify the plug-in’s input source signal. This signal is represented in the user interface by the current theme’s source color.

4.5. Target


The term “target” is used throughout the plug-in to identify the “ideal” target output loudness. The actual loudness achieved depends on release and linear release parameter settings.

4.6. Output


The term “output” is used throughout the plug-in to identify the actual output loudness. This can differ from target loudness due to non-instaneous release and/or Linear release parameter settings.

5. Credits


This software was developed by APU Software, LLC and is available as VST (windows x64/x86, macOS universal), Audio Unit (macOS universal), Pro Tools AAX (windows x64, macOS universal), or Standalone Application (windows x64/x86, macOS universal). The software libraries below are utilized for portions of the software:

Demo video song credits:


5.1. MIT License (libebur128)


Copyright (c) 2011 Jan Kokemüller

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

5.2. MIT License (melatonin_blur)


Copyright (c) 2023 Sudara Williams

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.