master 3223da786213 cached
98 files
312.5 KB
101.7k tokens
328 symbols
1 requests
Download .txt
Showing preview only (352K chars total). Download the full file or copy to clipboard to get everything.
Repository: vertcoin-project/one-click-miner-vnext
Branch: master
Commit: 3223da786213
Files: 98
Total size: 312.5 KB

Directory structure:
gitextract_6sylzzmb/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1-bug.yml
│   │   └── 2-feature_request.yml
│   └── workflows/
│       └── golangci-lint.yml
├── .gitignore
├── LICENSE
├── README.md
├── backend/
│   ├── backend.go
│   ├── checks.go
│   ├── languages.go
│   ├── mining.go
│   ├── p2pool.go
│   ├── settings.go
│   ├── tracking.go
│   ├── update.go
│   └── wallet.go
├── build.bat
├── build.sh
├── frontend/
│   ├── .gitignore
│   ├── README.md
│   ├── babel.config.js
│   ├── package.json
│   ├── package.json.md5
│   ├── src/
│   │   ├── App.vue
│   │   ├── assets/
│   │   │   └── css/
│   │   │       └── main.css
│   │   ├── components/
│   │   │   ├── Checks.vue
│   │   │   ├── Mining.vue
│   │   │   ├── Send.vue
│   │   │   ├── Settings.vue
│   │   │   ├── TabBar.vue
│   │   │   ├── Tracking.vue
│   │   │   ├── Update.vue
│   │   │   └── Welcome.vue
│   │   ├── i18n/
│   │   │   ├── README.md
│   │   │   ├── bg.json
│   │   │   ├── da.json
│   │   │   ├── de.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── hi.json
│   │   │   ├── hr.json
│   │   │   ├── it.json
│   │   │   ├── ja.json
│   │   │   ├── lt.json
│   │   │   ├── nl.json
│   │   │   ├── no.json
│   │   │   ├── pa.json
│   │   │   ├── pl.json
│   │   │   ├── pt.json
│   │   │   ├── ro.json
│   │   │   ├── ru.json
│   │   │   ├── sl.json
│   │   │   ├── sv.json
│   │   │   ├── tr.json
│   │   │   └── zh.json
│   │   └── main.js
│   └── vue.config.js
├── go.mod
├── go.sum
├── keyfile/
│   └── keyfile.go
├── logging/
│   └── log.go
├── main.go
├── miners/
│   ├── ccminer.go
│   ├── cryptodredge.go
│   ├── lyclminer.go
│   ├── miners.go
│   ├── teamredminer.go
│   └── verthashminer.go
├── miners.json
├── networks/
│   └── networks.go
├── p2pool_nodes.json
├── ping/
│   └── ping.go
├── pools/
│   ├── miningpoolsweden.go
│   ├── p2pool.go
│   ├── p2proxy.go
│   ├── pool.go
│   ├── suprnova.go
│   ├── zergpool.go
│   └── zpool.go
├── prerequisites/
│   ├── amdgpudriver.go
│   ├── msvcrt2013.go
│   ├── nvidiadriver.go
│   └── prerequisites.go
├── project.json
├── tracking/
│   ├── matomo.go
│   └── version.go
├── util/
│   ├── autostart.go
│   ├── bech32/
│   │   └── bech32.go
│   ├── gpus.go
│   ├── gpus_test.go
│   ├── miners_linux.go
│   ├── miners_windows.go
│   ├── util.go
│   ├── versioncheck.go
│   └── versioncheck_test.go
└── wallet/
    ├── signsend.go
    ├── sigops.go
    └── wallet.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/1-bug.yml
================================================
name: Bug report
description: Submit a new bug report.
labels: [bug]
body:
  - type: markdown
    attributes:
      value: |
        ## This issue tracker is only for technical issues related to Vertcoin OCM.

        * General Vertcoin questions and/or support requests should reach out in one of the Vertcoin forums. See more here https://vertcoin.org/community/.
        * For reporting security issues, please reach out to the project maintainers or other members of the Vertcoin Github Organization

        ----
  - type: checkboxes
    attributes:
      label: Is there an existing issue for this?
      description: Please search to see if an issue already exists for the bug you encountered.
      options:
      - label: I have searched the existing issues
        required: true
  - type: checkboxes
    attributes:
      label: Did you read [Common issues and fixes](https://github.com/vertcoin-project/one-click-miner-vnext/issues/618)?.
      options:
      - label: Yes / Not relevant
        required: true
  - type: textarea
    id: current-behaviour
    attributes:
      label: Current behaviour
      description: Tell us what went wrong. Add pictures if relevant.
    validations:
      required: true
  - type: textarea
    id: expected-behaviour
    attributes:
      label: Expected behaviour
      description: Tell us what you expected to happen
    validations:
      required: true
  - type: textarea
    id: reproduction-steps
    attributes:
      label: Steps to reproduce
      description: |
        Tell us how to reproduce your bug. Please attach related screenshots if necessary.
        * Run-time or compile-time configuration options
        * Actions taken
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Relevant log output
      description: |
        Please copy and paste any relevant log output or attach a debug.log file.

        You can find the debug.log in your OCM's data directory: Windows: `%appdata%\vertcoin-ocm`or Linux: `.vertcoin-ocm`

        Please be aware that the debug log might contain identifying information.
    validations:
      required: false
  - type: dropdown
    attributes:
      label: How did you obtain Vertcoin OCM?
      multiple: false
      options:
        - Pre-built binaries
        - Compiled from source
        - Other
    validations:
      required: true
  - type: input
    id: ocm-version
    attributes:
      label: What version of Vertcoin OCM are you using?
      description: When OCM is running, the version is listed at the bottom.
      placeholder: e.g. v2.2-beta3 or master@e1bf547
    validations:
      required: true
  - type: input
    id: os
    attributes:
      label: Operating system and version
      placeholder: e.g. "Windows 10" or "Ubuntu 22.04 LTS"
    validations:
      required: true
  - type: textarea
    id: machine-specs
    attributes:
      label: Machine specifications
      description: |
        What are the specifications of the host machine?
        e.g. CPU and GPU

        If building OCM from source please supply used versions of required dependencies.
        eg. GO version, NPM version and NodeJS version.

        For the GUI-related issue on Linux provide names and versions of a distro, a desktop environment and a graphical shell (if relevant).
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/2-feature_request.yml
================================================
name: Feature Request
description: Suggest an idea for this project.
labels: [feature]
body:
  - type: checkboxes
    attributes:
      label: Is there an existing feature request for this?
      description: Please search to see if a feature request already exists.
      options:
      - label: I have searched for existing feature requests
        required: true
  - type: textarea
    id: feature
    attributes:
      label: Please describe the feature you'd like to see added.
      description: Attach screenshots or logs if applicable.
    validations:
      required: true
  - type: textarea
    id: related-problem
    attributes:
      label: Is your feature related to a problem, if so please describe it.
      description: Attach screenshots or logs if applicable.
    validations:
      required: false
  - type: textarea
    id: solution
    attributes:
      label: Describe the solution you'd like
    validations:
      required: false
  - type: textarea
    id: alternatives
    attributes:
      label: Describe any alternatives you've considered
    validations:
      required: false
  - type: textarea
    id: additional-context
    attributes:
      label: Please leave any additional context
    validations:
      required: false

================================================
FILE: .github/workflows/golangci-lint.yml
================================================
name: golangci-lint
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
permissions:
  contents: read
  # Optional: allow read access to pull request. Use with `only-new-issues` option.
  # pull-requests: read
env:
  GOCACHE: /home/runner/work/go/pkg/build
  GOPATH: /home/runner/work/go

jobs:
  golangci:
    name: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.22.0' # The Go version to download (if necessary) and use.
    
      # Install all the dependencies
      - name: Install dependencies
        run: |
          go mod tidy
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v4
        with:
          # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
          version: v1.56.2
      # Run build of the application
      - name: Run build
        run: go build . 
      

================================================
FILE: .gitignore
================================================
vertcoin-ocm
*.zip
.vscode/
vertcoin-ocm.exe
*.code-workspace
*.exe
*.manifest
*.syso

================================================
FILE: LICENSE
================================================
Copyright (C) 2019-2021 Gert-Jaap Glasbergen

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
# One-Click Miner

The One-Click Miner allows cryptocurrency enthusiasts to get into mining with minimal effort. When you download the One-Click Miner, you will be asked to provide a password for your (built in) wallet. It will then immediately commence mining.

This is a redevelopment of Vertcoin's [One Click Miner](https://github.com/vertcoin-project/one-click-miner).

This software is available for Windows and Linux.

## FAQ

### Which GPUs are supported?

Please refer to this list of [supported hardware.](https://github.com/CryptoGraphics/VerthashMiner#supported-hardware)

### I have an error message that reads 'Failure to configure' or 'Checks failed'

You may need to add an exclusion to your antivirus / Windows Defender.  The data directory is located at `%AppData%\vertcoin-ocm` on Windows or `~/.vertcoin-ocm` on Linux.

### My GPU is supported but an error messages reads 'no compatible GPUs'

Update your GPU drivers to the latest version.

### My GPU is not being utilized

The OCM is using all of your GPU resources.  To verify, check CUDA usage for Nvidia or Compute 0/1 usage for AMD.

## Building

The GUI of this MVP is based on [Wails](https://wails.app) and [Go](https://golang.org/).

Install the Wails [prerequisites](https://wails.app/gettingstarted/) for your platform, and then run:

```bash
go get github.com/wailsapp/wails/cmd/wails
```

Then clone this repository, and inside its main folder, execute:

```bash
wails build
```

## Donations

If you want to support the further development of the One Click Miner, feel free to donate Vertcoin to [Vmnbtn5nnNbs1otuYa2LGBtEyFuarFY1f8](https://insight.vertcoin.org/address/Vmnbtn5nnNbs1otuYa2LGBtEyFuarFY1f8).


================================================
FILE: backend/backend.go
================================================
package backend

import (
	"path/filepath"

	"github.com/tidwall/buntdb"

	"github.com/btcsuite/btcd/wire"
	"github.com/vertcoin-project/one-click-miner-vnext/miners"
	"github.com/vertcoin-project/one-click-miner-vnext/pools"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
	"github.com/vertcoin-project/one-click-miner-vnext/wallet"
	"github.com/wailsapp/wails"
)

type Backend struct {
	runtime             *wails.Runtime
	wal                 *wallet.Wallet
	settings            *buntdb.DB
	pendingSweep        []*wire.MsgTx
	minerBinaries       []*miners.BinaryRunner
	rapidFailures       []*miners.BinaryRunner
	pool                pools.Pool
	refreshBalanceChan  chan bool
	refreshHashChan     chan bool
	refreshRunningState chan bool
	stopMonitoring      chan bool
	stopHash            chan bool
	stopBalance         chan bool
	stopUpdate          chan bool
	stopRunningState    chan bool
	prerequisiteInstall chan bool
	alreadyRunning      bool
	p2poolNodeSelected  bool
}

func NewBackend(alreadyRunning bool) (*Backend, error) {
	backend := &Backend{
		refreshBalanceChan:  make(chan bool),
		refreshHashChan:     make(chan bool),
		refreshRunningState: make(chan bool),
		stopHash:            make(chan bool),
		stopBalance:         make(chan bool),
		stopRunningState:    make(chan bool),
		stopMonitoring:      make(chan bool),
		stopUpdate:          make(chan bool),
		prerequisiteInstall: make(chan bool),
		minerBinaries:       []*miners.BinaryRunner{},
		rapidFailures:       []*miners.BinaryRunner{},
	}

	if alreadyRunning {
		backend.alreadyRunning = true
		return backend, nil
	}

	db, err := buntdb.Open(filepath.Join(util.DataDirectory(), "settings.db"))
	if err != nil {
		return nil, err
	}
	backend.settings = db
	return backend, nil
}

func (m *Backend) ResetPool() {
	m.pool = pools.GetPool(m.GetPool(), m.Address(), m.GetTestnet())
}

func (m *Backend) WailsInit(runtime *wails.Runtime) error {
	// Save runtime
	m.runtime = runtime

	go m.PrerequisiteProxyLoop()
	go m.UpdateLoop()

	return nil
}

func (m *Backend) OpenDownloadUrl(url string) {
	util.OpenBrowser(url)
}

func (m *Backend) AlreadyRunning() bool {
	return m.alreadyRunning
}

func (m *Backend) Close() {
	m.runtime.Window.Close()
}


================================================
FILE: backend/checks.go
================================================
package backend

import (
	"fmt"
	"math/rand"
	"path/filepath"
	"runtime"
	"time"

	verthash "github.com/gertjaap/verthash-go"
	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"github.com/vertcoin-project/one-click-miner-vnext/miners"
	"github.com/vertcoin-project/one-click-miner-vnext/networks"
	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
)

func (m *Backend) PerformChecks() string {
	m.runtime.Events.Emit("checkStatus", "rapidfail")
	if len(m.rapidFailures) > 0 {
		m.runtime.Events.Emit("checkStatus", "Failed")
		m.rapidFailures = make([]*miners.BinaryRunner, 0) // Clear the failures
		return "Rapid failures: Your GPU is likely incompatible; check FAQ for supported hardware. If compatible, GPU overclocks or antivirus may be the cause."
	}

	m.runtime.Events.Emit("checkStatus", "compatibility")
	err := m.CheckGPUCompatibility()
	if err != nil {
		tracking.Track(tracking.TrackingRequest{
			Category: "PerformChecks",
			Action:   "CheckGPUCompatibilityError",
			Name:     err.Error(),
		})
		m.runtime.Events.Emit("checkStatus", "Failed")
		return err.Error()
	}

	m.runtime.Events.Emit("checkStatus", "installing_miners")
	err = m.InstallMinerBinaries()
	if err != nil {
		tracking.Track(tracking.TrackingRequest{
			Category: "PerformChecks",
			Action:   "InstallMinerBinariesError",
			Name:     err.Error(),
		})
		m.runtime.Events.Emit("checkStatus", "Failed")
		return err.Error()
	}

	m.runtime.Events.Emit("checkStatus", "verthash")
	verthashFile := filepath.Join(util.DataDirectory(), "verthash.dat")

	doneChan := make(chan bool, 1)
	progress := make(chan float64, 1)

	go func() {
		if m.GetSkipVerthashExtendedVerify() {
			err = verthash.MakeVerthashDatafileIfNotExistsWithProgress(verthashFile, progress)
		} else {
			err = verthash.EnsureVerthashDatafileWithProgress(verthashFile, progress)
		}
		doneChan <- true
	}()

	for {
		done := false
		select {
		case done = <-doneChan:
			break
		case prog := <-progress:
			m.runtime.Events.Emit("verthashProgress", prog*100)
			break
		}
		if done {
			break
		}
	}

	if err != nil {
		errorString := fmt.Sprintf("Failed to create or verify Verthash data file: %s", err.Error())
		m.runtime.Events.Emit("checkStatus", "Failed")
		return errorString
	}

	for !m.p2poolNodeSelected {
		time.Sleep(time.Second)
	}
	for networks.Active.OCMBackend == "" {
		time.Sleep(500 * time.Millisecond)
	}

	args := m.GetArgs()

	for _, br := range m.minerBinaries {
		err := br.MinerImpl.Configure(args)
		if err != nil {
			errorString := fmt.Sprintf("Failure to configure %s: The data directory may have to be excluded from your antivirus. Check FAQ.", br.MinerBinary.MainExecutableName)
			tracking.Track(tracking.TrackingRequest{
				Category: "PerformChecks",
				Action:   "ConfigureError",
				Name:     errorString,
			})
			m.runtime.Events.Emit("checkStatus", "Failed")
			return errorString
		}

		if br.MinerImpl.AvailableGPUs() == 0 {
			m.runtime.Events.Emit("checkStatus", "Failed")
			return "Miner software reported no compatible GPUs. Check FAQ for supported hardware and ensure your GPU drivers are up to date."
		}
	}

	tracking.Track(tracking.TrackingRequest{
		Category: "PerformChecks",
		Action:   "Success",
	})

	return "ok"
}

func (m *Backend) CheckGPUCompatibility() error {
	gpus := util.GetGPUs()
	compat := 0
	gpustring := ""
	for _, g := range gpus {
		if g.Type != util.GPUTypeOther {
			compat++
		}
		if gpustring != "" {
			gpustring += " / "
		}
		gpustring += g.OSName
	}

	tracking.Track(tracking.TrackingRequest{
		Category: "EnumerateGPUs",
		Action:   "Success",
		Name:     gpustring,
	})

	if compat == 0 {
		return fmt.Errorf("No compatible GPUs detected\n\nGPUs Found:\n%s - Check FAQ for supported hardware and ensure your GPU drivers are up to date.", gpustring)
	}
	return nil
}

func (m *Backend) CreateMinerBinaries() ([]*miners.BinaryRunner, error) {
	binaries := miners.GetMinerBinaries()
	gpus := util.GetGPUs()
	closedSource := m.GetClosedSource()
	testnet := m.GetTestnet()
	brs := []*miners.BinaryRunner{}
	for _, b := range binaries {
		match := false
		if b.Platform == runtime.GOOS {
			for _, g := range gpus {
				if g.Type == b.GPUType {
					if b.ClosedSource == closedSource {
						if b.Testnet == testnet {
							match = true
						}
					}
				}
			}
		}

		if match {
			if b.MultiGPUMiner {
				alreadyPresent := false
				for _, br := range brs {
					if br.MinerBinary.MainExecutableName == b.MainExecutableName {
						alreadyPresent = true
						break
					}
				}
				if alreadyPresent {
					logging.Debugf("Not adding already present multi-gpu binary [%s] again\n", b.MainExecutableName)
					continue
				}
			}
			logging.Debugf("Found compatible binary [%s] for [%s/%d] (Closed source: %t)\n", b.MainExecutableName, b.Platform, b.GPUType, b.ClosedSource)
			br, err := miners.NewBinaryRunner(b, m.prerequisiteInstall)
			if err != nil {
				return nil, err
			}
			br.Debug = m.GetDebugging()
			brs = append(brs, br)
		} else {
			logging.Debugf("Found incompatible binary [%s] for [%s/%d] (Closed source: %t)\n", b.MainExecutableName, b.Platform, b.GPUType, b.ClosedSource)
		}
	}

	if len(brs) == 0 {
		return nil, fmt.Errorf("Could not find compatible miner binaries - Check FAQ for supported hardware and ensure your GPU drivers are up to date.")
	}

	return brs, nil
}

func (m *Backend) InstallMinerBinaries() error {
	var err error
	m.minerBinaries, err = m.CreateMinerBinaries()
	if err != nil {
		return err
	}

	for _, br := range m.minerBinaries {
		err := br.Install()
		if err != nil {
			return err
		}
	}
	return nil
}

// Will be run at startup
// Additionally it can be run if the backend returns an error after startup
func (m *Backend) BackendServerSelector() {
	// Pick a random backend off the list
	n := rand.Intn(len(networks.Active.BackendServers))

	// Run a simple check to see if the backend is up and returned data isn't nonsense
	// If the backend is bad, go through the list until a suitable one is found
	for range networks.Active.BackendServers {
		b := util.CheckBackendStatus(networks.Active.BackendServers[n])
		if b {
			// If backend is up and return data other than 0, save it in networks.Active
			networks.Active.OCMBackend = networks.Active.BackendServers[n]
			logging.Infof("Using backend: %s\n", networks.Active.OCMBackend)
			return
		}
		n += 1
		if n == len(networks.Active.BackendServers) {
			n = 0
		}
	}
	// We'll only ever get here if all backends are unreachable..
	networks.Active.OCMBackend = networks.Active.BackendServers[0]
	logging.Errorf("No working backend could be found..\n")
}


================================================
FILE: backend/languages.go
================================================
package backend

import (
	"github.com/cloudfoundry/jibber_jabber"
	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"golang.org/x/text/language"
)

var availableLanguages = []string{
	// First language is default. So
	// alphabetical order except for
	// this one
	"en",
	"bg",
	"da",
	"de",
	"es",
	"fr",
	"hi",
	"hr",
	"it",
	"ja",
	"lt",
	"nl",
	"no",
	"pa",
	"pl",
	"pt",
	"ro",
	"ru",
	"sl",
	"sv",
	"tr",
	"zh",
}

var languageMatcher language.Matcher

func init() {
	tags := []language.Tag{}
	for _, l := range availableLanguages {
		t, err := language.Parse(l)
		if err == nil {
			tags = append(tags, t)
		}
	}

	languageMatcher = language.NewMatcher(tags)
}

func (m *Backend) GetLocale() string {
	userLanguage, err := jibber_jabber.DetectIETF()
	if err != nil {
		logging.Warnf("Could not determine locale, defaulting to English: %s", err.Error())
		return "en"
	}

	logging.Infof("User IETF is %s", userLanguage)
	userTag, err := language.Parse(userLanguage)
	if err != nil {
		logging.Warnf("Could not parse user IETF: %s", err.Error())
	}
	tag, _, _ := languageMatcher.Match(userTag)
	logging.Infof("Matched tag is %s", tag.String())
	base, _ := tag.Base()
	logging.Infof("Returning locale %s", base.String())
	return base.String()
}


================================================
FILE: backend/mining.go
================================================
package backend

import (
	"fmt"
	"time"

	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"github.com/vertcoin-project/one-click-miner-vnext/miners"
	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
)

func (m *Backend) GetArgs() miners.BinaryArguments {
	tracking.Track(tracking.TrackingRequest{
		Category: "Mining",
		Action:   "Switch Pool",
		Name:     fmt.Sprintf("%v", m.pool.GetName()),
	})

	return miners.BinaryArguments{
		StratumUrl:       m.pool.GetStratumUrl(),
		StratumUsername:  m.pool.GetUsername(),
		StratumPassword:  m.pool.GetPassword(),
		EnableIntegrated: m.getSetting("enableIntegrated"),
	}
}

func (m *Backend) GetPoolFee() string {
	return fmt.Sprintf("%0.2f%%", m.pool.GetFee())
}

func (m *Backend) GetPoolName() string {
	return m.pool.GetName()
}

func (m *Backend) PayoutInformation() {
	m.pool.OpenBrowserPayoutInfo(m.Address())
}

func (m *Backend) StartMining() bool {
	logging.Infof("Starting mining process...")

	tracking.Track(tracking.TrackingRequest{
		Category: "Mining",
		Action:   "Start",
	})

	args := m.GetArgs()

	startProcessMonitoring := make(chan bool)

	go func() {
		<-startProcessMonitoring
		continueLoop := true
		for continueLoop {
			newMinerBinaries := make([]*miners.BinaryRunner, 0)
			for _, br := range m.minerBinaries {
				if br.CheckRunning() == miners.RunningStateRapidFail {
					m.rapidFailures = append(m.rapidFailures, br)
					m.runtime.Events.Emit("minerRapidFail", br.MinerBinary.MainExecutableName)

				} else {
					newMinerBinaries = append(newMinerBinaries, br)
				}
			}

			m.minerBinaries = newMinerBinaries

			select {
			case <-m.stopMonitoring:
				continueLoop = false
			case <-time.After(time.Second):
			}
		}
		logging.Infof("Stopped monitoring thread")
	}()

	go func() {
		cycles := 0
		nhr := util.GetNetHash()
		th := util.GetTipHeight()
		var avgEarning float64
		continueLoop := true
		for continueLoop {
			cycles++
			if cycles > 600 {
				// Don't refresh this every time since we refresh it every second
				// and this pulls from Insight. Every 600s is fine (~every 4 blocks)
				nhr = util.GetNetHash()
				th = util.GetTipHeight()
				cycles = 0
			}
			hr := uint64(0)
			for _, br := range m.minerBinaries {
				hr += br.HashRate()
			}
			hashrate := float64(hr) / float64(1000)
			hashrateUnit := "kH/s"
			if hashrate > 1000 {
				hashrate /= 1000
				hashrateUnit = "MH/s"
			}
			if hashrate > 1000 {
				hashrate /= 1000
				hashrateUnit = "GH/s"
			}
			if hashrate > 1000 {
				hashrate /= 1000
				hashrateUnit = "TH/s"
			}
			m.runtime.Events.Emit("hashRate", fmt.Sprintf("%0.2f %s", hashrate, hashrateUnit))

			netHash := float64(nhr) / float64(1000000000)

			m.runtime.Events.Emit("networkHashRate", fmt.Sprintf("%0.2f %s", netHash, hashrateUnit))

			// Avoids wrong estimates when the backend is unavailable
			if th != 0 && nhr != 0 {
				coinsPerDay := util.GetCoinsPerDay(th)
				avgEarning = float64(hr) / float64(nhr) * float64(coinsPerDay)
			}

			m.runtime.Events.Emit("avgEarnings", fmt.Sprintf("%0.2f VTC", avgEarning))

			select {
			case <-m.stopHash:
				continueLoop = false
			case <-m.refreshHashChan:
			case <-time.After(time.Second):
			}
		}
	}()

	go func() {
		continueLoop := true
		var pb uint64
		for continueLoop {
			m.wal.Update()
			b, bi := m.wal.GetBalance()
			m.runtime.Events.Emit("balance", fmt.Sprintf("%0.8f", float64(b)/float64(100000000)))
			m.runtime.Events.Emit("balanceImmature", fmt.Sprintf("%0.8f", float64(bi)/float64(100000000)))
			logging.Infof("Updating pending pool payout...")
			newPb := m.pool.GetPendingPayout()
			pb = newPb
			m.runtime.Events.Emit("balancePendingPool", fmt.Sprintf("%0.8f", float64(pb)/float64(100000000)))
			select {
			case <-m.stopBalance:
				continueLoop = false
			case <-m.refreshBalanceChan:
			case <-time.After(time.Minute * 5):
			}
		}
	}()

	go func() {
		continueLoop := true
		for continueLoop {

			runningProcesses := 0
			for _, br := range m.minerBinaries {
				if br.IsRunning() {
					runningProcesses++
				}
			}

			m.runtime.Events.Emit("runningMiners", runningProcesses)

			timeout := time.Second * 1
			if runningProcesses > 0 {
				timeout = time.Second * 10
			}
			select {
			case <-m.stopRunningState:
				continueLoop = false
			case <-m.refreshRunningState:
			case <-time.After(timeout):
			}
		}
	}()

	for _, br := range m.minerBinaries {
		err := br.Start(args)
		if err != nil {
			m.StopMining()
			logging.Errorf("Failure to start %s: %s\n", br.MinerBinary.MainExecutableName, err.Error())
			return false
		}
	}

	startProcessMonitoring <- true

	return true
}

func (m *Backend) RefreshBalance() {

	m.refreshBalanceChan <- true
}

func (m *Backend) RefreshHashrate() {

	m.refreshHashChan <- true
}

func (m *Backend) RefreshRunningState() {

	m.refreshRunningState <- true
}

func (m *Backend) StopMining() bool {
	tracking.Track(tracking.TrackingRequest{
		Category: "Mining",
		Action:   "Stop",
	})
	select {
	case m.stopMonitoring <- true:
	default:
	}
	logging.Infof("Stopping mining process...")
	for _, br := range m.minerBinaries {
		err := br.Stop()
		if err != nil {
			logging.Errorf("Error stopping miner: %s %v", br.MinerBinary.MainExecutableName, err)
		}
	}
	select {
	case m.stopBalance <- true:
	default:
	}
	select {
	case m.stopHash <- true:
	default:
	}
	select {
	case m.stopRunningState <- true:
	default:
	}
	return true
}


================================================
FILE: backend/p2pool.go
================================================
package backend

import (
	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"github.com/vertcoin-project/one-click-miner-vnext/ping"
)

func (m *Backend) SelectP2PoolNode() {
	logging.Infof("Finding best P2Pool node...")
	ping.GetSelectedNode(m.getSetting("testnet"))
	logging.Infof("Found best P2Pool node: %v", ping.Selected.P2PoolURL)
	m.p2poolNodeSelected = true
}


================================================
FILE: backend/settings.go
================================================
package backend

import (
	"fmt"
	"math/rand"
	"strconv"

	"github.com/tidwall/buntdb"
	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"github.com/vertcoin-project/one-click-miner-vnext/networks"
	"github.com/vertcoin-project/one-click-miner-vnext/pools"
	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
)

func (m *Backend) getSetting(name string) bool {
	setting := "0"
	err := m.settings.View(func(tx *buntdb.Tx) error {
		v, err := tx.Get(name)
		setting = v
		return err
	})
	if err != nil {
		logging.Errorf("Error in getSetting(%s): %v", name, err)
	}
	return setting == "1"
}

func (m *Backend) setSetting(name string, value bool) {
	setting := "0"
	if value {
		setting = "1"
	}
	err := m.settings.Update(func(tx *buntdb.Tx) error {
		_, _, err := tx.Set(name, setting, nil)
		return err
	})
	if err != nil {
		logging.Errorf("Error in setSetting(%s): %v", name, err)
	}
}

func (m *Backend) setIntSetting(name string, value int) {
	setting := fmt.Sprintf("%d", value)
	err := m.settings.Update(func(tx *buntdb.Tx) error {
		_, _, err := tx.Set(name, setting, nil)
		return err
	})
	if err != nil {
		logging.Errorf("Error in setSetting(%s): %v", name, err)
	}
}

func (m *Backend) getIntSetting(name string) int {
	setting := "0"
	err := m.settings.View(func(tx *buntdb.Tx) error {
		v, err := tx.Get(name)
		setting = v
		return err
	})
	if err != nil {
		logging.Errorf("Error in getSetting(%s): %v", name, err)
	}
	i, _ := strconv.Atoi(setting)
	return i
}

func (m *Backend) GetPool() int {
	pool := m.getIntSetting("pool")
	if pool == 0 {
		if m.GetTestnet() {
			return 2 // Default P2Pool on testnet
		}
		// Default to a random pool
		pools := pools.GetPools(m.Address(), m.GetTestnet())
		pool := pools[rand.Intn(len(pools))].GetID()
		// Save this setting immediately so that we don't get
		// a different random pool in future calls to GetPool().
		m.setIntSetting("pool", pool)
		return pool
	}
	return pool
}

func (m *Backend) SetPool(pool int) {
	if m.GetPool() != pool {
		m.setIntSetting("pool", pool)
		m.ResetPool()
		logging.Infof("Calling WalletInitialized\n")
		m.WalletInitialized()
		logging.Infof("Done!")
	}
}

func (m *Backend) SetEnableIntegrated(enabled bool) {
	m.setSetting("enableIntegrated", enabled)
}

func (m *Backend) GetEnableIntegrated() bool {
	return m.getSetting("enableIntegrated")
}

type PoolChoice struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
}

func (m *Backend) GetPools() []PoolChoice {
	pc := make([]PoolChoice, 0)
	for _, p := range pools.GetPools(m.Address(), m.GetTestnet()) {
		pc = append(pc, PoolChoice{
			ID:   p.GetID(),
			Name: fmt.Sprintf("%s (%0.2f%% fee)", p.GetName(), p.GetFee()),
		})
	}
	return pc
}

func (m *Backend) GetTestnet() bool {
        return false // Testnet is not necessary - return false
        //return m.getSetting("testnet")
}

func (m *Backend) SetTestnet(newTestnet bool) {
	if m.GetTestnet() != newTestnet {
		logging.Infof("Setting testnet to [%b]\n", newTestnet)
		m.setSetting("testnet", newTestnet)

		logging.Infof("Setting network to testnet=%b\n", newTestnet)
		networks.SetNetwork(newTestnet)

		logging.Infof("Calling WalletInitialized\n")
		m.WalletInitialized()
		logging.Infof("Done!")
	}
}

func (m *Backend) GetSkipVerthashExtendedVerify() bool {
	return false // Verification is default - return false
	//return m.getSetting("skipverthashverify")
}

func (m *Backend) SetSkipVerthashExtendedVerify(newVerthashVerify bool) {
	logging.Infof("Setting skip verthash verify to [%b]\n", newVerthashVerify)
	m.setSetting("skipverthashverify", newVerthashVerify)
}

func (m *Backend) GetClosedSource() bool {
	return false // No closed source Verthash miners - return false
	//return m.getSetting("closedsource")
}

func (m *Backend) SetClosedSource(newClosedSource bool) {
	logging.Infof("Setting closed source to [%b]\n", newClosedSource)
	m.setSetting("closedsource", newClosedSource)
}

func (m *Backend) GetDebugging() bool {
	return m.getSetting("debugging")
}

func (m *Backend) SetDebugging(newDebugging bool) {
	logging.Infof("Setting debugging to [%b]\n", newDebugging)
	m.setSetting("debugging", newDebugging)
}

func (m *Backend) GetAutoStart() bool {
	return util.GetAutoStart()
}

func (m *Backend) SetAutoStart(newAutoStart bool) {
	util.SetAutoStart(newAutoStart)
}

func (m *Backend) GetVersion() string {
	return tracking.GetVersion()
}

func (m *Backend) PrerequisiteProxyLoop() {
	for pi := range m.prerequisiteInstall {
		send := "0"
		if pi {
			send = "1"
		}
		m.runtime.Events.Emit("prerequisiteInstall", send)
	}
}


================================================
FILE: backend/tracking.go
================================================
package backend

import (
	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
)

func (m *Backend) EnableTracking() {
	tracking.Enable()
}

func (m *Backend) DisableTracking() {
	tracking.Disable()
}

func (m *Backend) TrackingEnabled() string {
	if tracking.IsEnabled() {
		return "1"
	}
	return "0"
}

func (m *Backend) ReportIssue() {
	util.OpenBrowser("https://github.com/vertcoin-project/one-click-miner-vnext/issues/new?assignees=&labels=bug&projects=&template=1-bug.yml")
}


================================================
FILE: backend/update.go
================================================
package backend

import (
	"time"

	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
)

func (m *Backend) UpdateAvailable() bool {
	r, _ := util.GetLatestRelease()

	lastVersion := util.VersionStringToNumeric(r.Tag)
	myVersion := util.VersionStringToNumeric(tracking.GetVersion())

	return lastVersion > myVersion
}

func (m *Backend) VersionDetails() []string {
	r, _ := util.GetLatestRelease()
	return []string{r.Tag, r.Body, r.URL}
}

func (m *Backend) UpdateLoop() {
	for {
		stopUpdate := false
		select {
		case stopUpdate = <-m.stopUpdate:
		case <-time.After(time.Second * 15):
		}

		if stopUpdate {
			break
		}

		m.runtime.Events.Emit("updateAvailable", m.UpdateAvailable())
	}
}


================================================
FILE: backend/wallet.go
================================================
package backend

import (
	"fmt"

	"github.com/vertcoin-project/one-click-miner-vnext/keyfile"
	"github.com/vertcoin-project/one-click-miner-vnext/logging"
	"github.com/vertcoin-project/one-click-miner-vnext/networks"
	"github.com/vertcoin-project/one-click-miner-vnext/tracking"
	"github.com/vertcoin-project/one-click-miner-vnext/util"
	"github.com/vertcoin-project/one-click-miner-vnext/wallet"
)

func (m *Backend) WalletInitialized() int {
	logging.Infof("Checking wallet..")
	checkWallet := 0
	if keyfile.KeyFileValid() {
		checkWallet = 1
	}
	script, err := keyfile.GetScript()
	if err != nil {
		logging.Errorf("Error initializing wallet: %s", err.Error())
	}
	wal, err := wallet.NewWallet(keyfile.GetAddress(), script)
	if err != nil {
		logging.Errorf("Error initializing wallet: %s", err.Error())
	}
	m.wal = wal
	logging.Infof("Wallet initialized: %d", checkWallet)
	return checkWallet
}

func (m *Backend) SendSweep(password string) []string {
	tracking.Track(tracking.TrackingRequest{
		Category: "Sweep",
		Action:   "Send",
	})

	txids := make([]string, 0)

	if len(m.pendingSweep) == 0 {
		// Somehow user managed to press send without properly
		// preparing the sweep first
		return []string{"send_failed"}
	}

	for _, s := range m.pendingSweep {
		err := m.wal.SignMyInputs(s, password)
		if err != nil {
			logging.Errorf("Error signing transaction: %s", err.Error())
			return []string{"sign_failed"}
		}

		txHash, err := m.wal.Send(s)
		if err != nil {
			logging.Errorf("Error sending transaction: %s", err.Error())
			return []string{"send_failed"}
		}
		txids = append(txids, txHash)
	}

	m.pendingSweep = nil

	logging.Debugf("Transaction(s) sent! TXIDs: %v\n", txids)
	m.refreshBalanceChan <- true
	return txids

}

func (m *Backend) ShowTx(txid string) {
	util.OpenBrowser(fmt.Sprintf("%stx/%s", networks.Active.InsightURL, txid))
}

type PrepareResult struct {
	FormattedAmount      string
	NumberOfTransactions int
}

func (m *Backend) PrepareSweep(addr string) string {
	tracking.Track(tracking.TrackingRequest{
		Category: "Sweep",
		Action:   "Prepare",
	})

	logging.Debugf("Preparing sweep")

	txs, err := m.wal.PrepareSweep(addr)
	if err != nil {
		logging.Errorf("Error preparing sweep: %v", err)
		return err.Error()
	}

	m.pendingSweep = txs
	val := float64(0)
	for _, tx := range txs {
		val += (float64(tx.TxOut[0].Value) / float64(100000000))
	}

	result := PrepareResult{fmt.Sprintf("%0.8f VTC", val), len(txs)}
	logging.Debugf("Prepared sweep: %v", result)

	m.runtime.Events.Emit("createTransactionResult", result)
	return ""
}

func (m *Backend) Address() string {
	return keyfile.GetAddress()
}

func (m *Backend) InitWallet(password string) bool {
	tracking.Track(tracking.TrackingRequest{
		Category: "Wallet",
		Action:   "Initialize",
	})

	err := keyfile.CreateKeyFile(password)
	if err == nil {
		m.WalletInitialized()
		m.ResetPool()
		return true
	}
	logging.Errorf("Error: %s", err.Error())
	return false
}


================================================
FILE: build.bat
================================================
@ECHO OFF
IF NOT "%~1"=="" GOTO :BUILD

:USAGE
ECHO Usage: %~nx0 version
GOTO :EOF

:BUILD
SET ver=%1
git describe --always --long --dirty > %TEMP%\git-version
SET /p gitver=<%TEMP%\git-version
DEL %TEMP%\git-version >nul 2>&1
CD tracking
REN version.go version.go.build
ECHO package tracking >> version.go
ECHO var version="%ver%-%gitver%" >> version.go
CD ..
DEL build\vertcoin-ocm.exe >nul 2>&1
wails build
ECHO "Sign the release assembly now on the windows machine if desired, then:"
PAUSE
CD build 
7z -sdel -aou a vertcoin-ocm-%ver%-windows-x64.zip vertcoin-ocm.exe
CD ..
wails build -d
ECHO "Sign the debug assembly now on the windows machine if desired, then:"
PAUSE
CD build
7z -sdel -aou a vertcoin-ocm-%ver%-windows-x64-debug.zip vertcoin-ocm.exe
CD ..
DEL *.syso *.manifest *.ico *.rc *.exe >nul 2>&1
CD tracking
DEL version.go >nul 2>&1
REN version.go.build version.go
CD ..
go clean

================================================
FILE: build.sh
================================================
#!/bin/bash
GITVER=$(git describe --always --long --dirty)
mv tracking/version.go tracking/version.go.dev
echo "package tracking" > tracking/version.go
echo "var version=\"$1-$GITVER\"" >> tracking/version.go
wails build
cd build
zip ../vertcoin-ocm-$1-linux-x64.zip ./vertcoin-ocm
cd ..
wails build -d 
cd build
zip ../vertcoin-ocm-$1-linux-x64-debug.zip ./vertcoin-ocm
cd ..
rm tracking/version.go
mv tracking/version.go.dev tracking/version.go

================================================
FILE: frontend/.gitignore
================================================
.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*


================================================
FILE: frontend/README.md
================================================
# vue basic

## Project setup

```
npm install
```

### Compiles and hot-reloads for development

```
npm run serve
```

### Compiles and minifies for production

```
npm run build
```

### Run your tests

```
npm run test
```

### Lints and fixes files

```
npm run lint
```

### Customize configuration

See [Configuration Reference](https://cli.vuejs.org/config/).


================================================
FILE: frontend/babel.config.js
================================================
module.exports = {
  presets: [
    '@vue/app'
  ]
}


================================================
FILE: frontend/package.json
================================================
{
  "name": "vertcoin_one_click_miner",
  "author": "Gert-Jaap Glasbergen<gertjaap@gertjaap.nl>",
  "private": true,
  "scripts": {
    "preinstall": "npx npm-force-resolutions",
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "@wailsapp/runtime": "^1.0.10",
    "core-js": "^2.6.11",
    "lodash": "^4.17.21",
    "lodash.clonedeep": "^4.5.0",
    "lodash.defaultsdeep": "^4.6.1",
    "vue": "^2.6.11",
    "vue-i18n": "^8.15.3"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^4.5.15",
    "@vue/cli-plugin-eslint": "^3.12.1",
    "@vue/cli-service": "^4.5.15",
    "babel-eslint": "^10.0.3",
    "eslint": "^5.8.0",
    "eslint-plugin-vue": "^5.2.3",
    "eventsource-polyfill": "^0.9.6",
    "highlight.js": "^10.4.1",
    "vue-template-compiler": "^2.6.11",
    "webpack-hot-middleware": "^2.24.3"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "rules": {},
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "resolutions": {
    "minimist": "1.2.3",
    "mkdir": "0.5.3"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}


================================================
FILE: frontend/package.json.md5
================================================
584b5614d6fc7dde9620d97ca74df594

================================================
FILE: frontend/src/App.vue
================================================
<template>
  <div id="app" unselectable="on" onselectstart="return false;">
    <TabBar
      v-on:send="switchToSend"
      v-on:wallet="switchToWallet"
      v-on:settings="switchToSettings"
      v-if="((screen === 'welcome' && manualStop) || screen !== 'welcome') && (screen !== 'checks' || tabBarVisible)"
    />
    <Welcome v-if="screen === 'welcome'" v-on:start-mining="switchToChecks" />
    <Checks v-if="screen === 'checks'" v-on:mining="switchToMining" v-on:checksFailed="showTabBar" />
    <Send v-if="screen === 'send'" v-on:back="switchToMining" v-on:cancel="switchToMining" />
    <Mining v-show="screen === 'mining'" v-on:stop-mining="stopMining" />
    <Settings v-if="screen === 'settings'" v-on:committed="restartMining" />
    <Update v-if="screen === 'update'" v-on:back="restartMiningIfNotStopped" />
    <Tracking v-on:update="switchToUpdate" />
  </div>
</template>

<script>
import Welcome from "./components/Welcome.vue";
import Mining from "./components/Mining.vue";
import Checks from "./components/Checks.vue";
import Send from "./components/Send.vue";
import Settings from "./components/Settings.vue";
import TabBar from "./components/TabBar.vue";
import Tracking from "./components/Tracking.vue";
import Update from "./components/Update.vue";

import "./assets/css/main.css";

export default {
  data() {
    return {
      screen: "welcome",
      manualStop: false,
      tabBarVisible: false
    };
  },
  mounted() {
    var self = this;
    window.wails.Events.On("minerRapidFail", () => {
      window.backend.Backend.StopMining().then(() => {
        self.switchToChecks();
      });
    });
  },
  methods: {
    stopMining: function() {
      this.manualStop = true;
      this.switchToWelcome();
    },
    // Target for the wallet tab (meta between welcome (if stopped) and mining (if mining))
    switchToWallet: function() {
      var self = this;
      if (this.tabBarVisible === true) {
        this.tabBarVisible = false;
        window.backend.Backend.StopMining().then(() => {
          self.switchToChecks();
        });
      } else {
        if (this.manualStop) {
          this.switchToWelcome();
        } else {
          this.switchToMining();
        }
      }
    },
    showTabBar: function() {
      this.tabBarVisible = true;
    },
    switchToChecks: function() {
      this.screen = "checks";
    },
    switchToSettings: function() {
      this.screen = "settings";
    },
    switchToSend: function() {
      this.screen = "send";
    },
    switchToMining: function() {
      this.manualStop = false;
      this.screen = "mining";
    },
    switchToUpdate: function() {
      this.screen = "update";
    },
    switchToWelcome: function() {
      this.screen = "welcome";
    },
    restartMiningIfNotStopped: function() {
      if(this.manualStop) {
        this.switchToWelcome();
      } else {
        this.restartMining();
      }
    },
    restartMining: function() {
      var self = this;
      window.backend.Backend.StopMining().then(() => {
        self.switchToChecks();
      });
    }
  },
  name: "app",
  components: {
    Welcome,
    Mining,
    Checks,
    Send,
    TabBar,
    Tracking,
    Settings,
    Update
  }
};
</script>


================================================
FILE: frontend/src/assets/css/main.css
================================================
#app {
  font-family: 'Montserrat', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #eee;
  -moz-user-select: none; 
  -webkit-user-select: none; 
  -ms-user-select:none; 
  user-select:none;
  -o-user-select:none;
  margin: 0px;
  padding: 0px;
  font-size: 14px;
}

select {
  font-family: 'Montserrat', Helvetica, Arial, sans-serif;
  border: 2px solid #eee !important;
  background: #191b1c !important;
  color: #eee !important;
  -webkit-appearance: none;
  padding: 4px 10px;
}


/* ubuntu-regular - latin */
/* montserrat-regular - latin */
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400;
  src: url('../fonts/montserrat-v13-latin-regular.eot'); /* IE9 Compat Modes */
  src: local('Montserrat Regular'), local('Montserrat-Regular'),
       url('../fonts/montserrat-v13-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('../fonts/montserrat-v13-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
       url('../fonts/montserrat-v13-latin-regular.woff') format('woff'), /* Modern Browsers */
       url('../fonts/montserrat-v13-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
       url('../fonts/montserrat-v13-latin-regular.svg#Montserrat') format('svg'); /* Legacy iOS */
}


html {
  height: 100%;
  overflow: hidden;
  background-color: #191b1c;
  background-size: 20px 20px;
  padding: 0px; margin: 0px;
  
}

body {
  padding: 0px; margin: 0px;
}

.logo {
  width: 16em;
}

.col-6 {
	width: 50%;
	float: left;
}

div.col-286 {
  margin: 0px;
  padding-left: 200px;
  padding-right: 200px;
  height: 100%;
  width: 100%;
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

div.col-settings {
  height: 235px;
  width: 80%;
  margin-left: 10%;
  vertical-align: middle;
  text-align: center;
  overflow-y: auto;
  display: flex;
  flex-basis: 1;
}

div.col-settings-sub {
  padding: 20px;
  width: 50%;
  flex-grow: 1;
}

div.col-286.height-100 {
  height: 100px;
  display: inline;
}


div.col-wide {
  margin: 0px;
  padding-left: 50px;
  padding-right: 50px;
  height: 100%;
  width: 100%;
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}
div.settings-container {
  height: 348px;
  width: 100%;
  text-align: center;
}
div.container {
  height: 348px;
  width: 100%;
  display: table;
  text-align: center;
}

a.button:hover {
  opacity: 1.0;
  transition: 500ms;
}
a.button {
	  opacity: 0.6;
    line-height: 45px;
    background: #048652;
    max-width: 286px;
    height: 45px;
    margin: 0 auto;
    display: block;
    color: white;
    z-index: 500;
    box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.15);
    cursor: pointer;
    font-weight: 400 !important;
    text-align: center;
    border-radius: 5px;
}

a.link, a.inlineLink {
    opacity: 0.6;
    color: #048652;
    cursor: pointer;
    margin: 0 auto;
    text-align: center;
}

a.link { 
  display: block;
}

a.inlineLink {
  display: inline;
}

input[type='text'], input[type='password'] {
  border: 0px;
  background-color: #202225;
  color: white;
  border-radius: 5px;
  line-height: 45px;
  padding: 0px 10px;
  height: 45px;
  width: 400px;
  margin: 0 auto;
  font-family: 'Montserrat', Helvetica, Arial, sans-serif;
  font-size: 14px;
}

p.error {
  color: #900000;
}
input.error {
  border: 1px solid #900000;
}
input.success {
  border: 1px solid #048652;
}

input:-moz-focusring {
  color:transparent;
  text-shadow:0 0 0 #000; /* your normal text color here */
}
input:-moz-focusring * {
  color:#000; /* your normal text color here */
  text-shadow:none;
}


================================================
FILE: frontend/src/components/Checks.vue
================================================
<template>
  <div class="container">
    <div v-if="prerequisiteInstall" class="col-286">
      <p>{{ $t("checks.prerequisite") }}</p>
    </div>
    <div v-if="!prerequisiteInstall && checkStatus !== 'Failed'" class="col-286">
      <p>{{checkStatus === null ? $t("checks.checking_mining_software") : (checkStatus === 'Failed' ? 'Failed' : $t("checks." + checkStatus)) }}</p>
      <div class="verthashProgress" v-if="verthashProgress !== 0">
        <div class="progressBar">
          <div class="progress" v-bind:style="{width: verthashProgress + '%'}">&nbsp;</div>
        </div>
        <div class="progressText">{{Math.floor(verthashProgress)}}%</div>
      </div>
    </div>
    <div v-if="!prerequisiteInstall && checkStatus === 'Failed'" class="col-wide">
      <div class="failureReason" v-if="checkStatus === 'Failed'">
        {{ $t("checks.checks_failed") }}:
        <br />&nbsp;<br />
        {{failureReason}}
      </div>
      <p v-if="!prerequisiteInstall && checkStatus === 'Failed'">
        <a class="button" @click="check">{{ $t('generic.retry') }}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      prerequisiteInstall: false,
      checkStatus: null,
      failureReason: "",
      verthashProgress: 0,
    };
  },
  mounted() {
    this.check();
    var self = this;
    window.wails.Events.On("checkStatus", result => {
      self.checkStatus = result;
    });
    window.wails.Events.On("prerequisiteInstall", result => {
      self.prerequisiteInstall = result === "1";
    });
    window.wails.Events.On("verthashProgress", result => {
      self.verthashProgress = result;
    })
  },
  methods: {
    check: function() {
      var self = this;

      window.backend.Backend.PerformChecks().then(result => {
        if (result === "ok") {
          self.startMining();
        } else {
          self.$emit("checksFailed");
          self.failureReason = result;
        }
      });
    },
    startMining: function() {
      var self = this;
      window.backend.Backend.StartMining().then(() => {
        self.$emit("mining");
      });
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div.failureReason {
  height: 200px;
  overflow-y: auto;
  font-family: "Courier New", Courier, monospace;
  color: red;
  border: 1px solid red;
  width: 600px;
  margin: 0 auto;
}

div.verthashProgress {
  margin: 0 auto;
  width: 200px;
}

div.progressBar {
  border: 1px solid #048652;
  height: 10px;
  width: 100%;
  margin: 0px;
  padding: 0px;
  margin-bottom: 10px;
}

div.progress {
  float:left;
  background-color: #048652;
  margin: 0px;
  padding: 0px;
  height: 10px; 
}
</style>



================================================
FILE: frontend/src/components/Mining.vue
================================================
<template>
  <div class="container">
    <div class="col-286">
      <p class="header">{{$t('mining.spendable_balance')}}:</p>
      <p class="spendableBalance">
        <a class="tiny" @click="refreshBalance">
          <svg
            width="16"
            height="16"
            version="1.1"
            id="Capa_1"
            xmlns="http://www.w3.org/2000/svg"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            x="0px"
            y="0px"
            viewBox="0 0 458.186 458.186"
            style="enable-background:new 0 0 458.186 458.186;"
            xml:space="preserve"
          >
            <g>
              <g>
                <path
                  style="fill: #048652"
                  d="M445.651,201.95c-1.485-9.308-10.235-15.649-19.543-14.164c-9.308,1.485-15.649,10.235-14.164,19.543
										c0.016,0.102,0.033,0.203,0.051,0.304c17.38,102.311-51.47,199.339-153.781,216.719c-102.311,17.38-199.339-51.47-216.719-153.781
										S92.966,71.232,195.276,53.852c62.919-10.688,126.962,11.29,170.059,58.361l-75.605,25.19
										c-8.944,2.976-13.781,12.638-10.806,21.582c0.001,0.002,0.002,0.005,0.003,0.007c2.976,8.944,12.638,13.781,21.582,10.806
										c0.003-0.001,0.005-0.002,0.007-0.002l102.4-34.133c6.972-2.322,11.675-8.847,11.674-16.196v-102.4
										C414.59,7.641,406.949,0,397.523,0s-17.067,7.641-17.067,17.067v62.344C292.564-4.185,153.545-0.702,69.949,87.19
										s-80.114,226.911,7.779,310.508s226.911,80.114,310.508-7.779C435.905,339.799,457.179,270.152,445.651,201.95z"
                />
              </g>
            </g>
          </svg>
        </a>
        &nbsp;{{balance}} VTC
        <a class="tiny" @click="copyAddress" v-bind:title="$t('mining.copy_address')">
          <svg width="16" height="16" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
          viewBox="0 0 368.008 368.008" style="enable-background:new 0 0 368.008 368.008;" xml:space="preserve">
            <g>
              <g>
                <path style="fill: #048652" d="M368,88.004c0-1.032-0.224-2.04-0.6-2.976c-0.152-0.376-0.416-0.664-0.624-1.016c-0.272-0.456-0.472-0.952-0.832-1.352
                  l-72.008-80c-1.512-1.688-3.672-2.656-5.944-2.656h-15.648c-0.232,0-0.472,0-0.704,0H151.992c-13.232,0-24,10.768-24,24v40H24
                  c-13.232,0-24,10.768-24,24v256c0,13.232,10.768,24,24,24h192c13.232,0,24-10.768,24-24v-40h104c13.232,0,24-10.768,24-24v-175.96
                  c0-0.016,0.008-0.024,0.008-0.04L368,88.004z M224,344.004c0,4.408-3.592,8-8,8H24c-4.408,0-8-3.592-8-8v-256c0-4.408,3.592-8,8-8
                  h104v88c0,4.416,3.584,8,8,8h88V344.004z M224,160.004h-80v-80h4.688L224,155.324V160.004z M352,280.004c0,4.416-3.592,8-8,8H240
                  v-119.64c0-0.12,0.008-0.24,0.008-0.36l-0.008-16c0,0,0-0.008,0-0.024c-0.008-2.12-0.832-4.04-2.184-5.464
                  c0-0.016-0.024-0.016-0.016-0.016c0,0-0.008-0.008-0.008-0.016c-0.008,0-0.016-0.008-0.016-0.016
                  c-0.032-0.032-0.072-0.072-0.112-0.112l-80-80c-1.504-1.504-3.544-2.352-5.664-2.352h-8.008v-40c0-4.408,3.592-8,8-8h112v88
                  c0,4.416,3.584,8,8,8H352V280.004z M352,96.004h-72.008v-80h4.44L352,91.076V96.004z"/>
              </g>
            </g>
          </svg>
        </a>
      </p>
      <p class="immatureBalance" v-if="balanceImmature != '0.00000000'">
        (
        <span style="opacity: 1">{{balanceImmature}} VTC</span>
        {{$t('mining.still_maturing')}})
      </p>
      <p class="poolBalance" v-if="balancePendingPool != '0.00000000'">
        (
        <span style="opacity: 1">{{balancePendingPool}} VTC</span>
        {{$t('mining.pending_pool_payout')}})
      </p>
<!--      <p class="poolBalance" v-if="balancePendingPool == '0.00000000'">-->
<!--        {{$t('mining.pending_payout_info_unavailable')}}-->
<!--      </p>-->
      <p class="pool">
        <span style="opacity: 1">{{$t('mining.active_pool')}}: {{activePool}} <span v-if="poolFee != '0.0%'">({{$t('mining.pool_fee')}}: {{poolFee}})</span></span>
        <br><a class="link" @click="payoutInformation">{{ $t('mining.payout_information') }}</a>
      </p>
      
      <p class="spacer">&nbsp;</p>
      <p v-if="runningMiners === 0">{{$t('mining.waiting_for_miners')}}</p>
      <p v-if="runningMiners > 0" class="header">{{$t('mining.expected_earnings_24h')}}:</p>
      <p
        v-if="runningMiners > 0 && hashrate !== '0.00 MH/s'"
        class="earning"
      >~{{avgearn}} ({{hashrate}})</p>
      <p
        v-if="runningMiners > 0 && hashrate === '0.00 MH/s'"
        class="earning"
      >{{$t('mining.estimating')}}{{spinner}}</p>
      <p>
        <a class="button" v-if="stopping">{{spinner}}</a>
        <a class="button" @click="stop" v-if="!stopping">{{$t('mining.stop_mining')}}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      hashrate: "0.00 MH/s",
      avgearn: "0.00 VTC",
      netHash: "",
      gpu: "",
      testnet: false,
      wallet: "",
      balance: "0.00000000",
      balanceImmature: "0.00000000",
      balancePendingPool: "0.00000000",
      runningMiners: 0,
      spinner: "...",
      stopping: false,
      poolFee: "0.0%",
      activePool: "",
      address:"",
    };
  },
  mounted() {
    var self = this;
    window.setInterval(() => {
      var newSpinner = self.spinner + ".";
      if (newSpinner.length > 5) {
        newSpinner = ".";
      }
      self.spinner = newSpinner;
    }, 1000);
    window.backend.Backend.GetTestnet().then(result => {
      self.testnet = result;
    });
    window.setInterval(() => {
      window.backend.Backend.GetPoolName().then(result => {
        self.activePool = result;
      });
      window.backend.Backend.GetPoolFee().then(result => {
        self.poolFee = result;
      });
      window.backend.Backend.Address().then(result => {
        self.address = result;
      });
    }, 5000);
    window.backend.Backend.GetPoolName().then(result => {
      self.activePool = result;
    });
    window.backend.Backend.GetPoolFee().then(result => {
      self.poolFee = result;
    });
    window.wails.Events.On("hashRate", result => {
      self.hashrate = result;
    });
    window.wails.Events.On("runningMiners", result => {
      self.runningMiners = result;
    });
    window.wails.Events.On("networkHashRate", result => {
      self.netHash = result;
    });
    window.wails.Events.On("avgEarnings", result => {
      self.avgearn = result;
    });
    window.wails.Events.On("balance", result => {
      self.balance = result;
    });
    window.wails.Events.On("balanceImmature", result => {
      self.balanceImmature = result;
    });
    window.wails.Events.On("balancePendingPool", result => {
      self.balancePendingPool = result;
    });
    window.backend.Backend.RefreshBalance();
    window.backend.Backend.RefreshHashrate();
    window.backend.Backend.RefreshRunningState();
  },
  methods: {
    stop: function() {
      var self = this;
      this.stopping = true;
      window.backend.Backend.StopMining().then(() => {
        self.stopping = false;
        self.$emit("stop-mining");
      });
    },
    refreshBalance: function() {
      window.backend.Backend.RefreshBalance();
    },
    copyAddress: function() {
      var textArea = document.createElement("textarea");
      textArea.value = this.address;
      // textArea.style.display = "none";
      // Avoid scrolling to bottom
      textArea.style.top = "0";
      textArea.style.left = "0";
      textArea.style.position = "fixed";
    
      document.body.appendChild(textArea);
      textArea.focus();
      textArea.select();
    
      try {
        document.execCommand('copy');
      } catch(e) {
        // ignore
      }
    
      document.body.removeChild(textArea);
    },
    sendMoney: function() {
      this.$emit("send");
    },
    payoutInformation: function() {
      window.backend.Backend.PayoutInformation();
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
a.tiny:hover {
  opacity: 1;
  transition: 500ms;
}
a.tiny {
  opacity: 0.6;
  background: transparent;
  display: inline;
  z-index: 500;
  margin: 0px;
  cursor: pointer;
  border: 0px;
}

p.spendableBalance,
p.earning {
  margin: 0;
  padding: 0;
  font-size: 20px;
}
p.immatureBalance,
p.poolBalance,
p.netHash {
  margin: 0;
  padding: 0;
  font-size: 12px;
  opacity: 0.6;
}
p.spacer {
  padding: 0px;
  margin: 5px;
}
p.header {
  margin-bottom: 0;
  padding-bottom: 5px;
  opacity: 0.6;
}
p.fork {
  display: block;
  border: 2px solid #d0a000;
  color: #d0a000;
  font-weight: bold;
}

p.fork>a, p.fork>a:active, p.fork>a:visited {
  color: #d0a000;
  font-weight: bold;
  padding: 5px;
  cursor: pointer;
}

a.link {
  font-size: 14px;
  opacity: 0.6;
  text-decoration: underline;
  cursor: pointer;
}

</style>


================================================
FILE: frontend/src/components/Send.vue
================================================
<template>
  <div class="container">
    <div v-if="sendError === '' && sent === false" class="col-286">
      <p v-if="receivedBalance === '0.00 VTC'">{{ $t('sending.send_all_to') }}:</p>
      <p
        v-if="receivedBalance !== '0.00 VTC' && receivedTxCount === 1"
      >{{ $t('sending.youre_sending_x_to', { receivedBalance }) }}:</p>
      <p
        v-if="receivedBalance !== '0.00 VTC' && receivedTxCount > 1"
      >{{ $t('sending.youre_sending_x_in_y_txs_to', { receivedBalance, receivedTxCount }) }}:</p>
      <p>
        <input
          :class="{error: (error !== ''), success: (error === '' && target !== '')}"
          @blur="recalculate()"
          type="text"
          v-model="target"
          v-bind:placeholder="$t('sending.receiver_address')"
        />
      </p>
      <p v-if="error != ''" class="error">{{error}}</p>
      <p>
        <input
          type="password"
          v-model="password"
          v-bind:placeholder="$t('sending.wallet_password')"
          @keyup.enter="send"
        />
      </p>
      <p>
        <a class="button" @click="send">{{ $t('sending.send') }}</a>
      </p>
    </div>
    <div v-if="sent === true" class="col-286">
      <svg
        style="fill: #048652"
        width="57px"
        height="57px"
        viewBox="0 0 57 57"
        version="1.1"
        xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
      >
        <!-- Generator: Sketch 55.2 (78181) - https://sketchapp.com -->
        <title>Group</title>
        <desc>Created with Sketch.</desc>
        <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
          <g id="Sent" transform="translate(-371.000000, -156.000000)">
            <g id="Group" transform="translate(372.000000, 157.000000)">
              <g
                id="noun_tick_1167345"
                transform="translate(13.152174, 17.336957)"
                fill="#1EA068"
                fill-rule="nonzero"
              >
                <path
                  d="M2.45108696,11.1195652 C2.0326087,10.6413043 1.25543478,10.5815217 0.777173913,11 C0.298913043,11.4184783 0.239130435,12.1956522 0.657608696,12.673913 C0.657608696,12.673913 0.717391304,12.7336957 0.717391304,12.7336957 L7.95108696,20.5652174 C8.19021739,20.8043478 8.48913043,20.923913 8.78804348,20.923913 C9.08695652,20.923913 9.38586957,20.8043478 9.625,20.5652174 L27.8586957,2.33152174 C28.3369565,1.85326087 28.3369565,1.13586957 27.8586957,0.657608696 C27.3804348,0.179347826 26.6630435,0.179347826 26.1847826,0.657608696 L8.84782609,17.9945652 L2.45108696,11.1195652 Z"
                  id="Path"
                />
              </g>
              <circle
                id="Oval"
                stroke="#1EA068"
                stroke-width="1.19999993"
                cx="27.5"
                cy="27.5"
                r="27.5"
              />
            </g>
          </g>
        </g>
      </svg>
      <p>{{ $t('sending.coins_sent') }}</p>
      <p v-if="txids.length > 1">
        {{ $t('sending.view_trans_plural') }}:
        <br />
        <a
          class="link"
          style="display: inline"
          v-for="(txid, idx) in txids"
          v-bind:key="txid"
          @click="showTx(txid)"
        >
          <span v-if="idx > 0">&nbsp;&nbsp;</span>
          #{{idx+1}}
        </a>
      </p>
      <p v-if="txids.length == 1">
        <a
          class="link"
          style="display: inline"
          v-for="txid in txids"
          v-bind:key="txid"
          @click="showTx(txid)"
        >{{ $t('sending.view_trans_singular') }}</a>
      </p>
      <p>
        <a class="link" @click="back">{{ $t('generic.back_to_wallet') }}</a>
      </p>
    </div>
    <div v-if="sendError !== ''" class="col-286">
      <p>{{ $t('sending.failed_to_send') }}</p>
      <p>{{sendError}}</p>
      <p>
        <a class="button" @click="retry">{{ $t('generic.retry') }}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      invalidAddress: false,
      target: "",
      password: "",
      receivedBalance: "0.00 VTC",
      receivedTxCount: 0,
      error: "",
      sent: false,
      sendError: "",
      txids: []
    };
  },
  mounted() {
    var self = this;
    window.wails.Events.On("createTransactionResult", result => {
      self.receivedBalance = result.FormattedAmount;
      self.receivedTxCount = result.NumberOfTransactions;
    });
  },
  methods: {
    send: function() {
      var self = this;
      if (this.error !== "") {
        this.sent = false;
        this.txids = [];
        this.sendError = this.error;
        return;
      }

      if (this.password === "") {
        this.sent = false;
        this.txids = [];
        this.sendError = this.$t("sending.password_required");
        return;
      }

      if (this.target === "") {
        this.sent = false;
        this.txids = [];
        this.sendError = this.$t("sending.invalid_address");
        return;
      }

      window.backend.Backend.SendSweep(this.password).then(result => {
        if (result.length === 1 && result[0].length !== 64) {
          // Error!
          self.sent = false;
          self.txids = [];
          self.sendError = self.$t("sending." + result[0]);
        } else {
          self.txids = result;
          self.sent = true;
          self.sendError = "";
        }
      });
    },
    recalculate() {
      var self = this;
      this.receivedBalance = "0.00 VTC";
      this.invalidAddress = false;
      window.backend.Backend.PrepareSweep(this.target).then(result => {
        if (result !== "") {
          self.receivedBalance = "0.00 VTC";
          self.error = self.$t("sending." + result);
        } else {
          self.error = "";
        }
      });
    },
    back() {
      this.$emit("back");
    },
    retry() {
      this.password = "";
      this.receivedBalance = "0.00 VTC";
      this.error = "";
      this.sent = false;
      this.txids = [];
      this.sendError = "";
      this.recalculate();
    },
    showTx(txid) {
      window.backend.Backend.ShowTx(txid);
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>


================================================
FILE: frontend/src/components/Settings.vue
================================================
<template>
  <div class="settings-container">
    <div class="col-settings" v-if="!showWarning">
      <div class="col-settings-sub">
        <p style="text-align: left" >
          <input type="checkbox" v-model="debugging" />
          {{ $t("settings.enable_debug") }}
          <br />
          <span class="subtext">{{ $t("settings.enable_debug_sub") }}</span>
        </p>
        <p style="text-align: left">
          <input type="checkbox" v-model="autoStart" />
          {{ $t("settings.auto_start") }}
          <br />
          <span class="subtext">{{ $t("settings.auto_start_sub") }}</span>
        </p>
      </div>
      <div class="col-settings-sub">
        <!-- <p style="text-align: left">
          <input type="checkbox" v-model="testnet" />
          {{ $t("settings.testnet") }}
          <br />
          <span class="subtext">{{ $t("settings.testnet_sub") }}</span>
        </p> -->
        <p style="text-align: left">
          <input type="checkbox" v-model="enableIntegrated" />
          {{ $t("settings.enable_integrated") }}
          <br />
          <span class="subtext">{{ $t("settings.enable_integrated_sub") }}</span>
        </p>
        <p style="text-align: left">
          {{ $t("settings.pool") }}:
          <br />
          <select style="width: 100%" name="pool" v-model="poolID">
            <option v-for="option in pools" v-bind:value="option.id" v-bind:key="option.id">
                {{ option.name }}
            </option>
          </select>
        </p>
      </div>
    </div>
    <div class="col-286 height-100" v-if="!showWarning">
      <p>
        <a class="button" @click="save">{{ $t("settings.save_n_restart") }}</a>
      </p>
    </div>
    <div class="col-286" v-if="showWarning">
      <div class="warning" v-if="closedSourceMiner && showWarning">
        <p>{{ $t("settings.closed_source_warning") }}</p>
      </div>
       <p>
        <a class="button" @click="toggleWarning">{{ $t("generic.close") }}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      closedSourceMiner: false,
      debugging: false,
      autoStart: false,
      enableIntegrated: true,
      showWarning: false,
      testnet: false,
      poolID: -1,
      pools: [],
    };
  },
  created() {
    var self = this;
    window.backend.Backend.GetClosedSource().then(result => {
      self.closedSourceMiner = result;
      window.backend.Backend.GetAutoStart().then(result => {
        self.autoStart = result;
        window.backend.Backend.GetDebugging().then(result => {
          self.debugging = result;
          window.backend.Backend.GetTestnet().then(result => {
          self.testnet = result;
            window.backend.Backend.GetPools().then(result => {
              self.pools = result;
              window.backend.Backend.GetPool().then(result => {
                self.poolID = result;
                window.backend.Backend.GetEnableIntegrated().then(result => {
                  self.enableIntegrated = result;
                });
              });
            });
          });
        });
      });
    });
    
    
   
    
  },
  methods: {
    toggleWarning: function() {
      this.showWarning = !this.showWarning;
      var self = this;
      setTimeout(() => { self.showWarning = false; }, 5000);
    },
    save: function() {
      var self = this;
      window.backend.Backend.SetClosedSource(this.closedSourceMiner).then(() => {
          window.backend.Backend.SetDebugging(self.debugging).then(() => {
            window.backend.Backend.SetAutoStart(self.autoStart).then(() => {
              window.backend.Backend.SetTestnet(self.testnet).then(() => {
                window.backend.Backend.SetPool(self.poolID).then(() => {
                  window.backend.Backend.SetEnableIntegrated(self.enableIntegrated).then( () => {
                    self.$emit("committed");
                  });
                });
              });
            });
          });
        }
      );
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div.warning {
  border: 2px solid #d0a000;
  color: #d0a000;
  width: 100%;
  padding: 5px 10px;
  text-align: justify;
  line-height: 10pt;
  font-size: 10pt;
}
a.warning {
  display: block; 
  float:right;
  color: #d0a000;
  cursor: pointer;
  text-decoration: underline;
}
div.warning p {
  margin: 0px;
  padding: 0px;
}
span.subtext {
  opacity: 0.6;
  font-size: 8pt;
}
</style>


================================================
FILE: frontend/src/components/TabBar.vue
================================================
<template>
  <div class="tabBar">
    <div class="tabs">
      <div
        :class="{tab : true, active: $parent.screen === 'mining' || $parent.screen === 'welcome'}"
      >
        <a @click="wallet">{{ $t('tabbar.wallet') }}</a>
      </div>
      <div :class="{tab : true, active: $parent.screen === 'send'}">
        <a @click="send">{{ $t('tabbar.send_coins') }}</a>
      </div>
      <div :class="{tab : true, active: $parent.screen === 'settings'}">
        <a @click="settings">{{ $t('tabbar.settings') }}</a>
      </div>
    </div>
    <div style="float: right" v-if="testnet">
      <div class="testnet">TESTNET</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      testnet: false
    };
  },
  mounted() {
    var self = this;
    window.backend.Backend.GetTestnet().then(result => {
      self.testnet = result;
    })
  },
  methods: {
    send: function() {
      this.$emit("send");
    },
    wallet: function() {
      this.$emit("wallet");
    },
    settings: function() {
      this.$emit("settings");
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div.tabBar {
  position: relative;
  height: 58px;
  background-color: rgba(255, 255, 255, 0.1);
  width: 100%;
  margin: 0px;
  padding: 0px;
}

div.tabs {
  width: 500px;
  position: absolute;
  left: 50%;
  top: 50%;
  height: 20px;
  margin-left: -250px;
  margin-top: -10px;
  padding: 0px;
}

div.tab {
  width: 33%;
  margin: 0px;
  padding: 0px;
  float: left;
  color: white;
  opacity: 0.6;
  text-align: center;
}

div.tab.active {
  opacity: 1;
}

a {
  cursor: pointer;
}


div.testnet {
  height: 38px;
  color: #ff0000;
  border: 1px solid #ff0000;
  font-weight: bold;
  padding-left: 10px;
  padding-right: 10px;
  font-size: 20px;
  margin-top: 10px;
  margin-right: 20px;
  line-height: 38px;
  text-align: center;
  width: 100px;
}
</style>


================================================
FILE: frontend/src/components/Tracking.vue
================================================
<template>
  <div class="tracking">
    <p v-if="tracking">
      OCM v{{version}}
      <span v-if="updateAvailable">
        -
        <a @click="update">{{ $t('tracking.update_available') }}</a>
      </span> -
      <span>{{ $t('tracking.tracking_enabled') }}.&nbsp;</span>
      <a @click="disableTracking">{{ $t('tracking.disable_tracking') }}</a> -
      <a @click="reportIssue">{{ $t('tracking.report_issue') }}</a>
    </p>
    <p v-if="!tracking">
      OCM v{{version}}
      <span v-if="updateAvailable">
        -
        <a @click="update">{{ $t('tracking.update_available') }}</a>
      </span> -
      <span>{{ $t('tracking.tracking_disabled') }}.&nbsp;</span>
      <a @click="enableTracking">{{ $t('tracking.enable_tracking') }}</a>
      <span>
        &nbsp;-
        <a @click="reportIssue">{{ $t('tracking.report_issue') }}</a>
      </span>
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tracking: false,
      version: "dev",
      updateAvailable: false
    };
  },
  mounted() {
    var self = this;
    window.backend.Backend.TrackingEnabled().then(result => {
      self.tracking = result === "1";
    });
    window.backend.Backend.GetVersion().then(result => {
      self.version = result;
    });
    window.backend.Backend.UpdateAvailable().then(result => {
      self.updateAvailable = result;
    });
    window.wails.Events.On("updateAvailable", result => {
      self.updateAvailable = result;
    });
  },
  methods: {
    update: function() {
      this.$emit("update");
    },
    reportIssue: function() {
      window.backend.Backend.ReportIssue();
    },
    enableTracking: function() {
      this.tracking = true;
      window.backend.Backend.EnableTracking();
    },
    disableTracking: function() {
      this.tracking = false;
      window.backend.Backend.DisableTracking();
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div.tracking {
  position: absolute;
  bottom: 10px;
  width: 100%;
  text-align: center;
  margin: 0px;
  padding: 0px;
}
div.tracking p {
  font-size: 10px;
}
div.tracking p span {
  opacity: 0.6;
}

div.tracking p a {
  opacity: 1;
  text-decoration: underline;
  cursor: pointer;
}
</style>


================================================
FILE: frontend/src/components/Update.vue
================================================
<template>
  <div class="container">
    <div class="col-wide">
      <p>{{ $t('update.new_version_available') }}: {{version}}</p>
      <div class="releaseNotes">
        <pre>{{notes}}</pre>
      </div>
      <p>
        <a class="button" @click="download">{{ $t('update.download') }}</a>
      </p>
      <p>
        <a class="link" @click="back">{{ $t('generic.back_to_wallet') }}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      version: "",
      notes: "",
      downloadUrl: ""
    };
  },
  mounted() {
    var self = this;
    window.backend.Backend.VersionDetails().then(result => {
      self.version = result[0];
      self.notes = result[1];
      self.downloadUrl = result[2];
    });
  },
  methods: {
    back: function() {
      this.$emit("back");
    },
    download: function() {
      window.backend.Backend.OpenDownloadUrl(this.downloadUrl);
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div.releaseNotes {
  height: 130px;
  overflow-y: auto;
  font-family: "Courier New", Courier, monospace;
  color: #eee;
  border: 1px solid #eee;
  width: 600px;
  margin: 0 auto;
}
</style>


================================================
FILE: frontend/src/components/Welcome.vue
================================================
<template>
  <div class="container">
    <div class="col-286" v-if="alreadyRunning === false && walletInitialized === 0">
      <p>{{ $t("welcome.makeapassword") }}</p>
      <p class="error" v-if="error !== ''">{{error}}</p>
      <p>
        <input type="password" v-model="password" v-bind:placeholder="$t('welcome.password')" />
      </p>
      <p>
        <input
          type="password"
          v-model="confirmPassword"
          v-bind:placeholder="$t('welcome.confirmpassword')"
          @keyup.enter="initAndStart"
        />
      </p>
      <p>
        <a class="button" @click="initAndStart">{{ $t("welcome.startmining") }}</a>
      </p>
    </div>
    <div class="col-286" v-if="alreadyRunning === false && walletInitialized === 1">
      <p>{{ $t("welcome.click_button_to_start") }}</p>
      <p>
        <a class="button" @click="start">{{ $t("welcome.startmining") }}</a>
      </p>
    </div>
    <div class="col-286" v-if="alreadyRunning === true">
      <p>{{ $t("welcome.alreadyrunning") }}</p>
      <p>
        <a class="button" @click="close">{{ $t("generic.close") }}</a>
      </p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      error: "",
      alreadyRunning: false,
      password: "",
      confirmPassword: "",
      walletInitialized: -1
    };
  },
  created() {
    var self = this;
    window.backend.Backend.AlreadyRunning().then(result => {
      self.alreadyRunning = result;
      if (!result) {
        window.backend.Backend.WalletInitialized().then(result => {
          self.walletInitialized = result;
          if (
            self.walletInitialized === 1 &&
            !(self.$parent.manualStop === true)
          ) {
            self.start();
          }
        });
      }
    });
  },
  methods: {
    close: function() {
      window.backend.Backend.Close();
    },
    initAndStart: function() {
      this.error = "";
      if (this.password === "") {
        this.error = this.$t("welcome.password_cannot_be_empty");
        return;
      }
      if (this.password !== this.confirmPassword) {
        this.error = this.$t("welcome.password_mismatch");
        return;
      }

      var self = this;

      window.backend.Backend.InitWallet(this.password).then(result => {
        if (result !== true) {
          this.error = self.$t("welcome.error_initializing");
        } else {
          self.start();
        }
      });
    },
    start: function() {
      this.$emit("start-mining");
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
p.error {
  color: red;
}
</style>


================================================
FILE: frontend/src/i18n/README.md
================================================
# Translation workflow

If you want to add a new translation to the Vertcoin OCM you can follow two tracks:

## Create a pull-request (preferable)

We expect you're familiar with how to create pull requests. If you're not, check [this article](https://akrabat.com/the-beginners-guide-to-contributing-to-a-github-project/)

### Step 1: Create a copy of the english base file

Once in your local fork branch, make a copy of `en.json` in this directory (`frontend/src/i18n`), and rename it to match your desired language (for instance, for German you'd rename it to `de.json`).

### Step 2: Translate!

Translate all the strings in the javascript file. Only translate the values not the identifiers, so:

```json
{
    "generic" : {
        "retry" : "Retry",
        "back_to_wallet" : "Back to wallet"
    },
    ...
}
```

Would become

```json
{
    "generic" : {
        "retry" : "Opnieuw proberen",
        "back_to_wallet" : "Terug naar portemonnee"
    },
    ...
}
```
**NOTE: Special characters**

There are a couple of special characters that are not allowed in javascript string literals, including backslashes and double quotes. You need to escape them. But since they're not used at all in the English base text, it seems unlikely you'll need them. In case of doubt, you can escape them [here](https://www.freeformatter.com/json-escape.html)

**NOTE: Character set**

Please ensure the JSON file is saved using an UTF-8 character set.

### Step 3: Add language to frontend

In the file `frontend/src/main.js` there's a list of the translations imported - add your new language there - ensure the list remains in alphabetical order:

```javascript
// Import all locales
import locale_de from "./i18n/de.json"; // <-- this line is added
import locale_en from "./i18n/en.json";
import locale_nl from "./i18n/nl.json";
```

Further down in the file, also add it to the list of languages injected to the i18n component - ensure the list remains in alphabetical order:

```javascript
    const i18n = new VueI18n({
      locale: result, // set locale
      messages : {
        de: locale_de, // <-- this line is added
        en: locale_en,
        nl: locale_nl,
      },
    });
```

### Step 4: Add language to the backend

The host code running on the machine does the detection of the language and chooses the most appropriate one based on the user's locale. It needs to be made aware of the newly available language. Add this to the file `backend/languages.go` around line 9 - ensure the list remains in alphabetical order:

```golang
var availableLanguages = []string{
    "de", // <-- this line is added. Notice the comma on the end - it belongs there!
	"en",
    "nl",
}
```

### Step 5: Commit & Create PR

You're done. Add all files to a commit, push it to your personal fork and then create a pull request to the main OCM repository. Thanks a ton for your contribution in advance!

## Alternative option (only if you fail at the above)

The alternative option is that you just download the `en.js` file, translate it locally, and open an issue including the translated file. Then I can include it for you. But if you're able to use the PR workflow, I would really appreciate and prefer you use that!

================================================
FILE: frontend/src/i18n/bg.json
================================================
{
    "generic" : {
        "retry" : "Опитайте отново",
        "back_to_wallet" : "Обратно към портфейла",
        "close" : "Затвори"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner вече работи. Не можете да го стартирате повече от веднъж.",
        "click_button_to_start" : "Щракнете върху бутона по-долу, за да започнете отново да копаете.",
        "startmining" : "Започнете да копаете!",
        "makeapassword" : "Създайте парола за One-Click Miner портфейла. Не я губете.",
        "password" : "Парола",
        "confirmpassword" : "Потвърдете паролата",
        "password_cannot_be_empty" : "Паролата не може да бъде празна",
        "password_mismatch" : "Паролите не съвпадат",
        "error_initializing" : "Нещо се обърка при инициализирането на портфейла"
    },
    "checks" : {
        "prerequisite" : "Компонентите се инсталират. Може да видите изскачащ прозорец, който иска разрешения (може просто да мига в лентата на задачите)",
        "checks_failed" : "Проверките се провалиха",
        "checking_mining_software" : "Проверка на софтуера за копаене...",
        "rapidfail" : "Проверка за бързи провали",
        "compatibility" : "Проверка на съвместимостта на графичния процесор (GPU)...",
        "installing_miners" : "Инсталиране на софтуер за копаене...",
        "verthash" : "Проверка / създаване на Verthash файл с данни..."
    },
    "mining" : {
        "spendable_balance" : "Достъпен баланс",
        "still_maturing" : "Очаква потвърждение",
        "pending_pool_payout" : "предстоящо изплащане на пула",
        "pending_payout_info_unavailable" : "Моля, изчакайте информация за предстоящо изплащане",
        "waiting_for_miners" : "Изчакайте стартирането на миньорите",
        "expected_earnings_24h" : "Очаквани доходи (24 часа)",
        "estimating" : "приблизително",
        "stop_mining" : "Спрете Копаенето",
        "active_pool" : "Активен басейн",
        "pool_fee" : "такса",
        "copy_address" : "Копирайте адреса на портфейла си",
        "payout_information" : "Преглед на информацията за изплащане"
    },
    "sending" : {
        "send_all_to" : "Изпратете всичките си изкопани монети на",
        "youre_sending_x_to" : "Вие изпращате {receivedBalance} на",
        "youre_sending_x_in_y_txs_to" : "Вие изпращате {receivedBalance} в {receivedTxCount} транзакции към",
        "receiver_address" : "Адрес на получателя",
        "wallet_password" : "Парола на One-Click Miner портфейла",
        "send" : "Изпрати",
        "coins_sent" : "Вашите монети са изпратени!",
        "view_trans_plural" : "Преглед на транзакциите",
        "view_trans_singular" : "Преглед на транзакцията",
        "failed_to_send" : "Изпращането на вашите монети не бе успешно",
        "password_required" : "Изисква се парола за портфейла",
        "invalid_address" : "Невалиден адрес",
        "script_failure" : "Грешка в скрипта",
        "could_not_calculate_fee" : "Не може да се изчисли таксата",
        "insufficient_funds" : "Недостатъчни средства",
        "sign_failed" : "Транзакцията не може да бъде подписана. Проверете паролата.",
        "send_failed" : "Транзакцията не може да бъде изпратена. Проверете debug.log за повече информация"
    },
    "settings" : {
        "enable_debug" : "Активиране на отстраняване на грешки",
        "enable_debug_sub" : "Включете изхода от миньорската конзола в дневника за отстраняване на грешки. Може значително да се увеличи размера на лог файла",
        "auto_start" : "Автоматично стартиране",
        "auto_start_sub" : "Стартиране на One-Click Miner когато влезете в компютъра си",
        "closed_source" : "Използвайте миньори със затворен код",
        "closed_source_sub" : "По-добър хешрейт, но неодитирани миньори, които може да носят такса за програмист",
        "closed_source_warning" : "Избрали сте да използвате миньори със затворен код. Vertcoin не одобрява или поддържа тези миньори. Те не могат да бъдат одитирани върху тяхното съдържание и могат да съдържат функции, които увреждат компютъра ви.",
        "enable_integrated" : "Копаене чрез вградената видеокарта",
        "enable_integrated_sub" : "Миньорът ще използва вградена видео карта (ако е възможно)",
        "testnet":"Режим тестова мрежа",
        "testnet_sub":"Активира режим на тестова мрежа. Няма да добивате истински монети.",
        "skipverthashverify":"Не проверявайте Verthash при стартиране.",
        "skipverthashverify_sub":"Ще пропусне проверката на целостта на Verthash файла при стартиране (не се препоръчва)",
        "save_n_restart" : "Запазване и Рестартиране",
        "pool": "Минен басейн"
    },
    "tabbar" : {
        "wallet" : "Портфейл",
        "send_coins" : "Изпратете монети",
        "settings" : "Настройки"
    },
    "tracking": { 
        "update_available" : "Налична актуализация",
        "tracking_enabled" : "Вие анонимно споделяте статистически данни за използването на софтуера",
        "disable_tracking" : "Деактивиране",
        "tracking_disabled" : "Вие не споделяте статистически данни за използването на софтуера",
        "enable_tracking" : "Активирайте ги, за да ни помогнете да подобрим вашето преживяване",
        "report_issue" : "Подайте сигнал за проблем"
    },
    "update" : {
        "new_version_available" : "Налична нова версия",
        "download" : "Изтегли"
    }
}

================================================
FILE: frontend/src/i18n/da.json
================================================
{
    "generic" : {
        "retry" : "Prøv igen",
        "back_to_wallet" : "Tilbage til wallet",
        "close" : "Luk"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner kører allerede. Du kan kun gøre en ad gangen.",
        "click_button_to_start" : "Tryk på knappen herunder for at starte med at mine igen.",
        "startmining" : "Start med at mine!",
        "makeapassword" : "Lav et password, glem det ikke!",
        "password" : "Password",
        "confirmpassword" : "Bekræft Password",
        "password_cannot_be_empty" : "Password kan ikke være tomt",
        "password_mismatch" : "De 2 Passwords er ikke ens",
        "error_initializing" : "Noget gik galdt under indlæsning af wallet"
    },
    "checks" : {
        "prerequisite" : "Installation af en påkrævet pakke er igang. Du ser måske en popup der anmoder om tilladelser (måske som noget der blinker i din taskbar)",
        "checks_failed" : "Tjek fejlede",
        "checking_mining_software" : "Kontrollerer mining software...",
        "rapidfail" : "Kontrollerer for hurtigt opstående fejl",
        "compatibility" : "Kontrollerer for GPU kompatibilitet...",
        "installing_miners" : "Installerer mine software...",
        "verthash" : "Verificerer / generere Verthash data fil..."
    },
    "mining" : {
        "spendable_balance" : "Brugbar Balance",
        "still_maturing" : "modner stadig",
        "pending_pool_payout" : "afventende pooludbetaling",
        "pending_payout_info_unavailable" : "Vent venligst for pool udbetalingsoplysninger",
        "waiting_for_miners" : "Venter på at minerne starter",
        "expected_earnings_24h" : "Forventet indtjening (24 timer)",
        "estimating" : "estimerer",
        "stop_mining" : "Stop med at mine",
        "active_pool" : "Aktiv pool",
        "pool_fee" : "gebyr",
        "copy_address" : "Kopier din wallet adresse",
        "payout_information" : "Se udbetalingsoplysninger"
    },
    "sending" : {
        "send_all_to" : "Send alle dine minede coins til",
        "youre_sending_x_to" : "Du sender {receivedBalance} til",
        "youre_sending_x_in_y_txs_to" : "Du sender {receivedBalance} igennem {receivedTxCount} transaktioner til",
        "receiver_address" : "Modtager Adresse",
        "wallet_password" : "OCM Wallet Password",
        "send" : "Send",
        "coins_sent" : "Dine coins er blevet sendt!",
        "view_trans_plural" : "Se transaktioner",
        "view_trans_singular" : "Se transaktion",
        "failed_to_send" : "Kunne ikke sende dine coins",
        "password_required" : "Wallet password er påkrævet",
        "invalid_address" : "Ugyldig adresse",
        "script_failure" : "Script fejl",
        "could_not_calculate_fee" : "Kunne ikke beregne gebyr",
        "insufficient_funds" : "Utilstrækkelige midler",
        "sign_failed" : "Kunne ikke underskrive transaktion. Tjek dit password.",
        "send_failed" : "Kunne ikke sende transaktion. Check debug.log for mere information"
    },
    "settings" : {
        "enable_debug" : "Aktiver debugging",
        "enable_debug_sub" : "Inkludér minerens consol output i debug log. Kan gøre logfilerne temmeligt store",
        "auto_start" : "Auto start",
        "auto_start_sub" : "Start One-Click Miner når du logger på din computer",
        "closed_source" : "Brug closed-source minere",
        "closed_source_sub" : "Bedre hashrate, men uanmeldte minere der pådrager sig udvikler gebyr",
        "closed_source_warning" : "Du har valgt at benytte closed-source miner(e). Vertcoin støtter og supporterer IKKE disse minere.  De kan ikke undersøges for indhold og kunne derfor benytte sig af funktioner der kan være skadelige for din computer.",
        "enable_integrated" : "Brug indbygget grafik til at mine",
        "enable_integrated_sub" : "Indbygget grafik vil blive brugt af mineren (hvis det er muligt)",
        "testnet": "Testnet mode",
        "testnet_sub": "Aktiver testnet. Du vil ikke mine rigtige coins.",
        "skipverthashverify": "Stop med at verificere Verthash data fil under opstart",
        "skipverthashverify_sub": "Spring verifikationen af verthash data filen over (ikke anbefalet)",
        "save_n_restart" : "Gem & Genstart",
        "pool": "Mining pool"
    },
    "tabbar" : {
        "wallet" : "Wallet",
        "send_coins" : "Send coins",
        "settings" : "Indstillinger"
    },
    "tracking": { 
        "update_available" : "Opdatering tilgængelig",
        "tracking_enabled" : "Du deler brugsstatistikker anonymt",
        "disable_tracking" : "Slå deling af statistik fra",
        "tracking_disabled" : "Du deler ikke brugsstatistikker",
        "enable_tracking" : "Slå deling af statistik til for at hjælpe os med at forbedre din oplevelse",
        "report_issue" : "Anmeld fejl eller problemer"
    },
    "update" : {
        "new_version_available" : "Ny version er tilgængelig",
        "download" : "Download"
    }
}


================================================
FILE: frontend/src/i18n/de.json
================================================
{
    "generic" : {
        "retry" : "Wiederholen",
        "back_to_wallet" : "Zurück zur Wallet",
        "close" : "Schließen"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click-Miner wird bereits ausgeführt. Sie können ihn nicht mehr als einmal ausführen.",
        "click_button_to_start" : "Klicken Sie auf die Schaltfläche unten, um das Mining erneut zu starten.",
        "startmining" : "Mining starten!",
        "makeapassword" : "Erstellen Sie ein Passwort. Verlieren Sie es nicht!",
        "password" : "Passwort",
        "confirmpassword" : "Passwort bestätigen",
        "password_cannot_be_empty" : "Passwort darf nicht leer sein",
        "password_mismatch" : "Passwörter stimmen nicht überein",
        "error_initializing" : "Fehler beim Initialisieren der Wallet"
    },
    "checks" : {
        "prerequisite" : "Voraussetzungen werden installiert. Möglicherweise wird ein Fenster angezeigt, in dem Sie nach Berechtigungen gefragt werden (möglicherweise blinkt es in der Taskleiste)",
        "checks_failed" : "Überprüfung fehlgeschlagen",
        "checking_mining_software" : "Mining-Software wird überprüft...",
        "rapidfail" : "Auftreten von schnellen Ausfällen wird geprüft",
        "compatibility" : "GPU-Kompatibilität wird überprüft...",
        "installing_miners" : "Mining-Software wird installiert...",
        "verthash" : "Verthash Daten werden angelegt/verifiziert..."
    },
    "mining" : {
        "spendable_balance" : "Verfügbares Guthaben",
        "still_maturing" : "reift noch",
        "pending_pool_payout" : "ausstehende Pool-Auszahlung",
        "pending_payout_info_unavailable": "Ausstehende Pool-Auszahlung wird abgerufen",
        "waiting_for_miners" : "Warten auf Start des Miners",
        "expected_earnings_24h" : "Voraussichtliche Einnahmen (24h)",
        "estimating" : "am schätzen",
        "stop_mining" : "Mining stoppen",
        "active_pool" : "Aktiver Pool",
        "pool_fee" : "Pool-Gebühr",
        "copy_address" : "Wallet-Adresse kopieren",
        "payout_information" : "Auszahlungsinformationen ansehen"
    },
    "sending" : {
        "send_all_to" : "Senden Sie all Ihre Coins an",
        "youre_sending_x_to" : "Sie senden {receivedBalance} Coins an",
        "youre_sending_x_in_y_txs_to" : "Sie senden {receivedBalance} Coins in {receivedTxCount} Transaktionen an",
        "receiver_address" : "Empfängeradresse",
        "wallet_password" : "Wallet-Passwort",
        "send" : "Senden",
        "coins_sent" : "Ihre Coins wurden versendet!",
        "view_trans_plural" : "Transaktionen anzeigen",
        "view_trans_singular" : "Transaktion anzeigen",
        "failed_to_send" : "Fehler beim Senden Ihrer Coins",
        "password_required" : "Das Wallet-Passwort wird benötigt",
        "invalid_address" : "Ungültige Adresse",
        "script_failure" : "Skriptfehler",
        "could_not_calculate_fee" : "Gebührenkalkulation fehlgeschlagen",
        "insufficient_funds" : "unzureichende Mittel",
        "sign_failed" : "Transaktion kann nicht signiert werden. Überprüfen Sie Ihr Passwort",
        "send_failed" : "Transaktion fehlgeschlagen. Weitere Informationen finden Sie in debug.log"
    },
    "settings" : {
        "enable_debug" : "Debuggen aktivieren",
        "enable_debug_sub" : "Konsolenausgabe der Mining-Software in das Debugprotokoll mit aufnehmen. Kann die Größe Ihrer Protokolle erheblich erhöhen",
        "auto_start" : "Auto-Start",
        "auto_start_sub" : "One-Click-Miner bei der Anmeldung starten",
        "closed_source" : "Proprietäre Mining-Software nutzen",
        "closed_source_sub" : "Bessere Hash-Rate, aber ungeprüfte Miner mit Entwicklergebühr.",
        "closed_source_warning" : "Sie haben sich für die Verwendung proprietärer Mining-Software entschieden. Vertcoin bietet keine Unterstützung an. Die Miner können nicht überprüft werden und enthalten möglicherweise Funktionen, die Ihren Computer beeinträchtigen.",
        "enable_integrated" : "Auf integrierter Grafikkarte minen",
        "enable_integrated_sub" : "Miner wird die Onboard-Grafikkarte verwenden (wenn möglich)",
        "testnet" : "Testnet-Modus",
        "testnet_sub" : "Aktiviert Testnet-Modus. Sie werden keine echten Coins minen.",
        "skipverthashverify" : "Verthash-Überprüfung beim Start überspringen",
        "skipverthashverify_sub" : "Die Prüfung der Datenintegrität der Verthash-Daten beim Start wird übersprungen (nicht empfohlen)",
        "save_n_restart" : "Speichern & Neustarten",
        "pool" : "Mining-Pool"
    },
    "tabbar" : {
        "wallet" : "Wallet",
        "send_coins" : "Coins senden",
        "settings" : "Einstellungen"
    },
    "tracking": { 
        "update_available" : "Update verfügbar",
        "tracking_enabled" : "Nutzungsstatistiken werden anonym geteilt",
        "disable_tracking" : "Deaktivieren",
        "tracking_disabled" : "Sie teilen keine Nutzungsstatistiken",
        "enable_tracking" : "Aktivieren Sie diese Option, um uns bei der Verbesserung der Benutzerfreundlichkeit zu helfen",
        "report_issue" : "Ein Problem melden"
    },
    "update" : {
        "new_version_available" : "Neue Version verfügbar",
        "download" : "Herunterladen"
    }
}


================================================
FILE: frontend/src/i18n/en.json
================================================
{
    "generic" : {
        "retry" : "Retry",
        "back_to_wallet" : "Back to wallet",
        "close" : "Close"
    },
    "welcome" : {
        "alreadyrunning" : "The One-Click Miner is already running. You can't run it more than once.",
        "click_button_to_start" : "Click the button below to start mining again.",
        "startmining" : "Start Mining!",
        "makeapassword" : "Make an OCM Wallet password. Don't lose it.",
        "password" : "Password",
        "confirmpassword" : "Confirm Password",
        "password_cannot_be_empty" : "Password cannot be empty",
        "password_mismatch" : "Passwords do not match",
        "error_initializing" : "Something went wrong initializing the wallet"
    },
    "checks" : {
        "prerequisite" : "A prerequisite is being installed. You might see a popup asking for permissions (could just be blinking in the taskbar)",
        "checks_failed" : "Checks failed",
        "checking_mining_software" : "Checking mining software...",
        "rapidfail" : "Checking for rapid failure occurrences",
        "compatibility" : "Checking GPU compatibility...",
        "installing_miners" : "Installing mining software...",
        "verthash" : "Verifying / creating Verthash data file..."
    },
    "mining" : {
        "spendable_balance" : "Spendable Balance",
        "still_maturing" : "still maturing",
        "pending_pool_payout" : "pending pool payout",
        "pending_payout_info_unavailable" : "Please wait for pending payout information",
        "waiting_for_miners" : "Waiting for miners to start",
        "expected_earnings_24h" : "Expected Earnings (24h)",
        "estimating" : "estimating",
        "stop_mining" : "Stop Mining",
        "active_pool" : "Active pool",
        "pool_fee" : "fee",
        "copy_address" : "Copy your wallet address",
        "payout_information" : "View payout information"
    },
    "sending" : {
        "send_all_to" : "Send all your mined coins to",
        "youre_sending_x_to" : "You're sending {receivedBalance} to",
        "youre_sending_x_in_y_txs_to" : "You're sending {receivedBalance} in {receivedTxCount} transactions to",
        "receiver_address" : "Receiver Address",
        "wallet_password" : "OCM Wallet Password",
        "send" : "Send",
        "coins_sent" : "Your coins are sent!",
        "view_trans_plural" : "View transactions",
        "view_trans_singular" : "View transaction",
        "failed_to_send" : "Failed to send your coins",
        "password_required" : "Wallet password is required",
        "invalid_address" : "Invalid address",
        "script_failure" : "Script failure",
        "could_not_calculate_fee" : "Could not calculate fee",
        "insufficient_funds" : "Insufficient funds",
        "sign_failed" : "Unable to sign transaction. Check password.",
        "send_failed" : "Unable to send transaction. Check debug.log for more information"
    },
    "settings" : {
        "enable_debug" : "Enable debugging",
        "enable_debug_sub" : "Include the miner's console output in the debug log. Can grow your logs quite large",
        "auto_start" : "Auto start",
        "auto_start_sub" : "Start the One-Click Miner when you log in your computer",
        "closed_source" : "Use closed-source miners",
        "closed_source_sub" : "Better hashrate, but unaudited miners that incur a developer's fee",
        "closed_source_warning" : "You have selected to use closed source miner(s). Vertcoin does not endorse or support these miners. They cannot be audited on their contents and could contain functions that harm your computer.",
        "enable_integrated" : "Mine on integrated graphics",
        "enable_integrated_sub" : "The miner will use onboard graphics (if possible)",
        "testnet":"Testnet mode",
        "testnet_sub":"Enables testnet mode. You will not be mining real coins.",
        "skipverthashverify":"Don't verify Verthash on startup",
        "skipverthashverify_sub":"Will skip verifying the file integrity of Verthash data on startup (not recommended)",
        "save_n_restart" : "Save & Restart",
        "pool": "Mining pool"
    },
    "tabbar" : {
        "wallet" : "Wallet",
        "send_coins" : "Send coins",
        "settings" : "Settings"
    },
    "tracking": { 
        "update_available" : "Update available",
        "tracking_enabled" : "You are anonymously sharing usage statistics",
        "disable_tracking" : "Disable",
        "tracking_disabled" : "You are not sharing usage statistics",
        "enable_tracking" : "Enable these to help us improve your experience",
        "report_issue" : "Report an issue"
    },
    "update" : {
        "new_version_available" : "New version available",
        "download" : "Download"
    }
}


================================================
FILE: frontend/src/i18n/es.json
================================================
{
    "generic" : {
        "retry" : "Reintentar",
        "back_to_wallet" : "Volver a la billetera",
        "close" : "Cerrar"
    },
    "welcome" : {
        "alreadyrunning" : "El minero de un click ya se está ejecutando. Solo se permite una instancia del programa.",
        "click_button_to_start" : "Haz click en el botón para empezar a minar de nuevo.",
        "startmining" : "¡Empezar a minar!",
        "makeapassword" : "Crea una contraseña para la billetera del minero de un click. No la pierdas.",
        "password" : "Contraseña.",
        "confirmpassword" : "Confirmar contraseña.",
        "password_cannot_be_empty" : "La contraseña no puede estar vacía.",
        "password_mismatch" : "Las contraseñas no coinciden.",
        "error_initializing" : "Hubo un problema al iniciar la billetera."
    },
    "checks" : {
        "prerequisite" : "Un prerequisito está siendo instalado. Puede ser que veas una ventana emergente pidiendo permisos (podría estar parpadeando en la barra de tareas.)",
        "checks_failed" : "Chequeos fallados",
        "checking_mining_software" : "Chequeando el software de minería...",
        "rapidfail" : "Comprobación de fallos rápidos",
        "compatibility" : "Chequeando compatibilidad de la tarjeta gráfica...",
        "installing_miners" : "Instalando software de minería...",
        "verthash" : "Verificando / creando archivo de datos de Verthash."
    },
    "mining" : {
        "spendable_balance" : "Saldo disponible",
        "still_maturing" : "Todavía no puedes gastar tus monedas, se necesitan más confirmaciones de la red.",
        "pending_pool_payout" : "Pago de la pool pendiente.",
        "pending_payout_info_unavailable" : "Información de pago no disponible en este momento.",
        "waiting_for_miners" : "Esperando a que los mineros empiecen.",
        "expected_earnings_24h" : "Ganancias esperadas (24h).",
        "estimating" : "Estimando",
        "stop_mining" : "Dejar de minar.",
        "active_pool" : "Pool activa.",
        "pool_fee" : "Comisión.",
        "copy_address" : "Copia la dirección de tu billetera.",
        "payout_information" : "Mostrar la información del pago."
    },
    "sending" : {
        "send_all_to" : "Envia todas tus monedas minadas a",
        "youre_sending_x_to" : "Estás enviando {receivedBalance} a",
        "youre_sending_x_in_y_txs_to" : "Estás enviando {receivedBalance} en {receivedTxCount} transacciones a",
        "receiver_address" : "Dirección del receptor",
        "wallet_password" : "Contraseña de la billetera del minero de un click",
        "send" : "Enviar",
        "coins_sent" : "¡Tus monedas han sido enviadas!",
        "view_trans_plural" : "Mostrar transacciones",
        "view_trans_singular" : "Mostrar transacción",
        "failed_to_send" : "Hubo un fallo al enviar tus monedas",
        "password_required" : "La contraseña de la billetera es requerida",
        "invalid_address" : "Dirección inválida",
        "script_failure" : "Fallo de código",
        "could_not_calculate_fee" : "No se pudo calcular la comisión",
        "insufficient_funds" : "Fondos insuficientes",
        "sign_failed" : "No se pudo firmar la transacción. Chequea la contraseña",
        "send_failed" : "No se pudo enviar la transacción. Mira debug.log para más información"
    },
    "settings" : {
        "enable_debug" : "Activar información de depuración",
        "enable_debug_sub" : "Incluye las salidas del minero en la consola en el registro de depuración. Puede hacer que tus registros sean bastante grandes",
        "auto_start" : "Empezar automáticamente",
        "auto_start_sub" : "Empezar el minero de un click cuando inicias sesión en tu ordenador",
        "closed_source" : "Usa mineros de código cerrado",
        "closed_source_sub" : "Mejor rendimiento, pero mineros que no pueden ser inspeccionados y que sufren de una comisión de desarollo",
        "closed_source_warning" : "Has seleccionado usar minero(s) de código cerrado. Vertcoin no respalda ni ayuda a estos mineros. Sus contenidos no pueden ser inspeccionados y podrían contener funciones que podrían dañar tu ordenador.",
        "enable_integrated" : "Minar en gráficos integrados",
        "enable_integrated_sub" : "El minero utilizará gráficos integrados (si es posible)",
        "testnet":"Modo Testnet",
        "testnet_sub":"Activa el modo Tesnet. No estarás minando monedas reales.",
        "skipverthashverify":"No verificar Verthash al encender",
        "skipverthashverify_sub":"Se saltará la verificación de la integridad de la información de Verthash al encender (no recomendado)",
        "save_n_restart" : "Guardar y reiniciar",
        "pool": "Pool de minería"
    },
    "tabbar" : {
        "wallet" : "billetera",
        "send_coins" : "Enviar monedas",
        "settings" : "Opciones"
    },
    "tracking": { 
        "update_available" : "Actualización disponible",
        "tracking_enabled" : "Estás compartiendo datos de uso anónimamente",
        "disable_tracking" : "Desactivar",
        "tracking_disabled" : "No estás compartiendo datos de uso",
        "enable_tracking" : "Activar el uso de datos compartidos para ayudarnos a mejorar tu experiencia",
        "report_issue" : "Reportar un problema"
    },
    "update" : {
        "new_version_available" : "Nueva versión disponible",
        "download" : "Descargar"
    }
}


================================================
FILE: frontend/src/i18n/fr.json
================================================
{
    "generic" : {
        "retry" : "Réessayer",
        "back_to_wallet" : "Revenir au portefeuille",
        "close" : "Fermer"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner est déjà en cours d'exécution. Vous ne pouvez pas l'exécuter plus d'une fois.",
        "click_button_to_start" : "Cliquer sur le bouton ci-dessous pour redémarrer le minage.",
        "startmining" : "Démarrer le minage !",
        "makeapassword" : "Créer un mot de passe. Ne pas le perdre !",
        "password" : "Mot de passe",
        "confirmpassword" : "Confirmer le mot de passe",
        "password_cannot_be_empty" : "Le mot de passe ne peut être vide",
        "password_mismatch" : "Le mot de passe ne correspond pas",
        "error_initializing" : "Erreur pendant l'initialisation du portefeuille"
    },
    "checks" : {
        "prerequisite" : "Un prérequis est en cours d'installation. Vous pourriez voir une fenêtre demandant des autorisations (elle pourrait simplement clignoter dans la barre des tâches)",
        "checks_failed" : "Les vérifications ont echoué",
        "checking_mining_software" : "Vérification du logiciel de minage...",
        "rapidfail" : "Vérification des occurrences d'échec rapide",
        "compatibility" : "Vérification de la compatibilité GPU...",
        "installing_miners" : "Installation du logiciel de minage..."
    },
    "mining" : {
        "spendable_balance" : "Solde disponible",
        "still_maturing" : "En cours de consolidation",
        "pending_pool_payout" : "Paiement de la pool en attente",
        "waiting_for_miners" : "En attente de mineurs pour démarrer",
        "expected_earnings_24h" : "Bénéfices attendus (24h)",
        "estimating" : "Estimation",
        "stop_mining" : "Arrêt du minage"
    },
    "sending" : {
        "send_all_to" : "Envoyer toute votre cryptomonnaie minée à",
        "youre_sending_x_to" : "Vous envoyez {receivedBalance} à",
        "youre_sending_x_in_y_txs_to" : "Vous envoyez {receivedBalance} en {receivedTxCount} transactions à",
        "receiver_address" : "Adresse du destinataire",
        "wallet_password" : "Mot de passe du portefeuille",
        "send" : "Envoyer",
        "coins_sent" : "Votre cryptomonnaie a été envoyée !",
        "view_trans_plural" : "Voir les transactions",
        "view_trans_singular" : "Voir la transaction",
        "failed_to_send" : "Echec lors de l'envoi de votre cryptomonnaie",
        "password_required" : "Le mot de passe du portefeuille est requis",
        "invalid_address" : "Adresse invalide",
        "script_failure" : "Script défectueux",
        "could_not_calculate_fee" : "Calcul des frais impossible",
        "insufficient_funds" : "Fonds insuffisants",
        "sign_failed" : "Impossible de signer la transaction. Vérifiez votre mot de passe",
        "send_failed" : "Transaction impossible. Vérifier debug.log pour plus d'informations"
    },
    "settings" : {
        "enable_debug" : "Activer le débogage",
        "enable_debug_sub" : "Inclure la sortie console du logiciel de minage dans le log de débogage. Peut augmenter considérablement la taille de vos logs",
        "auto_start" : "Démarrage auto",
        "auto_start_sub" : "Démarrer One-Click Miner quand vous vous connectez à votre ordinateur",
        "closed_source" : "Utiliser des logiciels de minage propriétaires",
        "closed_source_sub" : "Meilleur taux de hachage, mais logiciel de minage ne rétribuant pas les développeurs",
        "closed_source_warning" : "Vous avez choisi d'utiliser des logiciels de minage propriétaires. Vertcoin n'en assure pas le support. Leur contenu ne peut pas être audité et pourrait comporter des fonctions qui endommagent votre ordinateur.",
        "save_n_restart" : "Enregistrer & Redémarrer"
    },
    "tabbar" : {
        "wallet" : "Portefeuille",
        "send_coins" : "Envoyer de la cryptomonnaie",
        "settings" : "Paramètres"
    },
    "tracking": { 
        "update_available" : "Mise à jour disponible",
        "tracking_enabled" : "Vous partagez anonymement vos statistiques d'utilisation",
        "disable_tracking" : "Désactiver",
        "tracking_disabled" : "Vous ne partagez pas vos statistiques d'utilisation",
        "enable_tracking" : "Activer cette option pour nous permettre d'améliorer votre expérience utilisateur",
        "report_issue" : "Signaler un problème"
    },
    "update" : {
        "new_version_available" : "Nouvelle version disponible",
        "download" : "Télécharger"
    }
}


================================================
FILE: frontend/src/i18n/hi.json
================================================
{
    "generic" : {
        "retry" : "पुन: प्रयास",
        "back_to_wallet" : "वापस वॉलेट में",
        "close" : "बंद करे"
    },
    "welcome" : {
        "alreadyrunning" : "वन-क्लिक माइनर पहले से ही चल रहा है। आप इसे एक से अधिक बार नहीं चला सकते।",
        "click_button_to_start" : "फिर से खनन शुरू करने के लिए नीचे दिए गए बटन पर क्लिक करें।",
        "startmining" : "खनन शुरू करो!",
        "makeapassword" : "एक पासवर्ड बनाएं। इसे खोना नहीं है।",
        "password" : "पारण शब्द",
        "confirmpassword" : "पासवर्ड की पुष्टि कीजिये",
        "password_cannot_be_empty" : "पासवर्ड खाली नहीं हो सकता",
        "password_mismatch" : "पासवर्ड मेल नहीं खाते",
        "error_initializing" : "वॉलेट को शुरू करने में कुछ गलत हुआ"
    },
    "checks" : {
        "prerequisite" : "एक शर्त लगाई जा रही है। आप एक पॉपअप अनुमति के लिए पूछ सकते हैं (बस टास्कबार में निमिष हो सकता है)",
        "checks_failed" : "जाँच विफल",
        "checking_mining_software" : "खनन सॉफ्टवेयर की जाँच करना...",
        "rapidfail" : "तेजी से विफलता की घटनाओं के लिए जाँच",
        "compatibility" : "ग्राफिक्स प्रोसेसिंग यूनिट संगतता की जाँच करना...",
        "installing_miners" : "खनन सॉफ्टवेयर स्थापित करना..."
    },
    "mining" : {
        "spendable_balance" : "व्यय करने योग्य शेष",
        "still_maturing" : "अभी भी परिपक्व हो रहा है",
        "pending_pool_payout" : "लंबित पूल भुगतान",
        "waiting_for_miners" : "खनिकों के शुरू होने का इंतजार",
        "expected_earnings_24h" : "अपेक्षित कमाई (चौबीस घंटे)",
        "estimating" : "का आकलन",
        "stop_mining" : "खनन बंद करो"
    },
    "sending" : {
        "send_all_to" : "करने के लिए अपने सभी खनन सिक्के भेजें",
        "youre_sending_x_to" : "आप भेज रहे हैं {receivedBalance} सेवा मेरे",
        "youre_sending_x_in_y_txs_to" : "आप भेज रहे हैं {receivedBalance} में {receivedTxCount} लेन-देन",
        "receiver_address" : "रिसीवर का पता",
        "wallet_password" : "वॉलेट पासवर्ड",
        "send" : "भेजना",
        "coins_sent" : "आपके सिक्के भेजे हैं",
        "view_trans_plural" : "लेन-देन देखें",
        "view_trans_singular" : "लेन-देन देखें",
        "failed_to_send" : "अपने सिक्के भेजने में विफल",
        "password_required" : "वॉलेट पासवर्ड की आवश्यकता है",
        "invalid_address" : "गलत पता",
        "script_failure" : "स्क्रिप्ट की विफलता",
        "could_not_calculate_fee" : "शुल्क की गणना नहीं कर सका",
        "insufficient_funds" : "अपर्याप्त कोष",
        "sign_failed" : "लेन-देन पर हस्ताक्षर करने में असमर्थ। अपना पासवर्ड जांचें",
        "send_failed" : "लेनदेन भेजने में असमर्थ। अधिक जानकारी के लिए debug.log की जाँच करें"
    },
    "settings" : {
        "enable_debug" : "डिबगिंग सक्षम करें",
        "enable_debug_sub" : "डिबग लॉग में माइनर के कंसोल आउटपुट को शामिल करें। अपने लॉग को काफी बड़ा कर सकते हैं",
        "auto_start" : "ऑटो स्टार्ट",
        "auto_start_sub" : "जब आप अपने कंप्यूटर में लॉग इन करते हैं तो वन-क्लिक माइनर शुरू करें",
        "closed_source" : "बंद-स्रोत खनिक का उपयोग करें",
        "closed_source_sub" : "बेहतर हैशेट, लेकिन अघोषित खनिक जो एक डेवलपर के शुल्क को बढ़ाते हैं",
        "closed_source_warning" : "आपने बंद स्रोत खननकर्ता का उपयोग करने के लिए चुना है। Vertcoin इन खनिकों का समर्थन या समर्थन नहीं करता है। उनकी सामग्री पर उनका ऑडिट नहीं किया जा सकता है और इसमें आपके कंप्यूटर को नुकसान पहुंचाने वाले कार्य हो सकते हैं।",
        "save_n_restart" : "सहेजें और पुनरारंभ करें"
    },
    "tabbar" : {
        "wallet" : "बटुआ",
        "send_coins" : "सिक्के भेजें",
        "settings" : "सेटिंग्स"
    },
    "tracking": { 
        "update_available" : "अपडेट उपलब्ध",
        "tracking_enabled" : "आप गुमनाम रूप से उपयोग के आंकड़े साझा कर रहे हैं",
        "disable_tracking" : "अक्षम",
        "tracking_disabled" : "आप उपयोग के आंकड़े साझा नहीं कर रहे हैं",
        "enable_tracking" : "अपने अनुभव को बेहतर बनाने में हमारी सहायता करने के लिए इन्हें सक्षम करें",
        "report_issue" : "मामले की रिपोर्ट करें"
    },
    "update" : {
        "new_version_available" : "नया संस्करण उपलब्ध है",
        "download" : "डाउनलोड"
    }
}


================================================
FILE: frontend/src/i18n/hr.json
================================================
{
    "generic" : {
        "retry" : "Pokušajte ponovno",
        "back_to_wallet" : "Natrag na novčanik",
        "close" : "Zatvoriti"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner već radi. Ne možete ga pokrenuti više od jednom.",
        "click_button_to_start" : "Pritisnite dugme ispod da ponovno započnete sa rudarenjem.",
        "startmining" : "Započnite sa rudarenjem!",
        "makeapassword" : "Kreirajte lozinku. Nemojte ju izgubiti.",
        "password" : "Lozinka",
        "confirmpassword" : "Potvrdite lozinku",
        "password_cannot_be_empty" : "Polje za lozinku ne može biti prazno",
        "password_mismatch" : "Lozinke se ne podudaraju",
        "error_initializing" : "Pogreška kod učitavanja novčanika"
    },
    "checks" : {
        "prerequisite" : "Skidanje preduvjetnih datoteka. Mogućnost iskakanja skočnog prozora za dopuštenja (može treperiti u alatnoj traci)",
        "checks_failed" : "Provjera neuspješna",
        "checking_mining_software" : "Provjera softvera za rudarenje...",
        "rapidfail" : "Provjera učestalosti neuspješnih radnji",
        "compatibility" : "Provjera kompatibilnosti grafičke kartice...",
        "installing_miners" : "Instalacija softvera za rudarenje..."
    },
    "mining" : {
        "spendable_balance" : "Dostupan iznos",
        "still_maturing" : "nedozrelo",
        "pending_pool_payout" : "očekivana pool isplata",
        "waiting_for_miners" : "Čekanje da softver za rudarenje započne sa radom",
        "expected_earnings_24h" : "Očekivana zarada(24h)",
        "estimating" : "Vršim procjenu",
        "stop_mining" : "Zaustavi rudarenje"
    },
    "sending" : {
        "send_all_to" : "Pošalji sve izrudarene novčiće na",
        "youre_sending_x_to" : "Šaljete {receivedBalance} na",
        "youre_sending_x_in_y_txs_to" : "Šaljete {receivedBalance} u {receivedTxCount} transakcija na",
        "receiver_address" : "Adresa primatelja",
        "wallet_password" : "Lozinka novčanika",
        "send" : "Pošalji",
        "coins_sent" : "Vaši novčići su poslani!",
        "view_trans_plural" : "Vidi transakciju",
        "view_trans_singular" : "Vidi transakcije",
        "failed_to_send" : "Neuspješno slanje vaših novčića",
        "password_required" : "Potrebna je lozinka novčanika",
        "invalid_address" : "Nepostojeća adresa",
        "script_failure" : "Greška skripte",
        "could_not_calculate_fee" : "Nije moguće izračunati naknadu",
        "insufficient_funds" : "Nedostatna sredstva",
        "sign_failed" : "Nije moguće potpisati transakciju. Provjerite zaporku",
        "send_failed" : "Nije moguće poslati transakciju. Provjerite debug.log za više informacija"
    },
    "settings" : {
        "enable_debug" : "Omogući otklanjanje bugova",
        "enable_debug_sub" : "Omogući izvoz logova konzole softvera za rudarenje u log za otklanjanje bugova. Veličina loga može se znatno povećati",
        "auto_start" : "Automatski početak",
        "auto_start_sub" : "Pokreni One-Click Miner kada se logiraš na računalo",
        "closed_source" : "Koristi softver za rudarenje zatvorenog koda",
        "closed_source_sub" : "Bolji hashrate, ali neocijenjeni softver za rudarenje može uključivati naknadu za razvojne inženjere",
        "closed_source_warning" : "Odlučili ste koristiti softver(e) za rudarenje zatvorenog koda. Vertcoin ne odobrava i ne podržava njihovu upotrebu. Ne može se provjeriti njihov sadržaj i potencijalno mogu sadržavati funkcije koje mogu oštetiti vaše računalo.",
        "save_n_restart" : "Spremi i ponovno pokreni"
    },
    "tabbar" : {
        "wallet" : "Novčanik",
        "send_coins" : "Pošalji novčiće",
        "settings" : "Postavke"
    },
    "tracking": { 
        "update_available" : "Nova inačica je dostupna",
        "tracking_enabled" : "Anonimno dijelite vašu statistiku o korištenju",
        "disable_tracking" : "Onemogući",
        "tracking_disabled" : "Ne dijelite statistiku o korištenju",
        "enable_tracking" : "Omogućite i pomognite nam da unaprijedimo korisničko iskustvo",
        "report_issue" : "Prijavite problem"
    },
    "update" : {
        "new_version_available" : "Nova verzija je dostupna",
        "download" : "Skidanje"
    }
}


================================================
FILE: frontend/src/i18n/it.json
================================================
{
    "generic" : {
        "retry" : "Riprova",
        "back_to_wallet" : "Torna al portafoglio",
        "close" : "Chiudi"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner è già in esecuzione. Non puoi eseguirlo più di una volta.",
        "click_button_to_start" : "Fai clic sul pulsante sottostante per ricominciare a minare.",
        "startmining" : "Inizia a Minare!",
        "makeapassword" : "Crea una password per il portafoglio OCM. Non perderla.",
        "password" : "Password",
        "confirmpassword" : "Conferma Password",
        "password_cannot_be_empty" : "La password non può essere vuota",
        "password_mismatch" : "Le password non corrispondono",
        "error_initializing" : "Qualcosa è andato storto nell'inizializzazione del portafoglio"
    },
    "checks" : {
        "prerequisite" : "Un prerequisito sta venendo installato. Potresti vedere un popup che richiede dei permessi (potrebbe anche solo lampeggiare nella barra delle applicazioni)",
        "checks_failed" : "Controlli falliti",
        "checking_mining_software" : "Controllo del software di mining...",
        "rapidfail" : "Controllo di occorrenze di fallimento rapido",
        "compatibility" : "Controllo di compatibilità della GPU...",
        "installing_miners" : "Installazione del software di mining...",
        "verthash" : "Verifica / creazione del file di dati Verthash..."
    },
    "mining" : {
        "spendable_balance" : "Saldo Disponibile",
        "still_maturing" : "non ancora maturato",
        "pending_pool_payout" : "pagamento del pool in sospeso",
        "pending_payout_info_unavailable" : "Perfavore attendi le informazioni sul pagamento in sospeso",
        "waiting_for_miners" : "In attesa che i miner si avviino",
        "expected_earnings_24h" : "Guadagno Previsto (24h)",
        "estimating" : "calcolo in corso",
        "stop_mining" : "Smetti di Minare",
        "active_pool" : "Pool attiva",
        "pool_fee" : "tassa",
        "copy_address" : "Copia l'indirizzo del tuo portafoglio",
        "payout_information" : "Visualizza le informazioni di pagamento"
    },
    "sending" : {
        "send_all_to" : "Invia tutte le tue monete minate a",
        "youre_sending_x_to" : "Stai inviando {receivedBalance} a",
        "youre_sending_x_in_y_txs_to" : "Stai inviando {receivedBalance} in {receivedTxCount} transazioni a",
        "receiver_address" : "Indirizzo del Destinatario",
        "wallet_password" : "Password del Portafoglio OCM",
        "send" : "Invia",
        "coins_sent" : "Le tue monete sono state inviate!",
        "view_trans_plural" : "Visualizza le transazioni",
        "view_trans_singular" : "Visualizza la transazione",
        "failed_to_send" : "Fallito l'invio delle tue monete",
        "password_required" : "La password del portafoglio è obbligatoria",
        "invalid_address" : "Indirizzo non valido",
        "script_failure" : "Fallimento nello script",
        "could_not_calculate_fee" : "Impossibile calcolare la tassa",
        "insufficient_funds" : "Fondi insufficienti",
        "sign_failed" : "Non è stato possibile firmare la transazione. Controlla la password",
        "send_failed" : "Non è stato possibile inviare la transazione. Controlla debug.log per ulteriori informazioni"
    },
    "settings" : {
        "enable_debug" : "Abilita il debug",
        "enable_debug_sub" : "Includi l'output della console del miner nel log di debug. Può far aumentare di molto la dimensione dei tuoi log",
        "auto_start" : "Avvio automatico",
        "auto_start_sub" : "Avvia One-Click Miner quando esegui l'accesso al tuo computer",
        "closed_source" : "Usa miner closed-source",
        "closed_source_sub" : "Miglior hashrate, ma miner non certificati che incorrono in una tassa per gli sviluppatori",
        "closed_source_warning" : "Hai scelto di usare uno o più miner closed-source. Vertcoin non approva né supporta questi miner. Non possono essere controllati sui loro contenuti e potrebbero contenere funzioni dannose per il tuo computer.",
        "enable_integrated" : "Mina con la grafica integrata",
        "enable_integrated_sub" : "Il miner userà la grafica a bordo (se possibile)",
        "testnet" : "Modalità testnet",
        "testnet_sub" : "Abilita la modalità testnet. Non minerai monete reali.",
        "skipverthashverify" : "Non verificare Verthash all'avvio",
        "skipverthashverify_sub" : "Salta la verifica di integrità del file dei dati di Verthash all'avvio (non raccomandato)",
        "save_n_restart" : "Salva e Riavvia",
        "pool" : "Pool di mining"
    },
    "tabbar" : {
        "wallet" : "Portafoglio",
        "send_coins" : "Invia monete",
        "settings" : "Impostazioni"
    },
    "tracking": { 
        "update_available" : "Aggiornamento disponibile",
        "tracking_enabled" : "Stai condividendo in modo anonimo le statistiche sull'utilizzo",
        "disable_tracking" : "Disabilita",
        "tracking_disabled" : "Non stai condividendo le statistiche sull'utilizzo",
        "enable_tracking" : "Abilitane la condivisione per aiutarci a migliorare la tua esperienza",
        "report_issue" : "Segnala un problema"
    },
    "update" : {
        "new_version_available" : "Nuova versione disponibile",
        "download" : "Scarica"
    }
}


================================================
FILE: frontend/src/i18n/ja.json
================================================
{
    "generic" : {
        "retry" : "再試行をする",
        "back_to_wallet" : "ウォレットに戻る",
        "close" : "閉じる"
    },
    "welcome" : {
        "alreadyrunning" : "ワンクリックマイナーはすでに実行中です。複数回実行することはできません。",
        "click_button_to_start" : "下のボタンをクリックして、マイニングを再開してください。",
        "startmining" : "マイニングを始める!",
        "makeapassword" : "入力するパスワードを無くさないでください。",
        "password" : "パスワード",
        "confirmpassword" : "パスワード(確認用)",
        "password_cannot_be_empty" : "パスワードは空にできません",
        "password_mismatch" : "新パスワードと再入力パスワードが一致しません",
        "error_initializing" : "ウォレットの初期化中に問題が発生しました"
    },
    "checks" : {
        "prerequisite" : "前提条件がインストールされています。許可を求めてポップアップが表示されるかもしれません (またはタスクバーで点滅している可能性があります)",
        "checks_failed" : "チェック失敗",
        "checking_mining_software" : "マイニングソフトウェアの確認中...",
        "rapidfail" : "迅速な障害発生の確認中",
        "compatibility" : "GPUの互換性を確認中...",
        "installing_miners" : "マイニングソフトウェアのインストール中..."
    },
    "mining" : {
        "spendable_balance" : "消費可能残高",
        "still_maturing" : "まだ成熟している",
        "pending_pool_payout" : "保留中のプールの支払い",
        "waiting_for_miners" : "マイナーが始まるのを待っている",
        "expected_earnings_24h" : "予想収益 (24時間)",
        "estimating" : "見積もり",
        "stop_mining" : "マイニングをやめる"
    },
    "sending" : {
        "send_all_to" : "にあなたの採掘したコインをすべて送る",
        "youre_sending_x_to" : "に{receivedBalance}を送っています",
        "youre_sending_x_in_y_txs_to" : "{receivedTxCount}トランザクションで{receivedBalance}をに送信しています",
        "receiver_address" : "受信者アドレス",
        "wallet_password" : "ウォレットパスワード",
        "send" : "送る",
        "coins_sent" : "あなたのコインが送られました!",
        "view_trans_plural" : "取引を見る",
        "view_trans_singular" : "取引を見る",
        "failed_to_send" : "コインを送信できませんでした",
        "password_required" : "ウォレットパスワードが必要です",
        "invalid_address" : "無効なアドレス",
        "script_failure" : "スクリプトの失敗",
        "could_not_calculate_fee" : "料金を計算できませんでした",
        "insufficient_funds" : "残高不足",
        "sign_failed" : "トランザクションに署名できません。 パスワードを確認してください",
        "send_failed" : "取引を送信できません。 詳細についてはdebug.logを確認してください"
    },
    "settings" : {
        "enable_debug" : "デバッグを有効にする",
        "enable_debug_sub" : "マイナーのコンソール出力をデバッグログに含めます。ログをかなり大きくすることができます",
        "auto_start" : "自動スタート",
        "auto_start_sub" : "コンピュータにログインしたらワンクリックマイナーを起動する",
        "closed_source" : "クローズドソースマイナーを使用する",
        "closed_source_sub" : "ハッシュレートは向上していますが、開発者の費用がかかる未監査のマイナー",
        "closed_source_warning" : "クローズドソースマイナーを使用することを選択しました。ヴァートコインはこれらのマイナーを支持しません。内容を監査することはできず、コンピュータに害を及ぼす機能が含まれている可能性があります。",
        "save_n_restart" : "保存して再起動"
    },
    "tabbar" : {
        "wallet" : "ウォレット",
        "send_coins" : "コインを送る",
        "settings" : "設定"
    },
    "tracking": { 
        "update_available" : "アップデート利用可能",
        "tracking_enabled" : "利用統計を匿名で共有しています",
        "disable_tracking" : "無効にする",
        "tracking_disabled" : "利用統計を共有していません",
        "enable_tracking" : "これらを有効にして利用体験の改善を行いさせるのを助けてください",
        "report_issue" : "問題を報告する"
    },
    "update" : {
        "new_version_available" : "新バージョン利用可能",
        "download" : "ダウンロード"
    }
}


================================================
FILE: frontend/src/i18n/lt.json
================================================
{
    "generic" : {
        "retry" : "Bandyti iš naujo",
        "back_to_wallet" : "Grįžti į piniginę",
        "close" : "Uždaryti"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner jau yra paleistas. Jūs negalite jo paleisti daugiau nei vieną kartą.",
        "click_button_to_start" : "Spauskite žemiau esantį mygtuką norint ir vėl pradėti kasimą.",
        "startmining" : "Pradėti kasimą!",
        "makeapassword" : "Sugalvokite OCM piniginės slaptažodį. Nepamirškite jo.",
        "password" : "Slaptažodis",
        "confirmpassword" : "Patvirtinti slaptažodį",
        "password_cannot_be_empty" : "Slaptažodžio laukelis negali būti tuščias",
        "password_mismatch" : "Slaptažodžiai nesutampa",
        "error_initializing" : "Įvyko klaida inicijuojant piniginę"
    },
    "checks" : {
        "prerequisite" : "Diegiami būtiniausi leidimai. Galite išvysti iššokantį langą prašantį leidimo (gali mirgsėti užduočių juostoje)",
        "checks_failed" : "Patikros nepavyko",
        "checking_mining_software" : "Tikrinama kasimui skirta programinė įranga...",
        "rapidfail" : "Tikrinama ar nėra gedimų",
        "compatibility" : "Tikrinamas vaizdo plokštės suderinamumas...",
        "installing_miners" : "Įdiegiama kasimui skirta programinė įranga...",
        "verthash" : "Tikrinamas / kuriamas Verthash duomenų failas..."
    },
    "mining" : {
        "spendable_balance" : "Išleidžiamas balansas",
        "still_maturing" : "vis dar bręsta",
        "pending_pool_payout" : "laukiamas pool išmokėjimas",
        "pending_payout_info_unavailable" : "Prašome palaukti laukiamo pool išmokėjimo informacijos",
        "waiting_for_miners" : "Waiting for miners to start",
        "expected_earnings_24h" : "Numatomas uždarbis (24h)",
        "estimating" : "vertinama",
        "stop_mining" : "Stabdyti kasimą",
        "active_pool" : "Aktyvus pool",
        "pool_fee" : "mokestis",
        "copy_address" : "Kopijuoti jūsų piniginės adresą",
        "payout_information" : "Peržiūrėti išmokėjimo informaciją"
    },
    "sending" : {
        "send_all_to" : "Siųsti visas jūsų iškastas monetas į",
        "youre_sending_x_to" : "Jūs siunčiate {receivedBalance} į",
        "youre_sending_x_in_y_txs_to" : "Jūs siunčiate {receivedBalance} per {receivedTxCount} pervedimus į",
        "receiver_address" : "Gavėjo adresas",
        "wallet_password" : "OCM piniginės slaptažodis",
        "send" : "Siųsti",
        "coins_sent" : "Jūsų monetos išsiųstos!",
        "view_trans_plural" : "Peržiūrėti pavedimus",
        "view_trans_singular" : "Peržiūrėti pavedimą",
        "failed_to_send" : "Monetų išsiuntimas nesėkmingas",
        "password_required" : "Būtina nurodyti piniginės slaptažodį",
        "invalid_address" : "Neteisingas adresas",
        "script_failure" : "Script gedimas",
        "could_not_calculate_fee" : "Negalime apskaičiuoti mokeščio",
        "insufficient_funds" : "Nepakanka lėšų",
        "sign_failed" : "Negalite patvirtinti pavedimo. Patikrinkite slaptažodį.",
        "send_failed" : "Negalite išsiųsti pavedimo. Patikrinkite debug.log norint sužinoti daugiau"
    },
    "settings" : {
        "enable_debug" : "Įgalinti derinimą",
        "enable_debug_sub" : "Įtraukti kasimo programinės įrangos konsolės išvestį į derinimo žurnalą. Žurnalas gali užaugti gana didelis",
        "auto_start" : "Automatinis paleidimas",
        "auto_start_sub" : "Paleisti One-Click Miner kai tik prisijungiate prie kompiuterio",
        "closed_source" : "Naudoti uždaro kodo programine įranga",
        "closed_source_sub" : "Greitesnis kasimas, bet galimi papildomi kasimo mokeščiai",
        "closed_source_warning" : "Jūs pasirinkote uždaro kodo programine įranga kasimui. Vertcoin neskatina ir nepalaiko tokios programinės įrangos. Ji negali būti patikrinta ir gali turėti kompiuteriui žalingų funkcijų.",
        "enable_integrated" : "Kasti su integruota vaizdo plokšte",
        "enable_integrated_sub" : "Kasimo programinė įranga naudos integruota vaizdo plokšte (jei įmanoma)",
        "testnet":"Testnet režimas",
        "testnet_sub":"Aktyvuoja testnet režimą, kuriame kasite netikras monetas.",
        "skipverthashverify":"Paleidžiant netikrinti Verthash",
        "skipverthashverify_sub":"Praleisite Verthash duomenų failo patikrinimą paleidžiant programą (nerekomenduojama)",
        "save_n_restart" : "Išsaugoti ir perkrauti",
        "pool": "Kasėjų pool"
    },
    "tabbar" : {
        "wallet" : "Piniginė",
        "send_coins" : "Siųsti monetas",
        "settings" : "Nustatymai"
    },
    "tracking": { 
        "update_available" : "Galimas atnaujinimas",
        "tracking_enabled" : "Jūs anonimiškai dalinaties naudojimosi statistika",
        "disable_tracking" : "Išjungti",
        "tracking_disabled" : "Jūs nesidalinate naudojimosi statistika",
        "enable_tracking" : "Aktyvuokite naudojimosi statistika ir padėkite mums pagerinti jūsų patirtį",
        "report_issue" : "Pranešti apie problemą"
    },
    "update" : {
        "new_version_available" : "Prieinama nauja versija",
        "download" : "Atsiųsti"
    }
}


================================================
FILE: frontend/src/i18n/nl.json
================================================
{
    "generic" : {
        "retry" : "Opnieuw proberen",
        "back_to_wallet" : "Terug naar portemonnee",
        "close" : "Sluiten"
    },
    "welcome" : {
        "alreadyrunning" : "De One-Click Miner is al actief. Je kunt 'm niet meer dan een keer draaien.",
        "click_button_to_start" : "Klik op de knop om te beginnen met minen.",
        "startmining" : "Begin met minen!",
        "makeapassword" : "Kies een wachtwoord. Raak het niet kwijt.",
        "password" : "Wachtwoord",
        "confirmpassword" : "Bevestig Wachtwoord",
        "password_cannot_be_empty" : "Wachtwoord mag niet leeg zijn",
        "password_mismatch" : "Wachtwoorden komen niet overeen",
        "error_initializing" : "Er ging iets mis met het initialiseren van de portemonnee"
    },
    "checks" : {
        "prerequisite" : "Er wordt software geinstalleerd die nodig is voor de OCM. Je zou een pop-up kunnen krijgen die om toestemming vraagt (zou slechts in de taakbalk kunnen knipperen)",
        "checks_failed" : "Controles mislukt",
        "checking_mining_software" : "Miner software controleren...",
        "rapidfail" : "Controleren op het voorkomen van herhaaldelijke fouten",
        "compatibility" : "Compatibiliteit van grafische kaart controleren...",
        "installing_miners" : "Miner software installeren...",
        "verthash" : "Verifieren / creëren Verthash data file..."
    },
    "mining" : {
        "spendable_balance" : "Besteedbaar saldo",
        "still_maturing" : "In ontwikkeling",
        "pending_pool_payout" : "saldo in afwachting bij mining-pool",
        "waiting_for_miners" : "Wacht tot de miner software opstart",
        "expected_earnings_24h" : "Verwachte inkomsten (24u)",
        "estimating" : "berekenen",
        "stop_mining" : "Stop minen",
        "active_pool" : "Actieve pool",
        "pool_fee" : "Vergoeding",
        "copy_address" : "Kopieer je portemonnee adres",
        "payout_information" : "Bekijk uitbetaling informatie"
    },
    "sending" : {
        "send_all_to" : "Verstuur al je coins naar",
        "youre_sending_x_to" : "Je gaat {receivedBalance} versturen naar",
        "youre_sending_x_in_y_txs_to" : "Je gaat in {receivedTxCount} transacties {receivedBalance} versturen naar",
        "receiver_address" : "Adres van ontvanger",
        "wallet_password" : "Wachtwoord van je OCM portomonnee",
        "send" : "Versturen",
        "coins_sent" : "Je coins zijn verstuurd!",
        "view_trans_plural" : "Bekijk transacties",
        "view_trans_singular" : "Bekijk transactie",
        "failed_to_send" : "Je coins versturen is mislukt",
        "password_required" : "Wachtwoord van je portomonnee is verplicht",
        "invalid_address" : "Ongeldig adres",
        "script_failure" : "Scriptfout",
        "could_not_calculate_fee" : "Kon transactiekosten niet berekenen",
        "insufficient_funds" : "Onvoldoende saldo",
        "sign_failed" : "Kon de transactie niet ondertekenen. Controleer het wachtwoord.",
        "send_failed" : "Kon de transactie niet versturen. Controleer debug.log voor meer informatie"
    },
    "settings" : {
        "enable_debug" : "Schakel foutopsporing in",
        "enable_debug_sub" : "Hiermee wordt de uitvoer van de miner software in de debug.log opgenomen. Kan de log bestanden groot maken!",
        "auto_start" : "Automatisch starten",
        "auto_start_sub" : "Start de One-Click Miner als je inlogt op je computer",
        "closed_source" : "Gebruik miners zonder open broncode",
        "closed_source_sub" : "Betere prestaties, maar de software is niet gecontroleerd en je betaalt een percentage aan de ontwikkelaars",
        "closed_source_warning" : "Je hebt ervoor gekozen om miners zonder open broncode te gebruiken. Vertcoin ondersteund deze miners niet en raad ze niet aan. De software kan niet op inhoud gecontroleerd worden en kan functies bevatten die je computer beschadigen.",
        "enable_integrated" : "Minen op geïntegreerde graphics",
        "enable_integrated_sub" : "De miner gebruikt de geïntegreerde graphics (indien mogelijk)",
        "testnet":"Testnet modus",
        "testnet_sub":"Schakelt testnet modus in. Je gaat geen echte coins minen.",
        "skipverthashverify":"Verifieer Verthash niet bij opstarten",
        "skipverthashverify_sub":"Zal het verifiëren van de bestandsintegriteit van Verthash-gegevens bij het opstarten overslaan (niet aanbevolen)",
        "save_n_restart" : "Opslaan & Herstarten",
        "pool": "Mining pool"
    },
    "tabbar" : {
        "wallet" : "Portemonnee",
        "send_coins" : "Verstuur coins",
        "settings" : "Instellingen"
    },
    "tracking": { 
        "update_available" : "Update beschikbaar",
        "tracking_enabled" : "Je deelt anonieme gebruiksstatistieken",
        "disable_tracking" : "Schakel uit",
        "tracking_disabled" : "Je deelt geen gebruiksstatistieken",
        "enable_tracking" : "Schakel in om ons te helpen je gebruikservaring te verbeteren",
        "report_issue" : "Meld een probleem"
    },
    "update" : {
        "new_version_available" : "Nieuwe versie beschikbaar",
        "download" : "Downloaden"
    }
}


================================================
FILE: frontend/src/i18n/no.json
================================================
{
  "generic": {
    "retry": "Prøv igjen",
    "back_to_wallet": "tilbake til lommebok",
    "close": "Lukk"
  },
  "welcome": {
    "alreadyrunning": "One-Click Miner kjører allerede. Du kan ikke starte et nytt program mens det er et annet i gang.",
    "click_button_to_start": "Klikk på knappen under for å gjenoppta utvinning.",
    "startmining": "Start å utvinne!",
    "makeapassword": "Lag et passord. Ikke mist det.",
    "password": "Passord",
    "confirmpassword": "Bekreft passord",
    "password_cannot_be_empty": "Passord kan ikke stå tomt",
    "password_mismatch": "Passordene er ikke identiske",
    "error_initializing": "Noe feilet under initialiseringen av lommeboka"
  },
  "checks": {
    "prerequisite": "Et nødvendig komponent installeres. Underveis kan du se et popup-vindu som spør om tillatelse (Det kan også bare blinke på oppgavelinjen)",
    "checks_failed": "Kontrolleringen feilet",
    "checking_mining_software": "Kontrollerer utvinnings-programmet...",
    "rapidfail": "Sjekker for hyppige feil",
    "compatibility": "Sjekker CPU kompatibilitet...",
    "installing_miners": "Installerer utvinnings-programvare..."
  },
  "mining": {
    "spendable_balance": "Tilgjengelig saldo",
    "still_maturing": "Under modning",
    "pending_pool_payout": "Avventende pool-utbetaling",
    "waiting_for_miners": "Venter på at utvinnere starter",
    "expected_earnings_24h": "Forventet gevinst (24t)",
    "estimating": "Estimerer",
    "stop_mining": "Stopp utvinning"
  },
  "sending": {
    "send_all_to": "Send alle utvunnede kryptomynter til",
    "youre_sending_x_to": "Du sender {beløp} til",
    "youre_sending_x_in_y_txs_to": "Du sender {receivedBalance} i {receivedTxCount} transaksjon til",
    "receiver_address": "Mottaksadresse",
    "wallet_password": "Lommebokpassord",
    "send": "Send",
    "coins_sent": "Dine kryptomynter er sendt!",
    "view_trans_plural": "Se transaksjoner",
    "view_trans_singular": "Se transaksjon",
    "failed_to_send": "Sending av kryptomynter mislyktes",
    "password_required": "Passord for lommebok er påkrevd",
    "invalid_address": "Ugyldig addresse",
    "script_failure": "Script feilet",
    "could_not_calculate_fee": "Kunne ikke regne ut beløp",
    "insufficient_funds": "Ikke tilstrekkelige midler",
    "sign_failed" : "Kan ikke signere transaksjonen. Sjekk passordet ditt",
    "send_failed": "Kunne ikke gjennomføre transaksjonen. Sjekk debug.log for mer informasjon"
  },
  "settings": {
    "enable_debug": "Aktiver debugging",
    "enable_debug_sub": "Inkluder OCMs utdata i feilsøkingsloggen. Kan gjøre loggene en del større",
    "auto_start": "Automatisk start",
    "auto_start_sub": "Start One-Click Miner når du logger på maskinen",
    "closed_source": "Bruk utvinningsprogramvare med stengt kildekode",
    "closed_source_sub": "Bedre hashrate, men ukjente utvinnerprogramvareutvikleren kan ha en avgift for å utvinne",
    "closed_source_warning": "Du har valgt å bruke utvinningsprogramvare(r) med lukket kildekode. Vertcoin støtter eller verifiserer ikke disse utvinnerne. Deres kildekode kan ikke verifiseres eller godkjennes, og de kan inneholde funksjoner som skader din datamaskin.",
    "save_n_restart": "Lagre og start på nytt"
  },
  "tabbar": {
    "wallet": "Lommebok",
    "send_coins": "Send kryptomynter",
    "settings": "Innstillinger"
  },
  "tracking": {
    "update_available": "Oppdatering tilgjengelig",
    "tracking_enabled": "Du deler brukerstatistikken anonymt",
    "disable_tracking": "Deaktiver",
    "tracking_disabled": "Du deler ikke brukerstatistikk",
    "enable_tracking": "Aktiver tracking for å hjelpe oss å bedre din brukeropplevelse",
    "report_issue": "Rapporter et problem"
  },
  "update": {
    "new_version_available": "Ny versjon er tilgjengelig",
    "download": "Last ned"
  }
}

================================================
FILE: frontend/src/i18n/pa.json
================================================
{
    "generic" : {
        "retry" : "ਦੁਬਾਰਾ  ਕੋਸ਼ਿਸ਼  ਕਰੋ",
        "back_to_wallet" : "ਵਾਪਸ  ਬਟੂਆ  ਵੱਲ",
        "close" : "ਨੇੜੇ"
    },
    "welcome" : {
        "alreadyrunning" : "ਇਕ ਕਲਿਕ ਖੋਜਕਾਰ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ ਹੈ. ਤੁਸੀਂ ਇਸ ਨੂੰ ਇਕ ਤੋਂ ਵੱਧ ਵਾਰ ਨਹੀਂ ਚਲਾ ਸਕਦੇ.",
        "click_button_to_start" : "ਦੁਬਾਰਾ ਮਾਈਨਿੰਗ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ ਤੇ ਕਲਿਕ ਕਰੋ.",
        "startmining" : "ਮਾਈਨਿੰਗ ਸ਼ੁਰੂ ਕਰੋ",
        "makeapassword" : "ਇੱਕ ਪਾਸਵਰਡ ਬਣਾਓ ਇਸ ਨੂੰ ਨਾ ਗੁਆਓ",
        "password" : "ਪਾਸਵਰਡ",
        "confirmpassword" : "ਪਾਸਵਰਡ ਪੱਕਾ ਕਰੋ",
        "password_cannot_be_empty" : "ਪਾਸਵਰਡ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ",
        "password_mismatch" : "ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ",
        "error_initializing" : "ਵਾਲਿਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਦਿਆਂ ਕੁਝ ਗਲਤ ਹੋਇਆ"
    },
    "checks" : {
        "prerequisite" : "ਇੱਕ ਜ਼ਰੂਰਤ ਲਗਾਈ ਜਾ ਰਹੀ ਹੈ. ਤੁਸੀਂ ਇਕ ਪੌਪ-ਅਪ ਨੂੰ ਅਨੁਮਤੀ ਮੰਗਦੇ ਹੋਏ ਵੇਖ ਸਕਦੇ ਹੋ (ਸਿਰਫ ਟਾਸਕਬਾਰ ਵਿਚ ਝਪਕਣਾ ਹੋ ਸਕਦਾ ਹੈ)",
        "checks_failed" : "ਜਾਂਚ ਅਸਫਲ",
        "checking_mining_software" : "ਮਾਈਨਿੰਗ ਸਾੱਫਟਵੇਅਰ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ",
        "rapidfail" : "ਤੇਜ਼ੀ ਨਾਲ ਅਸਫਲ ਹੋਣ ਦੀਆਂ ਘਟਨਾਵਾਂ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ",
        "compatibility" : "ਗ੍ਰਾਫਿਕਸ ਪ੍ਰੋਸੈਸਿੰਗ ਯੂਨਿਟ ਅਨੁਕੂਲਤਾ ਦੀ ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ",
        "installing_miners" : "ਮਾਈਨਿੰਗ ਸਾੱਫਟਵੇਅਰ ਸਥਾਪਤ ਕਰ ਰਿਹਾ ਹੈ...",
        "verthash" : "ਪੁਸ਼ਟੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ / ਵਰਥਸ਼ ਫਾਈਲ ਬਣਾਉਣਾ"
    },
    "mining" : {
        "spendable_balance" : "ਖਰਚ ਕਰਨ ਵਾਲਾ ਸੰਤੁਲਨ",
        "still_maturing" : "ਅਜੇ ਵੀ  ਸਿਆਣਾ",
        "pending_pool_payout" : "ਬਕਾਇਆ ਪੂਲ ਦਾ ਭੁਗਤਾਨ",
        "pending_payout_info_unavailable" : "ਕਿਰਪਾ ਕਰਕੇ ਬਕਾਇਆ ਭੁਗਤਾਨ ਜਾਣਕਾਰੀ ਦੀ ਉਡੀਕ ਕਰੋ",
        "waiting_for_miners" : "ਸ਼ੁਰੂਆਤ ਕਰਨ ਲਈ ਖੋਜਕਾਰ ਦੀ ਉਡੀਕ",
        "expected_earnings_24h" : "ਉਮੀਦ ਕੀਤੀ ਕਮਾਈ (ਚੋਵੀ ਘੰਟੇ)",
        "estimating" : "ਅਨੁਮਾਨ ਲਗਾਉਣਾ",
        "stop_mining" : "ਮਾਈਨਿੰਗ ਰੋਕੋ",
        "active_pool" : "ਕਿਰਿਆਸ਼ੀਲ ਪੂਲ",
        "pool_fee" : "ਕਰ",
        "copy_address" : "ਆਪਣੇ ਵਾਲਿਟ ਪਤੇ ਨੂੰ ਕਾਪੀ ਕਰੋ",
        "payout_information" : "ਭੁਗਤਾਨ ਜਾਣਕਾਰੀ ਵੇਖੋ"
    },
    "sending" : {
        "send_all_to" : "ਆਪਣੇ ਸਾਰੇ ਮਾਈਨ ਕੀਤੇ ਸਿੱਕੇ ਭੇਜੋ",
        "youre_sending_x_to" : "ਤੁਸੀਂ ਭੇਜ ਰਹੇ ਹੋ {receivedBalance} ਨੂੰ",
        "youre_sending_x_in_y_txs_to" : "ਤੁਸੀਂ ਭੇਜ ਰਹੇ ਹੋ {receivedBalance} ਵਿੱਚ {receivedTxCount} ਨੂੰ ਲੈਣ-ਦੇਣ",
        "receiver_address" : "ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲਾ ਪਤਾ",
        "wallet_password" : "ਵਾਲਿਟ ਪਾਸਵਰਡ",
        "send" : "ਭੇਜੋ",
        "coins_sent" : "ਤੁਹਾਡੇ ਸਿੱਕੇ ਭੇਜੇ ਗਏ ਹਨ",
        "view_trans_plural" : "ਲੈਣ-ਦੇਣ ਵੇਖੋ",
        "view_trans_singular" : "ਲੈਣ-ਦੇਣ ਵੇਖੋ",
        "failed_to_send" : "ਤੁਹਾਡੇ ਸਿੱਕੇ ਭੇਜਣ ਵਿੱਚ ਅਸਫਲ",
        "password_required" : "ਵਾਲਿਟ ਦਾ ਪਾਸਵਰਡ ਲੋੜੀਂਦਾ ਹੈ",
        "invalid_address" : "ਅਵੈਧ ਪਤਾ",
        "script_failure" : "ਸਕ੍ਰਿਪਟ ਅਸਫਲ",
        "could_not_calculate_fee" : "ਫੀਸ ਦੀ ਗਣਨਾ ਨਹੀਂ ਕਰ ਸਕਿਆ",
        "insufficient_funds" : "ਨਾਕਾਫ਼ੀ ਫੰਡ",
        "sign_failed" : "ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਤੇ ਦਸਤਖਤ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ. ਆਪਣੇ ਪਾਸਵਰਡ ਦੀ ਜਾਂਚ ਕਰੋ",
       "send_failed" : "ਲੈਣਦੇਣ ਭੇਜਣ ਵਿੱਚ ਅਸਮਰੱਥ. ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਡੀਬੱਗ.ਲੱਗ ਚੈੱਕ ਕਰੋ"
    },
    "settings" : {
        "enable_debug" : "ਡੀਬੱਗਿੰਗ ਡੀਬੱਗ",
        "enable_debug_sub" : "ਡੀਬੱਗ ਲੌਗ ਵਿੱਚ ਖਨਕ ਦੀ ਕੰਸੋਲ ਆਉਟਪੁੱਟ ਸ਼ਾਮਲ ਕਰੋ. ਤੁਹਾਡੇ ਲੌਗਸ ਕਾਫ਼ੀ ਵੱਡੇ ਹੋ ਸਕਦੇ ਹਨ",
        "auto_start" : "ਆਟੋ ਸਟਾਰਟt",
        "auto_start_sub" : "ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ ਕੰਪਿ inਟਰ ਤੇ ਲੌਗ ਇਨ ਕਰਦੇ ਹੋ ਤਾਂ ਵਨ-ਕਲਿਕ ਖਨਕ ਚਾਲੂ ਕਰੋ",
        "closed_source" : "ਬੰਦ ਸਰੋਤ ਖੋਜਕਰਤਾ",
        "closed_source_sub" : "ਬਿਹਤਰ ਹੈਸ਼ਰੇਟ, ਪਰ ਅਣਚਾਹੇ ਖਨਕ ਜੋ ਇੱਕ ਵਿਕਾਸਕਰਤਾ ਦੀ ਫੀਸ ਲੈਂਦੇ ਹਨ",
        "closed_source_warning" : "ਤੁਸੀਂ ਬੰਦ ਸਰੋਤ ਖਨਕ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਚੋਣ ਕੀਤੀ ਹੈ. ਵਰਟਕੋਇਨ ਇਨ੍ਹਾਂ ਮਾਈਨਰਾਂ ਨੂੰ ਸਮਰਥਨ ਨਹੀਂ ਦਿੰਦਾ. ਉਨ੍ਹਾਂ ਦੀ ਸਮਗਰੀ 'ਤੇ ਆਡਿਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਅਤੇ ਦੇ ਫੰਕਸ਼ਨ ਹੋ ਸਕਦੇ ਹਨ ਜੋ ਤੁਹਾਡੇ ਕੰਪਿcਟਰ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚਾ ਸਕਦੇ ਹਨ",
        "enable_integrated" : "ਏਕੀਕ੍ਰਿਤ ਗਰਾਫਿਕਸ 'ਤੇ ਮੇਰਾ",
        "enable_integrated_sub" : "ਖਨਕ ਆਨਬੋਰਡ ਗ੍ਰਾਫਿਕਸ ਦੀ ਵਰਤੋਂ ਕਰੇਗਾ (ਜੇ ਮੁਮਕਿਨ)",
        "testnet":"ਟੈਸਟਨੈੱਟ ਮੋਡ",
        "testnet_sub":"ਟੈਸਟਨੈੱਟ ਮੋਡ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ. ਤੁਸੀਂ ਅਸਲੀ ਸਿੱਕਿਆਂ ਦੀ ਖੁਦਾਈ ਨਹੀਂ ਕਰੋਗੇ.",
        "skipverthashverify":"ਪੁਸ਼ਟੀ ਨਾ ਕਰੋ ਵਰਥਸ਼ ਸ਼ੁਰੂ 'ਤੇ",
        "skipverthashverify_sub":"ਦੀ ਫਾਈਲ ਇਕਸਾਰਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨਾ ਛੱਡ ਦਿੱਤਾ ਜਾਵੇਗਾ ਵਰਥਸ਼ ਸ਼ੁਰੂਆਤ 'ਤੇ ਡਾਟਾ (ਦੀ ਸਿਫਾਰਸ਼ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ)",
        "save_n_restart" : "ਸੇਵ ਅਤੇ ਰੀਸਟਾਰਟ",
        "pool": "ਮਾਈਨਿੰਗ ਪੂਲ"
    },
    "tabbar" : {
        "wallet" : "ਬਟੂਆ",
        "send_coins" : "ਸਿੱਕੇ ਭੇਜੋ",
        "settings" : "ਸੈਟਿੰਗਜ਼"
    },
    "tracking": { 
        "update_available" : "ਅਪਡੇਟ ਉਪਲਬਧ ਹੈ",
        "tracking_enabled" : "ਤੁਸੀਂ ਅਗਿਆਤ ਤੌਰ ਤੇ ਵਰਤੋਂ ਦੇ ਅੰਕੜੇ ਸਾਂਝੇ ਕਰ ਰਹੇ ਹੋ",
        "disable_tracking" : "ਅਯੋਗ",
        "tracking_disabled" : "ਤੁਸੀਂ ਵਰਤੋਂ ਦੇ ਅੰਕੜਿਆਂ ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕਰ ਰਹੇ",
        "enable_tracking" : "ਆਪਣੇ ਤਜ਼ਰਬੇ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿਚ ਸਾਡੀ ਸਹਾਇਤਾ ਕਰਨ ਲਈ ਇਨ੍ਹਾਂ ਨੂੰ ਸਮਰੱਥ ਕਰੋ",
        "report_issue" : "ਇੱਕ ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ"
    },
    "update" : {
        "new_version_available" : "ਨਵਾਂ ਵਰਜਨ ਉਪਲਬਧ ਹੈ",
        "download" : "ਡਾ .ਨਲੋਡ"
    }
}


================================================
FILE: frontend/src/i18n/pl.json
================================================
{
    "generic" : {
        "retry" : "Ponów",
        "back_to_wallet" : "Wróć do portfela",
        "close" : "Zamknij"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner jest już uruchomiony. Nie możesz uruchomić kolejnego.",
        "click_button_to_start" : "Naciśnij przycisk poniżej, aby rozpocząć kopanie.",
        "startmining" : "Start kopania!",
        "makeapassword" : "Utwórz hasło. Nie zapomnij go.",
        "password" : "Hasło",
        "confirmpassword" : "Potwierdź hasło",
        "password_cannot_be_empty" : "Hasło nie może być puste",
        "password_mismatch" : "Hasła nie pasują do siebie",
        "error_initializing" : "Coś poszło nie tak podczas inicjalizacji portfela"
    },
    "checks" : {
        "prerequisite" : "Instalowanie dodatków. Może pojawić się prośba o nadanie uprawnień (podświetlona na pasku zadań)",
        "checks_failed" : "Sprawdzenie zakończyło się niepowodzeniem",
        "checking_mining_software" : "Sprawdzanie oprogramowania do kopania...",
        "rapidfail" : "Sprawdzanie komunikatów o błędach",
        "compatibility" : "Sprawdzanie kompatybilności karty graficznej...",
        "installing_miners" : "Instalowanie oprogramowania...",
        "verthash" : "Weryfikowanie / Tworzenie pliku danych Verthash..."
    },
    "mining" : {
        "spendable_balance" : "Kwota do wydania",
        "still_maturing" : "nadal dojrzewa",
        "pending_pool_payout" : "wypłata w trakcie",
        "pending_payout_info_unavailable" : "Poczekaj na informacje o oczekujących wypłatach",
        "waiting_for_miners" : "Oczekiwanie na uruchomienie kopania",
        "expected_earnings_24h" : "Oczekiwany dochód (24h)",
        "estimating" : "około",
        "stop_mining" : "Zatrzymaj kopanie",
        "active_pool" : "Aktywna kopalnia",
        "pool_fee" : "Prowizja",
        "copy_address" : "Kopiuj adres swojego portfela"
    },
    "sending" : {
        "send_all_to" : "Wyślij wszystkie monety do",
        "youre_sending_x_to" : "Wysyłasz {receivedBalance} do",
        "youre_sending_x_in_y_txs_to" : "Wysyłasz {receivedBalance} w {receivedTxCount} transakcjach do",
        "receiver_address" : "Adres odbiorcy",
        "wallet_password" : "Hasło portfela",
        "send" : "Wyślij",
        "coins_sent" : "Monety wysłane!",
        "view_trans_plural" : "Zobacz transakcje",
        "view_trans_singular" : "Zobacz transakcję",
        "failed_to_send" : "Wysyłka monet nieudana",
        "password_required" : "Podaj hasło do portfela",
        "invalid_address" : "Błędny adres",
        "script_failure" : "Błąd skryptu",
        "could_not_calculate_fee" : "Obliczenie prowizji nie powiodło się",
        "insufficient_funds" : "Za mało środków",
        "sign_failed" : "Nie można podpisać transakcji. Sprawdź swoje hasło.",
        "send_failed" : "Wysyłka nieudana. Więcej informacji w pliku debug.log"
    },
    "settings" : {
        "enable_debug" : "Włącz debugging",
        "enable_debug_sub" : "Dołącz komunikaty z kopania do pliku debug.log. Plik może zrobić się duży",
        "auto_start" : "Automatyczne uruchamianie",
        "auto_start_sub" : "Uruchom One-Click Miner kiedy uruchamiasz komputer",
        "closed_source" : "Używaj górników typu closed-source",
        "closed_source_sub" : "Większa wydajność, ale oprogramowanie może pobierać dodatkową opłatę dla jego autora",
        "closed_source_warning" : "Zaznaczyłeś używanie górników typu closed-source. Vertcoin nie popiera i nie wspiera tych górników. Ich kod źródłowy nie jest publicznie dostępny i nie można sprawdzić, czy nie zawierają szkodliwego oprogramowania.",
        "enable_integrated" : "Kop na zintegrowanych kartach graficznych",
        "enable_integrated_sub" : "Zintegrowane karty graficzne będą wykorzystywane do kopania (jeśli możliwe)",
        "testnet" : "Tryb Testnet",
        "testnet_sub" : "Włącza tryb Testnet. Nie będziesz kopał prawdziwych monet.",
        "skipverthashverify" : "Nie weryfikuj Verthash podczas uruchamiania",
        "skipverthashverify_sub" : "Weryfikacja integralności pliku verthash.dat podczas uruchamiania zostanie pominięta (niezalecane)",
        "save_n_restart" : "Zapisz i Wznów",
        "pool" : "Kopalnia"
    },
    "tabbar" : {
        "wallet" : "Portfel",
        "send_coins" : "Wyślij monety",
        "settings" : "Ustawienia"
    },
    "tracking": { 
        "update_available" : "Dostępne uaktualnienie",
        "tracking_enabled" : "Udostępnianie statystyk włączone",
        "disable_tracking" : "Wyłącz",
        "tracking_disabled" : "Udostępnianie statystyk wyłączone",
        "enable_tracking" : "Włącz statystyki, by pomóc nam w rozwoju programu",
        "report_issue" : "Zgłoś problem z programem"
    },
    "update" : {
        "new_version_available" : "Dostępna nowa wersja",
        "download" : "Pobierz"
    }
}


================================================
FILE: frontend/src/i18n/pt.json
================================================
{
    "generic" : {
        "retry" : "Tentar novamente",
        "back_to_wallet" : "Regressar à carteira",
        "close" : "Fechar"
    },
    "welcome" : {
        "alreadyrunning" : "O One-Click Miner já está em execução. Não pode executá-lo mais do que uma vez.",
        "click_button_to_start" : "Clique no botão abaixo para iniciar a mineração novamente.",
        "startmining" : "Começar a Minar!",
        "makeapassword" : "Faça uma palavra-passe para a Carteira do OCM. Não a perca!",
        "password" : "Palavra-passe",
        "confirmpassword" : "Confirme a palavra-passe",
        "password_cannot_be_empty" : "É necessário inserir uma palavra-passe",
        "password_mismatch" : "As palavras-passe não coincidem",
        "error_initializing" : "Houve um erro ao iniciar a carteira"
    },
    "checks" : {
        "prerequisite" : "Os pré-requisitos estão a ser instalados. Podem haver popups a pedir permissões (poderá ser um icon a piscar na barra de trefas)",
        "checks_failed" : "As verificações falharam",
        "checking_mining_software" : "A verificar o sfotware de mineração...",
        "rapidfail" : "A verificar ocorrências de falhas rápidas",
        "compatibility" : "A verificar a compatibilidade da GPU...",
        "installing_miners" : "A instalar o software de mineração...",
        "verthash" : "A verificar / criar o ficheiro de dados do Verthash..."
    },
    "mining" : {
        "spendable_balance" : "Quantia disponível",
        "still_maturing" : "aguarda confirmações",
        "pending_pool_payout" : "pagamento pela pool pendente",
        "pending_payout_info_unavailable" : "Espere pela informação sobre os pagamentos pendentes",
        "waiting_for_miners" : "Esperando pela inicialização dos mineiros",
        "expected_earnings_24h" : "Ganhos Esperados (24h)",
        "estimating" : "a estimar",
        "stop_mining" : "Parar de Minar",
        "active_pool" : "Pool ativa",
        "pool_fee" : "taxa",
        "copy_address" : "Copiar o endereço da sua carteira",
        "payout_information" : "Ver informação do pagamento"
    },
    "sending" : {
        "send_all_to" : "Envie todas as suas moedas minadas para",
        "youre_sending_x_to" : "Está a enviar {receivedBalance} para",
        "youre_sending_x_in_y_txs_to" : "Está a enviar {receivedBalance} em {receivedTxCount} transações para",
        "receiver_address" : "Endereço do Destinatário",
        "wallet_password" : "Palavra-passe da Carteira do OCM",
        "send" : "Enviar",
        "coins_sent" : "As suas moedas foram enviadas!",
        "view_trans_plural" : "Ver transações",
        "view_trans_singular" : "Ver transação",
        "failed_to_send" : "Ocorreu um erro ao tentar enviar as suas moedas",
        "password_required" : "A palavra-passe da carteira é necessária",
        "invalid_address" : "Endereço inválido",
        "script_failure" : "Erro no script",
        "could_not_calculate_fee" : "Não foi possível calcular a taxa",
        "insufficient_funds" : "Montante disponível insuficiente",
        "sign_failed" : "Não foi possível assinar a transação. Verifique sua palavra-passe",
        "send_failed" : "Não foi possível efetuar a transação. Veja o debug.log para mais informações."
    },
    "settings" : {
        "enable_debug" : "Ativar o debugging",
        "enable_debug_sub" : "Incluir o output da consola dos mineiros no debug.log. Isto pode aumentar bastante o tamanho dos logs",
        "auto_start" : "Iniciar automaticamente",
        "auto_start_sub" : "Iniciar o One-Click Miner ao iniciar sessão no computador",
        "closed_source" : "Utilizar mineiros que são closed-source",
        "closed_source_sub" : "Têm melhor hashrate, mas são mineiros não examinados e têm taxas de utilização",
        "closed_source_warning" : "Selecionou a utilização de mineiros closed-source. O Vertcoin não apoia ou suporta estes mineiros. O seu conteúdo não pode ser verificado e, por isso, podem conter funções que podem afetar o seu computador.",
        "enable_integrated" : "Minerar na placa gráfica integrada",
        "enable_integrated_sub" : "O minerador usará a placa gráfica integrada (se possível)",
        "testnet":"Modo de teste de rede",
        "testnet_sub":"Ativar modo de teste de rede. Você não estará minerando moedas reais.",
        "skipverthashverify":"Não verificar o Verthash na inicialização",
        "skipverthashverify_sub":"Irá pular a verificação da integridade do arquivo dos dados do Verthash na inicialização (não recomendado)",
        "save_n_restart" : "Gravar & Reiniciar",
        "pool": "Pool de Mineração"
    },
    "tabbar" : {
        "wallet" : "Carteira",
        "send_coins" : "Enviar moedas",
        "settings" : "Configurações"
    },
    "tracking": { 
        "update_available" : "Atualização disponível",
        "tracking_enabled" : "Está a partilhar estatísticas de utilização anonimamente",
        "disable_tracking" : "Desativar",
        "tracking_disabled" : "Não está a partilhar estatísticas de mineração",
        "enable_tracking" : "Ative-as para que possamos melhorar a sua experiência",
        "report_issue" : "Reportar um problema"
    },
    "update" : {
        "new_version_available" : "Nova versão disponível",
        "download" : "Descarregar"
    }
}


================================================
FILE: frontend/src/i18n/ro.json
================================================
{
    "generic" : {
        "retry" : "Încearcă din nou",
        "back_to_wallet" : "Înapoi la portofel",
        "close" : "Închide"
    },
    "welcome" : {
        "alreadyrunning" : "Minerul One-Click este deja pornit. Poți să îl pornești doar o singură dată.",
        "click_button_to_start" : "Apasă pe butonul de mai jos pentru a reîncepe să minezi.",
        "startmining" : "Începe să minezi!",
        "makeapassword" : "Creează o parolă. Nu o pierde.",
        "password" : "Parolă",
        "confirmpassword" : "Confirmă parola",
        "password_cannot_be_empty" : "Câmpul Parolă nu poate fi gol",
        "password_mismatch" : "Parolele trebuie să fie identice",
        "error_initializing" : "A apărut o eroare la inițializarea portofelului."
    },
    "checks" : {
        "prerequisite" : "Se instalează un pachet software necesar. Este posibil să apară o fereastră care cere permisiuni (verifică dacă îți clipește în bara de activități)",
        "checks_failed" : "Verificări eșuate",
        "checking_mining_software" : "Se verifică software-ul de minare...",
        "rapidfail" : "Se verifică dacă există erori rapide (i.e. programul se oprește imediat după ce a pornit)",
        "compatibility" : "Se verifică compatibilitatea cu placa grafică...",
        "installing_miners" : "Se instalează software-ul de minare..."
    },
    "mining" : {
        "spendable_balance" : "Balanță disponibilă",
        "still_maturing" : "în curs de maturizare",
        "pending_pool_payout" : "plată de la pool în curs de efectuare",
        "waiting_for_miners" : "Se așteaptă pornirea minerilor",
        "expected_earnings_24h" : "Câștiguri așteptate (24h)",
        "estimating" : "se estimează",
        "stop_mining" : "Oprește minarea"
    },
    "sending" : {
        "send_all_to" : "Trimite toate monedele minate către",
        "youre_sending_x_to" : "Vei trimite {receivedBalance} către",
        "youre_sending_x_in_y_txs_to" : "Vei trimite {receivedBalance} în {receivedTxCount} tranzacții către",
        "receiver_address" : "Adresa destinatarului",
        "wallet_password" : "Parola portofelului",
        "send" : "Trimite",
        "coins_sent" : "Monedele au fost trimise!",
        "view_trans_plural" : "Vizualizare tranzacții",
        "view_trans_singular" : "Vizualizare tranzacție",
        "failed_to_send" : "Monedele nu au putut fi trimise!",
        "password_required" : "Trebuie să introduci parola portofelului",
        "invalid_address" : "Adresă invalidă",
        "script_failure" : "Eroare de script",
        "could_not_calculate_fee" : "Taxa pe tranzacție nu a putut fi calculată",
        "insufficient_funds" : "Fonduri insuficiente",
        "sign_failed":"Imposibil de semnat tranzacția. Verificați parola",
        "send_failed" : "Nu se poate trimite tranzacția. Verifică fișierul debug.log pentru informații suplimentare"
    },
    "settings" : {
        "enable_debug" : "Activează depanarea",
        "enable_debug_sub" : "Include textul din consola minerului în logul de depanare. Aceast lucru poate duce la o creștere semnificativă a dimensiunii logurilor",
        "auto_start" : "Pornire automată",
        "auto_start_sub" : "Pornește Minerul One-Click când te loghezi pe calculator",
        "closed_source" : "Folosește mineri closed-source",
        "closed_source_sub" : "Au hashrate mai bun, dar sunt mineri neauditați care trimit o taxă către dezvoltator",
        "closed_source_warning" : "Ai ales să folosești mineri closed-source. Vertcoin nu este afiliat cu acești mineri și nu oferă suport pentru ei. Conținutul lor nu poate fi auditat și ar putea include funcționalități dăunătoare pentru calculatorul tău.",
        "save_n_restart" : "Salvează și repornește"
    },
    "tabbar" : {
        "wallet" : "Portofel",
        "send_coins" : "Trimite monede",
        "settings" : "Setări"
    },
    "tracking": { 
        "update_available" : "Actualizare disponibilă",
        "tracking_enabled" : "Împărtășești statistici de utilizare în mod anonim",
        "disable_tracking" : "Dezactivează",
        "tracking_disabled" : "Nu împărtășești statistici de utilizare",
        "enable_tracking" : "Activează această setare pentru a ne ajuta să îți oferim o experiență mai bună",
        "report_issue" : "Raportează o problemă"
    },
    "update" : {
        "new_version_available" : "O nouă versiune este disponibilă",
        "download" : "Descarcă"
    }
}


================================================
FILE: frontend/src/i18n/ru.json
================================================
{
    "generic" : {
        "retry" : "Попробовать снова",
        "back_to_wallet" : "Вернуться в кошелёк",
        "close" : "Закрыть"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner уже запущен. Вы не можете запустить его более одного раза.",
        "click_button_to_start" : "Нажмите кнопку ниже, чтобы начать майнинг снова.",
        "startmining" : "Начать майнинг!",
        "makeapassword" : "Создайте пароль. Не потеряйте его!",
        "password" : "Пароль",
        "confirmpassword" : "Подтвердите пароль",
        "password_cannot_be_empty" : "Пароль не может быть пустым",
        "password_mismatch" : "Пароли не совпадают",
        "error_initializing" : "Что-то пошло не так при инициализации кошелька"
    },
    "checks" : {
        "prerequisite" : "Компоненты устанавливаются. Вы можете увидеть всплывающее окно с запросом разрешений (оно может просто мигать на панели задач)",
        "checks_failed" : "Сбой при проверке",
        "checking_mining_software" : "Проверка майнеров...",
        "rapidfail" : "Проверка случаев быстрой неисправности",
        "compatibility" : "Проверка совместимости GPU...",
        "installing_miners" : "Установка майнеров...",
        "verthash" : "Проверка / создание файла данных Verthash ..."
    },
    "mining" : {
        "spendable_balance" : "Доступный баланс",
        "still_maturing" : "Ожидает подтверждений",
        "pending_pool_payout" : "Ожидание выплаты с пула",
        "pending_payout_info_unavailable" : "Дождитесь информации об ожидающих выплатах",
        "waiting_for_miners" : "Ждем майнеры для старта",
        "expected_earnings_24h" : "Ожидаемый доход (24Ч)",
        "estimating" : "идет расчет",
        "stop_mining" : "Закончить майнинг",
        "active_pool" : "Активный пул",
        "pool_fee" : "комиссия",
        "copy_address" : "Скопировать адрес кошелька",
        "payout_information" : "Посмотреть информацию о выплатах"
    },
    "sending" : {
        "send_all_to" : "Отправить всю криптовалюту на",
        "youre_sending_x_to" : "Вы отправляете {receivedBalance} на",
        "youre_sending_x_in_y_txs_to" : "Вы отправляете {receivedBalance} в {receivedTxCount} транзакции на",
        "receiver_address" : "Адрес получателя",
        "wallet_password" : "Пароль от кошелька",
        "send" : "Отправить",
        "coins_sent" : "Криптовалюта отправлена!",
        "view_trans_plural" : "Просмотр транзакций",
        "view_trans_singular" : "Просмотр транзакции",
        "failed_to_send" : "Не удалось отправить криптовалюту",
        "password_required" : "Необходим пароль от кошелёка",
        "invalid_address" : "Неправильный адрес",
        "script_failure" : "Ошибка скрипта",
        "could_not_calculate_fee" : "Не удалось рассчитать комиссию",
        "insufficient_funds" : "Недостаточно средств",
        "sign_failed" : "Невозможно подписать транзакцию. Проверьте пароль.",
        "send_failed" : "Невозможно отправить транзакцию. Проверьте debug.log для получения дополнительной информации"
    },
    "settings" : {
        "enable_debug" : "Включить отладку",
        "enable_debug_sub" : "Включите вывод из консоли майнера в журнал отладки. Может значительно увеличить размер файла журнала",
        "auto_start" : "Авто Старт",
        "auto_start_sub" : "Запускать One-Click Miner при загрузке компьютера",
        "closed_source" : "Использовать проприетарные майнеры",
        "closed_source_sub" : "Лучший хэшрейт, но некоторые майнеры могут взымать комиссию разработчикам",
        "closed_source_warning" : "Вы решили использовать проприетарные майнеры. Vertcoin не оказывает поддержку этих майнеров. Их содержание не может быть проверено и может включать функции, которые повреждают ваш компьютер.",
        "enable_integrated" : "Майнить на встроенной видеокарте",
        "enable_integrated_sub" : "Майнер будет использовать встроенную видеокарту (если возможно)",
        "testnet" : "Режим тестовой сети",
        "testnet_sub" : "Включен режим тестовой сети. Вы не получите реальную криптовалюту.",
        "skipverthashverify" : "Не проверять файл данных Verthash при запуске",
        "skipverthashverify_sub" : "Пропустить проверку целостности файла Verthash.dat при запуске (не рекомендуется)",
        "save_n_restart" : "Сохранить и перезапустить",
        "pool": "Пул для майнинга"
    },
    "tabbar" : {
        "wallet" : "Кошелёк",
        "send_coins" : "Отправить криптовалюту",
        "settings" : "Настройки"
    },
    "tracking": { 
        "update_available" : "Доступно обновление",
        "tracking_enabled" : "Вы анонимно делитесь статистикой использования майнера",
        "disable_tracking" : "Запретить",
        "tracking_disabled" : "Вы не делитесь статистикой использования майнера",
        "enable_tracking" : "Включить эту опцию, чтобы помочь нам улучшить майнер",
        "report_issue" : "Сообщить о проблеме"
    },
    "update" : {
        "new_version_available" : "Доступна новая версия",
        "download" : "Скачать"
    }
}


================================================
FILE: frontend/src/i18n/sl.json
================================================
{
    "generic" : {
        "retry" : "Poskusi znova",
        "back_to_wallet" : "Nazaj v denarnico",
        "close":"Zapri"
    },
    "welcome" : {
        "alreadyrunning" : "One-Click Miner že teče. Ne morete ga zagnati več kot enkrat.",
        "click_button_to_start" : "Za ponoven začetek rudarjenja pritisni spodnji gumb.",
        "startmining" : "Začni rudariti!",
        "makeapassword" : "Ustvari geslo. Ne izgubi ga!",
        "password" : "Geslo",
        "confirmpassword" : "Potrdi geslo",
        "password_cannot_be_empty" : "Polje geslo ne sme biti prazno",
        "password_mismatch" : "Geslo se ne ujema",
        "error_initializing" : "Napaka pri nalaganju denarnice"
    },
    "checks" : {
        "prerequisite" : "Nameščanje predpogojnih datotek. Morda boste videli pojavno okno, ki zahteva dovoljenja (lahko samo utripa v opravilni vrstici)",
        "checks_failed" : "Preverjanje neuspešno",
        "checking_mining_software" : "Preverjanje programske opreme za rudarstvo ...",
        "rapidfail" : "Preverjanje hitrih okvar",
        "compatibility" : "Preverjanje združljivosti grafične kartice ...",
        "installing_miners" : "Nameščanje rudarske programske opreme ..."
    },
    "mining" : {
        "spendable_balance" : "Razpoložljivi znesek",
        "still_maturing" : "v fazi zorenja",
        "pending_pool_payout" : "čakajoče pool izplačilo",
        "waiting_for_miners" : "Čakanje na rudarsko programsko opremo za začetek dela",
        "expected_earnings_24h" : "Pričakovani zaslužek (24h)",
        "estimating" : "ocenjevanje",
        "stop_mining" : "Prekini rudarjenje"
    },
    "sending" : {
        "send_all_to" : "Pošlji vse izrudarjene kovance na",
        "youre_sending_x_to" : "Pošiljaš {receivedBalance} na",
        "youre_sending_x_in_y_txs_to" : "Pošiljaš {receivedBalance} v {receivedTxCount} transakcij na",
        "receiver_address" : "Naslov prejemnika",
        "wallet_password" : "Geslo denarnice",
        "send" : "Pošlji",
        "coins_sent" : "Kovanci so poslani!",
        "view_trans_plural" : "Ogled transakcij",
        "view_trans_singular" : "Ogled transakcije",
        "failed_to_send" : "Kovancev ni bilo mogoče poslati",
        "password_required" : "Potrebno je geslo za denarnico",
        "invalid_address" : "Napačen naslov",
        "script_failure" : "Napaka skripte",
        "could_not_calculate_fee" : "Ni bilo mogoče izračunati pristojbine",
        "insufficient_funds" : "Nezadostna sredstva",
        "sign_failed":"Transakcije ni mogoče podpisati. Preverite geslo",
        "send_failed" : "Transakcije ni bilo mogoče poslati. Poglej debug.log za več informacij"
    },
    "settings" : {
        "enable_debug" : "Omogoči iskanje napak",
        "enable_debug_sub" : "Omogoči izvoz dnevnikov konzol rudarske programske opreme v dnevnik za odstranjevanje hroščev. Velikost dnevnika se lahko znatno poveča",
        "auto_start" : "Samodejni zagon",
        "auto_start_sub" : "Zaženi One-Click Miner, ko se prijaviš v računalnik.",
        "closed_source" : "Uporabi zaprto programsko opremo za rudarstvo",
        "closed_source_sub" : "Boljši hashrate, vendar neocenjena programska opema, ki lahko vključuje pristojbino za razvojne inženirje",
        "closed_source_warning" : "Izbrali ste zaprto programsko opremo za rudarstvo. Vertcoin ne odobrava ali podpira njihovo uporabo. Ne more se preveriti njihovo vsebino tako, da lahko potencijalno vsebuje funkcije, ki lahko poškoduje vaš računalnik.",
        "save_n_restart" : "Shrani & Znova zaženi"
    },
    "tabbar" : {
        "wallet" : "Denarnica",
        "send_coins" : "Pošlji kovance",
        "settings" : "Nastavitve"
    },
    "tracking": { 
        "update_available" : "Posodobitev je na voljo",
        "tracking_enabled" : "Anonimno izmenjujete statistične podatke o uporabi",
        "disable_tracking" : "Onemogoči",
        "tracking_disabled" : "Ne delite statistike o uporabi",
        "enable_tracking" : "Omogočite jih, da bi nam pomagali izboljšati vaše izkušnje",
        "report_issue" : "Prijavite težavo"
    },
    "update" : {
        "new_version_available" : "Na voljo je nova različica",
        "download" : "Prenos"
    }
}


================================================
FILE: frontend/src/i18n/sv.json
================================================
{
  "generic": {
    "retry": "Försök igen",
    "back_to_wallet": "Tillbaka till plånboken",
    "close": "Stäng"
  },
  "welcome": {
    "alreadyrunning": "One-Click Miner har redan startats. Du kan bara köra en instans åt gången.",
    "click_button_to_start": "Klicka på knappen nedan för att börja mina igen.",
    "startmining": "Börja Mina!",
    "makeapassword": "Skapa ett lösenord. Tappa inte bort det.",
    "password": "Lösenord",
    "confirmpassword": "Bekräfta lösenord",
    "password_cannot_be_empty": "Du måste ange ett lösenord",
    "password_mismatch": "Lösenorden matchar inte",
    "error_initializing": "Något gick fel under initialisering av plånboken"
  },
  "checks": {
    "prerequisite": "Mjukvara som krävs av One-Click Miner installeras. Du kanske kommer se en popup som ber om behörigheter (kanske bara blinkar i aktivitetsfältet)",
    "checks_failed": "Kontrollerna misslyckades",
    "checking_mining_software": "Kontrollerar mining mjukvaran...",
    "rapidfail": "Kontrollerar för förekomsten av fel",
    "compatibility": "Kontrollerar GPU-kompatibilitet...",
    "installing_miners": "Installera mining mjukvara...",
    "verthash": "Verifierar / skapar Verthash data fil..."
  },
  "mining": {
    "spendable_balance": "Spenderbart saldo",
    "still_maturing": "mognar fortfarande",
    "pending_pool_payout": "väntande poolutbetalning",
    "pending_payout_info_unavailable": "Var vänlig vänta på utbetalnings information",
    "waiting_for_miners": "Väntar på att miningen ska börja",
    "expected_earnings_24h": "Förväntade intäkter (24h)",
    "estimating": "beräknar",
    "stop_mining": "Sluta Mina",
    "active_pool": "Aktiv pool",
    "pool_fee": "avgift",
    "copy_address": "Kopiera din plånboks address",
    "payout_information": "Visa utbetalnings information"
  },
  "sending": {
    "send_all_to": "Skicka dina minade mynt till",
    "youre_sending_x_to": "Du skickar {receivedBalance} till",
    "youre_sending_x_in_y_txs_to": "Du skickar {receivedBalance} i {receivedTxCount} transaktion till",
    "receiver_address": "Mottagaradress",
    "wallet_password": "Plånbokslösenord",
    "send": "Skicka",
    "coins_sent": "Dina mynt har skickats!",
    "view_trans_plural": "Visa transaktioner",
    "view_trans_singular": "Visa transaktion",
    "failed_to_send": "Det gick inte att skicka dina mynt",
    "password_required": "Plånbokslösenord krävs",
    "invalid_address": "Ogiltig adress",
    "script_failure": "Script fel",
    "could_not_calculate_fee": "Kunde inte beräkna avgift",
    "insufficient_funds": "Otillräckliga saldo",
    "sign_failed": "Det gick inte att skriva under transaktion. Kontrollera ditt lösenord",
    "send_failed": "Det gick inte att skicka transaktion. Kontrollera debug.log filen för mer information"
  },
  "settings": {
    "enable_debug": "Aktivera felsökning",
    "enable_debug_sub": "Inkludera mining mjukvarans utdata i felsökningsloggen. Kan gör att loggfilen växer snabbt",
    "auto_start": "Autostart",
    "auto_start_sub": "Starta One-Click Miner när du loggar in på din dator",
    "closed_source": "Använd mining mjukvara med stängd källkod (Proprietär programvara)",
    "closed_source_sub": "Ger bättre hashrate, men källkoden är ej granskad och mjukvaran har en avgift till utvecklaren",
    "closed_source_warning": "Du har valt att använda mining mjukvara med sluten källkod. Vertcoin stöder inte denna mjukvara. Källkoden kan inte granskas och kan inehålla delar som skadar din dator.",
    "enable_integrated": "Använd integrerat grafikkort (iGPU) för att mina",
    "enable_integrated_sub": "Kommer att använda integrerat grafikkort (om möjligt)",
    "testnet": "Testnet läge",
    "testnet_sub": "Aktivera testnet läge. Du kommer inte mina riktiga mynt.",
    "skipverthashverify": "Verifiera inte verthash under start",
    "skipverthashverify_sub": "Kommer inte att verifiera verthash data file under uppstart (rekomenderas inte)",
    "save_n_restart": "Spara & starta om",
    "pool": "Mining pool"
  },
  "tabbar": {
    "wallet": "Plånbok",
    "send_coins": "Skicka mynt",
    "settings": "Inställningar"
  },
  "tracking": {
    "update_available": "Uppdatering tillgänglig",
    "tracking_enabled": "Du delar anonym användningsstatistik",
    "disable_tracking": "Inaktivera",
    "tracking_disabled": "Du delar inte användningsstatistik",
    "enable_tracking": "Aktivera dessa för att hjälpa oss förbättra One-Click Miner",
    "report_issue": "Rapportera ett problem"
  },
  "update": {
    "new_version_available": "Ny version tillgänglig",
    "download": "Ladda ner"
  }
}

================================================
FILE: frontend/src/i18n/tr.json
================================================
{
    "generic" : {
        "retry" : "Tekrar dene",
        "back_to_wallet" : "Cüzdana dön",
        "close" : "Kapat"
    },
    "welcome" : {
        "alreadyrunning" : "Tek-tıkta-madencilik zaten çalışıyor. Birden fazla açamazsınız.",
        "click_button_to_start" : "Madenciliğe devam etmek için butona tıklayın.",
        "startmining" : "Madenciliğe Başla!",
        "makeapassword" : "Bir şifre oluşturun. Bu şifreyi unutmayın!",
        "password" : "Şifre",
        "confirmpassword" : "Şifreyi tekrar gir",
        "password_cannot_be_empty" : "Şifreyi boş bırakamazsınız",
        "password_mismatch" : "Şifreler eşleşmiyor",
        "error_initializing" : "Cüzdanı başlatırken bir şeyler ters gitti."
    },
    "checks" : {
        "prerequisite" : "Gerekli bir program yükleniyor. İzin isteyen bir pencere açılabilir (ya da görev çubuğunuz renk değiştirebilir)",
        "checks_failed" : "Kontroller başarısız oldu.",
        "checking_mining_software" : "Madencilik yazılımı kontrol ediliyor...",
        "rapidfail" : "Ani oluşan hatalar kontrol ediliyor...",
        "compatibility" : "GPU uyumluluğu kontrol ediliyor...",
        "installing_miners" : "Madencilik yazılımı yükleniyor...",
        "verthash" : "Verthash dosyası onaylanıyor / oluşturuluyor..."
    },
    "mining" : {
        "spendable_balance" : "Harcanabilir Bakiye",
        "still_maturing" : "Olgunlaşmakta olan:",
        "pending_pool_payout" : "havuz ödemesi bekleniyor",
        "pending_payout_info_unavailable" : "Beklenen ödeme bilgisi için lütfen bekleyin...",
        "waiting_for_miners" : "Madencinin başlaması bekleniyor",
        "expected_earnings_24h" : "Tahmini Kazanç (24 saat)",
        "estimating" : "Tahmin ediliyor...",
        "stop_mining" : "Madenciliği durdur",
        "active_pool" : "Aktif havuz",
        "pool_fee" : "Havuz komisyonu",
        "copy_address" : "Cüzdan adresinizi kopyalayın"
    },
    "sending" : {
        "send_all_to" : "Kazdığım tüm coinleri şu adrese gönder:",
        "youre_sending_x_to" : "Bu adrese {receivedBalance} adet coin yolluyorsunuz;",
        "youre_sending_x_in_y_txs_to" : "Bu adrese {receivedBalance} adet coini {receivedTxCount} adet transferle yolluyorsunuz ",
        "receiver_address" : "Alıcı Adresi",
        "wallet_password" : "Cüzdan Şifresi",
        "send" : "Gönder",
        "coins_sent" : "Coinleriniz gönderildi!",
        "view_trans_plural" : "Transferleri görüntüle",
        "view_trans_singular" : "Transferi görüntüle",
        "failed_to_send" : "Coinleriniz gönderilemedi",
        "password_required" : "Cüzdan şifresini giriniz.",
        "invalid_address" : "Geçersiz adres.",
        "script_failure" : "Script başarısız oldu.",
        "could_not_calculate_fee" : "Komisyon hesaplanamadı",
        "insufficient_funds" : "Yetersiz bakiye",
        "sign_failed" : "Transfer imzalanamadı. Şifreyi kontrol ediniz.",
        "send_failed" : "Transfer yapılamadı. Daha fazla bilgi için debug.log inceleyiniz."
    },
    "settings" : {
        "enable_debug" : "Debugging'i aktif et",
        "enable_debug_sub" : "Madenci konsolunun çıktılarını debug.log'a dahil et. Log boyutu çok büyüyebilir",
        "auto_start" : "Otomatik başlat",
        "auto_start_sub" : "Madenciyi bilgisayar açıldığında otomatik başlat",
        "closed_source" : "Kapalı kaynak kodlu madenci yazılımlarını kullan",
        "closed_source_sub" : "Daha iyi hashrate alırsınız, fakat yazılımın geliştiricisi sizden komisyon alır",
        "closed_source_warning" : "Kapalı kaynak kodlu madenci yazılımı kullanmayı seçtiniz. Vertcoin bu yazılımları desteklemez. İçerikleri bilinemez ve bilgisayarınıza zarar verebilecek yazılımlar içerebilir.",
        "testnet":"Testnet modu",
        "testnet_sub":"Testnet modunu aktifleştirir. Kazılan coinler gerçek değildir.",
        "skipverthashverify":"Başlangıçta Verthash'i doğrulama",
        "skipverthashverify_sub":"Başlangıçta Verthash dosyasının bütünlüğünü doğrulamayı atlayacak (önerilmez)",
        "save_n_restart" : "Kaydet ve Yeniden Başlat",
        "pool": "Madenci havuzu"
    },
    "tabbar" : {
        "wallet" : "Cüzdan",
        "send_coins" : "Coin gönder",
        "settings" : "Ayarlar"
    },
    "tracking": { 
        "update_available" : "Yeni bir güncelleme var.",
        "tracking_enabled" : "Anonim olarak kullanıcı istatistiği gönderiyorsunuz",
        "disable_tracking" : "Deaktive et",
        "tracking_disabled" : "Kullanım istatistiği yollamıyorsunuz",
        "enable_tracking" : "Kullanıcı deneyimini geliştirmemize yardımcı olmak için aktif edin",
        "report_issue" : "Sorun bildir"
    },
    "update" : {
        "new_version_available" : "Yeni bir versiyon mevcut",
        "download" : "İndir"
    }
}


================================================
FILE: frontend/src/i18n/zh.json
================================================
{
    "generic" : {
        "retry" : "再试一次",
        "back_to_wallet" : "返回钱包",
        "close" : "关闭"
    },
    "welcome" : {
        "alreadyrunning" : "一键式矿工《One-Click Miner》 已经在运行。你不能多次运行它。",
        "click_button_to_start" : "点击下面的按钮再次开始挖矿。",
        "startmining" : "开始挖矿!",
        "makeapassword" : "请输入密码。不要丢失你的密码。",
        "password" : "密码",
        "confirmpassword" : "确认密码",
        "password_cannot_be_empty" : "请输入密码",
        "password_mismatch" : "密码不一致",
        "error_initializing" : "初始化中发生了故障"
    },
    "checks" : {
        "prerequisite" : "先行程序已运行,你可能看到弹窗弹出询问权限(可能只在任务栏中闪动)",
        "checks_failed" : "检查失败",
        "checking_mining_software" : "检查挖矿软件。。。",
        "rapidfail" : "检查是否发生快速失败",
        "compatibility" : "检查GPU兼容性。。。",
        "installing_miners" : "安装挖矿软件。。。"
    },
    "mining" : {
        "spendable_balance" : "可花费余额",
        "still_maturing" : "还在成熟中",
        "pending_pool_payout" : "等待矿池支出",
        "waiting_for_miners" : "等待矿工开始",
        "expected_earnings_24h" : "预期收益(24小时)",
        "estimating" : "估计中",
        "stop_mining" : "停止挖矿"
    },
    "sending" : {
        "send_all_to" : "发送你所有挖矿的币到",
        "youre_sending_x_to" : "你正在发送 {receivedBalance} 给",
        "youre_sending_x_in_y_txs_to" : "你将在 {receivedTxCount} 的交易中发送 {receivedBalance}",
        "receiver_address" : "接收地址",
        "wallet_password" : "钱包密码",
        "send" : "发送",
        "coins_sent" : "你的币被发送了!",
        "view_trans_plural" : "查看交易信息",
        "view_trans_singular" : "查看交易信息",
        "failed_to_send" : "发送币失败了",
        "password_required" : "请输入钱包密码",
        "invalid_address" : "无效地址",
        "script_failure" : "脚本失败",
        "could_not_calculate_fee" : "无法计算费用",
        "insufficient_funds" : "不足资金",
        "sign_failed":"无法签署交易。 检查密码",
    "send_failed" : "无法发送交易。查看debug.log以获取更多的信息"
    },
    "settings" : {
        "enable_debug" : "启用调试",
        "enable_debug_sub" : "在调试日志中包含矿工的控制台输出。可以使你的日志变得很大。",
        "auto_start" : "自动开始",
        "auto_start_sub" : "登陆电脑时启动一键式矿工《One-Click Miner》",
        "closed_source" : "使用闭源的矿工",
        "closed_source_sub" : "更好的哈希率,但是未经审核的矿工会产生开发人员的费用",
        "closed_source_warning" : "你选择使用闭源的矿工。绿币(VTC)不支持这些矿工。他们无法对其内容进行审核并且可能包含损害你的电脑的功能。",
        "save_n_restart" : "保存及重启"
    },
    "tabbar" : {
        "wallet" : "钱包",
        "send_coins" : "发送币",
        "settings" : "设置"
    },
    "tracking": { 
        "update_available" : "更新可用",
        "tracking_enabled" : "你是匿名共享使用情况统计信息",
        "disable_tracking" : "停用",
        "tracking_disabled" : "你没有共享使用情况统计信息",
        "enable_tracking" : "启用这些可以帮我们改善你的应用体验",
        "report_issue" : "报告问题"
    },
    "update" : {
        "new_version_available" : "新版本可用",
        "download" : "下载"
    }
}


================================================
FILE: frontend/src/main.js
================================================
import Vue from "vue";
import App from "./App.vue";
import VueI18n from "vue-i18n";
import * as Wails from "@wailsapp/runtime"

Vue.use(VueI18n);
Vue.config.productionTip = false;
Vue.config.devtools = true;

// Import all locales
import locale_bg from "./i18n/bg.json";
import locale_da from "./i18n/da.json";
import locale_de from "./i18n/de.json";
import locale_en from "./i18n/en.json";
import locale_es from "./i18n/es.json";
import locale_fr from "./i18n/fr.json";
import locale_hi from "./i18n/hi.json";
import locale_hr from "./i18n/hr.json";
import locale_it from "./i18n/it.json";
import locale_ja from "./i18n/ja.json";
import locale_lt from "./i18n/lt.json";
import locale_nl from "./i18n/nl.json";
import locale_no from "./i18n/no.json";
import locale_pa from "./i18n/pa.json";
import locale_pl from "./i18n/pl.json";
import locale_pt from "./i18n/pt.json";
import locale_ro from "./i18n/ro.json";
import locale_ru from "./i18n/ru.json";
import locale_sl from "./i18n/sl.json";
import locale_sv from "./i18n/sv.json";
import locale_tr from "./i18n/tr.json";
import locale_zh from "./i18n/zh.json";

Wails.Init(() => {
    window.backend.Backend.GetLocale().then(result => {

        const i18n = new VueI18n({
            locale: result, // set locale
            fallbackLocale: 'en',
            messages: {
		bg: locale_bg,
                da: locale_da,
                de: locale_de,
                en: locale_en,
                es: locale_es,
                fr: locale_fr,
                hi: locale_hi,
                hr: locale_hr,
                it: locale_it,
                ja: locale_ja,
		lt: locale_lt,
                nl: locale_nl,
                no: locale_no,
                pa: locale_pa,
                pl: locale_pl,
                pt: locale_pt,
                ro: locale_ro,
                ru: locale_ru,
                sl: locale_sl,
                sv: locale_sv,
		tr: locale_tr,
                zh: locale_zh,
            },
        });
        
        new Vue({
            i18n,
            render: h => h(App)
        }).$mount("#app");
    });
});


================================================
FILE: frontend/vue.config.js
================================================
let cssConfig = {};

if (process.env.NODE_ENV == "production") {
  cssConfig = {
    extract: {
      filename: "[name].css",
      chunkFilename: "[name].css"
    }
  };
}

module.exports = {
  chainWebpack: config => {
    let limit = 9999999999999999;
    config.module
      .rule("images")
      .test(/\.(png|gif|jpg)(\?.*)?$/i)
      .use("url-loader")
      .loader("url-loader")
      .tap(options => Object.assign(options, { limit: limit }));
    config.module
      .rule("fonts")
      .test(/\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/i)
      .use("url-loader")
      .loader("url-loader")
      .options({
        limit: limit
      });
  },
  css: cssConfig,
  configureWebpack: {
    output: {
      filename: "[name].js"
    },
    optimization: {
      splitChunks: false
    }
  },
  devServer: {
    disableHostCheck: true,
    host: "localhost"
  }
};


================================================
FILE: go.mod
================================================
module github.com/vertcoin-project/one-click-miner-vnext

go 1.22

require (
	github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a
	github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd
	github.com/btcsuite/btcd/btcec/v2 v2.3.2
	github.com/btcsuite/btcd/btcutil v1.1.5
	github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0
	github.com/btcsuite/fastsha256 v0.0.0-20160815193821-637e65642941
	github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21
	github.com/gertjaap/verthash-go v0.0.0-20210205201258-234a3a9698d1
	github.com/go-ping/ping v1.1.0
	github.com/marcsauter/single v0.0.0-20201009143647-9f8d81240be2
	github.com/tidwall/buntdb v1.3.0
	github.com/wailsapp/wails v1.16.9
	golang.org/x/crypto v0.20.0
	golang.org/x/text v0.14.0
)

require (
	github.com/Masterminds/semver v1.5.0 // indirect
	github.com/abadojack/whatlanggo v1.0.1 // indirect
	github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect
	github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect
	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
	github.com/fatih/color v1.16.0 // indirect
	github.com/go-playground/colors v1.2.0 // indirect
	github.com/google/uuid v1.2.0 // indirect
	github.com/gorilla/websocket v1.5.1 // indirect
	github.com/jackmordaunt/icns v1.0.0 // indirect
	github.com/kennygrant/sanitize v1.2.4 // indirect
	github.com/leaanthony/slicer v1.6.0 // indirect
	github.com/leaanthony/spinner v0.5.3 // indirect
	github.com/leaanthony/synx v0.1.0 // indirect
	github.com/leaanthony/wincursor v0.1.0 // indirect
	github.com/mattn/go-colorable v0.1.13 // indirect
	github.com/mattn/go-isatty v0.0.20 // indirect
	github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
	github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
	github.com/pkg/errors v0.9.1 // indirect
	github.com/sirupsen/logrus v1.9.3 // indirect
	github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba // indirect
	github.com/tidwall/btree v1.7.0 // indirect
	github.com/tidwall/gjson v1.17.1 // indirect
	github.com/tidwall/grect v0.1.4 // indirect
	github.com/tidwall/match v1.1.1 // indirect
	github.com/tidwall/pretty v1.2.0 // indirect
	github.com/tidwall/rtred v0.1.2 // indirect
	github.com/tidwall/tinyqueue v0.1.1 // indirect
	golang.org/x/image v0.15.0 // indirect
	golang.org/x/net v0.21.0 // indirect
	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
	golang.org/x/sys v0.17.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)


================================================
FILE: go.sum
================================================
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a h1:D+aZah+k14Gn6kmL7eKxoo/4Dr/lK3ChBcwce2+SQP4=
github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a/go.mod h1:oTGdE7/DlWIr23G0IKW3OXK9wZ5Hw1GGiaJFccTvZi4=
github.com/abadojack/whatlanggo v1.0.1 h1:19N6YogDnf71CTHm3Mp2qhYfkRdyvbgwWdd2EPxJRG4=
github.com/abadojack/whatlanggo v1.0.1/go.mod h1:66WiQbSbJBIlOZMsvbKe5m6pzQovxCH9B/K8tQB2uoc=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd h1:js1gPwhcFflTZ7Nzl7WHaOTlTr5hIrR4n1NM4v9n4Kw=
github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A=
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8=
github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/fastsha256 v0.0.0-20160815193821-637e65642941 h1:kij1x2aL7VE6gtx8KMIt8PGPgI5GV9LgtHFG5KaEMPY=
github.com/btcsuite/fastsha256 v0.0.0-20160815193821-637e65642941/go.mod h1:QcFA8DZHtuIAdYKCq/BzELOaznRsCvwf4zTPmaYwaig=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do=
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/gertjaap/verthash-go v0.0.0-20210205201258-234a3a9698d1 h1:vSHBMfat507JbiOZdNICsiCUmoydc3oLzkOTIb/s+DY=
github.com/gertjaap/verthash-go v0.0.0-20210205201258-234a3a9698d1/go.mod h1:YNFDXNhMlbkK6pJhNpLWgXWgsU+ISV8AWGdLC7RFlho=
github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
github.com/go-playground/colors v1.2.0 h1:0EdjTXKrr2g1L/LQTYtIqabeHpZuGZz1U4osS1T8+5M=
github.com/go-playground/colors v1.2.0/go.mod h1:miw1R2JIE19cclPxsXqNdzLZsk4DP4iF+m88bRc7kfM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4
Download .txt
gitextract_6sylzzmb/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1-bug.yml
│   │   └── 2-feature_request.yml
│   └── workflows/
│       └── golangci-lint.yml
├── .gitignore
├── LICENSE
├── README.md
├── backend/
│   ├── backend.go
│   ├── checks.go
│   ├── languages.go
│   ├── mining.go
│   ├── p2pool.go
│   ├── settings.go
│   ├── tracking.go
│   ├── update.go
│   └── wallet.go
├── build.bat
├── build.sh
├── frontend/
│   ├── .gitignore
│   ├── README.md
│   ├── babel.config.js
│   ├── package.json
│   ├── package.json.md5
│   ├── src/
│   │   ├── App.vue
│   │   ├── assets/
│   │   │   └── css/
│   │   │       └── main.css
│   │   ├── components/
│   │   │   ├── Checks.vue
│   │   │   ├── Mining.vue
│   │   │   ├── Send.vue
│   │   │   ├── Settings.vue
│   │   │   ├── TabBar.vue
│   │   │   ├── Tracking.vue
│   │   │   ├── Update.vue
│   │   │   └── Welcome.vue
│   │   ├── i18n/
│   │   │   ├── README.md
│   │   │   ├── bg.json
│   │   │   ├── da.json
│   │   │   ├── de.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── hi.json
│   │   │   ├── hr.json
│   │   │   ├── it.json
│   │   │   ├── ja.json
│   │   │   ├── lt.json
│   │   │   ├── nl.json
│   │   │   ├── no.json
│   │   │   ├── pa.json
│   │   │   ├── pl.json
│   │   │   ├── pt.json
│   │   │   ├── ro.json
│   │   │   ├── ru.json
│   │   │   ├── sl.json
│   │   │   ├── sv.json
│   │   │   ├── tr.json
│   │   │   └── zh.json
│   │   └── main.js
│   └── vue.config.js
├── go.mod
├── go.sum
├── keyfile/
│   └── keyfile.go
├── logging/
│   └── log.go
├── main.go
├── miners/
│   ├── ccminer.go
│   ├── cryptodredge.go
│   ├── lyclminer.go
│   ├── miners.go
│   ├── teamredminer.go
│   └── verthashminer.go
├── miners.json
├── networks/
│   └── networks.go
├── p2pool_nodes.json
├── ping/
│   └── ping.go
├── pools/
│   ├── miningpoolsweden.go
│   ├── p2pool.go
│   ├── p2proxy.go
│   ├── pool.go
│   ├── suprnova.go
│   ├── zergpool.go
│   └── zpool.go
├── prerequisites/
│   ├── amdgpudriver.go
│   ├── msvcrt2013.go
│   ├── nvidiadriver.go
│   └── prerequisites.go
├── project.json
├── tracking/
│   ├── matomo.go
│   └── version.go
├── util/
│   ├── autostart.go
│   ├── bech32/
│   │   └── bech32.go
│   ├── gpus.go
│   ├── gpus_test.go
│   ├── miners_linux.go
│   ├── miners_windows.go
│   ├── util.go
│   ├── versioncheck.go
│   └── versioncheck_test.go
└── wallet/
    ├── signsend.go
    ├── sigops.go
    └── wallet.go
Download .txt
SYMBOL INDEX (328 symbols across 44 files)

FILE: backend/backend.go
  type Backend (line 16) | type Backend struct
    method ResetPool (line 65) | func (m *Backend) ResetPool() {
    method WailsInit (line 69) | func (m *Backend) WailsInit(runtime *wails.Runtime) error {
    method OpenDownloadUrl (line 79) | func (m *Backend) OpenDownloadUrl(url string) {
    method AlreadyRunning (line 83) | func (m *Backend) AlreadyRunning() bool {
    method Close (line 87) | func (m *Backend) Close() {
  function NewBackend (line 37) | func NewBackend(alreadyRunning bool) (*Backend, error) {

FILE: backend/checks.go
  method PerformChecks (line 18) | func (m *Backend) PerformChecks() string {
  method CheckGPUCompatibility (line 121) | func (m *Backend) CheckGPUCompatibility() error {
  method CreateMinerBinaries (line 147) | func (m *Backend) CreateMinerBinaries() ([]*miners.BinaryRunner, error) {
  method InstallMinerBinaries (line 200) | func (m *Backend) InstallMinerBinaries() error {
  method BackendServerSelector (line 218) | func (m *Backend) BackendServerSelector() {

FILE: backend/languages.go
  function init (line 39) | func init() {
  method GetLocale (line 51) | func (m *Backend) GetLocale() string {

FILE: backend/mining.go
  method GetArgs (line 13) | func (m *Backend) GetArgs() miners.BinaryArguments {
  method GetPoolFee (line 28) | func (m *Backend) GetPoolFee() string {
  method GetPoolName (line 32) | func (m *Backend) GetPoolName() string {
  method PayoutInformation (line 36) | func (m *Backend) PayoutInformation() {
  method StartMining (line 40) | func (m *Backend) StartMining() bool {
  method RefreshBalance (line 195) | func (m *Backend) RefreshBalance() {
  method RefreshHashrate (line 200) | func (m *Backend) RefreshHashrate() {
  method RefreshRunningState (line 205) | func (m *Backend) RefreshRunningState() {
  method StopMining (line 210) | func (m *Backend) StopMining() bool {

FILE: backend/p2pool.go
  method SelectP2PoolNode (line 8) | func (m *Backend) SelectP2PoolNode() {

FILE: backend/settings.go
  method getSetting (line 16) | func (m *Backend) getSetting(name string) bool {
  method setSetting (line 29) | func (m *Backend) setSetting(name string, value bool) {
  method setIntSetting (line 43) | func (m *Backend) setIntSetting(name string, value int) {
  method getIntSetting (line 54) | func (m *Backend) getIntSetting(name string) int {
  method GetPool (line 68) | func (m *Backend) GetPool() int {
  method SetPool (line 85) | func (m *Backend) SetPool(pool int) {
  method SetEnableIntegrated (line 95) | func (m *Backend) SetEnableIntegrated(enabled bool) {
  method GetEnableIntegrated (line 99) | func (m *Backend) GetEnableIntegrated() bool {
  type PoolChoice (line 103) | type PoolChoice struct
  method GetPools (line 108) | func (m *Backend) GetPools() []PoolChoice {
  method GetTestnet (line 119) | func (m *Backend) GetTestnet() bool {
  method SetTestnet (line 124) | func (m *Backend) SetTestnet(newTestnet bool) {
  method GetSkipVerthashExtendedVerify (line 138) | func (m *Backend) GetSkipVerthashExtendedVerify() bool {
  method SetSkipVerthashExtendedVerify (line 143) | func (m *Backend) SetSkipVerthashExtendedVerify(newVerthashVerify bool) {
  method GetClosedSource (line 148) | func (m *Backend) GetClosedSource() bool {
  method SetClosedSource (line 153) | func (m *Backend) SetClosedSource(newClosedSource bool) {
  method GetDebugging (line 158) | func (m *Backend) GetDebugging() bool {
  method SetDebugging (line 162) | func (m *Backend) SetDebugging(newDebugging bool) {
  method GetAutoStart (line 167) | func (m *Backend) GetAutoStart() bool {
  method SetAutoStart (line 171) | func (m *Backend) SetAutoStart(newAutoStart bool) {
  method GetVersion (line 175) | func (m *Backend) GetVersion() string {
  method PrerequisiteProxyLoop (line 179) | func (m *Backend) PrerequisiteProxyLoop() {

FILE: backend/tracking.go
  method EnableTracking (line 8) | func (m *Backend) EnableTracking() {
  method DisableTracking (line 12) | func (m *Backend) DisableTracking() {
  method TrackingEnabled (line 16) | func (m *Backend) TrackingEnabled() string {
  method ReportIssue (line 23) | func (m *Backend) ReportIssue() {

FILE: backend/update.go
  method UpdateAvailable (line 10) | func (m *Backend) UpdateAvailable() bool {
  method VersionDetails (line 19) | func (m *Backend) VersionDetails() []string {
  method UpdateLoop (line 24) | func (m *Backend) UpdateLoop() {

FILE: backend/wallet.go
  method WalletInitialized (line 14) | func (m *Backend) WalletInitialized() int {
  method SendSweep (line 33) | func (m *Backend) SendSweep(password string) []string {
  method ShowTx (line 70) | func (m *Backend) ShowTx(txid string) {
  type PrepareResult (line 74) | type PrepareResult struct
  method PrepareSweep (line 79) | func (m *Backend) PrepareSweep(addr string) string {
  method Address (line 106) | func (m *Backend) Address() string {
  method InitWallet (line 110) | func (m *Backend) InitWallet(password string) bool {

FILE: keyfile/keyfile.go
  function KeyFileValid (line 23) | func KeyFileValid() bool {
  function CreateKeyFile (line 27) | func CreateKeyFile(pass string) error {
  function keyFile (line 59) | func keyFile() string {
  function loadPublicKey (line 63) | func loadPublicKey() []byte {
  function GetPublicKey (line 80) | func GetPublicKey() []byte {
  function GetAddress (line 85) | func GetAddress() string {
  function GetScript (line 90) | func GetScript() ([]byte, error) {
  function LoadPrivateKey (line 97) | func LoadPrivateKey(password string) ([]byte, error) {
  function TestPassword (line 129) | func TestPassword(password string) bool {

FILE: logging/log.go
  type LogLevel (line 23) | type LogLevel
  constant LogLevelError (line 26) | LogLevelError   LogLevel = 0
  constant LogLevelWarning (line 27) | LogLevelWarning LogLevel = 1
  constant LogLevelInfo (line 28) | LogLevelInfo    LogLevel = 2
  constant LogLevelDebug (line 29) | LogLevelDebug   LogLevel = 3
  function SetLogLevel (line 34) | func SetLogLevel(newLevel int) {
  function SetLogFile (line 38) | func SetLogFile(logFile io.Writer) {
  function getPrefix (line 48) | func getPrefix(level string) string {
  function Fatalln (line 52) | func Fatalln(args ...interface{}) {
  function Fatalf (line 56) | func Fatalf(format string, args ...interface{}) {
  function Fatal (line 60) | func Fatal(args ...interface{}) {
  function Debugf (line 64) | func Debugf(format string, args ...interface{}) {
  function Infof (line 70) | func Infof(format string, args ...interface{}) {
  function Warnf (line 76) | func Warnf(format string, args ...interface{}) {
  function Errorf (line 82) | func Errorf(format string, args ...interface{}) {
  function Debugln (line 88) | func Debugln(args ...interface{}) {
  function Infoln (line 95) | func Infoln(args ...interface{}) {
  function Warnln (line 102) | func Warnln(args ...interface{}) {
  function Errorln (line 109) | func Errorln(args ...interface{}) {
  function Debug (line 116) | func Debug(args ...interface{}) {
  function Info (line 123) | func Info(args ...interface{}) {
  function Warn (line 130) | func Warn(args ...interface{}) {
  function Error (line 137) | func Error(args ...interface{}) {

FILE: main.go
  function main (line 29) | func main() {

FILE: miners/ccminer.go
  type CCMinerImpl (line 14) | type CCMinerImpl struct
    method Configure (line 25) | func (l *CCMinerImpl) Configure(args BinaryArguments) error {
    method ParseOutput (line 29) | func (l *CCMinerImpl) ParseOutput(line string) {
    method HashRate (line 75) | func (l *CCMinerImpl) HashRate() uint64 {
    method ConstructCommandlineArgs (line 85) | func (l *CCMinerImpl) ConstructCommandlineArgs(args BinaryArguments) [...
    method AvailableGPUs (line 89) | func (l *CCMinerImpl) AvailableGPUs() int8 {
  function NewCCMinerImpl (line 21) | func NewCCMinerImpl(br *BinaryRunner) MinerImpl {

FILE: miners/cryptodredge.go
  type CryptoDredgeMinerImpl (line 15) | type CryptoDredgeMinerImpl struct
    method Configure (line 26) | func (l *CryptoDredgeMinerImpl) Configure(args BinaryArguments) error {
    method ParseOutput (line 30) | func (l *CryptoDredgeMinerImpl) ParseOutput(line string) {
    method HashRate (line 77) | func (l *CryptoDredgeMinerImpl) HashRate() uint64 {
    method ConstructCommandlineArgs (line 87) | func (l *CryptoDredgeMinerImpl) ConstructCommandlineArgs(args BinaryAr...
    method AvailableGPUs (line 91) | func (l *CryptoDredgeMinerImpl) AvailableGPUs() int8 {
  function NewCryptoDredgeMinerImpl (line 22) | func NewCryptoDredgeMinerImpl(br *BinaryRunner) MinerImpl {

FILE: miners/lyclminer.go
  type LyclMinerImpl (line 19) | type LyclMinerImpl struct
    method Configure (line 29) | func (l *LyclMinerImpl) Configure(args BinaryArguments) error {
    method ParseOutput (line 91) | func (l *LyclMinerImpl) ParseOutput(line string) {
    method HashRate (line 127) | func (l *LyclMinerImpl) HashRate() uint64 {
    method ConstructCommandlineArgs (line 137) | func (l *LyclMinerImpl) ConstructCommandlineArgs(args BinaryArguments)...
    method AvailableGPUs (line 141) | func (l *LyclMinerImpl) AvailableGPUs() int8 {
  function NewLyclMinerImpl (line 25) | func NewLyclMinerImpl(br *BinaryRunner) MinerImpl {

FILE: miners/miners.go
  type MinerBinary (line 22) | type MinerBinary struct
  function GetMinerBinaries (line 36) | func GetMinerBinaries() []MinerBinary {
  type MinerImpl (line 57) | type MinerImpl interface
  function NewBinaryRunner (line 65) | func NewBinaryRunner(m MinerBinary, prerequisiteInstall chan bool) (*Bin...
  type BinaryArguments (line 83) | type BinaryArguments struct
  type BinaryRunner (line 90) | type BinaryRunner struct
    method logPrefix (line 102) | func (b *BinaryRunner) logPrefix() string {
    method Stop (line 106) | func (b *BinaryRunner) Stop() error {
    method WaitUntilStopped (line 131) | func (b *BinaryRunner) WaitUntilStopped() {
    method IsRunning (line 145) | func (b *BinaryRunner) IsRunning() bool {
    method Install (line 149) | func (b *BinaryRunner) Install() error {
    method CheckRunning (line 181) | func (b *BinaryRunner) CheckRunning() RunningState {
    method HashRate (line 203) | func (b *BinaryRunner) HashRate() uint64 {
    method restart (line 207) | func (b *BinaryRunner) restart() error {
    method Start (line 212) | func (b *BinaryRunner) Start(args BinaryArguments) error {
    method unpackDir (line 237) | func (b *BinaryRunner) unpackDir() string {
    method downloadPath (line 241) | func (b *BinaryRunner) downloadPath() string {
    method launch (line 245) | func (b *BinaryRunner) launch(params []string, wait bool) error {
    method unpack (line 286) | func (b *BinaryRunner) unpack() error {
    method findExecutable (line 315) | func (b *BinaryRunner) findExecutable() string {
    method ensureAvailable (line 333) | func (b *BinaryRunner) ensureAvailable() error {
    method download (line 375) | func (b *BinaryRunner) download() error {
  type RunningState (line 173) | type RunningState
  constant RunningStateRunning (line 176) | RunningStateRunning    RunningState = 0
  constant RunningStateRestarting (line 177) | RunningStateRestarting RunningState = 1
  constant RunningStateRapidFail (line 178) | RunningStateRapidFail  RunningState = 2

FILE: miners/teamredminer.go
  type TeamRedMinerImpl (line 14) | type TeamRedMinerImpl struct
    method Configure (line 25) | func (l *TeamRedMinerImpl) Configure(args BinaryArguments) error {
    method ParseOutput (line 29) | func (l *TeamRedMinerImpl) ParseOutput(line string) {
    method HashRate (line 74) | func (l *TeamRedMinerImpl) HashRate() uint64 {
    method ConstructCommandlineArgs (line 84) | func (l *TeamRedMinerImpl) ConstructCommandlineArgs(args BinaryArgumen...
    method AvailableGPUs (line 88) | func (l *TeamRedMinerImpl) AvailableGPUs() int8 {
  function NewTeamRedMinerImpl (line 21) | func NewTeamRedMinerImpl(br *BinaryRunner) MinerImpl {

FILE: miners/verthashminer.go
  type VerthashMinerImpl (line 21) | type VerthashMinerImpl struct
    method generateTempConf (line 28) | func (l *VerthashMinerImpl) generateTempConf() error {
    method Configure (line 48) | func (l *VerthashMinerImpl) Configure(args BinaryArguments) error {
    method ParseOutput (line 145) | func (l *VerthashMinerImpl) ParseOutput(line string) {
    method HashRate (line 185) | func (l *VerthashMinerImpl) HashRate() uint64 {
    method ConstructCommandlineArgs (line 199) | func (l *VerthashMinerImpl) ConstructCommandlineArgs(args BinaryArgume...
    method AvailableGPUs (line 203) | func (l *VerthashMinerImpl) AvailableGPUs() int8 {
  function NewVerthashMinerImpl (line 44) | func NewVerthashMinerImpl(br *BinaryRunner) MinerImpl {

FILE: networks/networks.go
  type Network (line 3) | type Network struct
  function SetNetwork (line 17) | func SetNetwork(testnet bool) {

FILE: ping/ping.go
  type Conditions (line 17) | type Conditions struct
  type SelectedNode (line 33) | type SelectedNode struct
  type Nodes (line 38) | type Nodes struct
  function GetSelectedNode (line 47) | func GetSelectedNode(testnet bool) {
  function selector (line 58) | func selector() {
  function PingNodes (line 132) | func PingNodes(NodeList []Nodes) error {
  function GetNodeInformation (line 170) | func GetNodeInformation(NodeURL string) (jsonPayload map[string]interfac...
  function CheckFee (line 181) | func CheckFee(jsonPayload map[string]interface{}) bool {
  function CheckCurrentMiners (line 195) | func CheckCurrentMiners(jsonPayload map[string]interface{}) bool {

FILE: pools/miningpoolsweden.go
  type MiningpoolSweden (line 12) | type MiningpoolSweden struct
    method GetPendingPayout (line 22) | func (p *MiningpoolSweden) GetPendingPayout() uint64 {
    method GetStratumUrl (line 36) | func (p *MiningpoolSweden) GetStratumUrl() string {
    method GetUsername (line 40) | func (p *MiningpoolSweden) GetUsername() string {
    method GetPassword (line 44) | func (p *MiningpoolSweden) GetPassword() string {
    method GetID (line 48) | func (p *MiningpoolSweden) GetID() int {
    method GetName (line 52) | func (p *MiningpoolSweden) GetName() string {
    method GetFee (line 56) | func (p *MiningpoolSweden) GetFee() float64 {
    method OpenBrowserPayoutInfo (line 60) | func (p *MiningpoolSweden) OpenBrowserPayoutInfo(addr string) {
  function NewMiningpoolSweden (line 18) | func NewMiningpoolSweden(addr string) *MiningpoolSweden {

FILE: pools/p2pool.go
  type P2Pool (line 15) | type P2Pool struct
    method GetPendingPayout (line 27) | func (p *P2Pool) GetPendingPayout() uint64 {
    method GetStratumUrl (line 48) | func (p *P2Pool) GetStratumUrl() string {
    method GetUsername (line 52) | func (p *P2Pool) GetUsername() string {
    method GetPassword (line 56) | func (p *P2Pool) GetPassword() string {
    method GetID (line 60) | func (p *P2Pool) GetID() int {
    method GetName (line 64) | func (p *P2Pool) GetName() string {
    method GetFee (line 68) | func (p *P2Pool) GetFee() (fee float64) {
    method OpenBrowserPayoutInfo (line 91) | func (p *P2Pool) OpenBrowserPayoutInfo(addr string) {
  function NewP2Pool (line 23) | func NewP2Pool(addr string) *P2Pool {

FILE: pools/p2proxy.go
  type P2Proxy (line 13) | type P2Proxy struct
    method GetPendingPayout (line 21) | func (p *P2Proxy) GetPendingPayout() uint64 {
    method GetStratumUrl (line 35) | func (p *P2Proxy) GetStratumUrl() string {
    method GetUsername (line 39) | func (p *P2Proxy) GetUsername() string {
    method GetPassword (line 43) | func (p *P2Proxy) GetPassword() string {
    method GetID (line 47) | func (p *P2Proxy) GetID() int {
    method GetName (line 51) | func (p *P2Proxy) GetName() string {
    method GetFee (line 55) | func (p *P2Proxy) GetFee() float64 {
    method OpenBrowserPayoutInfo (line 59) | func (p *P2Proxy) OpenBrowserPayoutInfo(addr string) {}
  function NewP2Proxy (line 17) | func NewP2Proxy(addr string) *P2Proxy {

FILE: pools/pool.go
  type Pool (line 3) | type Pool interface
  function GetPools (line 14) | func GetPools(addr string, testnet bool) []Pool {
  function GetPool (line 29) | func GetPool(pool int, addr string, testnet bool) Pool {

FILE: pools/suprnova.go
  type Suprnova (line 12) | type Suprnova struct
    method GetPendingPayout (line 22) | func (p *Suprnova) GetPendingPayout() uint64 {
    method GetStratumUrl (line 52) | func (p *Suprnova) GetStratumUrl() string {
    method GetUsername (line 56) | func (p *Suprnova) GetUsername() string {
    method GetPassword (line 60) | func (p *Suprnova) GetPassword() string {
    method GetID (line 64) | func (p *Suprnova) GetID() int {
    method GetName (line 68) | func (p *Suprnova) GetName() string {
    method GetFee (line 72) | func (p *Suprnova) GetFee() float64 {
    method OpenBrowserPayoutInfo (line 76) | func (p *Suprnova) OpenBrowserPayoutInfo(addr string) {
  function NewSuprnova (line 18) | func NewSuprnova(addr string) *Suprnova {

FILE: pools/zergpool.go
  type Zergpool (line 12) | type Zergpool struct
    method GetPendingPayout (line 22) | func (p *Zergpool) GetPendingPayout() uint64 {
    method GetStratumUrl (line 36) | func (p *Zergpool) GetStratumUrl() string {
    method GetUsername (line 40) | func (p *Zergpool) GetUsername() string {
    method GetPassword (line 44) | func (p *Zergpool) GetPassword() string {
    method GetID (line 48) | func (p *Zergpool) GetID() int {
    method GetName (line 52) | func (p *Zergpool) GetName() string {
    method GetFee (line 56) | func (p *Zergpool) GetFee() float64 {
    method OpenBrowserPayoutInfo (line 60) | func (p *Zergpool) OpenBrowserPayoutInfo(addr string) {
  function NewZergpool (line 18) | func NewZergpool(addr string) *Zergpool {

FILE: pools/zpool.go
  type zpool (line 12) | type zpool struct
    method GetPendingPayout (line 22) | func (p *zpool) GetPendingPayout() uint64 {
    method GetStratumUrl (line 36) | func (p *zpool) GetStratumUrl() string {
    method GetUsername (line 40) | func (p *zpool) GetUsername() string {
    method GetPassword (line 44) | func (p *zpool) GetPassword() string {
    method GetID (line 48) | func (p *zpool) GetID() int {
    method GetName (line 52) | func (p *zpool) GetName() string {
    method GetFee (line 56) | func (p *zpool) GetFee() float64 {
    method OpenBrowserPayoutInfo (line 60) | func (p *zpool) OpenBrowserPayoutInfo(addr string) {
  function Newzpool (line 18) | func Newzpool(addr string) *zpool {

FILE: prerequisites/amdgpudriver.go
  function checkAmdgpuDriverInstalled (line 10) | func checkAmdgpuDriverInstalled() error {

FILE: prerequisites/msvcrt2013.go
  function vcrt2013Installed (line 18) | func vcrt2013Installed() bool {
  function installVCRT2013 (line 30) | func installVCRT2013(install chan bool) error {
  function vcrt2013DownloadPath (line 53) | func vcrt2013DownloadPath() string {
  function checkVCRT2013Hash (line 63) | func checkVCRT2013Hash() error {
  function downloadVCRT2013 (line 75) | func downloadVCRT2013() error {

FILE: prerequisites/nvidiadriver.go
  function checkNvidiaDriverInstalled (line 10) | func checkNvidiaDriverInstalled() error {

FILE: prerequisites/prerequisites.go
  function Install (line 7) | func Install(name string, install chan bool) error {

FILE: tracking/matomo.go
  type TrackingRequest (line 20) | type TrackingRequest struct
  function Enable (line 30) | func Enable() {
  function IsEnabled (line 35) | func IsEnabled() bool {
  function Disable (line 39) | func Disable() {
  function loadState (line 44) | func loadState() {
  function saveState (line 53) | func saveState() {
  function StartTracker (line 64) | func StartTracker() {
  function Stop (line 110) | func Stop() {
  function Track (line 115) | func Track(req TrackingRequest) {
  function visitorId (line 121) | func visitorId() string {
  function userAgent (line 143) | func userAgent() string {
  function GetVersion (line 150) | func GetVersion() string {

FILE: util/autostart.go
  function init (line 15) | func init() {
  function GetAutoStart (line 55) | func GetAutoStart() bool {
  function SetAutoStart (line 59) | func SetAutoStart(autoStart bool) string {

FILE: util/bech32/bech32.go
  constant charset (line 11) | charset = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"
  function Bytes8to5 (line 28) | func Bytes8to5(input []byte) []byte {
  function Bytes5to8 (line 35) | func Bytes5to8(input []byte) ([]byte, error) {
  function ByteSquasher (line 44) | func ByteSquasher(input []byte, inputWidth, outputWidth uint32) ([]byte,...
  function SquashedBytesToString (line 76) | func SquashedBytesToString(input []byte) (string, error) {
  function StringToSquashedBytes (line 89) | func StringToSquashedBytes(input string) ([]byte, error) {
  function PolyMod (line 104) | func PolyMod(values []byte) uint32 {
  function HRPExpand (line 128) | func HRPExpand(input string) []byte {
  function CreateChecksum (line 148) | func CreateChecksum(hrp string, data []byte) []byte {
  function VerifyChecksum (line 167) | func VerifyChecksum(hrp string, data []byte) bool {
  function Encode (line 176) | func Encode(hrp string, data []byte) string {
  function EncodeSquashed (line 185) | func EncodeSquashed(hrp string, data []byte) string {
  function Decode (line 199) | func Decode(adr string) (string, []byte, error) {
  function DecodeSquashed (line 213) | func DecodeSquashed(adr string) (string, []byte, error) {
  function GetHRP (line 257) | func GetHRP(adr string) (string, error) {
  function SegWitAddressEncode (line 268) | func SegWitAddressEncode(hrp string, data []byte) (string, error) {
  function SegWitAddressDecode (line 316) | func SegWitAddressDecode(adr string) ([]byte, error) {
  function SegWitV0Encode (line 357) | func SegWitV0Encode(hrp string, data []byte) (string, error) {

FILE: util/gpus.go
  type GPUType (line 13) | type GPUType
  constant GPUTypeOther (line 16) | GPUTypeOther  GPUType = 0
  constant GPUTypeAMD (line 17) | GPUTypeAMD    GPUType = 1
  constant GPUTypeNVidia (line 18) | GPUTypeNVidia GPUType = 2
  constant GPUTypeIntel (line 19) | GPUTypeIntel  GPUType = 3
  type GPU (line 22) | type GPU struct
  type KnownGPU (line 27) | type KnownGPU struct
  function init (line 49) | func init() {
  function GetGPUsFromStrings (line 59) | func GetGPUsFromStrings(names []string) []GPU {
  function GetGPUs (line 79) | func GetGPUs() []GPU {

FILE: util/gpus_test.go
  function TestNvidia (line 8) | func TestNvidia(t *testing.T) {
  function TestAMD (line 19) | func TestAMD(t *testing.T) {
  function TestInvalid (line 29) | func TestInvalid(t *testing.T) {

FILE: util/miners_linux.go
  function PrepareBackgroundCommand (line 9) | func PrepareBackgroundCommand(cmd *exec.Cmd) {

FILE: util/miners_windows.go
  function PrepareBackgroundCommand (line 10) | func PrepareBackgroundCommand(cmd *exec.Cmd) {

FILE: util/util.go
  constant APP_NAME (line 26) | APP_NAME string = "vertcoin-ocm"
  function DataDirectory (line 28) | func DataDirectory() string {
  function ReplaceInFile (line 39) | func ReplaceInFile(file string, find string, replace string) error {
  type BlocksResponse (line 54) | type BlocksResponse struct
  type InsightPagination (line 59) | type InsightPagination struct
  type Block (line 64) | type Block struct
  type BlockResponse (line 69) | type BlockResponse struct
  type getInfoResponse (line 73) | type getInfoResponse struct
  type VerthashMinerDeviceConfig (line 79) | type VerthashMinerDeviceConfig struct
  function CheckBackendStatus (line 88) | func CheckBackendStatus(backend string) bool {
  function GetDifficulty (line 109) | func GetDifficulty() float64 {
  function GetTipHeight (line 119) | func GetTipHeight() int64 {
  function GetNetHash (line 129) | func GetNetHash() uint64 {
  function GetCoinsPerDay (line 139) | func GetCoinsPerDay(th int64) float64 {
  function FileExists (line 159) | func FileExists(filename string) bool {
  function GetJson (line 167) | func GetJson(url string, target interface{}) error {
  function PostJson (line 177) | func PostJson(url string, payload interface{}, target interface{}) error {
  function OpenBrowser (line 199) | func OpenBrowser(url string) {
  function UnpackZip (line 217) | func UnpackZip(archive, unpackPath string) error {
  function UnpackTar (line 266) | func UnpackTar(archive, unpackPath string) error {
  function ShaSum (line 318) | func ShaSum(file string) ([]byte, error) {
  function ParseVerthashMinerDeviceCfg (line 343) | func ParseVerthashMinerDeviceCfg(cfg string) map[int]VerthashMinerDevice...

FILE: util/versioncheck.go
  type GithubRelease (line 11) | type GithubRelease struct
  function init (line 21) | func init() {
  function GetLatestRelease (line 28) | func GetLatestRelease() (GithubRelease, error) {
  function VersionStringToNumeric (line 37) | func VersionStringToNumeric(ver string) int64 {

FILE: util/versioncheck_test.go
  function TestVersionStrings (line 8) | func TestVersionStrings(t *testing.T) {

FILE: wallet/signsend.go
  method SignMyInputs (line 18) | func (w *Wallet) SignMyInputs(tx *wire.MsgTx, password string) error {
  type txSend (line 54) | type txSend struct
  type txSendReply (line 58) | type txSendReply struct
  method Send (line 62) | func (w *Wallet) Send(tx *wire.MsgTx) (string, error) {

FILE: wallet/sigops.go
  function CountSigOps (line 14) | func CountSigOps(tx *btcutil.Tx) int {
  method GetSigOpCost (line 35) | func (w *Wallet) GetSigOpCost(tx *btcutil.Tx, pkScript []byte, isCoinBas...
  method CountP2SHSigOps (line 62) | func (w *Wallet) CountP2SHSigOps(tx *btcutil.Tx, isCoinBaseTx bool) (int...

FILE: wallet/wallet.go
  type Wallet (line 22) | type Wallet struct
    method Utxos (line 50) | func (w *Wallet) Utxos() ([]Utxo, error) {
    method PrepareSweep (line 60) | func (w *Wallet) PrepareSweep(addr string) ([]*wire.MsgTx, error) {
    method Update (line 211) | func (w *Wallet) Update() {
    method GetBalance (line 226) | func (w *Wallet) GetBalance() (bal uint64, balImmature uint64) {
  type Utxo (line 30) | type Utxo struct
  function NewWallet (line 41) | func NewWallet(addr string, script []byte) (*Wallet, error) {
  function DirectWPKHScriptFromPKH (line 198) | func DirectWPKHScriptFromPKH(pkh [20]byte) []byte {
  type BalanceResponse (line 205) | type BalanceResponse struct
Condensed preview — 98 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (367K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/1-bug.yml",
    "chars": 3382,
    "preview": "name: Bug report\ndescription: Submit a new bug report.\nlabels: [bug]\nbody:\n  - type: markdown\n    attributes:\n      valu"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2-feature_request.yml",
    "chars": 1256,
    "preview": "name: Feature Request\ndescription: Suggest an idea for this project.\nlabels: [feature]\nbody:\n  - type: checkboxes\n    at"
  },
  {
    "path": ".github/workflows/golangci-lint.yml",
    "chars": 1023,
    "preview": "name: golangci-lint\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - master\npermissions:\n "
  },
  {
    "path": ".gitignore",
    "chars": 85,
    "preview": "vertcoin-ocm\n*.zip\n.vscode/\nvertcoin-ocm.exe\n*.code-workspace\n*.exe\n*.manifest\n*.syso"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "Copyright (C) 2019-2021 Gert-Jaap Glasbergen\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 1692,
    "preview": "# One-Click Miner\n\nThe One-Click Miner allows cryptocurrency enthusiasts to get into mining with minimal effort. When yo"
  },
  {
    "path": "backend/backend.go",
    "chars": 2237,
    "preview": "package backend\n\nimport (\n\t\"path/filepath\"\n\n\t\"github.com/tidwall/buntdb\"\n\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/"
  },
  {
    "path": "backend/checks.go",
    "chars": 6676,
    "preview": "package backend\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"time\"\n\n\tverthash \"github.com/gertjaap/vertha"
  },
  {
    "path": "backend/languages.go",
    "chars": 1262,
    "preview": "package backend\n\nimport (\n\t\"github.com/cloudfoundry/jibber_jabber\"\n\t\"github.com/vertcoin-project/one-click-miner-vnext/l"
  },
  {
    "path": "backend/mining.go",
    "chars": 5479,
    "preview": "package backend\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n\t\"github.com/vert"
  },
  {
    "path": "backend/p2pool.go",
    "chars": 381,
    "preview": "package backend\n\nimport (\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n\t\"github.com/vertcoin-project/one"
  },
  {
    "path": "backend/settings.go",
    "chars": 4649,
    "preview": "package backend\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"strconv\"\n\n\t\"github.com/tidwall/buntdb\"\n\t\"github.com/vertcoin-project/one"
  },
  {
    "path": "backend/tracking.go",
    "chars": 549,
    "preview": "package backend\n\nimport (\n\t\"github.com/vertcoin-project/one-click-miner-vnext/tracking\"\n\t\"github.com/vertcoin-project/on"
  },
  {
    "path": "backend/update.go",
    "chars": 762,
    "preview": "package backend\n\nimport (\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/tracking\"\n\t\"github.com/vertcoin-p"
  },
  {
    "path": "backend/wallet.go",
    "chars": 2965,
    "preview": "package backend\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/keyfile\"\n\t\"github.com/vertcoin-pro"
  },
  {
    "path": "build.bat",
    "chars": 896,
    "preview": "@ECHO OFF\nIF NOT \"%~1\"==\"\" GOTO :BUILD\n\n:USAGE\nECHO Usage: %~nx0 version\nGOTO :EOF\n\n:BUILD\nSET ver=%1\ngit describe --alw"
  },
  {
    "path": "build.sh",
    "chars": 446,
    "preview": "#!/bin/bash\nGITVER=$(git describe --always --long --dirty)\nmv tracking/version.go tracking/version.go.dev\necho \"package "
  },
  {
    "path": "frontend/.gitignore",
    "chars": 214,
    "preview": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": "frontend/README.md",
    "chars": 368,
    "preview": "# vue basic\n\n## Project setup\n\n```\nnpm install\n```\n\n### Compiles and hot-reloads for development\n\n```\nnpm run serve\n```\n"
  },
  {
    "path": "frontend/babel.config.js",
    "chars": 53,
    "preview": "module.exports = {\n  presets: [\n    '@vue/app'\n  ]\n}\n"
  },
  {
    "path": "frontend/package.json",
    "chars": 1367,
    "preview": "{\n  \"name\": \"vertcoin_one_click_miner\",\n  \"author\": \"Gert-Jaap Glasbergen<gertjaap@gertjaap.nl>\",\n  \"private\": true,\n  \""
  },
  {
    "path": "frontend/package.json.md5",
    "chars": 32,
    "preview": "584b5614d6fc7dde9620d97ca74df594"
  },
  {
    "path": "frontend/src/App.vue",
    "chars": 3221,
    "preview": "<template>\n  <div id=\"app\" unselectable=\"on\" onselectstart=\"return false;\">\n    <TabBar\n      v-on:send=\"switchToSend\"\n "
  },
  {
    "path": "frontend/src/assets/css/main.css",
    "chars": 3686,
    "preview": "#app {\n  font-family: 'Montserrat', Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font"
  },
  {
    "path": "frontend/src/components/Checks.vue",
    "chars": 2727,
    "preview": "<template>\n  <div class=\"container\">\n    <div v-if=\"prerequisiteInstall\" class=\"col-286\">\n      <p>{{ $t(\"checks.prerequ"
  },
  {
    "path": "frontend/src/components/Mining.vue",
    "chars": 8932,
    "preview": "<template>\n  <div class=\"container\">\n    <div class=\"col-286\">\n      <p class=\"header\">{{$t('mining.spendable_balance')}"
  },
  {
    "path": "frontend/src/components/Send.vue",
    "chars": 6257,
    "preview": "<template>\n  <div class=\"container\">\n    <div v-if=\"sendError === '' && sent === false\" class=\"col-286\">\n      <p v-if=\""
  },
  {
    "path": "frontend/src/components/Settings.vue",
    "chars": 4505,
    "preview": "<template>\n  <div class=\"settings-container\">\n    <div class=\"col-settings\" v-if=\"!showWarning\">\n      <div class=\"col-s"
  },
  {
    "path": "frontend/src/components/TabBar.vue",
    "chars": 1934,
    "preview": "<template>\n  <div class=\"tabBar\">\n    <div class=\"tabs\">\n      <div\n        :class=\"{tab : true, active: $parent.screen "
  },
  {
    "path": "frontend/src/components/Tracking.vue",
    "chars": 2265,
    "preview": "<template>\n  <div class=\"tracking\">\n    <p v-if=\"tracking\">\n      OCM v{{version}}\n      <span v-if=\"updateAvailable\">\n "
  },
  {
    "path": "frontend/src/components/Update.vue",
    "chars": 1220,
    "preview": "<template>\n  <div class=\"container\">\n    <div class=\"col-wide\">\n      <p>{{ $t('update.new_version_available') }}: {{ver"
  },
  {
    "path": "frontend/src/components/Welcome.vue",
    "chars": 2639,
    "preview": "<template>\n  <div class=\"container\">\n    <div class=\"col-286\" v-if=\"alreadyRunning === false && walletInitialized === 0\""
  },
  {
    "path": "frontend/src/i18n/README.md",
    "chars": 3218,
    "preview": "# Translation workflow\n\nIf you want to add a new translation to the Vertcoin OCM you can follow two tracks:\n\n## Create a"
  },
  {
    "path": "frontend/src/i18n/bg.json",
    "chars": 5354,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Опитайте отново\",\n        \"back_to_wallet\" : \"Обратно към портфейла\",\n        \"cl"
  },
  {
    "path": "frontend/src/i18n/da.json",
    "chars": 5048,
    "preview": "{\r\n    \"generic\" : {\r\n        \"retry\" : \"Prøv igen\",\r\n        \"back_to_wallet\" : \"Tilbage til wallet\",\r\n        \"close\" "
  },
  {
    "path": "frontend/src/i18n/de.json",
    "chars": 5259,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Wiederholen\",\n        \"back_to_wallet\" : \"Zurück zur Wallet\",\n        \"close\" : \""
  },
  {
    "path": "frontend/src/i18n/en.json",
    "chars": 4774,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Retry\",\n        \"back_to_wallet\" : \"Back to wallet\",\n        \"close\" : \"Close\"\n  "
  },
  {
    "path": "frontend/src/i18n/es.json",
    "chars": 5404,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Reintentar\",\n        \"back_to_wallet\" : \"Volver a la billetera\",\n        \"close\" "
  },
  {
    "path": "frontend/src/i18n/fr.json",
    "chars": 4527,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Réessayer\",\n        \"back_to_wallet\" : \"Revenir au portefeuille\",\n        \"close\""
  },
  {
    "path": "frontend/src/i18n/hi.json",
    "chars": 4068,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"पुन: प्रयास\",\n        \"back_to_wallet\" : \"वापस वॉलेट में\",\n        \"close\" : \"बंद"
  },
  {
    "path": "frontend/src/i18n/hr.json",
    "chars": 4263,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Pokušajte ponovno\",\n        \"back_to_wallet\" : \"Natrag na novčanik\",\n        \"clo"
  },
  {
    "path": "frontend/src/i18n/it.json",
    "chars": 5434,
    "preview": "{\r\n    \"generic\" : {\r\n        \"retry\" : \"Riprova\",\r\n        \"back_to_wallet\" : \"Torna al portafoglio\",\r\n        \"close\" "
  },
  {
    "path": "frontend/src/i18n/ja.json",
    "chars": 3146,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"再試行をする\",\n        \"back_to_wallet\" : \"ウォレットに戻る\",\n        \"close\" : \"閉じる\"\n    },\n  "
  },
  {
    "path": "frontend/src/i18n/lt.json",
    "chars": 5137,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Bandyti iš naujo\",\n        \"back_to_wallet\" : \"Grįžti į piniginę\",\n        \"close"
  },
  {
    "path": "frontend/src/i18n/nl.json",
    "chars": 5178,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Opnieuw proberen\",\n        \"back_to_wallet\" : \"Terug naar portemonnee\",\n        \""
  },
  {
    "path": "frontend/src/i18n/no.json",
    "chars": 3834,
    "preview": "{\n  \"generic\": {\n    \"retry\": \"Prøv igjen\",\n    \"back_to_wallet\": \"tilbake til lommebok\",\n    \"close\": \"Lukk\"\n  },\n  \"we"
  },
  {
    "path": "frontend/src/i18n/pa.json",
    "chars": 4905,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"ਦੁਬਾਰਾ  ਕੋਸ਼ਿਸ਼  ਕਰੋ\",\n        \"back_to_wallet\" : \"ਵਾਪਸ  ਬਟੂਆ  ਵੱਲ\",\n        \"clo"
  },
  {
    "path": "frontend/src/i18n/pl.json",
    "chars": 4972,
    "preview": "{\r\n    \"generic\" : {\r\n        \"retry\" : \"Ponów\",\r\n        \"back_to_wallet\" : \"Wróć do portfela\",\r\n        \"close\" : \"Za"
  },
  {
    "path": "frontend/src/i18n/pt.json",
    "chars": 5317,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Tentar novamente\",\n        \"back_to_wallet\" : \"Regressar à carteira\",\n        \"cl"
  },
  {
    "path": "frontend/src/i18n/ro.json",
    "chars": 4451,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Încearcă din nou\",\n        \"back_to_wallet\" : \"Înapoi la portofel\",\n        \"clos"
  },
  {
    "path": "frontend/src/i18n/ru.json",
    "chars": 5031,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Попробовать снова\",\n        \"back_to_wallet\" : \"Вернуться в кошелёк\",\n        \"cl"
  },
  {
    "path": "frontend/src/i18n/sl.json",
    "chars": 4228,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Poskusi znova\",\n        \"back_to_wallet\" : \"Nazaj v denarnico\",\n        \"close\":\""
  },
  {
    "path": "frontend/src/i18n/sv.json",
    "chars": 4609,
    "preview": "{\n  \"generic\": {\n    \"retry\": \"Försök igen\",\n    \"back_to_wallet\": \"Tillbaka till plånboken\",\n    \"close\": \"Stäng\"\n  },\n"
  },
  {
    "path": "frontend/src/i18n/tr.json",
    "chars": 4765,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"Tekrar dene\",\n        \"back_to_wallet\" : \"Cüzdana dön\",\n        \"close\" : \"Kapat\""
  },
  {
    "path": "frontend/src/i18n/zh.json",
    "chars": 2761,
    "preview": "{\n    \"generic\" : {\n        \"retry\" : \"再试一次\",\n        \"back_to_wallet\" : \"返回钱包\",\n        \"close\" : \"关闭\"\n    },\n    \"welc"
  },
  {
    "path": "frontend/src/main.js",
    "chars": 2106,
    "preview": "import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport VueI18n from \"vue-i18n\";\nimport * as Wails from \"@wailsapp/ru"
  },
  {
    "path": "frontend/vue.config.js",
    "chars": 866,
    "preview": "let cssConfig = {};\n\nif (process.env.NODE_ENV == \"production\") {\n  cssConfig = {\n    extract: {\n      filename: \"[name]."
  },
  {
    "path": "go.mod",
    "chars": 2523,
    "preview": "module github.com/vertcoin-project/one-click-miner-vnext\n\ngo 1.22\n\nrequire (\n\tgithub.com/ProtonMail/go-autostart v0.0.0-"
  },
  {
    "path": "go.sum",
    "chars": 23607,
    "preview": "github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=\ngithub.com/Masterminds/semve"
  },
  {
    "path": "keyfile/keyfile.go",
    "chars": 3564,
    "preview": "package keyfile\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/btcsuite/btcd/btcec/v2\"\n\t\""
  },
  {
    "path": "logging/log.go",
    "chars": 3224,
    "preview": "package logging\n\n// Log Levels:\n// 3: DebugLevel prints Panics, Fatals, Errors, Warnings, Infos and Debugs\n// 2: InfoLev"
  },
  {
    "path": "main.go",
    "chars": 2919,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime/debug\"\n\n\t_ \"embed\"\n\n\t\"github.com/marcsauter/single"
  },
  {
    "path": "miners/ccminer.go",
    "chars": 2704,
    "preview": "package miners\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n)\n\n"
  },
  {
    "path": "miners/cryptodredge.go",
    "chars": 2912,
    "preview": "package miners\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logg"
  },
  {
    "path": "miners/lyclminer.go",
    "chars": 4282,
    "preview": "package miners\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/vertcoin-pro"
  },
  {
    "path": "miners/miners.go",
    "chars": 10097,
    "preview": "package miners\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\""
  },
  {
    "path": "miners/teamredminer.go",
    "chars": 2921,
    "preview": "package miners\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n)\n\n"
  },
  {
    "path": "miners/verthashminer.go",
    "chars": 6334,
    "preview": "package miners\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/vertcoin-pro"
  },
  {
    "path": "miners.json",
    "chars": 5871,
    "preview": "[\n    {\n        \"platform\": \"windows\",\n        \"gpuplatform\" : \"AMD\",\n        \"url\" : \"https://github.com/CryptoGraphics"
  },
  {
    "path": "networks/networks.go",
    "chars": 1171,
    "preview": "package networks\n\ntype Network struct {\n\tBase58P2PKHVersion byte\n\tBase58P2SHVersion  byte\n\tInsightURL         string\n\tBe"
  },
  {
    "path": "p2pool_nodes.json",
    "chars": 1406,
    "preview": "[\n\t{\n\t\t\"Hostname\": \"mindcraftblocks.com\",\n\t\t\"Stratum\":  \"stratum+tcp://mindcraftblocks.com:9171\",\n\t\t\"URL\":      \"http://"
  },
  {
    "path": "ping/ping.go",
    "chars": 6160,
    "preview": "package ping\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-ping/ping\"\n\n\t\"github.com/vertcoin-pr"
  },
  {
    "path": "pools/miningpoolsweden.go",
    "chars": 1317,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/util\"\n)\n\nvar _ Pool = &Minin"
  },
  {
    "path": "pools/p2pool.go",
    "chars": 2065,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n\n\t\"github.com/vertc"
  },
  {
    "path": "pools/p2proxy.go",
    "chars": 1055,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/networks\"\n\n\t\"github.com/vertcoin-pro"
  },
  {
    "path": "pools/pool.go",
    "chars": 640,
    "preview": "package pools\n\ntype Pool interface {\n\tGetPendingPayout() uint64\n\tGetStratumUrl() string\n\tGetUsername() string\n\tGetPasswo"
  },
  {
    "path": "pools/suprnova.go",
    "chars": 1479,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/util\"\n)\n\nvar _ Pool = &Suprn"
  },
  {
    "path": "pools/zergpool.go",
    "chars": 1183,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/util\"\n)\n\nvar _ Pool = &Zergp"
  },
  {
    "path": "pools/zpool.go",
    "chars": 1118,
    "preview": "package pools\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/util\"\n)\n\nvar _ Pool = &zpool"
  },
  {
    "path": "prerequisites/amdgpudriver.go",
    "chars": 502,
    "preview": "package prerequisites\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nfunc checkAmdgpuDriverInstalled() error {\n\tif"
  },
  {
    "path": "prerequisites/msvcrt2013.go",
    "chars": 2045,
    "preview": "package prerequisites\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"st"
  },
  {
    "path": "prerequisites/nvidiadriver.go",
    "chars": 501,
    "preview": "package prerequisites\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nfunc checkNvidiaDriverInstalled() error {\n\tif"
  },
  {
    "path": "prerequisites/prerequisites.go",
    "chars": 488,
    "preview": "package prerequisites\n\nimport (\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n)\n\nfunc Install(name string"
  },
  {
    "path": "project.json",
    "chars": 369,
    "preview": "{\n \"name\": \"Vertcoin One Click Miner\",\n \"description\": \"Enter your project description\",\n \"author\": {\n  \"name\": \"Gert-Ja"
  },
  {
    "path": "tracking/matomo.go",
    "chars": 2853,
    "preview": "package tracking\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\""
  },
  {
    "path": "tracking/version.go",
    "chars": 93,
    "preview": "package tracking\n\nvar version = \"0.0-alpha1\" // Fixed dev version - always updates available\n"
  },
  {
    "path": "util/autostart.go",
    "chars": 2054,
    "preview": "package util\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/ProtonMail/go-autostart\"\n\t\"github.com/vertcoin-project/one-c"
  },
  {
    "path": "util/bech32/bech32.go",
    "chars": 11632,
    "preview": "package bech32\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// charset is the sequence of ascii characters that make up the bech32\n// "
  },
  {
    "path": "util/gpus.go",
    "chars": 3181,
    "preview": "package util\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/vertcoin-project/one-click-miner-v"
  },
  {
    "path": "util/gpus_test.go",
    "chars": 928,
    "preview": "package util\n\nimport (\n\t\"log\"\n\t\"testing\"\n)\n\nfunc TestNvidia(t *testing.T) {\n\tgpus := []string{\"NVIDIA something\", \"NVIDI"
  },
  {
    "path": "util/miners_linux.go",
    "chars": 107,
    "preview": "// +build !windows\n\npackage util\n\nimport (\n\t\"os/exec\"\n)\n\nfunc PrepareBackgroundCommand(cmd *exec.Cmd) {\n\n}\n"
  },
  {
    "path": "util/miners_windows.go",
    "chars": 174,
    "preview": "// +build windows\n\npackage util\n\nimport (\n\t\"os/exec\"\n\t\"syscall\"\n)\n\nfunc PrepareBackgroundCommand(cmd *exec.Cmd) {\n\tcmd.S"
  },
  {
    "path": "util/util.go",
    "chars": 9226,
    "preview": "package util\n\nimport (\n\t\"archive/tar\"\n\t\"archive/zip\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\""
  },
  {
    "path": "util/versioncheck.go",
    "chars": 1645,
    "preview": "package util\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/vertcoin-project/one-click-miner-vnext/logging\"\n)\n\ntyp"
  },
  {
    "path": "util/versioncheck_test.go",
    "chars": 285,
    "preview": "package util\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\nfunc TestVersionStrings(t *testing.T) {\n\ttestStrings := []string{\"0.1-alpha1"
  },
  {
    "path": "wallet/signsend.go",
    "chars": 1938,
    "preview": "package wallet\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\n\t\"github.com/btcsuite/btcd/btcec/v2\"\n\t\"github.com/btcsuite/btc"
  },
  {
    "path": "wallet/sigops.go",
    "chars": 3404,
    "preview": "package wallet\n\nimport (\n\t\"github.com/btcsuite/btcd/btcutil\"\n\t\"github.com/btcsuite/btcd/txscript\"\n)\n\nvar WitnessScaleFac"
  },
  {
    "path": "wallet/wallet.go",
    "chars": 7103,
    "preview": "package wallet\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/btcsuite/btcd/btcutil\"\n\t\"git"
  }
]

About this extraction

This page contains the full source code of the vertcoin-project/one-click-miner-vnext GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 98 files (312.5 KB), approximately 101.7k tokens, and a symbol index with 328 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!