🏠 Home 

pp for osu score pages

shows pp data from osustats.ppy.sh on osu score pages.


ติดตั้งสคริปต์นี้?
// ==UserScript==
// @name        pp for osu score pages
// @namespace   http://osustats.ppy.sh
// @description shows pp data from osustats.ppy.sh on osu score pages.
// @include     http*://osu.ppy.sh/b/*
// @include     http*://osu.ppy.sh/s/*
// @include     http*://osu.ppy.sh/p/beatmap?b=*
// @include     http*://osu.ppy.sh/p/beatmap?s=*
// @connect     osustats.ppy.sh
// @connect     osu.yas-online.net
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// @version     6.05
// ==/UserScript==
this.GM_getValue = function(key, def) {
var retVal = localStorage[key] || def
//Firefox can't actually store any value other than string...
if(typeof retVal == 'string')
if(retVal ==='true')
retVal=true;
else
if(retVal ==='false')
retVal=false;
return retVal;
};
this.GM_setValue = function(key, value) {
return localStorage[key] = value;
};
this.GM_deleteValue = function(key) {
return delete localStorage[key];
};
var r###lt = null,
mapID = null,
mapsetID = null,
mapMode = null,
scoresMissing = false,
time = 10,
interval,
requestedUpdate = false,
updateInProgress = true,
isNoModOnly = false,
InfoBoxRef = null,
scoresTableRef = null,
scoresTableBodyRef = null,
DlButtonRef = null,
DlLink = null,
row = null;
var DlButtonImage = "iVBORw0KGgoAAAANSUhEUgAAAB8AAACLCAYAAACZWUJsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGW###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bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTAxLTI4VDE5OjIxOjQ5KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wMS0yOFQxOToyNjo0NyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDEtMjhUMTk6MjY6NDcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjU3NDM2ZjVkLTEzMWUtNTg0Ny05NDJhLTRmMzY5ZGJjMWZmYjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpkZjE2NTc0ZC1kNjEzLTk5NGQtOTdhYS0yNjEzNWU5YjRmZmM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDpkZjE2NTc0ZC1kNjEzLTk5NGQtOTdhYS0yNjEzNWU5YjRmZmM8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZGYxNjU3NGQtZDYxMy05OTRkLTk3YWEtMjYxMzVlOWI0ZmZjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTAxLTI4VDE5OjIxOjQ5KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3ZjA1MzI3Yy1jZDM5LTEzNGQtOTkwMC00OWRhOTY2NjVlYzM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDEtMjhUMTk6MjY6NDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hv###DQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRl###+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRl###+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hv###0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRl###+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU3NDM2ZjVkLTEzMWUtNTg0Ny05NDJhLTRmMzY5ZGJjMWZmYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wMS0yOFQxOToyNjo0NyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjdmMDUzMjdjLWNkMzktMTM0ZC05OTAwLTQ5ZGE5NjY2NWVjMzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpkZjE2NTc0ZC1kNjEzLTk5NGQtOTdhYS0yNjEzNWU5YjRmZmM8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDpkZjE2NTc0ZC1kNjEzLTk5NGQtOTdhYS0yNjEzNWU5YjRmZmM8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZ###dmVkRnJvbT4KICAgICAgICAgPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPgogICAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxwaG90b3Nob3A6TGF5ZXJOYW1lPm1pcnJvciFkbDwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+bWlycm9yIWRsPC9waG90b3Nob3A6TGF5ZXJUZXh0PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgICA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMzk8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PptagiIAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAE+VJREFUeNrsnHuUVfV1xz/7d+48mIHhMQyMwIwIEgQDigSfgxpfUamJupIYTROTJs3KayVN62qTLBOXtkmbpGk12rjaPLpqGzUlCVFMNCwfoOADQYkgT0UEBoZhBub9vOe3+8fvd84998Uc4lrNH+1h3TXn3nvO2b/Hfnz3d++LqCqA8r9/iOGPePxRhWfGumAktEz52mP0j9jSuyPiPxdQBUlcJv4z/6HefcPJzbzCGO7/0NksnlFHbUWQLzfSFktOiBZ8V3Ced//JKNzL+4/zw/V7eWJnO209Q6D5kxMFlZzAwocWzFzkD9H2rFUe2nyAHz3/Fhv3dzEc2sRSqxsEkhuQH4y9J1945g9RlP6RLMuaJ3N8YJRth3sZztp46zWehuYJdhecpMIBjIaWrsFRdrX38dDmA/x2extvHxso3nvEnSOIX4pYpOrJC3+9rYevr36d1VsPlRx9wa7mBEn+x6VuHVP41kPdrN56OGdK8bwisxJENDcxcUssiYmqqNOBk3Uyx/tHEaOIv91bbJ75qMK8hvFMr6uKP1DUX+A2fs6UmrGFf+Ox1yk0ZrX55iAFSy3AzEnj+N4HFrNg2oQ8PVDgkrlT+eY1C8YW/u01O/h9a3f8/sDxgYTS5J+I12gUdhzu4X0LpvPwJ8/jpiWzqAgME6oz3HpuM/d9eAlXnjE9zbILl/1gXfxuXIUBVUQV8TYs8Yp6+xKlZ2iUn728n0UzJvKd6xfx9avO4Parz+CeD57NmafUseHNjhTCVekaGOHWBzYCsK8zZ1Jq3axzfknjhRgaDXn57WOMhpbmyTV885oF3Hb5fOqqK2jrGeKpXe0pFU7hZxv3s2FvJ3VVGUhYjrOinPJJYgw72nrYl7D/ZHB6o6NvbOGiOS29+t51bDnY5UwpEpaIVpFGCzB9fBUtc6bSOKG6SEjD+CquXzRj7MCS+eLKhE555zzGccGcej55wWl84vzZmDEd0Ql8u2hSdk6rNXItKnk296kLT+MzLXNZ2jy5rJTQKn3DWSaOqzgJD6c5S5Y4Xmrswd41bQJVmYCdR3o41DVIdUXAzrYebl7WTH1tFSKw6e1jrNnRxtCo5a7r3j2GcFVUfGDQhEfRnEOJfOmb7b10D4xw/7o9AEwcV0nGQEUgfGb5XATh11ta+c6aHQBFwk2p6YpGgnPuEc2dR1sTqnKkZzC2uu6BETr7R1i1pRVV6Owf4YW9HXlWecKZ53y3gPoAEoUTP/toXJq3PxKv3LbWLna29ZC1yhvtvcjJAEiJni5gEFTVWZeXYyQRJr0qiGr8fXvPEM/sOoIg9A1nywKlkjOPNiNaXiMF0pLIxI00jnQq7t1/PL+XKbXVDI+GZUFaaeFejkjkVDxGEZDYjqMtMXEsj92OCltbu6mq6CWbtTm9SSPceGFG3CiMX3IxEXjImaBatyVW3fZYb44qMDxicyuSeuY4gUYEMdF5btaSiOQqilXFKITqlFJVsNYiIkie0o4h3AgEohgjCEIgEIhgjIm3Ihnl1C9/aBQJDRY3GIxACDYf0p5YeBAtPUKQMWQQjIGMEYy4rYjwmBpQtYQIJhSMCclaAaNgXVzQQmdVIFwK1z0wQmCEChEyRgi81zLRABCfISnWGkKFEEtWjAMdGLJiQRRrvSWkUbhAnKUFQEaENV++NNb4slPwxn71vWuxFtSqG1y0UgrukzTaboSMMTTXVXKqB4RpjqYJ1ezvHiS0bsutzYGO9KbmFa9tYITvP7oFE9tafuapAjMn1XLZopk8vbWVjsERRCAwzvSctlsXrPQknIyiGBUefrWVTFAWbUWqx/nvmo55aheBV1ZJYHvxLikVhjP+JYU7rAUpkP/bOzhK87Q6blky0/kGAaMaQ2uT1tRMftbDzefM4kTAaMakGi5bPMu7e++Q1J1LBELSulf8iI0op9RU8ZXrzkqlbPvbe/j5llaHBWI477FBDEzHDKkaB38pYR6ljp0HjvHVn78CEQix3qupLd6uEwuXWDsP949w/T+uKWPb7tq59TV8ecW7ueW8Zv7p6d2xQ9G8vFxLKleRcLUKQQ5BtfWNOFMrc7QPDHHmlgP82VVn8vhrh/j9oW7AYrwtiB###uHhRByEEmx8YyGsjhKLSJsneEh81qyJ/l7j###EiE6jcEYlNjMD3L5i4Qn3e07jJM5omuIy2mP9iCiBWBcJfVxXK6X0R0pqu9N4obG2imuXzUmldCuf3cWL+7tyOZyPD6E3WZNO4XLHkf5hHn9574kUlv7BUV564ygvHDgeX2Qk56iMcSShpmGjJJkcoPzdY9s8gtGC/E0S9Ih4/i1ioSRGPoHmQGWKmVvEGsRa9zAtpLFyCYVoPjWCOgUNRLFYAhRrnYKaVMJj5OoU76EvXJI6pN5831rn24HVf3UFClz19094q5CxFc7gZoxaptVW0TRtYmrh02sraOsbprG2kubpkwCYOaGSt7uHsGnAhNqIKLW0947w+MY3CrJFoSi4e2/X3j8MCkd6h3nshd0o0No9jIaKWNLtudtmg9qQb69+rQT9VYJSjwZjFVXL7b94hdHQ+3ctydVrsfDQq7z1D7VRlpSkNCWPU5U4vXTu2b1AQ4u1FrXWue0xl50QbICqBSs8+KUrISXT8dF7nnKztO4VDQRV1Nq0do5XuHE0TU+vcNNqqzjUPeBWwSrqhaq1KQGkWrfkNqCtZ5B7Vm5EjJTBbtCyaCbN0yex9tV9tPcNuKUONV5urNMDa9PsuVXHEqvFhvDfL+3FZAyBSBH/qsAvN+3jl19dwbUXzOOhZ/dwcGgADUOwfr/VoqFNByDVjxQ/+mxoIXSfRbBI1C1pdD44NEpNVQWXLGjMLXf0Cq3LbMIUCufortBbhwG1jv4Sk7CvfB38y399huULT2Hd9lZPJLkZS5L2TuNksJpLhTVBqNuCMlqilNbRP8yvNu7D+gQhokXVWveMaDXHNjULGsSM1MqvrkiwEWOY2nd/i/g9xlokFqrp0KtJcK+NddU0N05ObWoN4ytpPZ4tsAtN8LkpAKSKBQNtXUPc/eB6xBgHCiTByfrw17K4iebGyazdvJejPUNeMZ1LdUtuPUefUuEE590wIQ9v2ENFJiCTMfnUl79+1UtvsvIbN3DNhfN56JkdHDzWn+fjHT+fwPAnzNWsIqH36TZBaUR+XnERyub+DgyOUlNdycVnznTXhd4M/f0SPStNugSKiEXEeCxmMQkwIJKfLN72wzUsP3Mmz2494Hx6HrTWclGtNCEUgz+JqBADKPMa63j3qVPjNd+2r5M9h7vp6B1m1YtvOs7N53pYYhOThKmO4dtznitAMarcetkZXH7uPJpKaP6BtuM8snYbq17c6/Ulgt5hDMMjc0sl3Hh2QQS+9IFz+OBVZ5enQhon88WPLOeU+gnc+8grjhT08RzNmVk6bReHZow6iHDtxQsZGBrh8ee2s3LtDvKKIgIfvnQB1yxfyDXLF3Lfqs3epdrEfideaUpbxtMiN7WcTk11JY8/t537V7/K0d5BOnoH6egborNviM7eQX64+hUef247NdWV3HjRXG9W3r7xL7Xpqsii1qV6mstz2zq6vdPI52GilWo72p1ItSICKIpqOTQz5syNf4AgbH3LFeLe/95FNIyvSjihXEbTML6K91+2yFWc32qPqxJChFi1LCFUMqp5JMieg8dZv3kPLUvn8ZM7PkxnVy/b3zgcX7rw9FOonzSBmupK1m/ew+4Dx52dh+oxnPWWY9PTIqLW5Ziq3PnTZ7gDaFk6j5rGepoa64vuWL95D3f+dG3OQSW4nbiTJA2Gi2FvNsQGgg0Nd/7kGd7z7HaWLWyitqYyl6EOjPDy9gNs2tPm6jHqEFBU89YIe1vSgQnFgz8VbGixgcWIYdPuNjbtbitfglMbOxP1SCYmhkg98xA14iOSOAxupBg5FhTdotQ6ylTFF3wj7U8JnQEbOubYGh6466Y8hl9KwOfo/cdvfxAR6/fd5gqDqiXzjtLajqAGptZW0zSjPjWSmTp+HK2d2RiCiRLn5VZTYzjQUDjS1###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";
function Start() {
scoresMissing = false;
if (mapID != null && mapMode != null) {
GetScores(mapID, mapMode, function(res) {
r###lt = JSON.parse(res);
UpdateOsuScoresTable();
if (scoresMissing) {
if (requestedUpdate) {
updateInProgress = false;
SetInfoText("Please refresh page");
if (GM_getValue("Sort_by_pp"))
SortOsuScoresTable(true);
} else {
if (!isNoModOnly) {
RequestBeatmapUpdate(mapID, mapMode, function(accepted) {
if (accepted) {
interval = setInterval(Countdown, 1000);
}
});
}
}
} else {
updateInProgress = false;
if (requestedUpdate) {
updateInProgress = false;
SetInfoText("Updated successfully");
if (GM_getValue("Sort_by_pp"))
SortOsuScoresTable(true);
}
if (GM_getValue("Sort_by_pp"))
SortOsuScoresTable(true);
}
});
}
}
function Init() {
InfoBoxRef = document.getElementsByClassName("content-with-bg")[0].getElementsByTagName("h2")[document.getElementsByClassName("content-with-bg")[0].getElementsByTagName("h2").length - 1];
DlButtonRef = document.getElementsByClassName("paddingboth")[0];
if (InfoBoxRef != null) {
mapID = InfoBoxRef.nextElementSibling.children[0].children[0].value;
tempVal = DlButtonRef.children[0].children[0].href.split("/");
mapsetID = tempVal[tempVal.length - 1];
mapMode = InfoBoxRef.nextElementSibling.children[0].children[1].value;
if (mapID != null) {
RefreshTableReferences();
isNoModOnly = InfoBoxRef.nextElementSibling.children[0].children[2].checked;
AddppSortCheckbox();
AddTop100Checkbox();
AddMirriorButton();
return true;
}
}
return false;
}
function AddMirriorButton() {
GetMirriorDownloadLink(mapID, function(DownloadLink) {
DlLink = DownloadLink
var DlButton = document.createElement('img');
DlButton.style.width = "31px";
DlButton.style.height = "139px";
DlButton.src = "data:image/png;base64," + DlButtonImage;
var DlButtonLink = document.createElement('a');
DlButtonLink.addEventListener('click', startDownload, true);
DlButtonRef.children[0].appendChild(DlButtonLink);
DlButtonRef.children[0].children[1].appendChild(DlButton);
});
}
function startDownload() {
window.location.href = DlLink;
}
function RefreshTableReferences() {
scoresTableRef = document.getElementsByClassName("beatmapListing")[0].children[0];
scoresTableBodyRef = scoresTableRef.getElementsByTagName('tbody')[0];
}
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function UpdateRowData(cellNumber) {
row = scoresTableBodyRef.children[cellNumber];
row.cells[0].innerHTML = "#" + cellNumber;
idx = cellNumber - 1;
row.cells[1].innerHTML = "<img src=\"//s.ppy.sh/images/" + r###lt[idx].rank + "_small.png\">";
row.cells[2].innerHTML = numberWithCommas(r###lt[idx].score);
row.cells[3].innerHTML = r###lt[idx].combo;
row.cells[4].innerHTML = r###lt[idx].acc.toFixed(2) + "%";
var flag = "<img class=\"flag\" src=\"//s.ppy.sh/images/flags/";
if (r###lt[idx].hasOwnProperty("f"))
flag += r###lt[idx].f;
else
flag += "a1";
flag += ".gif\">";
row.cells[5].innerHTML = flag + "<a href=\"/u/" + r###lt[idx].Id + "\">" + r###lt[idx].name + "</a>";
row.cells[6].innerHTML = r###lt[idx].combo;
row.cells[7].innerHTML = r###lt[idx].c3 + " / " + r###lt[idx].c1 + " / " + r###lt[idx].c5;
row.cells[8].innerHTML = r###lt[idx].cG;
row.cells[9].innerHTML = r###lt[idx].cK;
row.cells[10].innerHTML = r###lt[idx].miss;
row.cells[11].innerHTML = r###lt[idx].hasOwnProperty("mods") ? r###lt[idx].mods : "---";
row.cells[12].innerHTML = "---";
return [r###lt[idx].name, r###lt[idx].score];
}
function AddRow(rowNum) {
if (row === null) {
row = scoresTableBodyRef.getElementsByTagName('tr')[1].cloneNode(true);
}
row.className = "row" + ((rowNum % 2) + 1) + "p";
scoresTableBodyRef.appendChild(row.cloneNode(true));
}
function UpdateOsuScoresTable() {
numOfRows = scoresTableBodyRef.getElementsByTagName("tr").length;
if (!requestedUpdate) {
th = document.createElement('th');
th.innerHTML = "pp";
scoresTableBodyRef.children[0].insertBefore(th, scoresTableBodyRef.children[0].childNodes[3]);
for (var i = 1; i < numOfRows; i++)
scoresTableBodyRef.getElementsByTagName("tr")[i].insertCell(3);
if (GM_getValue("Show_top_100") && r###lt.length > 50 && numOfRows==51) {
for (var i = 50; i < r###lt.length; i++) {
AddRow(i);
}
numOfRows = scoresTableBodyRef.getElementsByTagName("tr").length;
}
}
for (var i = 1; i < numOfRows; i++) {
var pp, username, score;
if (i > 50) {
data = UpdateRowData(i);
username = data[0];
score = data[1];
} else {
row = scoresTableBodyRef.children[i];
username = row.children[5].children[1].innerHTML;
score = row.children[2].innerHTML.replace(/,/g, '').replace(/<b>/g, '').replace(/<\/b>/g, '');
}
pp = GetPpFromUsername(username, score);
scoresTableBodyRef.getElementsByTagName("tr")[i].children[3].innerHTML = pp;
}
}
function GetUserIndex(username) {
for (var i = 0; i < r###lt.length; i++) {
if (username == r###lt[i].name) {
return i;
}
}
return -1;
}
function GetPpFromUsername(username, score) {
idx = GetUserIndex(username);
if (idx != -1) {
if (score == r###lt[idx].score) {
return (Math.round(r###lt[idx].pp * 100) / 100);
}
scoresMissing = true;
return "N/U";
}
scoresMissing = true;
return "N/D";
}
function GetMirriorDownloadLink(mapID, callback) {
GetPage("https://osu.yas-online.net/json.mapdata.php?mapId=" + mapsetID, function(res) {
res = JSON.parse(res);
if (res.r###lt == "success") {
yasID = Object.keys(res.success)[0];
callback("https://osu.yas-online.net" + res.success[yasID].downloadLink)
}
});
}
function GetScores(mapID, mapMode, callback) {
GetPage("http://osustats.ppy.sh/api/beatmap/getScores/" + mapID + "/" + mapMode + "?nick=" + getCookie("last_login"), function(res) {
callback(res);
});
}
function RequestBeatmapUpdate(mapID, mapMode, callback) {
GetPage("http://osustats.ppy.sh/api/beatmap/updateRequest/" + mapID + "/" + mapMode + "?nick=" + getCookie("last_login"), function(res) {
requestedUpdate = true;
res = JSON.parse(res);
if (res.status == "OK") {
callback(true);
} else {
callback(false);
SetInfoText("Request failed- try again later.");
}
});
}
function GetPage(url, callback) {
GM_xmlhttpRequest({
method: "GET",
url: url,
synchronous: true,
timeout: 4000,
headers: {
Referer: location.href
},
onload: function(resp) {
callback(resp.responseText);
},
ontimeout: function() {
callback(null);
}
});
}
function Countdown() {
time--;
SetInfoText("Missing scores detected- Update requested</br>Updating in " + time + " seconds");
if (time == 0) {
clearInterval(interval);
SetInfoText("Updating...");
Start();
}
}
function SetInfoText(text) {
InfoBoxRef.innerHTML = "<div style=\"font: 30px; text-align: center;\">" + text + "</div>"
}
function AddppSortCheckbox() {
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.name = "name";
checkbox.value = "value";
checkbox.id = "id";
checkbox.onchange = function x() {
GM_setValue("Sort_by_pp", InfoBoxRef.nextElementSibling.children[0].children[4].checked);
SortOsuScoresTable(GM_getValue("Sort_by_pp"));
};
if (GM_getValue("Sort_by_pp"))
checkbox.checked = GM_getValue("Sort_by_pp");
var label = document.createElement('label')
label.htmlFor = "id";
label.appendChild(document.createTextNode('Sort score table by pp'));
InfoBoxRef.nextElementSibling.children[0].appendChild(checkbox);
InfoBoxRef.nextElementSibling.children[0].appendChild(label);
}
function AddTop100Checkbox() {
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.name = "t100";
checkbox.value = "";
checkbox.id = "t100i";
checkbox.onchange = function y() {
GM_setValue("Show_top_100", InfoBoxRef.nextElementSibling.children[0].children[6].checked);
location.reload();
};
if (GM_getValue("Show_top_100", true))
checkbox.checked = GM_getValue("Show_top_100");
var label = document.createElement('label')
label.htmlFor = "t100i";
label.appendChild(document.createTextNode('show top 100'));
InfoBoxRef.nextElementSibling.children[0].appendChild(checkbox);
InfoBoxRef.nextElementSibling.children[0].appendChild(label);
}
function SortOsuScoresTable(sortByPp) {
if (updateInProgress) return;
if (sortByPp)
column = 3;
else
column = 2;
function isNumeric(num) {
return !isNaN(num)
}
function RowCompareNumbers(a, b) {
var aVal = parseInt(a.value);
var bVal = parseInt(b.value);
return (bVal - aVal);
}
var rows = scoresTableBodyRef.getElementsByTagName('tr');
var rowArray = new Array();
var tempValue;
for (var i = 1, length = rows.length; i < length; i++) {
rowArray[i] = new Object;
rowArray[i].oldIndex = i;
tempValue = rows[i].getElementsByTagName('td')[column].firstChild.textContent.replace(/\,/g, '');;
if (isNumeric(tempValue))
rowArray[i].value = tempValue;
else
rowArray[i].value = "0";
}
rowArray.sort(RowCompareNumbers);
var newTbody = document.createElement('tbody');
newTbody.appendChild(rows[0].cloneNode(true));
for (var i = 0, length = rowArray.length - 1; i < length; i++) {
newTbody.appendChild(rows[rowArray[i].oldIndex].cloneNode(true));
}
scoresTableRef.replaceChild(newTbody, scoresTableBodyRef);
RefreshTableReferences();
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
}
window.addEventListener('load', function() {
if (Init()) {
Start();
}
}, false);