JUST TESTING CODE

Auto-bypass shorteners, ads, popups, adblock checks, and go directly to destinations (AdFly, downloads, Flickr, YouTube, etc.)

10short.com1bitspace.com1fichier.com1ink.cc1short.io1shortlink.com2the.space2wheelslife.com3rabsports.com4ace.online4fnet.org4hi.in7misr4day.com8tm.neta4a.siteac.totsugeki.comaceforce2apk.comadbtc.topadfoc.usadmediaflex.comadoc.pubadshnk.comadshrink.itadsssy.comadtival.networkaduzz.comadvertisingcamps.comadvupdates.comadz7short.spaceaiimsopd.comaiperceiver.comakash.classicoder.comalljntuworld.inalmontsf.comalorra.comamanguides.comanimerigel.comanmolbetiyojana.inanonym.ninjaanonymfile.comapi.gplinks.comapkadmin.comapkw.ruarkarinaukrinetwork.comarticle24.onlineaskpaccosi.comatglinks.comatomicatlas.xyzautodime.comautofaucet.dutchycorp.spaceaylink.coaysodamag.comazmath.infoaztravels.netbankshiksha.inbaristakesehatan.combchlink.xyzbebkub.combesargaji.combestfonts.probestloansoffers.combewbin.combico8.combigbtc.winbiharhelp.cobiharkhabar.cobiharkhabar.netbiit.sitebioinflu.combit4me.infobitcrypto.infobitwidgets.netbjp.org.inblog-myst.comblog.adscryp.comblog.klublog.comblog.yurasu.xyzblog4nx.combloggingwow.storeblogmado.comblogmystt.comblogsward.combnbfree.inbonloan.xyzboost.inkbowfile.combrewmasterly.combtcon.onlinebubblix.eubulkpit.combusinesssoftwarehere.combuzzheavier.comcamdigest.comcamnangvay.comcarbikenation.comcarbikesupdate.comcarfocus.sitecarjankaari.comcarsmania.netcarstopia.netcdrab.comcekip.sitecety.appchownest.comcialisstrong.onlinecinemascene.netclaimcrypto.ccclikern.comclk.kimcoinclix.cocoincroco.comcoinhub.wikicoinilium.netcoinjest.comcoinscap.infocoinsrev.comcoinsrise.netcoinstrend.netcoinsvalue.netcointox.netcomohoy.comconstructorspro.comcookinguide.netcooklike.infocountriesguide.netcpmlink.netcpmlink.procreditcarred.comcreditsgoal.comcrypto-fi.netcryptoblast.onlinecryptomonitor.incryptonews.faucetbin.comcryptonewssite.rf.gdcryptorex.netcryptorotator.websitecryptosparatodos.comcryptowidgets.netcshort.orgcurto.wincutnet.netcuturl.cccutyion.comcutynow.comdailytech-news.eudailyuploads.netdataupload.netdayuploads.comdbree.medddrive.meddieta.netddownload.comdekhe.clickdeltabtc.xyzdesiupload.codevnote.indinheiromoney.comdinoogaming.comdisheye.comdiudemy.comdjbassking.livedjremixganna.comdjstar.indlgamingvn.comdocadvice.eudocs.google.comdogefury.comdoodrive.comdouploads.netdown.fast-down.comdown.mdiaload.comdownfile.sitedownloadani.medownloader.tipsdramaticqueen.comdrinkspartner.comdrive.google.comdrop.downloaddropgalaxy.comdsmusic.indutchycorp.ovhdvjobs.inearnbee.xyzearningtime.inearnme.clubearnmoneyyt.comeasylink.gamingwithtr.comeasyshort.xyzeasyupload.ioecofriendlyz.comecosolardigest.comecq.infoecryptly.comemubliss.comencurt4.comencurtacash.comencurtadorcashlinks.comenlacito.comequickle.comewall.bizex-load.comexactpay.onlineexblog.jpexe-urls.comexego.appexeo.appexnion.comexpertvn.comez4mods.comezeviral.comf2h.iofacebook.comfalpus.comfansonlinehub.comfastcars1.comfaucetsatoshi.sitefbol.topfc-lc.xyzfile-upload.netfile-upload.orgfiledm.comfilemoon.sxfileresources.netfiles.fmfinance240.comfinancebolo.comfinancedoze.comfinancekita.comfinancemonk.netfinancenova.onlinefinancenube.comfinancenuz.comfinancerites.comfinancewada.comfingau.comfinish.wlink.usfinquizy.comfirefaucet.winfishingbreeze.comfitbodygenius.comfitdynamos.comfitnesswifi.comflamebook.eu.orgflickr.comfoodxor.comforex-22.comforex-articles.comforex-trnd.comforexrw7.comformshelp.infourlinez.comfreeat30.orgfreebitco.infreeoseocheck.comfreepreset.netfreeth.infreevpshere.comfunplayarcade.comfurtnitureplanet.netfx-22.comg34new.comgadgetbuzz.netgadialert.ingadifeed.ingalaxy-link.spacegally.shopgamco.onlinegame5s.comgamestopia.netgamezigg.comgamezizo.comgdflix.dadgeekgrove.netgeotides.netget.megafly.ingetknldgg.sitegetpczone.comgetunic.infogiftmagic.netgizmoera.comgkfun.xyzgkvstudy.comgo.linkify.rugo.paylinks.cloudgocmod.comgofile.iogofile.togold-24.netgoodmorningimg.comgoogle.comgovernmentjobvacancies.comgputrends.netgreasyfork.orggrtjobs.inhamroguide.comhandydecor.com.vnheadlinerpost.comhealthfirstweb.comhealthvainsure.sitehealthylifez.comhelpdeep.comheygirlish.comhipsonyc.comhistoryofyesterday.comhitfile.nethnablog.comhobbymania.nethomesteadfeast.comhoroscop.infohosttbuzz.comhowifx.comhowtoconcepts.comhxfile.cohyperkhabar.comify.aciir.lailespayouts.comillustrationmaster.comimagereviser.comimportantclass.comindids.comindobo.cominfonerd.orginicerita.onlineinshortnote.cominstagram.cominsurancegold.ininsuranceleadsinfo.cominsurancemyst.cominsurancexguide.cominsurelean.comitijobalert.inivnlnews.xyzjansamparks.comjioupload.comjioupload.icujixo.onlinejksb.injobinmeghalaya.injobmatric.comjobqwe.comjobydt.comjobzhub.storejunkyponk.comk2s.cckabilnews.inkaomojihub.comkaranpc.comkaryawan.co.idkatfile.comkeedabankingnews.comkeeplinks.orgkiddyshort.comkisalt.digitalknowiz0.blogspot.comkongutoday.comkrakenfiles.comkredilerim.comkut.lilabgame.iolajangspot.web.idlakhisarainews.inlanguagefluency.netlanza.melapviral.comlargestpanel.inlearncrypto.bloglifeprovy.comlinclik.comlink.freebtc.my.idlink.whf.bzlink2unlock.comlink4rev.sitelinkbulks.comlinkforearn.comlinkpayu.comlinksly.colinkspy.cclitecoin.hostlixapk.comlksfy.comlmktec.netloanforuniversity.onlineloanifyt.sitelolinez.comloopmyhub.shoplyricsbaazaar.comm.flyad.vipmajalahhewan.commakeupguide.netmaloma3arbi.blogspot.commanga4nx.sitemangareleasedate.commaqal360.commarketrook.commasrawytrend.commastkhabre.commazen-ve3.commbantul.my.idmboost.memealcold.commediafire.commega4upload.netmegadb.netmegaup.netmegaupto.commelodyspot.netmerekrut.commexa.shmgame.infomichaelemad.comminhamoto.comminhapostagem.topminimonetize.commirrored.tomitly.usmiuiku.commixrootmods.commobcupring.commobileflashtools.commodcombo.commodmania.eu.orgmodsbase.commodsfire.commohtawaa.commp4upload.commpsarkarihelp.inmukhyamantriyojanadoot.commultiup.iomyscheme.org.inmythnest.commythvista.comnashib.xyzneverdims.comnewkhabar24.comnewsamp.netnewscrypto.infonewsobjective.comnewsonnline.comnewspute.comnishankhatri.xyznyushuemu.como-pro.onlineodiadance.comodiadjremix.inodiafm.comoei.laoffeergames.onlineofferwall.meoii.laoii.sioke.ioolhonagrana.comon-scroll.comonlinetechsolution.linkorbitlo.comorigamiarthub.comountriesguide.netouo.ioouo.pressourcoincash.xyzowoanime.comoydir.compagalworldsong.compahe.pluspaid4link.compaidinsurance.inpanyhealth.compassivecryptos.xyzpastescript.compaycut.propaylinks.cloudpdfcoffee.compdfvale.competly.latpetsguide.netphimne.comphimsubmoi.comphonesparrow.compixeldrain.complacementsmela.complantsguide.netplayallgames.netplayarcade.onlineplaynano.onlineplayonpc.onlineplaypaste.compokoarcade.compoliciesreview.composterify.netproappapk.comprogramasvirtualespc.netpubghighdamage.compwrpa.ccqiwi.ggquins.usraftarsamachar.inraftarwords.inrapidgator.netrcccn.inredfea.comreidoplacar.comrekonise.comremixsounds.comrender-state.torenovatehub.netretrocove.netretrotechreborn.comrevlink.prorevly.clickrfaucet.comrokni.xyzrotizer.netsabkiyojana.comsarkarins.insastainsurance.xyzsekilastekno.comselfcareinsights.comsend.nowservicemassar.masetroom.biz.idsevayojana.insfl.glshare4u.mensharedp.comsharefile.cosharemods.comsharetext.meshareus.iosharphindi.inshort.croclix.meshortex.inshortfaster.netshortie.sbsshortit.pwshortlinks2btc.somee.comshorturlearn.xyzshrink.icushrs.linkskyfreecoins.topskyfreeshrt.topskyrimer.comslink.bidsmoner.comsnipn.ccsocial-unlock.comsocialwolvez.comsoftwaresolutionshere.comsolidcoins.netsololevelingmanga.picsspatsify.comspeakzyo.comsportswordz.comsportweb.infosproutworkers.coss7.infostockmarg.comstudyis.xyzstudywithsanjeet.insuaurl.comsub2get.comsuperheromaniac.comsurflink.techsurl.gdsurl.liswachataparnibandh.comt.metakefile.linktastywhiz.comtech5s.cotechacode.comtechawaaz.intechforu.intechiephone.comtechkhulasha.comtechleets.xyztechreviewhub.storetechsl.onlinetechxploitz.eu.orgtejtime24.comteknoasian.comtempatwisata.protempleshelp.comteqwit.comtfly.linkthanks.tinygo.cothardekho.comthe2.linkthecryptoworld.sitethemesilk.comthemezon.netthepopxp.shopthepragatishilclasses.comthinksrace.comthotpacks.xyzthunder-appz.eu.orgtii.latiktok.comtimbertales.xyztinybc.comtinygo.cotlin.metmail.iotodayheadliners.comtodogame.onlinetoilaquantri.comtopgeninsurance.comtopshare.intpi.litrangchu.newstravelinian.comtravelironguide.comtrendzilla.clubtriggeredplay.comtrimorspacks.comtuasy.comturbobit.nettutorialsaya.comtutwuri.idtvi.latvseriescentral.netudrop.comukrupdate.comup-4ever.netup-load.ioup4cash.comupdatewallah.inupfion.comupload.eeuploadev.orguploadhaven.comuploadrar.comuploadsoon.comuploady.iouprwssp.orguptomega.meusanewstoday.clubusdlink.xyzusersdrive.comutkarshonlinetest.comv34down.comvahanmitra24.invaultfind.netvbnmx.onlinevebma.comveganab.covi-music.appvideoclip.infovideolyrics.inviralmp3.com.inviralxns.comvirtualrealitieshub.comvirtuous-tech.netvitalityvista.netvk.comvocalley.comvosan.covyaapaarguru.inwanderjourney.netwastenews.xyzwatchtheeye.comweb9academy.comwebfreetools.netwellness4live.comwhatgame.xyzwii.siwiki-topia.comwinezones.inwokaz.comwordcount.imwordcounter.icuwork.inkworkupload.comworldwallpaper.topworldzc.comwp.thunder-appz.eu.orgwp2hostt.comwpcheap.netwritedroid.eu.orgwritedroid.inwriteprofit.orgxonnews.netxtrabits.clickyeifly.comyitarx.comyodharealty.comyogablogfit.comyolasblog.onlineyoshare.netyoutube.comzaku.prozegtrends.comziggame.comzippynest.onlinezygina.com

Size

98.8 KB

Version

35 (1)

Created

Dec 25, 2025

Updated

27 days ago

1// ==UserScript==
2// @name         JUST TESTING CODE
3// @namespace    bloggerpemula.pythonanywhere.com
4// @version      35 (1)
5// @description  Auto-bypass shorteners, ads, popups, adblock checks, and go directly to destinations (AdFly, downloads, Flickr, YouTube, etc.)
6// @author       Bloggerpemula
7// @match        *://t.me/*
8// @match        *://ouo.io/*
9// @match        *://4hi.in/*
10// @match        *://kut.li/*
11// @match        *://oii.si/*
12// @match        *://f2h.io/*
13// @match        *://ify.ac/*
14// @match        *://k2s.cc/*
15// @match        *://tii.la/*
16// @match        *://oei.la/*
17// @match        *://iir.la/*
18// @match        *://tvi.la/*
19// @match        *://oii.la/*
20// @match        *://tpi.li/*
21// @match        *://oke.io/*
22// @match        *://wii.si/*
23// @match        *://sfl.gl/*
24// @match        *://8tm.net/*
25// @match        *://surl.li/*
26// @match        *://surl.gd/*
27// @match        *://apkw.ru/*
28// @match        *://1ink.cc/*
29// @match        *://mexa.sh/*
30// @match        *://qiwi.gg/*
31// @match        *://tlin.me/*
32// @match        *://jksb.in/*
33// @match        *://clk.kim/*
34// @match        *://adfoc.us/*
35// @match        *://lanza.me/*
36// @match        *://ss7.info/*
37// @match        *://mitly.us/*
38// @match        *://a4a.site/*
39// @match        *://rcccn.in/*
40// @match        *://fbol.top/*
41// @match        *://send.now/*
42// @match        *://dbree.me/*
43// @match        *://files.fm/*
44// @match        *://adoc.pub/*
45// @match        *://pwrpa.cc/*
46// @match        *://snipn.cc/*
47// @match        *://quins.us/*
48// @match        *://tmail.io/*
49// @match        *://ecq.info/*
50// @match        *://work.ink/*
51// @match        *://zaku.pro/*
52// @match        *://exeo.app/*
53// @match        *://cety.app/*
54// @match        *://vosan.co/*
55// @match        *://adbtc.top/*
56// @match        *://aylink.co/*
57// @match        *://4fnet.org/*
58// @match        *://bico8.com/*
59// @match        *://boost.ink/*
60// @match        *://aduzz.com/*
61// @match        *://mboost.me/*
62// @match        *://the2.link/*
63// @match        *://cuturl.cc/*
64// @match        *://1short.io/*
65// @match        *://slink.bid/*
66// @match        *://dvjobs.in/*
67// @match        *://ouo.press/*
68// @match        *://rokni.xyz/*
69// @match        *://ewall.biz/*
70// @match        *://freeth.in/*
71// @match        *://lksfy.com/*
72// @match        *://tech5s.co/*
73// @match        *://tfly.link/*
74// @match        *://fx-22.com/*
75// @match        *://upload.ee/*
76// @match        *://gofile.io/*
77// @match        *://gofile.to/*
78// @match        *://hxfile.co/*
79// @match        *://udrop.com/*
80// @match        *://fc-lc.xyz/*
81// @match        *://wokaz.com/*
82// @match        *://exblog.jp/*
83// @match        *://pahe.plus/*
84// @match        *://tinygo.co/*
85// @match        *://cdrab.com/*
86// @match        *://petly.lat/*
87// @match        *://biit.site/*
88// @match        *://curto.win/*
89// @match        *://oydir.com/*
90// @match        *://gkfun.xyz/*
91// @match        *://vebma.com/*
92// @match        *://shrs.link/*
93// @match        *://tuasy.com/*
94// @match        *://djstar.in/*
95// @match        *://exego.app/*
96// @match        *://flickr.com/*
97// @match        *://bewbin.com/*
98// @match        *://linksly.co/*
99// @match        *://2the.space/*
100// @match        *://filedm.com/*
101// @match        *://paycut.pro/*
102// @match        *://yitarx.com/*
103// @match        *://cshort.org/*
104// @match        *://howifx.com/*
105// @match        *://dsmusic.in/*
106// @match        *://bnbfree.in/*
107// @match        *://adsssy.com/*
108// @match        *://shortex.in/*
109// @match        *://tutwuri.id/*
110// @match        *://indids.com/*
111// @match        *://redfea.com/*
112// @match        *://ddieta.net/*
113// @match        *://lmktec.net/*
114// @match        *://game5s.com/*
115// @match        *://dddrive.me/*
116// @match        *://megadb.net/*
117// @match        *://uploady.io/*
118// @match        *://up-load.io/*
119// @match        *://megaup.net/*
120// @match        *://gdflix.dad/*
121// @match        *://linkspy.cc/*
122// @match        *://zygina.com/*
123// @match        *://cekip.site/*
124// @match        *://fingau.com/*
125// @match        *://smoner.com/*
126// @match        *://yeifly.com/*
127// @match        *://shrink.icu/*
128// @match        *://gally.shop/*
129// @match        *://google.com/*
130// @match        *://shortit.pw/*
131// @match        *://labgame.io/*
132// @match        *://jobydt.com/*
133// @match        *://indobo.com/*
134// @match        *://bubblix.eu/*
135// @match        *://grtjobs.in/*
136// @match        *://devnote.in/*
137// @match        *://tinybc.com/*
138// @match        *://phimne.com/*
139// @match        *://mgame.info/*
140// @match        *://upfion.com/*
141// @match        *://miuiku.com/*
142// @match        *://adshnk.com/*
143// @match        *://teqwit.com/*
144// @match        *://odiafm.com/*
145// @match        *://shareus.io/*
146// @match        *://multiup.io/*
147// @match        *://suaurl.com/*
148// @match        *://lixapk.com/*
149// @match        *://jobqwe.com/*
150// @match        *://bjp.org.in/*
151// @match        *://nashib.xyz/*
152// @match        *://veganab.co/*
153// @match        *://falpus.com/*
154// @match        *://exnion.com/*
155// @match        *://g34new.com/*
156// @match        *://bebkub.com/*
157// @match        *://gocmod.com/*
158// @match        *://tiktok.com/*
159// @match        *://cutnet.net/*
160// @match        *://alorra.com/*
161// @match        *://bigbtc.win/*
162// @match        *://cpmlink.pro/*
163// @match        *://lolinez.com/*
164// @match        *://cointox.net/*
165// @match        *://cpmlink.net/*
166// @match        *://mirrored.to/*
167// @match        *://bonloan.xyz/*
168// @match        *://studyis.xyz/*
169// @match        *://m.flyad.vip/*
170// @match        *://bit4me.info/*
171// @match        *://earnbee.xyz/*
172// @match        *://disheye.com/*
173// @match        *://revlink.pro/*
174// @match        *://yoshare.net/*
175// @match        *://revly.click/*
176// @match        *://clikern.com/*
177// @match        *://link.whf.bz/*
178// @match        *://hnablog.com/*
179// @match        *://orbitlo.com/*
180// @match        *://rotizer.net/*
181// @match        *://ez4mods.com/*
182// @match        *://sharedp.com/*
183// @match        *://10short.com/*
184// @match        *://encurt4.com/*
185// @match        *://shortie.sbs/*
186// @match        *://gold-24.net/*
187// @match        *://karanpc.com/*
188// @match        *://filemoon.sx/*
189// @match        *://ex-load.com/*
190// @match        *://hitfile.net/*
191// @match        *://sub2get.com/*
192// @match        *://bowfile.com/*
193// @match        *://earnme.club/*
194// @match        *://topshare.in/*
195// @match        *://uptomega.me/*
196// @match        *://linclik.com/*
197// @match        *://up4cash.com/*
198// @match        *://coinclix.co/*
199// @match        *://foodxor.com/*
200// @match        *://pdfvale.com/*
201// @match        *://wpcheap.net/*
202// @match        *://newsamp.net/*
203// @match        *://gadifeed.in/*
204// @match        *://dekhe.click/*
205// @match        *://techforu.in/*
206// @match        *://uprwssp.org/*
207// @match        *://adshrink.it/*
208// @match        *://bulkpit.com/*
209// @match        *://diudemy.com/*
210// @match        *://blog4nx.com/*
211// @match        *://ziggame.com/*
212// @match        *://azmath.info/*
213// @match        *://bchlink.xyz/*
214// @match        *://usdlink.xyz/*
215// @match        *://worldzc.com/*
216// @match        *://4ace.online/*
217// @match        *://katfile.com/*
218// @match        *://v34down.com/*
219// @match        *://rfaucet.com/*
220// @match        *://cutyion.com/*
221// @match        *://cutynow.com/*
222// @match        *://jixo.online/*
223// @match        *://comohoy.com/*
224// @match        *://xonnews.net/*
225// @match        *://share4u.men/*
226// @match        *://mohtawaa.com/*
227// @match        *://anonym.ninja/*
228// @match        *://enlacito.com/*
229// @match        *://bioinflu.com/*
230// @match        *://rekonise.com/*
231// @match        *://merekrut.com/*
232// @match        *://deltabtc.xyz/*
233// @match        *://getunic.info/*
234// @match        *://forex-22.com/*
235// @match        *://vocalley.com/*
236// @match        *://winezones.in/*
237// @match        *://kabilnews.in/*
238// @match        *://techawaaz.in/*
239// @match        *://biharhelp.co/*
240// @match        *://themezon.net/*
241// @match        *://vi-music.app/*
242// @match        *://sarkarins.in/*
243// @match        *://viralxns.com/*
244// @match        *://coinjest.com/*
245// @match        *://dogefury.com/*
246// @match        *://almontsf.com/*
247// @match        *://offerwall.me/*
248// @match        *://freebitco.in/*
249// @match        *://finquizy.com/*
250// @match        *://vbnmx.online/*
251// @match        *://ezeviral.com/*
252// @match        *://forexrw7.com/*
253// @match        *://whatgame.xyz/*
254// @match        *://apkadmin.com/*
255// @match        *://megaupto.com/*
256// @match        *://1fichier.com/*
257// @match        *://sharefile.co/*
258// @match        *://turbobit.net/*
259// @match        *://up-4ever.net/*
260// @match        *://o-pro.online/*
261// @match        *://uploadev.org/*
262// @match        *://emubliss.com/*
263// @match        *://btcon.online/*
264// @match        *://blogmado.com/*
265// @match        *://doodrive.com/*
266// @match        *://modsbase.com/*
267// @match        *://modcombo.com/*
268// @match        *://atglinks.com/*
269// @match        *://linkpayu.com/*
270// @match        *://wordcount.im/*
271// @match        *://freeat30.org/*
272// @match        *://ivnlnews.xyz/*
273// @match        *://coinhub.wiki/*
274// @match        *://autodime.com/*
275// @match        *://gamezizo.com/*
276// @match        *://mealcold.com/*
277// @match        *://gkvstudy.com/*
278// @match        *://geotides.net/*
279// @match        *://chownest.com/*
280// @match        *://mythnest.com/*
281// @match        *://gizmoera.com/*
282// @match        *://speakzyo.com/*
283// @match        *://formshelp.in/*
284// @match        *://newspute.com/*
285// @match        *://gadialert.in/*
286// @match        *://coinsrev.com/*
287// @match        *://wp2hostt.com/*
288// @match        *://helpdeep.com/*
289// @match        *://maqal360.com/*
290// @match        *://docadvice.eu/*
291// @match        *://gamezigg.com/*
292// @match        *://modsfire.com/*
293// @match        *://lapviral.com/*
294// @match        *://skyrimer.com/*
295// @match        *://aiimsopd.com/*
296// @match        *://infonerd.org/*
297// @match        *://expertvn.com/*
298// @match        *://spatsify.com/*
299// @match        *://exe-urls.com/*
300// @match        *://owoanime.com/*
301// @match        *://gamco.online/*
302// @match        *://hipsonyc.com/*
303// @match        *://sharetext.me/*
304// @match        *://ecryptly.com/*
305// @match        *://equickle.com/*
306// @match        *://coincroco.com/*
307// @match        *://surflink.tech/*
308// @match        *://bestfonts.pro/*
309// @match        *://techleets.xyz/*
310// @match        *://sharphindi.in/*
311// @match        *://nyushuemu.com/*
312// @match        *://jioupload.com/*
313// @match        *://jobzhub.store/*
314// @match        *://crypto-fi.net/*
315// @match        *://neverdims.com/*
316// @match        *://keeplinks.org/*
317// @match        *://aysodamag.com/*
318// @match        *://1bitspace.com/*
319// @match        *://zegtrends.com/*
320// @match        *://junkyponk.com/*
321// @match        *://mythvista.com/*
322// @match        *://blog-myst.com/*
323// @match        *://odiadance.com/*
324// @match        *://wastenews.xyz/*
325// @match        *://fourlinez.com/*
326// @match        *://stockmarg.com/*
327// @match        *://jobmatric.com/*
328// @match        *://techsl.online/*
329// @match        *://blogsward.com/*
330// @match        *://playpaste.com/*
331// @match        *://jioupload.icu/*
332// @match        *://easyshort.xyz/*
333// @match        *://besargaji.com/*
334// @match        *://thardekho.com/*
335// @match        *://fastcars1.com/*
336// @match        *://go.linkify.ru/*
337// @match        *://easyupload.io/*
338// @match        *://mp4upload.com/*
339// @match        *://drop.download/*
340// @match        *://douploads.net/*
341// @match        *://takefile.link/*
342// @match        *://sharemods.com/*
343// @match        *://desiupload.co/*
344// @match        *://thotpacks.xyz/*
345// @match        *://7misr4day.com/*
346// @match        *://ddownload.com/*
347// @match        *://pdfcoffee.com/*
348// @match        *://loanifyt.site/*
349// @match        *://litecoin.host/*
350// @match        *://downfile.site/*
351// @match        *://uploadrar.com/*
352// @match        *://getpczone.com/*
353// @match        *://mediafire.com/*
354// @match        *://paid4link.com/*
355// @match        *://linkbulks.com/*
356// @match        *://themesilk.com/*
357// @match        *://link4rev.site/*
358// @match        *://geekgrove.net/*
359// @match        *://cryptorex.net/*
360// @match        *://cooklike.info/*
361// @match        *://coinilium.net/*
362// @match        *://mbantul.my.id/*
363// @match        *://carsmania.net/*
364// @match        *://petsguide.net/*
365// @match        *://gputrends.net/*
366// @match        *://carstopia.net/*
367// @match        *://coinsrise.net/*
368// @match        *://giftmagic.net/*
369// @match        *://retrocove.net/*
370// @match        *://vaultfind.net/*
371// @match        *://lifeprovy.com/*
372// @match        *://tastywhiz.com/*
373// @match        *://carfocus.site/*
374// @match        *://coinscap.info/*
375// @match        *://sportweb.info/*
376// @match        *://tejtime24.com/*
377// @match        *://mazen-ve3.com/*
378// @match        *://hosttbuzz.com/*
379// @match        *://blogmystt.com/*
380// @match        *://thepopxp.shop/*
381// @match        *://on-scroll.com/*
382// @match        *://horoscop.info/*
383// @match        *://minhamoto.com/*
384// @match        *://camdigest.com/*
385// @match        *://sevayojana.in/*
386// @match        *://manga4nx.site/*
387// @match        *://trangchu.news/*
388// @match        *://techacode.com/*
389// @match        *://aztravels.net/*
390// @match        *://posterify.net/*
391// @match        *://ukrupdate.com/*
392// @match        *://writedroid.in/*
393// @match        *://proappapk.com/*
394// @match        *://greasyfork.org/*
395// @match        *://claimcrypto.cc/*
396// @match        *://xtrabits.click/*
397// @match        *://1shortlink.com/*
398// @match        *://panyhealth.com/*
399// @match        *://karyawan.co.id/*
400// @match        *://marketrook.com/*
401// @match        *://kaomojihub.com/*
402// @match        *://biharkhabar.co/*
403// @match        *://teknoasian.com/*
404// @match        *://uploadsoon.com/*
405// @match        *://itijobalert.in/*
406// @match        *://kiddyshort.com/*
407// @match        *://pokoarcade.com/*
408// @match        *://financenuz.com/*
409// @match        *://bankshiksha.in/*
410// @match        *://odiadjremix.in/*
411// @match        *://solidcoins.net/*
412// @match        *://animerigel.com/*
413// @match        *://3rabsports.com/*
414// @match        *://dayuploads.com/*
415// @match        *://workupload.com/*
416// @match        *://rapidgator.net/*
417// @match        *://freepreset.net/*
418// @match        *://dropgalaxy.com/*
419// @match        *://anonymfile.com/*
420// @match        *://downloadani.me/*
421// @match        *://amanguides.com/*
422// @match        *://askpaccosi.com/*
423// @match        *://earningtime.in/*
424// @match        *://usersdrive.com/*
425// @match        *://getknldgg.site/*
426// @match        *://kredilerim.com/*
427// @match        *://pixeldrain.com/*
428// @match        *://dutchycorp.ovh/*
429// @match        *://paylinks.cloud/*
430// @match        *://get.megafly.in/*
431// @match        *://insurelean.com/*
432// @match        *://finance240.com/*
433// @match        *://fitdynamos.com/*
434// @match        *://dataupload.net/*
435// @match        *://bitwidgets.net/*
436// @match        *://melodyspot.net/*
437// @match        *://hobbymania.net/*
438// @match        *://gamestopia.net/*
439// @match        *://gadgetbuzz.net/*
440// @match        *://coinsvalue.net/*
441// @match        *://coinstrend.net/*
442// @match        *://wiki-topia.com/*
443// @match        *://bitcrypto.info/*
444// @match        *://raftarwords.in/*
445// @match        *://thinksrace.com/*
446// @match        *://loopmyhub.shop/*
447// @match        *://videoclip.info/*
448// @match        *://firefaucet.win/*
449// @match        *://videolyrics.in/*
450// @match        *://mobcupring.com/*
451// @match        *://advupdates.com/*
452// @match        *://heygirlish.com/*
453// @match        *://mastkhabre.com/*
454// @match        *://setroom.biz.id/*
455// @match        *://dlgamingvn.com/*
456// @match        *://phimsubmoi.com/*
457// @match        *://hamroguide.com/*
458// @match        *://forex-trnd.com/*
459// @match        *://kisalt.digital/*
460// @match        *://kongutoday.com/*
461// @match        *://camnangvay.com/*
462// @match        *://shortfaster.net/*
463// @match        *://web9academy.com/*
464// @match        *://ourcoincash.xyz/*
465// @match        *://financenube.com/*
466// @match        *://mixrootmods.com/*
467// @match        *://pastescript.com/*
468// @match        *://exactpay.online/*
469// @match        *://olhonagrana.com/*
470// @match        *://blog.yurasu.xyz/*
471// @match        *://creditsgoal.com/*
472// @match        *://yogablogfit.com/*
473// @match        *://newkhabar24.com/*
474// @match        *://aiperceiver.com/*
475// @match        *://myscheme.org.in/*
476// @match        *://biharkhabar.net/*
477// @match        *://newsonnline.com/*
478// @match        *://alljntuworld.in/*
479// @match        *://updatewallah.in/*
480// @match        *://vyaapaarguru.in/*
481// @match        *://viralmp3.com.in/*
482// @match        *://carjankaari.com/*
483// @match        *://adz7short.space/*
484// @match        *://vahanmitra24.in/*
485// @match        *://link2unlock.com/*
486// @match        *://fitnesswifi.com/*
487// @match        *://earnmoneyyt.com/*
488// @match        *://dinoogaming.com/*
489// @match        *://financemonk.net/*
490// @match        *://encurtacash.com/*
491// @match        *://finish.wlink.us/*
492// @match        *://watchtheeye.com/*
493// @match        *://todogame.online/*
494// @match        *://docs.google.com/*
495// @match        *://krakenfiles.com/*
496// @match        *://file-upload.net/*
497// @match        *://uploadhaven.com/*
498// @match        *://mega4upload.net/*
499// @match        *://ilespayouts.com/*
500// @match        *://file-upload.org/*
501// @match        *://playnano.online/*
502// @match        *://buzzheavier.com/*
503// @match        *://michaelemad.com/*
504// @match        *://largestpanel.in/*
505// @match        *://financebolo.com/*
506// @match        *://jansamparks.com/*
507// @match        *://financewada.com/*
508// @match        *://linkforearn.com/*
509// @match        *://wordcounter.icu/*
510// @match        *://skyfreeshrt.top/*
511// @match        *://playonpc.online/*
512// @match        *://2wheelslife.com/*
513// @match        *://admediaflex.com/*
514// @match        *://financekita.com/*
515// @match        *://templeshelp.com/*
516// @match        *://atomicatlas.xyz/*
517// @match        *://cookinguide.net/*
518// @match        *://cinemascene.net/*
519// @match        *://plantsguide.net/*
520// @match        *://makeupguide.net/*
521// @match        *://renovatehub.net/*
522// @match        *://techiephone.com/*
523// @match        *://render-state.to/*
524// @match        *://djbassking.live/*
525// @match        *://sportswordz.com/*
526// @match        *://remixsounds.com/*
527// @match        *://sabkiyojana.com/*
528// @match        *://newscrypto.info/*
529// @match        *://writeprofit.org/*
530// @match        *://trendzilla.club/*
531// @match        *://inshortnote.com/*
532// @match        *://reidoplacar.com/*
533// @match        *://yodharealty.com/*
534// @match        *://downloader.tips/*
535// @match        *://modmania.eu.org/*
536// @match        *://travelinian.com/*
537// @match        *://timbertales.xyz/*
538// @match        *://hyperkhabar.com/*
539// @match        *://freevpshere.com/*
540// @match        *://api.gplinks.com/*
541// @match        *://financedoze.com/*
542// @match        *://adtival.network/*
543// @match        *://drive.google.com/*
544// @match        *://socialwolvez.com/*
545// @match        *://inicerita.online/*
546// @match        *://flamebook.eu.org/*
547// @match        *://trimorspacks.com/*
548// @match        *://tutorialsaya.com/*
549// @match        *://zippynest.online/*
550// @match        *://sproutworkers.co/*
551// @match        *://ac.totsugeki.com/*
552// @match        *://financerites.com/*
553// @match        *://mpsarkarihelp.in/*
554// @match        *://aceforce2apk.com/*
555// @match        *://phonesparrow.com/*
556// @match        *://creditcarred.com/*
557// @match        *://thanks.tinygo.co/*
558// @match        *://short.croclix.me/*
559// @match        *://techkhulasha.com/*
560// @match        *://shorturlearn.xyz/*
561// @match        *://blog.adscryp.com/*
562// @match        *://dailyuploads.net/*
563// @match        *://imagereviser.com/*
564// @match        *://tempatwisata.pro/*
565// @match        *://cryptomonitor.in/*
566// @match        *://djremixganna.com/*
567// @match        *://minimonetize.com/*
568// @match        *://learncrypto.blog/*
569// @match        *://yolasblog.online/*
570// @match        *://skyfreecoins.top/*
571// @match        *://webfreetools.net/*
572// @match        *://playallgames.net/*
573// @match        *://ecofriendlyz.com/*
574// @match        *://brewmasterly.com/*
575// @match        *://insurancegold.in/*
576// @match        *://healthylifez.com/*
577// @match        *://sekilastekno.com/*
578// @match        *://majalahhewan.com/*
579// @match        *://article24.online/*
580// @match        *://servicemassar.ma/*
581// @match        *://paidinsurance.in/*
582// @match        *://nishankhatri.xyz/*
583// @match        *://masrawytrend.com/*
584// @match        *://blog.klublog.com/*
585// @match        *://toilaquantri.com/*
586// @match        *://lajangspot.web.id/*
587// @match        *://wellness4live.com/*
588// @match        *://triggeredplay.com/*
589// @match        *://minhapostagem.top/*
590// @match        *://bloggingwow.store/*
591// @match        *://lakhisarainews.in/*
592// @match        *://fishingbreeze.com/*
593// @match        *://lyricsbaazaar.com/*
594// @match        *://carbikenation.com/*
595// @match        *://fileresources.net/*
596// @match        *://jobinmeghalaya.in/*
597// @match        *://dramaticqueen.com/*
598// @match        *://usanewstoday.club/*
599// @match        *://galaxy-link.space/*
600// @match        *://playarcade.online/*
601// @match        *://vitalityvista.net/*
602// @match        *://newsobjective.com/*
603// @match        *://cryptowidgets.net/*
604// @match        *://ountriesguide.net/*
605// @match        *://wanderjourney.net/*
606// @match        *://virtuous-tech.net/*
607// @match        *://freeoseocheck.com/*
608// @match        *://funplayarcade.com/*
609// @match        *://origamiarthub.com/*
610// @match        *://fitbodygenius.com/*
611// @match        *://dailytech-news.eu/*
612// @match        *://drinkspartner.com/*
613// @match        *://raftarsamachar.in/*
614// @match        *://fansonlinehub.com/*
615// @match        *://insurancemyst.com/*
616// @match        *://down.mdiaload.com/*
617// @match        *://go.paylinks.cloud/*
618// @match        *://social-unlock.com/*
619// @match        *://howtoconcepts.com/*
620// @match        *://handydecor.com.vn/*
621// @match        *://headlinerpost.com/*
622// @match        *://dinheiromoney.com/*
623// @match        *://writedroid.eu.org/*
624// @match        *://healthfirstweb.com/*
625// @match        *://goodmorningimg.com/*
626// @match        *://pagalworldsong.com/*
627// @match        *://passivecryptos.xyz/*
628// @match        *://faucetsatoshi.site/*
629// @match        *://forex-articles.com/*
630// @match        *://offeergames.online/*
631// @match        *://financenova.online/*
632// @match        *://link.freebtc.my.id/*
633// @match        *://ecosolardigest.com/*
634// @match        *://countriesguide.net/*
635// @match        *://homesteadfeast.com/*
636// @match        *://pubghighdamage.com/*
637// @match        *://anmolbetiyojana.in/*
638// @match        *://policiesreview.com/*
639// @match        *://techxploitz.eu.org/*
640// @match        *://down.fast-down.com/*
641// @match        *://cryptoblast.online/*
642// @match        *://worldwallpaper.top/*
643// @match        *://placementsmela.com/*
644// @match        *://sastainsurance.xyz/*
645// @match        *://carbikesupdate.com/*
646// @match        *://importantclass.com/*
647// @match        *://topgeninsurance.com/*
648// @match        *://healthvainsure.site/*
649// @match        *://retrotechreborn.com/*
650// @match        *://thecryptoworld.site/*
651// @match        *://techreviewhub.store/*
652// @match        *://tvseriescentral.net/*
653// @match        *://languagefluency.net/*
654// @match        *://insurancexguide.com/*
655// @match        *://constructorspro.com/*
656// @match        *://studywithsanjeet.in/*
657// @match        *://todayheadliners.com/*
658// @match        *://cialisstrong.online/*
659// @match        *://thunder-appz.eu.org/*
660// @match        *://superheromaniac.com/*
661// @match        *://bestloansoffers.com/*
662// @match        *://travelironguide.com/*
663// @match        *://baristakesehatan.com/*
664// @match        *://cryptonewssite.rf.gd/*
665// @match        *://keedabankingnews.com/*
666// @match        *://knowiz0.blogspot.com/*
667// @match        *://furtnitureplanet.net/*
668// @match        *://selfcareinsights.com/*
669// @match        *://advertisingcamps.com/*
670// @match        *://mangareleasedate.com/*
671// @match        *://cryptosparatodos.com/*
672// @match        *://mobileflashtools.com/*
673// @match        *://akash.classicoder.com/*
674// @match        *://cryptorotator.website/*
675// @match        *://utkarshonlinetest.com/*
676// @match        *://sololevelingmanga.pics/*
677// @match        *://swachataparnibandh.com/*
678// @match        *://wp.thunder-appz.eu.org/*
679// @match        *://insuranceleadsinfo.com/*
680// @match        *://historyofyesterday.com/*
681// @match        *://illustrationmaster.com/*
682// @match        *://onlinetechsolution.link/*
683// @match        *://arkarinaukrinetwork.com/*
684// @match        *://encurtadorcashlinks.com/*
685// @match        *://virtualrealitieshub.com/*
686// @match        *://shortlinks2btc.somee.com/*
687// @match        *://programasvirtualespc.net/*
688// @match        *://cryptonews.faucetbin.com/*
689// @match        *://loanforuniversity.online/*
690// @match        *://businesssoftwarehere.com/*
691// @match        *://maloma3arbi.blogspot.com/*
692// @match        *://easylink.gamingwithtr.com/*
693// @match        *://thepragatishilclasses.com/*
694// @match        *://softwaresolutionshere.com/*
695// @match        *://governmentjobvacancies.com/*
696// @match        *://mukhyamantriyojanadoot.com/*
697// @match        *://autofaucet.dutchycorp.space/*
698// @match        *://vk.com/away.php*
699// @match        *://youtube.com/redirect*
700// @match        *://facebook.com/flx/warn/*
701// @match        *://instagram.com/linkshim/*
702// @icon         https://i.ibb.co/qgr0H1n/BASS-Blogger-Pemula.png
703// @grant        GM_setValue
704// @grant        GM_getValue
705// @grant        GM_download
706// @grant        GM_addStyle
707// @grant        GM_openInTab
708// @grant        GM_addElement
709// @grant        GM_deleteValue
710// @grant        GM_registerMenuCommand
711// @grant        GM_addValueChangeListener
712// @run-at       document-start
713// @noframes
714// @downloadURL https://update.greasyfork.org/scripts/546026/JUST%20TESTING%20CODE.user.js
715// @updateURL https://update.greasyfork.org/scripts/546026/JUST%20TESTING%20CODE.meta.js
716// ==/UserScript==
717/*
718TODO: Make the match rules more specific for popular websites (tiktok, mediafire.com) 
719// @match        *://shrinke.w+/*
720// @match        *://shrinkme.w+/*
721// @match        *://noodlemagazine.com/*
722    "oii": [
723        "oii.si",
724        "oii.la"
725    ],
726    "gofile": [
727        "gofile.io",
728        "gofile.to"
729    ],
730    "cpmlink": [
731        "cpmlink.pro",
732        "cpmlink.net"
733    ]
734*/
735const scriptId = '431691-bypass-all-shortlinks';
736const window = unsafeWindow;
737const {
738    href: currentUrl,
739    pathname,
740    host,
741    search,
742    hash
743} = location;
744const queryParams = new URLSearchParams(search);
745class ConfigUI {
746    constructor(options) {
747        this.id = options.id || "myConfigIframe";
748        this.title = options.title || "Settings";
749        this.fields = options.fields || [];
750        this.contributors = options.contributors || [];
751    }
752
753    open() {
754        document.getElementById(this.id)?.remove();
755
756        const overlay = document.createElement("div");
757        overlay.style = `
758            position:fixed; z-index:9999;
759            top:0; left:0; width:100%; height:100%;
760            background:rgba(0,0,0,0.5);
761        `;
762        document.body.appendChild(overlay);
763
764        const iframe = document.createElement('iframe');
765        iframe.id = this.id;
766        iframe.style = `
767            position: fixed;
768            top: 50%; left: 50%;
769            transform: translate(-50%, -50%);
770            width: 60%; height: 80%;
771            border: 1px solid #ccc;
772            border-radius: 8px;
773            box-shadow: 0 0 15px rgba(0,0,0,0.5);
774            z-index: 10000; background:#fff;
775        `;
776        document.body.appendChild(iframe);
777
778        const doc = iframe.contentDocument || iframe.contentWindow.document;
779        doc.body.innerHTML = `
780        <style>
781            body { font-family: Arial,sans-serif; margin:20px; color:#333; overflow-y:auto; }
782            .highlight { font-weight:bold; color:#d9534f; margin-top:20px; }
783            button { margin-top:10px; padding:5px 10px; cursor:pointer; }
784            footer ul { padding-left:0; list-style:none; }
785            a { color:#007BFF; text-decoration:none; }
786            footer { margin-top:20px; font-size:0.9em; }
787            label { display:block; margin:10px 0; }
788            a:hover { text-decoration:underline; }
789        </style>
790        <h2>${this.title}</h2>
791        <form id="cfg_form"></form>
792        <p class="highlight">Please respect if my scripts are useful for you:</p>
793        <ul>
794            <li>Support Me Via <a href="https://saweria.co/Bloggerpemula" target="_blank">https://saweria.co/Bloggerpemula</a> or Crypto</li>
795            <li>Don't try to copy-paste my scripts and share as your own.</li>
796            <li>Please don't remove or change my blog.</li>
797            <li>Disable your AdBlock on my blog. Thanks for your support!</li>
798        </ul>
799        <footer>
800            <h3>Credits & Contributors</h3>
801            <ul id="contributors"></ul>
802            Also, thank you to everyone who has contributed with good feedback and to all donors who supported the project.
803        </footer>`;
804
805        const form = doc.getElementById("cfg_form");
806
807        this.fields.forEach(f => {
808            const val = GM_getValue(f.key, f.default || "");
809            const label = document.createElement("label");
810            label.textContent = f.label || f.key;
811            form.appendChild(label);
812
813            let input = document.createElement("input");
814            if (f.type === "checkbox") input.checked = val;
815            else input.value = val;
816
817            input.type = f.type;
818            input.id = "cfg_" + f.key;
819            label.appendChild(input);
820        });
821
822        const saveBtn = document.createElement("button");
823        saveBtn.textContent = "Save";
824        form.appendChild(saveBtn);
825
826        const cancelBtn = document.createElement("button");
827        cancelBtn.textContent = "Cancel";
828        cancelBtn.style.marginLeft = "10px";
829        form.appendChild(cancelBtn);
830
831        const ul = doc.getElementById("contributors");
832        this.contributors.forEach(c => {
833            let name, desc;
834            if (typeof c === "string") {
835                name = c;
836            } else {
837                name = c.name;
838                desc = c.desc;
839            }
840            const li = document.createElement("li");
841            li.innerHTML = `<a href="https://greasyfork.org/users?q=${name}" target="_blank">@${name}</a>${desc ? ' - ' + desc : ''}`;
842            ul.appendChild(li);
843        });
844
845        const close = () => [overlay, iframe].forEach(e => e.remove());
846
847        saveBtn.addEventListener("click", () => {
848            let el, val;
849            this.fields.forEach(f => {
850                el = doc.getElementById("cfg_" + f.key);
851                val = f.type === "checkbox" ? el.checked : el.value;
852                GM_setValue(f.key, val);
853            });
854            close();
855        });
856
857        cancelBtn.addEventListener("click", close);
858        overlay.addEventListener("click", close);
859    }
860
861    get(key) {
862        const f = this.fields.find(f => f.key === key);
863        return GM_getValue(key, f ? f.default : null);
864    }
865}
866const checkbox = (key, label) => ({
867    key,
868    label,
869    default: false,
870    type: 'checkbox'
871});
872const config = new ConfigUI({
873    fields: [
874        checkbox('AutoDL', 'Auto-Download on Supported Sites'),
875        checkbox('Cmenu', 'Allow Context Menu'),
876        checkbox('Prompt', 'Disable Prompts & Notifications'),
877        checkbox('BlockFC', 'BlockFC'),
878        checkbox('Flickr', 'Flickr'),
879        checkbox('noAdb', 'Disable Adblock Detections')
880    ],
881    contributors: ['Konf', 'hacker09', 'juansi', 'NotYou', 'cunaqr', 'Rust1667', {
882        name: 'varram',
883        desc: 'provided great bypass sites'
884    }]
885});
886GM_registerMenuCommand("⚙️ Script Settings", () => config.open());
887GM_registerMenuCommand('📊 Script Metrics', async function() {
888    const url = `https://api.greasyfork.org/scripts/${scriptId}/stats.json`;
889    const data = await fetch(url).then(response => response.json());
890    let totalInstalls = 0,
891        totalUpdateChecks = 0,
892        daysCount = 0;
893
894    for (const date in data) {
895        const stats = data[date];
896        totalInstalls += stats.installs;
897        totalUpdateChecks += stats.update_checks;
898        daysCount++;
899    }
900    const averageInstalls = (totalInstalls / daysCount).toFixed(2);
901    const averageUpdateChecks = (totalUpdateChecks / daysCount).toFixed(2);
902
903    alert(
904        'Total Days: ' + daysCount + '\n' +
905        'Total Installs: ' + totalInstalls + '\n' +
906        'Total Update Checks: ' + totalUpdateChecks + '\n' +
907        'Average Installs per Day: ' + averageInstalls + '\n' +
908        'Average Update Checks per Day: ' + averageUpdateChecks
909    );
910});
911GM_registerMenuCommand('🐞 Bug Report', function() {
912    const url = `https://greasyfork.org/en/scripts/${scriptId}/feedback?attachLogs=1#new-script-discussion`;
913    GM_openInTab(url, {
914        active: true,
915        insert: true
916    });
917});
918
919let hostRunCounter = 0;
920
921function GM_onMessage(label, callback = () => {}) {
922    logger.log('GM_onMessage is on');
923    GM_addValueChangeListener('postMessage-' + label, function(_, _, newValue, remote) {
924        logger.log('inside postMessage')
925        if (remote) {
926            logger.log('inside postMessage value', {
927                newValue
928            })
929            callback(newValue);
930            GM_deleteValue('postMessage-' + label);
931        }
932    });
933}
934
935function GM_sendMessage(label, value) {
936    GM_setValue('postMessage-' + label, value);
937}
938
939String.prototype.getBetween = function(start, end) {
940    const regex = new RegExp(`(?<=${start}).*?(?=${end})`, 'g');
941    const matches = this.match(regex);
942    return matches ? matches[0] : '';
943};
944
945function setActiveElement(selector) {
946    waitForElement(selector)
947        .then(element => {
948            const temp = element.tabIndex;
949            element.tabIndex = 0;
950            element.focus();
951            element.tabIndex = temp;
952        });
953    Object.defineProperty(document, 'hidden', {
954        get: () => true,
955        configurable: true
956    });
957}
958// Element.prototype.setActive = function() {
959//     const tempTabIndex = this.tabIndex;
960//     this.tabIndex = 0;
961//     this.focus();
962//     this.tabIndex = tempTabIndex;
963//     Object.defineProperty(document, 'hidden', {
964//         get: () => true,
965//         configurable: true
966//     });
967// };
968function RSCookie(name, value = undefined, days = null) {
969    if (!name) return null;
970
971    // --- SET MODE ---
972    if (value !== undefined) {
973        let expires = '';
974        if (typeof days === 'number') {
975            const date = new Date();
976            date.setTime(date.getTime() + (days * 86400000));
977            expires = `; expires=${date.toUTCString()}`;
978        }
979
980        document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}${expires}; path=/`;
981        return true;
982    }
983
984    // --- READ MODE ---
985    const cookies = document.cookie.split(';').map(c => c.trim());
986    const cookie = cookies.find(c => c.startsWith(encodeURIComponent(name) + '='));
987    return cookie ? decodeURIComponent(cookie.split('=')[1]) : null;
988}
989
990function captchaSolved(callback, onWait = () => {}) {
991    let intervalId;
992    const stopChecking = () => clearInterval(intervalId);
993
994    waitForElement('//div[contains(@class, \'iconcaptcha-modal__body-title\') and normalize-space(text())=\'Verification complete.\'] | //*[@id=\'captcha-result\' and normalize-space()=\'Verified!\']')
995        .then(function() {
996            stopChecking();
997            callback();
998        })
999    const checkCaptcha = () => {
1000        try {
1001            const captcha = window.turnstile || window.hcaptcha || window.grecaptcha;
1002            const response = captcha.getResponse();
1003
1004            if (response) {
1005                stopChecking();
1006                callback();
1007            }
1008        } catch (error) {
1009            onWait(stopChecking);
1010        }
1011    };
1012
1013    checkCaptcha();
1014    intervalId = setInterval(checkCaptcha, 1000);
1015}
1016
1017function httpListener(callback) {
1018    const originalOpen = XMLHttpRequest.prototype.open;
1019    XMLHttpRequest.prototype.open = function(method, url) {
1020        this.addEventListener('load', () => {
1021            this.method = method;
1022            this.url = url;
1023            callback(this);
1024        });
1025        originalOpen.apply(this, arguments);
1026    };
1027}
1028
1029function waitForElement(selector, timeout = 0) {
1030    const findElement = () => {
1031        if (selector.startsWith('//')) {
1032            return document.evaluate(selector, document, null, 9).singleNodeValue;
1033        }
1034        return document.querySelector(selector);
1035    };
1036
1037    return new Promise(async (resolve, reject) => {
1038        let element = findElement();
1039        if (document.contains(element)) {
1040            return resolve(element);
1041        }
1042        const observer = new MutationObserver(() => {
1043            element = findElement();
1044            if (document.contains(element)) {
1045                observer.disconnect();
1046                resolve(element);
1047            }
1048        });
1049        observer.observe(document.documentElement, {
1050            // attributes: true,
1051            childList: true,
1052            subtree: true,
1053        });
1054        if (timeout > 0) {
1055            await waitSec(timeout)
1056            observer.disconnect();
1057            reject(new Error(`Element '${selector}' not found in time.`));
1058        }
1059    })
1060}
1061
1062function openWithReferrerPolicy(href) {
1063    GM_addElement(document.head, 'meta', {
1064        name: 'referrer',
1065        content: 'origin'
1066    })
1067    const element = GM_addElement('a', {
1068        href
1069    })
1070    element.click();
1071}
1072
1073function waitSec(s) {
1074    return new Promise(r => setTimeout(r, s * 1000));
1075}
1076
1077const domains = GM_info?.script?.matches.map(match => {
1078    const domain = match.replace(/^.*?:\/\//, '').replace(/\/.*$/, '');
1079    const parts = domain.split('.');
1080    return parts.slice(0, -1).join('.');
1081});
1082const tempdom = [...domains];
1083
1084function runIfHost(pattern, fn, ...args) {
1085    let isMatch = false, debug = false;
1086    if (pattern instanceof RegExp) {
1087        isMatch = pattern.test(host);
1088    } else if (typeof pattern === 'string') {
1089        const filterList = pattern.split('|');
1090        if (debug) {
1091            const n = domains.filter(d => filterList.includes(d));
1092            for (const d of n) {
1093                const idx = tempdom.indexOf(d);
1094                if (idx !== -1) {
1095                    tempdom.splice(idx, 1); // remove element in place
1096                }
1097                console.log(tempdom);
1098            }
1099
1100            // TODO: Print all @match patterns that are defined but never used in the global variable
1101        }
1102        if (filterList.length > 0) {
1103            const regex = new RegExp(filterList.map(t => '^' + t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'));
1104            isMatch = regex.test(host);
1105        }
1106    }
1107
1108    if (!isMatch) return;
1109
1110    hostRunCounter += 1;
1111
1112    logger.info('Function triggered', {
1113        count: hostRunCounter,
1114        pattern,
1115        fn: fn.name || fn.toString(),
1116        args
1117    });
1118
1119    fn(...args);
1120}
1121
1122
1123function goTo(url, useBlog = false) {
1124    const target = useBlog ? `${GM_info.script.namespace}?BypassResults=${url}` : url;
1125    logger.info('goTo', {
1126        target
1127    })
1128    location = target
1129}
1130
1131function createGMLogger(options = {}) {
1132    const logs = [];
1133    const maxLogs = options.maxLogs || 200;
1134    const gmKey = options.gmKey || 'tm_logs';
1135
1136    function _saveLog(entry) {
1137        logs.push(entry);
1138        if (logs.length > maxLogs) logs.shift();
1139        GM_setValue(gmKey, logs);
1140    }
1141
1142    function formatAndStoreLog(level, ...args) {
1143        const time = new Date().toLocaleTimeString();
1144        const message = args.map(arg =>
1145            (typeof arg === 'object' && arg !== null) ? JSON.stringify(arg) : String(arg)
1146        ).join(' ');
1147        const entry = `${host}: [${time}] [${level.toUpperCase()}] ${message}`;
1148        console[level](entry);
1149        _saveLog(entry);
1150    }
1151
1152    return {
1153        log: (...args) => formatAndStoreLog('log', ...args),
1154        info: (...args) => formatAndStoreLog('info', ...args),
1155        warn: (...args) => formatAndStoreLog('warn', ...args),
1156        error: (...args) => formatAndStoreLog('error', ...args),
1157        getLogs: () => [...(GM_getValue(gmKey, []))],
1158        clearLogs: () => {
1159            logs.length = 0;
1160            GM_deleteValue(gmKey);
1161            console.log('Logs cleared');
1162        }
1163    };
1164}
1165
1166const logger = new createGMLogger();
1167
1168async function elementRedirect(selector, attribute = 'href') {
1169    logger.info('elementRedirect triggered', {
1170        selector
1171    });
1172    const selectors = selector.split(', ');
1173
1174    if (selectors.length > 1) {
1175        for (const sel of selectors) elementRedirect(sel, attribute);
1176        return;
1177    }
1178
1179    const element = await waitForElement(selector);
1180    const target = element.getAttribute(attribute);
1181    logger.info('Redirecting to element attribute', {
1182        selector,
1183        target,
1184        attribute
1185    });
1186    goTo(target);
1187}
1188
1189function parameterRedirect(url, parameters) {
1190    // parameters = parameters.split(','); 
1191    // if (parameters.every(parameter => searchParams.has(parameter)))
1192    if (parameters !== undefined && !queryParams.has(parameters)) return;
1193
1194    const link = url.replace(/\$(.*)/, (_, p) => {
1195        const [paramName, queryString] = p.split(/\?/);
1196        const paramValue = queryParams.get(paramName);
1197
1198        if (!paramValue) return _;
1199
1200        return /([A-Za-z0-9]+=)$/.test(paramValue) ?
1201            atob(paramValue) :
1202            paramValue + (queryString ? '?' + queryString : '');
1203    });
1204
1205    if (link !== url) goTo(link);
1206}
1207
1208const referrerPolicy = (key) => queryParams.has(key) && openWithReferrerPolicy(atob(queryParams.get(key)));
1209
1210async function clickSel(selector, delay = 0) {
1211    const selectors = selector.split(', ');
1212
1213    if (selectors.length > 1) {
1214        for (const sel of selectors) clickSel(sel, delay);
1215        return;
1216    }
1217
1218    const element = await waitForElement(selector);
1219    if (delay > 0) {
1220        logger.info('wait before clicking on element', {
1221            delay
1222        });
1223        await waitSec(delay);
1224    }
1225    element.removeAttribute('disabled');
1226    element.removeAttribute('target');
1227    //TODO REMOVE ONCLICK
1228    if (element.tagName === 'FORM') {
1229        element.submit();
1230        logger.info('Form submitted', {
1231            selector
1232        });
1233    } else {
1234        logger.info('Clicked on element ', {
1235            selector
1236        });
1237        // element.click();
1238        ['mouseover', 'mousedown', 'mouseup', 'click'].forEach(name => {
1239            element.dispatchEvent(new MouseEvent(name, {
1240                bubbles: true,
1241                cancelable: true
1242            }));
1243        });
1244    }
1245}
1246// Any code repeated over 50 times should be moved into a separate function, or replaced with a more general function that handles most cases with minimal changes.
1247// Documentation should also be added, making it easier for other developers to contribute code and enabling AI to utilize both the code and the documentation to ensure proper integration with the system.
1248const redirectIfHost = (pattern, selector, attribute) => runIfHost(pattern, elementRedirect, selector, attribute);
1249const clickIfHost = (pattern, selector) => runIfHost(pattern, clickSel, selector);
1250const autoDownloadIfHost = (pattern, fn, ...args) => config.get('AutoDL') && runIfHost(pattern, fn, ...args);
1251const clickAfterCaptcha = (selector) => captchaSolved(() => clickSel(selector));
1252
1253// All of these functions need to be more specific.
1254runIfHost('.*', async function() {
1255    if (!config.get('Prompt')) return;
1256    logger.info('Prompt handling enabled');
1257
1258    window.alert = () => {};
1259    window.confirm = () => true;
1260    window.prompt = () => null;
1261    if (window.Notification) {
1262        Notification.requestPermission = () => Promise.resolve('denied');
1263        Object.defineProperty(window, 'Notification', {
1264            value: null,
1265            writable: false
1266        });
1267    }
1268    const selectors = [];
1269
1270    function helper(type, list) {
1271        const items = list.split(', ').map(item => `[${type}*='${item}']`);
1272        selectors.push(...items)
1273    }
1274    helper('class', 'cookie, gdpr, notice, privacy, banner, consent');
1275    helper('id', 'cookie, gdpr, notice, privacy, banner, consent');
1276    helper('role', 'dialog');
1277    helper('aria-label', 'cookie, consent, privacy')
1278
1279    // Currently waiting for a single element; might need to change this later
1280    const element = await waitForElement(selectors.join(', '));
1281    const isBanner = element.textContent.match(/cookie|consent|tracking|gdpr|privacy|accept|agree|decline|manage|preferences/i)
1282    isBanner && element.remove();
1283})
1284runIfHost('.*', function() {
1285    if (!config.get('BlockFC')) return;
1286    logger.info('focus handling enabled');
1287
1288    // window.mouseleave = true;
1289    // window.onmouseover = true;
1290    // document.hasFocus = () => true;
1291
1292    Object.defineProperty(document, 'webkitVisibilityState', {
1293        get: () => 'visible',
1294        configurable: true
1295    });
1296    Object.defineProperty(document, 'visibilityState', {
1297        get: () => 'visible',
1298        configurable: true
1299    });
1300    Object.defineProperty(document, 'hidden', {
1301        get: () => false,
1302        configurable: true
1303    });
1304
1305    const eventOptions = {
1306        capture: true,
1307        passive: true
1308    };
1309    window.addEventListener('focus', e => e.stopImmediatePropagation(), eventOptions);
1310    window.addEventListener('blur', e => e.stopImmediatePropagation(), eventOptions);
1311})
1312runIfHost('.*', function() {
1313    if (!config.get('noAdb')) return;
1314    logger.info('noAdb');
1315    const blockPattern = /(adblock(reg)?|adb(model)?|checkadblock|detect(anyadb|adblock)|justdetectadb|fuckadblock|testadblock|disable(devtools)?|devtools)/i;
1316    const re = new RegExp(blockPattern);
1317    const observer = new MutationObserver(mutations => {
1318        mutations.forEach(mutation => {
1319            mutation.addedNodes.forEach(node => {
1320                if (node.nodeType === 1 && /SCRIPT|IFRAME/.test(node.tagName)) {
1321                    const source = node.src || node.textContent || '';
1322                    re.test(source) && node.remove();
1323                }
1324            });
1325        });
1326    });
1327    observer.observe(document, {
1328        childList: true,
1329        subtree: true
1330    });
1331    document.querySelectorAll('script, iframe').forEach(element => {
1332        const source = element.src || element.textContent || '';
1333        re.test(source) && element.remove();
1334    })
1335})
1336//
1337
1338//All the code below have been tested and should work.
1339{
1340    runIfHost('vk', () => queryParams.has('to') && goTo(decodeURIComponent(queryParams.get('to'))));
1341    runIfHost('flickr', async () => {
1342        if (!config.get('Flickr')) return;
1343
1344        const photoId = currentUrl.match(/\d+/)
1345        if (!photoId) return;
1346
1347        const flickrSizes = {
1348            sq: 'Square 75',
1349            q: 'Square 150',
1350            t: 'Thumbnail',
1351            s: 'Small 240',
1352            n: 'Small 320',
1353            w: 'Small 400',
1354            m: 'Medium 500',
1355            z: 'Medium 640',
1356            c: 'Medium 800',
1357            l: 'Large 1024',
1358            h: 'Large 1600',
1359            k: 'Large 2048',
1360            '3k': 'X-Large 3K',
1361            '4k': 'X-Large 4K'
1362        };
1363        const sizesContainer = await waitForElement('.sizes');
1364
1365        Object.entries(flickrSizes).forEach(([key, label]) => {
1366            const element = GM_addElement(sizesContainer, 'li', {
1367                class: 'download-size-item',
1368                // textContent: label
1369            });
1370            const a = GM_addElement(element, 'a', {
1371                href: 'javascript:void(0)',
1372                class: 'download-image-size'
1373            })
1374            GM_addElement(a, 'span', {
1375                class: 'label',
1376                textContent: label
1377            })
1378            element.addEventListener('click', async function() {
1379                const url = `https://www.flickr.com/photos/zedzap/${photoId}/sizes/${key}/`;
1380                const html = await fetch(url).then(response => response.text());
1381                const res = html.match(/<img src="https:\/\/live.staticflickr.com\/(.*)">/);
1382                GM_download('https://live.staticflickr.com/' + res[1], `BloggerP_${photoId}_${label}.jpeg`);
1383            });
1384        });
1385    });
1386    runIfHost('drive.google', () => {
1387        const id = currentUrl.split('/').slice(-2)[0];
1388        if (currentUrl.includes('/file/d/')) {
1389            goTo(`https://drive.usercontent.google.com/download?id=${id}&export=download`);
1390        } else if (currentUrl.includes('/u/0/uc?id')) {
1391            clickSel('#download-form');
1392        }
1393    });
1394    runIfHost('adbtc', async () => {
1395        window.onbeforeunload = () => {
1396            window?.myWindow.close();
1397            window?.coinwin?.close();
1398            window.coinwin = {};
1399        };
1400        clickAfterCaptcha('input[class^=btn]');
1401        clickSel('div.col.s4 > a:not(.hide)', 1);
1402    });
1403    runIfHost('.*', function() {
1404        if (!config.get('Cmenu')) return;
1405        logger.info('RightFCL is Enabled');
1406        const events = [
1407            'contextmenu', 'copy', 'cut', 'paste',
1408            'select', 'selectstart', 'dragstart', 'drop'
1409        ];
1410        for (const eventName of events) {
1411            document.addEventListener(eventName, e => e.stopImmediatePropagation(), true);
1412        }
1413    });
1414    runIfHost('greasyfork', async function() {
1415        const currentId = currentUrl.match(/\d+/);
1416        if (currentId != scriptId.match(/\d+/)[0] || !queryParams.has('attachLogs')) {
1417            return;
1418        }
1419
1420        const comment = await waitForElement('.comment-entry');
1421        comment.value += '<b>Explain the issue:</b>\n\n\n<b>Logs:</b>\n' + logger.getLogs().join('\n')
1422    });
1423}
1424//end of "All the code below have been tested and should work."
1425// Not tested, but should work since the logic hasn’t changed much
1426{
1427    runIfHost('aylink|cpmlink', async () => {
1428        clickSel('.btn.btn-go, .btn-go');
1429        const element = await waitForElement('#main');
1430        goTo(element.getAttribute('onclick').getBetween('window.open\(', '\)'));
1431    });
1432    runIfHost('bewbin', async () => {
1433        const element = await waitForElement('.wpsafe-top > script:nth-child(4)');
1434        goTo('https://bewbin.com?safelink_redirect=' + element.textContent.getBetween('window.open(\'https://bewbin.com?safelink_redirect=', '\')'));
1435    });
1436    runIfHost('lajangspot.web', async () => {
1437        const element = await waitForElement('#wpsafe-link > script:nth-child(2)');
1438        goTo('https://lajangspot.web.id?safelink_redirect=' + element.textContent.getBetween('window.open(\'https://lajangspot.web.id?safelink_redirect=', '\')'));
1439    });
1440    redirectIfHost('adfoc', '.skip');
1441    redirectIfHost('lanza', 'a#botonGo');
1442    redirectIfHost('lolinez', 'p#url a');
1443    redirectIfHost('coincroco|surflink|cointox', '.mb-sm-0.mt-3.btnBgRed');
1444    redirectIfHost('8tm', 'a.btn.btn-secondary.btn-block.redirect');
1445    redirectIfHost('bestfonts', '.download-font-button > a:nth-child(1)');
1446    redirectIfHost('cpmlink', 'a#btn-main.btn.btn-warning.btn-lg');
1447    redirectIfHost('noodlemagazine', 'a#downloadLink.downloadBtn');
1448    redirectIfHost('mirrored', 'div.col-sm.centered.extra-top a, div.centerd > a');
1449    redirectIfHost('mohtawaa', 'a.btn.btn-success.btn-lg.get-link.enabled');
1450    redirectIfHost('techleets|bonloan|sharphindi|nyushuemu', 'a#tp-snp2');
1451    redirectIfHost('linksly', 'div.col-md-12 a');
1452    redirectIfHost('surl', '#redirect-button');
1453    runIfHost('socialwolvez', async () => {
1454        const url = `https://us-central1-social-infra-prod.cloudfunctions.net/linksService/link/guid/${pathname.substr(7)}`;
1455        const data = await fetch(url).then(response => response.json());
1456        goTo(data.link.url);
1457    });
1458    runIfHost('wellness4live|akash.classicoder|2the|inicerita', async () => {
1459        const element = await waitForElement('#landing');
1460        const data = JSON.parse(atob(element.newwpsafelink.value));
1461        goTo(data.linkr);
1462    });
1463    runIfHost('jioupload', async () => {
1464        function calculateAnswer(text) {
1465            const parts = text.replace('Solve:', '').replace(/[=?]/g, '').trim().split(/\s+/);
1466            const [num1, op, num2] = [parseInt(parts[0]), parts[1], parseInt(parts[2])];
1467            return op === '+' ? num1 + num2 : num1 - num2;
1468        }
1469        clickAfterCaptcha('#continueBtn');
1470        clickSel('form button.btn-secondary');
1471        elementRedirect('a.btn.btn-secondary[href*=\'/file/\']');
1472        const element = await waitForElement('#challenge');
1473        const input = await waitForElement('#captcha');
1474        input.value = calculateAnswer(element.textContent);
1475        clickSel('button[type=\'submit\']');
1476    });
1477    runIfHost('apkw', () => currentUrl.includes('/away') && goTo(atob(currentUrl.split('/').slice(-1))));
1478    runIfHost('4fnet', () => currentUrl.includes('/goto') && goTo(atob(currentUrl.split('/').slice(-1))));
1479    runIfHost('anonym', () => currentUrl.includes('download/') && goTo(`https://anonym.ninja/download/file/request/${currentUrl.split('/').slice(-1)[0]}`));
1480    runIfHost('filedm', async () => {
1481        const element = await waitForElement('#dlbutton');
1482        goTo(`http://cdn.directfiledl.com/getfile?id=${element.href.split('_')[1]}`);
1483    });
1484    runIfHost('flamebook.eu', async () => {
1485        // Probably not needed, but without the link I can’t be sure
1486        for (const selector of ['#button1', '#button2', '#button3'])
1487            await clickSel(selector, 3);
1488    });
1489    runIfHost('jobzhub', async () => {
1490        clickSel('#surl');
1491        await waitForElement('#next');
1492        window.startCountdown();
1493        clickSel('form.text-center', 'submit', 15);
1494    });
1495    runIfHost('enlacito', async () => {
1496        await waitSec(2);
1497        window?.DYykkzwP && goTo(window.DYykkzwP);
1498    });
1499    runIfHost('paycut', () => {
1500        if (currentUrl.includes('/ad/')) {
1501            goTo(currentUrl.replace('ad/', ''));
1502        }
1503    });
1504    runIfHost('triggeredplay', () => {
1505        if (currentUrl.includes('#')) {
1506            const usp = new URLSearchParams(hash.substring(1));
1507            usp.has('url') && goTo(atob(usp.get('url')));
1508        }
1509    });
1510    runIfHost('shortfaster', () => {
1511        const twoMinutesAgo = Date.now() - 2 * 60 * 1000;
1512        localStorage.setItem('lastRedirectTime_site1', twoMinutesAgo.toString());
1513    });
1514    runIfHost('onlinetechsolution', async () => {
1515        const element = await waitForElement('input[name=newwpsafelink]');
1516        const data = JSON.parse(atob(element.value));
1517        goTo(data.linkr);
1518    });
1519    runIfHost('crypto-fi|claimcrypto|xtrabits|web9academy|bioinflu|bico8|ourcoincash|studyis', async () => {
1520        const element = await waitForElement('#landing [name=\'go\']');
1521        const target = atob(`aH${element.value.split('aH').slice(1).join('aH')}`);
1522        goTo(target);
1523    });
1524    runIfHost('rekonise', async () => {
1525        const url = `https://api.rekonise.com/social-unlocks${pathname}`;
1526        const data = await fetch(url).then(response => response.json());
1527        goTo(data.url);
1528    });
1529    runIfHost('boost', async () => {
1530        const html = await fetch(currentUrl).then(response => response.text());
1531        goTo(atob(html.split('bufpsvdhmjybvgfncqfa=\'\')[1].split(\'\'')[0]));
1532    });
1533    runIfHost('yitarx', () => currentUrl.includes('enlace/') && goTo(atob(atob(atob(currentUrl.split('#!')[1])))));
1534    runIfHost('m.flyad', async () => {
1535        const display = await waitForElement('#captchaDisplay');
1536        const input = await waitForElement('#captchaInput');
1537        input.value = display.innerText;
1538        clickSel('button[onclick=\'validateCaptcha()\']');
1539    });
1540    runIfHost('financenube|mixrootmods|pastescript|trimorspacks', async () => {
1541        const element = await waitForElement('#wpsafe-link a');
1542        goTo(element.getAttribute('onclick').getBetween('window.open(\'', '\', \'_self\')'));
1543    });
1544    runIfHost('aduzz|tutorialsaya|baristakesehatan|merekrut|deltabtc|bit4me', async () => {
1545        const element = await waitForElement('div[id^=wpsafe] > a[rel=nofollow]');
1546        goTo(element.getAttribute('onclick').getBetween('window.open(\'', '\', \'_self\')'));
1547    });
1548    runIfHost('mboost', async () => {
1549        await waitForElement('#firstsection'); // If there is a link, check whether this line is needed.
1550        const element = await waitForElement('#__NEXT_DATA__');
1551        const target = JSON.parse(element.textContent).props.pageProps.data.targeturl;
1552        goTo(target)
1553    });
1554    runIfHost('earnbee|zippynest|getunic', () => {
1555        localStorage.setItem('earnbee_visit_data', JSON.stringify({
1556            firstUrl: currentUrl,
1557            timestamp: Date.now() - 180000
1558        }));
1559    });
1560    runIfHost('exactpay|neverdims|sproutworkers', async () => {
1561        window.onscroll = () => {};
1562        window.check2();
1563        const element = await waitForElement('[name=\'answer\']');
1564        element.addEventListener('change', window.check3);
1565    });
1566}
1567// end of "Not tested, but should work since the logic hasn’t changed much"
1568// Some of the click scripts may not work because they rely on outdated selectors referencing other elements. Each such script will need to be reviewed and updated.
1569clickIfHost('the2', '#get-link-btn');
1570clickIfHost('keeplinks', '#btnchange');
1571clickIfHost('forex-22', '#continuebutton');
1572clickIfHost('1shortlink', '#redirect-link');
1573clickIfHost('1ink|cuturl', '#countingbtn');
1574clickIfHost('1short', '#countDownForm');
1575clickIfHost('disheye', '#redirectForm');
1576clickIfHost('aysodamag', '#link1s-form');
1577clickIfHost('cryptonewssite.rf', '#dynamic-button a');
1578clickIfHost('1bitspace', '.button-element-verification');
1579clickIfHost('cshort', '.timer.redirect');
1580clickIfHost('ac.totsugeki', '.btn-lg.btn-success.btn');
1581clickIfHost('revlink', '#main-content-wrapper > button');
1582clickIfHost('panyhealth', 'form[method=\'get\']');
1583clickIfHost('minhapostagem', '#alf_continue.alf_button');
1584clickIfHost('karyawan.co', 'button#btn.bg-blue-100.text-blue-600');
1585clickIfHost('yoshare|olhonagrana', '#yuidea, #btn6');
1586clickIfHost('slink', '.btn-success.btn, #btn-generate');
1587clickIfHost('blog.yurasu', '#wcGetLink, #gotolink');
1588clickIfHost('zegtrends', '#cln, #bt1, #go');
1589clickIfHost('creditsgoal', '#tp-snp2, //button[normalize-space(text())=\'Continue\']');
1590clickIfHost('howifx|vocalley|financerites|yogablogfit|healthfirstweb|junkyponk|mythvista|blog-myst|ss7|sololevelingmanga', '#getlink')
1591clickIfHost(
1592    'marketrook|governmentjobvacancies|swachataparnibandh|goodmorningimg|odiadance|newkhabar24|aiperceiver|kaomojihub|arkarinaukrinetwork|topgeninsurance|winezones|kabilnews|myscheme.org|mpsarkarihelp|dvjobs|techawaaz|biharhelp|wastenews|biharkhabar',
1593    'a#btn7, #open-link > .pro_btn, form[name=\'dsb\'], //button[normalize-space(text())=\'Continue\']'
1594);
1595clickIfHost('keedabankingnews|aceforce2apk|themezon|healthvainsure|rokni|bloggingwow|dsmusic|vi-music', 'form[name=\'tp\'], #tp-snp2');
1596//It’s probably not working because the element loads later, but this can be fixed by creating a function that uses shorter text.
1597clickIfHost('teknoasian', '//button[contains(normalize-space(text()), \'Link\') or normalize-space(text())=\'Continue\' or normalize-space(text())=\'Click To Verify\']')
1598clickIfHost('fourlinez|newsonnline|phonesparrow|creditcarred|stockmarg|alljntuworld|updatewallah|vyaapaarguru|viralmp3.com|sarkarins', '#continue-show');
1599clickIfHost('knowiz0.blogspot', 'button#nextBtn');
1600clickIfHost('jobmatric|carjankaari|techsl', 'form[name=\'rtg\'], #btn6');
1601clickIfHost('viralxns|uploadsoon', '#tp-snp2.tp-blue.tp-btn, .tp-white.tp-btn');
1602clickIfHost('blogsward|coinjest', '#continueBtn');
1603clickIfHost('dogefury|thanks.tinygo', '#form-continue');
1604clickIfHost('almontsf', '#nextBtn, a.btn-moobiedat');
1605clickIfHost('short.croclix|adz7short', '#link, input#continue, continue.button, #btn-main');
1606clickIfHost('techkhulasha|itijobalert', '#waiting > div > .bt-success, //button[normalize-space(text())=\'Open-Continue\']')
1607runIfHost('offerwall|ewall', clickAfterCaptcha, '#submitBtn')
1608runIfHost('shortlinks2btc.somee', clickAfterCaptcha, '#btLogin');
1609runIfHost('playpaste', clickAfterCaptcha, 'button.btn');
1610runIfHost('bnbfree|freeth|freebitco', clickAfterCaptcha, '#free_play_form_button');
1611runIfHost('revly|clikern|kiddyshort|adsssy|mitly|link.whf|shortex|easyshort|shorturlearn', () => {
1612    //The initial implementation wasn’t good, so I changed it to work in mitly, but it might not work in other.
1613    clickAfterCaptcha('#link-view:has(#captchaShortlink)');
1614    clickSel('.col-md-12 form:not(:has(#captchaShortlink))'); //:has(.get-link:not(.disabled)) #go-link
1615    httpListener(function(xhr) {
1616        if (!xhr.url.includes('links/go')) return;
1617        const data = JSON.parse(xhr.responseText);
1618        goTo(data.url);
1619    });
1620});
1621runIfHost('lakhisarainews|vahanmitra24', () => {
1622    clickSel('form[name=\'dsb\']');
1623    elementRedirect('a#btn7');
1624});
1625runIfHost('tutwuri|besargaji|link2unlock', () => {
1626    clickSel('#submit-button, #btn-2, #verify > a, #verify > button');
1627    clickAfterCaptcha('#btn-3');
1628});
1629runIfHost('wp.thunder-appz.eu|blog.adscryp', () => {
1630    clickSel('form[name=\'dsb\']');
1631    elementRedirect('#button3 > a');
1632});
1633runIfHost('fitnesswifi|earnmoneyyt|thardekho|dinoogaming|pokoarcade|hnablog|orbitlo|finquizy|indids|redfea|financenuz|pagalworldsong|ddieta|lmktec|bankshiksha|odiadjremix|vbnmx', () => {
1634    elementRedirect('div[id^=\'rtg-\'] > a:nth-child(1)');
1635    clickSel('#rtg, #rtg-snp21 .rtg_btn, #rtg-snp2, #rtg-snp21 > button');
1636});
1637runIfHost('solidcoins|fishingbreeze', () => {
1638    clickAfterCaptcha('form[action]');
1639    clickSel('mdn');
1640});
1641runIfHost('lyricsbaazaar|ezeviral', () => {
1642    clickAfterCaptcha('#btn6');
1643    elementRedirect('div.modal-content a');
1644});
1645runIfHost('financemonk', () => {
1646    clickAfterCaptcha('#downloadBtnClick');
1647    clickSel('#dllink');
1648});
1649runIfHost('rotizer', clickAfterCaptcha, '//button[normalize-space(text())=\'Confirm\']');
1650runIfHost('lksfy', clickAfterCaptcha, '.get-link.btn-primary.btn');
1651runIfHost('ez4mods|game5s|sharedp|fastcars1|carbikenation|tech5s|a4a|rcccn', () => {
1652    clickSel('div.text-center form, #go_d');
1653    elementRedirect('a#go_d.submitBtn.btn.btn-primary, a#go_d2.submitBtn.btn.btn-primary');
1654});
1655runIfHost('cryptorotator', () => {
1656    clickSel('#alf_continue:not([disabled]), //div[contains(@class,\'btn\') and contains(normalize-space(.),\'Click here to unlock\']');
1657    clickAfterCaptcha('#invisibleCaptchaShortlink');
1658});
1659runIfHost('4hi|10short|animerigel|encurt4|encurtacash|finish.wlink|passivecryptos|fbol|kut|shortie|zippynest|faucetsatoshi|tfly|oii', () => {
1660    clickSel('#form-continue');
1661    clickAfterCaptcha('#link-view');
1662});
1663runIfHost('forexrw7|forex-articles|3rabsports|fx-22|watchtheeye|offeergames|todogame|whatgame|gold-24', () => {
1664    clickSel('.oto > a:nth-child(1)');
1665    elementRedirect('.oto > a');
1666});
1667
1668autoDownloadIfHost('upload', clickSel, '#d_l');
1669autoDownloadIfHost('f2h', clickSel, '.btn-success');
1670autoDownloadIfHost('send', clickSel, '#downloadbtn');
1671autoDownloadIfHost('dayuploads', clickSel, '#ad-link2');
1672autoDownloadIfHost('workupload', clickSel, '.btn-prio.btn');
1673autoDownloadIfHost('docs.google', clickSel, '#downloadForm');
1674autoDownloadIfHost('gofile', clickSel, 'button.item_download');
1675autoDownloadIfHost('dddrive', clickSel, '.btn-outline-primary');
1676autoDownloadIfHost('ify|go.linkify', window?.open_href);
1677autoDownloadIfHost('easyupload', clickSel, '.start-download.div');
1678autoDownloadIfHost('karanpc', clickSel, '#downloadButton > form');
1679autoDownloadIfHost('krakenfiles', clickSel, '.download-now-text');
1680autoDownloadIfHost('dbree', clickSel, '.center-block.btn-default.btn');
1681autoDownloadIfHost('rapidgator', clickSel, '.btn-free.act-link.link');
1682autoDownloadIfHost('mp4upload', clickSel, '#todl, form[name=\'F1\']');
1683autoDownloadIfHost('freepreset', elementRedirect, 'a#button_download');
1684autoDownloadIfHost('filemoon', elementRedirect, 'div.download2 a.button');
1685autoDownloadIfHost('dropgalaxy', clickSel, 'button[id^=\'method_fre\']');
1686autoDownloadIfHost('apkadmin', elementRedirect, 'div.text.text-center a');
1687autoDownloadIfHost('drop', clickSel, '#method_free, .btn-download');
1688autoDownloadIfHost('fileresources', elementRedirect, 'a.btn.btn-default');
1689autoDownloadIfHost('megaupto', clickSel, '#direct_link > a:nth-child(1)');
1690autoDownloadIfHost('1fichier', clickSel, '.btn-orange.btn-general.ok, .alc');
1691autoDownloadIfHost('douploads', clickSel, '.btn-primary.btn-lg.btn-block.btn');
1692autoDownloadIfHost('anonymfile|sharefile|gofile', elementRedirect, 'a.btn-info');
1693autoDownloadIfHost('uploadhaven', clickSel, '.alert > a:nth-child(1), #form-download');
1694autoDownloadIfHost('takefile', clickSel, 'div.no-gutter:nth-child(2) > form:nth-child(1)');
1695autoDownloadIfHost('files', clickSel, '#head_download__all-files > div > div > a:nth-child(1)');
1696autoDownloadIfHost('hxfile|ex-load|megadb', clickSel, '.btn-dow.btn, form[name=\'F1\']');
1697autoDownloadIfHost('turbobit', () => {
1698    elementRedirect('#nopay-btn, #free-download-file-link')
1699    clickAfterCaptcha('#submit');
1700});
1701autoDownloadIfHost('uploady', () => {
1702    clickAfterCaptcha('#downloadbtn');
1703    clickSel('#free_dwn, .rounded.btn-primary.btn', 2);
1704});
1705autoDownloadIfHost('mega4upload', () => {
1706    clickSel('input[name=mega_free]');
1707    clickAfterCaptcha('#downloadbtn');
1708});
1709autoDownloadIfHost('ilespayouts', () => {
1710    clickSel('input[name=\'method_free\']');
1711    clickAfterCaptcha('#downloadbtn');
1712});
1713autoDownloadIfHost('hitfile', () => {
1714    clickAfterCaptcha('#submit');
1715    clickSel('.nopay-btn.btn-grey');
1716    elementRedirect('#popunder2');
1717});
1718autoDownloadIfHost('up-4ever', () => {
1719    clickSel('input[name=\'method_free\'], #downLoadLinkButton');
1720    clickAfterCaptcha('#downloadbtn');
1721});
1722autoDownloadIfHost('up-load|downloadani', () => {
1723    clickSel('input[name=\'method_free\'], .btn-dow.btn', 2);
1724    clickAfterCaptcha('#downloadbtn');
1725});
1726autoDownloadIfHost('file-upload', () => {
1727    clickSel('button[name=\'method_free\'], .download-btn', 2);
1728    clickSel('#downbild.g-recaptcha')
1729    clickAfterCaptcha('#downloadbtn');
1730});
1731autoDownloadIfHost('mexa', () => {
1732    clickSel('#Downloadfre, #direct_link');
1733    clickAfterCaptcha('#downloadbtn');
1734});
1735autoDownloadIfHost('qiwi', () => {
1736    clickSel('button[class^=\'DownloadButton_ButtonSoScraperCanTakeThisName\']');
1737    elementRedirect('a[class^=\'DownloadButton_DownloadButton\']');
1738});
1739autoDownloadIfHost('sharemods', () => {
1740    clickSel('#dForm');
1741    elementRedirect('a#downloadbtn.btn.btn-primary');
1742});
1743autoDownloadIfHost('dailyuploads', () => {
1744    clickAfterCaptcha('#downloadbtn');
1745    clickSel('#fbtn1', 2);
1746});
1747autoDownloadIfHost('udrop', async () => {
1748    const element = await waitForElement('.responsiveMobileMargin > button:nth-child(1)');
1749    goTo(element.getAttribute('onclick').getBetween('openUrl(\'', '\')'));
1750});
1751autoDownloadIfHost('k2s', () => {
1752    clickSel('.button-download-slow');
1753    elementRedirect('a.link-to-file');
1754});
1755autoDownloadIfHost('desiupload', () => {
1756    clickSel('.downloadbtn.btn-block.btn-primary.btn');
1757    elementRedirect('a.btn.btn-primary.btn-block.mb-4');
1758});
1759
1760/*
1761It should work without any issues.
1762*/
1763runIfHost('fc-lc|thotpacks', async function() {
1764    clickSel('#invisibleCaptchaShortlink:not([disabled])', 1);
1765    const element = await waitForElement('script');
1766    const target = element.textContent.match(/https?:\/\/[^\s'"]+/g);
1767    target && goTo(target)
1768})
1769//
1770
1771clickIfHost('imagereviser', '.bottom_btn');
1772redirectIfHost('amanguides', '#wpsafe-link > .bt-success');
1773clickIfHost('stockmarg', '#codexa, #open-continue-btn');
1774redirectIfHost('michaelemad|7misr4day', 'a.s-btn-f');
1775clickIfHost('dramaticqueen|emubliss', '#notarobot.button, #btn7');
1776runIfHost('tempatwisata', () => {
1777    const buttons = ['Generate Link', 'Continue', 'Get Link', 'Next'].map(text => `//button[normalize-space(text())='${text}']`);
1778    clickSel(buttons.join(', '));
1779});
1780
1781runIfHost('tii|oei|iir|tvi|oii|tpi', clickAfterCaptcha, '#continue');
1782runIfHost('askpaccosi|cryptomonitor', clickAfterCaptcha, 'form[name=\'dsb\']')
1783clickIfHost('largestpanel|djremixganna|financebolo|emubliss|earnme|usanewstoday|earningtime', '#tp-snp2');
1784runIfHost('adoc', () => {
1785    clickSel('.btn-block.btn-success.btn', 2);
1786    clickAfterCaptcha('.mt-15.btn-block.btn-success.btn-lg.btn');
1787});
1788runIfHost('usersdrive|ddownload', () => {
1789    clickAfterCaptcha('#downloadbtn');
1790    clickSel('.btn-download.btn', 1);
1791});
1792runIfHost('pdfcoffee', () => {
1793    clickSel('.btn-block.btn-success.btn');
1794    clickAfterCaptcha('.my-2.btn-block.btn-primary.btn-lg.btn');
1795});
1796clickIfHost('zygina|jansamparks|loanifyt|getknldgg|topshare|btcon', 'form[name=\'tp\'], #btn6');
1797clickIfHost('financewada|utkarshonlinetest|financenova', '.get_btn.step_box > .btn, .get_btn a[href]');
1798runIfHost('blogmado|kredilerim|insuranceleadsinfo', () => {
1799    clickAfterCaptcha('button.btn');
1800    elementRedirect('a.get-link.disabled a');
1801});
1802runIfHost('litecoin|cekip', () => {
1803    clickAfterCaptcha('#ibtn');
1804    clickSel('.btn-primary.btn');
1805});
1806
1807redirectIfHost('linkforearn', '#shortLinkSection a');
1808clickIfHost('downfile', 'button.h-captcha, #megaurl-submit', 2);
1809autoDownloadIfHost('doodrive', () => {
1810    clickSel('.tm-button-download.uk-button-primary.uk-button', 3);
1811    elementRedirect('.uk-container > div > .uk-button-primary.uk-button');
1812});
1813clickIfHost('uploadrar|fingau|getpczone|wokaz|uptomega', '.mngez-free-download, #direct_link > a:nth-child(1), #downloadbtn');
1814clickIfHost('jobinmeghalaya', '#bottomButton, a#btn7, #wpsafelink-landing, #open-link > .pro_btn, #wpsafe-link > .bt-success');
1815clickIfHost('playnano', '#watch-link, .watch-next-btn.btn-primary.button, button.button.btn-primary.watch-next-btn');
1816redirectIfHost('sub2get', '#butunlock > a:nth-child(1)')
1817redirectIfHost('o-pro', '#newbutton, a.btn.btn-default.btn-sm');
1818// redirectIfHost('oxy\.', '.ocdsf233', 'data-source_url'); // need a more specific pattern
1819
1820autoDownloadIfHost('buzzheavier', clickSel, '#download-link');
1821autoDownloadIfHost('bowfile', clickSel, '.download-timer > .btn--primary.btn > .btn__text');
1822autoDownloadIfHost('uploadev', () => {
1823    clickAfterCaptcha('#downloadbtn');
1824    clickSel('#direct_link > a', 2);
1825});
1826autoDownloadIfHost('megaup', clickSel, 'a.btn.btn-default, #btndownload');
1827autoDownloadIfHost('gdflix', clickSel, 'a.btn.btn-outline-success');
1828redirectIfHost('linkspy', '.skipButton');
1829clickIfHost('superheromaniac|spatsify|mastkhabre|ukrupdate', '#tp98, #btn6, form[name=\'tp\']');
1830clickIfHost('bestloansoffers|worldzc|earningtime', '#rtg, #rtg-form, .rtg-blue.rtg-btn, #rtg-snp21 > button');
1831clickIfHost('exeo|exego|falpus|exe-urls|exnion|4ace', '#invisibleCaptchaShortlink, #before-captcha');
1832runIfHost('dinheiromoney', () => {
1833    clickSel('div[id^=\'button\'] form');
1834    elementRedirect('div[id^=\'button\'] center a');
1835});
1836runIfHost('writedroid.eu|modmania.eu|writedroid', () => {
1837    clickSel('#shortPostLink');
1838    elementRedirect('#shortGoToLink');
1839});
1840autoDownloadIfHost('katfile', () => {
1841    clickAfterCaptcha('#downloadbtn');
1842    clickSel('#fbtn1');
1843    elementRedirect('#dlink');
1844});
1845clickIfHost('setroom.biz|travelinian', 'form[name=\'dsb\'], a:nth-child(1) > button');
1846redirectIfHost('g34new|dlgamingvn|v34down|phimsubmoi|almontsf|nashib|timbertales', '#wpsafegenerate > #wpsafe-link > a[href]');
1847runIfHost('2linkes', () => {
1848    clickAfterCaptcha('#link-view');
1849    clickSel('.box-body > form:nth-child(2)');
1850});
1851runIfHost('importantclass|hamroguide', () => {
1852    clickSel('#pro-continue, #pro-link a');
1853    elementRedirect('#my-btn.pro_btn');
1854});
1855runIfHost('nishankhatri|bebkub|owoanime|hyperkhabar', () => {
1856    clickSel('#pro-continue, #my-btn');
1857    elementRedirect('a#pro-btn');
1858});
1859clickIfHost('gocmod', '.download-line-title');
1860runIfHost('travelironguide|businesssoftwarehere|softwaresolutionshere|freevpshere|masrawytrend', () => {
1861    clickAfterCaptcha('#lview > form', 'submit');
1862    elementRedirect('.get-link > a');
1863});
1864runIfHost('gocmod', parameterRedirect, '$urls');
1865runIfHost('api.gplinks', parameterRedirect, '$url');
1866runIfHost('rfaucet', parameterRedirect, '$linkAlias');
1867runIfHost('maloma3arbi.blogspot', parameterRedirect, '$link');
1868runIfHost('financenuz', parameterRedirect, 'https://financenuz.com/?web=$url');
1869runIfHost('thepragatishilclasses', parameterRedirect, 'https://thepragatishilclasses.com/?adlinkfly=$url');
1870runIfHost('coinilium', parameterRedirect, '$id');
1871/* not sure what the +2 is
1872BypassedByBloggerPemula('(inshort|youlinks|adrinolinks).in|(linkcents|nitro-link).com|clk.sh', null, 'url+2', '');
1873*/
1874runIfHost('blog.klublog', parameterRedirect, '$safe');
1875runIfHost('t', parameterRedirect, '$url');
1876runIfHost('financedoze', parameterRedirect, 'https://www.google.com/url?q=https://financedoze.com', 'id');
1877// runIfHost('financedoze', () => parameterRedirect('https://www.google.com/url?q=https://financedoze.com', 'id'));
1878clickIfHost('forex-trnd', '#exfoary-form');
1879clickIfHost('cutnet|cutyion|cutynow|exego|cety|jixo|gamco', '#submit-button:not([disabled])');
1880clickIfHost('alorra', '.single-layout-1.ast-post-format- > button');
1881
1882runIfHost('adtival', referrerPolicy, 'shortid');
1883runIfHost('sfl|kisalt', referrerPolicy, 'u');
1884runIfHost('kongutoday|proappapk|hipsonyc', referrerPolicy, 'safe');
1885runIfHost('sharetext', () => currentUrl.includes('/redirect') && referrerPolicy('url'));
1886runIfHost('comohoy', () => currentUrl.includes('/view/out.html') && referrerPolicy('url'));
1887runIfHost('ecryptly|equickle', async () => {
1888    referrerPolicy('id');
1889    waitForElement('#open-continue-form > input:nth-child(3)').then(e => goTo(atob(e.value)));
1890    clickSel('#rtg-snp2');
1891    const element = await waitForElement('#open-continue-btn');
1892    goTo(element.getAttribute('onclick').getBetween('window.location.href=\'', '\';'));
1893});
1894
1895runIfHost('bigbtc', () => {
1896    clickAfterCaptcha('#claimbutn');
1897    currentUrl.includes('/bonus') && clickSel('#clickhere');
1898});
1899clickIfHost('vosan', '.elementor-size-lg, .wpdm-download-link');
1900
1901redirectIfHost('xonnews|toilaquantri|share4u|camnangvay', 'div#traffic_result a');
1902runIfHost('easylink.gamingwithtr', () => {
1903    clickSel('#countdown');
1904    elementRedirect('a#pagelinkhref.btn.btn-lg.btn-success.my-4.px-3.text-center');
1905})
1906autoDownloadIfHost('modsbase', () => {
1907    clickSel('.download-file-btn');
1908    elementRedirect('#downloadbtn > a');
1909});
1910autoDownloadIfHost('mediafire', () => currentUrl.includes('file/') && elementRedirect('.download_link .input'));
1911runIfHost('ouo', function() {
1912    clickSel('button#btn-main.btn.btn-main')
1913    parameterRedirect('$s');
1914})
1915runIfHost('pixeldrain', () => currentUrl.includes('/u/') && goTo(`${currentUrl.replace('u/', '/api/file/')}?download`));
1916clickIfHost('exblog', '//a[normalize-space(text())=\'Continue To\'], //a[normalize-space(text())=\'NEST ARTICLE\']')
1917runIfHost('modcombo', () => {
1918    if (currentUrl.includes('download/')) {
1919        elementRedirect('div.item.item-apk a');
1920        clickSel('a.btn.btn-submit');
1921    } else {
1922        clickSel('a.btn.btn-red.btn-icon.btn-download.br-50');
1923    }
1924});
1925// runIfHost('facebook|instagram', parameterRedirect, '$u');
1926runIfHost('tiktok', parameterRedirect, '$target');
1927
1928// working but still can be improved
1929runIfHost('coinclix|coinhub|vitalityvista|geekgrove|instagram|youtube|google|facebook', async () => {
1930    document?.referrer == '' && clickSel('.-cx-PRIVATE-Linkshim__followLink__, #invalid-token-redirect-goto-site-button, .selected');
1931    /vitalityvista|geekgrove|coinhub/.test(document?.referrer) && queryParams.has('url') && goTo(queryParams.get('url'));
1932
1933    if (currentUrl.includes('go/')) {
1934        let tab;
1935        const code = await waitForElement('.mb-2 code');
1936        try {
1937            const link = await waitForElement('strong > a', 1);
1938            GM_setValue('geek_code', code.innerText);
1939            tab = GM_openInTab(link.href, {
1940                active: true
1941            });
1942        } catch (e) {
1943            const q = document.querySelector('.user-select-none').textContent;
1944            tab = GM_openInTab(`https://www.google.com/url?q=${q}`, {
1945                active: true
1946            });
1947        }
1948
1949        GM_onMessage('finalcode', function(newValue) {
1950            tab?.close();
1951            document.querySelector('#verification_code').value = newValue;
1952        })
1953    }
1954    //TODO REMOVE #btn_link_start:not([disabled])
1955    clickSel('a.btn:has(.mdi-check), #btnLinkStart:not([disabled]), #linkResFooter > #btnLinkContinue:not([disabled]), #linkResHeader > #btnLpcont');
1956    clickAfterCaptcha('#btnLinkContinue');
1957    clickSel('#btnLinkContinue:not(:has(.iconcaptcha-modal)), .iconcaptcha-modal__body');
1958    clickSel('#btnLpcont');
1959    waitForElement('#linkInput').then((input) => {
1960        input.value = GM_getValue('geek_code', '');
1961        clickSel('#btnLink', 1);
1962    })
1963    const codeEl = await waitForElement('code.link_code');
1964    GM_sendMessage('finalcode', codeEl.innerText)
1965});
1966runIfHost('shortit', () => {
1967    clickSel('.pulse.btn-primary.btn');
1968    clickAfterCaptcha('#btn2');
1969});
1970runIfHost('autodime|cryptorex', () => {
1971    clickAfterCaptcha('#button1');
1972    clickSel('.mb-sm-0.mt-3.btnBgRed');
1973});
1974clickIfHost('tmail|labgame|gamezizo|fitdynamos', '#surl, form.text-center, #next, #glink');
1975autoDownloadIfHost('dataupload', clickSel, '.downloadbtn');
1976
1977function clickWithTrusted() {
1978    return;
1979    const sandbox = new Proxy(window, {
1980        get(target, key) {
1981            if (key === 'Object') {
1982                return new Proxy(Object, {
1983                    get(objTarget, objKey) {
1984                        if (objKey === 'freeze') {
1985                            return function(obj) {
1986                                console.warn('Object.freeze disabled in sandbox.');
1987                                return obj;
1988                            };
1989                        }
1990                        return Reflect.get(objTarget, objKey);
1991                    }
1992                });
1993            }
1994            return Reflect.get(target, key);
1995        }
1996    });
1997
1998    const originalAddEventListener = EventTarget.prototype.addEventListener;
1999    EventTarget.prototype.addEventListener = function(type, listener, options) {
2000        const wrappedListener = function(event) {
2001            const clonedEvent = Object.create(event);
2002            Object.defineProperty(clonedEvent, 'isTrusted', {
2003                value: true,
2004                writable: false
2005            });
2006            return listener.call(this, clonedEvent);
2007        };
2008        return originalAddEventListener.call(this, type, wrappedListener, options);
2009    };
2010
2011    return sandbox;
2012}
2013runIfHost('admediaflex|cdrab|financekita|jobydt|foodxor|mealcold|newsobjective|gkvstudy|mukhyamantriyojanadoot|thepragatishilclasses|indobo|pdfvale|templeshelp|ecq|cooklike|wpcheap|bitwidgets|newsamp|coinilium|atomicatlas|gadifeed|thecryptoworld|skyfreecoins|petly|techreviewhub|mbantul.my', async () => {
2014    const element = await waitForElement('#wpsafe-link a[onclick*=\'window.open\']');
2015    const onclick = element.getAttribute('onclick');
2016    goTo(onclick.getBetween('window.open\(\'', '\'\)'));
2017});
2018runIfHost('cryptowidgets|melodyspot|carsmania|cookinguide|tvseriescentral|cinemascene|hobbymania|plantsguide|furtnitureplanet|petsguide|gputrends|gamestopia|ountriesguide|carstopia|makeupguide|gadgetbuzz|coinsvalue|coinstrend|coinsrise|webfreetools|wanderjourney|languagefluency|giftmagic|bitwidgets|virtuous-tech|retrocove|vaultfind|geotides|renovatehub|playallgames|countriesguide|freeoseocheck|insurancexguide|funplayarcade|origamiarthub|fitbodygenius|illustrationmaster|selfcareinsights|constructorspro|ecofriendlyz|virtualrealitieshub|wiki-topia|techiephone|brewmasterly|teknoasian|lifeprovy|chownest|mythnest|homesteadfeast|gizmoera|tastywhiz|speakzyo|bubblix|dailytech-news|biit|carfocus|coinscap|insurancegold|wii', clickWithTrusted);
2019runIfHost('cryptowidgets|melodyspot|carsmania|cookinguide|tvseriescentral|cinemascene|hobbymania|plantsguide|furtnitureplanet|petsguide|gputrends|gamestopia|ountriesguide|carstopia|makeupguide|gadgetbuzz|coinsvalue|coinstrend|coinsrise|webfreetools|wanderjourney|languagefluency|giftmagic|bitwidgets|virtuous-tech|freeoseocheck|insurancexguide|funplayarcade|origamiarthub|fitbodygenius|illustrationmaster|selfcareinsights|constructorspro|ecofriendlyz|virtualrealitieshub|wiki-topia|techiephone|brewmasterly|bubblix|dailytech-news|biit|carfocus|blogfly|coinscap|insurancegold|wii', () => {
2020    clickSel('//button[normalize-space(text())=\'Verify\'], #loadingDiv[style*=\'display: block\'] button, #loadingDiv[style*=\'display: block\'] button');
2021    // if (['dailytech-news.eu', 'wii.si', 'bubblix.eu', 'bitwidgets.net', 'virtuous-tech.net', 'carfocus.site', 'biit.site'].some(tino => currentUrl.includes(tino))) {
2022    // } else 
2023    waitForElement('#clickMessage[style*=\'display: block\'], clickMessage[style*=\'display: block\']').then(() => {
2024        setActiveElement('[data-placement-id=\'revbid - leaderboard\']');
2025    });
2026    // Checkvisibility('#loadingDiv[style^=\'display\'] > span', () => {
2027    //         const buttonText = strBetween(document.querySelector('#loadingDiv[style^=\'display\'] > span').textContent, 'Click', 'To Start');
2028    //         waitForElement(`#loadingDiv[style^='display'] .btn.btn-primary:contains('${buttonText}')`).then(buttonElement => {
2029    //             const buttons = Array.from(bp('#loadingDiv[style^=\'display\'] .btn.btn-primary', true));
2030    //             const index = buttons.indexOf(buttonElement);
2031    //             if (index === -1) return;
2032    //             const selectorOptions = ['button.btn:nth-child(2)', 'button.btn:nth-child(3)', 'button.btn:nth-child(4)', 'button.btn:nth-child(5)', 'button.btn:nth-child(6)'];
2033    //             const chosenSelector = selectorOptions[index];
2034    //             if (chosenSelector) sleep(2000).then(() => ReadytoClick(`#loadingDiv[style^='display'] ${chosenSelector}`));
2035    //         });
2036    //     });
2037});
2038runIfHost('render-state', () => queryParams.has('link') && window.goToLink());
2039runIfHost('programasvirtualespc', () => currentUrl.includes('out/') && goTo(atob(currentUrl.split('?')[1])));
2040runIfHost('grtjobs|jksb', () => {
2041    // Checkvisibility('.step', window.handleContinueClick);
2042});
2043//TODO: with the link, I can improve this further
2044runIfHost('dutchycorp', parameterRedirect, '$code?verif=0');
2045runIfHost('autofaucet.dutchycorp', function() {
2046    let autoRoll = false;
2047    if (/(coin_roll|roll_game).php|/.test(currentUrl)) {
2048        window.scrollTo(0, 9999);
2049        if (!document.querySelector('#timer')) {
2050            captchaSolved(async () => {
2051                autoRoll === false && (await clickSel('.boost-btn.unlockbutton'), autoRoll = true)
2052                clickSel('#claim_boosted');
2053            });
2054        } else {
2055            const isRoll = currentUrl.includes('/coin_roll.php');
2056            goTo(`https://autofaucet.dutchycorp.space/${isRoll ? 'coin_roll.php' : 'ptc/wall.php'}`);
2057        }
2058    }
2059    if (currentUrl.includes('/ptc/wall.php')) {
2060        const ptcwall = document.querySelectorAll('.col.s10.m6.l4 a[name=\'claim\']');
2061        if (ptcwall.length >= 1) {
2062            ptcwall[0].style.backgroundColor = 'red';
2063            let match = ptcwall[0].onmousedown.toString().match(/'href', '(.+)'/);
2064            let hrefValue = match[1];
2065            goTo('https://autofaucet.dutchycorp.space' + hrefValue);
2066        } else {
2067            // Checkvisibility('div.col.s12.m12.l8 center div p', () => {
2068            //     goTo('https://autofaucet.dutchycorp.space/ptc/');
2069            // })
2070        }
2071        if (currentUrl.includes('.space/ptc/')) {
2072            if (document.querySelector('.fa-check-double')) {
2073                goTo('https://autofaucet.dutchycorp.space/dashboard.php');
2074            }
2075            clickAfterCaptcha('button[type=\'submit\']')
2076        }
2077    }
2078});
2079clickIfHost('devnote|formshelp|rcccn|djbassking', '#getlinks.btn');
2080runIfHost('tinybc|phimne|mgame|sportweb|bitcrypto', async () => {
2081    const element = await waitForElement('#wpsafe-link a[onclick*=\'handleClick\']')
2082    const onclick = element.getAttribute('onclick');
2083    const target = onclick.getBetween('handleClick\(\'', '\')');
2084    target && goTo(target);
2085});
2086runIfHost('curto', () => {
2087    clickSel('#get-link');
2088    elementRedirect('#get-link');
2089});
2090runIfHost('tejtime24|drinkspartner|sportswordz|newspute|raftarsamachar|gadialert|jobinmeghalaya|raftarwords', () => {
2091    window.scrollTo(0, 9999);
2092    clickSel('#topButton.pro_btn, #bottomButton, #open-link > .pro_btn');
2093});
2094runIfHost('mazen-ve3', async () => {
2095    await waitForElement('//*[contains(concat(\' \', normalize-space(@class), \' \'), \' filler \') and normalize-space(text())=\'Wait 0 s\']');
2096    clickSel('#btn6, .btn-success.btn');
2097});
2098autoDownloadIfHost('oydir', async () => {
2099    await waitForElement('.download-now');
2100    window.triggerFreeDownload();
2101    elementRedirect('.text-center.download-now > .w-100.btn-blue.btn');
2102});
2103clickIfHost('pubghighdamage|anmolbetiyojana', '#robot, #notarobot.button, #gotolink.bt-success.btn');
2104runIfHost('fansonlinehub', function() {
2105    window.scrollBy(0, 1);
2106    window.scrollTo(0, -1);
2107    clickSel('.active.btn > span');
2108});
2109runIfHost('coinsrev', () => {
2110    clickAfterCaptcha('#wpsafelinkhuman > input');
2111    clickSel('#wpsafe-generate > a > img, input#image3');
2112});
2113runIfHost('hosttbuzz|policiesreview|blogmystt|wp2hostt|advertisingcamps|healthylifez|insurancemyst|clk|dekhe', () => {
2114    clickSel('button.btn.btn-primary, #nextpage, #getmylink');
2115    waitForElement('.btn-captcha.btn-primary.btn').then(e => e.removeAttribute('onclick'));
2116    clickAfterCaptcha('.btn-captcha.btn-primary.btn');
2117});
2118runIfHost('remixsounds|helpdeep|thinksrace|techforu|studywithsanjeet|uprwssp|gkfun', async () => {
2119    clickSel('.m-2.btn-captcha.btn-outline-primary.btn, .tpdev-btn, #tp98 button[class^=\'bt\'], form[name=\'tp\'], #btn6');
2120    //Todo: when I have a link, I will improve the query.
2121    const element = await waitForElement('body > center:nth-child(6) > center:nth-child(4) > center:nth-child(2) > center:nth-child(4) > center:nth-child(3) > center:nth-child(4) > center:nth-child(2) > center:nth-child(4) > script:nth-child(5)');
2122    const scriptContent = element.textContent;
2123    const Linkc = scriptContent.match(/var\s+currentLink\s*=\s*[''](.*?)['']/);
2124    Linkc && Linkc[1] && goTo(Linkc[1]);
2125});
2126autoDownloadIfHost('upfion', async () => {
2127    await waitForElement('.file-main.form-main');
2128    clickSel('.my-2.text-center > .btn-primary.btn');
2129    clickAfterCaptcha('#link-button');
2130});
2131runIfHost('techxploitz.eu', () => {
2132    // Checkvisibility('#hmVrfy', () => clickSel('.pstL.button'));
2133    // Checkvisibility('#aSlCnt', () => clickSel('.pstL.button, .safeGoL.button'));
2134});
2135runIfHost('down.fast-down|down.mdiaload', () => {
2136    clickSel('input[name=\'method_free\'], //a[normalize-space(text())=\'Continue\']');
2137
2138    // const captchaCode = BpAnswer(null, 'captcha');
2139    // if (captchaCode) {
2140    //     const captchaInput = bp('input.captcha_code');
2141    //     if (captchaInput) {
2142    //         captchaInput.value = captchaCode;
2143    //         ReadytoClick('button:innerText('Create Download ')', 30);
2144    //     }
2145    // }
2146});
2147runIfHost('sekilastekno|miuiku|vebma|majalahhewan|tempatwisata', async function() {
2148    const executor = async () => {
2149        let El = window?.livewire?.components?.components()[0];
2150        while (!El) {
2151            await sleep(100);
2152            El = window?.livewire?.components?.components()[0];
2153        }
2154        const payload = {
2155            fingerprint: El.fingerprint,
2156            serverMemo: El.serverMemo,
2157            updates: [{
2158                payload: {
2159                    event: 'getData',
2160                    id: 'whathappen',
2161                    params: [],
2162                },
2163                type: 'fireEvent',
2164            }],
2165        };
2166        const response = await fetch(host + '/livewire/message/pages.show', {
2167            headers: {
2168                'Content-Type': 'application/json',
2169                'X-Livewire': 'true',
2170                'X-CSRF-TOKEN': window.livewire_token,
2171            },
2172            method: 'POST',
2173            body: JSON.stringify(payload),
2174        });
2175        const json = await response.json();
2176        const url = new URL(json.effects.emits[0].params[0]);
2177        goTo(url.href);
2178    };
2179
2180    if (host === 'wp.sekilastekno.com') {
2181        const element = await waitForElement('form[method=\'post\']');
2182        GM_addElement(element, 'input', {
2183            value: window.livewire_token,
2184            name: '_token',
2185            hidden: true
2186        })
2187        element.submit();
2188        waitForElement('button[x-text]').then(executor);
2189        return;
2190    }
2191
2192    waitForElement('div[class=\'max - w - 5 xl mx - auto\']').then(executor);
2193});
2194runIfHost('adshnk|adshrink', () => {
2195    const timer = setInterval(() => {
2196        if (typeof window?._sharedData?.[0]?.destination == 'string') {
2197            clearInterval(timer);
2198            goTo(window._sharedData[0].destination);
2199        } else if (typeof window?.[window?.___reactjsD?.o]?.dest == 'string') {
2200            clearInterval(timer);
2201            goTo(window[window.___reactjsD.o].dest);
2202        }
2203    });
2204});
2205runIfHost('playonpc|yolasblog|playarcade|quins|retrotechreborn|insurelean|ecosolardigest|finance240|2wheelslife|historyofyesterday|gally|freeat30|ivnlnews', async () => {
2206    clickAfterCaptcha('button#cbt.pfbutton-primary');
2207    await waitForElement(':has(not(.h-captcha))');
2208    await waitForElement(':has(not(.core-msg.spacer.spacer-top))');
2209    await waitForElement('#cbt:not([disabled])');
2210    await waitForElement('//button[@id=\'formButtomMessage\' and contains(text(), "Well done! You\'re ready")]');
2211    clickSel('button#cbt.pfbutton-primary');
2212});
2213runIfHost('mangareleasedate|sabkiyojana|teqwit|bulkpit|odiafm|loopmyhub|thepopxp|cryptoblast', () => {
2214    RSCookie('adexp', '1', GPlinks, 0.001388);
2215    clickSel('#VerifyBtn, #NextBtn', 3);
2216    waitForElement('#SmileyBanner').then(function() {
2217        setActiveElement('[id=\'div - gpt - ad\']');
2218    })
2219});
2220runIfHost('on-scroll|diudemy|maqal360', () => {
2221    clickSel('#_append a, #append a');
2222    waitForElement('.alertAd').then(function() {
2223        setActiveElement('[data-placement-id=\'revbid - leaderboard\']');
2224    });
2225});
2226runIfHost('horoscop|videoclip|newscrypto|article24|writeprofit|docadvice|trendzilla|worldwallpaper', () => {
2227    captchaSolved(window?.wpsafehuman);
2228    clickSel('center > .wpsafelink-button');
2229    waitForElement('#wpsafe-generate > a').then(function() {
2230        window.wpsafegenerate();
2231        const start = currentUrl.includes('article24.online') ? '' : '2';
2232        clickSel(`#wpsafelink-landing${start} > .wpsafelink-button`);
2233    })
2234});
2235runIfHost('gamezigg|shrs|shareus|go.paylinks|multiup|modsfire|social-unlock|work', function() {
2236    //Temporary until I have the links.
2237    const t = /^\/([^\/]+)/.test(pathname);
2238    switch (host) {
2239        case 'gamezigg.com':
2240            const b = pathname === '/verify/' && /^\?([^&]+)/.test(search);
2241            b && openWithReferrerPolicy('https://get.megafly.in/' + RegExp.$1);
2242            break;
2243        case 'shrs.link':
2244        case 'shareus.io':
2245            if (/^\/old\/([^\/]+)/.test(pathname)) {
2246                goTo('https://jobform.in/?link=' + RegExp.$1);
2247            }
2248            break;
2249        case 'go.paylinks.cloud':
2250            if (/^\/([a-zA-Z0-9]{10,12})$/.test(pathname)) {
2251                goTo('https://paylinks.cloud/' + RegExp.$1);
2252            }
2253            break;
2254        case 'multiup.io':
2255            if (currentUrl.includes('/download/')) goTo(currentUrl.replace('download/', 'en/mirror/'));
2256            break;
2257        case 'modsfire.com':
2258            t && goTo('https://modsfire.com/d/' + RegExp.$1);
2259            break;
2260        case 'social-unlock.com':
2261            t && goTo('https://social-unlock.com/redirect/' + RegExp.$1);
2262            break;
2263        case 'work.ink':
2264            t && goTo('https://adbypass.org/bypass?bypass=' + currentUrl.split('?')[0]);
2265            break;
2266        default:
2267            break;
2268    }
2269})
2270runIfHost('firefaucet', () => {
2271    clickSel('//button[normalize-space(text())=\'Continue\'], //button[normalize-space(text())=\'Go Home\']')
2272    clickAfterCaptcha('button[type=submit]:not([disabled])');
2273});
2274runIfHost('inshortnote', () => {
2275    //For now, I won’t touch it until there’s a link.
2276    let clickCount = 0;
2277    const maxClicks = 7;
2278    const bp = document.querySelectorAll;
2279
2280    function clickElement() {
2281        if (clickCount >= maxClicks) return;
2282        let element = bp('#htag > [style=\'left: 0 px;\']')?.[0] || bp('#ftag > [style=\'left: 0 px;\']')?.[0];
2283        if (element) {
2284            element.click();
2285            clickCount++;
2286            return;
2287        }
2288        for (let el of bp('.gaama [style*=\'left: \']')) {
2289            if (/^[a-zA-Z0-9]{5,6}$/.test(el.textContent.trim())) {
2290                el.click();
2291                clickCount++;
2292                return;
2293            }
2294        }
2295    }
2296    const intervalId = setInterval(() => {
2297        clickElement();
2298        if (clickCount >= maxClicks) clearInterval(intervalId);
2299    }, 3000);
2300});
2301clickIfHost('videolyrics', '//a[contains(normalize-space(),\'Continue\')], div[x-html=\'isTCompleted\'] button');
2302runIfHost('servicemassar', () => {
2303    captchaSolved(window.linromatic());
2304    clickSel('//button[normalize-space(text())=\'Next\'], //button[normalize-space(text())=\'Redirect\']');
2305});
2306runIfHost('suaurl|lixapk|reidoplacar|lapviral|minhamoto', () => {
2307    const selectors = ['FETCH LINK', 'START', 'PULAR CAPTCHA', 'FINAL LINK', 'CONTINUAR', 'DESBLOQUEAR'].map(t => `//button[contains(normalize-space(),'${t}')]`)
2308    clickSel(selectors);
2309});
2310runIfHost('cryptosparatodos|placementsmela|howtoconcepts|tuasy|skyrimer|yodharealty|mobcupring|aiimsopd|advupdates|camdigest|heygirlish|blog4nx|todayheadliners|jobqwe|cryptonews.faucetbin|mobileflashtools|paidinsurance|djstar|sevayojana|bjp.org|sastainsurance|nashib|cialisstrong|loanforuniversity|cegen|thunder-appz.eu|zaku|veganab|skyfreecoins|manga4nx', async () => {
2311    const element = await waitForElement('#wpsafe-link a');
2312    goTo(element.getAttribute('onclick').getBetween('window.open(\'', '\', \'_self\')'));
2313});
2314runIfHost('indobo', async () => {
2315    const element = await waitForElement('#wpsafegenerate > script:nth-child(4)');
2316    const url = element.textContent.getBetween('window.location.href = \'', '\';');
2317    url.startsWith('https://indobo.com?safelink_redirect=') && goTo(url);
2318});
2319runIfHost('downloader', () => {
2320    clickAfterCaptcha('button.btn.btn-primary');
2321    clickSel('//*[@id=\'count\' and normalize-space(text())=\'0\']')
2322});
2323runIfHost('infonerd', async () => {
2324    await waitForElement('//*[@id=\'redirectButton\' and normalize-space(text())=\'0\']');
2325    window.redirectToUrl();
2326});
2327runIfHost('trangchu|downfile|techacode|expertvn|ziggame|gamezigg|azmath|aztravels|handydecor.com', () => {
2328    clickSel('#monetiza.btn-primary.btn');
2329    waitForElement('#monetiza-generate').then(window?.monetizago);
2330});
2331runIfHost('bchlink|usdlink', () => {
2332    clickSel('#antiBotBtnBeta > strong', 2);
2333    clickAfterCaptcha('#invisibleCaptchaShortlink');
2334});
2335// runIfHost('(shrinke|shrinkme)\.\w+', clickAfterCaptcha, '#invisibleCaptchaShortlink');
2336runIfHost('paid4link|linkbulks|linclik|up4cash|smoner|atglinks|minimonetize|encurtadorcashlinks|yeifly|themesilk|linkpayu|wordcounter|shrink|galaxy-link|dutchycorp|pahe|pwrpa|snipn|paylinks|oke|tinygo|tlin|wordcount|link.freebtc.my|get.megafly|skyfreeshrt|learncrypto|link4rev', clickAfterCaptcha, '#link-view');
2337
2338runIfHost('headlinerpost|posterify', async () => {
2339    const scripts = document.querySelectorAll('script');
2340    const script = [...scripts].find(e => e.textContent.includes('data:'));
2341    let dataValue = script?.textContent?.getBetween('data: \'', '\'');
2342
2343    const plan = JSON.parse(RSCookie('plan') || '{}');
2344    let stepValue = plan.lid || '';
2345    let planValue = plan.page || '';
2346    if (!dataValue || !stepValue) return;
2347
2348    const postData = {
2349        data: dataValue
2350    };
2351    const sid = RSCookie('sid');
2352    postData[sid ? 'step_2' : 'step_1'] = stepValue;
2353    if (sid) postData.id = sid;
2354
2355    const isHeadliner = host === 'headlinerpost.com';
2356    const params = new URLSearchParams(postData);
2357    const response = await fetch('https://shrinkforearn.in/link/new.php', {
2358        method: 'POST',
2359        headers: {
2360            'Content-Type': 'application/x-www-form-urlencoded',
2361            'Referer': `https://${isHeadliner ? 'headlinerpost.com' : 'posterify.net'}`,
2362            'Origin': `https://${isHeadliner ? 'headlinerpost.com' : 'posterify.net'}`
2363        },
2364        body: params,
2365        credentials: 'include'
2366    });
2367    const result = await response.json();
2368    const id = result.inserted_data?.id;
2369    id && RSCookie('sid', id, 0.02);
2370    if (id || result.updated_data || sid) {
2371        const ShrinkUrl = `https://${isHeadliner
2372        ? `posterify.net/?id=${encodeURIComponent(stepValue)}&sid=${encodeURIComponent(id || sid)}&plan=${encodeURIComponent(planValue)}`
2373        : `shrinkforearn.in/${encodeURIComponent(stepValue)}?sid=${encodeURIComponent(id || sid)}`}`;
2374        goTo(ShrinkUrl);
2375    }
2376});
2377
2378runIfHost('carbikesupdate|carbikenation', () => {
2379    parent.open = () => {}
2380    clickSel('#getLinkBtn, #getlinks.btn');
2381});
2382{
2383    /*
2384    BypassedByBloggerPemula(/(financedoze|topjanakri|stockbhoomi).com|techhype.in|getpdf.net|cryptly.site/, () => {
2385        CheckVisibility('p:contains(\'Step\')', () => {
2386            DoIfExists('#rtg', 'submit', 3);
2387            DoIfExists('button:innerText(\'Open - Continue\')', 4);
2388        });
2389    });
2390    BypassedByBloggerPemula(/bitcotasks.com/, () => {
2391        if (currentUrl.includes('/firewall')) {
2392            CheckVisibility('#captcha-container', '&&', 'bp(\'.mb - 2\').innerText == \'Verified\'', () => {
2393                DoIfExists('button:contains(\'Validate\')');
2394            });
2395        }
2396        if (currentUrl.includes('/lead')) {
2397            CheckVisibility('#status .btn', () => {
2398                DoIfExists('button:contains(\'Start View\')');
2399            });
2400        }
2401        CheckVisibility('#captcha-container', '&&', 'bp(\'.mb - 2\').innerText == \'Verified\'', () => {
2402            window.continueClicked();
2403        });
2404        CheckVisibility('.alert-success.alert', '||', 'bp(\'.alert - success\').innerText == \'This offer was successfully\'', () => {
2405            window.close();
2406        });
2407    });
2408    BypassedByBloggerPemula(/newsminer.uno/, () => {
2409        CheckVisibility('#clickMessage', '&&', 'bp(\'#clickMessage\').innerText == \'Click any ad\'', () => {
2410            setActiveElement('[data-placement-id=\'revbid - leaderboard\']');
2411        });
2412        if (elementExists('input.form-control')) {
2413            notify('Please Answer the Maths Questions First ,Wait until Progress bar end, then Click the Red X Manually', false, true);
2414            window.onscroll = BpBlock();
2415            window.check2();
2416            elementReady('[name=\'answer\']').then(function(element) {
2417                element.addEventListener('change', window.check3);
2418            });
2419        }
2420    });
2421    BypassedByBloggerPemula(/stly.link|(snaplessons|atravan|airevue|carribo|amalot).net|(stfly|shrtlk).biz|veroan.com/, () => {
2422        CaptchaDone(() => {
2423            ReadytoClick('button[class^=mt-4]');
2424            DoIfExists('button.mt-4:nth-child(2)', 3);
2425        });
2426        CheckVisibility('button[class^=rounded]', () => {
2427            if (!bp('.g-recaptcha') || !bp('.cf-turnstile')) {
2428                DoIfExists('button[class^=rounded]', 2);
2429            }
2430        });
2431        CheckVisibility('button[class^=mt-4]', '&&', 'bp(\'.progress - done\').innerText == \'100\'', () => {
2432                ReadytoClick('button[class^=mt-4]', 2);
2433                ReadytoClick('button.mt-4:nth-child(2)', 4);
2434            });
2435        CheckVisibility('button[class^=mt-4]', '&&', 'bp(\'#countdown - number\').innerText == \'✓\'', () => {
2436                DoIfExists('button[class^=mt-4]', 2);
2437                ReadytoClick('button.mt-4:nth-child(2)', 3);
2438            });
2439    });
2440    */
2441}