[advanced search]
 

Go Back   NamePros.com > Discussion > Web Design & Development > Programming > CODE

CODE This forum is for posting code snippets and example scripts that aren't quite tutorials, but could be useful for others. You may post code snippets and/or completed scripts that you've written and want to share here.


Closed Thread
 
LinkBack Thread Tools
Old 04-18-2007, 01:24 AM   #1 (permalink)
NamePros Regular
 
bliss's Avatar
 
Join Date: Dec 2005
Posts: 952
176.95 NP$ (Donate)

bliss is a name known to allbliss is a name known to allbliss is a name known to allbliss is a name known to allbliss is a name known to allbliss is a name known to all


Bulk pagerank datacenter check script.

This is not a public domain script. You may not sell, resell it. You can not publish it on other forums, websites, and etc without the copyright notice in place. You may not claim the work as you own. All rights remain with AllStar of Onic Designs.

Ever want to find out if a pagerank is the same pagerank of other google datacenters. These scirpts will help you find that out. They require curl, a server that can do correct hex calcuations, and ajax enabled browser.

Upload everything in the same directory, load dc.html in the browser, and then input only www.domain.com or domain.com and press the submit. Now, I could only get the ajax to work in firefox. I could not get it to work in IE.


dc.html
Code:
<html>
<head><title>Bulk data center check</title>
<script type='text/javascript'>
    var dc = new Array('64.233.161.18','64.233.161.81','64.233.161.84','64.233.161.147','64.233.161.184','64.233.171.44','64.233.171.133','64.233.179.93','64.233.179.184','64.233.185.101','64.233.187.84','64.233.189.161','66.102.1.44','66.102.7.83','66.102.9.147','66.102.11.115','66.249.81.80','66.249.81.184','66.249.83.19','66.249.83.107','66.249.89.133','66.249.89.184','66.249.91.44','66.249.91.80','66.249.93.81','66.249.93.83','72.14.205.99','72.14.207.100','72.14.207.184','72.14.209.19','72.14.209.84','72.14.211.44','72.14.211.83','72.14.217.104','72.14.219.80','72.14.221.99','72.14.235.83','72.14.247.133','72.14.253.80','72.14.255.80','209.85.129.99','209.85.135.102','209.85.143.19','216.239.39.104','216.239.51.19','216.239.59.147','64.233.171.18','64.233.171.19','64.233.171.44','64.233.171.80','64.233.171.81','64.233.171.83','64.233.171.84','64.233.171.99','64.233.171.100','64.233.171.101','64.233.171.102','64.233.171.104','64.233.171.107','64.233.171.115','64.233.171.133','64.233.171.147','64.233.171.184','64.233.179.19','64.233.179.44','64.233.179.80','64.233.179.81','64.233.179.83','64.233.179.84','64.233.179.91','64.233.179.93','64.233.179.99','64.233.179.100','64.233.179.101','64.233.179.104','64.233.179.107','64.233.179.115','64.233.179.133','64.233.179.184','66.249.81.18','66.249.81.19','66.249.81.44','66.249.81.80','66.249.81.81','66.249.81.83','66.249.81.84','66.249.81.99','66.249.81.100','66.249.81.101','66.249.81.102','66.249.81.104','66.249.81.107','66.249.81.115','66.249.81.133','66.249.81.147','66.249.89.161','66.249.89.162','66.249.81.184','66.249.83.19','66.249.83.44','66.249.83.80','66.249.83.81','66.249.83.83','66.249.83.84','66.249.83.99','66.249.83.100','66.249.83.101','66.249.83.104','66.249.83.107','66.249.83.115','66.249.83.133','66.249.83.184','66.249.83.214','66.249.89.19','66.249.89.44','66.249.89.80','66.249.89.81','66.249.89.83','66.249.89.84','66.249.89.99','66.249.89.104','66.249.89.107','66.249.89.115','66.249.89.133','66.249.89.184','72.14.211.19','72.14.211.44','72.14.211.80','72.14.211.81','72.14.211.83','72.14.211.84','72.14.211.99','72.14.211.100','72.14.211.101','72.14.211.104','72.14.211.107','72.14.211.115','72.14.211.133','72.14.211.184','72.14.215.19','72.14.215.44','72.14.215.80','72.14.215.81','72.14.215.83','72.14.215.84','72.14.215.99','72.14.215.101','72.14.215.104','72.14.215.107','72.14.215.115','72.14.215.133','72.14.215.184','72.14.217.19','72.14.217.44','72.14.217.80','72.14.217.81','72.14.217.83','72.14.217.84','72.14.217.99','72.14.217.101','72.14.217.104','72.14.217.107','72.14.217.115','72.14.217.133','72.14.217.184','72.14.219.18','72.14.219.19','72.14.219.44','72.14.219.80','72.14.219.81','72.14.219.83','72.14.219.84','72.14.219.99','72.14.219.100','72.14.219.101','72.14.219.102','72.14.219.104','72.14.219.107','72.14.219.115','72.14.219.133','72.14.219.147','72.14.219.184','72.14.247.18','72.14.247.19','72.14.247.44','72.14.247.80','72.14.247.81','72.14.247.83','72.14.247.84','72.14.247.99','72.14.247.100','72.14.247.101','72.14.247.102','72.14.247.104','72.14.247.107','72.14.247.115','72.14.247.133','72.14.247.147','72.14.247.184','216.239.37.19','216.239.37.44','216.239.37.80','216.239.37.83','216.239.37.84','216.239.37.91','216.239.37.99','216.239.37.101','216.239.37.104','216.239.37.107','216.239.37.115','216.239.37.184','216.239.39.19','216.239.39.44','216.239.39.80','216.239.39.81','216.239.39.99','216.239.39.101','216.239.39.104','216.239.39.107','216.239.39.115','216.239.39.133','216.239.39.184','64.233.183.17','64.233.183.18','64.233.183.19','64.233.183.44','64.233.183.80','64.233.183.81','64.233.183.83','64.233.183.84','64.233.183.91','64.233.183.93','64.233.183.99','64.233.183.103','64.233.183.104','64.233.183.107','64.233.183.115','64.233.183.133','64.233.183.147','64.233.183.184','64.233.185.19','64.233.185.44','64.233.185.80','64.233.185.81','64.233.185.83','64.233.185.84','64.233.185.99','64.233.185.100','64.233.185.101','64.233.185.104','64.233.185.107','64.233.185.115','64.233.185.133','64.233.185.184','64.233.185.189','64.233.187.19','64.233.187.44','64.233.187.80','64.233.187.81','64.233.187.83','64.233.187.84','64.233.187.91','64.233.187.93','64.233.187.99','64.233.187.104','64.233.187.107','64.233.187.115','64.233.187.133','64.233.187.184','64.233.189.44','64.233.189.80','64.233.189.81','64.233.189.83','64.233.189.84','64.233.189.104','64.233.189.107','64.233.189.115','64.233.189.133','64.233.189.161','64.233.189.162','64.233.189.184','66.249.91.18','66.249.91.19','66.249.91.44','66.249.91.80','66.249.91.81','66.249.91.83','66.249.91.84','66.249.91.91','66.249.91.93','66.249.91.99','66.249.91.104','66.249.91.107','66.249.91.115','66.249.91.133','66.249.91.147','66.249.91.184','66.249.93.19','66.249.93.44','66.249.93.80','66.249.93.81','66.249.93.83','66.249.93.84','66.249.93.91','66.249.93.93','66.249.93.99','66.249.93.100','66.249.93.101','66.249.93.104','66.249.93.107','66.249.93.115','66.249.93.133','66.249.93.184','72.14.221.18','72.14.221.19','72.14.221.44','72.14.221.80','72.14.221.81','72.14.221.83','72.14.221.84','72.14.221.91','72.14.221.93','72.14.221.99','72.14.221.101','72.14.221.102','72.14.221.104','72.14.221.107','72.14.221.115','72.14.221.133','72.14.221.147','72.14.221.184','72.14.223.18','72.14.223.19','72.14.223.44','72.14.223.80','72.14.223.81','72.14.223.83','72.14.223.84','72.14.223.99','72.14.223.100','72.14.223.101','72.14.223.102','72.14.223.104','72.14.223.107','72.14.223.115','72.14.223.147','72.14.223.133','72.14.223.184','72.14.253.18','72.14.253.19','72.14.253.44','72.14.253.80','72.14.253.81','72.14.253.83','72.14.253.84','72.14.253.99','72.14.253.100','72.14.253.101','72.14.253.102','72.14.253.104','72.14.253.107','72.14.253.115','72.14.253.133','72.14.253.147','72.14.253.184','72.14.255.17','72.14.255.18','72.14.255.19','72.14.255.44','72.14.255.80','72.14.255.81','72.14.255.83','72.14.255.84','72.14.255.91','72.14.255.99','72.14.255.100','72.14.255.101','72.14.255.102','72.14.255.103','72.14.255.104','72.14.255.107','72.14.255.115','72.14.255.133','72.14.255.147','72.14.255.184','216.239.51.19','216.239.51.44','216.239.51.80','216.239.51.81','216.239.51.83','216.239.51.84','216.239.51.99','216.239.51.104','216.239.51.107','216.239.51.115','216.239.51.184','216.239.53.19','216.239.53.44','216.239.53.80','216.239.53.81','216.239.53.83','216.239.53.84','216.239.53.99','216.239.53.101','216.239.53.102','216.239.53.104','216.239.53.107','216.239.53.115','216.239.53.133','216.239.53.147','216.239.53.184','216.239.57.17','216.239.57.18','216.239.57.19','216.239.57.44','216.239.57.80','216.239.57.81','216.239.57.83','216.239.57.84','216.239.57.99','216.239.57.103','216.239.57.104','216.239.57.107','216.239.57.115','216.239.57.133','216.239.57.147','216.239.57.184','216.239.59.17','216.239.59.18','216.239.59.19','216.239.59.44','216.239.59.80','216.239.59.81','216.239.59.83','216.239.59.84','216.239.59.99','216.239.59.101','216.239.59.102','216.239.59.103','216.239.59.104','216.239.59.107','216.239.59.115','216.239.59.133','216.239.59.147','216.239.59.184','64.233.161.18','64.233.161.19','64.233.161.44','64.233.161.80','64.233.161.81','64.233.161.83','64.233.161.84','64.233.161.91','64.233.161.93','64.233.161.95','64.233.161.99','64.233.161.100','64.233.161.101','64.233.161.102','64.233.161.104','64.233.161.107','64.233.161.115','64.233.161.133','64.233.161.147','64.233.161.184','64.233.163.19','64.233.163.44','64.233.163.80','64.233.163.83','64.233.163.84','64.233.163.99','64.233.163.100','64.233.163.101','64.233.163.104','64.233.163.107','64.233.163.115','64.233.163.133','64.233.163.184','64.233.163.189','64.233.167.18','64.233.167.19','64.233.167.44','64.233.167.80','64.233.167.81','64.233.167.83','64.233.167.84','64.233.167.91','64.233.167.93','64.233.167.99','64.233.167.104','64.233.167.107','64.233.167.115','64.233.167.133','64.233.167.147','64.233.167.184','66.102.1.44','66.102.1.80','66.102.1.81','66.102.1.83','66.102.1.84','66.102.1.91','66.102.1.93','66.102.1.104','66.102.1.107','66.102.1.115','66.102.1.133','66.102.1.184','66.102.7.18','66.102.7.19','66.102.7.44','66.102.7.80','66.102.7.81','66.102.7.83','66.102.7.84','66.102.7.99','66.102.7.100','66.102.7.101','66.102.7.102','66.102.7.104','66.102.7.107','66.102.7.115','66.102.7.133','66.102.7.147','66.102.7.161','66.102.7.162','66.102.7.184','66.102.9.18','66.102.9.80','66.102.9.81','66.102.9.83','66.102.9.84','66.102.9.99','66.102.9.100','66.102.9.101','66.102.9.102','66.102.9.104','66.102.9.107','66.102.9.115','66.102.9.133','66.102.9.147','66.102.9.184','66.102.11.19','66.102.11.44','66.102.11.80','66.102.11.81','66.102.11.83','66.102.11.84','66.102.11.99','66.102.11.100','66.102.11.101','66.102.11.104','66.102.11.107','66.102.11.115','66.102.11.133','66.102.11.184','72.14.203.19','72.14.203.44','72.14.203.80','72.14.203.81','72.14.203.83','72.14.203.84','72.14.203.91','72.14.203.93','72.14.203.99','72.14.203.100','72.14.203.101','72.14.203.104','72.14.203.107','72.14.203.115','72.14.203.133','72.14.203.161','72.14.203.162','72.14.203.184','72.14.205.19','72.14.205.44','72.14.205.80','72.14.205.81','72.14.205.83','72.14.205.84','72.14.205.99','72.14.205.100','72.14.205.101','72.14.205.104','72.14.205.107','72.14.205.115','72.14.205.133','72.14.205.184','72.14.205.189','72.14.207.19','72.14.207.44','72.14.207.80','72.14.207.81','72.14.207.83','72.14.207.84','72.14.207.91','72.14.207.93','72.14.207.99','72.14.207.100','72.14.207.101','72.14.207.104','72.14.207.107','72.14.207.115','72.14.207.133','72.14.207.184','72.14.209.19','72.14.209.44','72.14.209.80','72.14.209.81','72.14.209.83','72.14.209.84','72.14.209.99','72.14.209.101','72.14.209.104','72.14.209.107','72.14.209.115','72.14.209.133','72.14.209.184','72.14.235.18','72.14.235.19','72.14.235.44','72.14.235.80','72.14.235.81','72.14.235.83','72.14.235.84','72.14.235.99','72.14.235.100','72.14.235.101','72.14.235.102','72.14.235.104','72.14.235.107','72.14.235.115','72.14.235.133','72.14.235.147','72.14.235.184','209.85.129.18','209.85.129.19','209.85.129.44','209.85.129.80','209.85.129.81','209.85.129.83','209.85.129.84','209.85.129.99','209.85.129.100','209.85.129.101','209.85.129.102','209.85.129.104','209.85.129.107','209.85.129.115','209.85.129.133','209.85.129.147','209.85.129.184','209.85.135.17','209.85.135.18','209.85.135.19','209.85.135.44','209.85.135.80','209.85.135.81','209.85.135.83','209.85.135.84','209.85.135.99','209.85.135.100','209.85.135.101','209.85.135.102','209.85.135.103','209.85.135.104','209.85.135.107','209.85.135.115','209.85.135.133','209.85.135.147','209.85.135.184','209.85.143.18','209.85.143.19','209.85.143.44','209.85.143.80','209.85.143.81','209.85.143.83','209.85.143.84','209.85.143.99','209.85.143.100','209.85.143.101','209.85.143.102','209.85.143.104','209.85.143.107','209.85.143.115','209.85.143.133','209.85.143.147','209.85.143.184','216.239.63.19','216.239.63.44','216.239.63.80','216.239.63.83','216.239.63.84','216.239.63.91','216.239.63.93','216.239.63.99','216.239.63.101','216.239.63.104','216.239.63.107','216.239.63.115','216.239.63.133','216.239.63.184','216.239.63.189');    
</script>

<script type='text/javascript'>
var dc_count = 1;
var http_request = new Array();
var handled = new Array();

function makeRequest(url, i) 
{
    http_request[i] = new XMLHttpRequest();
    if (!http_request[i]) { return false; }
    http_request[i].onreadystatechange = handleResponse;
    http_request[i].open('GET', url, true);
    http_request[i].send(null);
    return true;
}

function handleResponse() 
{
   
    var nr = -1;
    for (var i = 0; i < dc_count; ++i) 
    {
        if ( (handled[i] != true) && http_request[i])  
        {
          switch(http_request[i].readyState) {
          case 1,2,3: return false; break;
          case 4:  
            if(http_request[i].status == 200) {
              if(http_request[i].responseText != '') 
              { 
                 var pr = http_request[i].responseText;
                 handled[i] = true;
                 document.getElementById('count').innerHTML = parseInt(document.getElementById('count').innerHTML) + 1;
                 document.getElementById('pr'+pr).innerHTML = parseInt(document.getElementById('pr'+pr).innerHTML) + 1;
                 if(pr == '0') 
                 { 
                   var divs = document.getElementById('logdc').innerHTML;
                   document.getElementById('logdc').innerHTML = divs + '<br>' + dc[i] + ': '+pr;   
                 }
              } 
            } 
          break;
          }        
        }
    }
}


</script>
</head>
<body>
<h1>Live Pagerank</h1>
<br><br>

<input type="text" name="url" id="url" size="20">
<input type="submit" value="Submit" onclick="javascript:timer = setInterval('starter()', 2000);">
<table width='100' border='0' cellspacing='0' cellpadding='0'>
<tr>
  <td id="count">0</td>
  <td>of</td>
  <td>702</td>
<tr>
</table>
        <table width='500' border='1' cellspacing='0' cellpadding='0'>
        <tr>
          <td align='center'>-1</td>
          <td align='center'>0</td>
          <td align='center'>1</td>
          <td align='center'>2</td>
          <td align='center'>3</td>
          <td align='center'>4</td>
          <td align='center'>5</td>
          <td align='center'>6</td>
          <td align='center'>7</td>
          <td align='center'>8</td>
          <td align='center'>9</td>
          <td align='center'>10</td>
        </tr>
        <tr>
          <td id="pr-1" align='center'>0</td>
          <td id="pr0" align='center'>0</td>
          <td id="pr1" align='center'>0</td>
          <td id="pr2" align='center'>0</td>
          <td id="pr3" align='center'>0</td>
          <td id="pr4" align='center'>0</td>
          <td id="pr5" align='center'>0</td>
          <td id="pr6" align='center'>0</td>
          <td id="pr7" align='center'>0</td>
          <td id="pr8" align='center'>0</td>
          <td id="pr9" align='center'>0</td>
          <td id="pr10" align='center'>0</td>        
        </tr>
        </table>
<script type='text/javascript'>
var x = 0;
var upto = 20;
var dc_count = dc.length;

function starter() 
{
    url = document.getElementById('url').value;
    if(x <= dc_count) 
    {
      for (var i = x; i < x+upto; i++) 
      {
           if(i == dc_count) { break; clearInterval(timer); }
           makeRequest('dc.php?url='+url+'&dc='+dc[i], i);       
      }
      x = i;
    }
}
</script>
<div id="logdc"></div>   
</body></html>
dc.php
Code:
<?
  include_once('dc_check_pr.php');
  $google = new google_pr();
  $dc = $_GET['dc'];
  $domain = 'http://'.$_GET['url'];
  $pr = $google->get_page_rank($domain,$dc);
  echo $pr;
?>
dc_check_pr.php
Code:
<?php

define('GOOGLE_MAGIC', 0x00000000E6359A60); // CHANGED (64Bit)

class google_pr
{

var $checksum;

function google_pr(){
    $this->checksum='';
}

function zeroFill($a, $b){
    $z = hexdec(80000000);
    if ($z & $a)
    {
        $a = ($a>>1);
        $a &= (~$z);
        $a |= 0x40000000;
        $a = ($a>>($b-1));
    } else {
        $a = ($a>>$b);
    }
    return $a;
}


function mix($a,$b,$c) {
    $a -= $b; $a -= $c; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,13)));
    $b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<8));
    $c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,13)));
    $a -= $b; $a -= $c; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,12)));
    $b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<16));
    $c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,5)));
    $a -= $b; $a -= $c; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,3)));
    $b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<10));
    $c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,15)));
    return array($a,$b,$c);
}

function strord($string) {
    for($i=0;$i<strlen($string);$i++) {
        $result[$i] = ord($string{$i});
    }
    return $result;
}

function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
    if(is_null($length)) {
        $length = sizeof($url);
    }
    $a = $b = 0x9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12) {
        $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
        $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
        $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
        $mix = $this->mix($a,$b,$c);
        $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
        $k += 12;
        $len -= 12;
    }

    $c += $length;
    switch($len)
    {
        case 11: $c+=($url[$k+10]<<24);
        case 10: $c+=($url[$k+9]<<16);
        case 9 : $c+=($url[$k+8]<<8);
        case 8 : $b+=($url[$k+7]<<24);
        case 7 : $b+=($url[$k+6]<<16);
        case 6 : $b+=($url[$k+5]<<8);
        case 5 : $b+=($url[$k+4]);
        case 4 : $a+=($url[$k+3]<<24);
        case 3 : $a+=($url[$k+2]<<16);
        case 2 : $a+=($url[$k+1]<<8);
        case 1 : $a+=($url[$k+0]);
    }
    $mix = $this->mix($a,$b,$c);

    return $mix[2];
}


function getGoogleChecksum($url) {
    $url="info:"."http://".str_replace('http://','',$url);
    $tmp_ch=$this->strord($url);
    $this->checksum=sprintf("%u", $this->GoogleCH($tmp_ch));
    return $this->checksum;
}

function toInt32(& $x) {
    $z = hexdec(80000000);
    $y = (int)$x;
    if($y==-$z&&$x<-$z){
        $y = (int)((-1)*$x);
        $y = (-1)*$y;
    }
    $x = $y;
}

function get_page_rank($url,$dc){
    $dc = trim($dc);
    $reqgr = "info:".$url;
    $reqgre = "info:".urlencode($url);
    $gch="6".$this->getGoogleChecksum($url);
    $patern = '/^http:/';
    $patern2 = '/^http:\/\/.*google\..*\/(search|images|groups|news).*/';
    $patern3 = '/^http:\/\/localhost.*/';
    $patern4 = '/^http:\/\/(127\.|10\.|172\.16|192\.168).*/'; //local ip
    if(!preg_match($patern, $url) || preg_match($patern2, $url) || preg_match($patern3, $url) || preg_match($patern4, $url))
    { return -1; }
    else
    {

      $website = "http://".$dc."/search?client=navclient-auto&ch=".$gch."&ie=UTF-8&oe=UTF-8&features=Rank&q=".$reqgre;
      
      if(!$ch = curl_init($website)) { return 'Count not connect.';  }
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; GoogleToolbar 3.0.114-big; Windows XP 5.1)');
       curl_setopt ($ch, CURLOPT_HEADER, 0);
       curl_setopt($ch, CURLOPT_TIMEOUT, 10);
       $res['content'] = curl_exec($ch);
      curl_close ($ch);
   
      if(preg_match('/Rank_.*?:.*?:(\d+)/i', $res['content'], $m)) { return $m[1]; }
      else { return -1; }
    }
}
}

?>
bliss is offline  
Closed Thread


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Site Sponsors
Advertise your business at NamePros

All times are GMT -7. The time now is 08:30 AM.


Powered by: vBulletin® Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85