Assets overhaul + demon list + several misc updates
I held back on pushing this since I wanted to wait for Rob to unblock level downloading, but it's probably gonna be a while since it's (likely) related to an unlisted level exploit Anyways I totally overhauled how the assets work, and you can also browse through all the files by going to gdbrowser.com/assets, because why not I also made many other changes and fixes during this timespan including the addition of the demon list, optimized custom lists along with a ?page param, and other random stuff that needed touching up - Removed Herobrine
32
README.md
|
@ -9,12 +9,10 @@ I mean, sure. Why not.
|
|||
|
||||
Just make sure to give credit, obviously. Via the bottom of the homepage, the credits button, or maybe even both if you're feeling extra nice.
|
||||
|
||||
Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned.
|
||||
Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned. (seriously what's with that?)
|
||||
|
||||
You can also check out `settings.js` to tweak some additional settings (mainly GDPS related) such as whether to cache things or if timestamps should end with "ago"
|
||||
|
||||
GDPS compatibility is still a HUGE work in progress, so pull requests would be greatly appreciated if you manage to make any improvements!
|
||||
|
||||
# Folders
|
||||
|
||||
GDBrowser has a lot of folders. I like to keep things neat.
|
||||
|
@ -33,24 +31,16 @@ Assets! Assets everywhere!
|
|||
|
||||
All the GD stuff was ripped straight from the GD spritesheets via [Absolute's texture splitter hack](https://youtu.be/pYQgIyNhow8). If you want a nice categorized version, [I've done all the dirty work for you.](https://www.mediafire.com/file/4d99bw1zhwcl507/textures.zip/file)
|
||||
|
||||
/blocks, /objects and /initial are used for the analysis page. I just put them in seperate folders for extra neatness.
|
||||
|
||||
/gdfaces holds all the difficulty faces
|
||||
|
||||
/css has the CSS stuff. They're in a special folder so browsers won't cache them (in case of updates)
|
||||
|
||||
Figure out what /gauntlets and /iconkitbuttons have.
|
||||
I'd explain what's in all the subfolders but it's pretty obvious. I tried my best to organize everything nicely.
|
||||
|
||||
## Classes
|
||||
What's a class you ask? I still have no idea.
|
||||
|
||||
Seriously, these things are *confusing*
|
||||
What's a class you ask? Good question.
|
||||
|
||||
I guess the best way to put it is uh... super fancy functions???
|
||||
|
||||
Level.js parses the server's disgusting response and sends back a nice object with all the level info
|
||||
|
||||
XOR.js encrypts/decrypts stuff like GD passwords. I stole the code from somewhere so uh if you wrote it, please don't hunt me down
|
||||
XOR.js encrypts/decrypts stuff like GD passwords
|
||||
|
||||
## HTML
|
||||
The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent.
|
||||
|
@ -64,8 +54,6 @@ parsePlist.js reads GJ_GameSheet02-uhd.plist and magically transforms it into ga
|
|||
|
||||
forms.json is a list of the different icon forms, their ingame filenames, and their index in responses from the GD servers
|
||||
|
||||
/iconkit is a folder for the little grey preview icons on the icon kit
|
||||
|
||||
## Misc
|
||||
Inevitable misc folder
|
||||
|
||||
|
@ -77,22 +65,28 @@ colorProperties.json - Color channel cheatsheet
|
|||
|
||||
initialProperties.json - Level settings cheatsheet
|
||||
|
||||
objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/gd-edit/GDAPI/blob/5a338c317b10ba0cb30d6175360c997a8a72502f/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectParameter.cs)
|
||||
objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/AlFasGD/GDAPI/blob/master/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectProperty.cs)
|
||||
|
||||
objects.json - IDs for portals, orbs, triggers, and misc stuff
|
||||
|
||||
**Not for level analysis**
|
||||
|
||||
colors.json - List of icon colors in RGB format
|
||||
|
||||
credits.json - Credits! (shown on the homepage)
|
||||
|
||||
dragscroll.js - Used on several pages for drag scrolling
|
||||
|
||||
level.json - An array of the official GD tracks, and also difficulty face stuff for level searching
|
||||
|
||||
sampleIcons.json - A pool of icons, one of which will randomly appear when visiting the icon kit. Syntax is [Name, ID, Col1, Col2, Glow],
|
||||
|
||||
secretStuff.json - GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons
|
||||
|
||||
settings.js - Tweak small settings here, mainly for local use or GDPS'es
|
||||
|
||||
sizecheck.js - Excecuted on most pages, used for the 'page isn't wide enough' message, back button, and a few other things
|
||||
sizecheck.js - Excecuted on most pages. Used for the 'page isn't wide enough' message, back button, and a few other things
|
||||
|
||||
---
|
||||
|
||||
happy painting and god bless.
|
||||
happy gdbrowsing and god bless.
|
|
@ -97,10 +97,10 @@ module.exports = async (app, req, res, api, ID, analyze) => {
|
|||
}
|
||||
|
||||
else if (level.difficulty == "Extreme Demon") {
|
||||
request.get('https://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||
request.get('https://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||
if (err) return sendLevel()
|
||||
let demon = JSON.parse(demonList)
|
||||
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position
|
||||
if (demon[0] && demon[0].position) level.demonList = demon[0].position
|
||||
return sendLevel()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -69,10 +69,10 @@ module.exports = async (app, req, res, api, analyze) => {
|
|||
}
|
||||
|
||||
if (level.difficulty == "Extreme Demon") {
|
||||
request.get('http://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||
request.get('http://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||
if (err) return sendLevel()
|
||||
let demon = JSON.parse(demonList)
|
||||
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position
|
||||
if (demon[0] && demon[0].position) level.demonList = demon[0].position
|
||||
return sendLevel()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,11 +1,23 @@
|
|||
const request = require('request')
|
||||
const levels = require('../misc/level.json').music
|
||||
const Level = require('../classes/Level.js')
|
||||
let demonList = {list: [], lastUpdated: 0}
|
||||
|
||||
module.exports = async (app, req, res) => {
|
||||
|
||||
if (app.offline) return res.send("-1")
|
||||
|
||||
let demonMode = req.query.hasOwnProperty("demonlist") || req.query.hasOwnProperty("demonList") || req.query.type == "demonlist" || req.query.type == "demonList"
|
||||
if (demonMode) {
|
||||
if (!demonList.list.length || demonList.lastUpdated + 600000 < Date.now()) { // 10 minute cache
|
||||
return request.get('http://www.pointercrate.com/api/v2/demons/listed/?limit=100', function (err, resp, list) {
|
||||
if (err) return res.send("-1")
|
||||
demonList = {list: JSON.parse(list).map(x => x.level_id), lastUpdated: Date.now()}
|
||||
return app.run.search(app, req, res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
let amount = 10;
|
||||
let count = +req.query.count
|
||||
if (count && count > 0) {
|
||||
|
@ -37,22 +49,24 @@ module.exports = async (app, req, res) => {
|
|||
count: amount
|
||||
}
|
||||
|
||||
if (req.query.gauntlet || req.query.hasOwnProperty("mappack") || req.query.hasOwnProperty("list") || req.query.type == "saved") filters.type = 10
|
||||
|
||||
if (req.query.songID && filters.customSong == 0 && levels.find(x => req.query.songID.toLowerCase() == x[0].toLowerCase())) {
|
||||
filters.song = levels.findIndex(x => req.query.songID.toLowerCase() == x[0].toLowerCase())
|
||||
}
|
||||
|
||||
if (req.query.type) {
|
||||
let filterCheck = req.query.type.toLowerCase()
|
||||
if (filterCheck == 'mostdownloaded') filters.type = 1
|
||||
if (filterCheck == 'mostliked') filters.type = 2
|
||||
if (filterCheck == 'trending') filters.type = 3
|
||||
if (filterCheck == 'recent') filters.type = 4
|
||||
if (filterCheck == 'featured') filters.type = 6
|
||||
if (filterCheck == 'magic') filters.type = 7
|
||||
if (filterCheck == 'awarded' || filterCheck == 'starred') filters.type = 11
|
||||
if (filterCheck == 'halloffame' || filterCheck == 'hof') filters.type = 16
|
||||
switch(filterCheck) {
|
||||
case 'mostdownloaded': filters.type = 1; break;
|
||||
case 'mostliked': filters.type = 2; break;
|
||||
case 'trending': filters.type = 3; break;
|
||||
case 'recent': filters.type = 4; break;
|
||||
case 'featured': filters.type = 6; break;
|
||||
case 'magic': filters.type = 7; break;
|
||||
case 'awarded': filters.type = 11; break;
|
||||
case 'starred': filters.type = 11; break;
|
||||
case 'halloffame': filters.type = 16; break;
|
||||
case 'hof': filters.type = 16; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (req.query.hasOwnProperty("user")) {
|
||||
|
@ -65,6 +79,15 @@ module.exports = async (app, req, res) => {
|
|||
if (req.query.hasOwnProperty("creators")) filters.type = 12
|
||||
|
||||
if (req.params.text == "*") delete filters.str
|
||||
|
||||
let listSize = 10
|
||||
if (demonMode || req.query.gauntlet || ["mappack", "list", "saved"].some(x => req.query.hasOwnProperty(x))) {
|
||||
filters.type = 10
|
||||
filters.str = demonMode ? demonList.list : filters.str.split(",")
|
||||
listSize = filters.str.length
|
||||
filters.str = filters.str.slice(filters.page*amount, filters.page*amount + amount).join()
|
||||
filters.page = 0
|
||||
}
|
||||
|
||||
request.post(app.endpoint + 'getGJLevels21.php', req.gdParams(filters), async function(err, resp, body) {
|
||||
|
||||
|
@ -118,8 +141,8 @@ module.exports = async (app, req, res) => {
|
|||
}
|
||||
|
||||
else if (filters.type == 10) { // custom page stuff
|
||||
level.results = levelArray.length
|
||||
level.pages = amount ? +Math.ceil(levelArray.length / amount) : 1
|
||||
level.results = listSize
|
||||
level.pages = +Math.ceil(listSize / (amount || 10))
|
||||
}
|
||||
|
||||
else { // normal page stuff
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
@font-face { font-family: Pusab; src: url('./../assets/Pusab.ttf') }
|
||||
@font-face { font-family: Kaine; src: url('./../assets/boomlings/Kaine.ttf') }
|
||||
@font-face { font-family: Pusab; src: url('../../assets/Pusab.ttf') }
|
||||
@font-face { font-family: Kaine; src: url('../../assets/boomlings/Kaine.ttf') }
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
|
@ -139,7 +139,7 @@ h2 {
|
|||
|
||||
#borderbox {
|
||||
border: 1.6vh solid;
|
||||
border-image: url('./../assets/boomlings/border.png') 10% round;
|
||||
border-image: url('../../assets/boomlings/border.png') 10% round;
|
||||
border-radius: 3vh;
|
||||
width: 110vh;
|
||||
height: 75%;
|
||||
|
@ -179,7 +179,7 @@ h2 {
|
|||
border: 2.5vh solid transparent;
|
||||
border-radius: 3vh;
|
||||
background-color: #995533;
|
||||
border-image: url('./../assets/brownbox.png') 10% round;
|
||||
border-image: url('../../assets/brownbox.png') 10% round;
|
||||
}
|
||||
|
||||
@-moz-keyframes spin {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')}
|
||||
@font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
|
@ -118,7 +118,7 @@ img, .noSelect {
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
.outOfOrder {
|
||||
.outOfOrder, .darkDiff {
|
||||
filter: brightness(50%);
|
||||
}
|
||||
|
||||
|
@ -236,7 +236,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
|
|||
.gdcheckbox {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
background-image: url(../assets/check-off.png);
|
||||
background-image: url(../../assets/check-off.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
padding-right: 20%;
|
||||
|
@ -244,7 +244,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
|
|||
}
|
||||
|
||||
input[type=checkbox]:checked + label.gdcheckbox {
|
||||
background-image: url(../assets/check-on.png);
|
||||
background-image: url(../../assets/check-on.png);
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
|
@ -315,14 +315,14 @@ input::-webkit-inner-spin-button {
|
|||
border: 2.5vh solid transparent;
|
||||
border-radius: 3vh;
|
||||
background-color: #995533;
|
||||
border-image: url('./../assets/brownbox.png') 10% round;
|
||||
border-image: url('../../assets/brownbox.png') 10% round;
|
||||
}
|
||||
|
||||
.blueBox {
|
||||
border: 2.5vh solid transparent;
|
||||
border-radius: 3vh;
|
||||
background-color: #334499;
|
||||
border-image: url('./../assets/bluebox.png') 10% round;
|
||||
border-image: url('../../assets/bluebox.png') 10% round;
|
||||
}
|
||||
|
||||
.fancybox {
|
||||
|
@ -331,7 +331,7 @@ input::-webkit-inner-spin-button {
|
|||
border: 3.5vh solid transparent;
|
||||
border-radius: 3vh;
|
||||
background-color: #001931;
|
||||
border-image: url('./../assets/fancybox.png') 10% stretch;
|
||||
border-image: url('../../assets/fancybox.png') 10% stretch;
|
||||
border-image-slice: 65;
|
||||
}
|
||||
|
||||
|
@ -341,14 +341,14 @@ input::-webkit-inner-spin-button {
|
|||
|
||||
.epicbox {
|
||||
border: 3.5vh solid transparent;
|
||||
border-image: url('./../assets/epicbox.png') 20% stretch;
|
||||
border-image: url('../../assets/epicbox.png') 20% stretch;
|
||||
border-image-slice: 85 77;
|
||||
border-image-width: 9.5vh;
|
||||
}
|
||||
|
||||
.leaderboardBox {
|
||||
border: 3.5vh solid transparent;
|
||||
border-image: url('./../assets/leaderboardbox.png') 20% stretch;
|
||||
border-image: url('../../assets/leaderboardbox.png') 20% stretch;
|
||||
border-image-slice: 85 77;
|
||||
border-image-width: 9.5vh;
|
||||
}
|
||||
|
@ -387,6 +387,7 @@ input::-webkit-inner-spin-button {
|
|||
margin-left: 0.8%;
|
||||
margin-right: 0.8%;
|
||||
filter: brightness(50%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.diffDiv img {
|
||||
|
@ -394,13 +395,13 @@ input::-webkit-inner-spin-button {
|
|||
}
|
||||
|
||||
.demonDiff {
|
||||
margin-left: 2%;
|
||||
margin-right: 2%;
|
||||
margin-left: 1.93%;
|
||||
margin-right: 1.93%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.demonDiff .smallTextWoo {
|
||||
margin-top: 3%;
|
||||
margin-top: 3.5%;
|
||||
font-size: 2.7vh;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
@import url('https://fonts.googleapis.com/css?family=Roboto');
|
||||
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')}
|
||||
@font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
|
||||
|
||||
.gdButton {
|
||||
cursor: pointer;
|
||||
|
@ -291,7 +291,7 @@ input:focus, select:focus, textarea:focus, button:focus {
|
|||
}
|
||||
|
||||
.iconSelected {
|
||||
border-image: url('./../assets/select.png') 10 stretch !important;
|
||||
border-image: url('../../assets/select.png') 10 stretch !important;
|
||||
}
|
||||
|
||||
.iconTabButton, .glowToggle, .copyForm {
|
||||
|
@ -418,7 +418,7 @@ input:focus, select:focus, textarea:focus, button:focus {
|
|||
border: 17px solid transparent;
|
||||
border-radius: 25px;
|
||||
background-color: #995533;
|
||||
border-image: url('./../assets/brownbox.png') 10% round;
|
||||
border-image: url('../../assets/brownbox.png') 10% round;
|
||||
}
|
||||
|
||||
.xButton {
|
||||
|
@ -455,7 +455,7 @@ input[type=checkbox] {
|
|||
.gdcheckbox {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
background-image: url(../assets/check-off.png);
|
||||
background-image: url(../../assets/check-off.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
padding-right: 40px;
|
||||
|
@ -465,7 +465,7 @@ input[type=checkbox] {
|
|||
}
|
||||
|
||||
input[type=checkbox]:checked + label.gdcheckbox {
|
||||
background-image: url(../assets/check-on.png);
|
||||
background-image: url(../../assets/check-on.png);
|
||||
}
|
||||
|
||||
.bounce {
|
||||
|
|
BIN
assets/deatheffects/0.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 822 B After Width: | Height: | Size: 822 B |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |