// ==UserScript== // @name Acfun屏蔽计划 // @namespace http://tampermonkey.net/ // @version 1.501 // @description 帮助你屏蔽不想看的UP主 // @author 人文情怀 // @match http://www.acfun.cn/a/ac* // @match http://www.acfun.cn/v/list63 // @match https://www.acfun.cn/a/ac* // @match http://www.acfun.cn/* // @match https://www.acfun.cn/* // @match https://www.acfun.cn/v/list* // @match http://www.acfun.cn/a/ac* // @match https://www.acfun.cn/a/ac* // @match http://www.acfun.cn/v/ac* // @match https://www.acfun.cn/v/ac* // @match https://www.acfun.cn/v/as* // @match http://www.acfun.cn/v/as* // @connect greasyfork.org // @require https://code.jquery.com/jquery-3.4.1.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM.getValue // @grant GM.setValue // @grant GM_xmlhttpRequest // @grant GM.xmlHttpRequest // @grant unsafeWindow // @run-at document-idle // @downloadURL none // ==/UserScript== function injectStyles(rule) { var div = $("
", { html: '­' }).appendTo("body"); } injectStyles(` div.panel-background-color{ background-color: rgb(255, 241, 242); } div.ctabs{ position:relative; height: 28px; /* border-bottom: solid white 1px; */ font-size: 13px } a.ctab{ white-space:nowrap; user-select:none; padding: 1px; margin: 1px 1px 0px 1px; position:relative; display: inline-block; width: 50px; height: 25px; font-size: 15px; z-index: 9999; background-color: #f0b0b0; color: #4f2e10; border-style:solid; border-color: white; text-align:center; } a.ctab-focus{ background-color: #ececec; transform: translate(0, 3px); } `); injectStyles(` .blockname{ font-size:13px; display:inline-block; margin:2px; height:18px; background-color:white; } .blockdel{ width:18px; height:18px; line-height:18px; padding: 2px; background-color: rgb(255,120,120); border-width:0; font-size:15px; margin-left: 4px; } `); injectStyles(` button.disabled{ cursor: not-allowed; pointer-events: none; /*Button disabled - CSS color class*/ color: #c0c0c0; background-color: #ffffff; }`); injectStyles(` .filter-button{ width: 15px; height: 15px; background-color: rgba(255,0,0,1); padding: 1.5px; left :0; top:0; transform: translate(0,0); display: none; position: absolute; z-index: 99999; background-size: contain; background-image: url(data:image/png;base64,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); border-radius: 11px; border: 2px rgb(230,230,230) solid; cursor: pointer; } `); function core() { 'use strict'; let version = "1.501"; let empty = (a) => { return typeof a === "undefined" ? () => { } : a; }; let GM_set = typeof GM_setValue === "undefined" ? function (key, value, callback, failcallback) { let p = GM.setValue(key, value); p.then(empty(callback), empty(failcallback)); } : function (key, value, callback) { let res = GM_setValue(key, value); callback(); }; let GM_get = typeof GM_getValue === "undefined" ? function (key, value, callback) { let p = GM.getValue(key, value); p.then((debug) => { empty(callback)(debug); }, () => { callback(value); }); //console.log("empty", empty(callback)); } : function (key, value, callback, failcallback) { let res = GM_getValue(key, value); callback(res); }; //清空列表。DEBUG用 function cleanList() { GM_set("ACFUN_BLOCK_LIST", []); GM_set("ACFUN_BLOCK_KEYWORDS", []); } let ups = function (callback) { GM_get("ACFUN_BLOCK_LIST", [], callback); }; let keywords = function (callback) { GM_get("ACFUN_BLOCK_KEYWORDS", [], callback); }; let repliers = function (callback) { GM_get("ACFUN_BLOCK_REPLIERS", [], callback); }; let setUp = function (d, callback) { GM_set("ACFUN_BLOCK_LIST", d, callback); }; let setKeywords = function (d, callback) { GM_set("ACFUN_BLOCK_KEYWORDS", d, callback); }; let setRepliers = function (d, callback) { GM_set("ACFUN_BLOCK_REPLIERS", d, callback); }; function setUpdateTime(time, callback) { let t = typeof time === "undefined" ? +new Date() : time; GM_set("UPDATE_TIME", t, () => { empty(callback)(t); }); } function getUpdateTime(callback) { let time = 0; GM_get("UPDATE_TIME", time, (d) => { console.log("get update time", d, parseInt(d)); callback(parseInt(d)); }); } function addToUpList(id, callback) { ups((old) => { if (old.indexOf(id) >= 0) { $.info.show("你已经屏蔽过UP主[" + id + "]啦!"); return; } old.push(id); GM_set("ACFUN_BLOCK_LIST", old, () => { $.info.show("已将UP主[" + id + "]加入屏蔽列表"); empty(callback)(); setUpdateTime(); }); }); } function removeFromUpList(id, callback) { ups((old) => { let i = old.indexOf(id); if (i >= 0) { old.splice(i, 1); } GM_set("ACFUN_BLOCK_LIST", old, () => { $.info.show("已将UP主[" + id + "]移出屏蔽列表。"); empty(callback)(); setUpdateTime(); }); }); } function addToKeywords(id, callback) { keywords((old) => { if (old.indexOf(id) >= 0) { $.info.show("你已经添加过关键词[" + id + "]啦!"); return; } old.push(id); GM_set("ACFUN_BLOCK_KEYWORDS", old, () => { $.info.show("已将关键词[" + id + "]加入屏蔽列表"); empty(callback)(); setUpdateTime(); }); }); } function removeFromKeywords(id, callback) { keywords((old) => { let i = old.indexOf(id); if (i >= 0) { old.splice(i, 1); } GM_set("ACFUN_BLOCK_KEYWORDS", old, () => { $.info.show("已将关键词[" + id + "]移出屏蔽列表。"); empty(callback)(); setUpdateTime(); }); }); } function addToRepliers(id, callback) { repliers((old) => { if (old.indexOf(id) >= 0) { $.info.show("你已经屏蔽过评论者[" + id + "]啦!"); return; } old.push(id); GM_set("ACFUN_BLOCK_REPLIERS", old, () => { $.info.show("已将评论者[" + id + "]加入屏蔽列表"); empty(callback)(); setUpdateTime(); }); }); } function removeFromRepliers(id, callback) { repliers((old) => { let i = old.indexOf(id); if (i >= 0) { old.splice(i, 1); } GM_set("ACFUN_BLOCK_REPLIERS", old, () => { $.info.show("已将评论者[" + id + "]移出屏蔽列表。"); empty(callback)(); setUpdateTime(); }); }); } let filterButton = document.createElement("div"); function initButton() { document.body.appendChild(filterButton); $(filterButton).attr("class", "filter-button") } function handleSpecialJSONstr(str) { let str2 = str.replace("\n", ""); let matches = str2.match(/\"title\"\:\"(.{0,55})\"\,"[a-zA-Z]{1,15}":/); if (matches !== null && matches.length > 0) { let title = matches[1]; let res = str.replace(title, ""); return [res, title]; } else { return [str2, "无标题"]; } } //获得所有主页的UP的DOM TAG function getHomeSelection() { let res = []; //过滤主页视频 let selections = $("a[data-info]"); for (let i = 0; i < selections.length; i++) { let tag = selections[i]; let info = $(tag).attr("data-info"); let json = ""; try { let temp = (info); json = JSON.parse(temp); let title = json.title; let username = json.userName; res.push({tag: $(tag).parent()[0], title: title, username: username, type: 1, json: json}); } catch (e) { console.error(e); } //$(tag) } //过滤右边排行榜视频 let sel = $("ul[data-con]"); //For each rank for (let i = 0; i < sel.length; i++) { let tag = sel[i]; let rows = $(tag).find("li"); //For each row for (let ri = 0; ri < rows.length; ri++) { let rowTag = rows[ri]; let aTag = $(rowTag).find("[title]")[0]; let title = $(aTag).attr("title"); let matches = usernameByTitle(title); let titlestr = titleByTitle(title)[0]; if (matches) { let username = matches[0].substring(3).trim(); res.push({tag: rowTag, title: titlestr, username: username, type: 2}); } } } //--------------------主页文章区 sel = $("div[data-con]"); for (let i = 0; i < sel.length; i++) { let tag = sel[i]; let rows = $(tag).find("li"); //For each row for (let ri = 0; ri < rows.length; ri++) { let rowTag = rows[ri]; let aTag = $(rowTag).find("[title]")[0]; let title = $(aTag).attr("title"); if (title) { let matches = usernameByTitle(title); let titlestr = titleByTitle(title)[0]; if (matches) { let username = matches[0].substring(3).trim(); res.push({tag: rowTag, title: titlestr, username: username, type: 3}); } } } } //香蕉搒 var allBananas = $("figure.fl.block-box.block-video.weblog-item").find("> figcaption > em > a"); for (let i = 0; i < allBananas.length; i++) { let sel = allBananas[i]; let upname = $(sel).attr("title"); let tag = $(sel).parent().parent().parent()[0]; let title = $(sel).parent().parent().find('b > a').text(); res.push({tag: tag, username: upname, type: 1, title: title}); } //大版推荐 let allBig = $('.module-video-big').find('.text-overflow').find('a[title]'); for (let i = 0; i < allBig.length; i++) { let title = $(allBig[i]).attr("title"); let regx = /UP:(.+)/; let r = regx.exec(title); let username = r[1]; let tag = $(allBig[i]).parent().parent(); let subtag = tag.prev(); let titlestr = titleByTitle(title)[0]; res.push({tag: subtag[0], subtag: tag[0], username: username, type: 5, title: titlestr}); } // console.log("res",res); return res; } function getListSelection() { console.log("list selec"); let res = []; let sel = $("div.weblog-item"); for (let i = 0; i < sel.length; i++) { let row = sel[i]; let aTag = $(row).find(".atc-up")[0]; let username = $(aTag).attr("title"); let title = $(row).find('a[title]').attr("title"); res.push({tag: row, username: username, type: 4, title: title}); } //Video List let sel2 = $("li.weblog-item"); //console.log(sel2); for (let i = 0; i < sel2.length; i++) { let row = sel2[i]; //console.log(row); let title = $(row).find("b.text-over").find('.third-title').text(); let username = $(row).find("p.up-name").find('a.third-name').text(); res.push({tag: row, username: username, type: 4, title: title}); } //console.log(res); return res; } let pageType = "home"; //显示/刷新屏蔽的UP主 function displayUpList() { ups((data) => { //console.log("up",data); $("#upnameList").empty(); for (let i = 0; i < data.length; i++) { let style2 = ""; let b = $("
" + data[i] + "
"); let del = $(""); b.append(del); let str = data[i]; del.on("click", function () { removeFromUpList(str, () => { displayUpList(); if (pageType === "home") { FilterHomePage(); } else if (pageType === "list") { FilterListPage(); } }); }); $("#upnameList").append(b); } }); } //显示屏蔽的关键词 function displayKeywords() { keywords((data) => { $("#keywords_list").empty(); for (let i = 0; i < data.length; i++) { let b = $("
" + data[i] + "
"); let del = $(""); b.append(del); let str = data[i]; del.on("click", function () { removeFromKeywords(str, () => { displayKeywords(); if (pageType === "home") { FilterHomePage(); } else if (pageType === "list") { FilterListPage(); } }); }); $("#keywords_list").append(b); } }) } //显示屏蔽的评论者 function displayRepliers() { repliers((data) => { $("#repliersList").empty(); for (let i = 0; i < data.length; i++) { let b = $("
" + data[i] + "
"); let del = $(""); b.append(del); let str = data[i]; del.on("click", function () { removeFromRepliers(str, () => { displayRepliers(); filterReplies(); }); }); $("#repliersList").append(b); } }) } //检查公告 function checkAnnouncement(callback) { let xhttp = typeof GM_xmlhttpRequest !== "undefined" ? GM_xmlhttpRequest : GM.xmlHttpRequest; xhttp({ method: "GET", url: "https://greasyfork.org/scripts/384697-acfunblockerannoucement/code/AcfunBlockerAnnoucement.js", onload: function (response) { let text = response.responseText; callback(text); }, onerror(evt) { callback(null); } }); } //检查更新 function checkUpdate(callback) { let xhttp = typeof GM_xmlhttpRequest !== "undefined" ? GM_xmlhttpRequest : GM.xmlHttpRequest; xhttp({ method: "GET", url: "https://greasyfork.org/scripts/381476-acfun%E8%BF%87%E6%BB%A4up%E8%AE%A1%E5%88%92/code/Acfun%E8%BF%87%E6%BB%A4UP%E8%AE%A1%E5%88%92.user.js", onload: function (response) { let text = response.responseText; let p = /@version +(\d+\.\d+)/; let arr = p.exec(text); let latest = arr[1]; callback(latest); } }); } let show = false; let dragging = false; function banana(i) { let banana_0 = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAACaUlEQVR4Ab2WA7AcTRSF88e2XYptFGOzFNu2bdu2bdu2bTvje3LeTviMnn+qvt19PdN9rudFUn1Bu/sfxFoOyFPylb8PcS2+ciF/oolgPOlCukK/3xr6486wPgwHjfFOVKx8EPMiHP0QxWZDnBcAFnrrKZCRdCPHIfYzADNI5Ej/xwXnW3WIcRLAZC91/Oe2GKz3UxniMfydzOvwRgFkOoxnvSjW3Ifxojsgub0UHQKxbkJ/2O6XKL2dAeAWIHG8EEwHyCe2SzdX8C/c/A5UL2p/qgr781JXyB/G894AnrPAoqsuniqkeZC4IU+vMrTR4Wh7gxd90Bbmq7IqRfND7CfBinJCAVinUFQ60tODIYhOA7BRpadHwUODFbU/LwEwT1UBpeOBy6DdaxmCp9MhVhP/1maG2H5jqzqsd10AbAFkImkNsYpxPY6/5xPA+e5XsY1I81CS7NfmSuQkeQfn63q30h514Oyc7Os7RzsA+8sqN0QfZwJ4TF4QHWKc43qLEMXMl4N4xrRfoYkK/XFzejaJ5Tw4xM18McN42p2ztSe0+61C7aE7kbr/NUk+t4f5erj7gHrozBAAr0nCv3PTh7nZ6Zmo62Vz/z1WHOI8/5Ub5egPKgP4L7A+Owvr7VilYs63zSwevzMDH/KsyrS82RjsNQWetfFNJ+AqIClCavKUEOsk87vLfSOEO4dnAawniUI7zlKQRYB8Zng2htoz68Ms2J8W8u/aTFO+8P7/mo4hasBDajL0c/j3bTj6YZ8h9td1vqJjNLh+F4BGDgNOPa5HUTXME5CSpCUZSkZyYhWmQDZ3XeKG5bwfy2sngYJT7nMAAAAASUVORK5CYII=)"; let res = "
"; return res } let articleId = 10271618; function feedBanana(n) { try { //let a = btoa(Math.random().toString(36).substr(2)) //let str = '$.cookie("stochastic","'+a+'",{path:"/"});'; //console.log(str); //unsafeWindow.eval(); //let cookie = unsafeWindow.eval('(()=>{return })();'); let command = ` let a = btoa(Math.random().toString(36).substr(2)); $.cookie("stochastic",a ,{path:"/"}); let c = $.cookie("_did"); $.ajax({ type:"post", url: "/nd/pst?locationPath=throwBanana&certified="+a, beforeSend: function(e) { e.setRequestHeader("udid", c) }, data: { contentId: "` + articleId + `", count: ` + (n + 1) + `, userId: $.user.uid, }, dataType: "json", xhrFields: { withCredentials: !0 } }).done(function(e){ if (e.success>0){ $.info.success("成功投食了作者"+` + (n + 1) + `+"根香蕉O(∩_∩)O。谢谢支持!", 3e3) }else{ $.info.warning("投食作者失败了。"+e.info, 3e3); } }).fail(function(){ $.info.warning("投食作者失败了 /(ㄒoㄒ)/~~。请于稍后重新操作。", 3e3) })`; unsafeWindow.eval(command); } catch (e) { console.log("投食DEBUG", e); } } let banana_n = -1; function attachBananaEvent() { let banana_0 = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAACaUlEQVR4Ab2WA7AcTRSF88e2XYptFGOzFNu2bdu2bdu2bTvje3LeTviMnn+qvt19PdN9rudFUn1Bu/sfxFoOyFPylb8PcS2+ciF/oolgPOlCukK/3xr6486wPgwHjfFOVKx8EPMiHP0QxWZDnBcAFnrrKZCRdCPHIfYzADNI5Ej/xwXnW3WIcRLAZC91/Oe2GKz3UxniMfydzOvwRgFkOoxnvSjW3Ifxojsgub0UHQKxbkJ/2O6XKL2dAeAWIHG8EEwHyCe2SzdX8C/c/A5UL2p/qgr781JXyB/G894AnrPAoqsuniqkeZC4IU+vMrTR4Wh7gxd90Bbmq7IqRfND7CfBinJCAVinUFQ60tODIYhOA7BRpadHwUODFbU/LwEwT1UBpeOBy6DdaxmCp9MhVhP/1maG2H5jqzqsd10AbAFkImkNsYpxPY6/5xPA+e5XsY1I81CS7NfmSuQkeQfn63q30h514Oyc7Os7RzsA+8sqN0QfZwJ4TF4QHWKc43qLEMXMl4N4xrRfoYkK/XFzejaJ5Tw4xM18McN42p2ztSe0+61C7aE7kbr/NUk+t4f5erj7gHrozBAAr0nCv3PTh7nZ6Zmo62Vz/z1WHOI8/5Ub5egPKgP4L7A+Owvr7VilYs63zSwevzMDH/KsyrS82RjsNQWetfFNJ+AqIClCavKUEOsk87vLfSOEO4dnAawniUI7zlKQRYB8Zng2htoz68Ms2J8W8u/aTFO+8P7/mo4hasBDajL0c/j3bTj6YZ8h9td1vqJjNLh+F4BGDgNOPa5HUTXME5CSpCUZSkZyYhWmQDZ3XeKG5bwfy2sngYJT7nMAAAAASUVORK5CYII=)"; let banana_1 = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAAEQklEQVR4Ab2WA5hkuRbHe2ZRN7mFNqvWtvH2rW2Mbdtt27Zt2zbGtm116Ww6rTtW1Z7v+8fJL040VG3eMwTv+80W9ATNF+7wmyXYYzeKzdRQt3lPF2yWb5fAvnIxdKWaQIGHgdRtkmCJWqG+s0QHtuSK4XynBA5Xi+FMiwk4jGGL1Ao1+5V/PHyJ8PjeUhOothGC9V/87cu/Yl5QK3T+xzxtAvmlwl9P3maPwfYPPE3jv7CV3zATW6L1pDvDhOA5Hm8hHcFqBdqPYpfEr9U8tbNQDLDNBA4EIQiYhPYT8Ai1AG3/Zn/Nstc62xIrBtlWCcAuovWGsN6RBxEzUI461nKE2yT+totdEtiQLqbAIZWLIG4WI/f4m2esUuia79EP1UG6V3rSxKDYTmHD6jGEA75ktDNRvkqhjmPYnEtdJrAlhzNKrlJ4EDIVnVEp1H0yf4tyJ7mJyu4ATWUgeApfSpYBqWo9+ZHLRUfPtErg+ubbADsMAJJ5EDVTqCRl31QJdN2PaFRbrJ70yoYByIHvAHY/2x/eSZTLUmjYdM0+6DsqgTqNY8u35XKm9di84XCDDgVKExjwHq+pINCnb54mtPo79Ds54KvNf8Hzlvyf+ZKk6d8NaPk7/tNvjt7lg5UD0APfAhydOXRGIYWh0B5HPvhNElwl7Y0cONR4FAF5kM1woCtRX36o0gh2FxlCc5SeLNlC8wR5H3e7jGfbyIhS7f5hzcx/xZOs/8TzSbzId5buxaO1A6Pa9xHAGY/+8BZjgAxEgX3KW6YJ/pPxfgpc9S16PWKp8MTGDCOyCW7aef3rMqS+I7G/3Ah25BvQTl3dwCl/6B+Ak1Yk/AwBmgBk4SHgmTAEuUsF4DkBu1Go3d84aluarrKH3CJH62+CSvdQ/47a/QLA4XEAx5cAHPypP22jEUAmBQ6pap0IomahvqkVDq7jkymLUG9vgQgur5eAfPudIJwp3P8pgfxGRvcHwJ6Xh/Pa9Ol55AJ3erLQYYfBawLO1uBa2Ex8hhYqFcH+YmOQbbsD8A6i61cipBCuToUi2OrGB98J6CIdJdeiFvFXXImhBel1tSNCGy40GN4TRndnuYjWuRl4mqzjXh8W8lYimeM/eNztbpSRKYvxdW6l3d4sbPYSgLJEBFCnDdCo069abTojN68bVxciEd08jTZI4T4eB2jcyQJmsH/VWiIFt/K1WAY67AXQ5SCAqyRM0u5bFeZI7jIGR977+zgJB6YtZOTX425soDeeoYe73kII1WZCqCN+g6UQOkmHtrnz4VjQ8KgvRfEgag6+7DmZ/fH+n6i/0Gfke3GsZCWjPBd+/yO7EMmDglVIFreE70xvnYcxj1HM/0Ono7bw6eh85hJG1mbD0If4dChRGA+OhSLY7I2hxJyVhs/Cp5OXsUspTIVfEd1lXzDf2o1iLcnH2Zc82FEOo1lXs1/wBJKn+aDt/QuVqtkurjj8qQAAAABJRU5ErkJggg==)"; $(".bbanana").on("mouseover", function () { let id = $(this).attr("id"); let n = parseInt(id.split("_")[1]); banana_n = n; let all = $(".bbanana"); for (let i = 0; i < all.length; i++) { let tid = $(all[i]).attr("id"); let tn = parseInt(tid.split("_")[1]); if (tn <= n) { $(all[i]).css("background-image", banana_1) } else { $(all[i]).css("background-image", banana_0) } } }) .on("click", function () { let id = $(this).attr("id"); let n = parseInt(id.split("_")[1]); feedBanana(n); }); $("#banana_contain").on("mouseleave", function () { $(".bbanana").css("background-image", banana_0) }) } function bindKeywordInputs() { $('#keyword').keypress(function (e) { if (e.keyCode === 13) $('#enterKeyword').click(); }); $('#enterKeyword').on("click", function () { let val = $("#keyword").val(); if (val.length > 1) { $("#keyword").val(''); addToKeywords(val, () => { displayKeywords(); if (pageType === "home") { FilterHomePage(); } else if (pageType === "list") { FilterListPage(); } }); } else { $.info.warning('不能添加过短的关键词。'); } }) } function checkBananaFed() { let url = 'https://www.acfun.cn/member/collect_up_exist.aspx?contentId=' + articleId; $.ajax({url: url}) .done(function (d) { //console.log(d); if (d.result && d.result === "请先登录") { $("#banana_contain").text("登录投蕉吧!") } else { if (d.data && d.data.banana) { if (d.data.banana > 0) { $("#banana_contain").text("感谢" + d.data.banana + "蕉支持!"); } } } }) } function addPanel() { let dx = 0; let dy = 0; let sx = 0; let sy = 0; let ox = 0; let oy = 0; injectStyles(` div.panel-drag-image{ height: 92px; left: 22px; width: 66px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAACACAYAAAB3GFWBAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAC6WSURBVHja5F1pWBPn2r4zk5CFBAIBwo5BQUQQxQ2r1rrWpXTB3Wr1WGu1elz60arVU6u1tse2LlXrbqtVq1UURduKVSuIgBsIgspS9p2QsIQkZDLv9yMlGlm1ntra57ryI8lMkrnzrPfzvO9wpk+f/vG33377H/wBiY2NdWpoaCgDAAcHByooKIjgHyjctg64desWv7i42P3evXtdVSqVQ2lpqWtJSYlbZWWlE03TTHp6ejetVmvN4XBACAGHwznp6OiY6+zs/BtFUUYHB4fSHj163DIYDDRN06ynp2elj49PtaenJ+Pt7f3sg3n8+PGAzMxM/3Pnzr2UnJzc22Aw+On1egAARVFgWRYURQEAeDwehEIhGIZpPD20trYWKpXK/Nr58+dhNBrBsqz53L59+84NCgq64eXlVTpw4MCikJAQ9m8PplartU5KShJGRkZOjouLeyEpKan375rmweVyIZFI0LWjMxRu9vB0tkWAwhbOtlwIeARWNIE1Vw8u0YNwOOAQAsLhwAgrGAmFWoMVtAYOarQsWAJkFWsQczMfCakFSElJ2Xbjxg0AAIfDiZLJZAVvvPHGV/3798/1L1+nf9rAeE2/+MjncJycnAjDMNBoNAAAmqYhs7PBotefw9AAa9hQKlCsDmCZJ/QzOWC5NlAZbXG7wIBLyUU4dfE26rU6GI1G0DQdFRgYeGHevHnfPM/urf5bgUnTNLGysoK1SIg3Xu6NqS/IYc8pfoLgtS2E4qMaTjgap8TOiERo6rUAEBUYGHhh1qxZ+4ODg1Wy1P97pKCmDPySk3EvQ1xaVirW6/U8iqIIj8djxGKxXqFQ1Do4ODDS5EXkiYLJ5/PJsXUT0FWmAsXUPX3HQ3GhhguW7bmNS9fuAQDs7Ox2TJkyZcuLL754r1PhGkNLp2p6b8WVK1fsT506NTQxITG0uqZ6WuN7NE3f921cLsRi8Y4uXbok9u3bNyEkJCTHx8dHJ0yc+8fAfPdfL5IFg/R/PW/+O6gR8SpsOhgDvV4PmqajXnzxxb3vv//+KZd7y8wBK4aaabtt27Y37t27F6LRaKY0gsflciHgC+Db2Reurq4AAKPRiMLCQuT8lgPGyJiDpFAo/GbatGkb5wdcT3lsMDcsGUte66L8S0fJOtoN72xORuKtLAAAn88/9sEHH/yfr69v5YkTJ/r98MMP77MsO4KiKFhbW2PEiBEICQmBj48PnJ2dYW9vDx6PB5qmYTQaUV9fD6VSidK4JPC3/YRN9fdwoTIHFEVFT5gwYd3SpUvP+/v7PzqYG5eOJa/6/bXBbAxc5cQDi7ZcQ1J6LljWpJiNmsXlcvHKK68gPDwcPj4+EAqF4PF45hSuOTGUq1Dy6nLobmZgvz4X36IIpbQB7u7umz/79LPlkyZPqn0kY/r7ZHEETpx8HPq3HCe/HA8+n28G1Gg0gs/nY+jQofDx8YFUKgWfz28VSADgOdmB+mwmCqHDWDjjBILxsbEj6grL/v3mrDcPLly4sGdGRsazCOZ98RXlI2nbEOxeOQ7W1tagaRparRb/WfEfXLt27cECou2of+kGHPUcMGBxGuXoARskGvvCo54Tum3btuvjxo37MCEhgcrjDMaDj2cGTACgDWoMci/Bla2hUHiagotKrcK0adOQkpLSbkBVCamwARcEwBDIwAOFJNRgGTqCZVmkp6evmjRp0sbyq+uoZ1IzHxSxsQjnVgfi31OHgKIoqNVqvPXWW8jKymoTUKPRCGNOKQBADj46QAgAkIGHLrBGF54tKIpCYWHhv999993ZmrStzzaYAMAx1mPBID1OfjkRNE0jLS0Na9euRX5+PoxGY6tgUnU6i9c6QQRviNAAgq+CXkKHDh1AURQSExO37dixo+czD2aj+InzcXr9eNA0jWPHjmHTpk0oLS1t8XiWZcHTNDT7ngcEsB/zHNasWQOJRAKWZbFjx4610TunyP4RYAKAtyAPF7aMA4/Hw+7du3H48GHU1NS0rJ28liEQe7pg2LBhCA8Ph5WVFRiGGbFo0aJvMqI/sPpHgAkAzlQ+zn/1KrhcLtb9dx1SUlLQSCFapEY8Hhh7caufZW9vj4kTJyIgIAAURUGv14ceO3as1z8GTABwRD5+3fwqWJbB/PnzkZ2d3SQg0TQNYf/AFj9DV2UirVxdXREeHg4ejwcAOHz48OLY2FjuPwZMALAn+YhYG4rMzEx88MEHzQYklxd6tXh+6dHzqLuVCYFAgH79+qFfv34AAK1WO+7YsWNBTdK1kQP8P/Jz0D6zgEq51Rg6qB8+3/MzCCEICAiAjY3NfQaJYZGW9xvssiub/hmF1bhbVQqplyvsfTugU6dOOHr0KBoaGpCSkuLy/PPPH/Xy8mL/MWACgINVNV4cHIIV639Ax44d4ePjCysrUwzhuziAay1EwdkrsNE17ZxI04qRXpADrpAPmy4K5Obm4t69e2BZtnNgYOD2kJCQun+EmT8c5eeMD8GKFf9BZmamhf90fXkQZGveRD3VPFfsffYOlNM+RfakD/HOpfvk/40bN/z/MT7zYZk+gA9iZLBjxw6oVCqLQNThzVdRPWd4i+fK9ECnxAJIyzTYyvhBzFJITEwc+o8Fk2uowsUvByEh9hwuXrxo7nsBgEAgQMDsCcge6tvqZ0hAw4eIYG3koLCwMODy5cv0PxJMAOAbyrF18QCsXr0amZmZaGi4XwGJg3wQuOIt5LzcrWWCBRwQmNyBwWAIvXXrlsM/FkwAcLMqwvSRvli/fj0KCwtByH1f6fhCLwQtfRMVS15p0Yc+KOfPn+/3jwYTLINXgnn49cI5nDhxArW1loS6Xb9uCPhoDqz2vovsDpJWa/s7d+70/GeD+bu5b3lvOLZv3dRsdSQQCNBx+svoHbEO+p3zkTWoI0rEHAAA4XBQT5u0tri42C81NZUDtGPW6FmWIGkBgjq7IjIyEgqFAlKptGnACfaDJNgPHaaHouridSjTs0GtPwxNBQAG4HK5DQKBgDxBzeSAcK3/loCunOKDs1E/oKCgoFXu08rKCs4vPgfF22OR8t6L5v4Sl+YafXx8npyZlxMPFNQ7/C3BtGELERLogaioKFRXtz2NQwiBWq2+XyHZSQufqM+MuloF8hQnMlmuzR86/81hcuzatQsZGRmtaufv6RAKCgrMnVEOh/PkknaWK8b3P9+CWvv0JgJ/viuAluv8+NqJcni72uDEiRPQ6XTtPu/3FrPmiYFZ3iBDubIa6jrmqYHJpTlYcSAHAOcxNaIBH83ogRMnTqCioqLt7+NywbIsaJpGUFBQwhMD8+ebVTAYDCis0Dw1MP3cBLh4NRNqyv2xP8PVuhaE0SE1NdWiKmoOSDN4FIWePXumPxEwWa4YWw9fAcMwOBuf/dTAlFtrwTAMIq+q/1DdPjusFy5fvoy6upanARmGMdN3FEXB29tb9UTALKiXQVOvBY/HQ1Z+5eObWSuyJ1EMhidr9RgrYzVsJSKs338JRp70sb9rWDcJbt26BaVSaQ4wD4tOp0NycnIj2xTl7Ozc8ETAPBlvaqN6enrCSAAjz/aJAsnwZNh0MAY7LrTuQjisHsP7+cJgMCBT9fiR3ZZbg9u3b+PXX39tMRCVlZXh7p27pjre0TG3d+/ebLvATKvxBKH4zUcynhS7I+IhFAoxY8YMMAyDIs2TBVNlsIbBYMCOo1fAclvvInb1dgDLstgWmf7Y30cbqtGg12HPnj1QKptOBur1eqSkpKBOY3IDr7zyyr4H328RTA3XFQs3XASoZipOmo/LOULo9XqIxWIUFBSAEIKlO65Cw3V9YmBmlRnBMAy0Wi3KG1o39b6+JkLiSnJOiwrQthDYSkTIzc1FVVVVE1PXarW4cuUKDAYDKIpCUFDQb+0C80ySFgyhwWF/7zdTXBQyXlh2rAHd/52ImSt/AMuyKCwsxPbt21FdXY1rKVnoOvUQlh1raMHPPZpPjblVYr6gH2JLWz1WJtCDpmlo6rWop2SP/Qe+/8Zz0Gq1yMzMhMFgOfFdVVWFqKgosCwLPp9/zMfHx4JuonQNTTN+Pc8Ja3adh7u7O2o5cpzJdETnt2IxYNY+fH/6CtRqtXldj9FohL+/P1xdXcHlctGtWzd8f/oKOr0egRKj50Nuw6P9WkNZ4UpyHiiKAo/Hw9HoW81bSePhnPuzmoXVj8/fdPUQAAAyMjIsBhd0Oh2uXIlDVVUVKIpC//79jw8cONAiuaZ2Hb9ueYEUF/89UQq9Xo+8vDwETjuIeZ8cNX9w4zgzj8eDq6srPDw8kJqaap7pCQkJQXR0NCZPnox+b+7H3ToToITiI/p6CVha2K6LaqClKChVgcfjwc7ODvoGFka6Zb+pYQTmHPDD3VcfG0x7gek6b968aeY5GyP40qXLwDAMJBLJoWXLlh1t8ocKBbz7pgxASVzx/Zlr5uejRo3CJ598gjNnzuDAgQNwdXUFRVGwk9ohMjISiYmJSEpKQnh4ODgcDk6ePImffvoJs2fPxpw5czBy/n6Usl7QUvb45UYxKGJo10VV6YXmiNq/f38YWSMYWLV4fJ2eA5lMBpqmcSe7+LFTJAGpgVgkxOXLl1FZWQmdTod79+5h3rx5KC8vB0VReO/995Y9rJUAQPXs4m5hWou33gDLsujduzdOnTqFQ4cOITw8HAMGDEBGRgZKS0vB4/Gw5pM18PPzg4uLC7p3746pU6dCbC1GQEAAtFotFixYgICAAIwaNQpj3juN7VcdTWxLOxmRn29WwWg0QiAQoEdwD9AUjQaW1+LxpWoj+vXrB7G1GAzDoJ59PEqQY6yHn7cctbW1uHjxIi5cuICZM2ciLS3NFOj69n17wvgJ+c26GoXr/XQmOtsOibeyQNM0Fi5cCH9/f0ilUhBCkJKSgo0bN4KmaSxfvhyjR4+GSCS6n6PZ2sLdwx2VlZWYM2cOVqxYga1bTcOh9fX1OHDgAIRWFDikoV2V1c5jJlMdN24cgroFgWfFQ42+ZV+YmqNC79698cLgF0xmmvf4xEv/IA8T17lyJSZPnozU1FQwDAOFQvHptm3bdra0gJYS8E0/sIjxwsJ1p8CyLHx8fNCrVy9YWVnBaDQiOzsb4eHhMBgMeOONNzB9+nTzuppGsba2Rp8+fVBZWQk+n4+XXnoJmzZtwtWrV6HValFbW4uuHeXtWvmWobaHUqUGn8/H1KlT0alTJ0ilUlTWsS2S08WVdfD19cX06dNN2ciV3McG00VmDaPRCI1GA63WNO3i6ur69e7duz9sbUkLBQANPCe8ssQU8rlcLqZNmwYnJycAQHFxMb755hukpKTA19cXCxcuhLOzswWPB5h6Jn379gEAVFRUwMrKCn379sWqVavMx3TzaR9NtuloKliWRadOneDt7Q2RSAQHBweUqRpa0GQJsspN02o+Pj5wcnJC/K2cx2b/S5Qac0rG4/Gi5s6d2+vkyZPzm/OTFmBeuqPHrB2lqNfqwOfzIZfLMWbMGAiFQpSWluK7777Dzp07IRKJsG7dOigUCoulcw/S+h07dgIA3L17F3q9HjY2Nhg/fjyWLVsGLpeLAEXbFZKe54RL1+6BoihMmzbNHFQAoFhZ33zwYW0gEAggk8kgk8nQo0cPVNfWo4HzeGBeumHSaj6fH7V9+/ZpmzZtutGjR482nT03Li4ODMPAx8cHlZWVeP/992FtbY2kpCSsXr0a586dg4+PD7788kv069cPfH7zeSJFUXB2dkanTp1w9epVhIaGwtraGmKx2MxIezm0nf9tPFMJo9GI7t2749VXX4VAILhPrJTVwMBzRHGdNS6nq2BgWAj4XOSVFsPJyQ1arRa2trYYNGgQzp49i6JaIbwFj4gkxUVOkbKRc7g1bdq0dq8s5mq1WkyaNAnW1taIjY2Fs7MzDh06hM8//xxarRbvvPMO3nrrLXh5ebUIpLkfIpWid+/eOHnyJKqqquDs7Iy6ujqkpqaCy+XCxqoBaMVQqjie2Bd5DHw+H6tXrzb7ZZqmQQhBdEIOLlzPR35+Pjp27Ai5XI6ysjLk5eU1TvViwYIFsLY2aeT5pAp493tUvaRQrzOAZVmUl5d7Z2ZmorFh1iaY9vb2mDx5MubNm2eqr5cuRWFhIYRCITZv3ozQ0FDY29s3a9oPi0gkgrOzM6qqqpCXlwd/f38YDAbU1NSAb8WDALWtasTyPakghGDKlCnmAAgAtbW1KC0tNed5I0aMAJfLBcMwJmK6sBB2dnb48ccfER8fj8GDTYuejkSnYlZ/f4s8uu3q/H4s0Gg0UzIzM2f6+Pi06wOogIAAJCcnQ6lUoqqqCpWVlZg1axZ++uknTJw4EY6Oju0CsrE6srW1RV1dHW7cuAGGYaDX66FUKtHF27nVJdgVrCsuXbsHX19fzJkzx9zDrq+vx86dO82DAlqtFnfv3jUn9BqNBgKBAAzDgM/no6GhAQcPHoTRaES5sho6yu7RCG9aaB6XYVkWZ8+eDWi3mQuFQlRVVWHt2rXmJNzBwQEikQg0TUOn05lLyPaA+fzzz0MqlaK6uhp1dXUoLy9HaWkpwib0A1DXAm9pj1f+7ywCAwOxefNmdOzY0dyX1ul02L17NyiKglAoxMaNGxESEgKpVIqSkhJ8/PHHePfdxQgM7IZvv/0WW7ZsMdfoAJCntoKfuP1g6omp8jIajTAajThx4sTMuXPn3vDz82sbTIlEgmXLloGiKGi1WhQXF5ucd1ERGhoaIJPJoFAo4OnpCScnJ0ilUrP5Ncn2OBw4OTnhtddeQ2pqKioqKnDjxg1otVp4OFk3CybLtcXMTfegazDgiy++QGBgoEXQEYlE2L59Oz766COMGTMGr732GqRSKfR6PVJTU6FSqTB48BB4enqiY8eOGDx4MKZOnQqtVguWZVGmNjwSmCqdlUW7t7Ky8p2kpKSlfn5+ba7w5fJ4PBiNRqSkpGDnzp04fvx4s8s8pFIphgwZgokTJ6Jv376Qy+UWF/1gvhkcHIzY2FhkZWXhu+++g9FohNyu6R9AKD7WRKqQfLcAe/bsQY8ePZp8pkAggL+/PzQaDVxdXc3vl5SUYN++fejbty9sbW3B4XAglUoxcuRIHDhwAGPHjgXLssgqqsWgR+izVdaxFjwmwzBISkrymjx58u02faZKpcLChQsxePBgfP/9980CyefzoVarcfz4cTOY69evR15eXpNOHpfLhYuLCwAgISEBqampoCgKXvZNq5ZDN/g4Fp2ML774AsOGDTNH4YfFYDCgqqoKDQ0NoCgKNTU1OHDgACIiIhASEmJOvxo1eciQIfj0008BAOv2nmuRujPymvrTewVNrefmzZu92xWAoqKi8P3337eZ8rz55psIDQ0190GWL1+OgIAA7N27F3FxcSgpKTHvWeTs7AyRSIQ9e/ZAIBDAV+EKW5RbRO5vr4vx9bEb2L59O8aOHdvs0NSDvtjDwwO+vr5gGAZxcXFYu3Yt3n77bYSEhFi0Xxt/b1hYGKytrcEwDLI0bi34x6ap3sGfUiw0k2VZJCUlDWtu3U+z5WRjLteSlJWVYc+ePfD390dERASGDzfNftfV1WH+/Pn45JNPsGnTJqjVanA4HNjb26O4uBgODg6QyWQY2reTOT0hXGtsvcTFwbN38f333+Pll1+Gvb19u9IuNzc3qFQqrFq1Cu7u7nj77bfNZW9z/lvAF4CiKGyOSGsn689BcbnajEfjBgAajWZKSkqKrF1gisXiNmdsAOC///0vdDodtm/fjoiICMjlchiNRsTHx+PKlSs4c+YMtFotRCIRpkyZgqVLlsLKygpBHe3NTbglh6qw58RVbNmyBT179mzRtB/UjMrKSohEIohEIsTFxSErKwvvvfce3N3dW1UCDsWBUCjE6YtJTfhNQlmhzmD1UDC0hr7BYCZu3n77bfMi1DNnzgxpMwDRNN1q0x0APDw8MGbMGBQVFWHVqlU4ffo0Ro8ejYiICEybNg05OTkoLCzErl274O/vj65du2Lp0qVIS0uDWq1GB0crNPCcMO2LFOQWq7Br1y6EhIRYUHitgVlaWgqBQAClUomtW7fixRdfxOjRoyGRtDzVKxAI4ObmhqqqKkgkEtxV2qCrzf0hBR1lB52Ogwf5Zj3EMBgM4PP52Ho8AVwbFxiFjti5fjXi4uLCYmNjjxYKulnUcJN73+cbqLY0MiwsDPn5+di8eTO+/PJLyOVy/PrrrwCAnj17Yu5c015AOTk5EAgEOHPmDBp3cSkrKwMARGU64rW1aXDt0AXnzp3D6NGjLVaJtdq+aGhAaWkpPDw8kJKSAqVSiblz58LFxaUJc/Vw0HRxcYGtrS1effVVXLtXZfF+dQMf9EPtxHKNyYfKXdzAs3UBAQfPjZzQmDaOO3/+fId2+cyWZM2aNRZROjQ0FNnZ2dDpdGbesjGaZmVlYcyYMeByudDr9UhKSgLDMDhy5AjeeustbNq0CV26dGk2pWpxEIFhUFRUhPr6euzbtw8LFy40r7BtTQwGA+rq6tDLV4pFz5UhrK+lmVfUspBYWSrS5XQVWJaFo9wVLDH9UVyxI2SOJr/8888/v/SHwHxwAJRlWfB4PDQ0NIBlWXA4HLi5uWHixIlm7VSr1aAoCjqdDufPnweXy8Xq1aswceJEuLu7N4m8bYlOp0NmZibi4+Ph6emJPn36gGVZ1NXVoaGhwWKlxMMDA3l5ebC3EYJnqIQNW2jJWVY1gEcxFhnGD+dMgeq5IaPvp0+EwoQZ80FRFO7cudM/QJDPeWww582bhx9//BG3b9/Gd999h8WLF5spt0ZH3ZgyKRQKODg4gBACKysrhIeHIzo6GmFhYyGXy1s1yyY5oNEItVqNuLg4xF2OQ3V1NRISEjBhwgT069cPw4cPxzvvvIOvv/4at2/fRlVVlUUQ1el00Gq1kIqtmiVV1HUN4OM+P1pPOSKnsAI0TSP4+TEWh/cb/TqsxRLo9fpxN25cbzGHM6uJTCaDj48PEhISHk5YzWRxI4XfsWNHs6nSNA1/f38oFAqsWbMGnTt3BofDga2tLcLCwto0x2aZG0JQXl6Or7/+Gps3b0Z9fT1YlkVVlaXfa/ytNE1jxowZmD59OoKCgmBjYyKLbWxs4O5oDcByJwSGtkVtvd6CeLmWa9JmubMb+FJXPOgAjFwx3pj7HrZ9/iG2b98xfeHmsI2tauaCBQuwf//+Fi+wEUg+n4+QkBALbtPW1hafffYZRo4caX6dw+E8FpCNYN6+fRs//vgjqqurYTAYzFpH0zRkMhlCQ0Mxffp09OnTB0ajEXv27MHw4cMRERFhrpYAQG9o2jcq1ogBEIuu7Md7LpsC7rS3YWzGYBu1NTk5eRSyfpS0CubKlSvh6+vbdueuf3+4urpamKyDgwPCwsIglUofyZRbE4lEgqKiombNX6lUIioqCoQQrFmzBnv37oVcLoder8fMmTOxZs0a3LlzBzU1Nejs2jTY3c7XwsPpfgmqhhzFZSZ2vXv/Ec1nB1IX2Ds4gmXZEQkJCc0CRbVWxjUnM2bMgJ2dXZOWBZfLfWxNbJZ1r6oyp1Ytyf79+80l5cWLF7FixQoAwIYNG7B+/XoAgLNY22TsZt+ZFAuQd/xcBIPBYNpmwtaxeR8OGsu/+BYUReHEiRMz/a1ym2gNNWrUKLSHq2v0q88///wjpTaPNQjwe0naGNhak5ycHBw9ehQdO3bEkiVLsHPnTgBAYmIiuFwurIyWLZwq4ozicjXcxCZGrZ7rgm9PxN9fPUG3PDXi0KknZI5OKC8vf+dO+h1xs2be+AMeFj8/P7z55pvm5+Hh4ZDL5fhfS2MAa21Y38PDAzKZqVz+5ZdfoFarIRaLMWLECHh4eIBlWTAMAw4sc8nPjmSiX5ACXIMpmO0+b/Kv7SmnWcLBks92AQB+OPrD0GbB7N+/P65fv45PP/0Uq1atwoYNG3DkyBEcOHAAnp6mwasuXbpg6tSp/3OtbExrEhISmmQWjdKnTx/k5+cjPT0dS5YsQVlZmTkfdnR0xLhx48yp1YNDaXqeEy4k3sPrIzr9zvDLsP1IrBlIQkibQxIunYJgLZbg7NmzM911KRZJM7eyshI1NTUIDAxEjx49zAkxy7JISEjAypUroVAo8N1335l5yv+1qFQqc/uhOZk8eTIAwMnJCePHj7fYSE8oFKJnz56gaRp6vR5qoz3sYBrjPn2LAc3loZtDFcAAB+IbLPhblmXRUF8NStIyZ8BQQox4eSJOHNodGhUV5Tdw4EAzaUydO3cOX331FTIyMlBcXIyioiJUVFTgzJkzeP311yGXy3Ho0CF07dq13Y21PyrFxcW4efNmi+9fuHABJSUlKCwsxLlz56DX682kCcuyEAqF5korq5yYqb+NB69g+vTp4DAa1NFuWLf3fOMO3OY9i9Kv/drm7xs5cTYA4PDhw3MtNDMwMBAnT57EmTNnIBaLUV9fDx6PBx6Ph3/96194/fXXH7me/iPS0NCA2NjYVo+JiopCRUUFRCIRLly4gOHDh0MoFJrLyLt375ozi8JKLXo7AvkaB7Cg8dJLL6GE9xomTZqEBzfyt7GxgcFgwPe71mPtkEkWLd8maZK9Jzr6+iM7I73T8ePHRWFhYfUAwA0ICMCaNWuQnZ2N5ORk1NTUoF+/fujatStsbW0hkUj+NI1sJJyPHz9ufh4SEoKZM2di9uzZzVY/ANC5c2czL6rRaHDhwgVzvltWVQ/CtcbJS6UIDQ0Fj8fD6tWrUVhYaBF0hg8fjuTkZOTn54M2asHQolZ76+988Dn+b8aYEQcOHBgRFhYWCQBcKysreHt7Q6FQYPDgwWCNRnDb2Kv3fyllZWW4evWqxfPWTB4ABg8ebNZMtVptwc/G3a2DotdUHIlejS8+n4GIiAhER0dbAPn74ig4OTlh165dqCrOho1HYKvf6eTdDVweD+fPn3/92rVrp3r37s1SFFgUnfwaRm0duBQFHo/71IBkWRY5OTkWQSEnJwfbt29v8RyFQoE+ffqAoig0NDQgNzcXOp3OPNyvUCjwww8/oFOnTsjNz8XXX3/dJA1qZMMCA00A3oj5uW1qkGMFNw8FtFrtuNOnT3cCAOrOnbso1rBgwQHLMKaS9Smtd2ZZFkqlEmKx2CK/bU1mzZoFBwcHc0p17do12Nra4rnnnsOZM2cQHByM1BTTrNPn6z5vtvvaaAEKhQIcDge/nP4BNKftYdmQQcNBURQ2btz4CQBQa8f2g729DDTPChyaBjgc0+MpganRaDBw4ECEhYU1Oyj2YFtXoVBg/Pjx5uBYXV2NmJgYTJo0CZ999hkkEgk+/vhj6PQmkKurq5tNzlmWRWZmJuzs7GBnZ4eykiIwdS0XDERThiNfLsTpH74FTdNR3bp1Ow8AVKZKD7l/DzOYHOrp7YHSGFVdXV0REhKCqKgoc/CTSqVYsmQJZsyYYT5+y5Yt8PLyMjPyeXl5qKqqwqBBg+Dm5oZdu3ahrq4OWq0WGo2m1Srnzp07oGnaZBGEICE64iGu0oDaojR8t/ZtzA7tiZ8jD4NhmGPh4eHhsbGxJj80ffp08lcRo9FIsrOzyahRo0hkZCRhWZZoNBqSnp5OlEolSU9PJ8OHDycAyJYtW4hKpTKfq1KpyNq1a8mUKVNIWloa2bBhAxGJREQkEhGhUEhomia/826Epmnzg8fjER6PR2xsbI4mJSVxTp06JRAJhcTTy5t890s6OfRrFnlr4XJiL3MgQqGQCIVCYmNjczQ0NHR8TEwMlxCCxsdfaveYxgGGWbNm4csvv0RNTQ2GDRsGqVSKsrIyXLp0CaWlpdiwYQPGjx9vHlwghJhWyF27hpdfDsW5c+ewfPlyAMDixYvxzTffmOt8LpcLPp8PsVi8w8PD465Cobij1+uFQ4cOje/evTsRCAQ6iY3NN5XlJf+aFxZi7ifxeLxjnTp1Sn399de/DQ0NzW9utv0vtxWPSCTCsGHDIBAIsG/fPkRHR4PP50OlUoHP5+Ojjz7CCy+8YDG4oNfrkZiYiOTkZIjFYpw8eRIGgwG9evVa8Morr2z19PS0O3369JBu3bql9OzZs8Db21srkUhIc6sm/Pz8sGHDhoWLFi7i6vQ6oZeXV+qCBQu29O7dW9XmveH+Smb+oOj1elJcXExiYmLIxYsXSXp6OlGpVMRgMDQ5tqSkhIwdO5aIRCLi5OhEgoKCiFAoJMuXL+/8oBk+yiM7OxtpaWmPdA6XkL/mjfisrKzg4uICZ2dnEEJazX2rqqpw8+ZNKBQKLF++HPn5+Vi7di0CugYUP+73P87N8ricp5QGPQq32dZvdHV1xbFjxyCTySASibBp0yYI+AK4ubv9qVvWPhWfWV9fj+rqakgkElhbW7e7b8SyLEpzMmHQ1oEnFEPq4gGRSARbW1t0794dFEWhoqIC6enpMLLGQzY2NsY/87qeSlJZXV2N1atXIz4+vl0M94Ng6i8fAW6chuHyYfwWfdjEpj/QCVUqlYi7HAcvL6/kP/tmok8FTKPRiLS0NIutatsN6O/UGAsOJNUFFrsLMgyD3377DXWaOvTq1Svuz76up2Lm9vb2+Oqrr+Dq6vpI9B5FUWhw7wZ9yT3IBk0Az9rGYtxGr9fj6tWrMBqNkMlkqj/9wp5GasSyLGFZ9rHOZRiGGAyGJufrdDoSHx9PnBydiEgkOvXjjz/yHzctetzHU9HMP5JBNKfJjXX56tWrUV1TjeDg4HOjRo36029ZSP0v80xCCBiGaXHDpSf1HTk5OQgPD8cvv/wCmqajPv744+1PQ0m4FRUVqKmpgUQiwZPMOdVqNaKjo5Gamgo3NzcMHToUHh4eT6yXxLIs1Go17ty5gwULFuDWrVugKOr8pk2bZgwdOtTwNMAEj8cjH374Iblx4waprq5+Ij5Ro9GQFStWmFkaAEQmk5GIiAiiVCr/8OdXV1eTy5cvkzlz5jSyQL8OGDBgzi+//ML7s/3kgw9IpVJC0zSRy+Vkx44dpKSkpNn69+EA0poUFBQQAKRLly5k7969ZP/+/cTDw4MAIJGRkY/9pzXW6+vWrXuQTvv1yJEj1k8TRDOYo0aNIvv37ydOTk5EJBKRCRMmkPj4eKJSqYjRaHysiy4uLiYymYwsWbKEFBQUEK1WS1JTU4lCoSAymYzEx8e3+Yc9KFqtluTm5pLIyEjSp0+fRiBjBw4cOOfixYvcvwKQZjBra2tJeno6mT9/PqFpmshkMvLBBx+QtLQ0otFoHhlMrVZLVq1aRfh8Pjlz5gzRaDTEYDCQmJgYAoBMnjyZFBcXt0oS19bWkoKCAhIfH082bNhAAgMDzSCGhIT8++DBg5K/CohmMH19fYlWqyWEEFJbW0tiYmLI8OHDCY/HI15eXmTHjh3k3r17pLa29pFyw+LiYhIcHEwUCoVZExt9KZ/PJ/Hx8RZuQ6/XE6VSSbKzs0l0dDRZsWIFCQ4OftDvxk6ePPnFh9ntvxSYNE2TgoICi6S4rKyMREZGki5duhA+n0/kcjlZvnw5SUpKItXV1YRhmGa1qbq6muTm5pKYmBgSExNDIiMjiVgsJvPnzzcHnvT0dCIWi8mGDRtIWVkZKS4uJqmpqWTbtm0kNDSUyGQyM4AKhWLDkiVL/CMjI4Xp6en4q4JoAebly5eb+EeDwUCio6PNPRMej0fkcjl57733yMWLF0lubi5RKpWktraWqFQqcv36dTJnzhwil8vNYAQGBhJfX18SGBhIsrOzCSGElJWVkeDgYBIcHExGjRpFfH19LaK+XC7fGxYW9vLBgwclfwcALSogiqLw888/IygoyKKN2khnNRITGw+cRX5WOr7Z/CnWr18PV1dXBAQEQK/XQ6PRIDk5Gb6+vnjttdcQHBwMtVqN3bt3IyMjAx4eHuZ+tUgkQufOnRsXv16WyWT5AwcOjB05cuTPgwYNKrC3tzd26dIFf0vh8/mkS5cuJDc310IzlUolGTVqFAFADl/OI4euqsmhq2py+JqKHPo1iyxZu5W4eXQwa9SSJUtIbm4uqa2tJQaDgej1epKdnU0mTJhAhg8fbnYlBoOBrFixgsjlcrJlyxb530nz2tTMrl274tatW8jIyDAv7GRZFvn5+fjpp5+watM+sFb31weyhAOIHBA07HV0CR6AGSODEBwcjNmzZ5t72I3SoUMHbN68GXV1deapCw6Hg8DAQLi5uUGhUKjxDAkll8shkUhw6tQp852bdDodzp07Z+rW9RnRcslYUQKpVIqNGzfC3d29WcrMyckJ3t7e5jKSw+FALBZDq9VCqVQKnikwh019H8s2HsHVlAxUVlaaG1THjh1DJ7+uMLay32Xir2cwcOBAKBSKFvftaI4xkkgkqKurg1KpFD1TYPL4Anj498XtmwmIizPtXJqVlYWrV69i1uKPWqbCYETmnRR4eXm1a6nzgyyP0WiEVCqFTCarf5bA5HIoGlYcBs7uXnjvvfeQkZGBiIgIWIsl8O4+qLUNslBTWQIeL/iR2Z6CggIIhcLFHh4emmdKM6+f3Aoel8a8/2xCXb0ea9asQUZGBt5a/B8wnJZN1wgaNE3jypUrLY7pNSemvXuvIDAw8PoLL7zAPFNgAoBEyIWLz30N43K56DNsbKsn3ok5hjt37iAxMRF5eXlt3uW+UZRKJS5duoTRo0ffxDMmlP8LE1Fea2q39h0SCpqm4ezmCVpo14KvZHFo3Xx8HD4LwcGmP2Dfvn1NVty2pJWnT5+GRCJZHBgYWP/MgamqKAX7e+fCs4Np27BXJr3Z7MpWLqvD3jVzcPrYASxevBg7d+7E5MmTcenSJfOq39YCT3FxMb766iuMGzcuor07//2tAtDJw3vQ7YUwAMCw8bOQlpyIrr0GWmojh0VtaRZWvB0GHs1BREQEBgwYAC6XC2dnZ8yePbvVzUcA006Dvy+U+nT48OGFeAaFAgBlnmk7BcpKDImNFGI7R3P6U3b3Cj5f+BqWzwrF3LffQkxMDF5++WXzfkJ5eXlwcnJqc7uI9PR0bNiwAbNmzdrWvXt38kyCmZV6FbvXf2heMyh384S+vhb1ZRn4fFEYvlo5D6OHDcLJkyexaNEieHl5WQBXVFSEzz77rMmtWi0iv9GI2NhYiMViDBw4sAjPqgiFQsLn88lLk2eTOcvWkSGhk4lMJiNOjk5k1qxZJD4+npSVlTXbZiguLjaTIYGBgWTv3r1EqVQ2IZE1Gg0ZNWoUEYvFJDU1lfMskRsWRIePjwwNDQbkp/2I/DSAy6Xg5WUNjUaI+fPno2vXri2a8G+//YaffvoJYrEYIpEIM2fOxMWLFzFw4MAmwwIMw8Da2hq/z5Y/k8J183TBti2Wu6Wcu6jGW//aCJFI1CKQarUa33zzDQBg6tSp6Ny5M8rLy+Hg4NBkMJWiKDNrZDQaObDYIOMZ8pmDXmh6+2k/PwezNjUnDMMgNTUVe/bsMYOZn5+P3r17w8nJqdlhBpqmoVar253c/y3B9OvSdA25nbT1ScOKigrzaoYVK1bA3d0dWVlZGDlypAVb/3AQ0uv1jZr5bILJ4zYFTqU2rdluboVYTU0Ndu3ahdjYWAwcOBCzZs1CYWEh1Go1BgwYYF4Q+jC5odfrIZfLvxGJROwzC+aWzT9ZvNDA8LD2k5Pw8vJqAozRaER6ejpWrlwJAFi0aBGEQiE++eQTPPfcc3B0dGzWxHU6HW7fvo0OHTqk/G37O+0JQN262mLbtssWL+bnFGLYsLFN9rasra1FZGSk+blAIEBmZiYuXLiAGTNmtGjitbW1yMjIwBtvvHELz7Bwp07tC4nE8j47p0+ngWGYJlG5oqIChw4dMgcUHo+HS5cugcfjwdPTs9nIz7Ks+T6NPXr0uPtMgymR8KBUuj9Av1Wie3cvXLhwATExMbC1tTXPV6alpaGgoABSqRQuLi44f/48qqur4erq2uwN3BpNvPG+QCEhIWV4xoX8GQ8/P7+P/0pDVv+Lx/8PABA9X74RMiUqAAAAAElFTkSuQmCC); background-size:contain; background-repeat: no-repeat; position:absolute } button.panel-toggle{ height: 92px; width: 23px; background-color: rgb(255,193,193); border-width: 0; } div.panel-wrap{ z-index: 999; position: fixed; left: 0; top: 0; text-orientation: upright; } div.panel-toggle-wrap{ position: relative; height: 92px; width: 23px } div.panel-content-container{ width: 280px; display:none; padding: 0px; z-index:998; position:fixed; background-color:rgb(255, 196, 196); left:23px; top: 0px; } div.upnames-list{ height: 220px; border: 0px solid white; margin: 3px;overflow-y:scroll } div.keywords-list{ height: 220px; border: 0px solid white; margin: 3px; overflow:hidden; display:none; } div.repliers-list{ height: 220px; border: 0px solid white; margin: 3px; overflow:hidden; display:none; } div.keywords-input-wrap{ height: 22px; background-color: rgb(220,220,220); } input.keyword-input{ height: 18px;width: 120px; border: 0 solid black; padding: 0; margin: 1px; } input.keyword-submit{ line-height:18px; height: 18px;width: 60px; border: 1px solid grey; margin: 1px; padding: 0; background-color: rgb(179, 255, 179) } div.announcement{ background-color:black; color: white;height: 220px; border: 0px solid white; margin: 3px;overflow-y:scroll; display:none; } div.cloud-panel{ color: black; height: 220px; border: 0px solid white; margin: 3px; display:none; } `); let panelWrap = $("
"); let panelToggleWrap = $("
"); panelWrap.append(panelToggleWrap); let panelToggleButton = $(""); let panelDragImage = $("
"); //panel container panelToggleWrap.append(panelDragImage); let panelContentContainer = $("
"); let ptabs = $("
"); let tab_1 = $("UP主"); let tab_2 = $("评论者"); let tab_3 = $("关键字"); let tab_4 = $("云备份"); let tab_5 = $("公告"); let panelUpNames = $("
"); //1 let panelRepliers = $("
"); //2 let panelKeywords = $(`
`); //3 let panelCloud = $("
"); //4 let panelAnnouncement = $("
正在加载公告....
");//5 //bind tabs tab_1[0]["tabBind"] = panelUpNames; tab_2[0]["tabBind"] = panelRepliers; tab_3[0]["tabBind"] = panelKeywords; tab_4[0]["tabBind"] = panelCloud; tab_5[0]["tabBind"] = panelAnnouncement; ptabs.append(tab_1); ptabs.append(tab_2); ptabs.append(tab_3); ptabs.append(tab_4); ptabs.append(tab_5); let cloudInfo = $("
本插件利用Acfun的私信系统实现云备份屏蔽设置。登陆后即可随时同步你的屏蔽设置。每次Acfun页面打开时将会自动检查和同步哟!
"); let cloudCheckTime = $(""); let cloudSyncButton = $("
"); panelCloud.append(cloudInfo); panelCloud.append(cloudSyncButton); panelCloud.append(cloudCheckTime); let advertisementInfo = $("
喜欢的话 安利哟:ac10271618
"); let bananaHTML = "" + banana(0) + banana(1) + banana(2) + banana(3) + banana(4) + ""; let versionInfo = $("
当前版本:" + version + " " + bananaHTML + "
"); let updateReminder = $(""); GM_get("ACFUN_BLOCK_POS", "{ox:0, oy:0}", (d) => { ox = parseInt(d.ox); oy = parseInt(d.oy); ox = isNaN(ox) ? 0 : ox; oy = isNaN(oy) ? 300 : oy; panelContentContainer.css("transform", "translate(" + (ox) + "px," + (oy) + "px)"); panelToggleWrap.css("transform", "translate(" + (ox) + "px," + (oy) + "px)"); }); $(document.body).append(panelWrap); panelToggleWrap.append(panelToggleButton); panelContentContainer.append(ptabs); panelContentContainer.append(panelUpNames); panelContentContainer.append(panelRepliers); panelContentContainer.append(panelKeywords); panelContentContainer.append(panelAnnouncement); panelContentContainer.append(panelCloud); panelContentContainer.append(advertisementInfo); panelContentContainer.append(versionInfo); panelContentContainer.append(updateReminder); $(document.body).append(panelContentContainer); $("a.tab").on("click", function () { $("a.tab").removeClass("tab-focus"); $("a.tab").each(function () { $(this)[0]["tabBind"].css("display", "none"); }); $(this).addClass("tab-focus"); $(this)[0]["tabBind"].css("display", "block") }); bindKeywordInputs(); attachBananaEvent(); panelToggleButton.on("click", function () { show = !show; panelContentContainer.css("display", show ? "block" : "none"); if (show) { displayUpList(); displayKeywords(); displayRepliers(); panelDragImage.css("left", "302px") } else { panelDragImage.css("left", "22px") } }); panelDragImage.on("mousedown", (event) => { sx = event.pageX; sy = event.pageY; dragging = true; }); $(document).on("mouseup", () => { if (dragging) { ox = dx + ox; oy = dy + oy; dx = 0; dy = 0; let maxHeight = $(window.top).height() - 123; let maxWidth = 240; ox = ox > maxWidth ? maxWidth : ox; ox = ox < 0 ? 0 : ox; oy = oy < 0 ? 0 : oy; oy = oy > maxHeight ? maxHeight : oy; panelContentContainer.css("transform", "translate(" + (ox) + "px," + (oy) + "px)"); panelToggleWrap.css("transform", "translate(" + (ox) + "px," + (oy) + "px)"); GM_set("ACFUN_BLOCK_POS", {ox: ox, oy: oy}, (d) => { //console.log("DEBUG", "POSITION SET", ox, oy); }); } dragging = false; }); $(document).on("mousemove", (event) => { if (dragging) { dx = event.pageX - sx; dy = event.pageY - sy; panelToggleWrap.css("transform", "translate(" + (dx + ox) + "px," + (dy + oy) + "px)"); panelContentContainer.css("transform", "translate(" + (dx + ox) + "px," + (dy + oy) + "px)"); } }); checkUpdate((v) => { console.log("new Version", v, "Local Version", version); if (parseFloat(v) > parseFloat(version)) { updateReminder.css("display", "block") .html("可以升级至:" + v + " 👉"); $.info.show("屏蔽系统有新版本了~") } }); checkAnnouncement((text) => { if (text !== null) { let evalRes = unsafeWindow.eval(text); //console.log("Info:", evalRes); if (!!evalRes && typeof evalRes.articleId !== "undefined") { articleId = evalRes.articleId; //update 安利 advertisementInfo.find("a").attr("href", "/a/ac" + articleId) .text("ac" + articleId); } } tryCloudSync(); checkBananaFed(); }); cloudSyncButton.find("button").on("click", function () { tryCloudSync(true); }); } function attachBlockButton() { let attach = function (list) { console.log("attach list", list); for (let i = 0; i < list.length; i++) { let item = list[i]; let tag = item.tag; if ($(tag).hasClass("event-attached")) continue; let tagType = item.type; $(tag).addClass("event-attached"); $(tag).on("mouseover", function () { if (window.currentTag === tag) return; let button = $(filterButton).detach(); const HOME_PAGE_ARTICLE = 3; if (tagType === HOME_PAGE_ARTICLE) { $(tag).parent() .css("transform", "translate(-15px,0)") .css("padding-left", "15px") .css("overflow", "hidden") .css("width", "260px"); $(tag).css("white-space", "nowrap"); $(tag) .css("overflow", "visible") //.css("overflow-y", "hidden") .css(" text-overflow", "ellipsis") ; } else { } $(tag) .css("position", "relative") .append(button); window.currentTag = tag; window.currentUser = item.username; $(filterButton).css("display", "block").off("click"); if (pageType !== "home") { $(filterButton) .css("right", "0") .css("top", "0") .css("transform", "translate(0,0)") } else { $(filterButton).css("transform", "translate(" + (tagType === HOME_PAGE_ARTICLE ? "-80%" : 0) + ",0)") } $(filterButton).on("click", function (e) { e.preventDefault(); if (typeof window.currentTag !== "undefined" && window.currentTag !== null) { console.log("un", window.currentUser, item, i); addToUpList(window.currentUser, () => { displayUpList(); if (pageType === "home") { FilterHomePage(); } else if (pageType === "list") { FilterListPage(); } }); } }) .show(); }); $(tag).on("mouseleave", function () { $(filterButton).detach(); window.currentTag = null; window.currentUser = null; $(filterButton).off("click").hide() }) } }; if (pageType === "home") { let list = getHomeSelection(); attach(list); } else { let list = getListSelection(); attach(list); } } let pannelAdded = false; function watchHomepage() { let mutationObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { let target = mutation.target; if ($(target).hasClass("clearfix") && $(target).hasClass("module-video")) { attachBlockButton(); HandleHomePage(); } }); }); mutationObserver.observe(unsafeWindow.document, {subtree: true, childList: true}); } function watchList() { let mutationObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { let target = mutation.target; if ($(target).hasClass("article-list") || $(target).attr("id") === "list-video") { attachBlockButton(); //屏蔽文章页, FilterListPage(); } }); }); mutationObserver.observe(unsafeWindow.document, {subtree: true, childList: true}); } function addUI() { console.log("Ad UI"); if (!pannelAdded) { addPanel(); pannelAdded = true; if (pageType === "home") { watchHomepage(); } else if (pageType === "list") { watchList(); } } } function getRepliesSelectionOld() { let sels = $("div.commentWrap"); let res = []; sels.each(function () { let replier = $(this).find("a[data-uid]").text(); let tag = $(this); let parent = $(this).parent().parent().parent(); let avatar = null; if (parent.hasClass("main-comment-item")) { avatar = $(parent).find("li.avatar")[0]; } res.push({ tag: tag[0], replier: replier, avatar: avatar, }) }); return res; } function filterReplies() { let commentMode = unsafeWindow.localStorage.getItem("ac_usp_commMode"); if (commentMode === "1") { //旧版评论 filterRepliesOld(); } else { //新版评论 filterRepliesNew(); } } function getRepliesSelectionNew() { let sels = $(".clearfix.area-comment-first"); let res = []; sels.each(function () { let nametag = $(this).find("a.name")[0]; let replier = $(nametag).text(); let tag = $(this); let avatar = null; res.push({ tag: tag[0], replier: replier, avatar: avatar, }) }); let sels2 = $(".clearfix.area-comment-sec"); sels2.each(function () { let nametag = $(this).find("a.name")[0]; let replier = $(nametag).text(); let tag = $(this); let avatar = null; res.push({ tag: tag[0], replier: replier, avatar: avatar, }) }); return res; } function filterRepliesNew() { // console.log("FilterRepNew"); repliers((list) => { // console.log("Repliers", list); let pagelist = getRepliesSelectionNew(); for (let i = 0; i < pagelist.length; i++) { let item = pagelist[i]; let replier = item.replier; if (list.indexOf(replier) >= 0) { hideCommentTag(item); } else { showCommentTag(item); } } }) } function filterRepliesOld() { repliers((list) => { let pagelist = getRepliesSelectionOld(); for (let i = 0; i < pagelist.length; i++) { let item = pagelist[i]; let replier = item.replier; if (list.indexOf(replier) >= 0) { hideCommentTag(item); } else { showCommentTag(item); } } }) } function attachBlockReplierButtonOld() { function attach() { //console.log("attach block replier"); let sels = $(".comment-item-footer"); sels.each(function () { if ($(this).hasClass("event-attached")) { return; } //wrap all let wrap = $("
"); $(this).parent().append(wrap); let nameTag = $(this).prev().prev(); let contentTag = $(this).prev(); let toolbarTag = $(this); let name = $(this).prev().prev().find("a[data-uid]").text(); //console.log(name, $(this).find("span.comment-toolbar")); let btn = $("屏蔽"); $(this).find("span.comment-toolbar").append(btn); nameTag = nameTag.detach(); contentTag = contentTag.detach(); toolbarTag = toolbarTag.detach(); wrap.append(nameTag).append(contentTag).append(toolbarTag); btn.on("click", function () { addToRepliers(name, () => { displayRepliers(); setTimeout(() => { filterRepliesOld(); }) }) }); $(this).addClass("event-attached") }) } let mutationObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { let target = mutation.target; if ($(target).hasClass("main-comment-item") || $(target).hasClass("quoted-comment-item")) { //console.log("target", target, mutation.type); attach(); filterReplies(); } }); }); mutationObserver.observe(unsafeWindow.document, {subtree: true, childList: true}); attach(); filterReplies(); } function attachBlockReplierButtonNew() { injectStyles(` .area-comment-block { background: url(data:image/png;base64,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) no-repeat; background-size: 13px 13px; background-position: 0 1px; padding-left: 17px; padding-right: 15px; color: #999; } `); function attach() { //console.log("attach block replier NEW"); let sels = $("div.area-comment-tool"); //console.log("New sels", sels) sels.each(function () { if ($(this).hasClass("event-attached")) { return; } let name = $(this).prev().prev().find("a.name").text(); let replyBtn = $(this).find(".area-comment-reply"); let btn = $("屏蔽"); btn.insertAfter(replyBtn); btn.on("click", function () { addToRepliers(name, () => { displayRepliers(); setTimeout(() => { filterRepliesNew(); }) }) }); $(this).addClass("event-attached") }) } let mutationObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { let target = mutation.target; //console.log(target) if ($(target).hasClass("area-hot-close") || $(target).hasClass("area-sec-close") || ($(target).hasClass("area-comment-top"))) { //console.log("target", target, mutation.type); attach(); filterReplies(); } }); }); mutationObserver.observe(unsafeWindow.document, {subtree: true, childList: true}); attach(); filterReplies(); } function addArticlePageUI() { let commentMode = unsafeWindow.localStorage.getItem("ac_usp_commMode"); attachBlockReplierButtonOld(); attachBlockReplierButtonNew(); } function titleByTitle(t) { let regex = /.+/; return t.match(regex); } function usernameByTitle(title) { let regex = /UP:(.+)[\s\v\n]/g; return title.match(regex); } function hideArticleTag(tag) { if ($(tag).css("display") !== "none") { //console.log(tag, tag.getBoundingClientRect); let rect = tag.getBoundingClientRect(); $(tag).css("transition", "0.5s") .css("-webkit-transition", "0.5s") .css("overflow", "hidden") .css("height", rect.height + "px"); let d = $(tag).css("display"); tag["_d"] = d; tag["_h"] = rect.height + "px"; //console.log("hide tag",tag["_d"], tag["_h"]); $(tag).css("height", "0px"); setTimeout(() => { $(tag).css("display", "none"); }, 500); let bar = $(tag).next(); //console.log(bar); if (bar.length > 0 && $(bar).prop("tagName").toUpperCase() === "HR") { $(bar).css("display", "none"); } } } function showArticleTag(tag) { if ($(tag).css("display") === "none" && typeof tag["_d"] !== "undefined") { $(tag).css("transition", "0.5s") .css("-webkit-transition", "0.5s") .css("overflow", "hidden"); if (typeof tag["_d"] !== "undefined") { $(tag).css("display", tag["_d"]); } else { $(tag).css("display", "block"); } if (typeof tag["_h"] !== "undefined") { $(tag).css("height", tag["_h"]); } else { $(tag).css("height", "auto"); } //article list page, hide the separator as well let bar = $(tag).next(); if (bar.length > 0 && $(bar).prop("tagName").toUpperCase() === "HR") { $(bar).css("display", "block"); } } } function hideCommentTag(item) { let tag = item.tag; if (typeof tag["_t"] === "undefined") { //console.log(tag, tag.getBoundingClientRect); let rect = tag.getBoundingClientRect(); $(tag).css("transition", "0.5s") .css("-webkit-transition", "0.5s") .css("overflow", "hidden") .css("height", rect.height + "px"); let d = $(tag).css("display"); tag["_d"] = d; tag["_h"] = rect.height + "px"; let hint = $("
已屏蔽【" + item.replier + "】的评论
"); let removeBlock = $("[取消屏蔽]"); hint.append(removeBlock); removeBlock.on("click", function () { removeFromRepliers(item.replier, () => { filterReplies(); displayRepliers(); }) }); //console.log("hide tag",tag["_d"], tag["_h"]); tag["_t"] = hint; hint.insertBefore(tag); $(tag).css("height", "0px"); setTimeout(() => { $(tag).css("display", "none"); }, 500); if (item.avatar) { $(item.avatar).css("visibility", "hidden"); } } } function showCommentTag(item) { let tag = item.tag; if ($(tag).css("display") === "none" && typeof tag["_d"] !== "undefined") { $(tag).css("transition", "0.5s") .css("-webkit-transition", "0.5s") .css("overflow", "hidden"); if (typeof tag["_d"] !== "undefined") { $(tag).css("display", tag["_d"]); } else { $(tag).css("display", "block"); } // if (typeof tag["_h"] !== "undefined") { // $(tag).css("height", tag["_h"]); // } else { $(tag).css("height", "auto"); // } if (typeof tag["_t"] !== "undefined") { //console.log("remove hint", tag["_t"]); let hint = tag["_t"]; hint.remove(); delete tag["_t"]; } if (item.avatar) { $(item.avatar).css("visibility", "visible"); } } } function FilterHomePage() { keywords((keywordList) => { ups((upList) => { //过滤主页视频 let selections = getHomeSelection("FILTER", false, false); for (let i = 0; i < selections.length; i++) { let tag = selections[i].tag; let tagType = selections[i].type; let username = selections[i].username; let title = selections[i].title; if (upList.indexOf(username) >= 0 || containsKeyword(keywordList, title)) { hideArticleTag(tag); if (tagType === 5) { hideArticleTag(selections[i].subtag); } } else { showArticleTag(tag); if (tagType === 5) { showArticleTag(selections[i].subtag); } } } }) }) } function containsKeyword(list, title) { for (let i = 0; i < list.length; i++) { let w = list[i]; if (title.indexOf(w) >= 0) { return true; } } return false; } //过滤文章列表页 function FilterListPage() { keywords((keywordList) => { ups(((upList) => { let sel = getListSelection(); for (let i = 0; i < sel.length; i++) { let row = sel[i].tag; let username = sel[i].username; let title = sel[i].title; if (upList.indexOf(username) >= 0 || containsKeyword(keywordList, title)) { //console.log("过滤文脏区",username); //屏蔽 hideArticleTag(row); } else { showArticleTag(row); } } window.scrollTo(window.scrollX, window.scrollY + 1); })) }) } function HandleHomePage() { console.log("home list"); //屏蔽首页UP,包括视频和右边的文章区 FilterHomePage(); } function HandleListPage() { console.log("debug list"); FilterListPage(); } function HandleArticlePage() { //对于单独的文章页或者视频,添加一个按钮屏蔽当前UP主 //let button = $("
屏蔽UP
"); //$(document.body).append(button); let button = $("屏蔽"); $("div.up-abstract").css("width", "auto"); $("div.action-up").append(button).css("width", "125px"); button.on("click", function () { let upname = ""; if (window.location.href.indexOf("www.acfun.cn/v/ac") >= 0) { upname = $("a.name-wrap").html(); } else if (window.location.href.indexOf("www.acfun.cn/a/ac") >= 0) { upname = $("a.upname").html(); } addToUpList(upname, () => { displayUpList(); }); }); //添加屏蔽评论的UI addArticlePageUI() } let cloudServer = 16731600; function msgChunker(msg) { return msg.match(/.{1,800}/g); } let lastUpdateTime = 0; function encode(a) { return btoa(escape(a)) } function decode(a) { return unescape(atob(a)) } function cloudUpdate(cloudData, showinfo) { let splitter = ","; keywords((keywordList) => { ups((upList) => { repliers((repList) => { let t = +new Date(); let data = { keywords: encode(keywordList.join(splitter)), ups: encode(upList.join(splitter)), repliers: encode(repList.join(splitter)), time: encode(t), version: version, }; if (cloudData && cloudData.time === lastUpdateTime && cloudData.version >= data.version) { console.log("No need to update cloud, everything is the same"); if (showinfo) $.info.show("云检查完毕,已经是最新的了!") } else if (keywordList.length === 0 && upList.length === 0) { console.log("No need to update cloud, lists are empty"); if (showinfo) $.info.show("云检查完毕,没有需要同步的设置(列表都是空的呢)。") } else { console.log("Update to cloud"); let msg = JSON.stringify(data); cloudSend(msg, showinfo); setUpdateTime(t, () => { }); } }); }) }) } function updateListByCloudData(data) { let keywordsstr = decode(data.keywords); let upsstr = decode(data.ups); let replierstr = decode(data.repliers); let spliter = upsstr.indexOf(" ") > 0 || keywordsstr.indexOf(" ") > 0 ? " " : ","; let keywords = keywordsstr.split(spliter); let ups = upsstr.split(spliter); let repliers = replierstr.split(spliter); //console.log("spliter", ups, keywords, spliter) keywords = keywords.length === 1 && keywords[0] === "" ? [] : keywords; ups = ups.length === 1 && ups[0] === "" ? [] : ups; repliers = repliers.length === 1 && repliers[0] === "" ? [] : repliers; //console.log(ups, keywords); setUp(ups, () => { console.log("Uplist updated!", ups); displayUpList() }); setKeywords(keywords, () => { console.log("Keywordlist Updated", keywords); displayKeywords(); }); setRepliers(repliers, () => { console.log("Replierlist updated"); displayRepliers(); }); setUpdateTime(data.time, () => { console.log("Time Updated", (data.time)) }); $.info.show("ACFUN屏蔽系统:下载屏蔽设置成功!") } let defaultUpdateInterval = 30 * 1000; function cloudCheck(showinfo) { $('#cloudsync').addClass("disabled").text("正在同步..."); if (typeof showinfo === "undefined") { showinfo = false; } getUpdateTime((localTime) => { lastUpdateTime = localTime; cloudGet((text) => { if (text === null) { //nothing found, just upload data console.log("Update by null"); cloudUpdate(); } else { try { let data = JSON.parse(text); //检查版本兼容 if (typeof data.version === "undefined" || parseFloat(data.version) < parseFloat(version)) { $.info.show("旧版同步信息发现,重新同步"); cloudUpdate(data, showinfo); } else if (parseFloat(data.version) > parseFloat(version)) { $.info.show("同步失败:你已经在其他地方使用过更新的版本了。请更新当前屏蔽插件,最新版本:" + data.version); } else { console.log("data time", data.time, decode(data.time), "local", localTime); data.time = parseInt(decode(data.time)); let cloudtime = data.time; if (cloudtime > localTime || version !== data.version) { //如果云时间更新,则使用云上的 console.log("Update list"); updateListByCloudData(data); } else if (localTime > (cloudtime)) { //本地更新,尝试更新 console.log("Update "); cloudUpdate(data, showinfo); } else { console.log("Check done, no update needed", (localTime - cloudtime) / 1000, data); if (showinfo) $.info.show("云检查完毕,已经是最新的了!") } //检查完毕,让同步按钮可用 $('#cloudsync').removeClass("disabled").text("手动同步"); $('#checktime').css("display", "block").text("上次检查时间:" + (new Date()).toLocaleString()) } } catch (ex) { //如果数据出错,直接尝试上传云 console.error("Update By err", ex); setTimeout(cloudUpdate, 0); } } }) }) } // function cloudSend2(msg) { // // let im = unsafeWindow.ImSdk; // let instance = im.instance; // let session = instance.kernel.openSession(0, cloudServer); // console.log("cloud send", msg); // // function sendChunks(chunks, i) { // let m = (i + 1) + "/" + chunks.length + " " + chunks[i]; // console.log("send chunk", chunks, m); // instance.sendMessage(cloudServer, m, () => { // console.log("Cloud info chunk ", i, "sent"); // if (i < chunks.length - 1) { // sendChunks(chunks, i + 1); // } else { // console.log("All info sent"); // $.info.show("ACFUN屏蔽系统:上传屏蔽设置成功!") // } // }); // } // // let chunks = msgChunker(msg); // console.log("schunk", chunks); // sendChunks(chunks, 0); // } function cloudSend(msg, showinfo) { let evalstr = ` (function(){ function msgChunker(msg){ let chunks = msg.match(/.{1,950}/g); return chunks; } let showinfo = ` + showinfo + `; let msg = '` + msg + `'; let im = ImSdk; let instance = im.instance; let cloudServer = ` + cloudServer + `; let session = instance.kernel.openSession(0, cloudServer); console.log("cloud send", msg) function sendChunks(chunks, i){ let m = (i+1)+"/"+chunks.length+" "+ chunks[i]; console.log("send chunk",chunks, m); instance.sendMessage(cloudServer, m, ()=>{ console.log("Cloud info chunk ", i, "sent") if (i{sendChunks(chunks,i+1);} , 200) }else{ console.log("All info sent"); if (showinfo) $.info.show("Acfun屏蔽设置同步完毕!") } }); } let chunks = msgChunker(msg); console.log("schunk",chunks); sendChunks(chunks,0); })()`; //console.log(evalstr); unsafeWindow.eval(evalstr); } function deleteOldCloudSaves(msgIds) { function del(list, i) { } } //获得最新的云备份 function cloudGet(callback) { let im = unsafeWindow.ImSdk; let instance = im.instance; let id = "0_" + cloudServer; //console.log(id, instance.chatMap); let sess = instance.kernel.openSession(0, cloudServer); let msgs = instance.kernel.getMessages(sess); //console.log("msgs", msgs); if (typeof msgs === "undefined" || msgs.length === 0) { callback(null); return } let lastmsg = msgs[msgs.length - 1].text; //console.log(lastmsg); try { let info = lastmsg.split(" "); let chunkinfo = info[0].split("/"); let chunksize = chunkinfo[1]; let texts = []; if (chunksize) { chunksize = parseInt(chunksize); for (let i = 0; i < chunksize; i++) { let m = msgs[msgs.length - i - 1].text; let minfo = m.split(" "); let mchunkinfo = minfo[0].split("/"); let chunk_i = parseInt(mchunkinfo[0]) - 1; texts[chunk_i] = minfo.slice(1).join(" "); } } let text = texts.join(""); //console.log("msgtext", text); callback(text); } catch (e) { console.error(e); callback(null) } } let trySyncCount = 0; function tryCloudSync(showinfo) { trySyncCount++; if (trySyncCount > 30) return; let im = unsafeWindow.ImSdk; if (typeof im === "undefined" || typeof im.instance === "undefined" || !im.instance.connected || typeof im.instance.kernel.cache === "undefined") { console.log("载入信息。。"); setTimeout(() => { tryCloudSync(showinfo); }, 1000); } else { setTimeout(() => { cloudCheck(showinfo) }, 100); } } function initLoad() { if (typeof $ === "undefined" || typeof unsafeWindow.$ === "undefined" || typeof unsafeWindow.$.info === "undefined") { console.log("Loading.."); //$ = unsafeWindow.$; setTimeout(initLoad, 1000); return; } $.info = unsafeWindow.$.info; //console.log("Loaded info ", $.info); function isArtileListPage() { if (window.location.href.indexOf("www.acfun.cn/v/as") > 0) return true; let t = ["list63", "list110", "list73", "list164", "list184", "list74", "list75"]; let url = window.location.href; for (let i = 0; i < t.length; i++) { if (url.indexOf(t[i]) >= 0) return true; } return false; } function isVideoHome() { let t = ["list155", "list1", "list58", "list123", "list59", "list60", "list70", "list68", "list69", "list125"]; let url = window.location.href; for (let i = 0; i < t.length; i++) { if (url.indexOf(t[i]) >= 0) return true; } return false; } console.log("DEBUG body Loaded"); if (window.location.href === "http://www.acfun.cn/" || window.location.href === "https://www.acfun.cn/") { pageType = "home"; initButton(); addUI(); attachBlockButton(); HandleHomePage(); } if (window.location.href.indexOf("www.acfun.cn/v/list") >= 0 || window.location.href.indexOf("www.acfun.cn/v/as") > 0) { //可能是文章列表 if (isArtileListPage()) { pageType = "list"; initButton(); addUI(); HandleListPage(); } else if (isVideoHome()) { pageType = "home"; initButton(); addUI(); attachBlockButton(); HandleHomePage(); } else { pageType = "list"; initButton(); addUI(); HandleListPage(); } } //降低存在感 //$.info.success("屏蔽启动!") } function initLoadPart2() { if (typeof $ === "undefined" || typeof unsafeWindow.$ === "undefined") { console.log("Loading.. Part 2"); setTimeout(initLoadPart2, 1000); return; } if (window.location.href.indexOf("www.acfun.cn/v/ac") >= 0 || window.location.href.indexOf("www.acfun.cn/a/ac") >= 0) { HandleArticlePage(); pageType = "article"; addUI(); } } initLoad(); initLoadPart2(); } core();