Compare commits

...

9 commits
v0.70 ... main

Author SHA1 Message Date
Simon Sarasova
15aa4cb9f8
Removed the trusted/verified funded status packages to progress towards the replacement of account credit servers with payment proofs. 2024-09-17 14:10:12 +00:00
Simon Sarasova
718c9d967b
Upgraded Seekia to Version 0.71. 2024-09-06 14:25:30 +00:00
Simon Sarasova
5a190aa741
Added some timestamps. 2024-09-06 14:02:45 +00:00
Simon Sarasova
f2ec53935b
Improved Whitepaper.md and upgraded Whitepaper.pdf to Version 10. 2024-09-06 13:44:02 +00:00
Simon Sarasova
c1d3247d05
Improved ReadMe.md, Documentation.md, and Whitepaper.md. 2024-09-05 17:56:10 +00:00
Simon Sarasova
54f2558857
Improved Future-Plans.md. 2024-09-04 16:02:05 +00:00
Simon Sarasova
bf1c93f974
Added some timestamps. 2024-09-04 09:37:41 +00:00
Simon Sarasova
7e492ba6fd
Upgraded go-chart to version 2.1.2. 2024-09-04 07:19:36 +00:00
Simon Sarasova
0a94c496fb
Upgraded Badger to version 4.3.0. 2024-09-04 06:59:54 +00:00
42 changed files with 284 additions and 437 deletions

View file

@ -6,6 +6,16 @@ Small and insignificant changes may not be included in this log.
## Unversioned Changes ## Unversioned Changes
* Removed the trusted/verified funded status packages to progress towards the replacement of account credit servers with payment proofs. - *Simon Sarasova*
## Version 0.71
*Release Date: September 6, 2024*
* Improved Whitepaper.md and upgraded Whitepaper.pdf to Version 10. - *Simon Sarasova*
* Improved ReadMe.md, Documentation.md, and Whitepaper.md. - *Simon Sarasova*
* Improved Future-Plans.md. - *Simon Sarasova*
* Upgraded go-chart to version 2.1.2. - *Simon Sarasova*
* Upgraded Badger to version 4.3.0. - *Simon Sarasova*
* Upgraded Whitepaper.pdf to Version 9. - *Simon Sarasova* * Upgraded Whitepaper.pdf to Version 9. - *Simon Sarasova*
## Version 0.70 ## Version 0.70

View file

@ -9,4 +9,4 @@ Many other people have written code for modules which are imported by Seekia. Th
Name | Date Of First Commit | Number Of Commits Name | Date Of First Commit | Number Of Commits
--- | --- | --- --- | --- | ---
Simon Sarasova | June 13, 2023 | 302 Simon Sarasova | June 13, 2023 | 311

View file

@ -16,7 +16,7 @@ Seekia enables users to browse and filter potential mates by their genetic attri
Users can view information about the health and physical traits of their prospective offspring for each user. Users can choose to mate with users with whom their offspring has a lower probability of having diseases and a higher probability of having certain traits. Users can view information about the health and physical traits of their prospective offspring for each user. Users can choose to mate with users with whom their offspring has a lower probability of having diseases and a higher probability of having certain traits.
Seekia aims to improve the genetic quality of humanity by making humans healthier, more beautiful, more intelligent, more virtuous, and happier. Seekia aims to facilitate eugenic breeding by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring. Seekia aims to increase humanity's genetic desirability by making humans healthier, more beautiful, more intelligent, more virtuous, and happier. Seekia aims to facilitate eugenic breeding by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring.
The goal of Seekia is to accelerate humanity's adoption of genetics aware mate discovery technology, and to help humanity mate in a genetics aware manner. The goal of Seekia is to accelerate humanity's adoption of genetics aware mate discovery technology, and to help humanity mate in a genetics aware manner.

View file

@ -25,7 +25,7 @@ Users can analyze their genomes using the Seekia app to learn about monogenic di
Users can view information about the health and physical traits of their prospective offspring for each user. Users can choose to mate with users with whom their offspring has a lower probability of having diseases and a higher probability of having certain traits. Users can view information about the health and physical traits of their prospective offspring for each user. Users can choose to mate with users with whom their offspring has a lower probability of having diseases and a higher probability of having certain traits.
Seekia aims to improve the genetic quality of humanity by making humans healthier, more beautiful, more intelligent, more virtuous, and happier. Seekia aims to facilitate eugenic breeding by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring. Seekia aims to increase the genetic desirability of humanity by making humans healthier, more beautiful, more intelligent, more virtuous, and happier. Seekia aims to facilitate eugenic breeding by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring.
The goal of Seekia is to accelerate the world's adoption of genetics aware mate discovery technology, and to help the world mate in a genetics aware manner. The goal of Seekia is to accelerate the world's adoption of genetics aware mate discovery technology, and to help the world mate in a genetics aware manner.

View file

@ -344,6 +344,8 @@ There are many benefits to having widely available open source genetic predictio
All of this is already possible, but will become easier with the proliferation of more advanced open source genetic prediction models. Many advanced genetic prediction methods already exist, but many of them are closed source. Even using a public model trained on closed data would not be sufficient for Seekia's use case, because we need users to be confident that the models are reproducible and created from accurate data. We want the genetic future of the human species to be steered by open source technology. All of this is already possible, but will become easier with the proliferation of more advanced open source genetic prediction models. Many advanced genetic prediction methods already exist, but many of them are closed source. Even using a public model trained on closed data would not be sufficient for Seekia's use case, because we need users to be confident that the models are reproducible and created from accurate data. We want the genetic future of the human species to be steered by open source technology.
We can create training data by taking freely available genetic biobanks which lack phenotype data and using freely available prediction scoring methods to infer the likelihood of each phenotype for each genome. See [pgscatalog.org](https://www.pgscatalog.org/) for polygenic scoring methods. This strategy would be inferior to having the original biobank data because we would be trusting the people who provided the polygenic scoring methods, and predictions would be less accurate because we would be training on a prediction of a prediction. This strategy will likely be necessary because it will allow us to circumvent gaining access to biobank data.
### Add more diseases and traits ### Add more diseases and traits
Adding monogenic diseases entails entering disease SNP data from SNPedia.com and other sources. The bases have to be flipped if the orientation on SNPedia is minus. This requires flipping G/C and A/T. At least 3 people should check any added disease SNPs to ensure accuracy. Adding monogenic diseases entails entering disease SNP data from SNPedia.com and other sources. The bases have to be flipped if the orientation on SNPedia is minus. This requires flipping G/C and A/T. At least 3 people should check any added disease SNPs to ensure accuracy.

View file

@ -129,7 +129,7 @@ The Value String section describes the map entry values encoded as String, which
* **MinimumIdentityDaysToFund** * **MinimumIdentityDaysToFund**
* Description: * Description:
* A file describing the minimum number of days required to fund a mate/host identity * A file describing the minimum number of days required to fund a mate/host identity
* The historic rates are needed so that updates to the durations will have time to be downloaded by the account credit servers and users of the network before the new durations take effect * The historic rates are needed so that updates to the durations will have time to be downloaded by the users of the network before the new durations take effect
* Format: * Format:
* **(IdentityType)_(TimeUnix)** * **(IdentityType)_(TimeUnix)**
* Description: The minimum number of days required to fund for identities of the identityType * Description: The minimum number of days required to fund for identities of the identityType
@ -142,7 +142,7 @@ The Value String section describes the map entry values encoded as String, which
* **MaximumIdentityDaysToFund** * **MaximumIdentityDaysToFund**
* Description: * Description:
* A file describing the maximum number of days required to fund a mate/host identity * A file describing the maximum number of days required to fund a mate/host identity
* The historic rates are needed so that updates to the durations will have time to be downloaded by the account credit servers and users of the network before the new durations take effect * The historic rates are needed so that updates to the durations will have time to be downloaded by the users of the network before the new durations take effect
* Format: * Format:
* **(IdentityType)_(TimeUnix)** * **(IdentityType)_(TimeUnix)**
* Description: The maximum number of days required to fund for identities of the identityType * Description: The maximum number of days required to fund for identities of the identityType
@ -164,9 +164,9 @@ The Value String section describes the map entry values encoded as String, which
* Value Bytes: `[32]byte` * Value Bytes: `[32]byte`
* Value String: `[32]byte` encoded in Hex * Value String: `[32]byte` encoded in Hex
* Example: * Example:
* `Seekia_v0.1.zip -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)` * `Seekia-v0.1.AppImage -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)`
* `Seekia_v1.2.dmg -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)` * `Seekia-v1.2.dmg -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)`
* `Seekia_v1.2.exe -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)` * `Seekia-v1.2.exe -> 12a34e43b2c112f34e43a21a341958a4841ab12abbba192384ab3804ab (Not A Real Hash)`
* **MessageCosts** * **MessageCosts**
* Description: * Description:
* These are the gold/kilobytes/day rates for messages to be hosted on the network * These are the gold/kilobytes/day rates for messages to be hosted on the network
@ -181,7 +181,7 @@ The Value String section describes the map entry values encoded as String, which
* **FundingIdentityCosts** * **FundingIdentityCosts**
* Description: * Description:
* These are the milligrams of gold/day rates for Mate/Host identities to be funded and hosted on the network * These are the milligrams of gold/day rates for Mate/Host identities to be funded and hosted on the network
* The historical cost rates are needed so updates to the rates have time to be downloaded by the account credit servers and users before the new rates go into effect * The historical cost rates are needed so updates to the rates have time to be downloaded by users before the new rates go into effect
* Format: * Format:
* **(IdentityType)_(TimeUnix)** * **(IdentityType)_(TimeUnix)**
* Description: Milligrams of gold rate per day at TimeUnix to fund an IdentityType identity * Description: Milligrams of gold rate per day at TimeUnix to fund an IdentityType identity
@ -193,7 +193,7 @@ The Value String section describes the map entry values encoded as String, which
* **ReportCosts** * **ReportCosts**
* Description: * Description:
* The cost to fund a report * The cost to fund a report
* Historical times are needed so that all users and account credits servers have time to download the parameters before a price change takes place * Historical times are needed so that all users have time to download the parameters before a price change takes place
* Format: * Format:
* **(TimeUnix)** * **(TimeUnix)**
* Description: Cost in milligrams of gold to fund a report for the standard report duration at timeUnix * Description: Cost in milligrams of gold to fund a report for the standard report duration at timeUnix
@ -204,7 +204,7 @@ The Value String section describes the map entry values encoded as String, which
* **MateProfileCosts** * **MateProfileCosts**
* Description: * Description:
* The cost to fund a mate profile * The cost to fund a mate profile
* Historical times are needed so that all users and account credits servers have time to download the parameters before a price change takes place * Historical times are needed so that all users have time to download the parameters before a price change takes place
* Format: * Format:
* **(TimeUnix)** * **(TimeUnix)**
* Description: Cost in milligrams of gold to fund a mate profile at timeUnix * Description: Cost in milligrams of gold to fund a mate profile at timeUnix
@ -313,28 +313,23 @@ The Value String section describes the map entry values encoded as String, which
* Examples: * Examples:
* `1690000000_Ethereum -> 12332123123123` * `1690000000_Ethereum -> 12332123123123`
* `1690000000_Cardano -> 123213123123123123123` * `1690000000_Cardano -> 123213123123123123123`
* **AccountCreditServersStatus** * **PaymentProofProvidersStatus**
* Description: * Description:
* Used to tell users if the account credit server(s) were hacked/broken for any period of time * Used to tell users if any payment proof providers were hacked/broken for any period of time
* The nodes that relied upon this inaccurate data would disregard any data received from the account credit servers during these time periods *
* The Seekia application must keep track of when it learned information from the servers
* This is necessary because Hosts usually never check the servers for updates after receiving certain kinds of information
* For example, if a host learned that a message was funded for 14 days, then they would host the message for 14 days and never ask the server about the message's funded status again
* An attack on the servers could result in hosts hosting unfunded messages for a while
* Format: * Format:
* TODO: Historical information describing periods that the servers were hacked/broken * TODO: Historical information describing periods that the servers were hacked/broken
* **AccountCreditServersList** * **PaymentProofProvidersList**
* Description: * Description:
* A list of all of the account credit server URLS * A list of all of the payment proof server URLS
* These may be clearnet or Tor * These may be clearnet or Tor
* Format: * Format:
* **(URL)** * **(URL)**
* Description: The read-only/writeable status of the server. Some servers are read-only. * Description: The URL of the payment proof provider server.
* Value Bytes: `bool` * Value Bytes: `string`
* Value String: "Unwriteable"/"Writeable" * Value String: A description about the server and who operates it.
* Examples: * Examples:
* `https://server1.seekia.net/ -> Unwriteable` * `https://paymentproofprovider.seekia.net/ -> The main payment provider operated by X.
* `https://server2.seekia.net/ -> Writeable`
*TODO: Add parameters to ban specific messages (they could be malformed and undecryptable with the cipherkeyhash, but still contain unruleful content within them)* *TODO: Add parameters to ban specific messages (they could be malformed and undecryptable with the cipherkeyhash, but still contain unruleful content within them)*

View file

@ -20,51 +20,51 @@ We can classify humans into separate races. Races are defined by grouping humans
We can also classify humans by their geographic ancestry by describing the locations where each person's ancestors lived at different times in history. Ancestry can be measured by analyzing genetic markers that a person shares with past human populations. Geographic distance was a significant impediment to gene flow between population groups for most of humanity's history. The humans within each isolated population group bred among themselves, resulting in the loss of genetic variation through the process of genetic drift. Consequently, members of these populations tend to be racially similar to each other. We can also classify humans by their geographic ancestry by describing the locations where each person's ancestors lived at different times in history. Ancestry can be measured by analyzing genetic markers that a person shares with past human populations. Geographic distance was a significant impediment to gene flow between population groups for most of humanity's history. The humans within each isolated population group bred among themselves, resulting in the loss of genetic variation through the process of genetic drift. Consequently, members of these populations tend to be racially similar to each other.
## Genetic Quality ## Genetic Desirability
Genetic quality is defined by humanity's collective perceptions and sentiments. We define high quality genetics as any genetic attributes which help humanity to flourish and be happy. Genetic desirability is defined as the degree to which humanity collectively desires particular genetic attributes. Desirable genetic attributes generally help humanity to flourish and be happy. Over time, humanity's desires should trend towards attributes which increase human happiness and wellbeing.
Genetic quality is defined by four main attributes: beauty, health, intelligence, and personality. Healthy, beautiful, intelligent, happy, and virtuous people are collectively genetically superior to diseased, ugly, stupid, sad, and immoral people. Genetic desirability is defined by four main attributes: beauty, health, intelligence, and personality. Healthy, beautiful, intelligent, happy, and virtuous people are collectively genetically more desirable than diseased, ugly, stupid, sad, and immoral people.
Certain humans are higher in genetic quality than other humans, and certain races are collectively higher in genetic quality than other races. In other words, some humans are genetically superior to other humans, and some races are collectively genetically superior to other races. Certain humans are more genetically desirable than other humans, and certain races are collectively more genetically desirable than other races. There does not exist a singular person or race which is the most genetically desirable, but there are humans and races which possess greater and lesser degrees of genetic desirability. A gorgeous, intelligent, witty, dazzling, healthy, kind firefighter is much more desired and loved than an ugly, diseased, schizophrenic, disabled, deceptive, rude, thieving thug. Someone in our world may prefer the thug over the firefighter, but on average, humanity prefers the firefighter's genetic traits.
There does not exist a singular person or race which possesses the highest genetic quality, but there are higher and lower genetic quality humans and races. A gorgeous, intelligent, witty, dazzling, healthy, kind firefighter is much more desired and loved than an ugly, diseased, schizophrenic, disabled, deceptive, rude, thieving thug. Someone in our world may prefer the thug over the firefighter, but on average, humanity prefers the firefighter's genetic traits. Genetic desirability varies between populations due to cultural and environmental differences. Each population will always have a measurable set of genetic attributes which are more desired than other attributes.
The world becomes a better place when it is populated with humans and races of a higher genetic quality rather than those of a lower genetic quality. The world becomes a better place when it is populated with humans and races of a higher genetic desirability rather than those of a lower genetic desirability.
### Beauty ### Beauty
Human beauty is defined as the ability of a person's physical appearance to evoke feelings of sexual attraction, arousal, and pleasure in other humans. Beauty is subjective for each individual, but trends and patterns emerge when surveying large quantities of people. Human beauty ranking is calculated by comparing the sentiments expressed by large populations of humans. Some people are more beautiful than other people, and some races are collectively more beautiful than other races. Human beauty inequality is an inevitable consequence of human appearance diversity. Human beauty is defined as the ability of a person's physical appearance to evoke feelings of sexual attraction, arousal, and pleasure in other humans. Beauty is subjective for each individual, but trends and patterns emerge when surveying large quantities of people. Human beauty ranking is calculated by comparing the sentiments expressed by large populations of humans. Some people are more beautiful than other people, and some races are collectively more beautiful than other races. Human beauty inequality is an inevitable consequence of human appearance diversity.
Beauty is superior to ugliness. It is easier to reduce and obscure a person's beauty if they have too much than to increase a person's beauty if they have too little. Beauty is more desirable than ugliness. It is easier to reduce and obscure a person's beauty if they have too much than to increase a person's beauty if they have too little.
### Intelligence ### Intelligence
Intelligence is defined as the ability to understand information, recognize patterns, be creative, and solve problems. Intelligence is entirely derived from the brain and is thus a genetic trait, but can be influenced by a person's environment. Some humans are smarter than other humans, and some races are collectively smarter than other races. Cognitive inequality explains much of the outcome disparities between different humans and races that exist in our modern world. Intelligence is defined as the ability to understand information, recognize patterns, be creative, and solve problems. Intelligence is entirely derived from the brain and is thus a genetic trait, but can be influenced by a person's environment. Some humans are smarter than other humans, and some races are collectively smarter than other races. Cognitive inequality explains much of the outcome disparities between different humans and races that exist in our modern world.
Intelligence is superior to stupidity. Enough intelligence would allow a person to solve any problems that are caused by intelligence. It is also easier to reduce a person's intelligence if they have too much than it is to increase a person's intelligence if they have too little. Intelligence is more desirable than stupidity. Enough intelligence would allow a person to solve any problems that are caused by intelligence. It is also easier to reduce a person's intelligence if they have too much than it is to increase a person's intelligence if they have too little.
### Health ### Health
Health is defined as the proper functioning and well-being of the human body. Health is associated with a longer lifespan, increased mobility, and an absence of pain and illness. Some people are healthier than other people, and some races are collectively healthier than other races. Health is defined as the proper functioning and well-being of the human body. Health is associated with a longer lifespan, increased mobility, and an absence of pain and illness. Some people are healthier than other people, and some races are collectively healthier than other races.
Health is superior to disease. Ability is superior to disability. Pain and suffering are inherently bad and unpleasant for humans to experience. Health is more desirable than disease. Ability is more desirable than disability. Pain and suffering are inherently bad and unpleasant for humans to experience.
### Personality ### Personality
Personality is defined as a person's thought patterns, behaviors, and methods for understanding, interacting with, and experiencing the world. Personality is largely genetic. Personality and intelligence are causally connected. Some people have better personalities than other people, and some races collectively have better personalities than other races. Some examples of positive personality traits are happiness, virtue, hopefulness, empathy, calmness, compassion, sociability, generosity, cleanliness, honesty, perseverance, and kindness. Personality is defined as a person's thought patterns, behaviors, and methods for understanding, interacting with, and experiencing the world. Personality is largely genetic. Personality and intelligence are causally connected. Some people have more desirable personalities than other people, and some races collectively have more desirable personalities than other races. Some examples of desirable personality traits are happiness, virtue, hopefulness, empathy, calmness, compassion, sociability, generosity, cleanliness, honesty, perseverance, and kindness.
Happy and virtuous personalities are superior to sad and immoral personalities. It is impossible to have an excess of happiness or virtue. Happiness is the ultimate goal of human life and is the only thing that humans desire for its own sake. Happy and virtuous personalities are more desirable than sad and immoral personalities. It is impossible to have an excess of virtue. An excess of happiness could be undesirable if it decreases virtue by causing complacency, thus causing unhappiness for others. Happiness and virtue are causally linked for most people. Happiness is the ultimate goal of human life and is the only thing that humans desire for its own sake.
## Eugenics ## Eugenics
Eugenics is defined as any practice or process which improves humanity's genetic quality. Eugenics is defined as any practice or process which improves humanity's genetic desirability.
Eugenics can be observed in many different processes. Diseases which disproportionately kill weak, disabled, and obese people can improve humanity's genetics by reducing the prevalence of their inferior genes. Long periods of drought and poor weather can improve humanity's genetics by causing unintelligent people who did not stockpile enough food to die. Eugenics can be observed in many different processes. Diseases which disproportionately kill weak, disabled, and obese people can improve humanity's genetic desirability by reducing the prevalence of their undesirable genes. Long periods of poor farming weather can improve humanity's genetic desirability by causing unintelligent people who did not stockpile enough food to die.
The history of human evolution has been an overall eugenic process. Throughout human history, natural and human mate selection strategies have overall favored positive genetic traits such as health, intelligence, beauty, and sociability. The breeding arena of the human species is a fierce Darwinian competition with large outcome disparities. The fittest humans of the best genetic quality were able to live healthier and longer lives, attract the highest quality mates, and produce the greatest quantity of offspring. The processes of natural, artificial, and sexual selection caused the genetics of our species to improve. The history of human evolution has been an overall eugenic process. Throughout human history, natural and human mate selection strategies have overall favored desirable genetic traits such as health, intelligence, beauty, and sociability. The breeding arena of the human species is a fierce Darwinian competition with large outcome disparities. The fittest humans with the most desirable genetics were able to live healthier and longer lives, attract the most desirable mates, and produce the greatest quantity of offspring. The processes of natural, artificial, and sexual selection caused the genetic desirability of our species to increase.
One limitation of historical human eugenic mating is that people have had to infer the genetic quality of their potential mates from each person and their relatives' outwardly visible genetic traits. Sometimes, someone may possess superior genetic traits, but will produce lower genetic quality offspring due to unexpressed genetic mutations. There are also certain mate pairings which result in lower genetic quality offspring due to incompatibilities in each mate's genome. With modern technology, we are now capable of sequencing human genomes, helping us to understanding who actually has the best genetics, and how we can pair up humans in the optimal way to improve humanity's genetics. One limitation of historical human eugenic mating is that people have had to infer the genetic desirability of their potential mates from each person and their relatives' outwardly visible genetic traits. Sometimes, someone may possess more desirable genetic traits, but will produce less genetically desirable offspring due to unexpressed genetic mutations. There are also certain mate pairings which result in less genetically desirable offspring due to incompatibilities in each mate's genome. With modern technology, we are now capable of sequencing human genomes, helping us to understanding who actually has the most desirable genetics, and how we can pair up humans in the optimal way to increase humanity's genetic desirability.
## Seekia ## Seekia
@ -78,15 +78,15 @@ Users can share genetic information in their profiles such as monogenic disease
Seekia enables users to browse and filter potential mates by their genetic attributes and the predicted genetic attributes of their offspring. Seekia allows for users to predict and control the genetic attributes of their offspring by selecting a mate who is the most likely to produce offspring with their desired attributes. Seekia enables users to browse and filter potential mates by their genetic attributes and the predicted genetic attributes of their offspring. Seekia allows for users to predict and control the genetic attributes of their offspring by selecting a mate who is the most likely to produce offspring with their desired attributes.
Users can view information about the health and physical traits of their prospective offspring for each user. Users can choose their mate in such a way to reduce the probability of their offspring having genetic diseases and increase the probability of their offspring having certain traits. Users can view information about the health and physical traits of their prospective offspring with each potential mate. Users can choose their mate in such a way to reduce the probability of their offspring having genetic diseases and increase the probability of their offspring having certain traits.
Seekia aims to improve humanity's genetics by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring. Seekia aims to improve humanity's genetic desirability by helping to create mate pairings which are the most likely to produce healthy, beautiful, intelligent, virtuous, and happy offspring.
I will now describe an overview of the features and advantages of Seekia. The technicals of Seekia are described in greater detail in the Seekia documentation and code implementation. I will now describe an overview of the features and advantages of Seekia. The technicals of Seekia are described in greater detail in the Seekia documentation and code implementation.
## Selective Breeding ## Selective Breeding
Seekia aims to improve humanity's genetics by facilitating the eugenic technique of selective breeding. Selective breeding is the practice of breeding specific human pairs to produce humans of a higher genetic quality. By encouraging breeding between certain people, it is possible to increase humanity's overall beauty, health, intelligence, virtue, and happiness. This technique is akin to combining the same set of foods together to create either 5 delicious meals or 5 revolting meals. Seekia aims to increase humanity's genetic desirability by facilitating the eugenic technique of selective breeding. Selective breeding is the practice of breeding specific human pairs to produce humans of a higher genetic desirability. By encouraging breeding between certain people, it is possible to increase humanity's overall beauty, health, intelligence, virtue, and happiness. This technique is akin to combining the same set of foods together to create either 5 delicious meals or 5 revolting meals.
### Beauty ### Beauty
@ -102,7 +102,7 @@ Seekia aims to make humanity more intelligent by encouraging breeding between sp
### Personality ### Personality
Seekia aims to improve the personalities of the human species by encouraging breeding between specific human pairs who are more likely to produce offspring who are virtuous and happy. Virtue and happiness are strongly influenced by genetics. Seekia aims to improve the personalities of humanity by building a prediction system that can predict how happy and virtuous someone is from their genome, and measuring the virtue and happiness of many prospective offspring genomes for each potential couple. Users will be able to sort their matches by how good their offspring's personality is likely to be. The creation of the prediction system should utilize training data which contains many people's genomes and information about their personalities. Seekia aims to increase the desirability of the personalities of the human species by encouraging breeding between specific human pairs who are more likely to produce offspring who are virtuous and happy. Seekia aims to implement a prediction system that can predict how happy and virtuous someone is from their genome and use that system to measure the virtue and happiness of many prospective offspring genomes for each potential couple. Users will be able to sort their matches by how desirable their offspring's personality is likely to be. The creation of the prediction system should utilize training data which contains many people's genomes and information about their personalities.
## Open Source ## Open Source
@ -386,7 +386,7 @@ The goal of Seekia is to accelerate humanity's adoption of genetics aware mate d
Informing human mating choices with genetic information will have a major positive impact on the human species. Seekia aims to usher in a new era of human breeding strategies. Seekia aims to bring genetic order to humanity's breeding patterns. Informing human mating choices with genetic information will have a major positive impact on the human species. Seekia aims to usher in a new era of human breeding strategies. Seekia aims to bring genetic order to humanity's breeding patterns.
Seekia aims to beautify the human species, reduce the prevalence of genetic diseases, increase humanity's intelligence, improve people's personalities, and boost global fertility rates. Seekia aims to beautify the human species; reduce the prevalence of genetic diseases; increase humanity's intelligence, happiness, and virtue; and boost global fertility rates.
Seekia has the potential to create families; facilitate the conception of beautiful, healthy, intelligent, virtuous, and happy offspring; and increase the amount of love in the world. Seekia has the potential to create families; facilitate the conception of beautiful, healthy, intelligent, virtuous, and happy offspring; and increase the amount of love in the world.

Binary file not shown.

31
go.mod
View file

@ -8,14 +8,14 @@ require (
fyne.io/fyne/v2 v2.5.1 fyne.io/fyne/v2 v2.5.1
github.com/chai2010/webp v1.1.1 github.com/chai2010/webp v1.1.1
github.com/cloudflare/circl v1.4.0 github.com/cloudflare/circl v1.4.0
github.com/dgraph-io/badger/v4 v4.2.0 github.com/dgraph-io/badger/v4 v4.3.0
github.com/disintegration/gift v1.2.1 github.com/disintegration/gift v1.2.1
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef
github.com/vmihailenco/msgpack/v5 v5.4.1 github.com/vmihailenco/msgpack/v5 v5.4.1
github.com/wcharczuk/go-chart/v2 v2.1.1 github.com/wcharczuk/go-chart/v2 v2.1.2
github.com/zeebo/blake3 v0.2.4 github.com/zeebo/blake3 v0.2.4
golang.org/x/crypto v0.23.0 golang.org/x/crypto v0.26.0
golang.org/x/image v0.18.0 golang.org/x/image v0.18.0
gorgonia.org/gorgonia v0.9.18 gorgonia.org/gorgonia v0.9.18
gorgonia.org/tensor v0.9.24 gorgonia.org/tensor v0.9.24
@ -26,13 +26,12 @@ require (
github.com/BurntSushi/toml v1.4.0 // indirect github.com/BurntSushi/toml v1.4.0 // indirect
github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect
github.com/awalterschulze/gographviz v2.0.3+incompatible // indirect github.com/awalterschulze/gographviz v2.0.3+incompatible // indirect
github.com/blend/go-sdk v1.20220411.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chewxy/hm v1.0.0 // indirect github.com/chewxy/hm v1.0.0 // indirect
github.com/chewxy/math32 v1.10.1 // indirect github.com/chewxy/math32 v1.10.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fredbi/uri v1.1.0 // indirect github.com/fredbi/uri v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe // indirect github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe // indirect
@ -45,35 +44,33 @@ require (
github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/glog v1.0.0 // indirect
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/protobuf v1.5.3 // indirect github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.3 // indirect
github.com/google/flatbuffers v23.5.26+incompatible // indirect github.com/google/flatbuffers v23.5.26+incompatible // indirect
github.com/google/uuid v1.5.0 // indirect github.com/google/uuid v1.5.0 // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect
github.com/jeandeaual/go-locale v0.0.0-20240223122105-ce5225dcaa49 // indirect github.com/jeandeaual/go-locale v0.0.0-20240223122105-ce5225dcaa49 // indirect
github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect
github.com/klauspost/compress v1.13.1 // indirect github.com/klauspost/compress v1.17.9 // indirect
github.com/klauspost/cpuid/v2 v2.0.12 // indirect github.com/klauspost/cpuid/v2 v2.0.12 // indirect
github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 // indirect github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 // indirect
github.com/nicksnyder/go-i18n/v2 v2.4.0 // indirect github.com/nicksnyder/go-i18n/v2 v2.4.0 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rymdport/portal v0.2.6 // indirect github.com/rymdport/portal v0.2.6 // indirect
github.com/stretchr/testify v1.8.4 // indirect github.com/stretchr/testify v1.9.0 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/xtgo/set v1.0.0 // indirect github.com/xtgo/set v1.0.0 // indirect
github.com/yuin/goldmark v1.7.1 // indirect github.com/yuin/goldmark v1.7.1 // indirect
go.opencensus.io v0.23.0 // indirect go.opencensus.io v0.24.0 // indirect
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect
golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a // indirect golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a // indirect
golang.org/x/net v0.25.0 // indirect golang.org/x/net v0.28.0 // indirect
golang.org/x/sys v0.20.0 // indirect golang.org/x/sys v0.24.0 // indirect
golang.org/x/text v0.16.0 // indirect golang.org/x/text v0.17.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
gonum.org/v1/gonum v0.14.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect
google.golang.org/protobuf v1.32.0 // indirect google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
gorgonia.org/cu v0.9.4 // indirect gorgonia.org/cu v0.9.4 // indirect
gorgonia.org/dawson v1.2.0 // indirect gorgonia.org/dawson v1.2.0 // indirect

95
go.sum
View file

@ -64,14 +64,11 @@ github.com/awalterschulze/gographviz v2.0.3+incompatible h1:9sVEXJBJLwGX7EQVhLm2
github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/blend/go-sdk v1.20220411.3 h1:GFV4/FQX5UzXLPwWV03gP811pj7B8J2sbuq+GJQofXc=
github.com/blend/go-sdk v1.20220411.3/go.mod h1:7lnH8fTi6U4i1fArEXRyOIY2E1X4MALg09qsQqY1+ak=
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chai2010/webp v1.1.1 h1:jTRmEccAJ4MGrhFOrPMpNGIJ/eybIgwKpcACsrTEapk= github.com/chai2010/webp v1.1.1 h1:jTRmEccAJ4MGrhFOrPMpNGIJ/eybIgwKpcACsrTEapk=
github.com/chai2010/webp v1.1.1/go.mod h1:0XVwvZWdjjdxpUEIf7b9g9VkHFnInUSYujwqTLEuldU= github.com/chai2010/webp v1.1.1/go.mod h1:0XVwvZWdjjdxpUEIf7b9g9VkHFnInUSYujwqTLEuldU=
github.com/chewxy/hm v1.0.0 h1:zy/TSv3LV2nD3dwUEQL2VhXeoXbb9QkpmdRAVUFiA6k= github.com/chewxy/hm v1.0.0 h1:zy/TSv3LV2nD3dwUEQL2VhXeoXbb9QkpmdRAVUFiA6k=
@ -104,16 +101,17 @@ github.com/cznic/xc v0.0.0-20181122101856-45b06973881e/go.mod h1:3oFoiOvCDBYH+sw
github.com/davecgh/go-spew v1.1.0/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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= github.com/dgraph-io/badger/v4 v4.3.0 h1:lcsCE1/1qrRhqP+zYx6xDZb8n7U+QlwNicpc676Ub40=
github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= github.com/dgraph-io/badger/v4 v4.3.0/go.mod h1:Sc0T595g8zqAQRDf44n+z3wG4BOqLwceaFntt8KPxUM=
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 h1:Pux6+xANi0I7RRo5E1gflI4EZ2yx3BGZ75JkAIvGEOA=
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc=
github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@ -173,8 +171,6 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
@ -205,9 +201,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@ -232,8 +227,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@ -304,8 +299,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.13.1 h1:wXr2uRxZTJXHLly6qhJabee5JqIhTRoLBhDOA74hDEQ=
github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@ -388,6 +384,8 @@ github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ=
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@ -397,15 +395,17 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8=
github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
github.com/wcharczuk/go-chart/v2 v2.1.1 h1:2u7na789qiD5WzccZsFz4MJWOJP72G+2kUuJoSNqWnE= github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E=
github.com/wcharczuk/go-chart/v2 v2.1.1/go.mod h1:CyCAUt2oqvfhCl6Q5ZvAZwItgpQKZOkCJGb+VGv6l14= github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ=
github.com/xtgo/set v1.0.0 h1:6BCNBRv3ORNDQ7fyoJXRv+tstJz3m1JVFQErfeZz2pY= github.com/xtgo/set v1.0.0 h1:6BCNBRv3ORNDQ7fyoJXRv+tstJz3m1JVFQErfeZz2pY=
github.com/xtgo/set v1.0.0/go.mod h1:d3NHzGzSa0NmB2NhFyECA+QdRp29oEn2xbT+TpeFoM8= github.com/xtgo/set v1.0.0/go.mod h1:d3NHzGzSa0NmB2NhFyECA+QdRp29oEn2xbT+TpeFoM8=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@ -433,8 +433,9 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
@ -452,8 +453,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@ -486,7 +490,6 @@ golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeap
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8=
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@ -518,6 +521,9 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -563,8 +569,12 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -590,6 +600,9 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -644,13 +657,21 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -661,9 +682,13 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -729,6 +754,8 @@ golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -862,8 +889,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=

View file

@ -682,7 +682,7 @@ func setHomePage(window fyne.Window){
// Also add a page that shows .eth URL // Also add a page that shows .eth URL
seekiaLink := getBoldLabel("Seekia.net") seekiaLink := getBoldLabel("Seekia.net")
seekiaVersion := getLabelCentered("Seekia Version 0.70") seekiaVersion := getLabelCentered("Seekia Version 0.71")
seekiaLinkWithTitle := container.NewHBox(layout.NewSpacer(), seekiaLinkTitle, seekiaLink, layout.NewSpacer()) seekiaLinkWithTitle := container.NewHBox(layout.NewSpacer(), seekiaLinkTitle, seekiaLink, layout.NewSpacer())

View file

@ -36,7 +36,7 @@ import "seekia/internal/moderation/trustedViewableStatus"
import "seekia/internal/moderation/verifiedStickyStatus" import "seekia/internal/moderation/verifiedStickyStatus"
import "seekia/internal/myIdentity" import "seekia/internal/myIdentity"
import "seekia/internal/network/appNetworkType/getAppNetworkType" import "seekia/internal/network/appNetworkType/getAppNetworkType"
import "seekia/internal/network/fundedStatus" import "seekia/internal/network/getFundedStatuses"
import "seekia/internal/network/myBroadcasts" import "seekia/internal/network/myBroadcasts"
import "seekia/internal/profiles/attributeDisplay" import "seekia/internal/profiles/attributeDisplay"
import "seekia/internal/profiles/calculatedAttributes" import "seekia/internal/profiles/calculatedAttributes"
@ -394,7 +394,7 @@ func setViewPeerProfilePageFromIdentityHash(window fyne.Window, peerIdentityHash
// Identity is not banned. Profile does not exist // Identity is not banned. Profile does not exist
// We check if user's identity is known to be expired. // We check if user's identity is known to be expired.
statusIsKnown, identityIsFunded, err := fundedStatus.GetIdentityIsFundedStatus(peerIdentityHash, appNetworkType) statusIsKnown, identityIsFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(peerIdentityHash, appNetworkType)
if (err != nil) { if (err != nil) {
setErrorEncounteredPage(window, err, previousPage) setErrorEncounteredPage(window, err, previousPage)
return return

View file

@ -8,7 +8,7 @@ import "errors"
func GetSeekiaVersion()float32{ func GetSeekiaVersion()float32{
version := float32(0.70) version := float32(0.71)
return version return version
} }

View file

@ -1,9 +1,11 @@
// accountKeys provides functions to derive account identifiers and cryptocurrency addresses from credit account keys. // accountKeys provides functions to derive account identifiers and cryptocurrency addresses from credit account keys.
// These keys are used to interface with the credit accounts servers to manage a user's account credits. // These keys are used to interface with the payment proof servers to manage a user's account credits.
package accountKeys package accountKeys
//TODO: Fix this package to interface with payment proof providers rather than account credit servers
// A user's account private key is required to check their account balance // A user's account private key is required to check their account balance
// Each public key corresponds to an account identifier and crypto address(es) // Each public key corresponds to an account identifier and crypto address(es)
// We only use each key for a single purpose. // We only use each key for a single purpose.

View file

@ -25,10 +25,10 @@ import "seekia/internal/moderation/reviewStorage"
import "seekia/internal/moderation/verifiedStickyStatus" import "seekia/internal/moderation/verifiedStickyStatus"
import "seekia/internal/myIdentity" import "seekia/internal/myIdentity"
import "seekia/internal/myRanges" import "seekia/internal/myRanges"
import "seekia/internal/network/getFundedStatuses"
import "seekia/internal/network/mateCriteria" import "seekia/internal/network/mateCriteria"
import "seekia/internal/network/serverRequest" import "seekia/internal/network/serverRequest"
import "seekia/internal/network/serverResponse" import "seekia/internal/network/serverResponse"
import "seekia/internal/network/verifiedFundedStatus"
import "seekia/internal/parameters/parametersStorage" import "seekia/internal/parameters/parametersStorage"
import "seekia/internal/parameters/readParameters" import "seekia/internal/parameters/readParameters"
import "seekia/internal/profiles/profileStorage" import "seekia/internal/profiles/profileStorage"
@ -287,7 +287,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// profileType == "Mate" or "Host" // profileType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(identityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(identityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -428,7 +428,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
if (profileTypeToRetrieve == "Mate"){ if (profileTypeToRetrieve == "Mate"){
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -536,7 +536,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure profile is funded // We make sure profile is funded
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -590,7 +590,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// profileType == "Mate" or "Host" // profileType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(profileAuthor, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(profileAuthor, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -702,7 +702,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure each message is funded // We make sure each message is funded
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(messageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(messageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -812,7 +812,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure each message is funded // We make sure each message is funded
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(messageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(messageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -1087,7 +1087,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// identityTypeToRetrieve == "Mate" or "Host" // identityTypeToRetrieve == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(reviewedIdentityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(reviewedIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1105,7 +1105,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
reviewedProfileHash := [28]byte(reviewedHash) reviewedProfileHash := [28]byte(reviewedHash)
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(reviewedProfileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(reviewedProfileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1132,7 +1132,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, profileHash := range attributeProfileHashesList{ for _, profileHash := range attributeProfileHashesList{
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, err } if (err != nil) { return false, err }
if (statusIsKnown == true && isFunded == true){ if (statusIsKnown == true && isFunded == true){
return true, nil return true, nil
@ -1293,7 +1293,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure message is funded // We make sure message is funded
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(reviewedMessageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(reviewedMessageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -1388,7 +1388,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
continue continue
} }
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(reviewedMessageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(reviewedMessageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -1504,7 +1504,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// reviewedIdentityType == "Mate" or "Host" // reviewedIdentityType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(reviewedIdentityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(reviewedIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1522,7 +1522,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
reviewedProfileHash := [28]byte(reviewedHash) reviewedProfileHash := [28]byte(reviewedHash)
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(reviewedProfileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(reviewedProfileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1549,7 +1549,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, profileHash := range attributeProfileHashesList{ for _, profileHash := range attributeProfileHashesList{
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, err } if (err != nil) { return false, err }
if (statusIsKnown == true && isFunded == true){ if (statusIsKnown == true && isFunded == true){
return true, nil return true, nil
@ -1647,7 +1647,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, reportHash := range relevantReportHashesList{ for _, reportHash := range relevantReportHashesList{
statusIsKnown, reportIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedReportIsFundedStatus(reportHash) statusIsKnown, reportIsFunded, _, err := getFundedStatuses.GetReportIsFundedStatus(reportHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || reportIsFunded == false){ if (statusIsKnown == false || reportIsFunded == false){
continue continue
@ -1802,7 +1802,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// reviewedIdentityType == "Mate" or "Host" // reviewedIdentityType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(reportedIdentityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(reportedIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1820,7 +1820,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
reportedProfileHash := [28]byte(reportedHash) reportedProfileHash := [28]byte(reportedHash)
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(reportedProfileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(reportedProfileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -1847,7 +1847,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, profileHash := range attributeProfileHashesList{ for _, profileHash := range attributeProfileHashesList{
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, err } if (err != nil) { return false, err }
if (statusIsKnown == true && isFunded == true){ if (statusIsKnown == true && isFunded == true){
return true, nil return true, nil
@ -1934,7 +1934,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, reportHash := range relevantReportHashesList{ for _, reportHash := range relevantReportHashesList{
statusIsKnown, reportIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedReportIsFundedStatus(reportHash) statusIsKnown, reportIsFunded, _, err := getFundedStatuses.GetReportIsFundedStatus(reportHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || reportIsFunded == false){ if (statusIsKnown == false || reportIsFunded == false){
continue continue
@ -2005,7 +2005,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure message is funded // We make sure message is funded
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(reportedMessageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(reportedMessageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -2096,7 +2096,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// We make sure message is funded // We make sure message is funded
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(reportedMessageHash) statusIsKnown, messageIsFunded, _, err := getFundedStatuses.GetMessageIsFundedStatus(reportedMessageHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || messageIsFunded == false){ if (statusIsKnown == false || messageIsFunded == false){
continue continue
@ -2211,7 +2211,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// reportedIdentityType == "Mate" or "Host" // reportedIdentityType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(reportedIdentityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(reportedIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -2229,7 +2229,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
reportedProfileHash := [28]byte(reportedHash) reportedProfileHash := [28]byte(reportedHash)
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(reportedProfileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(reportedProfileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -2255,7 +2255,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
for _, profileHash := range attributeProfileHashesList{ for _, profileHash := range attributeProfileHashesList{
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, err } if (err != nil) { return false, err }
if (statusIsKnown == true && isFunded == true){ if (statusIsKnown == true && isFunded == true){
return true, nil return true, nil
@ -2329,7 +2329,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// userIdentityType == "Mate" or "Host" // userIdentityType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(userIdentityHash, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(userIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -2421,7 +2421,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
// profileIdentityType == "Mate" or "Host" // profileIdentityType == "Mate" or "Host"
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(profileAuthor, networkType) statusIsKnown, isFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(profileAuthor, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -2432,7 +2432,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
if (profileIdentityType == "Mate"){ if (profileIdentityType == "Mate"){
statusIsKnown, isFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash) statusIsKnown, isFunded, _, err := getFundedStatuses.GetMateProfileIsFundedStatus(profileHash)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == false || isFunded == false){ if (statusIsKnown == false || isFunded == false){
continue continue
@ -2924,7 +2924,7 @@ func GetServerResponseForRequest(requestBytes []byte, networkType byte, connecti
return responseBytes, nil return responseBytes, nil
} }
//TODO: GetAddressDeposits, GetFundedStatuses //TODO: GetAddressDeposits, GetIdentityPaymentProofs, GetMessagePaymentProofs
// Request contains unknown requestType // Request contains unknown requestType
return invalidRequestResponse, nil return invalidRequestResponse, nil

View file

@ -24,7 +24,7 @@ import "seekia/internal/myBlockedUsers"
import "seekia/internal/network/enabledHosts" import "seekia/internal/network/enabledHosts"
import "seekia/internal/network/unreachableHosts" import "seekia/internal/network/unreachableHosts"
import "seekia/internal/network/maliciousHosts" import "seekia/internal/network/maliciousHosts"
import "seekia/internal/network/fundedStatus" import "seekia/internal/network/getFundedStatuses"
import "seekia/internal/profiles/viewableProfiles" import "seekia/internal/profiles/viewableProfiles"
import "seekia/internal/parameters/getParameters" import "seekia/internal/parameters/getParameters"
@ -142,7 +142,7 @@ func GetEligibleHostsList(networkType byte)([][16]byte, error){
for _, hostIdentityHash := range reachableHostsList{ for _, hostIdentityHash := range reachableHostsList{
statusIsKnown, identityIsFunded, err := fundedStatus.GetIdentityIsFundedStatus(hostIdentityHash, networkType) statusIsKnown, identityIsFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(hostIdentityHash, networkType)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
if (statusIsKnown == true && identityIsFunded == false){ if (statusIsKnown == true && identityIsFunded == false){
continue continue

View file

@ -1,122 +0,0 @@
// fundedStatus provides functions to check the funded status of identities, mate profiles, messages, and reports
// Some content must be funded via the account credit servers
// This package will retrieve from the verified and trusted funded status packages.
package fundedStatus
// Be aware that Funded means that the content/identity will be hosted by the network
// It may have been funded at one point in the past, but if it has expired, it is no longer considered Funded
import "seekia/internal/helpers"
import "seekia/internal/network/verifiedFundedStatus"
import "seekia/internal/network/trustedFundedStatus"
import "errors"
//Outputs:
// -bool: Status is known (it may not be fully up to date, but it at least has been checked once)
// -bool: Identity is funded status
// -error
func GetIdentityIsFundedStatus(identityHash [16]byte, networkType byte)(bool, bool, error){
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, false, errors.New("GetIdentityIsFundedStatus called with invalid networkType: " + networkTypeString)
}
verifiedStatusIsKnown, verifiedIdentityIsFundedStatus, _, timeOfCheckingVerified, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(identityHash, networkType)
if (err != nil) { return false, false, err }
trustedStatusIsKnown, trustedIdentityIsFundedStatus, timeOfCheckingTrusted, err := trustedFundedStatus.GetTrustedIdentityIsFundedStatus(identityHash, networkType)
if (err != nil) { return false, false, err }
if (verifiedStatusIsKnown == false && trustedStatusIsKnown == false){
return false, false, nil
}
if (verifiedStatusIsKnown == true && trustedStatusIsKnown == false){
return true, verifiedIdentityIsFundedStatus, nil
}
if (verifiedStatusIsKnown == false && trustedStatusIsKnown == true){
return true, trustedIdentityIsFundedStatus, nil
}
// Both statuses are known and are the same
if (verifiedIdentityIsFundedStatus == trustedIdentityIsFundedStatus){
return true, verifiedIdentityIsFundedStatus, nil
}
// Both statuses are known, and they disagree.
// We rely on the verified status more, unless it is older than the trusted status by at least 1 day
if (timeOfCheckingTrusted > (timeOfCheckingVerified + 86400)){
return true, trustedIdentityIsFundedStatus, nil
}
return true, verifiedIdentityIsFundedStatus, nil
}
// Outputs:
// -bool: Status is known
// -bool: Profile is funded status
// -error
func GetMateProfileIsFundedStatus(profileHash [28]byte)(bool, bool, error){
statusIsKnown, profileIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, profileIsFunded, nil
}
statusIsKnown, profileIsFunded, err = trustedFundedStatus.GetTrustedMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, profileIsFunded, nil
}
return false, false, nil
}
//Outputs:
// -bool: Status is known
// -bool: Message is funded
// -error
func GetMessageIsFundedStatus(messageHash [26]byte)(bool, bool, error){
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(messageHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, messageIsFunded, nil
}
statusIsKnown, messageIsFunded, err = trustedFundedStatus.GetTrustedMessageIsFundedStatus(messageHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, messageIsFunded, nil
}
return false, false, nil
}
func GetReportIsFundedStatus(reportHash [30]byte)(bool, bool, error){
statusIsKnown, reportIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedReportIsFundedStatus(reportHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, reportIsFunded, nil
}
statusIsKnown, reportIsFunded, err = trustedFundedStatus.GetTrustedReportIsFundedStatus(reportHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, reportIsFunded, nil
}
return false, false, nil
}

View file

@ -0,0 +1,98 @@
// getFundedStatuses provides functions to retrieve the funded status of identities, messages, profiles, and reports
// Funded statuses are determined by payment proofs and their associated blockchain address deposits
// If the user is hosting their own blockchain, this package will retrieve those address deposits from the user's own node
// If the user is not hosting their own blockchain, this package will retrieve those address deposits from other hosts
package getFundedStatuses
// Be aware that Funded means that the content/identity will be hosted by the network
// It may have been funded at one point in the past, but if it has expired, it is no longer considered Funded
//TODO: Build this package
// For our own funded statuses, we use different packages:
// myIdentityBalance for our identities, and myFundedStatus for content
// This is because we want to store our own payment proofs in a seperate place than the database
// The status being known for a particular status means that we at least tried to retrieve a payment proof and checked its balance.
// The problem is that we never truly know if the content is actually funded, as a payment proof could be hard to download from the network
// It is still useful to know if the status is known, as this will help with pruning unfunded content from our database.
import "seekia/internal/encoding"
import "seekia/internal/helpers"
import "seekia/internal/identity"
import "errors"
// This should only be used for Mate/Host identities
// Moderator identities are funded through identity scores, which use blockchain(s) without payment proofs
//Outputs:
// -bool: Status is known
// -bool: Identity is funded
// -int64: Time of expiration
// -error
func GetIdentityIsFundedStatus(identityHash [16]byte, networkType byte)(bool, bool, int64, error){
identityType, err := identity.GetIdentityTypeFromIdentityHash(identityHash)
if (err != nil) {
identityHashHex := encoding.EncodeBytesToHexString(identityHash[:])
return false, false, 0, errors.New("GetIdentityIsFundedStatus called with invalid identityHash: " + identityHashHex)
}
if (identityType != "Mate" && identityType != "Host"){
return false, false, 0, errors.New("GetIdentityIsFundedStatus called with Host identity: " + identityType)
}
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, false, 0, errors.New("GetIdentityIsFundedStatus called with invalid networkType: " + networkTypeString)
}
//TODO
return true, true, 10000000000000, nil
}
//Outputs:
// -bool: Status is known
// -bool: Profile Is Funded
// -int64: Time of expiration
// -error
func GetMateProfileIsFundedStatus(profileHash [28]byte)(bool, bool, int64, error){
//TODO
return true, true, 10000000000000, nil
}
//Outputs:
// -bool: Status is known
// -bool: Message Is funded
// -int64: Time of expiration
// -error
func GetMessageIsFundedStatus(messageHash [26]byte)(bool, bool, int64, error){
//TODO
// The size of the message is needed to get the isFunded status.
// We will use contentMetadata for this.
return true, true, 10000000000000, nil
}
//Outputs:
// -bool: Status is known
// -bool: Report Is funded
// -int64: Time of expiration
// -error
func GetReportIsFundedStatus(reportHash [30]byte)(bool, bool, int64, error){
//TODO
return true, true, 10000000000000, nil
}

View file

@ -54,7 +54,7 @@ import "seekia/internal/myIdentity"
import "seekia/internal/myLikedUsers" import "seekia/internal/myLikedUsers"
import "seekia/internal/myRanges" import "seekia/internal/myRanges"
import "seekia/internal/mySettings" import "seekia/internal/mySettings"
import "seekia/internal/network/fundedStatus" import "seekia/internal/network/getFundedStatuses"
import "seekia/internal/network/mateCriteria" import "seekia/internal/network/mateCriteria"
import "seekia/internal/network/myMateCriteria" import "seekia/internal/network/myMateCriteria"
import "seekia/internal/network/queryHosts" import "seekia/internal/network/queryHosts"
@ -65,6 +65,7 @@ import "seekia/internal/profiles/viewableProfiles"
import "errors" import "errors"
// This function will download and update the network-wide parameters files // This function will download and update the network-wide parameters files
func DownloadParameters(networkType byte)error{ func DownloadParameters(networkType byte)error{
@ -271,7 +272,7 @@ func DownloadMateOutlierProfiles(outlierType string, networkType byte, missingOr
for _, userIdentityHash := range myOutlierIdentitiesList{ for _, userIdentityHash := range myOutlierIdentitiesList{
statusIsKnown, identityIsFunded, err := fundedStatus.GetIdentityIsFundedStatus(userIdentityHash, networkType) statusIsKnown, identityIsFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(userIdentityHash, networkType)
if (err != nil) { return err } if (err != nil) { return err }
if (statusIsKnown == true && identityIsFunded == false){ if (statusIsKnown == true && identityIsFunded == false){
@ -1515,7 +1516,7 @@ func DownloadMateViewableStatusesForBrowsing(networkType byte, knownOrUnknown st
for _, userIdentityHash := range allMateProfileIdentityHashesList{ for _, userIdentityHash := range allMateProfileIdentityHashesList{
statusIsKnown, identityIsFunded, err := fundedStatus.GetIdentityIsFundedStatus(userIdentityHash, networkType) statusIsKnown, identityIsFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(userIdentityHash, networkType)
if (err != nil) { return err } if (err != nil) { return err }
if (statusIsKnown == true && identityIsFunded == false){ if (statusIsKnown == true && identityIsFunded == false){
@ -1687,7 +1688,7 @@ func DownloadMateOutlierViewableStatuses(outlierType string, networkType byte, k
for _, mateIdentityHash := range myOutlierIdentityHashesList{ for _, mateIdentityHash := range myOutlierIdentityHashesList{
statusIsKnown, identityIsFunded, err := fundedStatus.GetIdentityIsFundedStatus(mateIdentityHash, networkType) statusIsKnown, identityIsFunded, _, err := getFundedStatuses.GetIdentityIsFundedStatus(mateIdentityHash, networkType)
if (err != nil) { return err } if (err != nil) { return err }
if (statusIsKnown == true && identityIsFunded == false){ if (statusIsKnown == true && identityIsFunded == false){

View file

@ -21,11 +21,14 @@ package serverRequest
// See a description of each request and its purpose in Specification.md // See a description of each request and its purpose in Specification.md
//TODO: Add GetFundedStatuses //TODO: Add GetIdentityPaymentProofs and GetMessagePaymentProofs
// Will be used to get the identity/profile IsFunded statuses from hosts // Will be used to get payment proofs from hosts
// This will lessen the load on the credit account servers // We need this because hosts can provide us with invalid payment proofs for content
// We don't need this for messages, because we will always retrieve their fundedStatuses directly from the credits servers // This is also needed because we don't download identity payment proofs when downloading profiles.
// Retrieving them from hosts is a privacy risk, and will take too long to retrieve individually // Identities can also broadcast multiple payment proofs
//TODO: Add payment proofs to the BroadcastContent, GetProfiles, GetMessages, etc... requests.
// Payment proofs must be shared whenever we download or broadcast a piece of content
import "seekia/internal/cryptography/chaPolyShrink" import "seekia/internal/cryptography/chaPolyShrink"
import "seekia/internal/encoding" import "seekia/internal/encoding"

View file

@ -1,67 +0,0 @@
// trustedFundedStatus provides functions to store and retrieve the trusted funded status of identities, messages, profiles, and reports
// "trusted" means we are retrieving funded statuses from hosts
// This is different from verifiedFundedStatus, which retrieves the statuses from the account credit servers
package trustedFundedStatus
// For our own funded statuses, we use different packages:
// myIdentityBalance for our identities, and myFundedStatus for content
// This is because we want to use the account credit servers for our own statuses,
// and we want to store the statuses in myDatastores instead of the badgerDatabase
//TODO: Build this package
// We need to make fundedStatus requests to hosts
// We should store the statuses in badgerDatabase
// If a status has not been checked in 1 month, it should be considered unknown
//Outputs:
// -bool: Funded status is known
// -bool: Identity is funded
// -int64: Last time we checked
// -error
func GetTrustedIdentityIsFundedStatus(userIdentityHash [16]byte, networkType byte)(bool, bool, int64, error){
//TODO
return true, true, 0, nil
}
//Outputs:
// -bool: Funded status is known
// -bool: Profile is funded
// -error
func GetTrustedMateProfileIsFundedStatus(profileHash [28]byte)(bool, bool, error){
//TODO
return true, true, nil
}
//Outputs:
// -bool: Funded status is known
// -bool: Message is funded
// -error
func GetTrustedMessageIsFundedStatus(messageHash [26]byte)(bool, bool, error){
//TODO
return true, true, nil
}
//Outputs:
// -bool: Funded status is known
// -bool: Report is funded
// -error
func GetTrustedReportIsFundedStatus(reportHash [30]byte)(bool, bool, error){
//TODO
return true, true, nil
}

View file

@ -1,107 +0,0 @@
// verifiedFundedStatus provides functions to store and retrieve the verified funded status of identities, messages, profiles, and reports
// "verified" means we are retrieving statuses from the account credit servers
// This is different from trustedFundedStatus, which retrieves the information from hosts
package verifiedFundedStatus
// We only have to check the status once for mate profiles, reports, and messages
// This is because for those types of content, they can only be funded once, and their time cannot be increased
// A user will only broadcast their profile/report/message after it has been funded
// If we are aware of a profile/report/message hash, we know it must either be funded, or it is created by a malicious entity.
// We keep track of the last time we checked each status
// This enables us to disregard statuses we received when the credits servers were hacked, if the servers are ever hacked
// The parameters will describe the time period during which the server(s) were hacked
// The app should disregard any information it received from the servers during this time
//TODO: Add a serverIdentifier to the hacked notification, and keep track of which server we received from,
// so we can disregard only what the compromised servers told us?
//TODO: Build this package
// Hosts must retrieve funded status information from the account credit servers
// We should store the statuses in badgerDatabase
// If an identity status has not been checked in 1 month, it should be considered unknown
import "seekia/internal/encoding"
import "seekia/internal/helpers"
import "seekia/internal/identity"
import "errors"
// This should only be used for Mate/Host identities
// Moderator identities are funded through identity scores, which use blockchain(s), not the account credit servers
//Outputs:
// -bool: Status is known
// -bool: Identity is funded
// -int64: Time of expiration
// -int64: Last time we checked
// -error
func GetVerifiedIdentityIsFundedStatus(identityHash [16]byte, networkType byte)(bool, bool, int64, int64, error){
identityType, err := identity.GetIdentityTypeFromIdentityHash(identityHash)
if (err != nil) {
identityHashHex := encoding.EncodeBytesToHexString(identityHash[:])
return false, false, 0, 0, errors.New("GetVerifiedIdentityIsFundedStatus called with invalid identityHash: " + identityHashHex)
}
if (identityType != "Mate" && identityType != "Host"){
return false, false, 0, 0, errors.New("GetVerifiedIdentityIsFundedStatus called with Host identity: " + identityType)
}
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, false, 0, 0, errors.New("GetVerifiedIdentityIsFundedStatus called with invalid networkType: " + networkTypeString)
}
//TODO
return true, true, 1, 100, nil
}
//Outputs:
// -bool: Status is known
// -bool: Profile Is Funded
// -int64: Time of expiration
// -int64: Last time we checked (the expiration time will never change once funded)
// -error
func GetVerifiedMateProfileIsFundedStatus(profileHash [28]byte)(bool, bool, int64, int64, error){
//TODO
return true, true, 100000000000, 100, nil
}
//Outputs:
// -bool: Status is known
// -bool: Message Is funded
// -int64: Time of expiration
// -int64: Last time we checked (the expiration time will never change once funded)
// -error
func GetVerifiedMessageIsFundedStatus(messageHash [26]byte)(bool, bool, int64, int64, error){
//TODO
// The size of the message is needed to get the isFunded status.
// We will use contentMetadata for this.
return true, true, 1, 100, nil
}
//Outputs:
// -bool: Status is known
// -bool: Report Is funded
// -bool: Report was funded at one point in time
// -int64: Time of expiration
// -int64: Last time we checked (the expiration time will never change once funded)
// -error
func GetVerifiedReportIsFundedStatus(reportHash [30]byte)(bool, bool, int64, int64, error){
//TODO
return true, true, 1, 100, nil
}

View file

@ -0,0 +1 @@
0a94c496fbbe40ee3d36f15dee88bd496b6bebd6

View file

@ -0,0 +1 @@
3fd39621f897e00e5486df11defafa7b8bbf055b

View file

@ -0,0 +1 @@
494bc370190103ab8d8b2bed49ebdc0eb853c8bd

View file

@ -0,0 +1 @@
4f2fdb322dbb3b02ef2e1687f3cbff9e14f67957

View file

@ -0,0 +1 @@
54f25588573afab7a99425322a96158173b6fd98

View file

@ -0,0 +1 @@
7e492ba6fd0db693f73a329fc64c447a8215fcc7

View file

@ -0,0 +1 @@
bf1c93f97496862959bf559639e8792979e73050

View file

@ -0,0 +1 @@
c1d3247d059428cfa4b4ebb944806fbd1fb8f8f2

Binary file not shown.

Binary file not shown.