User:Eejit43/scripts/to-monitor-list.js

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/to-monitor-list.ts

"use strict";class MonitoringListManager{api=new mw.Api;link;toCheck;totalToCheck;isRunning=!1;handledRequests=0;load(){const i=document.querySelector(".mw-editsection").cloneNode(!0);this.link=document.createElement("a"),this.link.href="#",this.link.style.fontWeight="bold",this.link.textContent="Add missing counts",this.link.addEventListener("click",async a=>{if(a.preventDefault(),!this.isRunning){this.isRunning=!0,await this.loadToCheckData();for(const e of this.toCheck.categories)this.handleCheck(e,async()=>{const t=await this.api.get({action:"query",list:"search",srinfo:"totalhits",srnamespace:this.getCategory(e),srsearch:`incategory:"${e.category}"`}).catch((r,s)=>(mw.notify(`An error occurred while trying to get category members: ${s?.error.info??"Unknown error"} (${r})`,{type:"error"}),null));if(t)return t.query.searchinfo.totalhits});for(const e of this.toCheck.searches)this.handleCheck(e,async()=>{const t=await this.api.get({action:"query",list:"search",srinfo:"totalhits",srnamespace:this.getCategory(e),srsearch:e.search}).catch((r,s)=>(mw.notify(`An error occurred while trying to get search results: ${s?.error.info??"Unknown error"} (${r})`,{type:"error"}),null));if(t)return t.query.searchinfo.totalhits});for(const e of this.toCheck.whatLinksHere)this.handleCheck(e,async()=>{const t=await this.api.get({action:"query",list:"backlinks",bllimit:500,blnamespace:this.getCategory(e),bltitle:e.title}).catch((r,s)=>(mw.notify(`An error occurred while trying to get backlinks: ${s?.error.info??"Unknown error"} (${r})`,{type:"error"}),null));if(t)return t.query.backlinks.length});for(const e of this.toCheck.transclusions)this.handleCheck(e,async()=>{const t=await this.api.get({action:"query",list:"embeddedin",eilimit:500,einamespace:this.getCategory(e),eititle:e.title}).catch((r,s)=>(mw.notify(`An error occurred while trying to get transclusions: ${s?.error.info??"Unknown error"} (${r})`,{type:"error"}),null));if(t)return t.query.embeddedin.length})}}),i.querySelector("a").replaceWith(this.link),document.querySelector("#Stuff_to_monitor.mw-headline").after(i)}async loadToCheckData(){this.toCheck=JSON.parse((await this.api.get({action:"query",formatversion:"2",prop:"revisions",rvprop:"content",rvslots:"main",titles:"User:Eejit43/scripts/to-monitor-list.json"})).query.pages[0].revisions[0].slots.main.content),this.totalToCheck=Object.values(this.toCheck).flat().length}async handleCheck(i,a){const e=await a();if(e===void 0)return;const t=document.querySelector(`#to-monitor-list-${i.id}`);if(!t)return mw.notify(`Failed to find element for ID "${i.id}"`);t.innerHTML=e===0?'<span style="color: #00733f">None</span>':`<b><span style="color: #bd2828">${e===500?"500+":e}</span></b>`,this.handledRequests++,this.link.textContent=`Add missing counts (${this.handledRequests}/${this.totalToCheck} loaded)`,this.handledRequests===this.totalToCheck&&setTimeout(()=>{this.isRunning=!1,this.handledRequests=0,this.link.textContent="Add missing counts"},1e3)}getCategory({namespace:i,notNamespace:a}){if(!i&&!a)return 0;if(i){const e=Object.entries(mw.config.get("wgFormattedNamespaces")).find(([,t])=>t===i);return e?Number.parseInt(e[0]):0}else return Object.entries(mw.config.get("wgFormattedNamespaces")).filter(([,e])=>a!==(e||"Article")).map(([e])=>Number.parseInt(e))}}mw.loader.using(["mediawiki.util"],()=>{mw.config.get("wgPageName")==="User:Eejit43"&&new MonitoringListManager().load()});

// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy90by1tb25pdG9yLWxpc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEFwaVF1ZXJ5QmFja2xpbmtzUGFyYW1zLCBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcywgQXBpUXVlcnlTZWFyY2hQYXJhbXMgfSBmcm9tICd0eXBlcy1tZWRpYXdpa2kvYXBpX3BhcmFtcyc7XG5pbXBvcnQgeyBCYWNrbGlua3NSZXN1bHQsIEVtYmVkZGVkaW5SZXN1bHQsIE1lZGlhV2lraURhdGFFcnJvciwgUGFnZVJldmlzaW9uc1Jlc3VsdCwgU2VhcmNoUmVzdWx0IH0gZnJvbSAnLi4vZ2xvYmFsLXR5cGVzJztcblxuaW50ZXJmYWNlIFNlYXJjaERhdGEge1xuICAgIGNhdGVnb3JpZXM6IHsgaWQ6IHN0cmluZzsgY2F0ZWdvcnk6IHN0cmluZzsgbmFtZXNwYWNlPzogc3RyaW5nOyBub3ROYW1lc3BhY2U/OiBzdHJpbmcgfVtdO1xuICAgIHNlYXJjaGVzOiB7IGlkOiBzdHJpbmc7IHNlYXJjaDogc3RyaW5nOyBuYW1lc3BhY2U/OiBzdHJpbmc7IG5vdE5hbWVzcGFjZT86IHN0cmluZyB9W107XG4gICAgd2hhdExpbmtzSGVyZTogeyBpZDogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBuYW1lc3BhY2U/OiBzdHJpbmc7IG5vdE5hbWVzcGFjZT86IHN0cmluZyB9W107XG4gICAgdHJhbnNjbHVzaW9uczogeyBpZDogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBuYW1lc3BhY2U/OiBzdHJpbmc7IG5vdE5hbWVzcGFjZT86IHN0cmluZyB9W107XG59XG5cbnR5cGUgU2VhcmNoRGF0YUNoZWNrID0gU2VhcmNoRGF0YVsnY2F0ZWdvcmllcyddWzBdIHwgU2VhcmNoRGF0YVsnc2VhcmNoZXMnXVswXSB8IFNlYXJjaERhdGFbJ3doYXRMaW5rc0hlcmUnXVswXSB8IFNlYXJjaERhdGFbJ3RyYW5zY2x1c2lvbnMnXVswXTtcblxuLyoqXG4gKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGhhbmRsZXMgdGhlIGVudGlyZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0by1tb25pdG9yLWxpc3Qgc2NyaXB0LlxuICovXG5jbGFzcyBNb25pdG9yaW5nTGlzdE1hbmFnZXIge1xuICAgIHByaXZhdGUgYXBpID0gbmV3IG13LkFwaSgpO1xuXG4gICAgcHJpdmF0ZSBsaW5rITogSFRNTEFuY2hvckVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIHRvQ2hlY2shOiBTZWFyY2hEYXRhO1xuICAgIHByaXZhdGUgdG90YWxUb0NoZWNrITogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBpc1J1bm5pbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaGFuZGxlZFJlcXVlc3RzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBcIkFkZCBtaXNzaW5nIGNvdW50c1wiIGxpbmsgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZCgpIHtcbiAgICAgICAgY29uc3QgZnVsbExpbmtFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm13LWVkaXRzZWN0aW9uJykhLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MU3BhbkVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5saW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICB0aGlzLmxpbmsuaHJlZiA9ICcjJztcbiAgICAgICAgdGhpcy5saW5rLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7XG4gICAgICAgIHRoaXMubGluay50ZXh0Q29udGVudCA9ICdBZGQgbWlzc2luZyBjb3VudHMnO1xuICAgICAgICB0aGlzLmxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzUnVubmluZykgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUb0NoZWNrRGF0YSgpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMudG9DaGVjay5jYXRlZ29yaWVzKVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2soY2hlY2ssIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCA9IGF3YWl0IHRoaXMuYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDogJ3NlYXJjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JpbmZvOiAndG90YWxoaXRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcm5hbWVzcGFjZTogdGhpcy5nZXRDYXRlZ29yeShjaGVjayksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JzZWFyY2g6IGBpbmNhdGVnb3J5OlwiJHtjaGVjay5jYXRlZ29yeX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVNlYXJjaFBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3JDb2RlOiBzdHJpbmcsIGVycm9ySW5mbzogTWVkaWFXaWtpRGF0YUVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ2V0IGNhdGVnb3J5IG1lbWJlcnM6ICR7ZXJyb3JJbmZvPy5lcnJvci5pbmZvID8/ICdVbmtub3duIGVycm9yJ30gKCR7ZXJyb3JDb2RlfSlgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIFNlYXJjaFJlc3VsdCkucXVlcnkuc2VhcmNoaW5mby50b3RhbGhpdHM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy50b0NoZWNrLnNlYXJjaGVzKVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2soY2hlY2ssIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCA9IGF3YWl0IHRoaXMuYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDogJ3NlYXJjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JpbmZvOiAndG90YWxoaXRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcm5hbWVzcGFjZTogdGhpcy5nZXRDYXRlZ29yeShjaGVjayksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JzZWFyY2g6IGNoZWNrLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIEFwaVF1ZXJ5U2VhcmNoUGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvckNvZGU6IHN0cmluZywgZXJyb3JJbmZvOiBNZWRpYVdpa2lEYXRhRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnZXQgc2VhcmNoIHJlc3VsdHM6ICR7ZXJyb3JJbmZvPy5lcnJvci5pbmZvID8/ICdVbmtub3duIGVycm9yJ30gKCR7ZXJyb3JDb2RlfSlgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIFNlYXJjaFJlc3VsdCkucXVlcnkuc2VhcmNoaW5mby50b3RhbGhpdHM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy50b0NoZWNrLndoYXRMaW5rc0hlcmUpXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVjayhjaGVjaywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBCYWNrbGlua3NSZXN1bHQgfCBudWxsID0gYXdhaXQgdGhpcy5hcGlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0OiAnYmFja2xpbmtzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGxpbWl0OiA1MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxuYW1lc3BhY2U6IHRoaXMuZ2V0Q2F0ZWdvcnkoY2hlY2spLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdGl0bGU6IGNoZWNrLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlCYWNrbGlua3NQYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yQ29kZTogc3RyaW5nLCBlcnJvckluZm86IE1lZGlhV2lraURhdGFFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG13Lm5vdGlmeShgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdldCBiYWNrbGlua3M6ICR7ZXJyb3JJbmZvPy5lcnJvci5pbmZvID8/ICdVbmtub3duIGVycm9yJ30gKCR7ZXJyb3JDb2RlfSlgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIEJhY2tsaW5rc1Jlc3VsdCkucXVlcnkuYmFja2xpbmtzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLnRvQ2hlY2sudHJhbnNjbHVzaW9ucylcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrKGNoZWNrLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IEVtYmVkZGVkaW5SZXN1bHQgfCBudWxsID0gYXdhaXQgdGhpcy5hcGlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0OiAnZW1iZWRkZWRpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWlsaW1pdDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpbmFtZXNwYWNlOiB0aGlzLmdldENhdGVnb3J5KGNoZWNrKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRpdGxlOiBjaGVjay50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIEFwaVF1ZXJ5QmFja2xpbmtzUGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvckNvZGU6IHN0cmluZywgZXJyb3JJbmZvOiBNZWRpYVdpa2lEYXRhRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnZXQgdHJhbnNjbHVzaW9uczogJHtlcnJvckluZm8/LmVycm9yLmluZm8gPz8gJ1Vua25vd24gZXJyb3InfSAoJHtlcnJvckNvZGV9KWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGEgYXMgRW1iZWRkZWRpblJlc3VsdCkucXVlcnkuZW1iZWRkZWRpbi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bGxMaW5rRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdhJykhLnJlcGxhY2VXaXRoKHRoaXMubGluayk7XG5cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI1N0dWZmX3RvX21vbml0b3IubXctaGVhZGxpbmUnKSEuYWZ0ZXIoZnVsbExpbmtFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgZGF0YSBvZiBjaGVja3MgdG8gaGFuZGxlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBsb2FkVG9DaGVja0RhdGEoKSB7XG4gICAgICAgIHRoaXMudG9DaGVjayA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXBpLmdldCh7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dmVyc2lvbjogJzInLFxuICAgICAgICAgICAgICAgICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgcnZwcm9wOiAnY29udGVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJ2c2xvdHM6ICdtYWluJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVzOiAnVXNlcjpFZWppdDQzL3NjcmlwdHMvdG8tbW9uaXRvci1saXN0Lmpzb24nLFxuICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zKSkgYXMgUGFnZVJldmlzaW9uc1Jlc3VsdFxuICAgICAgICAgICAgKS5xdWVyeS5wYWdlc1swXS5yZXZpc2lvbnNbMF0uc2xvdHMubWFpbi5jb250ZW50LFxuICAgICAgICApIGFzIFNlYXJjaERhdGE7XG5cbiAgICAgICAgdGhpcy50b3RhbFRvQ2hlY2sgPSBPYmplY3QudmFsdWVzKHRoaXMudG9DaGVjaykuZmxhdCgpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGEgZ2l2ZW4gY2hlY2suXG4gICAgICogQHBhcmFtIGNoZWNrIFRoZSBjaGVjayBkYXRhIHRvIGhhbmRsZS5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciB0byBmaW5kIHRoZSBjb3VudCBmcm9tIGEgY2hlY2suXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDaGVjayhjaGVjazogU2VhcmNoRGF0YUNoZWNrLCBoYW5kbGVyOiAoKSA9PiBQcm9taXNlPG51bWJlciB8IHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgaGFuZGxlcigpO1xuICAgICAgICBpZiAoY291bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdG8tbW9uaXRvci1saXN0LSR7Y2hlY2suaWR9YCk7XG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG13Lm5vdGlmeShgRmFpbGVkIHRvIGZpbmQgZWxlbWVudCBmb3IgSUQgXCIke2NoZWNrLmlkfVwiYCk7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gY291bnQgPT09IDAgPyAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwNzMzZlwiPk5vbmU8L3NwYW4+JyA6IGA8Yj48c3BhbiBzdHlsZT1cImNvbG9yOiAjYmQyODI4XCI+JHtjb3VudCA9PT0gNTAwID8gJzUwMCsnIDogY291bnR9PC9zcGFuPjwvYj5gO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlZFJlcXVlc3RzKys7XG4gICAgICAgIHRoaXMubGluay50ZXh0Q29udGVudCA9IGBBZGQgbWlzc2luZyBjb3VudHMgKCR7dGhpcy5oYW5kbGVkUmVxdWVzdHN9LyR7dGhpcy50b3RhbFRvQ2hlY2t9IGxvYWRlZClgO1xuXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZWRSZXF1ZXN0cyA9PT0gdGhpcy50b3RhbFRvQ2hlY2spXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVkUmVxdWVzdHMgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMubGluay50ZXh0Q29udGVudCA9ICdBZGQgbWlzc2luZyBjb3VudHMnO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSBzZWFyY2hlZCBjYXRlZ29yaWVzIGZyb20gdGhlIGNoZWNrIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY2hlY2sgVGhlIGNoZWNrIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY2hlY2submFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gc2VhcmNoIGluLlxuICAgICAqIEBwYXJhbSBjaGVjay5ub3ROYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0byBleGNsdWRlIGZyb20gdGhlIHNlYXJjaC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY2F0ZWdvcnkgSUQgb3IgbGlzdCBvZiBjYXRlZ29yeSBJRHMgKHNlcGFyYXRlZCBieSAnfCcpLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcnkoeyBuYW1lc3BhY2UsIG5vdE5hbWVzcGFjZSB9OiB7IG5hbWVzcGFjZT86IHN0cmluZzsgbm90TmFtZXNwYWNlPzogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKCFuYW1lc3BhY2UgJiYgIW5vdE5hbWVzcGFjZSkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmROYW1lc3BhY2UgPSBPYmplY3QuZW50cmllcyhtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKSkuZmluZCgoWywgbmFtZXNwYWNlTmFtZV0pID0+IG5hbWVzcGFjZU5hbWUgPT09IG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmb3VuZE5hbWVzcGFjZSA/IE51bWJlci5wYXJzZUludChmb3VuZE5hbWVzcGFjZVswXSkgOiAwO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChbLCBuYW1lc3BhY2VOYW1lXSkgPT4gbm90TmFtZXNwYWNlICE9PSAobmFtZXNwYWNlTmFtZSB8fCAnQXJ0aWNsZScpKVxuICAgICAgICAgICAgICAgIC5tYXAoKFtuYW1lc3BhY2VJZF0pID0+IE51bWJlci5wYXJzZUludChuYW1lc3BhY2VJZCkpO1xuICAgIH1cbn1cblxubXcubG9hZGVyLnVzaW5nKFsnbWVkaWF3aWtpLnV0aWwnXSwgKCkgPT4ge1xuICAgIGlmIChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykgPT09ICdVc2VyOkVlaml0NDMnKSBuZXcgTW9uaXRvcmluZ0xpc3RNYW5hZ2VyKCkubG9hZCgpO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7YUFlQSxNQUFNLHFCQUFzQixDQUNoQixJQUFNLElBQUksR0FBRyxJQUViLEtBRUEsUUFDQSxhQUVBLFVBQVksR0FFWixnQkFBa0IsRUFLbkIsTUFBTyxDQUNWLE1BQU1BLEVBQWtCLFNBQVMsY0FBYyxpQkFBaUIsRUFBRyxVQUFVLEVBQUksRUFFakYsS0FBSyxLQUFPLFNBQVMsY0FBYyxHQUFHLEVBQ3RDLEtBQUssS0FBSyxLQUFPLElBQ2pCLEtBQUssS0FBSyxNQUFNLFdBQWEsT0FDN0IsS0FBSyxLQUFLLFlBQWMscUJBQ3hCLEtBQUssS0FBSyxpQkFBaUIsUUFBUyxNQUFPQyxHQUFVLENBR2pELEdBRkFBLEVBQU0sZUFBZSxFQUVqQixNQUFLLFVBQ1QsTUFBSyxVQUFZLEdBRWpCLE1BQU0sS0FBSyxnQkFBZ0IsRUFFM0IsVUFBV0MsS0FBUyxLQUFLLFFBQVEsV0FDN0IsS0FBSyxZQUFZQSxFQUFPLFNBQVksQ0FDaEMsTUFBTUMsRUFBNEIsTUFBTSxLQUFLLElBQ3hDLElBQUksQ0FDRCxPQUFRLFFBQ1IsS0FBTSxTQUNOLE9BQVEsWUFDUixZQUFhLEtBQUssWUFBWUQsQ0FBSyxFQUNuQyxTQUFVLGVBQWVBLEVBQU0sUUFBUSxHQUMzQyxDQUFnQyxFQUMvQixNQUFNLENBQUNFLEVBQW1CQyxLQUN2QixHQUFHLE9BQU8sMkRBQTJEQSxHQUFXLE1BQU0sTUFBUSxlQUFlLEtBQUtELENBQVMsSUFBSyxDQUFFLEtBQU0sT0FBUSxDQUFDLEVBQzFJLEtBQ1YsRUFDTCxHQUFLRCxFQUVMLE9BQVFBLEVBQXNCLE1BQU0sV0FBVyxTQUNuRCxDQUFDLEVBRUwsVUFBV0QsS0FBUyxLQUFLLFFBQVEsU0FDN0IsS0FBSyxZQUFZQSxFQUFPLFNBQVksQ0FDaEMsTUFBTUMsRUFBNEIsTUFBTSxLQUFLLElBQ3hD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QyxHQUFJRCxFQUFXLENBQ2hCLE1BQU1FLEVBQWlCLE9BQU8sUUFBUSxHQUFHLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUVDLENBQWEsSUFBTUEsSUFBa0JILENBQVMsRUFFckksT0FBT0UsRUFBaUIsT0FBTyxTQUFTQSxFQUFlLENBQUMsQ0FBQyxFQUFJLENBQ2pFLEtBQ0ksUUFBTyxPQUFPLFFBQVEsR0FBRyxPQUFPLElBQUksdUJBQXVCLENBQUMsRUFDdkQsT0FBTyxDQUFDLENBQUMsQ0FBRUMsQ0FBYSxJQUFNRixLQUFrQkUsR0FBaUIsVUFBVSxFQUMzRSxJQUFJLENBQUMsQ0FBQ0MsQ0FBVyxJQUFNLE9BQU8sU0FBU0EsQ0FBVyxDQUFDLENBQ2hFLENBQ0osQ0FFQSxHQUFHLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFHLElBQU0sQ0FDbEMsR0FBRyxPQUFPLElBQUksWUFBWSxJQUFNLGdCQUFnQixJQUFJLHNCQUFzQixFQUFFLEtBQUssQ0FDekYsQ0FBQyIsCiAgIm5hbWVzIjogWyJmdWxsTGlua0VsZW1lbnQiLCAiZXZlbnQiLCAiY2hlY2siLCAiZGF0YSIsICJlcnJvckNvZGUiLCAiZXJyb3JJbmZvIiwgImhhbmRsZXIiLCAiY291bnQiLCAiZWxlbWVudCIsICJuYW1lc3BhY2UiLCAibm90TmFtZXNwYWNlIiwgImZvdW5kTmFtZXNwYWNlIiwgIm5hbWVzcGFjZU5hbWUiLCAibmFtZXNwYWNlSWQiXQp9Cg==