From 54efd88dd94c475c1fde042c40ae6a2be016d3ad Mon Sep 17 00:00:00 2001 From: fudongbai <296179868@qq.com> Date: Mon, 8 Jun 2020 01:16:46 +0800 Subject: [PATCH] add bep2p tokens for faucet --- cmd/faucet/faucet.go | 117 +++++++++++++++++++++++++++++++++-------- cmd/faucet/faucet.html | 11 +++- cmd/faucet/website.go | 8 +-- 3 files changed, 108 insertions(+), 28 deletions(-) diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 3427a7af7a..70bc540c1c 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -41,6 +41,8 @@ import ( "sync" "time" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" @@ -83,11 +85,15 @@ var ( noauthFlag = flag.Bool("noauth", false, "Enables funding requests without authentication") logFlag = flag.Int("loglevel", 3, "Log level to use for Ethereum and the faucet") - fixGasPrice = flag.Int64("faucet.fixedprice", 0, "Will use fixed gas price if specified") + bep2eContracts = flag.String("bep2eContracts", "", "the list of bep2p contracts") + bep2eSymbols = flag.String("bep2eSymbols", "", "the symbol of bep2p tokens") + bep2eAmounts = flag.String("bep2eAmounts", "", "the amount of bep2p tokens") + fixGasPrice = flag.Int64("faucet.fixedprice", 0, "Will use fixed gas price if specified") ) var ( - ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) + ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) + bep2eAbiJson = `[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]` ) var ( @@ -110,7 +116,39 @@ func main() { amounts[i] = strings.TrimSuffix(amounts[i], "s") } } + bep2eNumAmounts := make([]string, 0) + if bep2eAmounts != nil && len(*bep2eAmounts) > 0 { + bep2eNumAmounts = strings.Split(*bep2eAmounts, ",") + } + + symbols := make([]string, 0) + if bep2eSymbols != nil && len(*bep2eSymbols) > 0 { + symbols = strings.Split(*bep2eSymbols, ",") + } + contracts := make([]string, 0) + if bep2eContracts != nil && len(*bep2eContracts) > 0 { + contracts = strings.Split(*bep2eContracts, ",") + } + + if len(bep2eNumAmounts) != len(symbols) || len(symbols) != len(contracts) { + log.Crit("Length of bep2eContracts, bep2eSymbols, bep2eAmounts mismatch") + } + + bep2eInfos := make(map[string]bep2eInfo, 0) + for idx, s := range symbols { + n, ok := big.NewInt(0).SetString(bep2eNumAmounts[idx], 10) + if !ok { + log.Crit("failed to parse bep2eAmounts") + } + amountStr := big.NewFloat(0).Quo(big.NewFloat(0).SetInt(n), big.NewFloat(0).SetInt64(params.Ether)).String() + + bep2eInfos[s] = bep2eInfo{ + Contract: common.HexToAddress(contracts[idx]), + Amount: *n, + AmountStr: amountStr, + } + } // Load up and render the faucet website tmpl, err := Asset("faucet.html") if err != nil { @@ -118,10 +156,11 @@ func main() { } website := new(bytes.Buffer) err = template.Must(template.New("").Parse(string(tmpl))).Execute(website, map[string]interface{}{ - "Network": *netnameFlag, - "Amounts": amounts, - "Recaptcha": *captchaToken, - "NoAuth": *noauthFlag, + "Network": *netnameFlag, + "Amounts": amounts, + "Recaptcha": *captchaToken, + "NoAuth": *noauthFlag, + "Bep2eInfos": bep2eInfos, }) if err != nil { log.Crit("Failed to render the faucet template", "err", err) @@ -162,7 +201,7 @@ func main() { ks.Unlock(acc, pass) // Assemble and start the faucet light service - faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes()) + faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes(), bep2eInfos) if err != nil { log.Crit("Failed to start faucet", "err", err) } @@ -181,6 +220,12 @@ type request struct { Tx *types.Transaction `json:"tx"` // Transaction funding the account } +type bep2eInfo struct { + Contract common.Address + Amount big.Int + AmountStr string +} + // faucet represents a crypto faucet backed by an Ethereum light client. type faucet struct { config *params.ChainConfig // Chain configurations for signing @@ -201,9 +246,12 @@ type faucet struct { update chan struct{} // Channel to signal request updates lock sync.RWMutex // Lock protecting the faucet's internals + + bep2eInfos map[string]bep2eInfo + bep2eAbi abi.ABI } -func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) { +func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte, bep2eInfos map[string]bep2eInfo) (*faucet, error) { // Assemble the raw devp2p protocol stack stack, err := node.New(&node.Config{ Name: "geth", @@ -222,6 +270,10 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u if err != nil { return nil, err } + bep2eAbi, err := abi.JSON(strings.NewReader(bep2eAbiJson)) + if err != nil { + return nil, err + } // Assemble the Ethereum light client protocol if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { cfg := eth.DefaultConfig @@ -261,14 +313,16 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u client := ethclient.NewClient(api) return &faucet{ - config: genesis.Config, - stack: stack, - client: client, - index: index, - keystore: ks, - account: ks.Accounts()[0], - timeouts: make(map[string]time.Time), - update: make(chan struct{}, 1), + config: genesis.Config, + stack: stack, + client: client, + index: index, + keystore: ks, + account: ks.Accounts()[0], + timeouts: make(map[string]time.Time), + update: make(chan struct{}, 1), + bep2eInfos: bep2eInfos, + bep2eAbi: bep2eAbi, }, nil } @@ -371,6 +425,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { URL string `json:"url"` Tier uint `json:"tier"` Captcha string `json:"captcha"` + Symbol string `json:"symbol"` } if err = conn.ReadJSON(&msg); err != nil { return @@ -475,13 +530,31 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { fund bool timeout time.Time ) - if timeout = f.timeouts[username]; time.Now().After(timeout) { - // User wasn't funded recently, create the funding transaction - amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) - amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) - amount = new(big.Int).Div(amount, new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(msg.Tier)), nil)) - tx := types.NewTransaction(f.nonce+uint64(len(f.reqs)), address, amount, 21000, f.price, nil) + if timeout = f.timeouts[username]; time.Now().After(timeout) { + var tx *types.Transaction + if msg.Symbol == "BNB" { + // User wasn't funded recently, create the funding transaction + amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) + amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) + amount = new(big.Int).Div(amount, new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(msg.Tier)), nil)) + + tx = types.NewTransaction(f.nonce+uint64(len(f.reqs)), address, amount, 21000, f.price, nil) + } else { + tokenInfo, ok := f.bep2eInfos[msg.Symbol] + if !ok { + f.lock.Unlock() + log.Warn("Failed to find symbol", "symbol", msg.Symbol) + continue + } + input, err := f.bep2eAbi.Pack("transfer", address, &tokenInfo.Amount) + if err != nil { + f.lock.Unlock() + log.Warn("Failed to pack transfer transaction", "err", err) + continue + } + tx = types.NewTransaction(f.nonce+uint64(len(f.reqs)), tokenInfo.Contract, nil, 420000, f.price, input) + } signed, err := f.keystore.SignTx(f.account, tx, f.config.ChainID) if err != nil { f.lock.Unlock() diff --git a/cmd/faucet/faucet.html b/cmd/faucet/faucet.html index d14c98fca5..36748ae9e1 100644 --- a/cmd/faucet/faucet.html +++ b/cmd/faucet/faucet.html @@ -53,7 +53,13 @@

{{ + + + + {{if .Recaptcha}} @@ -85,6 +91,7 @@

{{ var attempt = 0; var server; var tier = 0; + var symbol=""; var requests = []; // Define a function that creates closures to drop old requests @@ -100,7 +107,7 @@

{{ }; // Define the function that submits a gist url to the server var submit = function({{if .Recaptcha}}captcha{{end}}) { - server.send(JSON.stringify({url: $("#url")[0].value, tier: tier{{if .Recaptcha}}, captcha: captcha{{end}}}));{{if .Recaptcha}} + server.send(JSON.stringify({url: $("#url")[0].value, symbol: symbol, tier: tier{{if .Recaptcha}}, captcha: captcha{{end}}}));{{if .Recaptcha}} grecaptcha.reset();{{end}} }; // Define a method to reconnect upon server loss diff --git a/cmd/faucet/website.go b/cmd/faucet/website.go index 8602b26fe2..1b076055e6 100644 --- a/cmd/faucet/website.go +++ b/cmd/faucet/website.go @@ -1,6 +1,6 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// faucet.html (8.658kB) +// faucet.html (9.293kB) package main @@ -69,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x3a\xeb\x93\xdb\xb6\xf1\x9f\xe5\xbf\x62\xc3\x9f\x13\x51\xbf\x3b\x92\x92\x2f\xaf\x91\x48\x75\x6c\x27\xcd\x5c\x67\xea\x64\xea\x64\xda\x4e\x92\x0f\x10\xb1\x12\x71\x07\x02\x34\x00\x4a\xa7\x68\xf4\xbf\x77\x00\x3e\x44\x52\xba\x8b\x5d\xbb\xfe\xa0\xc3\x63\xb1\xbb\xd8\xf7\x82\x8e\x3f\xfb\xee\xc7\xd7\x3f\xff\xfb\xa7\xef\x21\x33\x39\x5f\x3e\x8b\xed\x1f\xe0\x44\x6c\x12\x0f\x85\xb7\x7c\x36\x8a\x33\x24\x74\xf9\x6c\x34\x8a\x73\x34\x04\xd2\x8c\x28\x8d\x26\xf1\x4a\xb3\x0e\xbe\xf5\x4e\x1b\x99\x31\x45\x80\xef\x4a\xb6\x4d\xbc\x7f\x05\xbf\xbc\x0c\x5e\xcb\xbc\x20\x86\xad\x38\x7a\x90\x4a\x61\x50\x98\xc4\xbb\xfd\x3e\x41\xba\xc1\xce\x39\x41\x72\x4c\xbc\x2d\xc3\x5d\x21\x95\xe9\x80\xee\x18\x35\x59\x42\x71\xcb\x52\x0c\xdc\xe4\x1a\x98\x60\x86\x11\x1e\xe8\x94\x70\x4c\x66\xde\xf2\x99\xc5\x63\x98\xe1\xb8\x3c\x1c\xc2\x37\x68\x76\x52\xdd\x1f\x8f\x73\xf8\x2b\x29\x53\x34\x71\x54\xed\x39\x30\xce\xc4\x3d\x64\x0a\xd7\x89\x67\x99\xd5\xf3\x28\x4a\xa9\xb8\xd3\x61\xca\x65\x49\xd7\x9c\x28\x0c\x53\x99\x47\xe4\x8e\x3c\x44\x9c\xad\x74\x64\x76\xcc\x18\x54\xc1\x4a\x4a\xa3\x8d\x22\x45\x74\x13\xde\x84\xdf\x44\xa9\xd6\x51\xbb\x16\xe6\x4c\x84\xa9\xd6\x1e\x28\xe4\x89\xa7\xcd\x9e\xa3\xce\x10\x8d\x07\xd1\xf2\xbf\xa3\xbb\x96\xc2\x04\x64\x87\x5a\xe6\x18\x7d\x19\x7e\x13\x4e\x1d\xc9\xee\xf2\xd3\x54\x2d\x59\x9d\x2a\x56\x18\xd0\x2a\x7d\x6f\xba\x77\xef\x4a\x54\xfb\xe8\x26\x9c\x85\xb3\x7a\xe2\xe8\xdc\x69\x6f\x19\x47\x15\xc2\xe5\x47\xe1\x0e\x84\x34\xfb\xe8\x45\xf8\x65\x38\x8b\x0a\x92\xde\x93\x0d\xd2\x86\x92\xdd\x0a\x9b\xc5\x4f\x46\xf7\x31\x1d\xde\x0d\x55\xf8\x29\x88\xe5\x32\x47\x61\xc2\x3b\x1d\xbd\x08\x67\xdf\x86\xd3\x66\xe1\x1c\xbf\x23\x60\x95\x66\x49\x8d\xc2\x2d\x2a\xc3\x52\xc2\x83\x14\x85\x41\x05\x07\xbb\x3a\xca\x99\x08\x32\x64\x9b\xcc\xcc\x61\x36\x9d\x7e\xbe\xb8\xb4\xba\xcd\xaa\x65\xca\x74\xc1\xc9\x7e\x0e\x6b\x8e\x0f\xd5\x12\xe1\x6c\x23\x02\x66\x30\xd7\x73\xa8\x30\xbb\x8d\xa3\xa3\x59\x28\xb9\x51\xa8\x75\x4d\xac\x90\x9a\x19\x26\xc5\xdc\x5a\x14\x31\x6c\x8b\x97\x60\x75\x41\xc4\xd9\x01\xb2\xd2\x92\x97\x06\x07\x8c\xac\xb8\x4c\xef\xab\x35\xe7\xbf\xdd\x4b\xa4\x92\x4b\x35\x87\x5d\xc6\xea\x63\xe0\x08\x41\xa1\xb0\x46\x0f\x05\xa1\x94\x89\xcd\x1c\xbe\x2e\xea\xfb\x40\x4e\xd4\x86\x89\x39\x4c\x4f\x47\xe2\xa8\x11\x63\x1c\x55\xa1\xea\xd9\x28\x5e\x49\xba\x77\x3a\xa4\x6c\x0b\x29\x27\x5a\x27\xde\x40\xc4\x2e\x04\xf5\x00\x6c\xe4\x21\x4c\x34\x5b\xbd\x3d\x25\x77\x1e\x38\x42\x89\x57\x31\x11\xac\xa4\x31\x32\x9f\xc3\xcc\xb2\x57\x1f\x19\xe0\xe3\x01\xdf\x04\xb3\x17\xcd\xe6\x28\xce\x66\x0d\x12\x83\x0f\x26\x70\xfa\x69\x35\xe3\x2d\x63\xd6\x9c\x5d\x13\x58\x93\x60\x45\x4c\xe6\x01\x51\x8c\x04\x19\xa3\x14\x45\xe2\x19\x55\xa2\xb5\x23\xb6\x84\x6e\xc0\x6b\xe3\x5d\x36\x6b\x38\x89\x28\xdb\xd6\x17\xe9\x0c\x07\x77\x7a\x9c\xed\x6f\xa1\x1e\xc8\xf5\x5a\xa3\x09\x3a\xb7\xe8\x00\x33\x51\x94\x26\xd8\x28\x59\x16\xed\xfe\x28\x76\xab\xc0\x68\xe2\x95\x8a\x7b\x75\x88\x77\x43\xb3\x2f\xea\xcb\x7b\xed\x55\xa5\xca\x03\x2b\x7b\x25\xb9\x07\x05\x27\x29\x66\x92\x53\x54\x89\x77\xeb\xf0\xec\x65\xa9\xe0\x15\x13\x44\xa4\x08\x6f\x73\xa2\x0c\xbc\xce\x08\x13\x40\x28\xb5\x36\x19\x86\x61\x87\xb6\x33\xd0\x73\xee\x82\x95\x11\x27\xa8\x51\xbc\x2a\x8d\x91\x2d\xe0\xca\x08\x58\x19\x11\x50\x5c\x93\x92\x1b\xa0\x4a\x16\x54\xee\x44\x60\xe4\x66\x63\x13\x58\xc5\x77\x75\xc8\x03\x4a\x0c\xa9\xb7\x12\xaf\x81\x6d\x14\x45\x74\x21\x8b\xb2\xa8\x55\x55\x2d\xe2\x43\x41\x04\x45\x6a\x15\xcb\x35\x7a\xcb\x1f\xd8\x16\x21\x47\x78\xf5\xe6\xd5\x68\xa8\xf5\x94\x28\x34\x41\x17\xe5\x99\xee\xe3\xa8\x62\xa5\xba\x10\xd4\xff\xe2\x92\x37\x98\xda\x0b\xe4\x28\x4a\xe8\xcd\x02\x65\x43\x87\xb7\x3c\x1c\x14\x11\x1b\x84\xe7\x8c\x3e\x5c\xc3\x73\x92\xcb\x52\x18\x98\x27\x10\xbe\x74\x43\x7d\x3c\xf6\xb0\x03\xc4\x9c\x2d\x63\xf2\x94\x05\x83\x14\x29\x67\xe9\x7d\xe2\x19\x86\x2a\x39\x1c\x2c\xf2\xe3\x71\x01\x87\x03\x5b\xc3\xf3\xf0\x1f\x98\x92\xc2\xa4\x19\x39\x1e\x37\xaa\x19\x87\xf8\x80\x69\x69\xd0\x9f\x1c\x0e\xc8\x35\x1e\x8f\xba\x5c\xe5\xcc\xf8\xcd\x71\xbb\x2e\xe8\xf1\x68\x79\xae\xf9\x3c\x1e\xe3\x88\x2c\xe3\x88\xb3\x65\xbd\xd9\x97\x44\x54\xf2\x93\x49\x44\xd6\x26\x5a\xeb\x75\xce\xe0\xf8\xe9\xb2\x73\xc1\xb6\x37\x41\xcb\x62\xad\x72\xcd\x0c\xde\xe3\x3e\xf1\x0e\x87\xee\xd9\x7a\x37\x25\x9c\xaf\x88\xbd\x7c\xc5\x7f\x7b\xe8\x0f\xb4\xa6\xb8\x65\xda\x15\x43\xcb\x86\x83\x13\xdb\xef\xe9\xac\x83\x00\x64\x64\x31\x87\x9b\x17\x9d\xe8\x73\xc9\x8f\xbf\x1e\xf8\xf1\xcd\x45\xe0\x82\x08\xe4\xe0\x7e\x03\x9d\x13\xde\x8c\x6b\x87\xe8\xf8\xd7\xf0\x50\x60\x63\x6d\xcb\x5a\x1b\xb3\xa7\x0b\x90\x5b\x54\x6b\x2e\x77\x73\x20\xa5\x91\x0b\xc8\xc9\x43\x9b\xb7\x6e\xa6\xd3\x2e\xdf\xb6\x88\x23\x2b\x8e\x2e\x66\x28\x7c\x57\xa2\x36\xba\x8d\x10\xd5\x96\xfb\xb5\x81\x82\xa2\xd0\x48\x07\xd2\xb0\x14\xad\x68\x1d\x54\x47\xf5\xad\x30\x2f\xf2\xbe\x96\xb2\x4d\x05\x5d\x36\x6a\xd4\x9d\xac\xe5\x2d\x63\xa3\x4e\x70\xa3\xd8\xd0\x0f\x0a\xe5\xca\x96\x6a\x8f\x45\xf2\x2a\x68\xd9\xbb\x17\x88\xaa\xaa\x13\xac\xc9\x82\x9b\xc6\x91\xa1\x1f\x41\xd9\x1a\xe1\x8a\x68\x7c\x1f\xf2\x2e\x63\x9f\xc8\xbb\xe9\xc7\xd2\xcf\x90\x28\xb3\x42\x62\xde\x87\x81\x75\x29\x68\xe7\xfe\xaf\xde\xbc\xfa\x58\xf2\xa5\x60\x5b\x54\x9a\x99\xfd\xfb\xd2\x47\x7a\x62\xa0\x9a\xf7\x59\x88\x23\xa3\x9e\xb6\xb4\xee\xe4\xa2\x6b\xb7\xa3\x7a\x70\x2a\x37\xdd\x76\x14\xc1\x0f\x5c\xae\x08\x87\xad\x65\x79\xc5\x51\x83\x91\x60\xd3\x22\x98\x0c\x21\x2d\x95\x42\x61\x40\x1b\x62\x4a\x0d\x72\xed\x56\xd7\xae\x04\xb0\xe7\xb7\x44\x01\x31\x06\xf3\xc2\x40\x52\x17\x4b\x76\x4d\xa3\xda\xd6\x25\xa0\x9d\xda\x18\xdd\xdb\x6f\x3c\x0f\x12\xf8\xf5\xf7\xc5\xb3\x9a\x95\xef\x70\xcd\x04\x02\xb1\xc2\x48\x6d\xc1\x07\x26\x23\x06\x52\x85\xc4\xa0\x86\x94\x4b\x5d\xaa\x8a\x43\x9b\x68\xc0\x72\xd9\x60\x6a\x30\xdb\x8d\xc2\x51\x6b\x90\xf8\x19\xd1\xd9\xa4\xae\xf5\x14\x9a\x52\x89\xd3\x5e\xb3\x3e\x5a\x4b\x05\xbe\x45\xc0\x92\xe9\x02\x58\xdc\xe0\x0d\x39\x8a\x8d\xc9\x16\xc0\xae\xae\x5a\xe0\x11\x5b\x83\xdf\x40\xfc\xca\x7e\x0f\xcd\x43\x68\xa9\x40\x92\x40\x97\x9a\x23\x58\xe3\xd1\x05\x67\x29\xfa\xec\x1a\x66\x93\x45\xb3\xbb\x52\x48\xee\x9b\x59\x1d\xa2\xab\x3f\xee\xf7\xb8\xe8\x4b\xc6\x09\xbf\x27\x9b\x2a\x01\x68\x20\xb0\x61\xda\x40\xa9\xb8\x95\x8e\x85\xab\x54\xd0\x2a\xc4\xc1\x75\xa5\x72\x96\x98\xea\x41\x9d\x2e\x9a\x2b\x54\x68\x42\x8d\x82\xfa\x7f\x7b\xfb\xe3\x9b\x50\x1b\xc5\xc4\x86\xad\xf7\xfe\xa1\x54\x7c\x0e\xcf\x7d\xef\xff\x6c\xc5\x35\xf9\x75\xfa\x7b\xb8\x25\xbc\xc4\x6b\xa7\xef\xb9\xfb\x3d\xa3\x72\x0d\xf5\x70\x0e\x7d\x82\xc7\xc9\x64\x71\x39\x59\x76\x12\xb8\x42\x8d\xc6\xb7\x80\x6d\x4e\x1b\xca\x88\x40\x8e\x26\x93\xd4\xca\x41\x61\x2a\x85\xc0\xd4\x40\x59\x48\x51\x8b\x04\xb8\xd4\xfa\x64\x88\x0d\x44\x72\x6e\x14\x35\x7c\x02\x02\x77\xf0\x4f\x5c\xbd\x95\xe9\x3d\x1a\xdf\xf7\x77\x4c\x50\xb9\x0b\xb9\x4c\x89\x3d\x60\x9b\x16\x23\x53\xc9\x21\x49\x12\xa8\x5b\x38\x6f\x02\x7f\x01\x6f\xa7\x6d\x33\xe7\xc1\xdc\x0e\xed\x68\x02\x57\x30\x3c\x9e\x49\x6d\xe0\x0a\xbc\xa8\x72\x2c\x9b\x17\x95\x89\x48\xc1\xbc\x49\xe5\x1b\x8d\x16\xa4\xc8\x51\x6b\xb2\xc1\x2e\xb7\xb8\x45\x61\x5a\x8b\xb3\x97\xca\xf5\x06\x12\x70\xda\x2a\x88\xd2\x58\x81\x84\x36\x3e\x37\xa6\x67\x0d\xd8\x81\x25\x09\x88\x92\xf3\x93\xc5\x56\x1e\xb2\x68\x6c\xb1\x07\x1e\xba\xa8\x09\x9f\x25\x09\xd8\x70\x65\xe5\x4d\x4f\x27\xad\x25\x54\x61\x75\x12\xda\x88\x79\x3a\x31\x59\x74\x4d\xbb\x87\x0d\xe9\x9f\xa1\x43\x3a\xc4\x87\xf4\x11\x84\x2e\x8b\x3d\x85\xaf\xca\x7a\x1d\x74\x6e\xe1\x11\x6c\xa2\xcc\x57\xa8\x9e\x42\x57\x65\xb1\x1a\x9d\x13\xf5\xad\x30\x9d\xb3\xd7\x30\xfb\x7a\xf2\x08\x76\x54\x4a\x3e\x8a\x5c\x48\xb3\xf7\x0f\x9c\xec\x65\x69\xe6\x30\x36\xb2\x78\xed\xd2\xce\xf8\x1a\x2c\xad\x39\xb4\x18\xae\x5d\xc7\x30\x87\xb1\x9b\xd9\x7d\x96\xa3\x3b\xf5\xd5\x74\x3a\xbd\x86\xa6\x9f\x7e\x45\xac\x47\xaa\x12\x8f\x8f\xf0\xa3\xcb\x34\xb5\x7d\xf7\xc7\x70\x54\xe3\x68\x79\xaa\xe7\x1f\xc1\x55\x9b\x28\x7a\x6c\xc1\x17\x5f\xc0\xd9\x6e\xdf\x8c\xa3\x08\xfe\x4e\xd4\x3d\xb8\x0a\x53\xe1\x96\xc9\x52\x9f\xd2\x4e\xce\xb4\x66\x62\x03\x44\x03\x95\x02\xeb\x33\x1f\x96\x03\xce\x78\xac\xc1\x60\x09\xd3\x21\x83\x36\x36\x76\x72\xc4\x85\xd4\xd1\xc1\xdb\xcf\x0a\x8d\x44\x2e\x24\x1d\x96\x23\x7c\x96\x80\xe7\x75\x0f\x9f\x41\x58\x80\x16\xd9\x48\xa3\xf9\xb9\xd2\x85\x5f\xa7\xca\x4b\x89\x6c\x72\x6d\x0b\xe7\xe9\xe4\x8c\x89\xe3\x49\xbc\x2f\x8b\x02\x05\x05\x22\xf6\x2e\x3e\xb6\xb2\x65\xc2\x48\xb0\x9d\xb4\x8d\x6f\xdc\x36\x05\x1c\x5d\xa4\xaa\x8f\x5a\x01\xa7\x32\xcf\xa5\x80\x04\x82\xd9\xe2\x42\x4a\xed\x48\xb2\x73\xb5\xa1\x7a\x2e\xc8\x7e\xa8\xa2\xbe\xcc\x06\xc0\xc1\xac\xa7\x94\x9e\xbe\x2e\x2b\x66\xd4\xf2\xcd\x4e\x12\x1d\xa8\xeb\xa4\xaf\xa1\xcc\x3a\xfc\x57\x78\xae\x66\xef\x79\x8d\x76\xbb\x28\x75\xe6\x0f\x18\x9d\x2c\xce\x75\x73\x6b\x50\x11\x83\xae\x33\x72\xba\x40\x61\x98\xc2\x33\x95\x00\x11\xb6\x84\x0a\x14\x0a\x8a\xaa\xa9\x2f\x6c\x63\x55\x75\x41\x3d\x95\xb9\xe7\xf2\x9e\x39\x7d\xa0\xc3\xb8\xfa\x4c\x0a\xb4\x8d\xf3\xc0\x09\x9c\xa1\xf6\x2c\xd5\x02\x23\x27\x85\x46\x0a\x09\x54\xcf\x9b\xfe\x24\x2c\x05\x7b\xf0\x27\x41\x3d\x1f\xe2\x68\xf6\xeb\xb4\xe9\x34\x56\xb1\x7d\x95\x80\x17\x1b\x65\x6b\xef\xb1\x07\x57\x97\x5c\xd0\xa6\xe0\xf1\xf2\xc4\x41\xf7\x28\x40\x6c\xe8\xd2\xf5\x75\x55\x4f\xf0\x9b\x67\x3b\xf0\x8d\x92\xa5\xa0\x73\x5b\x77\xf9\x67\x68\xc9\x96\x18\xa2\x1c\xd6\xc9\x02\x4e\xe0\xae\x51\x9f\x43\x6a\x95\xb3\x80\xaa\xf5\x73\xdd\x35\xb4\x4d\xab\x9b\xad\xa4\xa2\xa8\x02\x45\x28\x2b\xf5\x1c\xbe\x2c\x1e\x16\xbf\x35\x4d\xbd\x6b\x14\x9e\x64\xb5\x50\xb8\x3c\xe3\x28\x4d\xdd\xdb\xcb\x15\x78\x71\x64\x01\xfe\x0c\x4d\x7b\xd9\xee\xb3\x2a\x5c\x68\x87\xa0\x7d\xf4\xac\xd7\x73\x46\x29\x47\xcb\xf0\x09\xbd\x75\x46\xab\xff\xae\x4b\xf5\x49\x42\xdd\x07\x9d\xce\x1c\x01\xb9\xc6\x27\x0e\xb4\x2d\xd5\xd8\x1a\x40\x60\xaf\xcc\x9c\xcc\xeb\xee\xcc\x2d\xab\xb1\x93\x45\xfd\x48\x4e\x4b\xe5\x0a\x2f\x3f\xa8\x0d\xec\x1a\xc6\xda\x16\x82\x54\x8f\x27\x61\x56\xe6\x44\xb0\x3f\xd0\xb7\x79\x69\x52\xc9\xca\xf5\x68\xde\x79\x48\x3e\x63\xe6\xd4\xf8\x8f\x9b\x1c\x37\xae\x85\x38\x6e\xb4\x6b\x15\xd9\x79\x60\x1e\x7f\xa0\x84\x2e\x53\x09\x56\x44\x41\x77\x12\x34\xc9\x17\x94\xb4\xd4\x9b\xbd\x15\x51\xe3\xaa\x3f\x75\xc5\xba\x90\xbb\x64\x7c\x33\x6d\x99\xac\x14\xed\xf4\x3c\xae\x6d\xed\x4c\x19\x96\xcb\xc6\x35\x97\x70\x33\xfd\x14\xdc\x52\x22\x36\x38\xbc\x81\x51\xac\x40\x0a\x24\x35\x6c\x8b\xff\x83\x8b\x7c\x02\x21\x7f\x30\x8b\xd6\x0e\x1b\xe1\x39\x33\xed\xf1\x6b\x77\x5b\xd9\xfe\xbf\xf5\x37\x88\x9c\x84\xaf\xc0\xbb\x78\x91\x47\x2d\x71\x00\x38\x70\xed\xc7\xfd\xde\x3d\x3a\x78\xc3\x9c\x62\xab\xdd\xf6\xb9\x6c\x12\x66\x26\xe7\xbe\x17\x1b\xf7\xf9\xc3\xf2\xdc\x62\x70\x08\xaa\xe5\x7e\x49\x77\xec\x37\x32\xb6\x99\xc7\x41\xd3\x05\x9d\xe2\xa4\x6d\xcc\x9a\x4a\x04\x8e\xa7\xaf\x44\x51\x04\x6f\x0d\x51\x06\x08\xfc\x72\x0b\x65\x41\x89\xb1\xd9\x4b\x82\xcd\x8f\x2e\x8b\xb5\x9f\x91\x56\x44\x69\x58\x4b\xb5\x23\x8a\x42\x29\x0c\xe3\x76\x7f\x0f\x44\x61\x5b\xfa\x69\x34\xb7\x36\x8a\x6d\x09\xf7\xcf\x9a\xc0\xe7\xfe\x38\xec\xaa\x7c\x3c\x09\x91\xa4\xd9\x39\xa0\xcb\x58\x2d\xdd\x04\xde\xb8\x16\xc0\x7f\xee\x9b\x8c\xe9\x49\x48\x8c\x51\xfe\xb8\x67\x0c\xe3\x89\xd5\xeb\xac\xd3\x92\xb5\xc7\xe3\x9e\x5b\x3d\x85\xe3\x54\x4c\xb7\x85\x40\x03\x9e\x6a\xed\x57\x76\x35\xbe\xee\xe0\xee\x9b\xd5\xf8\xf3\x71\xab\xa8\x93\x7b\x9f\xee\x91\x5c\xe4\xa4\x87\x7a\x6c\xbd\x6c\x7c\x46\x9e\x50\xfa\xda\xfa\x8f\xef\x5d\xf0\xf4\xa1\x75\x4c\x5a\x61\x57\xf1\xfa\x49\x29\x33\x41\xf1\xe1\x31\x11\x33\x3a\x9e\x84\xba\x5c\x55\x0f\x15\xfe\x57\x6d\x03\xd6\x80\x39\xe3\x1d\xa6\x82\xb3\x82\xc2\x92\xe8\x17\x15\xc1\xa0\x08\x79\x22\x6b\xd4\x24\xab\x5b\x1d\xaf\xad\xc0\xa7\x93\xf6\x9d\xeb\x7b\x6d\x8b\x2b\xa6\x33\x20\xb0\xc3\x95\x76\xcf\x0a\x50\xdb\xbb\x7b\xda\xa9\x9e\x70\x5e\xfe\x74\xdb\x79\xc6\x69\x3d\xc2\x77\xd8\xdb\x2f\xbc\x97\x1e\x4d\x2e\x7e\x52\xde\xed\x76\xe1\x46\xca\x0d\xaf\x3e\x26\xb7\xaf\x2a\x11\x29\x58\x78\xa7\x3d\x20\x7a\x2f\x52\xa0\xb8\x46\xb5\xec\xa0\xaf\x9f\x5a\xe2\xa8\xfa\xd8\x19\x47\xd5\xff\xe0\xf8\x4f\x00\x00\x00\xff\xff\xed\xb2\xd3\xa7\xd2\x21\x00\x00") +var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5a\x5b\x93\xdb\x36\xb2\x7e\x96\x7f\x45\x87\xc7\x89\xa8\x33\x43\x52\xf2\xe4\x56\x12\xa9\x53\x1e\x27\x27\x35\x5b\xb5\x4e\x6a\x9d\xd4\xee\x56\x92\x07\x88\x68\x89\xf0\x80\x00\x03\x80\xd2\x28\x2a\xfd\xf7\x2d\x80\x17\x91\x94\x66\x62\xc7\xde\xda\x5a\x3f\x8c\x71\x69\x74\x7f\xe8\x6e\xa0\xbb\x41\xc5\x9f\x7c\xf3\xfd\xab\x1f\xff\xf9\xc3\xb7\x90\x99\x9c\x2f\x9f\xc5\xf6\x3f\xe0\x44\x6c\x12\x0f\x85\xb7\x7c\x36\x8a\x33\x24\x74\xf9\x6c\x34\x8a\x73\x34\x04\xd2\x8c\x28\x8d\x26\xf1\x4a\xb3\x0e\xbe\xf6\x4e\x13\x99\x31\x45\x80\xbf\x95\x6c\x9b\x78\xff\x08\x7e\x7a\x19\xbc\x92\x79\x41\x0c\x5b\x71\xf4\x20\x95\xc2\xa0\x30\x89\x77\xf7\x6d\x82\x74\x83\x9d\x75\x82\xe4\x98\x78\x5b\x86\xbb\x42\x2a\xd3\x21\xdd\x31\x6a\xb2\x84\xe2\x96\xa5\x18\xb8\xce\x35\x30\xc1\x0c\x23\x3c\xd0\x29\xe1\x98\xcc\xbc\xe5\x33\xcb\xc7\x30\xc3\x71\x79\x38\x84\xaf\xd1\xec\xa4\xba\x3f\x1e\xe7\xf0\xff\xa4\x4c\xd1\xc4\x51\x35\xe7\xc8\x38\x13\xf7\x90\x29\x5c\x27\x9e\x05\xab\xe7\x51\x94\x52\xf1\x56\x87\x29\x97\x25\x5d\x73\xa2\x30\x4c\x65\x1e\x91\xb7\xe4\x21\xe2\x6c\xa5\x23\xb3\x63\xc6\xa0\x0a\x56\x52\x1a\x6d\x14\x29\xa2\x9b\xf0\x26\xfc\x2a\x4a\xb5\x8e\xda\xb1\x30\x67\x22\x4c\xb5\xf6\x40\x21\x4f\x3c\x6d\xf6\x1c\x75\x86\x68\x3c\x88\x96\x7f\x4e\xee\x5a\x0a\x13\x90\x1d\x6a\x99\x63\xf4\x79\xf8\x55\x38\x75\x22\xbb\xc3\x4f\x4b\xb5\x62\x75\xaa\x58\x61\x40\xab\xf4\x9d\xe5\xbe\xfd\xad\x44\xb5\x8f\x6e\xc2\x59\x38\xab\x3b\x4e\xce\x5b\xed\x2d\xe3\xa8\x62\xb8\xfc\x20\xde\x81\x90\x66\x1f\xbd\x08\x3f\x0f\x67\x51\x41\xd2\x7b\xb2\x41\xda\x48\xb2\x53\x61\x33\xf8\xd1\xe4\x3e\x66\xc3\xb7\x43\x13\x7e\x0c\x61\xb9\xcc\x51\x98\xf0\xad\x8e\x5e\x84\xb3\xaf\xc3\x69\x33\x70\xce\xdf\x09\xb0\x46\xb3\xa2\x46\xe1\x16\x95\x61\x29\xe1\x41\x8a\xc2\xa0\x82\x83\x1d\x1d\xe5\x4c\x04\x19\xb2\x4d\x66\xe6\x30\x9b\x4e\x3f\x5d\x5c\x1a\xdd\x66\xd5\x30\x65\xba\xe0\x64\x3f\x87\x35\xc7\x87\x6a\x88\x70\xb6\x11\x01\x33\x98\xeb\x39\x54\x9c\xdd\xc4\xd1\xc9\x2c\x94\xdc\x28\xd4\xba\x16\x56\x48\xcd\x0c\x93\x62\x6e\x3d\x8a\x18\xb6\xc5\x4b\xb4\xba\x20\xe2\x6c\x01\x59\x69\xc9\x4b\x83\x03\x20\x2b\x2e\xd3\xfb\x6a\xcc\x9d\xdf\xee\x26\x52\xc9\xa5\x9a\xc3\x2e\x63\xf5\x32\x70\x82\xa0\x50\x58\xb3\x87\x82\x50\xca\xc4\x66\x0e\x5f\x16\xf5\x7e\x20\x27\x6a\xc3\xc4\x1c\xa6\xa7\x25\x71\xd4\xa8\x31\x8e\xaa\xab\xea\xd9\x28\x5e\x49\xba\x77\x36\xa4\x6c\x0b\x29\x27\x5a\x27\xde\x40\xc5\xee\x0a\xea\x11\xd8\x9b\x87\x30\xd1\x4c\xf5\xe6\x94\xdc\x79\xe0\x04\x25\x5e\x05\x22\x58\x49\x63\x64\x3e\x87\x99\x85\x57\x2f\x19\xf0\xe3\x01\xdf\x04\xb3\x17\xcd\xe4\x28\xce\x66\x0d\x13\x83\x0f\x26\x70\xf6\x69\x2d\xe3\x2d\x63\xd6\xac\x5d\x13\x58\x93\x60\x45\x4c\xe6\x01\x51\x8c\x04\x19\xa3\x14\x45\xe2\x19\x55\xa2\xf5\x23\xb6\x84\xee\x85\xd7\xde\x77\xd9\xac\x41\x12\x51\xb6\xad\x37\xd2\x69\x0e\xf6\xf4\x38\xec\xaf\xa1\x6e\xc8\xf5\x5a\xa3\x09\x3a\xbb\xe8\x10\x33\x51\x94\x26\xd8\x28\x59\x16\xed\xfc\x28\x76\xa3\xc0\x68\xe2\x95\x8a\x7b\xf5\x15\xef\x9a\x66\x5f\xd4\x9b\xf7\xda\xad\x4a\x95\x07\x56\xf7\x4a\x72\x0f\x0a\x4e\x52\xcc\x24\xa7\xa8\x12\xef\xce\xf1\xd9\xcb\x52\xc1\x2d\x13\x44\xa4\x08\x6f\x72\xa2\x0c\xbc\xca\x08\x13\x40\x28\xb5\x3e\x19\x86\x61\x47\xb6\x73\xd0\x73\x74\xc1\xca\x88\x13\xd5\x28\x5e\x95\xc6\xc8\x96\x70\x65\x04\xac\x8c\x08\x28\xae\x49\xc9\x0d\x50\x25\x0b\x2a\x77\x22\x30\x72\xb3\xb1\x01\xac\xc2\x5d\x2d\xf2\x80\x12\x43\xea\xa9\xc4\x6b\x68\x1b\x43\x11\x5d\xc8\xa2\x2c\x6a\x53\x55\x83\xf8\x50\x10\x41\x91\x5a\xc3\x72\x8d\xde\xf2\x3b\xb6\x45\xc8\x11\x6e\x5f\xdf\x8e\x86\x56\x4f\x89\x42\x13\x74\x59\x9e\xd9\x3e\x8e\x2a\x28\xd5\x86\xa0\xfe\x17\x97\xbc\xe1\xd4\x6e\x20\x47\x51\x42\xaf\x17\x28\x7b\x75\x78\xcb\xc3\x41\x11\xb1\x41\x78\xce\xe8\xc3\x35\x3c\x27\xb9\x2c\x85\x81\x79\x02\xe1\x4b\xd7\xd4\xc7\x63\x8f\x3b\x40\xcc\xd9\x32\x26\x4f\x79\x30\x48\x91\x72\x96\xde\x27\x9e\x61\xa8\x92\xc3\xc1\x32\x3f\x1e\x17\x7a\x9f\xaf\x24\x4f\xc6\xb7\xaf\x6f\xc7\x0b\x38\x1c\xd8\x1a\x9e\x87\x7f\xc3\x94\x14\x26\xcd\xc8\xf1\xb8\x51\x4d\x3b\xc4\x07\x4c\x4b\x83\xfe\xe4\x70\x40\xae\xf1\x78\xd4\xe5\x2a\x67\xc6\x6f\x78\xd9\x71\x41\x8f\x47\xbb\x81\x1a\xf4\xf1\x18\x47\x64\x19\x47\x9c\x2d\xeb\xc9\xbe\x5a\xa2\x92\x9f\xfc\x23\xb2\x0e\xf2\xdf\xe6\x2e\x3f\xe0\x66\xb3\x07\x23\xef\x51\xe8\xff\x90\xbb\x40\xeb\x2f\x95\x31\xaf\xe1\xf9\x0a\x8b\x17\x78\x27\xd6\xd2\x79\xcd\x6d\xd3\x6b\x1c\xc7\x29\xee\x3d\x5c\xa6\x76\x92\xc3\xa1\x96\x70\x3c\xfe\x39\x57\x71\x40\xfc\x0e\x9b\x9e\xcb\xb4\xa0\x6b\x37\x7f\x63\xd4\xf1\x08\x1d\xea\x3f\xeb\x4b\xd5\x2d\xeb\x00\x77\xf1\x5e\xb8\x34\x37\x41\xbb\x87\xda\x39\x34\x33\x78\x8f\xfb\xc4\x3b\x1c\xba\x6b\xeb\xd9\x94\x70\xbe\x22\x4e\x45\x6e\x83\xed\xa2\xdf\xd1\x3a\xed\x96\x69\x97\x65\x2f\x1b\x04\x27\xd8\xef\x18\x05\x06\x91\xcd\xc8\x62\x0e\x37\x2f\x3a\x61\xed\x52\x80\xf8\x72\x10\x20\x6e\x2e\x12\x17\x44\x20\x07\xf7\x37\xd0\x39\xe1\x4d\xbb\x3e\x3a\x9d\x8b\x7b\xb8\x28\xb0\x41\xbc\x85\xd6\x26\x03\xd3\x05\xc8\x2d\xaa\x35\x97\xbb\x39\x90\xd2\xc8\x05\xe4\xe4\xa1\x4d\x88\x6e\xa6\xd3\x2e\x6e\x5b\x1d\x90\x15\x47\x17\x8c\x14\xfe\x56\xa2\x36\xba\x0d\x3d\xd5\x94\xfb\x6b\x23\x10\x45\xa1\x91\x0e\xb4\x61\x25\x5a\xd5\x3a\xaa\x8e\xe9\x5b\x65\x5e\xc4\xbe\x96\xb2\xcd\x31\xba\x30\x6a\xd6\x9d\x74\xc8\x5b\xc6\x46\x9d\xe8\x46\xb1\xa1\xef\x95\x23\x28\x5b\x03\x3c\x96\x22\x54\xd7\x9b\xdd\x7b\x81\xa8\xaa\x04\xd4\xba\x2c\xb8\x6e\x1c\x19\xfa\x01\x92\xad\x13\xae\x88\xc6\x77\x11\xef\x52\xc1\x93\x78\xd7\xfd\x50\xf9\x19\x12\x65\x56\x48\xcc\xbb\x00\x58\x97\x82\x76\xf6\x7f\xfb\xfa\xf6\x43\xc5\x97\x82\x6d\x51\x69\x66\xf6\xef\x2a\x1f\xe9\x09\x40\xd5\xef\x43\x88\x23\xa3\x9e\xf6\xb4\x6e\xe7\xe2\xd1\x6e\x5b\x75\xe3\x54\xc7\xb8\xe9\x28\x82\xef\xb8\x5c\x11\x0e\x5b\x0b\x79\xc5\x51\x83\x91\x60\xf3\x2d\x30\x19\x42\x5a\x2a\x85\xc2\x80\x36\xc4\x94\x1a\xe4\xda\x8d\xae\x5d\x6e\x69\xd7\x6f\x89\x02\x62\x0c\xe6\x85\x81\xa4\xce\xc2\xed\x98\x46\xb5\xad\x6b\x0b\xdb\xb5\xc1\xbf\x3f\x5f\x5d\xed\x9e\xd7\x8e\x34\x67\x11\x12\xf8\xf9\xd7\xc5\xb3\x1a\xdc\x37\xb8\x66\x02\x81\x58\xf5\xa4\xb6\xb6\x00\x93\x11\x03\xa9\x42\x62\x50\x43\xca\xa5\x2e\x55\x85\xd9\x06\x29\xb0\xb8\x1b\x4e\x0d\x67\x3b\x51\x38\xf9\x0d\x13\x3f\x23\x3a\x9b\xd4\x65\x85\x42\x53\x2a\x71\x9a\x6b\xc6\x47\x6b\xa9\xc0\xb7\x0c\x58\x32\x5d\x00\x8b\x1b\xbe\x21\x47\xb1\x31\xd9\x02\xd8\xd5\x55\x4b\x3c\x62\x6b\xf0\x1b\x8a\x9f\xd9\xaf\xa1\x79\x08\xad\x14\x48\x12\xe8\x4a\x73\x02\x6b\x3e\xba\xe0\x2c\x45\x9f\x5d\xc3\x6c\xb2\x68\x66\x57\x0a\xc9\x7d\xd3\xab\x2f\xed\xea\x3f\xf7\xf7\xb8\xe8\x6b\xc6\x99\xa3\xa7\x9b\x2a\x24\x68\x20\xb0\x61\xda\x40\xa9\xb8\xd5\x8e\xa5\xab\x8c\xd2\x9a\xc0\xd1\x75\xb5\x72\x16\xaa\xea\x46\x1d\x40\x9a\x2d\x54\x6c\x42\x8d\x82\xfa\x7f\x79\xf3\xfd\xeb\x50\x1b\xc5\xc4\x86\xad\xf7\xfe\xa1\x54\x7c\x0e\xcf\x7d\xef\x7f\x6c\x72\x3f\xf9\x79\xfa\x6b\xb8\x25\xbc\xc4\xeb\xda\xe0\x73\x68\x72\x05\xeb\x11\x73\xf7\xf7\x4c\xea\x35\xd4\xcd\x39\xf4\x01\x1c\x27\x93\xc5\xe5\x70\xda\xc9\x01\x14\x6a\x34\xbe\x25\x6c\xa3\xde\x50\x67\x04\x72\x34\x99\xa4\x56\x2f\x0a\x53\x29\x04\xa6\x06\xca\x42\x8a\x5a\x45\xc0\xa5\xd6\x27\xc7\x6c\x28\x92\x73\x27\xa9\xe9\x13\x10\xb8\x83\xbf\xe3\xea\x8d\x4c\xef\xd1\xf8\xbe\xbf\x63\x82\xca\x5d\xc8\x65\x4a\xec\x02\x5b\x2f\x1b\x99\x4a\x0e\x49\x92\x40\xfd\x7a\xe0\x4d\xe0\xff\xc0\xdb\x69\x3d\x8f\x22\x0f\xe6\xb6\x69\x5b\x13\xb8\x82\xe1\xf2\x4c\x6a\x03\x57\xe0\x45\xd5\xd1\xb3\x91\x53\x99\x88\x14\xcc\x9b\x54\x67\xa5\xb1\x8a\x14\x39\x6a\x4d\x36\xd8\x45\x8b\x5b\x14\xa6\xf5\x40\xbb\xa9\x5c\x6f\x20\x01\x67\xbd\x82\x28\x8d\x15\x49\x68\x6f\xf0\xc6\x15\xad\x43\x3b\xb2\x24\x01\x51\x72\x7e\xf2\xe0\xea\xc4\x2c\x1a\xdf\xec\x91\x87\xee\x5e\x85\x4f\x92\x04\xec\x85\x66\xf5\x4d\x4f\x2b\xad\x67\x54\x17\xef\x24\xb4\x77\xea\x69\xc5\x64\xd1\x75\xf5\x1e\x37\xa4\x7f\xc4\x0e\xe9\x90\x1f\xd2\x47\x18\xba\x38\xf7\x14\xbf\x2a\x2e\x76\xd8\xb9\x81\x47\xb8\x89\x32\x5f\xa1\x7a\x8a\x5d\x15\xe7\x6a\x76\x4e\xd5\x77\xc2\x74\xd6\x5e\xc3\xec\xcb\xc9\x23\xdc\x51\x29\xf9\x28\x73\x21\xcd\xde\x3f\x70\xb2\x97\xa5\x99\xc3\xd8\xc8\xe2\x95\x0b\x4c\xe3\x6b\xb0\xb2\xe6\xd0\x72\xb8\x76\xd5\xc7\x1c\xc6\xae\x67\xe7\x59\x8e\x6e\xd5\x17\xd3\xe9\xf4\x1a\x9a\xa7\x9c\x5b\x62\x4f\xa4\x2a\xf1\xf8\x08\x1e\x5d\xa6\x29\xea\x47\xb5\xf7\x4e\x88\x6a\x1e\x2d\xa6\xba\xff\x01\xa8\xda\xc0\xd1\x83\x05\x9f\x7d\x06\x67\xb3\x7d\x37\x8e\x22\xf8\x2b\x51\xf7\xe0\x72\x50\x85\x5b\x26\x4b\x7d\x0a\x43\x39\xd3\x9a\x89\x0d\x10\x0d\x54\x0a\xac\xd7\xbc\x5f\x4c\x38\xc3\x58\x93\xc1\x12\xa6\x43\x80\xf6\xae\xec\xc4\x8c\x0b\xa1\xa4\xc3\xb7\x1f\x25\x46\xc7\xae\xbc\xde\x4a\x96\x23\x7c\x92\x80\xe7\x75\x17\x9f\x51\x58\x82\x96\xd9\x48\xa3\xf9\xb1\xb2\x85\x5f\x87\xce\x4b\x81\x6d\x72\x6d\x53\xeb\xe9\xe4\x0c\xc4\xf1\xa4\xde\x97\x45\x81\x82\x02\x11\x7b\x77\x3f\xb6\xba\x65\xc2\x48\x90\xa5\xbd\x67\x53\xc2\x6d\xd9\xc0\xd1\xdd\x54\xf5\x52\xab\xe0\x54\xe6\xb9\x14\x90\x40\x30\x5b\x5c\x08\xb1\x1d\x4d\x76\xb6\x36\x34\xcf\x05\xdd\x0f\x4d\xd4\xd7\xd9\x80\x38\x98\xf5\x8c\xd2\xb3\xd7\x65\xc3\x8c\x5a\xdc\xec\xa4\xd1\x81\xb9\x4e\xf6\x1a\xea\xac\x83\xbf\xe2\x73\x35\x7b\xc7\x6d\xb4\xd3\x45\xa9\x33\x7f\x00\x74\xb2\x38\xb7\xcd\x9d\x41\x45\x0c\xba\xda\xc9\xd9\x02\x85\x61\x0a\xcf\x4c\x02\x44\xd8\x94\x2a\x50\x28\x28\xaa\x26\xdf\xb0\xa5\x57\x55\x27\xf5\x4c\xe6\xbe\xd4\xf4\xdc\xe9\x3d\x0f\x8c\xcb\xd7\xa4\x40\x5b\x5a\x0f\x0e\x81\x73\xd4\x9e\xa7\x5a\x62\xe4\xa4\xd0\x48\x21\x81\xea\x65\xdd\x9f\x84\xa5\x60\x0f\xfe\x24\xa8\xfb\x43\x1e\xcd\x7c\x1d\x36\x9d\xc5\x2a\xd8\x57\x09\x78\xb1\x51\x36\x3b\x1f\x7b\x70\x75\xe9\x08\xda\x10\x3c\x5e\x9e\x10\x74\x97\x02\xc4\x86\x2e\x5d\xe5\x57\x55\x0d\xbf\x78\xb6\x46\xdf\x28\x59\x0a\x3a\xb7\x79\x98\x7f\xc6\x96\x6c\x89\x21\xca\x71\x9d\x2c\xe0\x44\xee\x4a\xf9\x39\xa4\xd6\x38\x0b\xa8\x8a\x43\x57\x7f\x43\x5b\xd6\xba\xde\x4a\x2a\x8a\x2a\x50\x84\xb2\x52\xcf\xe1\xf3\xe2\x61\xf1\x4b\x53\xf6\xbb\x52\xe2\x49\xa8\x85\xc2\xe5\x19\xa2\x34\x75\xcf\x7e\x57\xe0\xc5\x91\x25\xf8\x23\x36\xed\x66\xbb\x2f\xfa\x70\xa1\x60\x82\xf6\xbd\xbd\x1e\xcf\x19\xa5\x1c\x2d\xe0\x13\x7b\x7b\x18\xad\xfd\xbb\x47\xaa\x2f\x12\xea\x4a\xe9\xb4\xe6\x08\xc8\x35\x3e\xb1\xa0\x2d\xba\xc6\xd6\x01\x02\xbb\x65\xe6\x74\x5e\xd7\x6f\x6e\x58\x8d\x9d\x2e\xea\xef\x33\xb4\x54\x2e\xf1\xf2\x83\xda\xc1\xae\x61\xac\x6d\x22\x48\xf5\x78\x12\x66\x65\x4e\x04\xfb\x1d\x7d\x1b\x97\x26\x95\xae\x5c\x15\xe7\x9d\x5f\xc9\x67\x60\x4e\x4f\x03\xe3\x26\xc6\x8d\x6b\x25\x8e\x1b\xeb\x5a\x43\x76\xbe\x6d\x8c\xdf\x53\x43\x97\xa5\x04\x2b\xa2\xa0\xdb\x09\x9a\xe0\x0b\x4a\x5a\xe9\xcd\xdc\x8a\xa8\x71\x55\xc1\xba\xe4\x5d\xc8\x5d\x32\xbe\x99\xb6\x20\x2b\x43\x3b\x3b\x8f\x6b\x5f\x3b\x33\x86\x45\xd9\x1c\xcd\x25\xdc\x4c\x3f\x06\x5a\x4a\xc4\x06\x87\x3b\x30\x8a\x15\x48\x81\xa4\x86\x6d\xf1\xdf\xb0\x91\x8f\xa0\xe4\xf7\x86\x68\xfd\xb0\x51\x9e\x73\xd3\x1e\x5e\x3b\xdb\xea\xf6\x7f\xed\x79\x83\xc8\x69\xf8\x0a\xbc\x8b\x1b\x79\xd4\x13\x07\x84\x83\xa3\xfd\xf8\xb9\x77\xcf\x12\xde\x30\xa6\xd8\x6c\xb7\x7d\x50\x9b\x84\x99\xc9\xb9\xef\xc5\xc6\x7d\x79\xb3\x98\x5b\x0e\x8e\x41\x35\xdc\x4f\xe9\x8e\xfd\x42\xc6\x16\xf7\x38\x28\xba\xa0\x93\x9c\xb4\x85\x59\x93\x89\xc0\xf1\xf4\x81\x32\x8a\xe0\x8d\x21\xca\x00\x81\x9f\xee\xa0\x2c\x28\x31\x36\x7a\x49\xb0\xf1\xd1\x45\xb1\xf6\x0b\xe6\x8a\x28\x0d\x6b\xa9\x76\x44\x51\x28\x85\x61\xdc\xce\xef\x81\x28\x6c\x53\x3f\x8d\xe6\xce\xde\x62\x5b\xc2\xfd\xb3\x22\xf0\xb9\x3f\x0e\xbb\x26\x1f\x4f\x42\x24\x69\x76\x4e\xe8\x22\x56\x2b\x37\x81\xd7\xae\x04\xf0\x9f\xfb\x26\x63\x7a\x12\x12\x63\x94\x3f\xee\x39\xc3\x78\x62\xed\x3a\xeb\x94\x64\xed\xf2\xb8\x77\xac\x9e\xe2\x71\x4a\xa6\xdb\x44\xa0\x21\x4f\xb5\xf6\x2b\xbf\x1a\x5f\x77\x78\xf7\xdd\x6a\xfc\xe9\xb8\x35\xd4\xe9\x78\x9f\xf6\x91\x5c\x44\xd2\x63\x3d\xb6\xa7\x6c\x7c\x26\x9e\x50\xfa\xca\x9e\x1f\xdf\xbb\x70\xd2\x87\xde\x31\x69\x95\x5d\xdd\xd7\x4f\x6a\x99\x09\x8a\x0f\x8f\xa9\x98\xd1\xf1\x24\xd4\xe5\xaa\x7a\xb8\xf0\xbf\x68\x0b\xb0\x86\xcc\x39\xef\x30\x14\x9c\x25\x14\x56\x44\x3f\xa9\x08\x06\x49\xc8\x13\x51\xa3\x16\x59\xed\xea\x78\x6d\x15\x3e\x9d\xb4\xef\x5e\xdf\x6a\x9b\x5c\x31\x9d\x01\x81\x1d\xae\xb4\x7b\x56\x80\xda\xdf\xdd\x53\x4f\xf5\xa4\xf3\xf2\x87\xbb\xce\xb3\x4e\x7b\x22\x7c\xc7\xbd\xfd\x71\xc1\xa5\x47\x93\x8b\xbf\x66\xd8\xed\x76\xe1\x46\xca\x0d\xaf\x7e\xc7\xd0\xbe\xaa\x44\xa4\x60\xe1\x5b\xed\x01\xd1\x7b\x91\x02\xc5\x35\xaa\x65\x87\x7d\xfd\xd4\x12\x47\xd5\x77\xf6\x38\xaa\x7e\x3c\xf4\xaf\x00\x00\x00\xff\xff\xd9\xd8\xd1\x5e\x4d\x24\x00\x00") func faucetHtmlBytes() ([]byte, error) { return bindataRead( @@ -85,7 +85,7 @@ func faucetHtml() (*asset, error) { } info := bindataFileInfo{name: "faucet.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x53, 0xb1, 0xc1, 0x2e, 0x1, 0xc9, 0x33, 0x7a, 0xbf, 0x66, 0xff, 0xed, 0x61, 0x5e, 0xca, 0x9a, 0x73, 0x31, 0xb4, 0xa, 0x95, 0xc3, 0x1b, 0x6, 0xe8, 0xcf, 0x12, 0x4e, 0xb8, 0x2e, 0xcf, 0xdf}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x42, 0xb4, 0x67, 0xdf, 0x31, 0x8e, 0x4f, 0xcc, 0x2c, 0xe0, 0x3, 0x84, 0x98, 0xd4, 0x9a, 0x57, 0x86, 0x2f, 0x32, 0xf3, 0x4, 0x88, 0x0, 0xc2, 0x31, 0x7d, 0xea, 0x46, 0x4a, 0x1b, 0x3a}} return a, nil } @@ -224,7 +224,7 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "faucet.html": {faucetHtml, map[string]*bintree{}}, + "faucet.html": &bintree{faucetHtml, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory.