Bitcoin Forum
December 10, 2018, 02:21:36 PM *
News: Latest Bitcoin Core release: 0.17.0 [Torrent].
 
   Home   Help Search Login Register More  
Poll
Question: Do you want to see improvements in Ethash dual-mining with GGS?
I desperately need it. - 8 (15.7%)
It would be nice. - 11 (21.6%)
It's not worth it anymore. - 32 (62.7%)
Total Voters: 51

Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ... 198 »
  Print  
Author Topic: Gateless Gate Sharp 1.3.8: 30Mh/s (Ethash) on RX 480!  (Read 204355 times)
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 09:23:31 AM
Merited by scryptr (13), 64dimensions (10)
 #1

Gateless Gate Sharp is an user-friendly yet extremely powerful open-source multi-algorithm miner for Windows operating systems. It focuses on performance, stability, and ease of use, featuring a one-of-a-kind ability to modify memory timings on the fly and a powerful built-in optimizer. Unlike the original Gateless Gate, this miner aims at stability with a much simpler design and the managed .NET Framework.



* https://github.com/zawawawa/GatelessGateSharp

* https://github.com/zawawawa/GatelessGateSharp/releases/download/v1.3.8-alpha/GatelessGateSharpInstaller.exe (Windows x64 Installer)

Currently, the miner supports Ethash/Pascal dual-mining, Ethash/daggerhashimoto, CryptoNight, CryptoNight-Light, CryptoNight-Heavy, CryptoNightV7, X16R, X16S, Pascal, NeoScrypt, LyraREv2, and the following major pools: NiceHash, ethermine.org, ethpool.org, DwarfPool, Nanopool, Mining Pool Hub, zpool, and mineXMR.com. Support for custom pools has also been added.

All you have to do to mine is to download and run the installer, launch the miner, enter your wallet address(es), and click the Start button. The miner is yet to be fully optimized, however, and the first official release will be available when it is feature-complete.

Please note that, even though this miner does work with NVIDIA cards, the current focus of the project is on AMD.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
1544451696
Hero Member
*
Offline Offline

Posts: 1544451696

View Profile Personal Message (Offline)

Ignore
1544451696
Reply with quote  #2

1544451696
Report to moderator
100% New Software
PC, Mac, Android, & HTML5 Clients
Krill Rakeback
Low Rake
Bitcoin Poker 3.0
Bad Beat Jackpot
SwC Poker Relaunch
PLAY NOW
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1544451696
Hero Member
*
Offline Offline

Posts: 1544451696

View Profile Personal Message (Offline)

Ignore
1544451696
Reply with quote  #2

1544451696
Report to moderator
Ultrabat
Member
**
Offline Offline

Activity: 117
Merit: 10


View Profile
December 15, 2016, 09:33:24 AM
 #2

Do you have plan to increase the RX 480 speed to over 200?

zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 09:41:36 AM
 #3

Do you have plan to increase the RX 480 speed to over 200?

Oh, absolutely. I would do anything to surpass Sir. Claymore.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
ioglnx
Sr. Member
****
Offline Offline

Activity: 574
Merit: 250

Fighting mob law and inquisition in this forum


View Profile
December 15, 2016, 09:43:01 AM
 #4

Good work zawawa.
Even the performance is not as EQM or other miner on nvidia its around 100/sols faster than the last SA build.
I assume its mainly optimized for AMD?

GTX 1080Ti rocks da house... seriously... this card is a beast³
Owning by now 18x GTX1080Ti :-D @serious love of efficiency
snk0752
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
December 15, 2016, 09:43:21 AM
 #5

Gateless Gate is a cross-platform OpenCL Zcash miner.

Hi,

I couldn't compile it in linux:

Code:
main.c:1392:6: note: expected ‘struct _cl_mem **’ but argument is of type ‘uint8_t *’
 void mining_mode(cl_device_id *dev_id, cl_context ctx, cl_command_queue queue,
      ^
main.c:1479:3: error: too many arguments to function ‘mining_mode’
   mining_mode(*dev_id, program, ctx, queue, k_init_ht, k_rounds, k_sols, buf_ht,
   ^
main.c:1392:6: note: declared here
 void mining_mode(cl_device_id *dev_id, cl_context ctx, cl_command_queue queue,
      ^
<builtin>: recipe for target 'main.o' failed

Do you have an idea, why compiler failed with "error: too many arguments to function ‘mining_mode’"?
Thank you.


Unidonade
Newbie
*
Offline Offline

Activity: 40
Merit: 0


View Profile
December 15, 2016, 09:44:54 AM
 #6

Do you have plan to increase the RX 480 speed to over 200?

Oh, absolutely. I would do anything to surpass Sir. Claymore.

that is great.

Any idea for the old cards like 7970 speed?
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 09:48:45 AM
 #7

Gateless Gate is a cross-platform OpenCL Zcash miner.

Hi,

I couldn't compile it in linux:

Code:
main.c:1392:6: note: expected ‘struct _cl_mem **’ but argument is of type ‘uint8_t *’
 void mining_mode(cl_device_id *dev_id, cl_context ctx, cl_command_queue queue,
      ^
main.c:1479:3: error: too many arguments to function ‘mining_mode’
   mining_mode(*dev_id, program, ctx, queue, k_init_ht, k_rounds, k_sols, buf_ht,
   ^
main.c:1392:6: note: declared here
 void mining_mode(cl_device_id *dev_id, cl_context ctx, cl_command_queue queue,
      ^
<builtin>: recipe for target 'main.o' failed

Do you have an idea, why compiler failed with "error: too many arguments to function ‘mining_mode’"?
Thank you.




That should be trivial to fix. Hold on.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
snk0752
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
December 15, 2016, 10:01:00 AM
 #8

That should be trivial to fix. Hold on.

Ok. Please, let us know once git will be updated. I'll re-clone it then.
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 10:06:04 AM
 #9

That should be trivial to fix. Hold on.

Ok. Please, let us know once git will be updated. I'll re-clone it then.


Done. Please let me know if the fix works.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
Eliovp
Legendary
*
Offline Offline

Activity: 972
Merit: 1003

Huh?


View Profile
December 15, 2016, 10:18:12 AM
 #10

getting a bit more errors over here :p

Code:
main.c: In function ‘load_file’:
main.c:286:41: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_RDONLY | O_BINARY))) {
                                         ^
main.c:286:41: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘dump’:
main.c:325:30: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666)))
                              ^
main.c: In function ‘solve_equihash’:
main.c:1024:3: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type [enabled by default]
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:957:57: warning: unused parameter ‘ctx’ [-Wunused-parameter]
 uint32_t solve_equihash(cl_device_id dev_id, cl_context ctx, cl_command_queue queue,
                                                         ^
main.c: In function ‘mining_mode’:
main.c:1407:18: warning: unused variable ‘status’ [-Wunused-variable]
  cl_int          status;
                  ^
main.c:1392:50: warning: unused parameter ‘program’ [-Wunused-parameter]
 void mining_mode(cl_device_id dev_id, cl_program program, cl_context ctx, cl_command_queue queue,
                                                  ^
make: *** [main.o] Error 1

snk0752
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
December 15, 2016, 10:20:33 AM
 #11

Done. Please let me know if the fix works.

Sure. Another one issue:

Code:
main.c: In function ‘solve_equihash’:
main.c:1024:28: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
                            ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)

The same error within another function inside:
Code:
error: too many arguments to function ‘examine_ht’
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 10:23:49 AM
 #12

Good work zawawa.
Even the performance is not as EQM or other miner on nvidia its around 100/sols faster than the last SA build.
I assume its mainly optimized for AMD?

I did a lot of algorithmic and AMD-specific optimizations, so that actually makes sense. I know for a fact that there are a ton of NVIDIA specific stuff that can be done with this miner, so I don't think it's that hard to catch up with other miners.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
pokeytex
Legendary
*
Offline Offline

Activity: 1494
Merit: 1002



View Profile
December 15, 2016, 10:26:00 AM
 #13

@zawawa - I tested on my 1070 and the following bat file line nets a total of 120 sol/1070  Cry

gatelessgate.exe --threads 1 --use 1,2 -c stratum+tcp://us-east1.zcash.miningpoolhub.com:20570 -u xxx -p xxx
pause

zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 10:28:32 AM
 #14

I see, I see. Those are easy to fix, too. Let me get to it right now.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 10:31:05 AM
 #15

@zawawa - I tested on my 1070 and the following bat file line nets a total of 120 sol/1070  Cry

gatelessgate.exe --threads 1 --use 1,2 -c stratum+tcp://us-east1.zcash.miningpoolhub.com:20570 -u xxx -p xxx
pause

You could try "--instances 2".

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 10:47:45 AM
 #16

getting a bit more errors over here :p

Code:
main.c: In function ‘load_file’:
main.c:286:41: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_RDONLY | O_BINARY))) {
                                         ^
main.c:286:41: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘dump’:
main.c:325:30: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666)))
                              ^
main.c: In function ‘solve_equihash’:
main.c:1024:3: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type [enabled by default]
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:957:57: warning: unused parameter ‘ctx’ [-Wunused-parameter]
 uint32_t solve_equihash(cl_device_id dev_id, cl_context ctx, cl_command_queue queue,
                                                         ^
main.c: In function ‘mining_mode’:
main.c:1407:18: warning: unused variable ‘status’ [-Wunused-variable]
  cl_int          status;
                  ^
main.c:1392:50: warning: unused parameter ‘program’ [-Wunused-parameter]
 void mining_mode(cl_device_id dev_id, cl_program program, cl_context ctx, cl_command_queue queue,
                                                  ^
make: *** [main.o] Error 1

They should be all fixed now. I really need to set up an automatic build system...

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
Eliovp
Legendary
*
Offline Offline

Activity: 972
Merit: 1003

Huh?


View Profile
December 15, 2016, 11:11:59 AM
 #17

getting a bit more errors over here :p

Code:
main.c: In function ‘load_file’:
main.c:286:41: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_RDONLY | O_BINARY))) {
                                         ^
main.c:286:41: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘dump’:
main.c:325:30: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666)))
                              ^
main.c: In function ‘solve_equihash’:
main.c:1024:3: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type [enabled by default]
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:957:57: warning: unused parameter ‘ctx’ [-Wunused-parameter]
 uint32_t solve_equihash(cl_device_id dev_id, cl_context ctx, cl_command_queue queue,
                                                         ^
main.c: In function ‘mining_mode’:
main.c:1407:18: warning: unused variable ‘status’ [-Wunused-variable]
  cl_int          status;
                  ^
main.c:1392:50: warning: unused parameter ‘program’ [-Wunused-parameter]
 void mining_mode(cl_device_id dev_id, cl_program program, cl_context ctx, cl_command_queue queue,
                                                  ^
make: *** [main.o] Error 1

They should be all fixed now. I really need to set up an automatic build system...

Yup, sa-solver build succesfully.
However, mining itself isn't really working :p

Code:
Found 1 OpenCL platform(s)
Connecting to zec-eu2.nanopool.org:16666
Solver 0.0: unexpected banner "Gateless Gate mining mode ready"
Solver 0.1: unexpected banner "Gateless Gate mining mode ready"
Solver 1.0: unexpected banner "Gateless Gate mining mode ready"
Solver 1.1: unexpected banner "Gateless Gate mining mode ready"
Stratum server sent us the first job
Mining on 2 devices



Hangs there :p

laik2
Sr. Member
****
Offline Offline

Activity: 471
Merit: 260



View Profile
December 15, 2016, 02:22:33 PM
 #18

getting a bit more errors over here :p

Code:
main.c: In function ‘load_file’:
main.c:286:41: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_RDONLY | O_BINARY))) {
                                         ^
main.c:286:41: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘dump’:
main.c:325:30: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666)))
                              ^
main.c: In function ‘solve_equihash’:
main.c:1024:3: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type [enabled by default]
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:957:57: warning: unused parameter ‘ctx’ [-Wunused-parameter]
 uint32_t solve_equihash(cl_device_id dev_id, cl_context ctx, cl_command_queue queue,
                                                         ^
main.c: In function ‘mining_mode’:
main.c:1407:18: warning: unused variable ‘status’ [-Wunused-variable]
  cl_int          status;
                  ^
main.c:1392:50: warning: unused parameter ‘program’ [-Wunused-parameter]
 void mining_mode(cl_device_id dev_id, cl_program program, cl_context ctx, cl_command_queue queue,
                                                  ^
make: *** [main.o] Error 1

They should be all fixed now. I really need to set up an automatic build system...

Yup, sa-solver build succesfully.
However, mining itself isn't really working :p

Code:
Found 1 OpenCL platform(s)
Connecting to zec-eu2.nanopool.org:16666
Solver 0.0: unexpected banner "Gateless Gate mining mode ready"
Solver 0.1: unexpected banner "Gateless Gate mining mode ready"
Solver 1.0: unexpected banner "Gateless Gate mining mode ready"
Solver 1.1: unexpected banner "Gateless Gate mining mode ready"
Stratum server sent us the first job
Mining on 2 devices



Hangs there :p

Copy sa-solver to /usr/local/bin or define path in environment and it will work, it requires python3-psutil for gatelessgate.py to work.
It's working for me and I can report 148S/s on stock r9 390 Tri-X by Sapphire.

ZEC: t1KbbHtXqzSS6qHBaPZDKyWnzxhRjr9oCtW
zawawa
Sr. Member
****
Offline Offline

Activity: 714
Merit: 300


Miner Developer


View Profile
December 15, 2016, 02:37:59 PM
 #19

getting a bit more errors over here :p

Code:
main.c: In function ‘load_file’:
main.c:286:41: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_RDONLY | O_BINARY))) {
                                         ^
main.c:286:41: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘dump’:
main.c:325:30: error: ‘O_BINARY’ undeclared (first use in this function)
  if (-1 == (fd = open(fname, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666)))
                              ^
main.c: In function ‘solve_equihash’:
main.c:1024:3: warning: passing argument 3 of ‘examine_ht’ from incompatible pointer type [enabled by default]
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: expected ‘cl_mem’ but argument is of type ‘struct _cl_mem **’
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:1024:3: error: too many arguments to function ‘examine_ht’
   examine_ht(round, queue, buf_ht, rowCounters[round % 2]);
   ^
main.c:530:6: note: declared here
 void examine_ht(unsigned round, cl_command_queue queue, cl_mem buf_ht)
      ^
main.c:957:57: warning: unused parameter ‘ctx’ [-Wunused-parameter]
 uint32_t solve_equihash(cl_device_id dev_id, cl_context ctx, cl_command_queue queue,
                                                         ^
main.c: In function ‘mining_mode’:
main.c:1407:18: warning: unused variable ‘status’ [-Wunused-variable]
  cl_int          status;
                  ^
main.c:1392:50: warning: unused parameter ‘program’ [-Wunused-parameter]
 void mining_mode(cl_device_id dev_id, cl_program program, cl_context ctx, cl_command_queue queue,
                                                  ^
make: *** [main.o] Error 1

They should be all fixed now. I really need to set up an automatic build system...

Yup, sa-solver build succesfully.
However, mining itself isn't really working :p

Code:
Found 1 OpenCL platform(s)
Connecting to zec-eu2.nanopool.org:16666
Solver 0.0: unexpected banner "Gateless Gate mining mode ready"
Solver 0.1: unexpected banner "Gateless Gate mining mode ready"
Solver 1.0: unexpected banner "Gateless Gate mining mode ready"
Solver 1.1: unexpected banner "Gateless Gate mining mode ready"
Stratum server sent us the first job
Mining on 2 devices



Hangs there :p

You must be using silentarmy.py. You need to run gatelessgate.py instead.

Gateless Gate Sharp, an open-source ETH/XMR miner: http://bit.ly/2rJ2x4V
BTC: 1BHwDWVerUTiKxhHPf2ubqKKiBMiKQGomZ
laik2
Sr. Member
****
Offline Offline

Activity: 471
Merit: 260



View Profile
December 15, 2016, 02:53:02 PM
 #20

Where's krnlx to get his hands on nvidia port Smiley
If you do 120 with amd optimized code sure 1070 would get at least 40% speed bump if optimized correctly, which means ~200S/s for 1070 and even more.

ZEC: t1KbbHtXqzSS6qHBaPZDKyWnzxhRjr9oCtW
Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ... 198 »
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!