func processValue(context *gin.Context) int {
	value, isInt := strconv.Atoi(context.DefaultQuery("value", "0"))
	if isInt != nil {
		context.String(http.StatusInternalServerError, "Not an int")
		return -1
	}
	if value < (1<<12) || value > (1<<20) {
		context.String(http.StatusInternalServerError, "Value has to be < 1048576 && > 4096 :(")
		return -1
	}
	return value
}
helper function for dealing with http server...
output: the value in the GET request
if the value is not int or is not valid (1048576 > value > 4096), return -1
package main
import (
	"github.com/gin-gonic/gin"
	"github.com/haisum/recaptcha"
	"math/big"
	"math/rand"
	"net/http"
	"os"
	"strconv"
	"time"
)
const TableSize = 10000
var TableSizeBI = big.NewInt(int64(TableSize))
const MaxCollision = 10
type LinkedList struct {
	Content       [MaxCollision]int
	InsertedCount int  
}
type HashTable struct {
	Content      [TableSize]*LinkedList  
	HashParam1   *big.Int                
	HashParam2   *big.Int                
	ElementCount int                     
}
type SystemTimeInfo struct {
	HashTableInitTime int64  
	StartTime         int64  
}
var hashTable HashTable
var systemTimeInfo SystemTimeInfo
var RecaptchaVerifier recaptcha.R
var FLAG string
func (t *HashTable) generateRandForHashing() {
	currentTime := time.Now().UnixNano()
	rand.Seed(currentTime)
	systemTimeInfo.HashTableInitTime = currentTime
	t.HashParam1 = big.NewInt(int64(rand.Intn(1 << 32)))  
	t.HashParam2 = big.NewInt(int64(rand.Intn(1 << 32)))
}
func (t *HashTable) recreate() {
	t.generateRandForHashing()
	for !t.HashParam1.ProbablyPrime(0) || !t.HashParam2.ProbablyPrime(0) {
		t.generateRandForHashing()
	}
	for i := 0; i < TableSize; i++ {
		t.Content[i] = &LinkedList{[MaxCollision]int{}, 0}
	}
	t.ElementCount = 0
}
func (t *HashTable) hash(value int) uint {
	v := big.NewInt(int64(value))
	var h big.Int
	h.Exp(v, t.HashParam1, t.HashParam2)
	h.Mod(&h, TableSizeBI)
	return uint(h.Uint64())
}
func (t *HashTable) insert(value int) bool {
	if t.find(value) {
		return false  
	}
	var elementHash = t.hash(value)                 
	var linkedListForHash = t.Content[elementHash]  
	linkedListForHash.InsertedCount++               
	if linkedListForHash.InsertedCount >= 10 {
		return true  
	}
	t.ElementCount++                                                      
	linkedListForHash.Content[linkedListForHash.InsertedCount-1] = value  
	return false                                                          
}
func (t *HashTable) find(value int) bool {
	var elementHash = t.hash(value)                 
	var linkedListForHash = t.Content[elementHash]  
	for i := 0; i < linkedListForHash.InsertedCount; i++ {
		if linkedListForHash.Content[i] == value {
			return true  
		}
	}
	return false  
}