FDConf 2015 - Self Modifying Code

FDConf 2015 - Self Modifying Code

How do we write small programs that output their own source in a different way? Can we create mind-bending animations using less than 1024 bytes of JavaScript and HTML? What will we see when we pass the limits of the language? Join this talk to learn things that you never thought were possible!

Da8d2138f0bcc1f7d1042a557f70623c?s=128

Martin Kleppe

April 18, 2015
Tweet

Transcript

  1. None
  2. Martin Kleppe @aemkei

  3. Ubilabs

  4. Ubilabs

  5. None
  6. None
  7. None
  8. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdyssoooyNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy/..` ``` ``..--/+/+yydNMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMNy- ` `....+mMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMNs.` ``

    `...`/hNMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMN+` `-dMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMN: ` ``-dMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMN- ` ``.:/dMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMdo` `.-/-hMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMNo` .:/:/.:hMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMN/ `.../sms.:oNMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMo` ``..-//:yNMMm::shMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMy. ``..---.``.::///++oyNMMMMM+:soMMMMMMMMMMMMMM MMMMMMMMMMMMMMMN- ``..---::::/+ooosydmNMMMMMMN+//+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMy- `....---:://+oyhdmNNNNMMMMMMmy/-+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMmo `....----::/++ohmmNNNNMMMMMMMMN/./mMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMN/ `.....``````..-::/osyhddhhddddmNd..+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMy` `.--...```````` ``-:/+++/:.``./hs`oNMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMNo+:.` .---..``` `.`````.:+o:.` `:+mNNMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMm:` ```----...``````:-``.``-+mN+..``:NNMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMmh-..`..`-::--........---....-oNMNdyyhmMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMho:. `-..``-:----..--::::::-...-+NMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMNo. ` `.-------:://///:-....-/hMMMMMMMMMh`oMMMMMMMMMMMMMMMM MMMMMMMMMMMMN- .-:------:::::--.`..--/sMMMh+yNMMh sMMMMMMMMMMMMMMM MMMMMMMMMMMMo `.-----..........`````.-+dNm+-/dN- +MMMMMMMMMMMMMMM MMMMMMMMMMMM. `.--...````````````````.oNMMo:.o/ +MMMMMMMMMMMMMMM MMMMMMMMMMMM/ `....````` ````.-:/+hmmy-:/y oMMMMMMMMMMMMMMM MMMMMMMMMMMMs ``..````````` ```.-+shyydh. dMMMMMMMMMMMMMMM MMMMMMMMMMMMy ``````````..``````--:/yMMNmh. /mMMMMMMMMMMMMMM MMMMMMMMMMMMs `````` ``````````.-oNNh+. .+oyhhmMMMMMMMM MMMMMMMMMMMM. ` ````````....-:ohmNd/` `-:+sh MMMMMMMMMMMs `...--/ydy: MMMMMMMMmdy- `.-. MMMNy+-. ms: ``` Martin Kleppe MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  9. __ _/\ \ /' \ \ \ __ __ ___

    ___ /\_, \ \ \/'\ /'__`\ /'__`\/' __` __`\/_/\ \ \ , < ___ /\ \L\.\.\ __//\ \/\ \/\ \ \ \ \ \ \\`\____ /\___\ \ \__/.\_\\____\ \_\ \_\ \_\ \ \_\ \_\ \____\ \/___/ \/__/\/_//____/\/_/\/_/\/_/ \/_/\/_/\/____/ @aemkei
  10. aem1k.com/world

  11. .<script> eval(z='p="<"+"pre>"/* ,.oq#+ ,._, */;for(y in n="zw24l6k\ 4e3t4jnt4qj24xh2 x/* =<,m#F^

    A W###q. */42kty24wrt413n243n\ 9h243pdxt41csb yz/* #K q##H######Am */43iyb6k43pk7243nm\ r24".split(4)){/* dP cpq#q##########b, */for(a in t=pars\ eInt(n[y],36)+/* p##@###YG=[#######y */(e=x=r=[]))for\ (r=!r,i=0;t[a/* d#qg `*PWo##q#######D */]>i;i+=.05)wi\ th(Math)x-= /* aem1k.com Q###KWR#### W[ */.05,0>cos(o=\ new Date/1e3/* .Q#########Md#.###OP A@ , */+x/PI)&&(e[~\ ~(32*sin(o)*/* , (W#####Xx######.P^ T % */sin(.5+y/7))\ +60] =-~ r);/* #y `^TqW####P###BP */for(x=0;122>\ x;)p+=" *#"/* b. OQ####x#K */[e[x++]+e[x++\ ]]||(S=("eval"/* l `X#####D , */+"(z=\'"+z.spl\ it(B = "\\\\")./* G####B" # */join(B+B).split\ (Q="\'").join(B+Q/* VQBP` */)+Q+")//m1k")[x/2\ +61*y-1]).fontcolor/* TP */(/\\w/.test(S)&&"#\ 03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)')// </script>
  12. None
  13. aem1k.com/mandelcode

  14. <pre id=P> <script> E = 1 , z=1.07 ; function

    s( a) { for(a&&(E=!E),H="",z *= .9,T*=.8,Y=0;2>Y;Y+=.1) { for (X=0;2>X;X+=.04){for(x=y=i =0;99>i &&99>=x*x+y*y;i++)t=2*x*y,x = x*x-y*y+z*X -z-Z/(1-T),y=t+z*Y-z-U;(/* MANDELCODE=A-QUINE-BY-AEMKEI=CLICK-TO-ZOOM*/ H )+=" .+#"[ i%5]}H+=n}!E&&setTimeout(s ,99),P[ I]=H}Z=1.74909351853611232, U = 3.40212772e-7,onclick=s;n ="\n";P.textContent="<" + "pre id=P>\n"+P[I= "i"+ "nnerHTML" ] T /*aem1k*/ = - 2 </script>
  15. None
  16. None
  17. jsfuck.com

  18. None
  19. [][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+ +!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]] [([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[ []+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+![+ []]]]]+[])[+[[!+[]+!+[]+!+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[] []+!+[]+![]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+! +!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]]+([][[]] [])[+[[+!+[]]]]+(![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[ []]]]+([][[]]+[])[+[[+[]]]]+([][(![]+[])[[[[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+ []+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+

    []]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+([][( +[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[] +(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[ [[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]((![]+[])[+[[+!+[]]]]+ []+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]+(!! [])[+[[+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]] []+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![] [])[+[[+!+[]]]]]+[])[+[[+!+[]]]+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+[+!+[]]+([][(![]+ [+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+ []+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[+
  20. DHTML5 DHTML5

  21. <!DOCTYPE html> <html> <head> <title>Title</title> <script type="text/javascript"> function init() {

    ... } </script> </head> <body onload="init()"> ... </body> </html>
  22. <html> <head> <title>Title</title> <script type="text/javascript"> function init() { ... }

    </script> </head> <body onload="init()"> ... </body> </html>
  23. <head> <title>Title</title> <script type="text/javascript"> function init() { ... } </script>

    </head> <body onload="init()"> ... </body>
  24. <body onload="init()"> ... </body> <title>Title</title> <script type="text/javascript"> function init() {

    ... } </script>
  25. <script type="text/javascript"> function init() { ... } </script> <body onload="init()">

    ... </body>
  26. <script> function init() { ... } </script> <body onload="init()"> ...

    </body>
  27. <body onload="..."> ... </body>

  28. <body onload="...">

  29. <body onload=...>

  30. <body onload=...>

  31. <body onload=alert(1)>

  32. <body onload=document.write(1)>

  33. <body onload=document.body.innerHTML=1>

  34. <body id=b onload=b.innerHTML=1>

  35. <body id=b onload=b.innerHTML='<pre>'+1>

  36. <body id=b onload=b.innerHTML='<pre>'+1>

  37. <body id=b onload=b.innerHTML='<pre>'+1>

  38. <body id=b onload="b.innerHTML='<pre>'+1">

  39. <body id=b onload="b.innerHTML='<pre>'+1">

  40. <body onload='b.innerHTML="<pre>"+1'id=b > id=b onload="b.innerHTML='<pre>'+1"

  41. <body onload="b.innerHTML='<pre>'+1"id=b>

  42. <body onload="b.innerHTML='<pre>'+1"id=b>

  43. <pre id=b>

  44. <pre id=b><script>b.innerHTML=1</script>

  45. min.js

  46. var x = Math.random(); var y = Math.random(); var z

    = Math.max(x, y);
  47. x = Math.random(); y = Math.random(); z = Math.max(x, y);

  48. M = Math; x = Math.random(); y = Math.random(); z

    = Math.max(x, y);
  49. M = Math; x = M.random(); y = M.random(); z

    = M.max(x, y);
  50. M = Math; r = M.random; x = M.random(); y

    = M.random(); z = M.max(x, y);
  51. M = Math; r = M.random; x = r(); y

    = r(); z = M.max(x, y);
  52. M = Math; r = "random"; x = M[r](); y

    = M[r](); z = M.max(x, y);
  53. M = Math; r = "random"; x = M[r="random"](); y

    = M[r](); z = M.max(x, y);
  54. M = Math; x = M[r="random"](); y = M[r](); z

    = M.max(x, y);
  55. with (Math){ x = random(); y = random(); z =

    max(x, y); }
  56. with (Math) x = random(), y = random(), z =

    max(x, y);
  57. with (Math) x = (r=random)(), y = r(), z =

    max(x, y);
  58. with (Math) z = max((r=random)(), r());

  59. with(Math)z=max((r=random)(),r())

  60. aem1k.com/deathstar

  61. Зв езда <bOdY oNLOAd= "Я=[];Л= {};Ж=!Я;З= !Ж;Ч=!+Я;Д= Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч] Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[ Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш

    =+Ч;X=+Я;Й='';К='Й' H=П[X];T=Д+[X];Ы[P [Ь]+P[Ш]+C[Ш]+Ю[Б]+H +И+C[X]+P[Ь]+H+P[Ш]+И ](Ю[Ш]+Ю[ Д]+П[Б]+И +H+(Ж+Ы )[T]+К+ (З+Ы) [T])( )"> смЕ р Ти
  62. Зв езда <body onload= "Я=[];Л= {};Ж=!Я;З= !Ж;Ч=!+Я;Д= Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч] Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[ Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш

    =+Ч;X=+Я;Й='';К='Й' H=П[X];T=Д+[X];Ы[P [Ь]+P[Ш]+C[Ш]+Ю[Б]+H +И+C[X]+P[Ь]+H+P[Ш]+И ](Ю[Ш]+Ю[ Д]+П[Б]+И +H+(Ж+Ы )[T]+К+ (З+Ы) [T])( )"> смЕ р Ти
  63. Зв езда <body onload= "Я=[];Л= {};Ж=!Я;З= !Ж;Ч=!+Я;Д= Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч] Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[ Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш

    =+Ч;X=+Я;Й='';К='Й' H=П[X];T=Д+[X];Ы[P [Ь]+P[Ш]+C[Ш]+Ю[Б]+H +И+C[X]+P[Ь]+H+P[Ш]+И ](Ю[Ш]+Ю[ Д]+П[Б]+И +H+(Ж+Ы )[T]+К+ (З+Ы) [T])( )"> смЕ р Ти
  64. Зв езда <body onload= "Я=[];Л= {};Ж=!Я;З= !Ж;Ч=!+Я;Д= Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч] Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[ Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш

    =+Ч;X=+Я;Й='';К='Й' H=П[X];T=Д+[X];Ы[P [Ь]+P[Ш]+C[Ш]+Ю[Б]+H +И+C[X]+P[Ь]+H+P[Ш]+И ](Ю[Ш]+Ю[ Д]+П[Б]+И +H+(Ж+Ы )[T]+К+ (З+Ы) [T])( )"> смЕ р Ти
  65. 

  66. None
  67. ="" ,= !+ , =! +, = +{}, = [++

    ],= [ =] ,= ++ +, = [ + ],[ += [ ]+( . + )[] +[ ]++ + [ ]+ + + [ ]+ ][ ] ([ ]+ [ ]+ []+ ++ "()" )()
  68. None
  69. aem1k.com/matrix

  70. without Latin characters? How to write JavaScript

  71. 1. Escape Sequences 2. Playing Scrabble

  72. a

  73. a \u0061

  74. \u0061\u006c\u0065\u0072\u0074(1)

  75. a l e r t (1)

  76.  \u96e8

  77. И \u0418

  78. a \x61

  79. "a" "\x61"

  80. "a" "\141"

  81. []["\155\141\160\]["\ \143\157\156\163\164\ \162\165\143\164\157\ \162"]("\141\154\145\ \162\164\50\61\51")()

  82. []["\155\141\160"]["\ \143\157\156\163\164\ \162\165\143\164\157\ \162"]("\141\154\145\ \162\164\50\61\51")()

  83. [][" m a p "]["\ c o n s t

    \ r u c t o \ r "](" a l e \ r t ( 1 ) ")()
  84. []["map"]["constructor"]("alert(1)")()

  85. []["map"]["constructor"]("alert(1)")()

  86. function["constructor"]("alert(1)")()

  87. function["constructor"]("alert(1)")()

  88. Function("alert(1)")()

  89. Function("alert(1)")()

  90. eval("alert(1)")

  91. 1. Escape Sequences 2. Playing Scrabble

  92. ![] => false !![] => true

  93. ![] + "" => "false" !![] + "" => "true"

  94. "true"[0] => "t" "true"[1] => "r" "true"[2] => "u" "true"[3]

    => "e"
  95. "false" [1] "false" [2] "true" [3] "true" [1] "true" [0]

  96. f a l s e f a l s e

    t r u e t r u e t r u e
  97. f a l s e f a l s e

    t r u e t r u e t r u e
  98. f a l s e o b j e c

    t t r u e f a l s e o b j e c t o b j e c t f a l s e t r u e
  99. o b j e c t o b j e

    c t u n d e f i n e d f a l s e t r u e t r u e t r u e o b j e c t t r u e o b j e c t t r u e
  100. []["map"]["constructor"]("alert(1)")()

  101. None
  102. Invisible Code

  103. Can we hide JavaScript inside itself?

  104. 00 | Null 01 | Start of Heading 02 |

    Start of Text Whitespace 04 | End of Transmission 05 | Enquiry 06 | Acknowledge 07 | Bell (audible or \b | 08 | Backspace \t | 09 | Horizontal Tabulation \n | 0A | Line Feed \v | 0B | Vertical Tab \f | 0C | Form Feed \r | 0D | Carriage Return 0E | Shift Out 0F | Shift In
  105. 00 | Null 01 | Start of Heading 02 |

    Start of Text 03 | End of Text 04 | End of Transmission 05 | Enquiry 06 | Acknowledge 07 | Bell \b | 08 | Backspace \t | 09 | Horizontal Tabulation \n | 0A | Line Feed \v | 0B | Vertical Tab \f | 0C | Form Feed \r | 0D | Carriage Return 0E | Shift Out 0F | Shift In
  106. 10 | Data Link Escape 11 | Device Control 1

    12 | Device Control 2 13 | Device Control 3 14 | Device Control 4 15 | Negative Acknowledge 16 | Synchronous Idle 17 | End of Transmission Block 18 | Cancel 19 | End of Medium 1A | Substitute 1B | Escape 1C | File Separator 1D | Group Separator 1E | Record Separator 1F | Unit Separator
  107. <body onload=eval(eval('"'+escape("").replace(/..(.)..(.)/g,'\\x$1$2')+'"'))>

  108. aem1k.com/0

  109. None
  110. <body onload=eval(eval('"'+escape("").replace(/..(.)..(.)/g,'\\x$1$2')+'"'))>

  111. <body onload=eval(eval('"'+escape("").replace(/..(.)..(.)/g,'\\x$1$2')+'"'))>

  112. for(b=i=[X=3772];i--;)b[i]=68*i%9%2;setInterval('for (a=b,b=[h="<pre>"],i=0;i++<X;i%w||(h+="\n")){for(d=j =0;e=[1,91,w,93][j++];)d+=a[i+e]+a[i-e];h+=".#"[b[i] =3==d|a[i]&2==d]}document.body.innerHTML=h',w=92)

  113. 1616161F171212181612131D1619131D151B1518131D1313131713171312 151D131B1619121D121D131B12191612151B1619151D131D13161318121A 16191215131912151312131B1713161517141419161E1714161517121716 1611161C121812171616161F171212181611131D1612121C1612131D151B 1618131D1212131C171017121615131E1212151D121C1619131D1310131B 1619121B121B131C1518131B161912151717171C171C12181618121B131D 1212151C151C161E121212191219171B1616161F171212181614131D161A 131D1310131B1615131D151B1311121C13191311121C1717121C13191313 151D151B161A121B121B151D131B12191614121B131D1611151B1619121B 1615151D121B1611151B1619121D1615151D131B1618121B131D1212121E

    12131212151B1612151B1619151D131D1313131D131D1614171C1611151B 1619151D12161312131D131D1614151D171D1614161F16131715161D1615 161E1714121E1612161F16141719121E1619161E161E1615171214181514 141D141C131D16181217121C1717131D131913121219
  114. escape('').replace(/..(.)..(.)/g,'\\x$1$2')

  115. escape('').replace(/..(.)..(.)/g,'\\x$1$2')

  116. escape('').replace(/..(.)..(.)/g,'\\x$1$2')

  117. escape('').replace(/..(.)..(.)/g,'\\x$1$2')

  118. 0 1 2 3 4 5 6 7 8 9

    A B C D E F
  119. 00 00 00 00 00 00 00 00 00 00

    00 00 00 00 00 00 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
  120. 00 00 00 00 00 00 00 00 00 00

    00 00 00 00 00 00 16 11 16 1C 16 15 17 12 17 14 12 18 13 11 12 19
  121. %16%11%16%1C%16%15%17%12%17%14%12%18%13%11%12%19

  122. 6 1 6 C 6 5 7 2 7 4

    2 8 3 1 2 9
  123. 61 6C 65 72 74 28 31 29

  124. \x61\x6C\x65\x72\x74\x28\x31\x29

  125. a l e r t ( 1 )

  126. -moz-control-character-visibility: visible;

  127. -moz-control-character-visibility: visible;

  128. ").replace(/..(.)..(.)/g,'\\x$1$2') escape("

  129. ").replace(/..(.)..(.)/g,'\\x$1$2') escape(" 1616161F171212181612131D1619131D151B1518131D 1313131713171312151D131B1619121D121D131B12191612151B1619151D13 1D13161318121A16191215131912151312131B1713161517141419161E1714 1615171217161611161C121812171616161F171212181611131D1612121C16 12131D151B1618131D1212131C171017121615131E1212151D121C1619131D 1310131B1619121B121B131C1518131B161912151717171C171C1218161812 1B131D1212151C151C161E121212191219171B1616161F171212181614131D 161A131D1310131B1615131D151B1311121C13191311121C1717121C131913

    13151D151B161A121B121B151D131B12191614121B131D1611151B1619121B 1615151D121B1611151B1619121D1615151D131B1618121B131D1212121E12 131212151B1612151B1619151D131D1313131D131D1614171C1611151B1619 151D12161312131D131D1614151D171D1614161F16131715161D1615161E17 14121E1612161F16141719121E1619161E161E1615171214181514141D141C 131D16181217121C17
  130. ... within Mozilla; some people like the idea of displaying

    control characters “ ”
  131. Let us play the game on the next level …

  132. Tetris

  133. те́ трис

  134. τέτρα + теннис

  135. <script>[]["\155\141 \163\164\162\165\143 \166\141\154(\145\166 \053\145\163\143\141 \145\160\154\141\143 \175(\56)\56\173\065 \175(\56)\57\147\054 \62\44\63\47)\53\047 \160"]["\143\157\156\ \164\157\162"]("\145\

    \141\154(\47\42\047\ \160\145(‘֥֠')\056\162\ \145(\57\056\173\065\ \175(\56)\056\173\65\ \47\134\134\44\61\44\ \42\47))")()</script>
  136. <script>[]["\155\141 \163\164\162\165\143 \166\141\154(\145\166 \053\145\163\143\141 \145\160\154\141\143 \175(\56)\56\173\065 \175(\56)\57\147\054 \62\44\63\47)\53\047 \160"]["\143\157\156\ \164\157\162"]("\145\

    \141\154(\47\42\047\ \160\145(‘֥֠')\056\162\ \145(\57\056\173\065\ \175(\56)\056\173\65\ \47\134\134\44\61\44\ \42\47))")()</script>
  137. <script>[]["\155\141"+/* */"\160"]["\143\157\156\ \163\164\162\165\143"+/* */"\164\157\162"]("\145\ \166\141\154(\145\166"/* */+"\141\154(\47\42\047\ \053\145\163\143\141"+/* */"\160\145(‘֥֠')\056\162\ \145\160\154\141\143"+/* */"\145(\57\056\173\065\

    \175(\56)\56\173\065"+/* */"\175(\56)\056\173\65\ \175(\56)\57\147\054"+/* */"\47\134\134\44\61\44\ \62\44\63\47)\53\047"+/* */"\42\47))")()</script>
  138. <script>[]["\155\141"+/* */"\160"]["\143\157\156\ \163\164\162\165\143"+/* */"\164\157\162"]("\145\ \166\141\154(\145\166"/* */+"\141\154(\47\42\047\ \053\145\163\143\141"+/* */"\160\145(‘֥֠')\056\162\ \145\160\154\141\143"+/* */"\145(\57\056\173\065\

    \175(\56)\56\173\065"+/* */"\175(\56)\056\173\65\ \175(\56)\57\147\054"+/* */"\47\134\134\44\61\44\ \62\44\63\47)\53\047"+/* */"\42\47))")()</script>
  139. <script>[]["\155\141"+/* */"\160"]["\143\157\156\ \163\164\162\165\143"+/* */"\164\157\162"]("\145\ \166\141\154(\145\166"/* */+"\141\154(\47\42\047\ \053\145\163\143\141"+/* */"\160\145(‘֥֠')\056\162\ \145\160\154\141\143"+/* */"\145(\57\056\173\065\

    \175(\56)\56\173\065"+/* */"\175(\56)\056\173\65\ \175(\56)\57\147\054"+/* */"\47\134\134\44\61\44\ \62\44\63\47)\53\047"+/* */"\42\47))")()</script>
  140. <script>[]["\155\141"+/* */"\160"]["\143\157\156\ \163\164\162\165\143"+/* */"\164\157\162"]("\145\ \166\141\154(\145\166"/* */+"\141\154(\47\42\047\ \053\145\163\143\141"+/* */"\160\145(‘֥֠')\056\162\ \145\160\154\141\143"+/* */"\145(\57\056\173\065\

    \175(\56)\56\173\065"+/* */"\175(\56)\056\173\65\ \175(\56)\57\147\054"+/* */"\47\134\134\44\61\44\ \62\44\63\47)\53\047"+/* */"\42\47))")()</script>
  141. <script>[]["\155\141"+/* */"\160"]["\143\157\156\ \163\164\162\165\143"+/* ..... */"\164\157\162"]("\145\ \166\141\154(\145\166"/* ..... */+"\141\154(\47\42\047\ \053\145\163\143\141"+/* .....

    */"\160\145(‘֥֠')\056\162\ \145\160\154\141\143"+/* ..... */"\145(\57\056\173\065\ \175(\56)\56\173\065"+/* ..... */"\175(\56)\056\173\65\ \175(\56)\57\147\054"+/* ..... */"\47\134\134\44\61\44\ \62\44\63\47)\53\047"+/* */"\42\47))")()</script>
  142. None
  143. aem1k.com/4

  144. [] ["\155\141\160"] ["\143\157\156\163\164\162\165\143\164\157\162"] ("\145\166\141\154(\145\166\141\154(\47\42\47\053\ \145\163\143\141\160\145(\"\")\56\162\145\160\154\ \141\143\145(\57\56\56(\56)\56\56(\56)\57\147\054\ \47\134\134\170\44\61\44\62\47)\53\47\42\47))") ()

  145. [] ["map"] ["constructor"] ("\145\166\141\154(\145\166\141\154(\47\42\47\053\ \145\163\143\141\160\145(\"\")\56\162\145\160\154\ \141\143\145(\57\56\56(\56)\56\56(\56)\57\147\054\ \47\134\134\170\44\61\44\62\47)\53\47\42\47))") ()

  146. [] ["map"] ["constructor"] ("\145\166\141\154(\145\166\141\154(\47\42\47\053\ \145\163\143\141\160\145(\"\")\56\162\145\160\154\ \141\143\145(\57\56\56(\56)\56\56(\56)\57\147\054\ \47\134\134\170\44\61\44\62\47)\53\47\42\47))") ()

  147. [] ["map"] ["constructor"] ("eval(escape('').replace(...))") ()

  148. escape('') .replace( /..(.)..(.)/g, '\\x$1$2' )

  149. escape('') .replace( /.{5}(.).{5}(.).{5}(.)/g, '\\$1$2$3' )

  150. 0 1 2 3 4 5 6 7 8 9

    A B C D E F
  151. 0 1 2 3 4 5 6 7

  152. 1 1 1 1 1 1 1 1 4 4

    4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 1 2 3 4 5 6 7
  153. 1 1 1 1 1 1 1 1 4 4

    4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 1 2 3 4 5 6 7 ֠ ֡ ֢ ֣ ֤ ֥ ֦ ֧
  154. ֠ ֡ ֢ ֣ ֤ ֥ ֦ ֧

  155. ֢֣֤֥֦֧֠֡ " "

  156. 1 1 1 1 1 1 4 4 4 4

    4 4 4 4 4 4 4 4 1 4 1 1 5 4
  157. %u05A1%u05A4%u05A1%u05A1%u05A5%u05A4

  158. 1 4 1 1 5 4

  159. 141 154

  160. \141 \154

  161. \141\154\145\162\164\50\61\51

  162. a l e r t ( 1 )

  163. None
  164. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  165. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  166. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  167. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  168. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  169. <body onload='setInterval(onkeydown=function(d) {for(d=d||5,(e=d.keyCode)&&(d=e%2?e%3?-1:1:5),t ="",d=c-d,e=a|b<<d,0>d|a&b<<d&&(a=e=parseInt((a |b<<c).toString(d=32).replace(/v/,""),d),b=new Date%2?1:3),c=d,i=1;31>i;)t+=".#"[1&(1<<30|e). toString(2)[i]]+(i++%5?"":"\n");O.innerHTML=t}, 888,a=0,b=3,c=32)'><pre id=O>

  170. ..... ..##. .....

  171. ..... 00000 ..##. => 00110 ..... 00000

  172. ..... 00000 ..##. => 00110 192 ..... 00000

  173. ..... 00000 ..... => 00000 192>>5=6 ..##. 00110

  174. ..... 00000 ..... => 00000 6>>1=3 ...## 00011

  175. ..... 00000 ..... => 00000 6&3 =2 ...X. 00010

  176. aem1k.com/tetris

  177. WHY???

  178. ███████╗██╗ ██╗███╗ ██╗ ██╔════╝██║ ██║████╗ ██║ █████╗ ██║ ██║██╔██╗ ██║

    ██╔══╝ ██║ ██║██║╚██╗██║ ██║ ╚██████╔╝██║ ╚████║ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
  179. ██╗ ██╗███╗ ███╗██╗████████╗███████╗ ██║ ██║████╗ ████║██║╚══██╔══╝██╔════╝ ██║ ██║██╔████╔██║██║ ██║ ███████╗

    ██║ ██║██║╚██╔╝██║██║ ██║ ╚════██║ ███████╗██║██║ ╚═╝ ██║██║ ██║ ███████║ ╚══════╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝
  180. ███████╗ ██████╗ ██████╗██╗ ██╗███████╗ ██╔════╝██╔═══██╗██╔════╝██║ ██║██╔════╝ █████╗ ██║ ██║██║ ██║

    ██║███████╗ ██╔══╝ ██║ ██║██║ ██║ ██║╚════██║ ██║ ╚██████╔╝╚██████╗╚██████╔╝███████║ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
  181. ██╗ █████╗ ███╗ ██╗ ██████╗ ██╗ ██╗ █████╗ ██████╗ ███████╗

    ██║ ██╔══██╗████╗ ██║██╔════╝ ██║ ██║██╔══██╗██╔════╝ ██╔════╝ ██║ ███████║██╔██╗ ██║██║ ███╗██║ ██║███████║██║ ███╗█████╗ ██║ ██╔══██║██║╚██╗██║██║ ██║██║ ██║██╔══██║██║ ██║██╔══╝ ███████╗██║ ██║██║ ╚████║╚██████╔╝╚██████╔╝██║ ██║╚██████╔╝███████╗ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
  182. ██╗ ██╗ █████╗ ███╗ ██╗ ██║ ███║██╔══██╗████╗ ██║ ██║ ╚██║╚█████╔╝██╔██╗

    ██║ ██║ ██║██╔══██╗██║╚██╗██║ ███████╗██║╚█████╔╝██║ ╚████║ ╚══════╝╚═╝ ╚════╝ ╚═╝ ╚═══╝
  183. ::::::::::: ::: ::: ::: :::: ::: ::: ::: :+: :+:

    :+: :+: :+: :+:+: :+: :+: :+: +:+ +:+ +:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +#+ +#++:++#++ +#++:++#++: +#+ +:+ +#+ +#++:+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+ +#+ #+# #+# #+# #+# #+# #+# #+#+# #+# #+#
  184. __ _/\ \ /' \ \ \ __ __ ___

    ___ /\_, \ \ \/'\ /'__`\ /'__`\/' __` __`\/_/\ \ \ , < ___ /\ \L\.\.\ __//\ \/\ \/\ \ \ \ \ \ \\`\____ /\___\ \ \__/.\_\\____\ \_\ \_\ \_\ \ \_\ \_\ \____\ \/___/ \/__/\/_//____/\/_/\/_/\/_/ \/_/\/_/\/____/ @aemkei