<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.sncapedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mazal</id>
	<title>SNCApedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.sncapedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mazal"/>
	<link rel="alternate" type="text/html" href="https://www.sncapedia.org/wiki/Special:Contributions/Mazal"/>
	<updated>2026-04-05T18:19:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=User_talk:Mazal&amp;diff=386</id>
		<title>User talk:Mazal</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=User_talk:Mazal&amp;diff=386"/>
		<updated>2025-06-16T14:09:42Z</updated>

		<summary type="html">&lt;p&gt;Mazal: /* Infobox */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== hi ==&lt;br /&gt;
&lt;br /&gt;
hi [[User:Mazal|Mazal]] ([[User talk:Mazal|talk]]) 22:36, 11 June 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== nigger ==&lt;br /&gt;
&lt;br /&gt;
nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger nigger [[Special:Contributions/172.68.159.229|172.68.159.229]] 20:04, 14 June 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Added a few modules ==&lt;br /&gt;
Mostly copied from the soyjak wiki, since I&#039;m pretty tech illiterate. I hope it&#039;s somewhat useful. --[[User:Auoot|Auoot]] ([[User talk:Auoot|talk]]) 23:31, 15 June 2025 (UTC)&lt;br /&gt;
* thank --[[User:SNCApedia|SNCApedia]] ([[User talk:SNCApedia|talk]])&lt;br /&gt;
&lt;br /&gt;
== Infobox ==&lt;br /&gt;
How do we make the infoboxes look like the ones from the soy wiki? Do you have to install an extension for that? --[[User:Auoot|Auoot]] ([[User talk:Auoot|talk]]) 13:47, 16 June 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:its hard, just use [[Template:Infobox person]] [[User:Mazal|Mazal]] ([[User talk:Mazal|talk]]) 14:09, 16 June 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Talk:Terrycrews&amp;diff=353</id>
		<title>Talk:Terrycrews</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Talk:Terrycrews&amp;diff=353"/>
		<updated>2025-06-15T21:01:39Z</updated>

		<summary type="html">&lt;p&gt;Mazal: /* Edit Conflict */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Edit Conflict ==&lt;br /&gt;
&lt;br /&gt;
I was trying to make a page for terry before you did but now I can&#039;t change the main page without my version showing up. Your version is better but mine had a lot of trivia I wanted to add. How can I fix this? [[User:Soyteen Liker|Soyteen Liker]] ([[User talk:Soyteen Liker|talk]]) 20:23, 15 June 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:did you cancel your edit? click escape [[User:Mazal|Mazal]] ([[User talk:Mazal|talk]]) 21:01, 15 June 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=324</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=324"/>
		<updated>2025-06-15T15:47:48Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using &amp;lt;s&amp;gt;[https://mullvad.net/en/browser Mullvad browser] (allow canvas access)&amp;lt;/s&amp;gt; you will get autobanned for ban evasion, which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
yup, he did&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tuxler &amp;quot;detection&amp;quot;, can be easily spoofed by changing the extension ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;Firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Talk:Main_Page&amp;diff=309</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Talk:Main_Page&amp;diff=309"/>
		<updated>2025-06-15T13:47:26Z</updated>

		<summary type="html">&lt;p&gt;Mazal: /* Consent About Making Pages For People */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Consent About Making Pages For People ==&lt;br /&gt;
&lt;br /&gt;
What if some people don&#039;t want pages made about them? Should we make them anyway or respect their wishes? [[User:Soyteen Liker|Soyteen Liker]] ([[User talk:Soyteen Liker|talk]]) 00:17, 15 June 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:thats up to you, but i will not delete pages if someone doesnt like it [[User:Mazal|Mazal]] ([[User talk:Mazal|talk]]) 13:47, 15 June 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=308</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=308"/>
		<updated>2025-06-15T13:40:17Z</updated>

		<summary type="html">&lt;p&gt;Mazal: all of this is quotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser] (allow canvas access), which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tuxler &amp;quot;detection&amp;quot;, can be easily spoofed by changing the extension ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;Firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=296</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=296"/>
		<updated>2025-06-14T20:56:33Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser] (allow canvas access), which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you, not including the tuxler check (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;Firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=295</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=295"/>
		<updated>2025-06-14T20:36:38Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser] (allow canvas access), which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you, not including the tuxler check (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;Another Firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=293</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=293"/>
		<updated>2025-06-14T19:57:02Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser] (allow canvas access), which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you, not including the tuxler check (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=292</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=292"/>
		<updated>2025-06-14T19:42:23Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you, not including the tuxler check (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=291</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=291"/>
		<updated>2025-06-14T19:26:51Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you, not including the tuxler check and portscans (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=290</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=290"/>
		<updated>2025-06-14T17:51:29Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if the printing method is not overwritten, idk whats this for&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=289</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=289"/>
		<updated>2025-06-14T17:14:27Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines/fingerprints you. Contrarily to popular belief, Integrity.wasm doesnt do any datamining, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the fingerprinting values are combined into a single integrity hash, so its slightly harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if window.print is a native function&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=288</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=288"/>
		<updated>2025-06-14T17:08:23Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past a lot of the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines you. Contrarily to popular belief, Integrity.wasm doesnt do any dataming, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is kind useless though, as you can just log all the stuff intregrity.js runs. The only use integrity.wasm has is obfuscating how all the values are combined into a single integrity hash, so its harder to spoof. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if window.print is a native function&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=282</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=282"/>
		<updated>2025-06-14T05:37:39Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines you. Contrarily to popular belief, Integrity.wasm doesnt do any dataming, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is completely useless though, as you can just log all the stuff intregrity.js runs. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; that datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 someone already did this&lt;br /&gt;
&lt;br /&gt;
THAT WAS A FUCKING YEAR AGO A LOT HAS CHANGED SINCE.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if window.print is a native function&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=272</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=272"/>
		<updated>2025-06-14T04:09:15Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines you. Contrarily to popular belief, Integrity.wasm doesnt do any dataming, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is completely useless though, as you can just log all the stuff intregrity.js runs. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; that datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 someone already did this&lt;br /&gt;
&lt;br /&gt;
THAT WAS A FUCKING YEAR AGO A LOT HAS CHANGED SINCE.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if you changed window.print is a native function&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=270</id>
		<title>Sharty datamining</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Sharty_datamining&amp;diff=270"/>
		<updated>2025-06-14T04:07:26Z</updated>

		<summary type="html">&lt;p&gt;Mazal: QUOTE BTFO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Sharty datamines you a lot lol, you can get past the datamining while still being able to post by using [https://mullvad.net/en/browser Mullvad browser], which is basically the Tor browser but doesnt connect to Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 quote blocks mullvad browser again&lt;br /&gt;
&lt;br /&gt;
=== Integrity.js ===&lt;br /&gt;
Integrity.js contains the javascript that datamines you. Contrarily to popular belief, Integrity.wasm doesnt do any dataming, as wasm cant do that, instead it obfuscates the code that integrity.js runs. Integrity.wasm is completely useless though, as you can just log all the stuff intregrity.js runs. Anyways heres all the stuff it runs that &amp;quot;&amp;quot;&amp;quot;secretly&amp;quot;&amp;quot;&amp;quot; that datamines you (from May 15 2025 as im too lazy to check it again). Note that i used LLMs to help me explain some of the code because I dont know a lot of javascript.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;inb4 someone already did this&lt;br /&gt;
&lt;br /&gt;
THAT WAS A FUCKING YEAR AGO A LOT HAS CHANGED SINCE.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ANYWAYS HERE I GO&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;Boolean(window._phantom||window.callPhantom||window.__phantomas||window.Buffer||window.emit||window.spawn||window.webdriver||window.domAutomation||window.domAutomationController||window.document.documentElement.getAttribute(&#039;webdriver&#039;));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if youre using a webdriver (automated browser) to stop bots, though just use a good one like https://github.com/ultrafunkamsterdam/nodriver&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 [&#039;webkitPersistentStorage&#039;, &#039;webkitTemporaryStorage&#039;, &#039;webkitResolveLocalFileSystemURL&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; navigator).length + (navigator.vendor.indexOf(&#039;Google&#039;) === 0) + [&#039;BatteryManager&#039;, &#039;webkitMediaStream&#039;, &#039;webkitSpeechGrammar&#039;].filter(key =&amp;gt; key &#039;&#039;&#039;in&#039;&#039;&#039; window).length&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Checks if certain Webkit (Safari) APIs are accessible, also checks if your browser vendor is a Google one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(() =&amp;gt; { const f = new Float32Array(1); const u8 = new Uint8Array(f.buffer); f[0] = Infinity; f[0] = f[0] - f[0]; return u8[3];})();&amp;lt;/syntaxhighlight&amp;gt;Sees how floating-point values are represented in memory&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.screen.colorDepth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;I shouldnt have to explain this one&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
parseFloat(navigator.deviceMemory)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how much RAM you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navigator.hardwareConcurrency&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks how many logical cpu cores you have&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.outerWidth&lt;br /&gt;
window.outerHeight&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Checks the window size&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
new Date().getTimezoneOffset()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Gets your timezone&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
(typeof chrome !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime !== &#039;undefined&#039; &amp;amp;&amp;amp; typeof chrome.runtime.sendMessage !== &#039;undefined&#039;) ? chrome.runtime.sendMessage(&#039;jpgljfpmoofbmlieejglhonfofmahini&#039;, {action: &#039;check_installed&#039;}, response =&amp;gt; chrome.runtime.lastError || response.is_installed !== &#039;yes&#039; ? 0 : 1) : 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A way to check if your browser is a chromium one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;MSCSSMatrix&#039;, &#039;msSetImmediate&#039;, &#039;msIndexedDB&#039;].filter(key =&amp;gt; key in window).length + [&#039;msMaxTouchPoints&#039;, &#039;msPointerEnabled&#039;].filter(key =&amp;gt; key in navigator).length&lt;br /&gt;
[&#039;msWriteProfilerMark&#039;, &#039;MSStream&#039;, &#039;msLaunchUri&#039;].filter(key =&amp;gt; key in window).length + ([&#039;msSaveBlob&#039;].filter(key =&amp;gt; key in navigator).length)&amp;lt;/syntaxhighlight&amp;gt;Checks if ur using internet explorer, or pre-chromium microsoft edge&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;safari&#039;, &#039;ongestureend&#039;, &#039;TouchEvent&#039;, &#039;orientation&#039;].filter(key =&amp;gt; key in window).length + (HTMLElement &amp;amp;&amp;amp; !(&#039;autocapitalize&#039; in HTMLElement.prototype)) + (Document &amp;amp;&amp;amp; &#039;pointerLockElement&#039; in Document.prototype)&amp;lt;/syntaxhighlight&amp;gt;iOS check or something&amp;lt;syntaxhighlight&amp;gt;/^function\s.*?\{\s*\[native code]\s*}$/.test(String(window.print))&amp;lt;/syntaxhighlight&amp;gt;Sees if you changed window.print is a native function&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(String(window.browser) === &#039;[object WebPageNamespace]&#039;) + (&#039;MicrodataExtractor&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Old chromium or firefox check&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[&#039;onmozfullscreenchange&#039;, &#039;mozInnerScreenX&#039;, &#039;CSSMozDocumentRule&#039;, &#039;CanvasCaptureMediaStream&#039;].filter(key =&amp;gt; key in window).length + (&#039;buildID&#039; in navigator) + (&#039;MozAppearance&#039; in (document.documentElement?.style ?? {}))&amp;lt;/syntaxhighlight&amp;gt;FIREFOX CHECK&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(&#039;DOMRectList&#039; in window) + (&#039;RTCPeerConnectionIceEvent&#039; in window) + (&#039;SVGGeometryElement&#039; in window) + (&#039;ontransitioncancel&#039; in window)&amp;lt;/syntaxhighlight&amp;gt;Modern browser check or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
localStorage.getItem(&#039;css_tokens&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what css you are using or something i think, idk, ill have to look into this some more&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
(() =&amp;gt; { const getComplexCanvasFingerprint = () =&amp;gt; { const asciiString = &amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@[\]^_`{|}~&amp;quot;; let canvas = null; let ctx = null; let base64Data = null; try { canvas = document.createElement(&#039;canvas&#039;); ctx = canvas.getContext(&#039;2d&#039;); ctx.textBaseline = &amp;quot;top&amp;quot;; ctx.font = &amp;quot;17px Arial&amp;quot;; ctx.textBaseline = &amp;quot;alphabetic&amp;quot;; ctx.fillStyle = &amp;quot;#f60&amp;quot;; ctx.fillRect(150, 1, 550, 25); ctx.fillStyle = &amp;quot;#069&amp;quot;; ctx.fillText(asciiString, 2, 15); ctx.fillStyle = &amp;quot;rgba(102, 204, 0, 0.7)&amp;quot;; ctx.fillText(asciiString, 4, 17); ctx.font = &amp;quot;17px Helvetica&amp;quot;; ctx.strokeStyle = &#039;red&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 50); ctx.font = &amp;quot;17px Times New Roman&amp;quot;; ctx.strokeStyle = &#039;rgba(102, 204, 0, 0.7)&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 55); ctx.font = &amp;quot;17px Times&amp;quot;; ctx.strokeStyle = &#039;#069&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 60); ctx.font = &amp;quot;17px Georgia&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 65); ctx.font = &amp;quot;17px Palatino&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 70); ctx.font = &amp;quot;17px Garamond&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 75); ctx.font = &amp;quot;17px Bookman&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 80); ctx.font = &amp;quot;17px Comic Sans MS&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 85); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 90); ctx.font = &amp;quot;17px Arial Black&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 95) ctx.font = &amp;quot;17px Impact&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 100) ctx.font = &amp;quot;17px Anurati&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 105); ctx.font = &amp;quot;17px Verdana&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 110); ctx.font = &amp;quot;17px Courier New&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 115); ctx.font = &amp;quot;17px Baskerville&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 120); ctx.font = &amp;quot;17px Century Gothic&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 125); ctx.font = &amp;quot;17px Tahoma&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 130); ctx.font = &amp;quot;17px Arial Narrow&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 135); ctx.font = &amp;quot;17px Trebuchet MS&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;;ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 140); ctx.font = &amp;quot;17px Lucida Sans Typewriter&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 12, 145); ctx.font = &amp;quot;17px Consolas&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 10, 150); ctx.font = &amp;quot;17px cursive&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 14, 155); ctx.font = &amp;quot;17px fantasy&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 16, 160); ctx.font = &amp;quot;17px monospace&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 18, 165); ctx.font = &amp;quot;17px sans-serif&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 20, 170); ctx.font = &amp;quot;17px serif&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 22, 175); ctx.font = &amp;quot;17px .Mondulkiri U GR 1.5&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 24, 180); ctx.font = &amp;quot;17px BPG Classic 99U&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 26, 185); ctx.font = &amp;quot;17px Bauhaus 93&amp;quot;; ctx.strokeStyle = &#039;#00FF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 28, 190); ctx.font = &amp;quot;17px Bookshelf Symbol 7&amp;quot;; ctx.strokeStyle = &#039;#FFFF00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 30, 195); ctx.font = &amp;quot;17px Ming(for ISO10646)&amp;quot;; ctx.strokeStyle = &#039;#FF7F00&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 32, 200); ctx.font = &amp;quot;17px Modern No. 20&amp;quot;; ctx.strokeStyle = &#039;#FF0000&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 34, 205); ctx.font = &amp;quot;17px OCR-B 10 BT&amp;quot;; ctx.strokeStyle = &#039;#9400D3&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 36, 210); ctx.font = &amp;quot;17px Proxy 1&amp;quot;; ctx.strokeStyle = &#039;#4B0082&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 38, 215); ctx.font = &amp;quot;17px Proxy 9&amp;quot;; ctx.strokeStyle = &#039;#0000FF&#039;; ctx.lineWidth = 2; ctx.strokeText(asciiString, 40, 220); const grd = ctx.createLinearGradient(0, 0, 200, 0.2); grd.addColorStop(0, &amp;quot;rgba(102, 204, 0, 0.1)&amp;quot;); grd.addColorStop(1, &amp;quot;#FF0000&amp;quot;); ctx.fillStyle = grd; ctx.fillRect(10, 10, 150, 80); base64Data = canvas.toDataURL(); canvas.remove(); return base64Data; } catch (err) { if (canvas) { canvas.remove(); } return &amp;quot;blocked&amp;quot;; } } const canvasFingerprint = getComplexCanvasFingerprint(); if (canvasFingerprint != getComplexCanvasFingerprint()) { return &amp;quot;blocked&amp;quot;; } else { return canvasFingerprint; } })();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The part everyones been waiting for: THE CANVAS FINGERPRINT&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.serviceWorker === undefined&amp;lt;/syntaxhighlight&amp;gt;Sees if service worker API is there&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;navigator.languages.join()&amp;lt;/syntaxhighlight&amp;gt;Gets your prefered languages or something&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;(new Intl[&#039;DateTimeFormat&#039;]).resolvedOptions()[&#039;locale&#039;]&amp;lt;/syntaxhighlight&amp;gt;Your locale for formatting dates and times&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
window.gl ? window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;) ? window.gl.getParameter(window.gl.getExtension(&#039;WEBGL_debug_renderer_info&#039;).UNMASKED_RENDERER_WEBGL) : null : null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what GPU youre using&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.location.href&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sees what url you are on, most likely https://www.soyjak.st/SOMETHING/&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;localStorage.stylesheet ? localStorage.stylesheet : null&amp;lt;/syntaxhighlight&amp;gt;Sees if you are using the default stylesheet or not i think&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=269</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=269"/>
		<updated>2025-06-14T02:08:54Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = January 22nd, 2024&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Svvt&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv (formerly https://soygem.party)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The Shemmy, or Shemmy.tv (originally Soygem.party), is an imageboard website that was founded by [[Svvt]] as a splinter of the [[Sharty]]. The main board was /soy/, until it changed to /qa/ to try to be based off of 4chan&#039;s /qa/ board instead of the [[Sharty|Shitty]]. The Shemmy went through many &amp;quot;owners&amp;quot;, buts its domain has been always owned by svvt, until he sold it to some discord groomer when Vadim wanted to shut it down. About a month after svvt sold it, it came back with the domain Shemmy.tv. When it came back up, it also had its logo changed, and came with a gay red style as the default one. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== Shemmy History ==&lt;br /&gt;
JANURAY 2024 - JANUARY 2025:&lt;br /&gt;
&lt;br /&gt;
too ancient no one knows anything about this period&lt;br /&gt;
&lt;br /&gt;
Feralteen appeared sometime in early 2024.&lt;br /&gt;
&lt;br /&gt;
It was created by Svvt, who is portrayed as a blue guy with red glasses, and was apparaently Japanese.&lt;br /&gt;
&lt;br /&gt;
In mid-2024, it was purchased by DOLL, going under the pseudonym of Foot. After Foot, Angeleno bought the site. On 2024 August 23 Mutt made Vadim the manager.&lt;br /&gt;
&lt;br /&gt;
FEBUARY 2025:&lt;br /&gt;
&lt;br /&gt;
it was shutted down or something. the greatest period in shemmy history because of this&lt;br /&gt;
&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=SNCApedia:Rules&amp;diff=267</id>
		<title>SNCApedia:Rules</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=SNCApedia:Rules&amp;diff=267"/>
		<updated>2025-06-14T02:03:45Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Your edits will not be approved or reverted if it violates these rules.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# No content illegal in the United States.&lt;br /&gt;
# You must be at least 16 to use this wiki.&lt;br /&gt;
# Advocating for pedophilia, zoophilia, and zoosadism is not allowed (even if ironic).&lt;br /&gt;
# Do not upload NSFW content unless it is censored. Linking to it is fine, but give warnings.&lt;br /&gt;
# Pages should be in english.&lt;br /&gt;
# Pages should be related to the broader soysphere.&lt;br /&gt;
# You can &amp;quot;steal&amp;quot; templates, but do not plagiarize articles available on other wikis.&lt;br /&gt;
# Making edits that lower the quality of a page is not permitted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Repeated rule breaking will result in a ban.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Breaking rule 1, 2, or 3, will result in an instant ban.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=266</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=266"/>
		<updated>2025-06-14T01:42:42Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = January 22nd, 2024&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Svvt&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The Shemmy, or Shemmy.tv (originally Soygem.party), is an imageboard website that was founded by [[Svvt]] as a splinter of the [[Sharty]]. The main board was /soy/, until it changed to /qa/ to try to be based off of 4chan&#039;s /qa/ board instead of the [[Sharty|Shitty]]. The Shemmy went through many &amp;quot;owners&amp;quot;, buts its domain has been always owned by svvt, until he sold it to some discord groomer when Vadim wanted to shut it down. About a month after svvt sold it, it came back with the domain Shemmy.tv. When it came back up, it also had its logo changed, and came with a gay red style as the default one. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== Shemmy History ==&lt;br /&gt;
JANURAY 2024 - JANUARY 2025:&lt;br /&gt;
&lt;br /&gt;
too ancient no one knows anything about this period&lt;br /&gt;
&lt;br /&gt;
Feralteen appeared sometime in early 2024.&lt;br /&gt;
&lt;br /&gt;
It was created by Svvt, who is portrayed as a blue guy with red glasses, and was apparaently Japanese.&lt;br /&gt;
&lt;br /&gt;
In mid-2024, it was purchased by DOLL, going under the pseudonym of Foot. After Foot, Angeleno bought the site. On 2024 August 23 Mutt made Vadim the manager.&lt;br /&gt;
&lt;br /&gt;
FEBUARY 2025:&lt;br /&gt;
&lt;br /&gt;
it was shutted down or something. the greatest period in shemmy history because of this&lt;br /&gt;
&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=265</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=265"/>
		<updated>2025-06-14T01:41:29Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = January 22nd, 2024&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Svvt&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The Shemmy, or Shemmy.tv (originally Soygem.party), is an imageboard website that was founded by [[Svvt]] as a splinter of the [[Sharty]]. The main board was /soy/, until it changed to /qa/ to try to be based off of 4chan&#039;s /qa/ board instead of the [[Sharty|Shitty]]. The Shemmy went through many &amp;quot;owners&amp;quot;, buts its domain has been always owned by svvt, until he sold it when Vadim wanted to shut it down. About a month after svvt sold it, it came back with the domain Shemmy.tv. When it came back up, it also had its logo changed, and came with a gay red style as the default one. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== Shemmy History ==&lt;br /&gt;
JANURAY 2024 - JANUARY 2025:&lt;br /&gt;
&lt;br /&gt;
too ancient no one knows anything about this period&lt;br /&gt;
&lt;br /&gt;
Feralteen appeared sometime in early 2024.&lt;br /&gt;
&lt;br /&gt;
It was created by Svvt, who is portrayed as a blue guy with red glasses, and was apparaently Japanese.&lt;br /&gt;
&lt;br /&gt;
In mid-2024, it was purchased by DOLL, going under the pseudonym of Foot. After Foot, Angeleno bought the site. On 2024 August 23 Mutt made Vadim the manager.&lt;br /&gt;
&lt;br /&gt;
FEBUARY 2025:&lt;br /&gt;
&lt;br /&gt;
it was shutted down or something. the greatest period in shemmy history because of this&lt;br /&gt;
&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=264</id>
		<title>Portal:Schlog</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=264"/>
		<updated>2025-06-14T01:36:26Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main|Schlog}}&lt;br /&gt;
&lt;br /&gt;
also see catagory: [[:Category:Schlog| Shlog]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=263</id>
		<title>Portal:Chinny</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=263"/>
		<updated>2025-06-14T01:36:11Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main|Chinny}}&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Chinny|Chinny]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Shemmy&amp;diff=262</id>
		<title>Portal:Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Shemmy&amp;diff=262"/>
		<updated>2025-06-14T01:35:43Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main|Shemmy}}&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Shemmy|Shemmy]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Kuzzy&amp;diff=261</id>
		<title>Portal:Kuzzy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Kuzzy&amp;diff=261"/>
		<updated>2025-06-14T01:35:00Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main|The Kuzzy}}&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Kuzzy|Kuzzy]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=258</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=258"/>
		<updated>2025-06-14T01:28:45Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = February 18, 2025&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Svvt&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The Shemmy, or Shemmy.tv (originally Soygem.party), is an imageboard website that was founded by [[Svvt]] as a splinter of the [[Sharty]]. The main board was /soy/, until it changed to /qa/ to try to be based off of 4chan&#039;s /qa/ board instead of the [[Sharty|Shitty]]. The Shemmy went through many &amp;quot;owners&amp;quot;, buts its domain has been always owned by svvt, until he sold it when Vadim wanted to shut it down. About a month after svvt sold it, it came back with the domain Shemmy.tv. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== Shemmy History ==&lt;br /&gt;
JANURAY 2024 - JANUARY 2025:&lt;br /&gt;
&lt;br /&gt;
too ancient no one knows anything about this period&lt;br /&gt;
&lt;br /&gt;
Feralteen appeared sometime in early 2024.&lt;br /&gt;
&lt;br /&gt;
It was created by Svvt, who is portrayed as a blue guy with red glasses, and was apparaently Japanese.&lt;br /&gt;
&lt;br /&gt;
In mid-2024, it was purchased by DOLL, going under the pseudonym of Foot. After Foot, Angeleno bought the site. On 2024 August 23 Mutt made Vadim the manager.&lt;br /&gt;
&lt;br /&gt;
FEBUARY 2025:&lt;br /&gt;
&lt;br /&gt;
it was shutted down or something. the greatest period in shemmy history because of this&lt;br /&gt;
&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=256</id>
		<title>Portal:Chinny</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=256"/>
		<updated>2025-06-14T01:26:12Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main article: [[Chinny]]&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Chinny|Chinny]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=255</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=255"/>
		<updated>2025-06-14T01:24:09Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = February 18, 2025&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Svvt&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The Shemmy is an imageboard website that was founded by [[Svvt]] as a splinter of the [[Sharty]]. The main board was /soy/, until it changed to /qa/ to try to be based off of 4chan&#039;s /qa/ board instead of the [[Sharty|Shitty]]. The Shemmy went through many &amp;quot;owners&amp;quot;, buts its domain has been always owned by svvt, until he sold it when Vadim wanted to shut it down. About a month after svvt sold it, it came back with the domain Shemmy.tv. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== Shemmy History ==&lt;br /&gt;
JANURAY 2024 - JANUARY 2025:&lt;br /&gt;
&lt;br /&gt;
too ancient no one knows anything about this period&lt;br /&gt;
&lt;br /&gt;
Feralteen appeared sometime in early 2024.&lt;br /&gt;
&lt;br /&gt;
It was created by Svvt, who is portrayed as a blue guy with red glasses, and was apparaently Japanese.&lt;br /&gt;
&lt;br /&gt;
In mid-2024, it was purchased by DOLL, going under the pseudonym of Foot. After Foot, Angeleno bought the site. On 2024 August 23 Mutt made Vadim the manager.&lt;br /&gt;
&lt;br /&gt;
FEBUARY 2025:&lt;br /&gt;
&lt;br /&gt;
it was shutted down or something. the greatest period in shemmy history because of this&lt;br /&gt;
&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Shemmy&amp;diff=254</id>
		<title>Portal:Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Shemmy&amp;diff=254"/>
		<updated>2025-06-14T01:07:15Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main article: [[Shemmy]]&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Shemmy|Shemmy]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy.tv&amp;diff=253</id>
		<title>Shemmy.tv</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy.tv&amp;diff=253"/>
		<updated>2025-06-14T01:04:23Z</updated>

		<summary type="html">&lt;p&gt;Mazal: Mazal moved page Shemmy.tv to Shemmy: yeah i should just merge it with soygem.party&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=252</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=252"/>
		<updated>2025-06-14T01:04:23Z</updated>

		<summary type="html">&lt;p&gt;Mazal: Mazal moved page Shemmy.tv to Shemmy: yeah i should just merge it with soygem.party&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy.tv&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = February 18, 2025&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Vadim&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shemmy.tv&#039;&#039;&#039;, or the just the Shemmy, is an imageboard website themed around 4chan&#039;s /qa/ board. It is the successor to [[Soygem.party]]. The creation of the site happened about a month after [[Vadim]] shut down Soygem.party, with Svvt selling the domain in January 2025. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== SHEMMY HISTORY ==&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=251</id>
		<title>Portal:Schlog</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=251"/>
		<updated>2025-06-14T01:02:55Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main article: [[Schlog]]&lt;br /&gt;
&lt;br /&gt;
also see catagory: [[:Category:Schlog| Shlog]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Chinny&amp;diff=249</id>
		<title>Chinny</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Chinny&amp;diff=249"/>
		<updated>2025-06-14T01:01:49Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=248</id>
		<title>Portal:Chinny</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Chinny&amp;diff=248"/>
		<updated>2025-06-14T01:01:23Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Current Imageboard: [[Chinny]]&lt;br /&gt;
&lt;br /&gt;
Also see the category [[:Category:Chinny|Chinny]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=247</id>
		<title>Shemmy</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Shemmy&amp;diff=247"/>
		<updated>2025-06-13T23:25:35Z</updated>

		<summary type="html">&lt;p&gt;Mazal: move some of it to soygem.party article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Imageboard Site&lt;br /&gt;
|imageboard_name = Shemmy.tv&lt;br /&gt;
|imageboard_logo = [[File:Shemmytv2.png|150px]]&lt;br /&gt;
|date_founded = February 18, 2025&lt;br /&gt;
|date_defunct = &lt;br /&gt;
|creator = Vadim&lt;br /&gt;
|owner = Vadim&lt;br /&gt;
|major_boards = /qa/&lt;br /&gt;
|total_posts = 750,049&lt;br /&gt;
|notable_events = being dead&lt;br /&gt;
|homepage = https://shemmy.tv&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shemmy.tv&#039;&#039;&#039;, or the just the Shemmy, is an imageboard website themed around 4chan&#039;s /qa/ board. It is the successor to [[Soygem.party]]. The creation of the site happened about a month after [[Vadim]] shut down Soygem.party, with Svvt selling the domain in January 2025. Currently it&#039;s one of the deadest niggers to ever dead nigger but it used to be alive or something supposedly.&lt;br /&gt;
&lt;br /&gt;
== SHEMMY HISTORY ==&lt;br /&gt;
February 2025:&lt;br /&gt;
&lt;br /&gt;
it came up or something.&lt;br /&gt;
&lt;br /&gt;
APRIL 2025:&lt;br /&gt;
&lt;br /&gt;
it was down but came back like april 20th&lt;br /&gt;
&lt;br /&gt;
MAY 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
JUNE 2025:&lt;br /&gt;
&lt;br /&gt;
not shutted down but no posts&lt;br /&gt;
&lt;br /&gt;
[[Category:Imageboards]]&lt;br /&gt;
[[Category:Shemmy]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=SNCApedia:Rules&amp;diff=245</id>
		<title>SNCApedia:Rules</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=SNCApedia:Rules&amp;diff=245"/>
		<updated>2025-06-13T23:11:43Z</updated>

		<summary type="html">&lt;p&gt;Mazal: doxxing is shemmy kulchur lol&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Your edits will not be approved or reverted if it violates these rules.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# No content illegal in the United States.&lt;br /&gt;
# You must be at least 16 to use this wiki.&lt;br /&gt;
# Advocating for pedophilia, zoophilia, and zoosadism is not allowed (even if ironic).&lt;br /&gt;
# Do not upload NSFW content unless it is censored. Linking to it is fine, but give warnings.&lt;br /&gt;
# Pages should be in english.&lt;br /&gt;
# Pages should be related to the broader soysphere.&lt;br /&gt;
# You can &amp;quot;steal&amp;quot; templates, but do not plagiarize articles available on other wikis.&lt;br /&gt;
# Making edits that lower the quality of a page is not permitted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Repeated rule breaking will result in a ban.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Breaking rule 1, 2, or unironically 3, will result in an instant ban.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Category:Drawfags&amp;diff=244</id>
		<title>Category:Drawfags</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Category:Drawfags&amp;diff=244"/>
		<updated>2025-06-13T23:09:01Z</updated>

		<summary type="html">&lt;p&gt;Mazal: Created page with &amp;quot;faggots&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;faggots&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=B_B_GHAST&amp;diff=243</id>
		<title>B B GHAST</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=B_B_GHAST&amp;diff=243"/>
		<updated>2025-06-13T23:06:54Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person|name=James Luther|gender=Male|occupation=Soybooru namefag|years active=2024-Present}}&lt;br /&gt;
&#039;&#039;&#039;B_B_GHAST&#039;&#039;&#039;, also known as James Luther from Tulare California, is a white Soytan enthusiast known for being Anti-Goon and Anti-Degeneracy. He is a kind and unbothered fella who was doxxed for no reason. At one point he had a black romantic partner. He currently is making a body pillow of his wiafu&amp;lt;ref&amp;gt;[https://xcancel.com/B_B_GHAST/status/1933008812342194241#m]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Fan Mail: ===&lt;br /&gt;
You can send him drawings of Soytan (no porn please) on [https://bb https://bbghast.straw.page] which he might share on his Xitter.&lt;br /&gt;
&lt;br /&gt;
==== Links: ====&lt;br /&gt;
[https://www.x.com/b_b_ghast Twitter]&lt;br /&gt;
&lt;br /&gt;
[https://www.soyjakblog.com/members/b_b_ghast.1017 Schlog]&lt;br /&gt;
&lt;br /&gt;
[[Category:Soybooru]]&lt;br /&gt;
[[Category:Namefags]]&lt;br /&gt;
[[Category:Drawfags]]&lt;br /&gt;
[[Category:Schlog]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=User_talk:Redditor&amp;diff=242</id>
		<title>User talk:Redditor</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=User_talk:Redditor&amp;diff=242"/>
		<updated>2025-06-13T22:42:40Z</updated>

		<summary type="html">&lt;p&gt;Mazal: /* might as well make you owner */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== might as well make you owner ==&lt;br /&gt;
&lt;br /&gt;
youre putting a lot of effort into this site, more than me, i thank you for that [[User:Mazal|Mazal]] ([[User talk:Mazal|talk]]) 22:42, 13 June 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Main_Page&amp;diff=241</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Main_Page&amp;diff=241"/>
		<updated>2025-06-13T22:39:55Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Shit nobody cares about science lover.png|thumb|the mascot for this wiki]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;strong&amp;gt;Welcome to SNCApedia&amp;lt;/strong&amp;gt; ===&lt;br /&gt;
This is a wiki for the broader soysphere. Feel free to make pages about soysphere websites, literal whos, and happenings/drama.&lt;br /&gt;
&lt;br /&gt;
Please read the [[SNCApedia:Rules|rules]] before editing.&lt;br /&gt;
&lt;br /&gt;
== Community Portals ==&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#dcfffb; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Mameson.png|x44px|link=Portal:Shemmy]] [[Portal:Shemmy|&amp;lt;span style=&amp;quot;color:#34345C;&amp;quot;&amp;gt;Shemmy&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#efefef; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Kuzzy.png|x44px|link=Portal:Kuzzy]] [[Portal:Kuzzy|&amp;lt;span style=&amp;quot;color:#ff6600;&amp;quot;&amp;gt;Kuzzy&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#3a3a3a; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Le Pol Face.png|x44px|link=Portal:Chinny]] [[Portal:Chinny|&amp;lt;span style=&amp;quot;color:#f0f0f0;&amp;quot;&amp;gt;Chinny&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#eef2ff; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Schlogcuck.png|x44px|link=Portal:Schlog]] [[Portal:Schlog|&amp;lt;span style=&amp;quot;color:#820f0f;&amp;quot;&amp;gt;Schlog&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== other to make ===&lt;br /&gt;
* [[Portal:Shroom|Shroom]]&lt;br /&gt;
* [[Portal:Zarty|Zarty]]&lt;br /&gt;
* [[Portal:Sharty|Sharty]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Liam&amp;diff=240</id>
		<title>Liam</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Liam&amp;diff=240"/>
		<updated>2025-06-13T22:33:56Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Category:Schlog&amp;diff=239</id>
		<title>Category:Schlog</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Category:Schlog&amp;diff=239"/>
		<updated>2025-06-13T22:32:33Z</updated>

		<summary type="html">&lt;p&gt;Mazal: Created page with &amp;quot;Schlog Portal&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Portal:Schlog|Schlog Portal]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=238</id>
		<title>Portal:Schlog</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Portal:Schlog&amp;diff=238"/>
		<updated>2025-06-13T22:31:19Z</updated>

		<summary type="html">&lt;p&gt;Mazal: Created page with &amp;quot;Main site: Soyjakblog.com  also see catagory:  Shlog  WIP&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main site: [[Soyjakblog.com]]&lt;br /&gt;
&lt;br /&gt;
also see catagory: [[:Category:Schlog| Shlog]]&lt;br /&gt;
&lt;br /&gt;
WIP&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Soyteen_Liker&amp;diff=237</id>
		<title>Soyteen Liker</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Soyteen_Liker&amp;diff=237"/>
		<updated>2025-06-13T22:29:33Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person|name=Soyteen Liker|nationality=Cuban-American|gender=Female|years active=2024-2025|occupation=soyjak blog user}}&lt;br /&gt;
&#039;&#039;&#039;Soyteen Liker&#039;&#039;&#039; is a [https://www.soyjakblog.com soyjak.blog] oldGOD. She&#039;s one of the most beautiful, stunning, and validating users in Schlogs history. She&#039;s known for creating engaging threads as well as being a kind fella. She was banned on 06/10/2025 over false grooming accusations.&lt;br /&gt;
&lt;br /&gt;
=== Profile: ===&lt;br /&gt;
https://www.soyjakblog.com/members/soyteen-liker.147&lt;br /&gt;
&lt;br /&gt;
[[Category:Schlog]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Main_Page&amp;diff=236</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Main_Page&amp;diff=236"/>
		<updated>2025-06-13T22:28:28Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Shit nobody cares about science lover.png|thumb|the mascot for this wiki]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;strong&amp;gt;Welcome to SNCApedia&amp;lt;/strong&amp;gt; ===&lt;br /&gt;
This is a wiki for the broader soysphere. Feel free to make pages about soysphere websites, literal whos, and happenings/drama.&lt;br /&gt;
&lt;br /&gt;
Please read the [[SNCApedia:Rules|rules]] before editing.&lt;br /&gt;
&lt;br /&gt;
== Community Portals ==&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#dcfffb; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Mameson.png|x44px|link=Portal:Shemmy]] [[Portal:Shemmy|&amp;lt;span style=&amp;quot;color:#34345C;&amp;quot;&amp;gt;Shemmy&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#efefef; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Kuzzy.png|x44px|link=Portal:Kuzzy]] [[Portal:Kuzzy|&amp;lt;span style=&amp;quot;color:#ff6600;&amp;quot;&amp;gt;Kuzzy&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#3a3a3a; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Le Pol Face.png|x44px|link=Portal:Chinny]] [[Portal:Chinny|&amp;lt;span style=&amp;quot;color:#f0f0f0;&amp;quot;&amp;gt;Chinny&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li style=&amp;quot;display:inline-block; width:170px; height:60px; background-color:#eef2ff; border-radius:5px; font-size:15pt; padding:0 5px; text-align:center; vertical-align:top;&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;vertical-align:middle;&amp;quot;&amp;gt;[[File:Schlogcuck.png|x44px|link=Portal:Schlog]] [[Portal:Schlog|&amp;lt;span style=&amp;quot;color:#820f0f;&amp;quot;&amp;gt;Schlog&amp;lt;/span&amp;gt;]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== other to make ===&lt;br /&gt;
* [[Portal:Shroom|Shroom]]&lt;br /&gt;
* [[Portal:Zarty|Zarty]]&lt;br /&gt;
* [[Portal:Schlog|Schlog]]&lt;br /&gt;
* [[Portal:Sharty|Sharty]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=File:Schlogcuck.png&amp;diff=235</id>
		<title>File:Schlogcuck.png</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=File:Schlogcuck.png&amp;diff=235"/>
		<updated>2025-06-13T22:27:16Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=B_B_GHAST&amp;diff=233</id>
		<title>B B GHAST</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=B_B_GHAST&amp;diff=233"/>
		<updated>2025-06-13T22:17:40Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person|name=James Luther|gender=Male|occupation=Soybooru namefag|years active=2024-Present}}&lt;br /&gt;
&#039;&#039;&#039;B_B_GHAST&#039;&#039;&#039;, also known as James Luther from Tulare California, is a white Soytan enthusiast known for being Anti-Goon and Anti-Degeneracy. He is a kind and unbothered fella who was doxxed for no reason. At one point he had a black romantic partner. He currently is making a body pillow of his wiafu&amp;lt;ref&amp;gt;[https://xcancel.com/B_B_GHAST/status/1933008812342194241#m]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Fan Mail: ===&lt;br /&gt;
You can send him drawings of Soytan (no porn please) on [https://bb https://bbghast.straw.page] which he might share on his Xitter.&lt;br /&gt;
&lt;br /&gt;
==== Links: ====&lt;br /&gt;
[https://www.x.com/b_b_ghast Twitter]&lt;br /&gt;
&lt;br /&gt;
[https://www.soyjakblog.com/members/b_b_ghast.1017 Schlog]&lt;br /&gt;
&lt;br /&gt;
[[Category:Soyjak.blog]]&lt;br /&gt;
[[Category:Soybooru]]&lt;br /&gt;
[[Category:Namefags]]&lt;br /&gt;
[[Category:Drawfags]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Soyteen_Liker&amp;diff=232</id>
		<title>Soyteen Liker</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Soyteen_Liker&amp;diff=232"/>
		<updated>2025-06-13T22:14:48Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person|name=Soyteen Liker|nationality=Cuban-American|gender=Female|years active=2024-2025|occupation=soyjak blog user}}&lt;br /&gt;
&#039;&#039;&#039;Soyteen Liker&#039;&#039;&#039; is a [https://www.soyjakblog.com soyjak.blog] oldGOD. She&#039;s one of the most beautiful, stunning, and validating users in Schlogs history. She&#039;s known for creating engaging threads as well as being a kind fella. She was banned on 06/10/2025 over false grooming accusations.&lt;br /&gt;
&lt;br /&gt;
=== Profile: ===&lt;br /&gt;
https://www.soyjakblog.com/members/soyteen-liker.147&lt;br /&gt;
&lt;br /&gt;
[[Category:soyjak.blog]]&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Template:Infobox_person&amp;diff=231</id>
		<title>Template:Infobox person</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Template:Infobox_person&amp;diff=231"/>
		<updated>2025-06-13T22:14:09Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;1&amp;quot; align=&amp;quot;right&amp;quot; style=&amp;quot;margin-left:1em; margin-top:0em; margin-bottom: 1em;background:white;width:300px; border: 1px solid #ddd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | {{{name|{{PAGENAME}}}}}&lt;br /&gt;
|-bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |[[File:{{{image}}}|center|250px]]&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Nationality:&#039;&#039;&#039; || {{{nationality}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Gender:&#039;&#039;&#039; || {{{gender}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Occupation:&#039;&#039;&#039; || {{{occupation}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Years active:&#039;&#039;&#039; || {{{years active}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Formatting Templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Feralteen&amp;diff=230</id>
		<title>Feralteen</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Feralteen&amp;diff=230"/>
		<updated>2025-06-13T22:13:29Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person&lt;br /&gt;
|image=Feralteen.png&lt;br /&gt;
|name=Feralteen&lt;br /&gt;
|nationality=American&lt;br /&gt;
|occupation=Shemmy namefag last boss&lt;br /&gt;
|gender=Male&lt;br /&gt;
|years active=Early 2024 - Present&lt;br /&gt;
}}&lt;br /&gt;
[[File:Feralteen.gif|thumb|Layas who??]]&lt;br /&gt;
Blogposting...oversharing...overreacting...what&#039;s there to hate about the Shemmy&#039;s most prominent namechad, Feralteen? He goes by many names: feralcuck, feralshit, feralnigger, weepel, and weepedo.&lt;br /&gt;
&lt;br /&gt;
Feralteen is the our little comedian, the PPH BVLL of the Shemmy, the most pedophilic motherf*cker to ever disgrace the earth, who groomed the 15-year-old Shemmy artfag Layas. She committed suicide some time later, but, at least...atleast she was [[The Kuzzy|avenged]]...&lt;br /&gt;
&lt;br /&gt;
He is active in the Cytube, he has been on the Shemmy for longer than its entire staff team. FeralGOD loves Neil Cicierega, aka Lemon Demon. He loves Hatsune Miku and gifs of things rotating. He&#039;s so quirky... He is openly autistic and in the past he liked to post &amp;quot;gn&amp;quot; every time he slept.&lt;br /&gt;
&lt;br /&gt;
Nigga tried vandalizing this page 😂&lt;br /&gt;
&lt;br /&gt;
[[Category:Shemmy]]&lt;br /&gt;
[[Category:Shemmycucks]]&lt;br /&gt;
[[Category:Namefags]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
also he won and isn&#039;t a pedophile and he won (truth nuclear bomb) kuzzykikes just be leaky&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
	<entry>
		<id>https://www.sncapedia.org/index.php?title=Template:Infobox_person&amp;diff=229</id>
		<title>Template:Infobox person</title>
		<link rel="alternate" type="text/html" href="https://www.sncapedia.org/index.php?title=Template:Infobox_person&amp;diff=229"/>
		<updated>2025-06-13T22:12:42Z</updated>

		<summary type="html">&lt;p&gt;Mazal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;1&amp;quot; align=&amp;quot;right&amp;quot; style=&amp;quot;margin-left:1em; margin-top:1em; margin-bottom: 1em;background:white;width:300px; border: 1px solid #ddd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | {{{name|{{PAGENAME}}}}}&lt;br /&gt;
|-bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |[[File:{{{image}}}|center|250px]]&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Nationality:&#039;&#039;&#039; || {{{nationality}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Gender:&#039;&#039;&#039; || {{{gender}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Occupation:&#039;&#039;&#039; || {{{occupation}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Years active:&#039;&#039;&#039; || {{{years active}}}&lt;br /&gt;
|- bgcolor=&amp;quot;white&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Formatting Templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mazal</name></author>
	</entry>
</feed>