XXHighEnd - The Ultra HighEnd Audio Player
April 29, 2024, 05:00:26 am *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: August 6, 2017 : Phasure Webshop open ! Go to the Shop
Search current board structure only !!  
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: XXHighEnd Model 0.9y-5-00 (New Kernel Streaming Sound Engine)  (Read 7703 times)
0 Members and 0 Guests are viewing this topic.
PeterSt
Administrator
High Grade Audiophile
*****
Offline Offline

Posts: 16837



View Profile Email
« on: January 12, 2010, 08:09:12 pm »

(download is at the very bottom)

Edit : For some it appears that during the startup of XXHighEnd three error messages appear. Most probably this will be Windows 7 Enterprise situations (but not 100% sure). This does not harm for Engine#3, but 100% sure won't allow for Kernel Streaming.
As said more below : if you want a stable version, use 0.9y-4. Notice that 0.9y-5-00 (which is beta-beta) doesn't bring crucial updates as long as Kernel Streaming doesn't work properly (also see hereunder).


If you are here for the Kernel Streaming version, please note that this version is not the one to go for. Device Selection is tedious and many people can't squeeze sound out of it. The next version hopefully improves on this all.



Kind of important if you are new :
The definite verdict is not out yet, but if you are using Windows 7, this probably does not give the best Sound Quality possible. No complaints about Vista though (and Engine#3 - WASAPI). You might try if Engine#4 (Kernel Streaming) works for you though. This seems okay for Windows 7 (for SQ) !
Also, where the SQ for Vista/Engine#3 sure is okay for version 0.9y-4, for this version (0.9y-5-00) this has not been determined yet. If in doubt, please go to 0.9y-4.


Please notice : You all may be used to receive an upgrade, in there all known issues being solved (or at least the attempt to do that), which is not the case with this upgrade. In fact, the list of known bugs is still quite long at this moment; do note that promises "will be solved in 0.9y-5" may not be true at all, unless the bug concerned is listed below as solved".
This upgrade is merely to let you enjoy the new Kernel Streaming Engine(#4) as soon as possible, which for some is about the not all that good sound Windows7 brings with Engine#3 (WASAPI).

The following changes apply to this upgrade :

  • A completely new Sound Engine : Engine#4 - Kernel Streaming.

    The original reason for it was to provide a solution for XP users who -per the later versions- run into the problem of "not enough resources" and other stuff which make Engine#1 and #2 (ever meant for XP) not work anymore. However :
    It soon appeared that this Kernel Streaming Engine sounds so much different from Engine#3 that it sure is allowed to have its own life within as well Vista and Windows 7.

    At this moment it is fair to say that Engine#3 and Engine#4 have different reaons for existance :
    - Engine#3 is for the technical listening and how realistic instruments and all can sound;
    - Engine#4 is for the emotional listener which makes forget the former.

    The Kernel Streaming Engine has been setup 100% to the ideas of XXHighEnd and e.g playing from memory, and all the aspects which make Engine#3 shine have been put similarly into Engine#4;
    Why the outcome of both Engines is so different is not quite clear, but, the two internally work completely different so it's quite explainable.

    Sadly, KS for sure will not work for everybody. This is because KS just does not work for all sound cards;
    At this moment we all have to learn which do and which don't, and right now this is a matter of trying. Also, it may appear that the software needs some amendments to let more cards work. This is not likely, and a bit depended on what we'll see popping up in the log files.
    Edit : Devices which can operate on "24 bit only" (such as the OffRamp) are not supported in this version.

    Currently the Device Selection (or devices provided) hasn't changed from before, and you will see the same Sound Devices as what you are used to. This may change in a later version. Currently it works as follows :

    Select Engine#4 and the Sound Device (both in the Settings Area) of which you hope it supports KS;
    At trying, always select a 16/44.1 file and do not upsample or anything.
    When you have a sound card/DAC which requires "Needs 24 bits" you can only leave it to that;
    When you have a sound card/DAC which requires "Needs 32 bits", set it to "DAC Is (!) 16 bits". This will cause a possible starting point for you for those devices that actually work, but coincidentally don't accept high sample rates and bit depths ! Also see below.

    A main culprit for Kernel Streaming is that the normal list of devices as you see it from rightclick the speaker icon in the taskbar tray (I talk Vista/W7 here) is not the list of Kernel Streaming devices. It will count for Direct Sound and WASAPI (in general "WDM") and all, but not for KS. However, if all is right and devices listed support KS, they can be found. However :

    A "feature" of Vista/W7 is that the names of the Sound Devices can be changed by you, the user. However, this is also applied by sound card vendors, and what you see there may be different from how things are being called internally. This means that the name you see and choose must be matched with the internally used name, and this is what the KS Device Selection from XXHighEnd tries to do. This also means it may fail, and if it fails for the reason of the name which doesn't match, nothing is lost, because you can change the name ... (first property page of the device).

    Notice that for XP this is no problem, and the device names you see in the (XXHighEnd) list, are the same ones as used internally.

    Right. After clicking play - or things play, or you receive a message indicating that your device doesn't allow KS or can't play otherwise.
    It now becomes important to tick the Log Activities checkbox (Settings Area at the bottom) and watch for the X3PB log file in the TemporaryData folder under your XX folder;
    In there you will see a list of all the KS devices which can be found in your system. Just look for the readable names which you will recognize (at the "Name attempt :" tags, and skip the more unreadable names and (GUID) codes. If you see the device you want, but received the message "doesn't support Kernel Streaming", just try to change the name of the device and try again. Don't forget to keep track of which name you change into what, or otherwise things may become a bit messy. Don't forget to quit and restart XXHighEnd to let reflect the new names in the list.

    Important : The Q1 Slider is NOT effectibe for Engine#4 (Q2/3/4/5 are as usual).

    Please note : With Unattended tt may happen that at track (or file part) boundaries a small silence emerges. This is NOT intentional, but (usually) when this starts to happen you better pause and resume (edit : no, this confuses things at the moment; just restart a track). This resets things. For Attended thus is incurred for when a very small track passes. Two things may happen here : or it gets reset, or things mess up and playback quits (may be for a longer period).
    All these things were tested and tweaked out, but too many siutuations exist to be confident it has all been covered for. Please report whatever you find here.

    And iff things don't work for you (less or not at all) we'll see further via the forum.
    If it works, I have never been more excited to learn from you how you think it sounds ...

    Edit : Engine#4 is contained in the XXEngine3.exe, so don't think Engine#3 runs when you selected Engine#4 in the Settings Area and you perceive sound ...

  • Engine#1 and Engine#2 have disappeared ...

  • New Arc Prediction feature : Peak Extension.

    The name may be gotten from the similar HDCD feature, but what this does is extending clipped peaks to more normal proportions. This concerns soft clipping as well as hard clipping.

    Important : In order to let the latter work - and regardless it is necessary for a certain album - the volume is decimated by aproximately 1.5dB. in order to allow for the extension, which otherwise would not be possible.
    In those situations 1.5dB is not sufficient, the peak will be clipped again, though at a 1.5dB higher level, and obviously less bad as in the original data.
    Notice that no attempts have been made to analyse the "often needed" pre-attenuation, and that 1.5dB seems sufficient in far most of the cases; Attenuating with 6dB (as HDCD does) by standard seems way overdone, obviously taking way 6dB of -for some- important juice.

    Lastly, the -15dB attenuation is not done differently from normal -1.5dB digital attenuation in XXHighEnd, or IOW this is attenuation without loss or implied distortion (as long as you play 16/44.1 onto a 24 bit DAC this is 100% so).

  • Global Volume Normalization.

    Ever brought up at some rainy afternoon as a nice idea, it is now possible to apply a type of what many would call "Replay Gain", but although it looks like being that (or can "do" just that) it actually is different;

    16/44.1 material only !

    What it does is allowing for a "global volume knob" where "global" extends over all the albums, and the volume slider being at e.g. -12dB always providing the same "Sound Pressure Level" (SPL). This is what happens :

    You pick an album of which you think it sounds way loud (compared to others), play it, and set the digital volume slider to any position that allows way soft albums to virtually boost. Meaning : Suppose you have a remastered AC/DC album that sounds way loud, you can set the volume at -xdB and if you'd next play an original Crime of The Centuray Supertramp, it should be possible to play that as loud for average SPL at x+ndB. For instance, if the Supertramp plays at -0dB and the AC/DC plays as loud at -15dB (which is a realistic example), you should set the volume at -15dB, appoint the AC/DC as your "calibration album" and click Set (in the Settings Area ... you will find that button). Your loud AC/DC album now has become the reference for all of the others, and, for example, when you next set the volume at -21dB (that being a normal listening level), you will see that the Supertramp automatically plays at 15dB higher, thus at -6dB.

    This all does *not* require you to in the future use the digital volume to set your listening level, and you can just keep on using the analogue volume as always (assuming you did). However, where you before left the digital volume at -0dB you will now have set it (because of the process) to -15dB, and it just stays like that. To keep in mind : this doesn't hurt a single bit Happy as long as it is applied to 16/44.1 material onto a 24 bit DAC (and you can't do otherwise because it isn't allowed).

    Your setting of -15dB (or whatever you end up with as long as it is not more than -48dB because more attenuation *does* harm the sound !) now allows for a headroom of +15dB. Virtually you allow the Supertramp to be "boosted", but what happens in reality is that the Supertramp is just attenuated less than the AC/DC which is attenuated by 15dB.

    Under the hood - and only when allowed ! - there's also real digital boost operative. For example, mentioned Supertramp album allows for that, and goes as far as somewhere in between +1.5dB and +3dB (in which case +3dB will show). This comes handy in this case :
    Your way loud album, the AC/DC, has to be set to -12dB. Why ? well, because otherwise with near open analogue volume all sounds not loud enough. The same happens when you don't use any alogue volume (or pre-amp), and when your main amps and speaker combination cause -15dB to be not loud enough (at occasions <- has to be incorporated). So, if -12dB is your "loud level", it is and it should be set to that. But, now your Supertramp is too soft without digital boost (which in this Supertramp example is logically caused by not using all the (digital) room there is during the mastering), and the +3dB digital boost just is sufficient to cover for your SPL requirements.

    A few current issues :
    - When the maximum digital volume is reached at digitally notching up further, XXHighEnd may stall and/or the remote control may become unuseable for further commands. Stop keeps on working though.
    - When an album reaches the digital boost area (+dB) the volume slider can't cope with that and anomalies may happen, depending on what you do further and how you did it. This is because the notching of the volume works relative and does not depend on the volume slider, and using a remote command just notches up when allowed by the album. The slider however will reach its maximum, and now notching down from +1.5dB to -0dB will notch down the slider from where it was (-0dB) to one notch down (-1.5dB). The effect ? the music plays at -0dB and the slider shows -1.5dB.
    - It takes time to "calculate" the numbers needed to let this work, and although once done it is not needed again for an album, it disturbs at the startup, because it really takes some time (like maybe 20 seconds for an album). This needs a "mass" function to do it e.g. overnight for once and for all, but this function isn't there yet.

    The data for this is stored in the folder of the album itself (where the music data is), in a file called Analysis.dat.

    Notice that Peak Extension (when Arc Prediction is used) is applied first but does not determine the maximum level etc. of the album. Difficult to understand and hard to explain, but what it comes down to is that whatever the Global Volume has determined for you, what you hear is 1.5dB lower than what you see (as used setting).

    Lastly, keep in mind that this all works with average SPL, and that it well can happen that an album with low average SPL has fairly high transient peaks (read : it is un-/less compressed), and those peaks may be too high for you. On this matter, take care that you used an album for the calibration which is representative for the music you play. Also notice that only one calibration album can be denoted, but that it can be changed easily.

  • Faster Volume Change with Arc Prediction.

    The first version (in 0.9y-4) was quite "unuseable" on this matter. Now, things are more back to normal, or anyway acceptable.

  • Volume change is more decent now.

    Before it was far from fool proof, and you really had to pay attention whether a previous command had been processed before giving a next. Now it is allowed to give e.g. 3 commands in a row, and although they will be processed sequentially, it won't go wrong. Not in normal circumstances.

    Issue : Since this also covers for other types of anomalies, like the playback stopping at the end of the track or just a "XXEngine3 stopped working" not long after a volume change, it still may happen that anomalies in this area occur, although they will be completely different now. At this moment it is not clear exactly when this happen, but changing the volume near the end of a track seems to influence (for the worse). Also, for Engine#3 and Engine#4 this works quite different, and different issues may occur.
    When something strange happens, please try to describe it as clear as possible.

  • New Gallery function Show all Main Coverart from selection inj right pane.

    Can be found at rightclick a (selection of) Coverart Item(s) in the middle pane - More Gallery functions;
    Its purpose is to provide a list of Main Coverart (one per album) in the right pane in order to mass resize it. The number under the "Go" entry you will see, is the size in KB the Main Coverart must be at least in order to show up. Thus, enter e.g. 200 there and only Main Coverart larger than 200KB shows up. Next, new functions in the richtclick menu on Coverart Items in the right pane allow you to (mass) resize the Main Coverart. This can be done for the dimensions and the KB size.

  • New Gallery function Show all Coverart from selection inj right pane.

    Can be found in the same menu as the previous function.
    Its purpose is the same as the previous function for Main Coverart, but now for all the Coverart and the resizing of it.
    Important : Don't use this function when not first the Main Coverart has been dealt with; the process flow as offered assumes the Main Coverart to be small enough not to show up again when "all" the Coverart is selected (this function). And to keep in mind are these two important rules :
    1. Main Coverart has no reason to be huge in dimensions; there is nothing to read from small print and it is used to identify albums plus show it as Wallpaper if you want; dimensions larger than the screen are useless. At the same time you'd want them as small as possible for their KB size, because wherever you search for albums, this size counts (it has to be read from disk).
    2. The General Coverart (everything but Main Coverart) needs to be large in dimensions in order to be able to read it. Think of booklets. However, most often (downloads) this has been completely overdone, and the "resolution" used allows for one character to fill the screen. The KB size going along with that is, well, ridiculous (often over 10MB). Although this Coverart is only read and presented for the selected albums, this too will take a considerable amount of time, also keeping in mind complete booklets of 20 pages (times 10MB etc.) may be there. So here you have two objectives : resize the dimensions to something normal for readability (3000x3000 is a good value) and shrink the KB size at the same time (1000KB is very acceptable for a 3000x3000 size).

  • Adjusted function Save as LxW in the Coverart pane (right pane).

    This is one of the actual resizing functions as mentioned above. Notice that it was already there, but now it takes the LxW values from a new parameter in the Settings Area (CoverArt Resize Size).
    Notice this keeps the old Coverart, and just creates a new version of it, with the size you denoted.

  • New function Overwrite as LxW in the Coverart pane (right pane).

    Same as the previous function, but this indeed overwrites;
    While the previous one is merely for trying a bit or resizing an individual picture, this one here is for mass replace.
    Notice that where you normally see the Coverart of an album in the right pane, the earlier new functions allow there to be 10,000 (etc.) pictures which are all larger than your likings. So, making those smaller and you'd rather overwrite the large ones, than keeping all those large pictures (hey, why are you doing this in the first place ?).

  • Adjusted function Save as LxW to Folder.jpg in the Coverart pane (right pane).

    This one too, already existed, but the LxW was taken from the current Wallpaper size setting. Again, now this is taken from before mentioned new parameter in the Settings Area.

  • New function Rotate (losslessly).

    When those uploaders provided you with a 90, 180 or 270 degree wrongly rotated picture, here's your easy solution to it.
    Keep in mind : it works on selections of pictures.

  • New function Backup CoverArt to Gallery Structure.

    Meant for your attempts to mass resize the Coverart, and for when it fails;
    The "to Gallery Structure" is needed because you're in fact operating at a flat level of Coverart once it came from a selection of albums (from the midle pane). Thus, backing them all up in just "a folder" and you'd never know where to put them back if not done to something like a (complying) Gallery Structure.
    BUT NOTE : Although you will be able to put back individual pictures, there is NO mass Restore function yet ! So, it *is* a safety backup, but don't make it mess of your resize activities anyway. Always try first with a few, and know that resizing is lossY. Thus, making them too small and then bigger etc. etc. and the quality will degrade significantly.

    For more about the above new functions, see Resize Coverart 0.9y-5 (more advanced useage)

  • At the place where normally the checkbox with "100" shows (at the bottom with the Library Area active) now shows the number of resulting albums (or tracks) in the Library Area.

  • The Compare Album functionality has been drastically changed and improved.

    First of all, comparing e.g. 10,000 with 10,000 other albums doesn't take more than a few minutes really (was DAYS);
    Secondly the logic to find albums already existing or not has been improved vastly.
    Thirdly, log file names can be given and the result will be saved in there (in the TemporaryData subfolder to your XX folder).
    There's quite some more like progressbars for the different stages. You will see it automatically.

  • The OSD Time works for Windows 7 as well.

    But note : Windows 7 is sensitive to "touching the screen" with these kind of low-level activities. For instance, when the time is visibly running and you drag another form over the screen, it might well disappear until the next track.

  • In the Settings Area a Demo Gallery entry has been added; similar to the Nice Stuff Gallery tracks can be added to the denoted Demo Gallery on the fly with the Alt-z remote command.

  • Finding Coverart has been dramatically speed up in some circumstances, depending on the folder structure used.

  • More intelligent finding of Main Coverart.

    By itself not much different from how it has been working somewhat longer ago;
    Lately, some intellegence had been removed in order to speed up the showing of Main Coverart in the middle pane (Library Area), but since then many other improvements have been applied for the performance in this area, so the removal of the intelligence reallys isn't necessary anymore. More importantly, that removal caused back covers (not named Back.jpg while the front covers not being called Folder.jpg) to show as the Main Coverart. So, this has been restored now.

  • Again improvements have been applied for finding the Coverart from Multi Volume albums better.

  • It was found that the Coverart for Multi Volume albums didn't end up in Galleries, when the Coverart is stored at the higher "album name" level (with sub folders for the individual volumes). This has been solved.

  • New function "ReDo".

    Can be found at rightclick a (selection of) Coverart Item(s) in the middle pane - More Gallery functions;
    This causes the "redistribution" of the data from an Original Location to the earler (ever) denoted Gallery Folders.
    This is useful for situations like mentioned above (Multi Volume Coverart missing in Gallery data) : in some earlier version something was lacking, and after the bug concerned has been solved, this will repair it.

  • The showing of Coverart in the right pane has been speed up by means of the same (thumbnail) cacheing as is applied to the middle pane since a few versions.

  • In 0.9y-4 the Copy to FLAC function was broken. Solved now.

  • Some of the Explore Original Location functions didn't go to the Original Location at all, but to the Gallery Location concerned (since a one or two versions back). This is solved.

  • It was reported that not all of the colors adjusted to general Windows (theme) settings. This has been solved as well as possible, but for the Embedded Explorer not all "themes" will adapt to it. Some do, others don't. It seems that it can't be solved better than how it is now.

  • The pre-conversions (like from FLAC) didn't go in parallel (for multi core processors) anymore since 0.9-y4. Solved.

  • In some special occasions, Cue File albums in FLAC format wouldn't play. This happened when the album name is shorther than 9 positions. Solved.

  • When a selection of tracks (like Track 1, 3, 4 and 7) was played Unattendedly and all was played through, a next play (of whatever) stopped after the first track. This was caused by a technical solution for "something" which caused the End After Track checkbox to be ticked when XXHighEnd was auto-brought up after playing the selecetion. This is solved now.

  • It was found that when XXHighEnd is started while no sound is playing, the priorities and everything were not reset. By itself this is a situation which normally doesn't exist (although Alt-S would incur for it with Unattended), but in Windows 7 it can more easily happen because the priorities are treates somewhat different in there. Hard to explain, but solved anyway.

  • Under XP it could happen that right after the startup of XXHighEnd only a few buttons showed.  This must have been in there for quite some versions. It is solved now.



The usual repeat from earlier Release Notes :


Very important : Only when AutoHotkey has been installed, and is at least working to the extend XXHighEnd can be startup with a hotkey (default is Alt-X), it is allowed to tick the checkbox "Stop Services" in the Settings Area, and use Unattended Playback mode (checkbox at the bottom of the main screen). For AutoHotkey See AutoHotkey Install. When this is not done, hence XXHighEnd can not be brought up with a hotkey, at Unattended Payback - no desktop icons will be visible, no Taskbar will be there, no Startbutton will be around ... nothing. You might, however, may be able to use the "Windows" key which will bring up the Start Menu and find something in there to find your ways again. So, be careful, or maybe you will not be able to do anything, except for listening out the playlist concerned, and wait until that finishes and XXHighEnd will popup automatically, which by itself will bring back everything.
A reboot is a solution as well. yes

This all sounds more dangerously than it really is, and with the hotkeys available there is really nothing to fear.
And remember the objective : better Sound Quality.



* XXHighEnd-09-y500.zip (6664.87 KB - downloaded 1432 times.)
« Last Edit: January 18, 2010, 09:30:38 am by PeterSt » Logged

For the Stealth III LPS PC :
W10-14393.0 - July 17, 2021 (2.11)
XXHighEnd Mach III Stealth LPS PC -> Xeon Scalable 14/28 core with Hyperthreading On (set to 14/28 cores in BIOS and set to 10/20 cores via Boot Menu) @~660MHz, 48GB, Windows 10 Pro 64 bit build 14393.0 from RAM, music on LAN / Engine#4 Adaptive Mode / Q1/-/3/4/5 = 14/-/0/0/*1*/ Q1Factor = *4* / Dev.Buffer = 4096 / ClockRes = *10ms* / Memory = Straight Contiguous / Include Garbage Collect / SFS = *10.13*  (max 10.13) / not Invert / Phase Alignment Off / Playerprio = Low / ThreadPrio = Realtime / Scheme = Core 3-5 / Not Switch Processors during Playback = Off/ Playback Drive none (see OS from RAM) / UnAttended (Just Start) / Always Copy to XX Drive (see OS from RAM) / Stop Desktop, Remaining, WASAPI and W10 services / Use Remote Desktop / Keep LAN - Not Persist / WallPaper On / OSD Off (!) / Running Time Off / Minimize OS / XTweaks : Balanced Load = *62* / Nervous Rate = *1* / Cool when Idle = n.a / Provide Stable Power = 1 / Utilize Cores always = 1 / Time Performance Index = Optimal / Time Stability = Stable / Custom Filtering *Low* (16x) / Always Clear Proxy before Playback = On -> USB3 from MoBo -> Lush^3
A: W-Y-R-G, B: *W-G* USB 1m00 -> Phisolator 24/768 Phasure NOS1a/G3 75B (BNC Out) async USB DAC, Driver v1.0.4b (16ms) -> B'ASS Current Amplifier -> Blaxius*^2.5* A:B-G, B:B-G Interlink -> Orelo MKII Active Open Baffle Horn Speakers. ET^2 Ethernet from Mach III to Music Server PC (RDC Control).
Removed Switching Supplies from everywhere (also from the PC).

For a general PC :
W10-10586.0 - May 2016 (2.05+)
*XXHighEnd PC -> I7 3930k with Hyperthreading On (12 cores)* @~500MHz, 16GB, Windows 10 Pro 64 bit build 10586.0 from RAM, music on LAN / Engine#4 Adaptive Mode / Q1/-/3/4/5 = 14/-/1/1/1 / Q1Factor = 1 / Dev.Buffer = 4096 / ClockRes = 1ms / Memory = Straight Contiguous / Include Garbage Collect / SFS = 0.10  (max 60) / not Invert / Phase Alignment Off / Playerprio = Low / ThreadPrio = Realtime / Scheme = Core 3-5 / Not Switch Processors during Playback = Off/ Playback Drive none (see OS from RAM) / UnAttended (Just Start) / Always Copy to XX Drive (see OS from RAM) / All Services Off / Keep LAN - Not Persist / WallPaper On / OSD On / Running Time Off / Minimize OS / XTweaks : Balanced Load = *43* / Nervous Rate = 1 / Cool when Idle = 1 / Provide Stable Power = 1 / Utilize Cores always = 1 / Time Performance Index = *Optimal* / Time Stability = *Stable* / Custom Filter *Low* 705600 / -> USB3 *from MoBo* -> Clairixa USB 15cm -> Intona Isolator -> Clairixa USB 1m80 -> 24/768 Phasure NOS1a 75B (BNC Out) async USB DAC, Driver v1.0.4b (4ms) -> Blaxius BNC interlink *-> B'ASS Current Amplifier /w Level4 -> Blaxius Interlink* -> Orelo MKII Active Open Baffle Horn Speakers.
Removed Switching Supplies from everywhere.

Global Moderator
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2005, Lewis Media Valid XHTML 1.0! Valid CSS!
Page created in 0.076 seconds with 20 queries.