1.1
Browse files- .gitattributes +1 -0
- d-framework/api.json +52 -0
- d-framework/icon/144/favicon.png +0 -0
- d-framework/icon/192/favicon.png +0 -0
- d-framework/icon/36/favicon.png +0 -0
- d-framework/icon/48/favicon.png +0 -0
- d-framework/icon/512/favicon.png +3 -0
- d-framework/icon/72/favicon.png +0 -0
- d-framework/icon/96/favicon.png +0 -0
- d-framework/screenshot/enzostvs-deepsite.hf.space.jpg +0 -0
- d-framework/screenshot/enzostvs-qwensite.hf.space.jpg +0 -0
- d-framework/screenshot/kexel-convert.static.hf.space.jpg +0 -0
- d-framework/screenshot/kexel-design.static.hf.space.jpg +0 -0
- d-framework/screenshot/kexel-mid.static.hf.space.jpg +0 -0
- d-framework/screenshot/kexel-mid.static.hf.spacek.jpg +0 -0
- d-framework/screenshot/kexel-speedtest.static.hf.space.jpg +0 -0
- d-framework/screenshot/not-lain-background-removal.hf.space.jpg +0 -0
- d-framework/screenshot/qwen-qwen3-demo.hf.space.jpg +0 -0
- d-framework/screenshot/thum.txt +1 -0
- index.html +344 -0
- manifest.json +66 -0
.gitattributes
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
d-framework/icon/512/favicon.png filter=lfs diff=lfs merge=lfs -text
|
d-framework/api.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"filename": "kexel-speedtest.static.hf.space/index.html",
|
| 4 |
+
"imgshot": "kexel-speedtest.static.hf.space.jpg",
|
| 5 |
+
"rating": 90
|
| 6 |
+
},
|
| 7 |
+
{
|
| 8 |
+
"filename": "kexel-convert.static.hf.space/index.html",
|
| 9 |
+
"imgshot": "kexel-convert.static.hf.space.jpg",
|
| 10 |
+
"rating": 90
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"filename": "kexel-mid.static.hf.space/play-midi.html",
|
| 14 |
+
"imgshot": "kexel-mid.static.hf.space.jpg",
|
| 15 |
+
"rating": 90
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"filename": "kexel-mid.static.hf.space/mid-to-wav.html",
|
| 19 |
+
"imgshot": "kexel-mid.static.hf.spacek.jpg",
|
| 20 |
+
"rating": 90
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"filename": "kexel-design.static.hf.space/index.html",
|
| 24 |
+
"imgshot": "kexel-design.static.hf.space.jpg",
|
| 25 |
+
"rating": 90
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"filename": "enzostvs-deepsite.hf.space/",
|
| 29 |
+
"imgshot": "enzostvs-deepsite.hf.space.jpg",
|
| 30 |
+
"rating": 90
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"filename": "enzostvs-qwensite.hf.space",
|
| 34 |
+
"imgshot": "enzostvs-qwensite.hf.space.jpg",
|
| 35 |
+
"rating": 90
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"filename": "not-lain-background-removal.hf.space",
|
| 39 |
+
"imgshot": "not-lain-background-removal.hf.space.jpg",
|
| 40 |
+
"rating": 90
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"filename": "qwen-qwen3-demo.hf.space",
|
| 44 |
+
"imgshot": "qwen-qwen3-demo.hf.space.jpg",
|
| 45 |
+
"rating": 90
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"filename": "kexel-gallery.static.hf.space",
|
| 49 |
+
"imgshot": "kexel-gallery.static.hf.space.jpg",
|
| 50 |
+
"rating": 10
|
| 51 |
+
}
|
| 52 |
+
]
|
d-framework/icon/144/favicon.png
ADDED
|
|
d-framework/icon/192/favicon.png
ADDED
|
|
d-framework/icon/36/favicon.png
ADDED
|
|
d-framework/icon/48/favicon.png
ADDED
|
|
d-framework/icon/512/favicon.png
ADDED
|
|
Git LFS Details
|
d-framework/icon/72/favicon.png
ADDED
|
|
d-framework/icon/96/favicon.png
ADDED
|
|
d-framework/screenshot/enzostvs-deepsite.hf.space.jpg
ADDED
|
d-framework/screenshot/enzostvs-qwensite.hf.space.jpg
ADDED
|
d-framework/screenshot/kexel-convert.static.hf.space.jpg
ADDED
|
d-framework/screenshot/kexel-design.static.hf.space.jpg
ADDED
|
d-framework/screenshot/kexel-mid.static.hf.space.jpg
ADDED
|
d-framework/screenshot/kexel-mid.static.hf.spacek.jpg
ADDED
|
d-framework/screenshot/kexel-speedtest.static.hf.space.jpg
ADDED
|
d-framework/screenshot/not-lain-background-removal.hf.space.jpg
ADDED
|
d-framework/screenshot/qwen-qwen3-demo.hf.space.jpg
ADDED
|
d-framework/screenshot/thum.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
https://image.thum.io/get/width/600/crop/700/maxAge/20/allowJPG/https://kexel-speedtest.static.hf.space/index.html?
|
index.html
ADDED
|
@@ -0,0 +1,344 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="pt-br">
|
| 3 |
+
|
| 4 |
+
<head>
|
| 5 |
+
<meta charset="UTF-8">
|
| 6 |
+
<title>KEXEL GALLERY</title>
|
| 7 |
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
| 8 |
+
<meta name="description" content="KEXEL GALLERY COM A BASE EM NAVEGADOR PARA PLATAFORMAS MODERNAS..." />
|
| 9 |
+
<meta name="mobile-web-app-capable" content="yes" />
|
| 10 |
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
| 11 |
+
<meta name="application-name" content="KEXEL GALLERY" />
|
| 12 |
+
<meta name="apple-mobile-web-app-title" content="KEXEL GALLERY" />
|
| 13 |
+
<meta name="msapplication-starturl" content="/?Installed=kexel" />
|
| 14 |
+
<meta name="theme-color" content="#602ab6" />
|
| 15 |
+
<meta name="msapplication-navbutton-color" content="#602ab6" />
|
| 16 |
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
| 17 |
+
<meta name="apple-touch-fullscreen" content="yes" />
|
| 18 |
+
<meta name="robots" content="index, follow" />
|
| 19 |
+
<meta name="googlebot" content="index, follow" />
|
| 20 |
+
<meta property="og:image" content="./d-framework/icon/icon/512/favicon.png" />
|
| 21 |
+
<link rel="icon" type="image/png" sizes="512x512" href="./d-framework/icon/512/favicon.png" />
|
| 22 |
+
<link rel="apple-touch-icon" type="image/png" sizes="512x512" href="./d-framework/icon/512/favicon.png" />
|
| 23 |
+
<link rel="icon" type="image/png" sizes="192x192" href="./d-framework/icon/192/favicon.png" />
|
| 24 |
+
<link rel="apple-touch-icon" type="image/png" sizes="192x192" href="./d-framework/icon/192/favicon.png" />
|
| 25 |
+
<link rel="icon" type="image/png" sizes="144x144" href="./d-framework/icon/144/favicon.png" />
|
| 26 |
+
<link rel="apple-touch-icon" type="image/png" sizes="144x144" href="./d-framework/icon/144/favicon.png" />
|
| 27 |
+
<link rel="icon" type="image/png" sizes="96x96" href="./d-framework/icon/96/favicon.png" />
|
| 28 |
+
<link rel="apple-touch-icon" type="image/png" sizes="96x96" href="./d-framework/icon/96/favicon.png" />
|
| 29 |
+
<link rel="icon" type="image/png" sizes="72x72" href="./d-framework/icon/72/favicon.png" />
|
| 30 |
+
<link rel="apple-touch-icon" type="image/png" sizes="72x72" href="./d-framework/icon/72/favicon.png" />
|
| 31 |
+
<link rel="icon" type="image/png" sizes="48x48" href="./d-framework/icon/48/favicon.png" />
|
| 32 |
+
<link rel="apple-touch-icon" type="image/png" sizes="48x48" href="./d-framework/icon/48/favicon.png" />
|
| 33 |
+
<link rel="icon" type="image/png" sizes="36x36" href="./d-framework/icon/36/favicon.png" />
|
| 34 |
+
<link rel="apple-touch-icon" type="image/png" sizes="36x36" href="./d-framework/icon/36/favicon.png" />
|
| 35 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css" />
|
| 36 |
+
<script src="https://cdn.jsdelivr.net/gh/davserv/d-framework@refs/heads/cdn.tailwindcss/tailwindcss.js"></script>
|
| 37 |
+
|
| 38 |
+
<script src="data:application/javascript;charset=utf-8;base64,dmFyIGNvbG9iZD0iIzJiMzAzNWM3Iixjb2xvbGlzPSIjNzI2ZDNiIixjb2xvdHh0PSIjZmZmOSIKZG9jdW1lbnQud3JpdGUoIjxzdHlsZT4ucGFjZXtwb2ludGVyLWV2ZW50czpub25lO3VzZXItc2VsZWN0Om5vbmU7ei1pbmRleDo5OTk5OTk5O3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7YmFja2dyb3VuZDoiK2NvbG9iZCsnO292ZXJmbG93OmhpZGRlbn0ucGFjZTo6YmVmb3Jle2NvbnRlbnQ6IkNBUlJFR0FORE8uLi4iO2NvbG9yOicrY29sb3R4dCsiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0NyU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpfS5wYWNlIC5wYWNlLXByb2dyZXNze2JveC1zaXppbmc6Ym9yZGVyLWJveDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MjAwMDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6NXB4O3dpZHRoOjEwMCU7YmFja2dyb3VuZDoiK2NvbG9saXMrIn0ucGFjZS5wYWNlLWluYWN0aXZle2Rpc3BsYXk6bm9uZX08L3N0eWxlPiIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByKCl7dGhpcy5wcm9ncmVzcz0wfWZ1bmN0aW9uIHMoKXt0aGlzLmJpbmRpbmdzPXt9fWZ1bmN0aW9uIG8oKXt2YXIgdCxlPXRoaXMKby5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5vcGVuCnJldHVybiB0Lm9wZW49ZnVuY3Rpb24ocixzLG8pe3JldHVybiBEKHIpJiZlLnRyaWdnZXIoInJlcXVlc3QiLHt0eXBlOnIsdXJsOnMscmVxdWVzdDp0fSksbi5hcHBseSh0LGFyZ3VtZW50cyl9fSx3aW5kb3cuWE1MSHR0cFJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bmV3IEsoZSksdChlKSxlfQp0cnl7Tyh3aW5kb3cuWE1MSHR0cFJlcXVlc3QsSyl9Y2F0Y2gobil7fWlmKG51bGwhPUope3dpbmRvdy5YRG9tYWluUmVxdWVzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBKCnJldHVybiB0KGUpLGV9CnRyeXtPKHdpbmRvdy5YRG9tYWluUmVxdWVzdCxKKX1jYXRjaChuKXt9fWlmKG51bGwhPUImJl8uYWpheC50cmFja1dlYlNvY2tldHMpe3dpbmRvdy5XZWJTb2NrZXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1udWxsIT1uP25ldyBCKHQsbik6bmV3IEIodCkKcmV0dXJuIEQoInNvY2tldCIpJiZlLnRyaWdnZXIoInJlcXVlc3QiLHt0eXBlOiJzb2NrZXQiLHVybDp0LHByb3RvY29sczpuLHJlcXVlc3Q6cn0pLHJ9CnRyeXtPKHdpbmRvdy5XZWJTb2NrZXQsQil9Y2F0Y2gobil7fX19ZnVuY3Rpb24gaSgpe3RoaXMuY29tcGxldGU9dCh0aGlzLmNvbXBsZXRlLHRoaXMpCnZhciBlPXRoaXMKdGhpcy5lbGVtZW50cz1bXSxBKCkub24oInJlcXVlc3QiLGZ1bmN0aW9uKCl7cmV0dXJuIGUud2F0Y2guYXBwbHkoZSxhcmd1bWVudHMpfSl9ZnVuY3Rpb24gYShlKXt2YXIgbixyLHMsbwpmb3IobnVsbD09ZSYmKGU9e30pLHRoaXMuY29tcGxldGU9dCh0aGlzLmNvbXBsZXRlLHRoaXMpLHRoaXMuZWxlbWVudHM9W10sbnVsbD09ZS5zZWxlY3RvcnMmJihlLnNlbGVjdG9ycz1bXSkscj0wLHM9KG89ZS5zZWxlY3RvcnMpLmxlbmd0aDtzPnI7cisrKW49b1tyXSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGcobix0aGlzLmNvbXBsZXRlKSl9ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbXBsZXRlQ2FsbGJhY2s9ZSx0aGlzLnByb2dyZXNzPTAsdGhpcy5jaGVjaygpfWZ1bmN0aW9uIGMoKXt2YXIgdCxlLG49dGhpcwp0aGlzLnByb2dyZXNzPW51bGwhPShlPXRoaXMuc3RhdGVzW2RvY3VtZW50LnJlYWR5U3RhdGVdKT9lOjEwMCx0PWRvY3VtZW50Lm9ucmVhZHlzdGF0ZWNoYW5nZSxkb2N1bWVudC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9bi5zdGF0ZXNbZG9jdW1lbnQucmVhZHlTdGF0ZV0mJihuLnByb2dyZXNzPW4uc3RhdGVzW2RvY3VtZW50LnJlYWR5U3RhdGVdKSwiZnVuY3Rpb24iPT10eXBlb2YgdD90LmFwcGx5KG51bGwsYXJndW1lbnRzKTp2b2lkIDB9fWZ1bmN0aW9uIGwodCl7dGhpcy5zb3VyY2U9dCx0aGlzLmxhc3Q9dGhpcy5zaW5jZUxhc3RVcGRhdGU9MCx0aGlzLnJhdGU9Xy5pbml0aWFsUmF0ZSx0aGlzLmNhdGNodXA9MCx0aGlzLnByb2dyZXNzPXRoaXMubGFzdFByb2dyZXNzPTAsbnVsbCE9dGhpcy5zb3VyY2UmJih0aGlzLnByb2dyZXNzPVUodGhpcy5zb3VyY2UsInByb2dyZXNzIikpfXZhciBwLGgsZyxmLGQsbSx5LHYsdyxiLGsseCxTLHEsTCxSLFAsVCxPLGosQSxFLEMsTSxOLF8sRixVLFcsWCx6LEQsSCxJLEcsQixKLEssUSxWLFksWiwkLHR0LGV0LG50PVtdLnNsaWNlLHJ0PXt9Lmhhc093blByb3BlcnR5LHN0PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHIgaW4gZSlydC5jYWxsKGUscikmJih0W3JdPWVbcl0pCnJldHVybiBuLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgbix0Ll9fc3VwZXJfXz1lLnByb3RvdHlwZSx0fSxvdD1bXS5pbmRleE9mfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXRoaXMubGVuZ3RoO24+ZTtlKyspaWYoZSBpbiB0aGlzJiZ0aGlzW2VdPT09dClyZXR1cm4gZQpyZXR1cm4tMX0KZm9yKFA9e2NsYXNzTmFtZToiIixjYXRjaHVwVGltZToxMDAsaW5pdGlhbFJhdGU6LjAzLG1pblRpbWU6MjUwLGdob3N0VGltZToxMDAsbWF4UHJvZ3Jlc3NQZXJGcmFtZToyMCxlYXNlRmFjdG9yOjEuMjUsc3RhcnRPblBhZ2VMb2FkOiEwLHJlc3RhcnRPblB1c2hTdGF0ZTohMCxyZXN0YXJ0T25SZXF1ZXN0QWZ0ZXI6NTAwLHRhcmdldDoiYm9keSIsZWxlbWVudHM6e2NoZWNrSW50ZXJ2YWw6MTAwLHNlbGVjdG9yczpbImJvZHkiXX0sZXZlbnRMYWc6e21pblNhbXBsZXM6MTAsc2FtcGxlQ291bnQ6MyxsYWdUaHJlc2hvbGQ6M30sYWpheDp7dHJhY2tNZXRob2RzOlsiR0VUIl0sdHJhY2tXZWJTb2NrZXRzOiEwLGlnbm9yZVVSTHM6W119fSxOPWZ1bmN0aW9uKCl7dmFyIHQKcmV0dXJuIG51bGwhPSh0PSJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJm51bGwhPT1wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZS5ub3coKTp2b2lkIDApP3Q6K25ldyBEYXRlfSxGPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxSPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lLGs9ZnVuY3Rpb24odCxlLG4pe3JldHVybigiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyP3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpOnZvaWQgMCl8fCh0WyJvbiIrZV09bil9LG51bGw9PUYmJihGPWZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsNTApfSxSPWZ1bmN0aW9uKHQpe3JldHVybiBjbGVhclRpbWVvdXQodCl9KSxXPWZ1bmN0aW9uKHQpe3ZhciBlPU4oKSxuPWZ1bmN0aW9uKCl7dmFyIHI9TigpLWUKcmV0dXJuIDMzPnI/c2V0VGltZW91dChuLDMzLXIpOihlPU4oKSx0KHIsZnVuY3Rpb24oKXtyZXR1cm4gRihuKX0pKX0KcmV0dXJuIG4oKX0sVT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXSxlPWFyZ3VtZW50c1sxXSxuPTM+YXJndW1lbnRzLmxlbmd0aD9bXTpudC5jYWxsKGFyZ3VtZW50cywyKQpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFtlXT90W2VdLmFwcGx5KHQsbik6dFtlXX0sVD1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scj1hcmd1bWVudHNbMF0scz0yPmFyZ3VtZW50cy5sZW5ndGg/W106bnQuY2FsbChhcmd1bWVudHMsMSksbz0wLGk9cy5sZW5ndGg7aT5vO28rKylpZihlPXNbb10pZm9yKHQgaW4gZSlydC5jYWxsKGUsdCkmJihuPWVbdF0sbnVsbCE9clt0XSYmIm9iamVjdCI9PXR5cGVvZiByW3RdJiZudWxsIT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/VChyW3RdLG4pOnJbdF09bikKcmV0dXJuIHJ9LFM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1lPTAscz0wLG89dC5sZW5ndGg7bz5zO3MrKyluPXRbc10scis9TWF0aC5hYnMobiksZSsrCnJldHVybiByL2V9LGo9ZnVuY3Rpb24odCxlKXt2YXIgbixyCmlmKG51bGw9PXQmJih0PSJvcHRpb25zIiksbnVsbD09ZSYmKGU9ITApLHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcGFjZS0iK3QrIl0iKSl7aWYobj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1wYWNlLSIrdCksIWUpcmV0dXJuIG4KdHJ5e3JldHVybiBKU09OLnBhcnNlKG4pfWNhdGNoKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmbnVsbCE9PWNvbnNvbGU/Y29uc29sZS5lcnJvcigiRXJyb3IgcGFyc2luZyBpbmxpbmUgcGFjZSBvcHRpb25zIix0KTp2b2lkIDB9fX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4scil7dmFyIHMKcmV0dXJuIG51bGw9PXImJihyPSExKSxudWxsPT10aGlzLmJpbmRpbmdzJiYodGhpcy5iaW5kaW5ncz17fSksbnVsbD09KHM9dGhpcy5iaW5kaW5ncylbdF0mJihzW3RdPVtdKSx0aGlzLmJpbmRpbmdzW3RdLnB1c2goe2hhbmRsZXI6ZSxjdHg6bixvbmNlOnJ9KX0sZS5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMub24odCxlLG4sITApfSxlLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXt2YXIgbixyLHMKaWYobnVsbCE9KG51bGwhPShyPXRoaXMuYmluZGluZ3MpP3JbdF06dm9pZCAwKSl7aWYobnVsbD09ZSlyZXR1cm4gZGVsZXRlIHRoaXMuYmluZGluZ3NbdF0KZm9yKG49MCxzPVtdO248dGhpcy5iaW5kaW5nc1t0XS5sZW5ndGg7KXRoaXMuYmluZGluZ3NbdF1bbl0uaGFuZGxlcj09PWU/cy5wdXNoKHRoaXMuYmluZGluZ3NbdF0uc3BsaWNlKG4sMSkpOnMucHVzaChuKyspCnJldHVybiBzfX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLHMsbyxpPWFyZ3VtZW50c1swXSxhPTI+YXJndW1lbnRzLmxlbmd0aD9bXTpudC5jYWxsKGFyZ3VtZW50cywxKQppZihudWxsIT0ocj10aGlzLmJpbmRpbmdzKSYmcltpXSl7Zm9yKG49MCxvPVtdO248dGhpcy5iaW5kaW5nc1tpXS5sZW5ndGg7KWU9KHM9dGhpcy5iaW5kaW5nc1tpXVtuXSkuaGFuZGxlcix0PXMuY3R4LHM9cy5vbmNlLGUuYXBwbHkobnVsbCE9dD90OnRoaXMsYSkscz9vLnB1c2godGhpcy5iaW5kaW5nc1tpXS5zcGxpY2UobiwxKSk6by5wdXNoKG4rKykKcmV0dXJuIG99fSxldD1lLGQ9d2luZG93LlBhY2V8fHt9LHdpbmRvdy5QYWNlPWQsVChkLGV0LnByb3RvdHlwZSksXz1kLm9wdGlvbnM9VCh7fSxQLHdpbmRvdy5wYWNlT3B0aW9ucyxqKCkpLFE9MCxZPSgkPVsiYWpheCIsImRvY3VtZW50IiwiZXZlbnRMYWciLCJlbGVtZW50cyJdKS5sZW5ndGg7WT5RO1ErKykhMD09PV9bSD0kW1FdXSYmKF9bSF09UFtIXSkKZXQ9RXJyb3Isc3QobixldCksZj1uLHIucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlCmlmKG51bGw9PXRoaXMuZWwpe2lmKCEodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKF8udGFyZ2V0KSkpdGhyb3cgbmV3IGYKdGhpcy5lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsLmNsYXNzTmFtZT0icGFjZSBwYWNlLWFjdGl2ZSIsZG9jdW1lbnQuYm9keS5jbGFzc05hbWU9ZG9jdW1lbnQuYm9keS5jbGFzc05hbWUucmVwbGFjZSgvKHBhY2UtZG9uZSApfC8sInBhY2UtcnVubmluZyAiKSxlPSIiIT09Xy5jbGFzc05hbWU/IiAiK18uY2xhc3NOYW1lOiIiLHRoaXMuZWwuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYWNlLXByb2dyZXNzJytlKyciPjxkaXYgY2xhc3M9InBhY2UtcHJvZ3Jlc3MtaW5uZXIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhY2UtYWN0aXZpdHkiPjwvZGl2PicsbnVsbCE9dC5maXJzdENoaWxkP3QuaW5zZXJ0QmVmb3JlKHRoaXMuZWwsdC5maXJzdENoaWxkKTp0LmFwcGVuZENoaWxkKHRoaXMuZWwpfXJldHVybiB0aGlzLmVsfSxyLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEVsZW1lbnQoKQpyZXR1cm4gdC5jbGFzc05hbWU9dC5jbGFzc05hbWUucmVwbGFjZSgicGFjZS1hY3RpdmUiLCJwYWNlLWluYWN0aXZlIiksZG9jdW1lbnQuYm9keS5jbGFzc05hbWU9ZG9jdW1lbnQuYm9keS5jbGFzc05hbWUucmVwbGFjZSgicGFjZS1ydW5uaW5nICIsInBhY2UtZG9uZSAiKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyZXNzPXQsZC50cmlnZ2VyKCJwcm9ncmVzcyIsdCksdGhpcy5yZW5kZXIoKX0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RyeXt0aGlzLmdldEVsZW1lbnQoKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZ2V0RWxlbWVudCgpKX1jYXRjaCh0KXtmPXR9cmV0dXJuIHRoaXMuZWw9dm9pZCAwfSxyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixzLG8saQppZihudWxsPT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKF8udGFyZ2V0KSlyZXR1cm4hMQpmb3IodD10aGlzLmdldEVsZW1lbnQoKSxyPSJ0cmFuc2xhdGUzZCgiK3RoaXMucHJvZ3Jlc3MrIiUsIDAsIDApIixzPTAsbz0oaT1bIndlYmtpdFRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIiwidHJhbnNmb3JtIl0pLmxlbmd0aDtvPnM7cysrKWU9aVtzXSx0LmNoaWxkcmVuWzBdLnN0eWxlW2VdPXIKcmV0dXJuKCF0aGlzLmxhc3RSZW5kZXJlZFByb2dyZXNzfHx0aGlzLmxhc3RSZW5kZXJlZFByb2dyZXNzfDAhPT10aGlzLnByb2dyZXNzfDApJiYodC5jaGlsZHJlblswXS5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvZ3Jlc3MtdGV4dCIsKDB8dGhpcy5wcm9ncmVzcykrIiUiKSwxMDA+dGhpcy5wcm9ncmVzcz8obj10aGlzLnByb2dyZXNzPDEwPyIwIjoiIixuKz0wfHRoaXMucHJvZ3Jlc3MpOm49Ijk5Iix0LmNoaWxkcmVuWzBdLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9ncmVzcyIsIiIrbikpLGQudHJpZ2dlcigiY2hhbmdlIix0aGlzLnByb2dyZXNzKSx0aGlzLmxhc3RSZW5kZXJlZFByb2dyZXNzPXRoaXMucHJvZ3Jlc3N9LHIucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gMTAwPD10aGlzLnByb2dyZXNzfSxoPXIscy5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuLHIscyxvLGkKaWYobnVsbCE9dGhpcy5iaW5kaW5nc1t0XSl7Zm9yKGk9W10scj0wLHM9KG89dGhpcy5iaW5kaW5nc1t0XSkubGVuZ3RoO3M+cjtyKyspbj1vW3JdLGkucHVzaChuLmNhbGwodGhpcyxlKSkKcmV0dXJuIGl9fSxzLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciBuCnJldHVybiBudWxsPT0obj10aGlzLmJpbmRpbmdzKVt0XSYmKG5bdF09W10pLHRoaXMuYmluZGluZ3NbdF0ucHVzaChlKX0saj1zLEs9d2luZG93LlhNTEh0dHBSZXF1ZXN0LEo9d2luZG93LlhEb21haW5SZXF1ZXN0LEI9d2luZG93LldlYlNvY2tldCxPPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1bXQpmb3IobiBpbiBlLnByb3RvdHlwZSl0cnl7bnVsbD09dFtuXSYmImZ1bmN0aW9uIiE9dHlwZW9mIGVbbl0/ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9yLnB1c2goT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7Z2V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZVt0XX19KG4pLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSkpOnIucHVzaCh0W25dPWUucHJvdG90eXBlW25dKTpyLnB1c2godm9pZCAwKX1jYXRjaCh0KXt9cmV0dXJuIHJ9LEM9W10sZC5pZ25vcmU9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT0yPmFyZ3VtZW50cy5sZW5ndGg/W106bnQuY2FsbChhcmd1bWVudHMsMSkKcmV0dXJuIEMudW5zaGlmdCgiaWdub3JlIiksZT10LmFwcGx5KG51bGwsZSksQy5zaGlmdCgpLGV9LGQudHJhY2s9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT0yPmFyZ3VtZW50cy5sZW5ndGg/W106bnQuY2FsbChhcmd1bWVudHMsMSkKcmV0dXJuIEMudW5zaGlmdCgidHJhY2siKSxlPXQuYXBwbHkobnVsbCxlKSxDLnNoaWZ0KCksZX0sRD1mdW5jdGlvbih0KXtpZihudWxsPT10JiYodD0iR0VUIiksInRyYWNrIj09PUNbMF0pcmV0dXJuImZvcmNlIgppZighQy5sZW5ndGgmJl8uYWpheCl7aWYoInNvY2tldCI9PT10JiZfLmFqYXgudHJhY2tXZWJTb2NrZXRzKXJldHVybiEwCmlmKHQ9dC50b1VwcGVyQ2FzZSgpLDA8PW90LmNhbGwoXy5hamF4LnRyYWNrTWV0aG9kcyx0KSlyZXR1cm4hMH1yZXR1cm4hMX0sc3QobyxqKSxtPW8sVj1udWxsLHo9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49Xy5hamF4Lmlnbm9yZVVSTHMscj0wLHM9bi5sZW5ndGg7cz5yO3IrKylpZigic3RyaW5nIj09dHlwZW9mKGU9bltyXSkpe2lmKC0xIT09dC5pbmRleE9mKGUpKXJldHVybiEwfWVsc2UgaWYoZS50ZXN0KHQpKXJldHVybiEwCnJldHVybiExfSwoQT1mdW5jdGlvbigpe3JldHVybiBudWxsPT1WJiYoVj1uZXcgbSksVn0pKCkub24oInJlcXVlc3QiLGZ1bmN0aW9uKHQpe3ZhciBlLG49dC50eXBlLHI9dC5yZXF1ZXN0LHM9dC51cmwKcmV0dXJuIHoocyk/dm9pZCAwOmQucnVubmluZ3x8ITE9PT1fLnJlc3RhcnRPblJlcXVlc3RBZnRlciYmImZvcmNlIiE9PUQobik/dm9pZCAwOihlPWFyZ3VtZW50cywiYm9vbGVhbiI9PXR5cGVvZihzPV8ucmVzdGFydE9uUmVxdWVzdEFmdGVyfHwwKSYmKHM9MCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0LHMsbyxpLGE9InNvY2tldCI9PT1uP3IucmVhZHlTdGF0ZTwxOjA8KGE9ci5yZWFkeVN0YXRlKSYmND5hCmlmKGEpe2ZvcihkLnJlc3RhcnQoKSxpPVtdLHQ9MCxzPShvPWQuc291cmNlcykubGVuZ3RoO3M+dDt0Kyspe2lmKChIPW9bdF0paW5zdGFuY2VvZiBwKXtILndhdGNoLmFwcGx5KEgsZSkKYnJlYWt9aS5wdXNoKHZvaWQgMCl9cmV0dXJuIGl9fSxzKSl9KSxpLnByb3RvdHlwZS53YXRjaD1mdW5jdGlvbih0KXt2YXIgZT10LnR5cGUsbj10LnJlcXVlc3QsdD10LnVybApyZXR1cm4geih0KT92b2lkIDA6KG49bmV3KCJzb2NrZXQiPT09ZT93OmIpKG4sdGhpcy5jb21wbGV0ZSksdGhpcy5lbGVtZW50cy5wdXNoKG4pKX0saS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWxlbWVudHM9dGhpcy5lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSl9LHA9aSxiPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixzLG8saT10aGlzCmlmKHRoaXMucHJvZ3Jlc3M9MCxudWxsIT13aW5kb3cuUHJvZ3Jlc3NFdmVudClmb3Ioayh0LCJwcm9ncmVzcyIsZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoQ29tcHV0YWJsZT9pLnByb2dyZXNzPTEwMCp0LmxvYWRlZC90LnRvdGFsOmkucHJvZ3Jlc3M9aS5wcm9ncmVzcysoMTAwLWkucHJvZ3Jlc3MpLzJ9KSxuPTAscj0obz1bImxvYWQiLCJhYm9ydCIsInRpbWVvdXQiLCJlcnJvciJdKS5sZW5ndGg7cj5uO24rKylrKHQsb1tuXSxmdW5jdGlvbigpe3JldHVybiBlKGkpLGkucHJvZ3Jlc3M9MTAwfSkKZWxzZSBzPXQub25yZWFkeXN0YXRlY2hhbmdlLHQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dmFyIG4KcmV0dXJuIDA9PT0obj10LnJlYWR5U3RhdGUpfHw0PT09bj8oZShpKSxpLnByb2dyZXNzPTEwMCk6Mz09PXQucmVhZHlTdGF0ZSYmKGkucHJvZ3Jlc3M9NTApLCJmdW5jdGlvbiI9PXR5cGVvZiBzP3MuYXBwbHkobnVsbCxhcmd1bWVudHMpOnZvaWQgMH19LHc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj10aGlzLHM9dGhpcy5wcm9ncmVzcz0wLG89KG49WyJlcnJvciIsIm9wZW4iXSkubGVuZ3RoO28+cztzKyspayh0LG5bc10sZnVuY3Rpb24oKXtyZXR1cm4gZShyKSxyLnByb2dyZXNzPTEwMH0pfSxhLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbGVtZW50cz10aGlzLmVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KX0sZXQ9YSx1LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMKcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5zZWxlY3Rvcik/dGhpcy5kb25lKCk6c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0LmNoZWNrKCl9LF8uZWxlbWVudHMuY2hlY2tJbnRlcnZhbCl9LHUucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wbGV0ZUNhbGxiYWNrKHRoaXMpLHRoaXMuY29tcGxldGVDYWxsYmFjaz1udWxsLHRoaXMucHJvZ3Jlc3M9MTAwfSxnPXUsYy5wcm90b3R5cGUuc3RhdGVzPXtsb2FkaW5nOjAsaW50ZXJhY3RpdmU6NTAsY29tcGxldGU6MTAwfSxzdD1jLGo9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixzLG89dGhpcwp0aGlzLnByb2dyZXNzPTAscz1bXSxyPTAsbj1OKCksZT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciBpPU4oKS1uLTUwCnJldHVybiBuPU4oKSxzLnB1c2goaSkscy5sZW5ndGg+Xy5ldmVudExhZy5zYW1wbGVDb3VudCYmcy5zaGlmdCgpLHQ9UyhzKSwrK3I+PV8uZXZlbnRMYWcubWluU2FtcGxlcyYmdDxfLmV2ZW50TGFnLmxhZ1RocmVzaG9sZD8oby5wcm9ncmVzcz0xMDAsY2xlYXJJbnRlcnZhbChlKSk6by5wcm9ncmVzcz0zLyh0KzMpKjEwMH0sNTApfSxsLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWUmJihlPVUodGhpcy5zb3VyY2UsInByb2dyZXNzIikpLGU+PTEwMCYmKHRoaXMuZG9uZT0hMCksZT09PXRoaXMubGFzdD90aGlzLnNpbmNlTGFzdFVwZGF0ZSs9dDoodGhpcy5zaW5jZUxhc3RVcGRhdGUmJih0aGlzLnJhdGU9KGUtdGhpcy5sYXN0KS90aGlzLnNpbmNlTGFzdFVwZGF0ZSksdGhpcy5jYXRjaHVwPShlLXRoaXMucHJvZ3Jlc3MpL18uY2F0Y2h1cFRpbWUsdGhpcy5zaW5jZUxhc3RVcGRhdGU9MCx0aGlzLmxhc3Q9ZSksZT50aGlzLnByb2dyZXNzJiYodGhpcy5wcm9ncmVzcys9dGhpcy5jYXRjaHVwKnQpLGU9MS1NYXRoLnBvdyh0aGlzLnByb2dyZXNzLzEwMCxfLmVhc2VGYWN0b3IpLHRoaXMucHJvZ3Jlc3MrPWUqdGhpcy5yYXRlKnQsdGhpcy5wcm9ncmVzcz1NYXRoLm1pbih0aGlzLmxhc3RQcm9ncmVzcytfLm1heFByb2dyZXNzUGVyRnJhbWUsdGhpcy5wcm9ncmVzcyksdGhpcy5wcm9ncmVzcz1NYXRoLm1heCgwLHRoaXMucHJvZ3Jlc3MpLHRoaXMucHJvZ3Jlc3M9TWF0aC5taW4oMTAwLHRoaXMucHJvZ3Jlc3MpLHRoaXMubGFzdFByb2dyZXNzPXRoaXMucHJvZ3Jlc3MsdGhpcy5wcm9ncmVzc30sdj1sLEw9eD1HPXE9WD1JPW51bGwsZC5ydW5uaW5nPSExLEU9ZnVuY3Rpb24oKXtyZXR1cm4gXy5yZXN0YXJ0T25QdXNoU3RhdGU/ZC5yZXN0YXJ0KCk6dm9pZCAwfSxudWxsIT13aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUmJihaPXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSx3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gRSgpLFouYXBwbHkod2luZG93Lmhpc3RvcnksYXJndW1lbnRzKX0pLG51bGwhPXdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSYmKHR0PXdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gRSgpLHR0LmFwcGx5KHdpbmRvdy5oaXN0b3J5LGFyZ3VtZW50cyl9KSx5PXthamF4OnAsZWxlbWVudHM6ZXQsZG9jdW1lbnQ6c3QsZXZlbnRMYWc6an0sKE09ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixzLG8saSxhCmZvcihkLnNvdXJjZXM9ST1bXSxlPTAscj0obz1bImFqYXgiLCJlbGVtZW50cyIsImRvY3VtZW50IiwiZXZlbnRMYWciXSkubGVuZ3RoO3I+ZTtlKyspITEhPT1fW3Q9b1tlXV0mJkkucHVzaChuZXcgeVt0XShfW3RdKSkKZm9yKG49MCxzPShhPW51bGwhPShpPV8uZXh0cmFTb3VyY2VzKT9pOltdKS5sZW5ndGg7cz5uO24rKylIPWFbbl0sSS5wdXNoKG5ldyBIKF8pKQpyZXR1cm4gZC5iYXI9cT1uZXcgaCxYPVtdLEc9bmV3IHZ9KSgpLGQuc3RvcD1mdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXIoInN0b3AiKSxkLnJ1bm5pbmc9ITEscS5kZXN0cm95KCksTD0hMCxudWxsIT14JiYoImZ1bmN0aW9uIj09dHlwZW9mIFImJlIoeCkseD1udWxsKSxNKCl9LGQucmVzdGFydD1mdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXIoInJlc3RhcnQiKSxkLnN0b3AoKSxkLnN0YXJ0KCl9LGQuZ289ZnVuY3Rpb24oKXt2YXIgdApyZXR1cm4gZC5ydW5uaW5nPSEwLHEucmVuZGVyKCksdD1OKCksTD0hMSx4PVcoZnVuY3Rpb24oZSxuKXtxLnByb2dyZXNzCmZvcih2YXIgcixzLG8saSxhLHUsYyxsLHAsaCxnPXU9MCxmPSEwLG09Yz0wLHk9SS5sZW5ndGg7eT5jO209KytjKWZvcihIPUlbbV0sYT1udWxsIT1YW21dP1hbbV06WFttXT1bXSxvPWw9MCxwPShzPW51bGwhPShoPUguZWxlbWVudHMpP2g6W0hdKS5sZW5ndGg7cD5sO289KytsKWk9c1tvXSxmJj0oaT1udWxsIT1hW29dP2Fbb106YVtvXT1uZXcgdihpKSkuZG9uZSxpLmRvbmV8fChnKyssdSs9aS50aWNrKGUpKQpyZXR1cm4gcj11L2cscS51cGRhdGUoRy50aWNrKGUscikpLHEuZG9uZSgpfHxmfHxMPyhxLnVwZGF0ZSgxMDApLGQudHJpZ2dlcigiZG9uZSIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcS5maW5pc2goKSxkLnJ1bm5pbmc9ITEsZC50cmlnZ2VyKCJoaWRlIil9LE1hdGgubWF4KF8uZ2hvc3RUaW1lLE1hdGgubWF4KF8ubWluVGltZS0oTigpLXQpLDApKSkpOm4oKX0pfSxkLnN0YXJ0PWZ1bmN0aW9uKHQpe1QoXyx0KSxkLnJ1bm5pbmc9ITAKdHJ5e3EucmVuZGVyKCl9Y2F0Y2godCl7Zj10fXJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucGFjZSIpPyhkLnRyaWdnZXIoInN0YXJ0IiksZC5nbygpKTpzZXRUaW1lb3V0KGQuc3RhcnQsNTApfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShmdW5jdGlvbigpe3JldHVybiBkfSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWQ6Xy5zdGFydE9uUGFnZUxvYWQmJmQuc3RhcnQoKX0uY2FsbCh0aGlzKQ"></script>
|
| 39 |
+
|
| 40 |
+
<script> if (navigator.serviceWorker) { navigator.serviceWorker.register } </script>
|
| 41 |
+
<link rel="manifest" href="./manifest.json" />
|
| 42 |
+
|
| 43 |
+
<style>
|
| 44 |
+
.boxdbshadow {
|
| 45 |
+
box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28) !important;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.bg-hover:hover,
|
| 49 |
+
.bg-hover:focus,
|
| 50 |
+
.bg-hover:active,
|
| 51 |
+
.bg-hover:target {
|
| 52 |
+
opacity: 0.45 !important;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
html,
|
| 56 |
+
body {
|
| 57 |
+
height: 100%;
|
| 58 |
+
margin: 0;
|
| 59 |
+
padding: 0;
|
| 60 |
+
background-color: #1a202c;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
.grid-item {
|
| 64 |
+
border-radius: 12px;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
.grid-item:hover {
|
| 68 |
+
filter: brightness(1.2);
|
| 69 |
+
}
|
| 70 |
+
</style>
|
| 71 |
+
</head>
|
| 72 |
+
|
| 73 |
+
<body class="bg-gray-900 text-gray-100">
|
| 74 |
+
|
| 75 |
+
<!-- MENU -->
|
| 76 |
+
<div class="fixed top-0 left-0 z-50 w-72 h-screen bg-gray-800 text-white transform -translate-x-full transition-transform duration-300 ease-in-out"
|
| 77 |
+
id="offcanvasmenu" aria-labelledby="offcanvasmenuLabel">
|
| 78 |
+
<div class="flex justify-between items-center p-4 shadow-xl bg-gray-800">
|
| 79 |
+
<h5 class="text-lg font-bold flex items-center" id="offcanvasmenuLabel">
|
| 80 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-3" fill="none" viewBox="0 0 24 24"
|
| 81 |
+
stroke="currentColor">
|
| 82 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7">
|
| 83 |
+
</path>
|
| 84 |
+
</svg>
|
| 85 |
+
MENU
|
| 86 |
+
</h5>
|
| 87 |
+
<button type="button" class="text-white hover:text-gray-400"
|
| 88 |
+
onclick="document.getElementById('offcanvasmenu').classList.add('-translate-x-full')">
|
| 89 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24"
|
| 90 |
+
stroke="currentColor">
|
| 91 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">
|
| 92 |
+
</path>
|
| 93 |
+
</svg>
|
| 94 |
+
</button>
|
| 95 |
+
</div>
|
| 96 |
+
<div class="p-4 overflow-y-auto">
|
| 97 |
+
<div class="text-sm font-light uppercase">
|
| 98 |
+
❝ Aplicativos para várias plataformas by Developer Davidsonbpe.❞
|
| 99 |
+
</div>
|
| 100 |
+
<hr class="my-4 border-gray-700">
|
| 101 |
+
<div class="space-y-2">
|
| 102 |
+
|
| 103 |
+
<button onclick="window.open('https://huggingface.co/KEXEL')"
|
| 104 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 105 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 106 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 107 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 108 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 109 |
+
</svg>
|
| 110 |
+
HuggingFace
|
| 111 |
+
</button>
|
| 112 |
+
|
| 113 |
+
<button onclick="window.open('https://github.com/davidsonbpe')"
|
| 114 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 115 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 116 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 117 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 118 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 119 |
+
</svg>
|
| 120 |
+
GitHub
|
| 121 |
+
</button>
|
| 122 |
+
<button onclick="window.open('https://codepen.io/davidsonbpe')"
|
| 123 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 124 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 125 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 126 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 127 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 128 |
+
</svg>
|
| 129 |
+
CodePen
|
| 130 |
+
</button>
|
| 131 |
+
<button onclick="window.open('https://pag.ae/7Y3uUnhg8')"
|
| 132 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 133 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 134 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 135 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 136 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 137 |
+
</svg>
|
| 138 |
+
Doar com
|
| 139 |
+
</button>
|
| 140 |
+
<button
|
| 141 |
+
onclick="alert(document.title + ' | ' + document.querySelector('meta[name=description]').getAttribute('content'))"
|
| 142 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 143 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 144 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 145 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 146 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 147 |
+
</svg>
|
| 148 |
+
Informar
|
| 149 |
+
</button>
|
| 150 |
+
<button onclick="window.open('https://davidsonbpe.blogspot.com/')"
|
| 151 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 152 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 153 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 154 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 155 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 156 |
+
</svg>
|
| 157 |
+
Developer
|
| 158 |
+
</button>
|
| 159 |
+
<button onclick="sharesbutton()"
|
| 160 |
+
class="w-full py-2 px-4 bg-gray-700 hover:bg-gray-600 text-left text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 161 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block mr-3" fill="none"
|
| 162 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
| 163 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 164 |
+
d="M4 6h16M4 12h16m-7 6h7"></path>
|
| 165 |
+
</svg>
|
| 166 |
+
Compartilhar
|
| 167 |
+
</button>
|
| 168 |
+
</div>
|
| 169 |
+
</div>
|
| 170 |
+
<div class="p-4 border-t border-gray-700 absolute bottom-0 w-full inset-shadow-sm">
|
| 171 |
+
<button onclick="document.getElementById('offcanvasmenu').classList.add('-translate-x-full')"
|
| 172 |
+
class="float-right py-2 px-4 bg-gray-700 hover:bg-gray-600 text-sm uppercase text-gray-400 rounded-none opacity-75 shadow">
|
| 173 |
+
Sair
|
| 174 |
+
</button>
|
| 175 |
+
</div>
|
| 176 |
+
</div>
|
| 177 |
+
|
| 178 |
+
<div class="fixed top-0 left-0 z-40 w-full flex items-center bg-gray-800 text-white boxdbshadow">
|
| 179 |
+
<img src="./d-framework/icon/192/favicon.png"
|
| 180 |
+
alt="Menu" class="w-14 h-14 cursor-pointer hover:bg-gray-700 bg-gray-600"
|
| 181 |
+
onclick="document.getElementById('offcanvasmenu').classList.remove('-translate-x-full')" />
|
| 182 |
+
<div class="flex-grow">
|
| 183 |
+
<select id="mySelects"
|
| 184 |
+
class="w-full py-2 px-4 bg-gray-800 text-white text-xl uppercase border-none focus:outline-none font-sans truncate bg-hover">
|
| 185 |
+
<option value="javascript:location.reload();">KEXEL GALLERY</option>
|
| 186 |
+
<option value="javascript:sharesbutton();">COMPARTILHAR</option>
|
| 187 |
+
<option value="javascript:window.open('https://dpripol.pages.dev/?='+document.title+'');">PRIVACY POLICY
|
| 188 |
+
</option>
|
| 189 |
+
<option value="javascript:window.open('https://pag.ae/7Y3uUnhg8');">DOAR COM</option>
|
| 190 |
+
</select>
|
| 191 |
+
</div>
|
| 192 |
+
<button onclick="sharesbutton()"
|
| 193 |
+
class="py-2 px-4 bg-gray-800 hover:bg-gray-700 text-yellow-500 text-xl border-l border-gray-700">
|
| 194 |
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" height="24px" viewBox="0 0 24 24" width="24px"
|
| 195 |
+
fill="#31c214">
|
| 196 |
+
<path d="M0 0h24v24H0z" fill="none" />
|
| 197 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
| 198 |
+
d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z" />
|
| 199 |
+
</svg>
|
| 200 |
+
</button>
|
| 201 |
+
</div>
|
| 202 |
+
|
| 203 |
+
<div class="container mt-14"></div>
|
| 204 |
+
|
| 205 |
+
<div id="screenshot-grid" class="grid grid-cols-2 sm:grid-cols-3 2xl:grid-cols-4 gap-2 p-4">
|
| 206 |
+
</div>
|
| 207 |
+
|
| 208 |
+
<div class="flex-grow container mx-auto px-4 py-8">
|
| 209 |
+
|
| 210 |
+
<div class="max-w-3xl mx-auto bg-white rounded-xl shadow-md overflow-hidden p-6 mt-8">
|
| 211 |
+
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
| 212 |
+
<p class="text-lg md:text-xl font-medium text-gray-800">
|
| 213 |
+
<i class="fas fa-shield-alt text-emerald-500 mr-2"></i>
|
| 214 |
+
Política de privacidade para usar nosso Serviço e as escolhas que você tem associado!
|
| 215 |
+
</p>
|
| 216 |
+
<button onclick="javascript:window.open('https://dpripol.pages.dev/?='+document.title+'')"
|
| 217 |
+
title="PRIVACY POLICY"
|
| 218 |
+
class="btn-hover-effect btn-active-effect transition-all duration-300 bg-emerald-500 hover:bg-emerald-600 text-white font-semibold px-8 py-3 rounded-full shadow-md focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50">
|
| 219 |
+
<i class="fas fa-lock-open mr-2"></i>
|
| 220 |
+
PRIVACY POLICY
|
| 221 |
+
</button>
|
| 222 |
+
</div>
|
| 223 |
+
</div>
|
| 224 |
+
</div>
|
| 225 |
+
|
| 226 |
+
<footer class="bg-white shadow-sm py-4 mt-2">
|
| 227 |
+
<div class="container mx-auto px-4 text-center text-gray-500 text-sm uppercase">
|
| 228 |
+
<p>© <span id="datacedencer">2009</span> KEXEL GALLERY | Todos os direitos reservados</p>
|
| 229 |
+
</div>
|
| 230 |
+
</footer>
|
| 231 |
+
|
| 232 |
+
<script>
|
| 233 |
+
async function loadScreenshots() {
|
| 234 |
+
try {
|
| 235 |
+
const response = await fetch('d-framework/api.json');
|
| 236 |
+
if (!response.ok) {
|
| 237 |
+
throw new Error(`HTTP error! status: ${response.status}`);
|
| 238 |
+
}
|
| 239 |
+
// Read the JSON body ONCE
|
| 240 |
+
const screenshotsData = await response.json();
|
| 241 |
+
|
| 242 |
+
const grid = document.getElementById('screenshot-grid');
|
| 243 |
+
grid.innerHTML = ''; // Clear existing content
|
| 244 |
+
const fragment = document.createDocumentFragment(); // Create a fragment
|
| 245 |
+
|
| 246 |
+
// No need to filter/sort here, assuming screenshots.json is already sorted and correct
|
| 247 |
+
if (!Array.isArray(screenshotsData)) {
|
| 248 |
+
throw new Error("screenshots.json is not a valid array.");
|
| 249 |
+
}
|
| 250 |
+
|
| 251 |
+
// Build elements in the fragment
|
| 252 |
+
screenshotsData.forEach(item => {
|
| 253 |
+
if (!item || typeof item.filename !== 'string' || !item.imgshot) {
|
| 254 |
+
console.warn("Skipping invalid item in screenshots.json:", item);
|
| 255 |
+
return;
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
// --- Filter by rating ---
|
| 259 |
+
if (typeof item.rating !== 'number' || item.rating < 50) {
|
| 260 |
+
// console.log(`Skipping ${item.filename} due to rating: ${item.rating}`);
|
| 261 |
+
return; // Skip items with rating below 50 or invalid rating
|
| 262 |
+
}
|
| 263 |
+
// --- End filter ---
|
| 264 |
+
|
| 265 |
+
const filename = item.filename;
|
| 266 |
+
const imgshot = item.imgshot;
|
| 267 |
+
// const rating = item.rating; // Rating is available if needed for display
|
| 268 |
+
|
| 269 |
+
const gridItem = document.createElement('div');
|
| 270 |
+
gridItem.className = 'grid-item relative'; // Added relative for potential badge positioning
|
| 271 |
+
|
| 272 |
+
const img = document.createElement('img');
|
| 273 |
+
img.src = `d-framework/screenshot/${imgshot}`;
|
| 274 |
+
//img.src = `https://image.thum.io/get/width/500/crop/800/maxAge/20/allowJPG/https://${filename}`;
|
| 275 |
+
//img.src = `https://image.thum.io/get/width/500/crop/800/maxAge/20/allowJPG/https://${filename}.static.hf.space/${imgshot}`;
|
| 276 |
+
img.loading = 'lazy'; // Lazy load images
|
| 277 |
+
img.decoding = 'async'; // Hint for async decoding
|
| 278 |
+
img.className = 'w-full h-auto object-cover rounded-lg shadow-md'; // Added some styling
|
| 279 |
+
|
| 280 |
+
// Create the link element
|
| 281 |
+
const link = document.createElement('a');
|
| 282 |
+
|
| 283 |
+
link.href = `https://${filename}`;
|
| 284 |
+
//link.href = `https://${filename}.static.hf.space/${imgshot}`;
|
| 285 |
+
link.target = '_blank'; // Open in new tab
|
| 286 |
+
link.rel = 'noopener noreferrer'; // Security best practice
|
| 287 |
+
link.appendChild(img); // Place the image inside the link
|
| 288 |
+
gridItem.appendChild(link); // Place the link (with image) inside the grid item
|
| 289 |
+
fragment.appendChild(gridItem); // Add the item to the fragment
|
| 290 |
+
});
|
| 291 |
+
|
| 292 |
+
// Append the fragment to the grid once
|
| 293 |
+
grid.appendChild(fragment);
|
| 294 |
+
|
| 295 |
+
} catch (error) {
|
| 296 |
+
console.error('Failed to load screenshots:', error);
|
| 297 |
+
const grid = document.getElementById('screenshot-grid');
|
| 298 |
+
grid.innerHTML = '<p class="text-red-500 text-center col-span-3">Failed to load screenshots. Check console for details.</p>';
|
| 299 |
+
}
|
| 300 |
+
}
|
| 301 |
+
|
| 302 |
+
document.addEventListener('DOMContentLoaded', loadScreenshots);
|
| 303 |
+
|
| 304 |
+
|
| 305 |
+
fetch("https://dav7.pages.dev/api/serve.json")
|
| 306 |
+
.then((response) => response.json())
|
| 307 |
+
.then((data) => {
|
| 308 |
+
const sites = data.sites;
|
| 309 |
+
const mySelects = document.getElementById("mySelects");
|
| 310 |
+
sites.forEach((sites) => {
|
| 311 |
+
const preElement = document.createElement("option");
|
| 312 |
+
preElement.value = `${sites.properties.links}`;
|
| 313 |
+
preElement.textContent = `${sites.properties.title}`;
|
| 314 |
+
mySelects.appendChild(preElement);
|
| 315 |
+
});
|
| 316 |
+
})
|
| 317 |
+
.catch((error) => {
|
| 318 |
+
console.log("ERROR", error);
|
| 319 |
+
});
|
| 320 |
+
const select = document.getElementById("mySelects");
|
| 321 |
+
select.addEventListener("change", function () {
|
| 322 |
+
const url = this.value;
|
| 323 |
+
if (url) {
|
| 324 |
+
window.location = url;
|
| 325 |
+
}
|
| 326 |
+
});
|
| 327 |
+
/*shared*/
|
| 328 |
+
function sharesbutton() {
|
| 329 |
+
navigator.share({
|
| 330 |
+
title: document.title,
|
| 331 |
+
text: "Compartilhar" + document.title,
|
| 332 |
+
url: window.location.href
|
| 333 |
+
});
|
| 334 |
+
}
|
| 335 |
+
var creditsyear = new Date();
|
| 336 |
+
document.getElementById("datacedencer").innerHTML = creditsyear.getFullYear();
|
| 337 |
+
|
| 338 |
+
</script>
|
| 339 |
+
|
| 340 |
+
<script src="https://redek-dp.github.io/servdevanalytics/v1/app.id.js"></script>
|
| 341 |
+
|
| 342 |
+
</body>
|
| 343 |
+
|
| 344 |
+
</html>
|
manifest.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "KEXEL GALLERY",
|
| 3 |
+
"short_name": "KEXEL GALLERY",
|
| 4 |
+
"lang": "pt-BR",
|
| 5 |
+
"description": "KEXEL GALLERY COM A BASE EM NAVEGADOR PARA PLATAFORMAS MODERNAS. APLICATIVO BY DEVELOPER DAVIDSONBPE.",
|
| 6 |
+
"theme_color": "#602ab6",
|
| 7 |
+
"background_color": "#602ab6",
|
| 8 |
+
"display": "standalone",
|
| 9 |
+
"orientation": "any",
|
| 10 |
+
"start_url": "/?Installe=kexel",
|
| 11 |
+
"id": "kexel",
|
| 12 |
+
"iarc_rating_id": "KO45-UB78-BR44-LK33-RY12-JD72-DK66-RM34-2025",
|
| 13 |
+
"dir": "auto",
|
| 14 |
+
"display_override": [
|
| 15 |
+
"standalone"
|
| 16 |
+
],
|
| 17 |
+
"categories": [
|
| 18 |
+
"books"
|
| 19 |
+
],
|
| 20 |
+
"icons": [
|
| 21 |
+
{
|
| 22 |
+
"src": "./d-framework/icon/144/favicon.png",
|
| 23 |
+
"sizes": "144x144",
|
| 24 |
+
"type": "image/png"
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"src": "./d-framework/icon/36/favicon.png",
|
| 28 |
+
"sizes": "36x36",
|
| 29 |
+
"type": "image/png"
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"src": "./d-framework/icon/48/favicon.png",
|
| 33 |
+
"sizes": "48x48",
|
| 34 |
+
"type": "image/png"
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"src": "./d-framework/icon/72/favicon.png",
|
| 38 |
+
"sizes": "72x72",
|
| 39 |
+
"type": "image/png"
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"src": "./d-framework/icon/96/favicon.png",
|
| 43 |
+
"sizes": "96x96",
|
| 44 |
+
"type": "image/png"
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"src": "./d-framework/icon/192/favicon.png",
|
| 48 |
+
"sizes": "192x192",
|
| 49 |
+
"type": "image/png",
|
| 50 |
+
"purpose": "any maskable monochrome"
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"src": "./d-framework/icon/512/favicon.png",
|
| 54 |
+
"sizes": "512x512",
|
| 55 |
+
"type": "image/png"
|
| 56 |
+
}
|
| 57 |
+
],
|
| 58 |
+
"screenshots": [
|
| 59 |
+
{
|
| 60 |
+
"src": "./d-framework/icon/512/favicon.png",
|
| 61 |
+
"sizes": "512x512",
|
| 62 |
+
"type": "image/png",
|
| 63 |
+
"platform": "wide"
|
| 64 |
+
}
|
| 65 |
+
]
|
| 66 |
+
}
|