diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000000..dd84ea7824
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+ - Version [e.g. 22]
+
+**Smartphone (please complete the following information):**
+ - Device: [e.g. iPhone6]
+ - OS: [e.g. iOS8.1]
+ - Browser [e.g. stock browser, safari]
+ - Version [e.g. 22]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md
new file mode 100644
index 0000000000..48d5f81fa4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/custom.md
@@ -0,0 +1,10 @@
+---
+name: Custom issue template
+about: Describe this issue template's purpose here.
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000000..bbcbbe7d61
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..c2eafe46e9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+.idea
+node_modules
+lerna-debug.log
+packages/api/coverage
+packages/api/.env.local
+packages/webapp/cypress/videos
+packages/webapp/cypress/screenshots
+.vscode
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000..a4ea58ff8f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,66 @@
+# This is the yml file for our CI configuration in GitLab
+image: cypress/browsers:chrome69
+
+services:
+ - postgres:latest
+
+variables:
+ POSTGRES_DB: mock_farm
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: "postgres"
+
+stages:
+ - test
+ - deploy webapp to integration
+ - deploy api to integration
+ - deploy webapp to production
+ - deploy api to production
+
+.test:
+ stage: test
+ script:
+ - npm install knex -g
+ - cd packages/webapp && npm install
+ - npm run test
+ - npm run cypress-gitlab
+ - npm run lint
+ - cd ../api && npm install
+ - knex migrate:rollback --env ci && knex migrate:latest --env ci && knex seed:run --env ci
+ - npm run ci
+ - npm run lint
+
+deploy webapp to integration:
+ stage: deploy webapp to integration
+ script:
+ - git checkout develop
+ - git remote add heroku https://heroku:$HEROKU_DEPLOY_KEY@git.heroku.com/litefarm-webapp-integration.git
+ - git push heroku `git subtree split --prefix packages/webapp develop`:refs/heads/master --force
+ only:
+ - develop
+
+deploy api to integration:
+ stage: deploy api to integration
+ script:
+ - git checkout develop
+ - git remote add heroku https://heroku:$HEROKU_DEPLOY_KEY@git.heroku.com/litefarm-api-integration.git
+ - git push heroku `git subtree split --prefix packages/api develop`:refs/heads/master --force
+ only:
+ - develop
+
+deploy webapp to production:
+ stage: deploy webapp to production
+ script:
+ - git checkout master
+ - git remote add heroku https://heroku:$HEROKU_DEPLOY_KEY@git.heroku.com/litefarm-webapp-production.git
+ - git push heroku `git subtree split --prefix packages/webapp master`:refs/heads/master --force
+ only:
+ - master
+
+deploy api to production:
+ stage: deploy api to production
+ script:
+ - git checkout master
+ - git remote add heroku https://heroku:$HEROKU_DEPLOY_KEY@git.heroku.com/litefarm-api-production.git
+ - git push heroku `git subtree split --prefix packages/api master`:refs/heads/master --force
+ only:
+ - master
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000000..cfa3015bb9
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,74 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting one or more of the project maintainers. All complaints
+will be reviewed and investigated and will result in a response that is deemed
+necessary and appropriate to the circumstances. The project team is obligated to
+maintain confidentiality with regard to the reporter of an incident. Further
+details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available [here][source].
+
+[homepage]: https://www.contributor-covenant.org
+[source]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000..58a0c66740
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,38 @@
+## Contributing
+
+Thank you for considering contributing to LiteFarm.
+
+### Where do I go from here?
+
+If you have noticed a bug in the application or have a feature request, please create an issue on [github](https://github.com/juice-tn/litefarm/issues/new).
+
+### Fork & create a branch
+
+If this is something you think you can fix, then you can fork the repo and create
+a branch with a descriptive name. The branch should be based off of the develop branch.
+
+A good branch name would be:
+
+```sh
+git checkout -b 12-add-portuguese-translations
+```
+
+(where issue #12 is the ticket you're working on)
+
+### Get the app running
+
+Instructions for getting the app running on your local machine can be found in the [README](https://github.com/juice-tn/LiteFarm/blob/master/README.md).
+
+### Implement your fix or feature and view your changes
+
+Please view the updates in your browser to confirm your changes.
+
+### Confirm that all tests and linters pass
+
+Before making a pull request, all test suites and linters for the client-facing web application and the backend API should pass. Instructions for running the tests can be found in the [README](https://github.com/juice-tn/LiteFarm/blob/master/README.md).
+
+### Make a Pull Request
+
+We are currently following the [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) workflow. Once you have confirmed your changes in the browser and checked that all
+tests are passing, a pull request can be made to the develop branch. The app will will also run through a CI pipeline which runs all tests and linters once
+a pull request is made.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..f288702d2f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..278c66eccc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,129 @@
+# LiteFarm
+LiteFarm is the the world’s first community-led, not-for-profit, digital platform joining farmers and scientists together for participatory assessment of social, environmental and economic outputs of farming systems. LiteFarm is the first application of its kind specifically tailored to the needs of diversified farmers with built-in pathways to provide expert decision support and help them earn additional income through payment for ecological services (PES) schemes and in-app certifications (such as organic). These approaches serve the multiple purposes of incentivizing adoption of sustainable land use practices through the provision of evidence-based decision support, and significantly increasing the amount of data being collected by diversified farming operations around the globe. It was developed with farmers at the center of the design process and built from the ground up with accessibility and approachability in mind. We are proud of our mission:
+
+_To meet farmers where they are and equip them with the tools they need to make informed and responsible decisions about the health of their farm, their livelihood, their community, and the planet._
+
+
+LiteFarm version 1.0.0 was released to the public in July 2020. The LiteFarm app is continually being developed, with farmers, researchers, designers and developers working together to create new localized modules and features into the future. LiteFarm is deployed in Canada, the USA, and Latin America.
+
+If you’re a farmer and would like to join LiteFarm you can sign up today at www.litefarm.org. If you are a researcher or would like to find out more about this project you can contact the [UBC Centre for Sustainable Food Systems](https://ubcfarm.ubc.ca/litefarm/). If your a developer, all the details on how you can contribute to this project are right here, welcome to the team!
+# Overview
+
+LiteFarm is comprised of two applications which both reside in this monorepo.
+
+ - packages/webapp: the client-facing application
+ - [documentation(in progress)](https://docs.google.com/document/d/1JLWYWdf8fjZMRhKxWoa9__9ul8ZSJk7dzzSSfiT-eVM/edit?usp=sharing)
+ - packages/api: the back-end API server
+ - [documentation(in progress)](https://docs.google.com/document/d/19eDlagqurB7gf8iLdATjCi7scxs9gUG5bs9YZtMu_0k/edit?usp=sharing)
+
+# Quick Start
+### Setup Environment:
+ 1. SSH
+ - [Setup your SSH key](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)
+ - [Add it to github](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/)
+ 2. Set up git
+ - set your name and email
+ - `git config --global user.name "Happy Farmer"`
+ - `git config --global user.email "happy.farmer@gmail.com"`
+ - set pull to rebase by default
+ - `git config --global pull.rebase true`
+ 3. [install node.js](https://nodejs.org/en/download/package-manager/)
+ 4. lerna
+ - `npm install -g lerna`
+ 5. clone the repository
+ - `git clone git@github.com:juice-tn/LiteFarm.git`
+
+### Setting up database/running migrations:
+ 1. install postgreSQL on your machine (instructions for MAC)
+ - install homebrew
+ - `/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
+ - install postgresql
+ - `brew install postgresql`
+ 2. create user `postgres` and set password to `postgres`
+ - `brew services start postgresql`
+ - `psql postgres`
+ - `CREATE ROLE postgres WITH PASSWORD 'postgres';`
+ - `ALTER ROLE postgres CREATEDB;`
+ - `ALTER ROLE postgres WITH SUPERUSER;`
+ - `ALTER ROLE postgres WITH LOGIN;`
+ - `\q`
+ 3. create a database called mock_farm
+ - `psql postgres -U postgres`
+ - `CREATE DATABASE mock_farm;`
+ 4. install knex globally `npm install -g knex`
+ 5. `cd packages/api && knex migrate:latest` to start db migration
+ 6. `knex seed:run` to seed database with default data
+
+ ### Setting up env vars in webapp and api:
+ custom environment variables are used in the application. Env vars containing sensitive information
+ is not uploaded to source control. For local development, custom env vars need to be added in a .env.local file.
+ Not all of these environment variables are necessary to run the applications. Only add them if they are necessary
+ for your development purposes. Do NOT add .env.local files to source control.
+
+ 1. add a file called .env.local in the root directory: `packages/webapp`
+ 2. add these environment variables:
+ - REACT_APP_GOOGLE_MAPS_API_KEY
+ - this env var is a google maps api key obtained from [Google](https://developers.google.com/maps/documentation/javascript/get-api-key).
+ It is used to make the field module work in the application
+ - REACT_APP_WEATHER_API_KEY
+ - this env var can be obtained from [open weather API](https://openweathermap.org/api). The API is used
+ to load current weather information in the application home page after logging in.
+ 3. add a file called .env.local in the root directory: `packages/api`
+ 4. add these environment variables:
+ - GOOGLE_API_KEY
+ - this env var is a google maps api key obtained from [Google](https://developers.google.com/maps/documentation/javascript/get-api-key).
+ Google maps is used in the insights module (water balance) to perform operations using location data.
+ - OPEN_WEATHER_APP_ID
+ - this env var can be obtained from [open weather API](https://openweathermap.org/api). The API is used
+ to obtain weather information which is used in the insights module (water balance).
+
+### Start the application:
+ 1. cd litefarm
+ 2. `lerna bootstrap` to install dependencies
+ 3. in separate terminals:
+ - cd packages/webapp && npm start
+ - cd packages/api && npm start
+ - (for hot reloading in api: npm install -g nodemon && nodemon --exec npm start)
+ 4. webapp will be running on http://localhost:3000 and the api on http://localhost:5000
+ 5. Since this is a mobile web application, webapp should be viewed in a mobile view in the browser
+
+# Testing:
+
+### Webapp:
+ Automated testing for the front-end is done using [cypress](https://www.cypress.io/).
+ To run automated tests in a chrome browser:
+ - Ensure that the webapp portal is running by doing `npm start` in the root directory of the webapp package
+ - `npm run cypress-ui` in the root directory of the webapp package
+
+ The test modules are stored in `packages/webapp/cypress/integration`.
+ Additional tests can be added by adding more testing modules to this directory.
+
+ Unit tests can also be run by:
+ - `npm run test`.
+
+ Unit tests reside in `src/tests`, and additional unit tests can be added in this directory.
+
+ We are currently using [ESLint](https://eslint.org/) to maintain code style in the app.
+ The linter can be run by `npm run lint`.
+
+### Api:
+ There is currently end-to-end testing being done for the LiteFarm API using the [chai.js](https://www.chaijs.com/)
+ and [jest](https://jestjs.io/) libraries.
+ The test files can be found in `packages/api/tests`.
+
+ All of the tests run real queries to the database using a jwt token obtained through Auth0.
+ Therefore, locally run tests can affect the state of the db. This is addressed by running a script which deletes
+ test data that is generated during the tests. However, this is not fool-proof, and
+ it may be necessary to clear the local db in some cases.
+
+ To run an end-to-end test, `npm run e2e` in the api directory.
+
+ To run a test file with a specific name:
+ - `npm start`
+ - `jest test_name`
+
+ It should be noted that any merges to develop and master branches in github will result in the code going through a CI pipeline, which
+ runs the end-to-end test. Therefore it is important to test locally first before creating any pull requests
+ to develop.
+
+ We are currently using [ESLint](https://eslint.org/) to maintain code style in the app. The linter can be run by `npm run lint`.
diff --git a/RELEASES.md b/RELEASES.md
new file mode 100644
index 0000000000..47fe9851fe
--- /dev/null
+++ b/RELEASES.md
@@ -0,0 +1,45 @@
+# Source Control and the Release Process
+
+We follow the [git flow](http://nvie.com/posts/a-successful-git-branching-model) process which has several special branches:
+
+- **`master`** - Contains the release commits - builds publish a release of the [app](https://www.litefarm.org)
+- **`develop`** - Contains the work in progress, code in here must be of release quality or close to release quality- builds publish the App to [CD server](litefarm-webapp-integration.heroku.com)
+- **`release/v{major}.{minor}.{patch}`** - For preparing a release
+- **`hotfix/{major}.{minor}.X`** - For releasing a patch
+- **`other-branches`** - Branches for development work
+
+### Working on a Story / Task / Bug
+
+- Branch from **`develop`**
+- As you work on your branch regularly update (merge or rebase) from **`develop`** - `git pull --rebase origin develop`
+- When you are satisfied that your branch is in a state ready for others to review create a pull request to **`develop`**
+- When the build succeeds **Merge** this commit to **`develop`**.
+
+### Creating a Release
+
+A release is typically an increment of the minor or major version, name the branch for the version number the release will be given.
+
+- Branch from **`develop`**, name your branch with the following the convention: `release/v{major}.{minor}.0`
+- update the version in the `package.json` files in `webapp` and `api`
+- Title your commit with just the version number of the release (eg `v1.0.0`).
+- Create a pull request for the branch against **`master`**
+- Pull request against **`master`**
+- Perform any additional non-automated testing.
+- If necessary, fix any issues found and push the changes to the release branch
+- Once a release candidate of adequate quality has been produced merge the release branch into **`master`** (do not delete the branch)
+- The **`master`** build will now publish a release if CI/CD in gitlab passes.
+- Create a pull request for the branch against **`develop`**
+- Merge the release branch into **`develop`** (now you can delete the branch)
+- Manually create a release tag (eg `v1.0.0`) on master
+
+### Creating a Hot Fix
+
+A hot fix is created when production needs to be updated for an urgent bug fix but develop is not ready to release to master yet.
+
+- Branch from **`master`**, name your branch with the following the convention: `hotfix/whatever-the-fix-is`
+- Fix the issue.
+- Create a pull request from the hotfix branch, into **`master`**
+- Merge the hotfix branch into **`master`** (do not delete the branch yet)
+- Create a pull request from the hotfix branch, into **`develop`**
+- Merge the hotfix branch into **`develop`** (now you can delete the branch)
+
diff --git a/lerna.json b/lerna.json
new file mode 100644
index 0000000000..9b535f1d73
--- /dev/null
+++ b/lerna.json
@@ -0,0 +1,7 @@
+{
+ "lerna": "2.11.0",
+ "packages": [
+ "packages/*"
+ ],
+ "version": "0.0.0"
+}
diff --git a/ngrok b/ngrok
new file mode 100644
index 0000000000..f3cf76b970
Binary files /dev/null and b/ngrok differ
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000..2a5229ef09
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,8038 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ }
+ }
+ },
+ "@mapbox/point-geometry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
+ "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
+ },
+ "@types/body-parser": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
+ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/connect": {
+ "version": "3.4.32",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
+ "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
+ },
+ "@types/express": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz",
+ "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==",
+ "requires": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "@types/express-jwt": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz",
+ "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=",
+ "requires": {
+ "@types/express": "*",
+ "@types/express-unless": "*"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz",
+ "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==",
+ "requires": {
+ "@types/events": "*",
+ "@types/node": "*",
+ "@types/range-parser": "*"
+ }
+ },
+ "@types/express-unless": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.0.32.tgz",
+ "integrity": "sha512-6YpJyFNlDDnPnRjMOvJCoDYlSDDmG/OEEUsPk7yhNkL4G9hUYtgab6vi1CcWsGSSSM0CsvNlWTG+ywAGnvF03g==",
+ "requires": {
+ "@types/express": "*"
+ }
+ },
+ "@types/mime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
+ "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
+ },
+ "@types/node": {
+ "version": "10.11.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.2.tgz",
+ "integrity": "sha512-XubfQDIg88PGJ7netQPf3QOKHF7Xht4WXGtg5W7cGBeQs9ETbYKwfchR9o+tRRA9iLTQ7nAre85M205JbYsjJA=="
+ },
+ "@types/range-parser": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz",
+ "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw=="
+ },
+ "@types/serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
+ "requires": {
+ "@types/express-serve-static-core": "*",
+ "@types/mime": "*"
+ }
+ },
+ "JSONStream": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz",
+ "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "abab": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
+ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
+ },
+ "abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "requires": {
+ "event-target-shim": "^5.0.0"
+ }
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+ },
+ "acorn-globals": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
+ "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz",
+ "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg=="
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.0.1.tgz",
+ "integrity": "sha512-PqVQ8c6a3kyqdsUZlC7nljp3FFuxipBRHKu+7C1h8QygBFlzTaDX5HD383jej3Peed+1aDG8HwkfB1Z1HMNPkw=="
+ },
+ "add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz",
+ "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==",
+ "requires": {
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "requires": {
+ "default-require-extensions": "^1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "ast-transform": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz",
+ "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=",
+ "requires": {
+ "escodegen": "~1.2.0",
+ "esprima": "~1.0.4",
+ "through": "~2.3.4"
+ },
+ "dependencies": {
+ "escodegen": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz",
+ "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=",
+ "requires": {
+ "esprima": "~1.0.4",
+ "estraverse": "~1.5.0",
+ "esutils": "~1.0.0",
+ "source-map": "~0.1.30"
+ }
+ },
+ "esprima": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+ "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
+ },
+ "estraverse": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
+ "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E="
+ },
+ "esutils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
+ "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA="
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "optional": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "ast-types": {
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz",
+ "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk="
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz",
+ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
+ "requires": {
+ "babel-plugin-istanbul": "^4.1.6",
+ "babel-preset-jest": "^23.2.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.6",
+ "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "find-up": "^2.1.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "test-exclude": "^4.2.1"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz",
+ "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-preset-jest": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
+ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
+ "requires": {
+ "babel-plugin-jest-hoist": "^23.2.0",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
+ },
+ "bignumber.js": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz",
+ "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ=="
+ },
+ "blacklist": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/blacklist/-/blacklist-1.1.4.tgz",
+ "integrity": "sha1-st0J1hd2JbLKppg1o3somV+povI="
+ },
+ "bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "browser-process-hrtime": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
+ "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "requires": {
+ "resolve": "1.1.7"
+ }
+ },
+ "browserify-optional": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz",
+ "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=",
+ "requires": {
+ "ast-transform": "0.0.0",
+ "ast-types": "^0.7.0",
+ "browser-resolve": "^1.8.1"
+ }
+ },
+ "bser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "byline": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "capture-exit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
+ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+ "requires": {
+ "rsvp": "^3.3.3"
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A=="
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "classnames": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
+ "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+ "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+ "dev": true,
+ "requires": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "command-join": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz",
+ "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "optional": true
+ },
+ "compare-func": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "conventional-changelog": {
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+ "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^1.6.6",
+ "conventional-changelog-atom": "^0.2.8",
+ "conventional-changelog-codemirror": "^0.3.8",
+ "conventional-changelog-core": "^2.0.11",
+ "conventional-changelog-ember": "^0.3.12",
+ "conventional-changelog-eslint": "^1.0.9",
+ "conventional-changelog-express": "^0.3.6",
+ "conventional-changelog-jquery": "^0.1.0",
+ "conventional-changelog-jscs": "^0.1.0",
+ "conventional-changelog-jshint": "^0.3.8",
+ "conventional-changelog-preset-loader": "^1.1.8"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+ "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+ "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "1.3.22",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
+ "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog": "^1.1.24",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "tempfile": "^1.1.1"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+ "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+ "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "^3.0.9",
+ "conventional-commits-parser": "^2.1.7",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^1.0.0",
+ "git-raw-commits": "^1.3.6",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^1.3.6",
+ "lodash": "^4.2.1",
+ "normalize-package-data": "^2.3.5",
+ "q": "^1.5.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+ "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+ "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+ "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+ "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+ "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+ "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^1.1.6",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.0.2",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "semver": "^5.5.0",
+ "split": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+ "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "dev": true,
+ "requires": {
+ "is-subset": "^0.1.1",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+ "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.4",
+ "is-text-path": "^1.0.0",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0",
+ "trim-off-newlines": "^1.0.0"
+ }
+ },
+ "conventional-recommended-bump": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
+ "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.4.10",
+ "conventional-commits-filter": "^1.1.1",
+ "conventional-commits-parser": "^2.1.1",
+ "git-raw-commits": "^1.3.0",
+ "git-semver-tags": "^1.3.0",
+ "meow": "^3.3.0",
+ "object-assign": "^4.0.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "create-react-class": {
+ "version": "15.6.3",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+ "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
+ "requires": {
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "http://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "source-map": "^0.1.38",
+ "source-map-resolve": "^0.3.0",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M="
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "requires": {
+ "atob": "~1.1.0",
+ "resolve-url": "~0.2.1",
+ "source-map-url": "~0.3.0",
+ "urix": "~0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk="
+ }
+ }
+ },
+ "cssom": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
+ "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog=="
+ },
+ "cssstyle": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
+ "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz",
+ "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==",
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^7.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "deepmerge": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz",
+ "integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww=="
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "requires": {
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I="
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "dom-helpers": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
+ "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "duck": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.11.tgz",
+ "integrity": "sha1-OtwaPS+91Yef/TvaBc4PaTVekJM=",
+ "requires": {
+ "underscore": "~1.4.4"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
+ }
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
+ "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "requires": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
+ "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "eve": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/eve/-/eve-0.5.4.tgz",
+ "integrity": "sha1-Z9CAuXJSkdfjieNMJoYN2X8d66o="
+ },
+ "event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg="
+ },
+ "exec-sh": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
+ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
+ "requires": {
+ "merge": "^1.2.0"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "expect": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz",
+ "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "jest-diff": "^23.6.0",
+ "jest-get-type": "^22.1.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0"
+ }
+ },
+ "express-jwt": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz",
+ "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==",
+ "requires": {
+ "async": "^1.5.0",
+ "express-unless": "^0.3.0",
+ "jsonwebtoken": "^8.1.0",
+ "lodash.set": "^4.0.0"
+ }
+ },
+ "express-jwt-authz": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/express-jwt-authz/-/express-jwt-authz-1.0.0.tgz",
+ "integrity": "sha1-JhVXAPokhb0+ms4+a7FFc9Rb5aQ="
+ },
+ "express-unless": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz",
+ "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA="
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "fast-text-encoding": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.2.tgz",
+ "integrity": "sha512-5rQdinSsycpzvAoHga2EDn+LRX1d5xLFsuNG0Kg61JrAT/tASXcLL0nf/33v+sAxlQcfYmWbTURa1mmAf55jGw=="
+ },
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "requires": {
+ "bser": "^2.0.0"
+ }
+ },
+ "fbjs": {
+ "version": "0.8.17",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+ "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+ "requires": {
+ "core-js": "^1.0.0",
+ "isomorphic-fetch": "^2.1.1",
+ "loose-envify": "^1.0.0",
+ "object-assign": "^4.1.0",
+ "promise": "^7.1.1",
+ "setimmediate": "^1.0.5",
+ "ua-parser-js": "^0.7.18"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ }
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "requires": {
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
+ }
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "dependencies": {
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ }
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "gaxios": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.0.3.tgz",
+ "integrity": "sha512-PkzQludeIFhd535/yucALT/Wxyj/y2zLyrMwPcJmnLHDugmV49NvAi/vb+VUq/eWztATZCNcb8ue+ywPG+oLuw==",
+ "requires": {
+ "abort-controller": "^3.0.0",
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^5.0.0",
+ "is-stream": "^2.0.0",
+ "node-fetch": "^2.3.0"
+ },
+ "dependencies": {
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
+ },
+ "node-fetch": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+ }
+ }
+ },
+ "gcp-metadata": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.0.tgz",
+ "integrity": "sha512-r57SV28+olVsflPlKyVig3Muo/VDlcsObMtvDGOEtEJXj+DDE8bEl0coIkXh//hbkSDTvo+f5lbihZOndYXQQQ==",
+ "requires": {
+ "gaxios": "^3.0.0",
+ "json-bigint": "^0.3.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "meow": "^3.3.0",
+ "normalize-package-data": "^2.3.0",
+ "parse-github-repo-url": "^1.3.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "git-raw-commits": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+ "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "dev": true,
+ "requires": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ }
+ },
+ "git-semver-tags": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+ "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "dev": true,
+ "requires": {
+ "meow": "^4.0.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "google-auth-library": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.1.tgz",
+ "integrity": "sha512-NWEM9W0o+fmUJMK/wEuJ1vAc8H/JAseOWB8tjOAAkz8yobU+5IDtO/rPCbbRwFF1obIOCe0lj1pkq9ld2OFZeg==",
+ "requires": {
+ "arrify": "^2.0.0",
+ "base64-js": "^1.3.0",
+ "ecdsa-sig-formatter": "^1.0.11",
+ "fast-text-encoding": "^1.0.0",
+ "gaxios": "^3.0.0",
+ "gcp-metadata": "^4.1.0",
+ "gtoken": "^5.0.0",
+ "jws": "^4.0.0",
+ "lru-cache": "^5.0.0"
+ },
+ "dependencies": {
+ "arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "requires": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "google-map-react": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/google-map-react/-/google-map-react-1.0.8.tgz",
+ "integrity": "sha512-M1UIXrxUhwMjNiUkw9DiVSO0fh7vZOxgGR02grzPOu4S47sYV25oeHcsK32rvGuNlBwpHHS+T9AV4aiRuKNXuw==",
+ "requires": {
+ "@mapbox/point-geometry": "^0.1.0",
+ "eventemitter3": "^1.1.0",
+ "scriptjs": "^2.5.7"
+ }
+ },
+ "google-p12-pem": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.1.tgz",
+ "integrity": "sha512-VlQgtozgNVVVcYTXS36eQz4PXPt9gIPqLOhHN0QiV6W6h4qSCNVKPtKC5INtJsaHHF2r7+nOIa26MJeJMTaZEQ==",
+ "requires": {
+ "node-forge": "^0.9.0"
+ }
+ },
+ "googleapis": {
+ "version": "39.2.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-39.2.0.tgz",
+ "integrity": "sha512-66X8TG1B33zAt177sG1CoKoYHPP/B66tEpnnSANGCqotMuY5gqSQO8G/0gqHZR2jRgc5CHSSNOJCnpI0SuDxMQ==",
+ "requires": {
+ "google-auth-library": "^3.0.0",
+ "googleapis-common": "^0.7.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "gaxios": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+ "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+ "requires": {
+ "abort-controller": "^3.0.0",
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^2.2.1",
+ "node-fetch": "^2.3.0"
+ }
+ },
+ "gcp-metadata": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+ "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+ "requires": {
+ "gaxios": "^1.0.2",
+ "json-bigint": "^0.3.0"
+ }
+ },
+ "google-auth-library": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+ "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+ "requires": {
+ "base64-js": "^1.3.0",
+ "fast-text-encoding": "^1.0.0",
+ "gaxios": "^1.2.1",
+ "gcp-metadata": "^1.0.0",
+ "gtoken": "^2.3.2",
+ "https-proxy-agent": "^2.2.1",
+ "jws": "^3.1.5",
+ "lru-cache": "^5.0.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "google-p12-pem": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.4.tgz",
+ "integrity": "sha512-SwLAUJqUfTB2iS+wFfSS/G9p7bt4eWcc2LyfvmUXe7cWp6p3mpxDo6LLI29MXdU6wvPcQ/up298X7GMC5ylAlA==",
+ "requires": {
+ "node-forge": "^0.8.0",
+ "pify": "^4.0.0"
+ }
+ },
+ "gtoken": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+ "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+ "requires": {
+ "gaxios": "^1.0.4",
+ "google-p12-pem": "^1.0.0",
+ "jws": "^3.1.5",
+ "mime": "^2.2.0",
+ "pify": "^4.0.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+ },
+ "node-forge": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz",
+ "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "googleapis-common": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-0.7.2.tgz",
+ "integrity": "sha512-9DEJIiO4nS7nw0VE1YVkEfXEj8x8MxsuB+yZIpOBULFSN9OIKcUU8UuKgSZFU4lJmRioMfngktrbkMwWJcUhQg==",
+ "requires": {
+ "gaxios": "^1.2.2",
+ "google-auth-library": "^3.0.0",
+ "pify": "^4.0.0",
+ "qs": "^6.5.2",
+ "url-template": "^2.0.8",
+ "uuid": "^3.2.1"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "gaxios": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+ "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+ "requires": {
+ "abort-controller": "^3.0.0",
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^2.2.1",
+ "node-fetch": "^2.3.0"
+ }
+ },
+ "gcp-metadata": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+ "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+ "requires": {
+ "gaxios": "^1.0.2",
+ "json-bigint": "^0.3.0"
+ }
+ },
+ "google-auth-library": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+ "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+ "requires": {
+ "base64-js": "^1.3.0",
+ "fast-text-encoding": "^1.0.0",
+ "gaxios": "^1.2.1",
+ "gcp-metadata": "^1.0.0",
+ "gtoken": "^2.3.2",
+ "https-proxy-agent": "^2.2.1",
+ "jws": "^3.1.5",
+ "lru-cache": "^5.0.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "google-p12-pem": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.4.tgz",
+ "integrity": "sha512-SwLAUJqUfTB2iS+wFfSS/G9p7bt4eWcc2LyfvmUXe7cWp6p3mpxDo6LLI29MXdU6wvPcQ/up298X7GMC5ylAlA==",
+ "requires": {
+ "node-forge": "^0.8.0",
+ "pify": "^4.0.0"
+ }
+ },
+ "gtoken": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+ "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+ "requires": {
+ "gaxios": "^1.0.4",
+ "google-p12-pem": "^1.0.0",
+ "jws": "^3.1.5",
+ "mime": "^2.2.0",
+ "pify": "^4.0.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+ },
+ "node-forge": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz",
+ "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
+ },
+ "gtoken": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.1.tgz",
+ "integrity": "sha512-33w4FNDkUcyIOq/TqyC+drnKdI4PdXmWp9lZzssyEQKuvu9ZFN3KttaSnDKo52U3E51oujVGop93mKxmqO8HHg==",
+ "requires": {
+ "gaxios": "^3.0.0",
+ "google-p12-pem": "^3.0.0",
+ "jws": "^4.0.0",
+ "mime": "^2.2.0"
+ },
+ "dependencies": {
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "requires": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "handlebars": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
+ "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+ "requires": {
+ "async": "^2.5.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hoist-non-react-statics": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+ "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "requires": {
+ "whatwg-encoding": "^1.0.1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-generator-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz",
+ "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "requires": {
+ "node-fetch": "^1.0.1",
+ "whatwg-fetch": ">=0.10.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "istanbul-api": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
+ "requires": {
+ "async": "^2.1.4",
+ "fileset": "^2.0.2",
+ "istanbul-lib-coverage": "^1.2.1",
+ "istanbul-lib-hook": "^1.2.2",
+ "istanbul-lib-instrument": "^1.10.2",
+ "istanbul-lib-report": "^1.1.5",
+ "istanbul-lib-source-maps": "^1.2.6",
+ "istanbul-reports": "^1.5.1",
+ "js-yaml": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "once": "^1.4.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ=="
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
+ "requires": {
+ "append-transform": "^0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
+ "requires": {
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "path-parse": "^1.0.5",
+ "supports-color": "^3.1.2"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
+ "requires": {
+ "debug": "^3.1.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.1",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
+ "requires": {
+ "handlebars": "^4.0.3"
+ }
+ },
+ "jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz",
+ "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==",
+ "requires": {
+ "import-local": "^1.0.0",
+ "jest-cli": "^23.6.0"
+ }
+ },
+ "jest-changed-files": {
+ "version": "23.4.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz",
+ "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==",
+ "requires": {
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-cli": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz",
+ "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==",
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "import-local": "^1.0.0",
+ "is-ci": "^1.0.10",
+ "istanbul-api": "^1.3.1",
+ "istanbul-lib-coverage": "^1.2.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "istanbul-lib-source-maps": "^1.2.4",
+ "jest-changed-files": "^23.4.2",
+ "jest-config": "^23.6.0",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve-dependencies": "^23.6.0",
+ "jest-runner": "^23.6.0",
+ "jest-runtime": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "jest-watcher": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "node-notifier": "^5.2.1",
+ "prompts": "^0.1.9",
+ "realpath-native": "^1.0.0",
+ "rimraf": "^2.5.4",
+ "slash": "^1.0.0",
+ "string-length": "^2.0.0",
+ "strip-ansi": "^4.0.0",
+ "which": "^1.2.12",
+ "yargs": "^11.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz",
+ "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==",
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-jest": "^23.6.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-environment-node": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-diff": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz",
+ "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-docblock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz",
+ "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz",
+ "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz",
+ "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0",
+ "jsdom": "^11.5.1"
+ }
+ },
+ "jest-environment-node": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz",
+ "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w=="
+ },
+ "jest-haste-map": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz",
+ "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==",
+ "requires": {
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "invariant": "^2.2.4",
+ "jest-docblock": "^23.2.0",
+ "jest-serializer": "^23.0.1",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "sane": "^2.0.0"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz",
+ "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==",
+ "requires": {
+ "babel-traverse": "^6.0.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^23.6.0",
+ "is-generator-fn": "^1.0.0",
+ "jest-diff": "^23.6.0",
+ "jest-each": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz",
+ "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==",
+ "requires": {
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz",
+ "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz",
+ "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
+ "requires": {
+ "@babel/code-frame": "^7.0.0-beta.35",
+ "chalk": "^2.0.1",
+ "micromatch": "^2.3.11",
+ "slash": "^1.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz",
+ "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ="
+ },
+ "jest-regex-util": {
+ "version": "23.3.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz",
+ "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U="
+ },
+ "jest-resolve": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz",
+ "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==",
+ "requires": {
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "realpath-native": "^1.0.0"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz",
+ "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==",
+ "requires": {
+ "jest-regex-util": "^23.3.0",
+ "jest-snapshot": "^23.6.0"
+ }
+ },
+ "jest-runner": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz",
+ "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==",
+ "requires": {
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-docblock": "^23.2.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-leak-detector": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-runtime": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-support": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ }
+ }
+ },
+ "jest-runtime": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz",
+ "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==",
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-plugin-istanbul": "^4.1.6",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "exit": "^0.1.2",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "realpath-native": "^1.0.0",
+ "slash": "^1.0.0",
+ "strip-bom": "3.0.0",
+ "write-file-atomic": "^2.1.0",
+ "yargs": "^11.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "23.0.1",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz",
+ "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU="
+ },
+ "jest-snapshot": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz",
+ "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==",
+ "requires": {
+ "babel-types": "^6.0.0",
+ "chalk": "^2.0.1",
+ "jest-diff": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-resolve": "^23.6.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^23.6.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "jest-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz",
+ "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
+ "requires": {
+ "callsites": "^2.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.11",
+ "is-ci": "^1.0.10",
+ "jest-message-util": "^23.4.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-watcher": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz",
+ "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "string-length": "^2.0.0"
+ }
+ },
+ "jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "requires": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-bigint": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz",
+ "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=",
+ "requires": {
+ "bignumber.js": "^7.0.0"
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsonwebtoken": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz",
+ "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==",
+ "requires": {
+ "jws": "^3.1.5",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jszip": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz",
+ "integrity": "sha1-dET9hVHd8+XacZj+oMkbyDCMwnQ=",
+ "requires": {
+ "pako": "~0.2.5"
+ }
+ },
+ "jwa": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
+ "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.10",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jwks-rsa": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.3.0.tgz",
+ "integrity": "sha512-9q+d5VffK/FvFAjuXoddrq7zQybFSINV4mcwJJExGKXGyjWWpTt3vsn/aX33aB0heY02LK0qSyicdtRK0gVTig==",
+ "requires": {
+ "@types/express-jwt": "0.0.34",
+ "debug": "^2.2.0",
+ "limiter": "^1.1.0",
+ "lru-memoizer": "^1.6.0",
+ "ms": "^2.0.0",
+ "request": "^2.73.0"
+ }
+ },
+ "jws": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
+ "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
+ "requires": {
+ "jwa": "^1.1.5",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "kleur": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
+ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ=="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
+ },
+ "lerna": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.11.0.tgz",
+ "integrity": "sha512-kgM6zwe2P2tR30MYvgiLLW+9buFCm6E7o8HnRlhTgm70WVBvXVhydqv+q/MF2HrVZkCawfVtCfetyQmtd4oHhQ==",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.0",
+ "chalk": "^2.1.0",
+ "cmd-shim": "^2.0.2",
+ "columnify": "^1.5.4",
+ "command-join": "^2.0.0",
+ "conventional-changelog-cli": "^1.3.13",
+ "conventional-recommended-bump": "^1.2.1",
+ "dedent": "^0.7.0",
+ "execa": "^0.8.0",
+ "find-up": "^2.1.0",
+ "fs-extra": "^4.0.1",
+ "get-port": "^3.2.0",
+ "glob": "^7.1.2",
+ "glob-parent": "^3.1.0",
+ "globby": "^6.1.0",
+ "graceful-fs": "^4.1.11",
+ "hosted-git-info": "^2.5.0",
+ "inquirer": "^3.2.2",
+ "is-ci": "^1.0.10",
+ "load-json-file": "^4.0.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "npmlog": "^4.1.2",
+ "p-finally": "^1.0.0",
+ "package-json": "^4.0.1",
+ "path-exists": "^3.0.0",
+ "read-cmd-shim": "^1.0.1",
+ "read-pkg": "^3.0.0",
+ "rimraf": "^2.6.1",
+ "safe-buffer": "^5.1.1",
+ "semver": "^5.4.1",
+ "signal-exit": "^3.0.2",
+ "slash": "^1.0.0",
+ "strong-log-transformer": "^1.0.6",
+ "temp-write": "^3.3.0",
+ "write-file-atomic": "^2.3.0",
+ "write-json-file": "^2.2.0",
+ "write-pkg": "^3.1.0",
+ "yargs": "^8.0.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ },
+ "dependencies": {
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "read-pkg-up": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^7.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA="
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "limiter": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz",
+ "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw=="
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "load-script": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
+ "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lock": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz",
+ "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0="
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "lodash-es": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.11.tgz",
+ "integrity": "sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q=="
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ },
+ "lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0"
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lop": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.0.tgz",
+ "integrity": "sha1-Tw5DhNXE9FXQuG0lT9UqnQVZPCw=",
+ "requires": {
+ "duck": "~0.1.11",
+ "option": "~0.2.1",
+ "underscore": "~1.4.4"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
+ }
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "lru-memoizer": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz",
+ "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=",
+ "requires": {
+ "lock": "~0.1.2",
+ "lodash": "^4.17.4",
+ "lru-cache": "~4.0.0",
+ "very-fast-args": "^1.1.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
+ "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
+ "requires": {
+ "pseudomap": "^1.0.1",
+ "yallist": "^2.0.0"
+ }
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "mammoth": {
+ "version": "1.4.9",
+ "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.4.9.tgz",
+ "integrity": "sha512-Qg9t6HBPeMPIRE6Oyd1DAovgu8ZJ5gAWPzqhBgOQQbNrGbBa5pewxrCqyeMUOm0u4mwYO5KziGYcykmMzdUL2A==",
+ "requires": {
+ "argparse": "~1.0.3",
+ "bluebird": "~3.4.0",
+ "jszip": "~2.5.0",
+ "lop": "~0.4.0",
+ "path-is-absolute": "^1.0.0",
+ "sax": "~1.1.1",
+ "underscore": "~1.8.3",
+ "xmlbuilder": "^10.0.0"
+ },
+ "dependencies": {
+ "sax": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz",
+ "integrity": "sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA="
+ },
+ "xmlbuilder": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz",
+ "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg=="
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ },
+ "dependencies": {
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "merge": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz",
+ "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo="
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "mime": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
+ },
+ "mime-db": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
+ "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
+ },
+ "mime-types": {
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
+ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "requires": {
+ "mime-db": "~1.36.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true
+ },
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
+ "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
+ }
+ },
+ "node-forge": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz",
+ "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ=="
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
+ },
+ "node-notifier": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz",
+ "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==",
+ "requires": {
+ "growly": "^1.3.0",
+ "semver": "^5.4.1",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nwsapi": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
+ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "option": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz",
+ "integrity": "sha1-/Udc35jcq7PLOXo7pShP60Xtv+Q="
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ }
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ },
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ }
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "prompts": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
+ "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
+ "requires": {
+ "kleur": "^2.0.1",
+ "sisteransi": "^0.1.1"
+ }
+ },
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "requires": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "prop-types-extra": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.0.tgz",
+ "integrity": "sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg==",
+ "requires": {
+ "react-is": "^16.3.2",
+ "warning": "^3.0.0"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz",
+ "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU="
+ },
+ "randomatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz",
+ "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==",
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "react": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
+ "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
+ "requires": {
+ "create-react-class": "^15.6.0",
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.0",
+ "prop-types": "^15.5.10"
+ }
+ },
+ "react-bootstrap-typeahead": {
+ "version": "2.6.0",
+ "resolved": "http://registry.npmjs.org/react-bootstrap-typeahead/-/react-bootstrap-typeahead-2.6.0.tgz",
+ "integrity": "sha1-0Y/YCN8rLzOb0Tf/Ntf0sObCyyY=",
+ "requires": {
+ "classnames": "^2.2.0",
+ "escape-string-regexp": "^1.0.5",
+ "invariant": "^2.2.1",
+ "lodash": "^4.17.2",
+ "prop-types": "^15.5.8",
+ "prop-types-extra": "^1.0.1",
+ "react-onclickoutside": "^6.1.1",
+ "react-overlays": "^0.8.1",
+ "warning": "^3.0.0"
+ }
+ },
+ "react-burger-menu": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/react-burger-menu/-/react-burger-menu-2.5.3.tgz",
+ "integrity": "sha512-7mwg9n65fLP33ddGPXFB8AYb+OOK3FE5UqfdfCtb6Pmj7ajag6umTWDYtZh67SGabQni12qhAnvyW08gegftZw==",
+ "requires": {
+ "browserify-optional": "^1.0.0",
+ "classnames": "^2.1.1",
+ "eve": "~0.5.1",
+ "prop-types": "^15.6.1",
+ "snapsvg-cjs": "0.0.6"
+ }
+ },
+ "react-dom": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz",
+ "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
+ "requires": {
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.0",
+ "prop-types": "^15.5.10"
+ }
+ },
+ "react-icon-base": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.1.0.tgz",
+ "integrity": "sha1-oZbjP98eeqof2jrvu2i9rZ6Cp50="
+ },
+ "react-icons": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.7.tgz",
+ "integrity": "sha512-0n4lcGqzJFcIQLoQytLdJCE0DKSA9dkwEZRYoGrIDJZFvIT6Hbajx5mv9geqhqFiNjUgtxg8kPyDfjlhymbGFg==",
+ "requires": {
+ "react-icon-base": "2.1.0"
+ }
+ },
+ "react-input-moment": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/react-input-moment/-/react-input-moment-1.7.10.tgz",
+ "integrity": "sha512-Sq6syRMuL9LyF9H903pUXzzucx/Xid9EWruoM/V/1oe3hPttF/ZGCh+8q3dBp9fy6+Vl2UveZkTz5Luu1T96RQ==",
+ "requires": {
+ "classnames": "^2.2.0",
+ "lodash": "^4.17.4",
+ "moment": "^2.21.0",
+ "react": "^15.6.2",
+ "react-dom": "^15.6.2",
+ "react-icons": "^2.2.0",
+ "react-input-slider": "^4.0.1"
+ }
+ },
+ "react-input-slider": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/react-input-slider/-/react-input-slider-4.0.1.tgz",
+ "integrity": "sha512-bHPUY+ipupFwPpnIcUwasAAZJOQaIKYbgUCiH5RsPoVuvjlVUmXGKg0kYTcPz/lLpFyZrlEh9OHbpvdScNR6cQ==",
+ "requires": {
+ "blacklist": "^1.1.2",
+ "classnames": "^2.2.0",
+ "prop-types": "^15.5.10"
+ }
+ },
+ "react-is": {
+ "version": "16.5.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.2.tgz",
+ "integrity": "sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ=="
+ },
+ "react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+ },
+ "react-onclickoutside": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz",
+ "integrity": "sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg=="
+ },
+ "react-overlays": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz",
+ "integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==",
+ "requires": {
+ "classnames": "^2.2.5",
+ "dom-helpers": "^3.2.1",
+ "prop-types": "^15.5.10",
+ "prop-types-extra": "^1.0.1",
+ "react-transition-group": "^2.2.0",
+ "warning": "^3.0.0"
+ }
+ },
+ "react-player": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/react-player/-/react-player-1.12.0.tgz",
+ "integrity": "sha512-KF4rshm9329X9UyR70bI8LsI738gnvbSzxayD/CKz7pMZTDeMhJXgsDgpurCAkb7tDCGxbVqNjG+CP/OLVGcqw==",
+ "requires": {
+ "deepmerge": "^4.0.0",
+ "load-script": "^1.0.0",
+ "prop-types": "^15.5.6"
+ }
+ },
+ "react-redux": {
+ "version": "5.0.7",
+ "resolved": "http://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz",
+ "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==",
+ "requires": {
+ "hoist-non-react-statics": "^2.5.0",
+ "invariant": "^2.0.0",
+ "lodash": "^4.17.5",
+ "lodash-es": "^4.17.5",
+ "loose-envify": "^1.1.0",
+ "prop-types": "^15.6.0"
+ }
+ },
+ "react-times": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/react-times/-/react-times-3.1.9.tgz",
+ "integrity": "sha512-CVbT6XeaxMd0j5aKjVb44yhYJReXBHOZ39Kap8goTI7of/C9ZXRTKTHU5JtgUeoGC88yOTSGk1wkyymTEBVGeA==",
+ "requires": {
+ "classnames": "^2.2.6",
+ "prop-types": "^15.6.0",
+ "react-bootstrap-typeahead": "^2.4.0",
+ "react-transition-group": "^2.2.1"
+ }
+ },
+ "react-transition-group": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.0.tgz",
+ "integrity": "sha512-qYB3JBF+9Y4sE4/Mg/9O6WFpdoYjeeYqx0AFb64PTazVy8RPMiE3A47CG9QmM4WJ/mzDiZYslV+Uly6O1Erlgw==",
+ "requires": {
+ "dom-helpers": "^3.3.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2",
+ "react-lifecycles-compat": "^3.0.4"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
+ "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "realpath-native": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz",
+ "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==",
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "redux": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz",
+ "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "symbol-observable": "^1.2.0"
+ }
+ },
+ "redux-persist": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-5.10.0.tgz",
+ "integrity": "sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "requires": {
+ "lodash": "^4.13.1"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
+ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "requires": {
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw=="
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sane": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
+ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "capture-exit": "^1.2.0",
+ "exec-sh": "^0.2.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.3",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5",
+ "watch": "~0.18.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "scriptjs": {
+ "version": "2.5.8",
+ "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.8.tgz",
+ "integrity": "sha1-0MQ5VcLmutM7bk7fe1O4llqnyl8="
+ },
+ "semver": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "sisteransi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz",
+ "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g=="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "snapsvg": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/snapsvg/-/snapsvg-0.5.1.tgz",
+ "integrity": "sha1-DK9Sx5GJopB0b8RGzF6GP2vd3+M=",
+ "requires": {
+ "eve": "~0.5.1"
+ }
+ },
+ "snapsvg-cjs": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/snapsvg-cjs/-/snapsvg-cjs-0.0.6.tgz",
+ "integrity": "sha1-Oy9WryVz09Nkw+1b+IhXRfTS3eE=",
+ "requires": {
+ "snapsvg": "0.5.1"
+ }
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.1.tgz",
+ "integrity": "sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
+ "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w=="
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz",
+ "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "strong-log-transformer": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz",
+ "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=",
+ "dev": true,
+ "requires": {
+ "byline": "^5.0.0",
+ "duplexer": "^0.1.1",
+ "minimist": "^0.1.0",
+ "moment": "^2.6.0",
+ "through": "^2.3.4"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.1.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
+ "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-react-loader": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/svg-react-loader/-/svg-react-loader-0.4.5.tgz",
+ "integrity": "sha1-HzJMnHuFj1yJ+sdSu+nKP2IU+FA=",
+ "requires": {
+ "css": "2.2.1",
+ "loader-utils": "1.1.0",
+ "ramda": "0.21.0",
+ "rx": "4.1.0",
+ "traverse": "0.6.6",
+ "xml2js": "0.4.17"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
+ },
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "temp-write": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz",
+ "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "is-stream": "^1.1.0",
+ "make-dir": "^1.0.0",
+ "pify": "^3.0.0",
+ "temp-dir": "^1.0.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "tempfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+ "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "uuid": "^2.0.1"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
+ "requires": {
+ "arrify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "object-assign": "^4.1.0",
+ "read-pkg-up": "^1.0.1",
+ "require-main-filename": "^1.0.1"
+ }
+ },
+ "text-extensions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz",
+ "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==",
+ "dev": true
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "trim-off-newlines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.19",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz",
+ "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ=="
+ },
+ "uglify-js": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "optional": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true
+ }
+ }
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "url-template": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+ "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE="
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "very-fast-args": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz",
+ "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y="
+ },
+ "w3c-hr-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
+ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "requires": {
+ "browser-process-hrtime": "^0.1.2"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+ "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "watch": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
+ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+ "requires": {
+ "exec-sh": "^0.2.0",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
+ },
+ "whatwg-encoding": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz",
+ "integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==",
+ "requires": {
+ "iconv-lite": "0.4.23"
+ }
+ },
+ "whatwg-fetch": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+ "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
+ },
+ "whatwg-mimetype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz",
+ "integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw=="
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "write-json-file": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
+ "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
+ "dev": true,
+ "requires": {
+ "detect-indent": "^5.0.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "pify": "^3.0.0",
+ "sort-keys": "^2.0.0",
+ "write-file-atomic": "^2.0.0"
+ },
+ "dependencies": {
+ "detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "write-pkg": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz",
+ "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==",
+ "dev": true,
+ "requires": {
+ "sort-keys": "^2.0.0",
+ "write-json-file": "^2.2.0"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
+ },
+ "xml2js": {
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
+ "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "^4.1.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
+ "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+ "requires": {
+ "lodash": "^4.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "11.1.0",
+ "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000..aa8939c055
--- /dev/null
+++ b/package.json
@@ -0,0 +1,38 @@
+{
+ "devDependencies": {
+ "lerna": "^2.11.0"
+ },
+ "scripts": {
+ "test": "lerna run test",
+ "lint": "lerna run lint"
+ },
+ "jest": {
+ "testPathIgnorePatterns": [
+ "[/\\\\](node_modules|packages/webapp/scripts)[/\\\\]"
+ ],
+ "verbose": true,
+ "testURL": "http://localhost/",
+ "testEnvironment": "node"
+ },
+ "dependencies": {
+ "express-jwt": "^5.3.1",
+ "express-jwt-authz": "^1.0.0",
+ "google-auth-library": "^6.0.1",
+ "google-map-react": "^1.0.6",
+ "googleapis": "^39.2.0",
+ "jest": "^23.3.0",
+ "jest-cli": "^23.3.0",
+ "jwks-rsa": "^1.2.1",
+ "mammoth": "^1.4.9",
+ "moment": "^2.24.0",
+ "natural-compare": "^1.4.0",
+ "react-burger-menu": "^2.5.2",
+ "react-input-moment": "^1.7.10",
+ "react-player": "^1.12.0",
+ "react-redux": "^5.0.7",
+ "react-times": "^3.1.9",
+ "redux": "^4.0.0",
+ "redux-persist": "^5.10.0",
+ "svg-react-loader": "^0.4.5"
+ }
+}
diff --git a/packages/api/.env b/packages/api/.env
new file mode 100644
index 0000000000..c042f572d1
--- /dev/null
+++ b/packages/api/.env
@@ -0,0 +1,14 @@
+#auth0
+AUTH0_CLIENT_ID=M1KcFA20NPEGA0f0R0V99QOzOlQk09DC
+AUTH0_CLIENT_SECRET=mp0B95FFHV2vPjgMYpwlWQKM-3Dbuxme5GOFUNc_NUaeatuVgJBUQHH74eiSLbal
+
+AUTH0_AUTH_EXTENSION_CLIENT_ID=bP6qK74o2NWhqbkUNGiQKIxAeZ7nLRGV
+AUTH0_AUTH_EXTENSION_CLIENT_SECRET=6ATw_ukhd2Ll6KyLbWlyG4l2Gh2KtCuJ2HP0R8kb4ezHNs6e9HouK0YQ6s2EhOcy
+AUTH0_AUTH_EXTENSION_URI=https://litefarm-dev.us8.webtask.io/adf6e2f2b84784b57522e3b19dfc9201
+
+CI_CLIENT_ID=M1KcFA20NPEGA0f0R0V99QOzOlQk09DC
+CI_CLIENT_SECRET=mp0B95FFHV2vPjgMYpwlWQKM-3Dbuxme5GOFUNc_NUaeatuVgJBUQHH74eiSLbal
+
+TEST_USER=testuser@litefarm.co
+TEST_USER_PW=P4ssword!
+TEST_USER_ID=5b515beef7ac1b2c61285039
diff --git a/packages/api/.eslintignore b/packages/api/.eslintignore
new file mode 100644
index 0000000000..d5217ecf4c
--- /dev/null
+++ b/packages/api/.eslintignore
@@ -0,0 +1 @@
+/tests
\ No newline at end of file
diff --git a/packages/api/.eslintrc b/packages/api/.eslintrc
new file mode 100644
index 0000000000..cd767fae6a
--- /dev/null
+++ b/packages/api/.eslintrc
@@ -0,0 +1,26 @@
+{
+ "extends": "eslint:recommended",
+ "env": {
+ "node": true,
+ "es6": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 2017
+ },
+ "rules": {
+ "comma-dangle": ["error", "always-multiline"],
+ "comma-spacing": ["error", { "before": false, "after": true }],
+ "indent": ["error", 2, { "MemberExpression": 1 }],
+ "no-multiple-empty-lines": ["error"],
+ "no-new-symbol": "error",
+ "no-trailing-spaces": ["error"],
+ "no-undef": ["error"],
+ "no-unused-vars": ["error", { "argsIgnorePattern": "next" }],
+ "object-curly-spacing": ["error", "always"],
+ "object-shorthand": "error",
+ "prefer-const": 2,
+ "quotes": ["error", "single"],
+ "space-in-parens": ["error", "never"],
+ "strict": [2, "never"]
+ }
+}
diff --git a/packages/api/Procfile b/packages/api/Procfile
new file mode 100644
index 0000000000..902e32bf4e
--- /dev/null
+++ b/packages/api/Procfile
@@ -0,0 +1 @@
+web: npm run $NODE_ENV
diff --git a/packages/api/db/crop_data.js b/packages/api/db/crop_data.js
new file mode 100644
index 0000000000..65a433922d
--- /dev/null
+++ b/packages/api/db/crop_data.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (crop_data.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+var csv = require('csvtojson');
+
+exports.seed = function(knex, Promise) {
+ // Deletes ALL existing entries
+ return new Promise(resolve => {
+ knex('crop').del()
+ .then(function () {
+ return csv().fromFile(__dirname + '/seedData/crop_data.csv')
+ .then((jsonBlob) => {
+ const jsonObject = JSON.stringify(jsonBlob, (key, value) => {
+ return value.length === 0 ? null : value;
+ });
+ return knex('crop').insert(JSON.parse(jsonObject)).then(() => {
+ resolve();
+ })
+ });
+ });
+ })
+};
diff --git a/packages/api/db/fertilizer_data.js b/packages/api/db/fertilizer_data.js
new file mode 100644
index 0000000000..509b45434e
--- /dev/null
+++ b/packages/api/db/fertilizer_data.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fertilizer_data.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+var csv = require('csvtojson');
+
+exports.seed = function(knex, Promise) {
+ // Deletes ALL existing entries
+ return new Promise(resolve => {
+ knex('fertilizer').del()
+ .then(function () {
+ return csv().fromFile(__dirname + '/seedData/fertilizers.csv')
+ .then((jsonBlob) => {
+ const jsonObject = JSON.stringify(jsonBlob, (key, value) => {
+ return value.length === 0 ? null : value;
+ });
+ return knex('fertilizer').insert(JSON.parse(jsonObject)).then(() => {
+ resolve();
+ })
+ });
+ });
+ })
+};
diff --git a/packages/api/db/migration/20180517190849_create_lite_farm_db.js b/packages/api/db/migration/20180517190849_create_lite_farm_db.js
new file mode 100644
index 0000000000..dd1be55c00
--- /dev/null
+++ b/packages/api/db/migration/20180517190849_create_lite_farm_db.js
@@ -0,0 +1,587 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180517190849_create_lite_farm_db.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function (knex, Promise) {
+ //Add all the tables for DB
+ await knex.raw('CREATE EXTENSION IF NOT EXISTS "uuid-ossp";');
+ return Promise.all([
+ knex.schema.createTable('farm', function (table) {
+ table.uuid('farm_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ table.string('farm_name').notNullable();
+ table.string('address');
+ table.jsonb('phone_number');
+ table.jsonb('units').defaultTo(JSON.stringify({
+ measurement: 'metric',
+ currency: 'CAD',
+ date_format: 'MM/DD/YY',
+ }));
+ }),
+
+ knex.schema.createTable('users', function (table) {
+ table.string('user_id').primary();
+ table.string('first_name').notNullable();
+ table.string('last_name').notNullable();
+ table.string('profile_picture');
+ table.string('email')
+ .unique()
+ .notNullable();
+ table.string('phone_number')
+ .nullable();
+ table.string('address')
+ .nullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm');
+ table.boolean('is_admin').notNullable().defaultTo(false);
+ table.jsonb('notification_setting').defaultTo(JSON.stringify(
+ {
+ alert_weather : true,
+ alert_worker_finish : true,
+ alert_action_after_scouting : true,
+ alert_before_planned_date : true,
+ alert_pest: true,
+ }
+ ));
+ table.jsonb('wage').defaultTo(JSON.stringify(
+ {
+ type: 'hourly',
+ amount: 0,
+ }
+ ));
+ table.timestamps(false, true);
+ }),
+
+ //Notification Table
+ knex.schema.createTable('notification', function (table) {
+ table.uuid('notification_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ table.string('user_id').references('user_id').inTable('users');
+ table.enu('notification_kind', ['todo_added','alert_weather', 'alert_worker_finish', 'alert_action_after_scouting', 'alert_before_planned_date', 'alert_pest']).notNullable();
+ table.boolean('is_read').notNullable().defaultTo(false);
+ table.timestamps(false, true);
+ }),
+
+ //Is this the correct way to make the primary keys?
+ knex.schema.createTable('userManages', function (table) {
+ table.string('manager_id')
+ .references('user_id')
+ .inTable('users');
+ table.string('manages_id')
+ .references('user_id')
+ .inTable('users');
+ table.primary(['manages_id', 'manager_id']);
+ }),
+
+ knex.schema.createTable('field', function (table) {
+ table.uuid('field_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm');
+ table.unique(['field_id', 'farm_id']);
+ table.jsonb('grid_points');
+ }),
+
+ knex.schema.createTable('bed', function (table) {
+ table.uuid('bed_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE');
+ table.float('bed_length').unsigned();
+ table.integer('bed_index_in_field').unsigned().notNullable();
+
+ table.index(['field_id']); //TODO: see if this works
+ }),
+
+ knex.schema.createTable('crop', function (table) {
+ table.increments('crop_id');
+ table.string('crop_common_name'); //same as common name crop_scientific_name,crop_common_name
+ table.string('crop_genus'); //scientific name
+ table.string('crop_specie'); //scientific name //crop_genus,crop_specie
+ table.unique(['crop_common_name', 'crop_genus', 'crop_specie']); //index?
+ table.enu('crop_group',
+ ['Other crops', 'Fruit and nuts', 'Beverage and spice crops', 'Potatoes and yams'
+ , 'Vegetables and melons', 'Cereals', 'Leguminous crops', 'Sugar crops', 'Oilseed crops']); //TODO: ??
+ table.enu('crop_subgroup',
+ ['Fibre crops', 'Grasses and other fodder crops', 'Nuts',
+ 'Temporary spice crops', 'Pome fruits and stone fruits', 'Other crops',
+ 'High starch Root/tuber crops', 'Leafy or stem vegetables',
+ 'Tropical and subtropical fruits',
+ 'Cereals', 'Legumes', 'Sugar crops (root)',
+ 'Citrus fruits', 'Permanent spice crops',
+ 'Berries', 'Fruit-bearing vegetables', 'Other fruits',
+ 'Root, bulb, or tuberous vegetables', 'Temporary oilseed crops',
+ 'Permanent oilseed crops', 'Medicinal, aromatic, pesticidal, or similar crops',
+ 'Grapes', 'Flower crops', 'Mushrooms and truffles', 'Rubber', 'Sugar crops (other)',
+ 'Tobacco']);
+ table.float('max_rooting_depth');
+ table.float('depletion_fraction');
+ table.boolean('is_avg_depth').defaultTo(false).notNullable();
+ table.float('initial_kc');
+ table.float('mid_kc');
+ table.float('end_kc');
+ table.float('max_height');
+ table.boolean('is_avg_kc');
+ table.string('nutrient_notes');
+ table.float('percentrefuse');
+ table.string('refuse');
+ table.float('protein');
+ table.float('lipid');
+ table.float('energy');
+ table.float('ca');
+ table.float('fe');
+ table.float('mg');
+ table.float('ph');
+ table.float('k');
+ table.float('na');
+ table.float('zn');
+ table.float('cu');
+ table.float('fl');
+ table.float('mn');
+ table.float('se');
+ table.float('vita_rae');
+ table.float('vite');
+ table.float('vitc');
+ table.float('thiamin');
+ table.float('riboflavin');
+ table.float('niacin');
+ table.float('pantothenic');
+ table.float('vitb6');
+ table.float('folate');
+ table.float('vitb12');
+ table.float('vitk');
+ table.boolean('is_avg_nutrient').defaultTo(false)
+ .notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').defaultTo(null);
+
+ table.boolean('user_added').defaultTo(false).notNullable();
+ table.boolean('deleted')
+ .defaultTo(false);
+ //TODO: add other stuff
+ }),
+
+
+ /*
+ scientific_name (species),
+ common_name,
+ crop_group,
+ crop_subgroup,
+ max_rooting_depth,
+ ,
+ ,initial_kc,
+ mid_kc,end_kc,max_height,is_avg_kc,nutrient_notes,percentrefuse,refuse,protein,lipid,energy,ca,fe,mg,ph,k,na,zn,cu,fl,mn,se,vita_rae,vite,vitc,thiamin,riboflavin,niacin,pantothenic,vitb6,folate,vitb12,vitk,is_avg_nutrient
+ */
+
+ knex.schema.createTable('farmCrop', function (table) {
+ table.increments('farm_crop_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.float('expected_yield');
+ table.string('variety');
+ table.unique(['crop_id', 'farm_id', 'variety']);
+ }),
+
+ /*knex.schema.createTable('farmCropConfig', function (table) {
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop')
+ .primary();
+ table.float('expected_yield');
+ }),*/
+
+ knex.schema.createTable('cropBed', function (table) {
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop');
+ table.uuid('bed_id')
+ .references('bed_id')
+ .inTable('bed');
+ table.float('length').notNullable();
+ table.integer('crop_bed_index_in_bed').notNullable();
+ table.primary(['bed_id', 'farm_crop_id']);
+ }),
+
+ knex.schema.createTable('cropCommonName', function (table) {
+ table.string('crop_name');
+ table.bigint('crop_id')
+ .references('crop_id')
+ .inTable('crop');
+ }),
+
+ knex.schema.createTable('disease', function (table) {
+ table.increments('disease_id');
+ table.string('disease_scientific_name').nullable();
+ table.string('disease_common_name');
+ table.enu('disease_group', ['Fungus', 'Insect', 'Bacteria', 'Virus', 'Deficiency', 'Mite', 'Other', 'Weed']); //TODO: is going to be
+ //table.unique(['disease_scientific_name', 'disease_common_name']);
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').defaultTo(null);
+ }),
+
+ knex.schema.createTable('cropDisease', function (table) {
+ table.integer('disease_id')
+ .references('disease_id')
+ .inTable('disease');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop');
+ table.primary(['disease_id', 'crop_id']);
+ }),
+
+ knex.schema.createTable('sale', function (table) {
+ table.increments('sale_id');
+ table.string('customer_name').notNullable();
+ table.dateTime('sale_date').notNullable();
+ }),
+
+ knex.schema.createTable('plan', function (table) {
+ table.uuid('plan_id').primary();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm');
+ table.jsonb('plan_config').notNullable();
+ }),
+
+ knex.schema.createTable('cropSale', function (table) {
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop').onDelete('CASCADE');
+ table.integer('sale_id')
+ .references('sale_id')
+ .inTable('sale').onDelete('CASCADE');
+ table.integer('quantity').unsigned();
+ table.integer('sale_value');
+ }),
+
+ knex.schema.createTable('farmExpenseType', function (table) {
+ table.increments('expense_type_id');
+ table.string('expense_name');
+ table.boolean('user_added')
+ .defaultTo(false);
+ }),
+
+ knex.schema.createTable('farmExpense', function (table) {
+ table.uuid('farm_expense_id').primary();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm');
+ table.integer('expense_type_id')
+ .references('expense_type_id')
+ .inTable('farmExpenseType');
+ table.dateTime('expense_date').notNullable();
+ table.integer('value').notNullable().unsigned();
+ table.string('picture');
+ table.string('note');
+ }),
+
+ knex.schema.createTable('shift', function (table) {
+ table.uuid('shift_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ // table.enu('shift_type', ['bedPreparation', 'delivery', 'sales', 'washingAndPacking',
+ // 'seeding', 'fertilizing', 'scouting', 'harvesting', 'weeding',
+ // 'socialEvent', 'pestAndDiseaseControl', 'other']);
+ table.dateTime('start_time').notNullable();
+ table.dateTime('end_time').notNullable();
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users');
+ table.integer('break_duration').defaultTo(0);
+ table.enu('mood', ['happy', 'neutral', 'very happy', 'sad', 'very sad']).nullable();
+ }),
+
+ knex.schema.createTable('taskType', function (table) {
+ table.increments('task_id').primary();
+ table.string('task_name').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').defaultTo(null);
+ }),
+
+ knex.schema.createTable('shiftTask', function (table) {
+ table.integer('task_id')
+ .references('task_id')
+ .inTable('taskType');
+ table.uuid('shift_id')
+ .references('shift_id')
+ .inTable('shift');
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop').notNullable();
+ table.boolean('is_field').defaultTo(false);
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE').nullable();
+ table.integer('duration').notNullable();
+ }),
+
+ knex.schema.createTable('todo', function (table) {
+ table.increments('todo_id').primary();
+ table.string('todo_text').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm');
+ table.boolean('is_done').defaultTo(false);
+ }),
+
+ knex.schema.createTable('userTodo', function (table) {
+ table.integer('todo_id')
+ .references('todo_id')
+ .inTable('todo');
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users');
+ table.primary(['todo_id', 'user_id']);
+ }),
+
+ knex.schema.createTable('activityLog', function (table) {
+ table.increments('activity_id').primary();
+ table.enu('activity_kind', ['fertilizing', 'pestControl', 'scouting', 'irrigation', 'harvest', 'seeding', 'fieldWork', 'weatherData', 'soilData', 'other']);
+ table.dateTime('date').notNullable();
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').notNullable();
+ table.string('notes');
+ table.boolean('action_need')
+ .defaultTo(false);
+ table.string('photo');
+ }),
+
+ knex.schema.createTable('activityBeds', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.uuid('bed_id')
+ .references('bed_id')
+ .inTable('bed');
+ table.primary(['bed_id', 'activity_id']);
+ }),
+
+ knex.schema.createTable('activityFields', function(table){
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE');
+ table.primary(['field_id', 'activity_id']);
+ }),
+
+ knex.schema.createTable('activityCrops', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop');
+ table.float('quantity').unsigned();
+ table.enu('quantity_unit', ['lb', 'kg']).defaultTo('kg');
+ table.primary(['activity_id', 'farm_crop_id']);
+ }),
+
+ knex.schema.createTable('fertilizer', function (table) {
+ table.increments('fertilizer_id');
+ table.string('fertilizer_type');
+ table.float('moisture_percentage');
+ table.float('n_percentage');
+ table.float('nh4_n_ppm');
+ table.float('p_percentage');
+ table.float('k_percentage');
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').defaultTo(null);
+ }),
+
+ knex.schema.createTable('scoutingLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.enu('type', ['harvest', 'pest', 'disease', 'weed', 'other']);
+ }),
+
+ knex.schema.createTable('fieldworkLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.enu('type', ['plow', 'ridgeTill', 'zoneTill', 'mulchTill', 'ripping', 'discing']);
+ }),
+
+ knex.schema.createTable('fertilizerLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.integer('fertilizer_id')
+ .references('fertilizer_id')
+ .inTable('fertilizer');
+ table.integer('quantity');
+ table.enu('quantity_unit', ['g', 'lb', 'kg', 'oz', 'l', 'gal']).defaultTo('kg');
+ }),
+
+ /*
+ Going to do the no3 and nh4 the dirty way for now
+ knex.schema.createTable('fertilizerLogConfig', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog');
+ table.string('name');
+ table.float('value');
+ table.primary(['activity_id', 'name']);
+ }),*/
+
+ knex.schema.createTable('irrigationLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.enu('type', ['sprinkler', 'drip', 'subsurface', 'flood']);
+ table.float('flow_rate');
+ table.enu('flow_rate_unit', ['l/min', 'l/hr', 'gal/min', 'gal/hr']).defaultTo('l/min');
+ table.float('hours');
+ }),
+
+ knex.schema.createTable('seedLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.enu('type', []);
+ table.string('product_name').notNullable();
+ table.float('space_depth');
+ table.float('space_length');
+ table.float('space_width');
+ table.float('rate');
+ table.enu('space_unit', ['cm', 'in']);
+ table.enu('rate_unit', ['units/m2', 'units/ft2']);
+ }),
+
+ knex.schema.createTable('pesticide', function (table) {
+ table.increments('pesticide_id');
+ table.string('pesticide_name');
+ table.float('entry_interval').defaultTo(0);
+ table.float('harvest_interval').defaultTo(0);
+ table.string('active_ingredients').nullable();
+ table.float('concentration').defaultTo(0);
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').defaultTo(null);
+ }),
+
+ knex.schema.createTable('pestControlLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.integer('pesticide_id')
+ .references('pesticide_id')
+ .inTable('pesticide');
+ table.float('quantity').unsigned().notNullable();
+ table.enu('quantity_unit', ['g', 'lb', 'kg', 'oz', 'l', 'gal']).defaultTo('kg');
+ table.enu('type', ['systemicSpray', 'foliarSpray', 'handPick', 'biologicalControl', 'burning', 'soilFumigation', 'heatTreatment']).notNullable();
+ table.integer('target_disease_id')
+ .references('disease_id')
+ .inTable('disease');
+ }),
+
+ knex.schema.createTable('soilDataLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.float('start_depth');
+ table.float('end_depth');
+ table.enu('depth', ['cm', 'in']);
+ table.enu('texture', ['sand', 'loamySand', 'sandyLoam', 'loam',
+ 'siltLoam', 'silt', 'sandyClayLoam', 'clayLoam', 'siltyClayLoam',
+ 'sandyClay', 'siltyClay', 'clay']);
+ table.float('k');
+ table.float('p');
+ table.float('n');
+ table.float('om');
+ table.float('ph'); //won't have any units
+ table.float('bulk_density');
+ table.enu('bulk_density_unit', ['g/cm3', 'lb/inch3']);
+ table.float('organic_carbon');
+ table.float('inorganic_carbon');
+ table.float('s');
+ table.float('ca');
+ table.float('mg');
+ table.float('zn');
+ table.float('mn');
+ table.float('fe');
+ table.float('cu');
+ table.float('b');
+ table.float('cec');
+ table.enu('units', ['percentage', 'mg/kg', 'ounces/lb']);
+ }),
+ ])
+};
+
+exports.down = function (knex, Promise) {
+ //remove all the tables
+ return Promise.all([
+ knex.schema.dropTable('soilDataLog'),
+ knex.schema.dropTable('pestControlLog'),
+ knex.schema.dropTable('pesticide'),
+ knex.schema.dropTable('seedLog'),
+ knex.schema.dropTable('irrigationLog'),
+ // knex.schema.dropTable('fertilizerLogConfig'),
+ knex.schema.dropTable('fertilizerLog'),
+ knex.schema.dropTable('fieldworkLog'),
+ knex.schema.dropTable('scoutingLog'),
+ knex.schema.dropTable('fertilizer'),
+ knex.schema.dropTable('activityCrops'),
+ knex.schema.dropTable('activityBeds'),
+ knex.schema.dropTable('notification'),
+ knex.schema.dropTable('userTodo'),
+ knex.schema.dropTable('todo'),
+ knex.schema.dropTable('shiftTask'),
+ knex.schema.dropTable('taskType'),
+ knex.schema.dropTable('shift'),
+ knex.schema.dropTable('farmExpense'),
+ knex.schema.dropTable('cropSale'),
+ knex.schema.dropTable('sale'),
+ knex.schema.dropTable('plan'),
+ knex.schema.dropTable('cropDisease'),
+ knex.schema.dropTable('disease'),
+ knex.schema.dropTable('cropCommonName'),
+ knex.schema.dropTable('cropBed'),
+ knex.schema.dropTable('farmExpenseType'),
+ knex.schema.dropTable('farmCrop'),
+ knex.schema.dropTable('crop'),
+ knex.schema.dropTable('bed'),
+ knex.schema.dropTable('userManages'),
+ knex.schema.dropTable('activityFields'),
+ knex.schema.dropTable('field'),
+ knex.schema.dropTable('activityLog'),
+ knex.schema.dropTable('users'),
+ knex.schema.dropTable('farm'),
+ ])
+};
diff --git a/packages/api/db/migration/20180826153304_deleteFarmCrop.js b/packages/api/db/migration/20180826153304_deleteFarmCrop.js
new file mode 100644
index 0000000000..c4df5ad0fe
--- /dev/null
+++ b/packages/api/db/migration/20180826153304_deleteFarmCrop.js
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180826153304_deleteFarmCrop.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('cropBed'),
+ knex.schema.dropTable('cropSale'),
+ knex.schema.dropTable('shiftTask'),
+ knex.schema.dropTable('activityCrops'),
+ knex.schema.dropTable('farmCrop'),
+
+ knex.schema.createTable('fieldCrop', (table) => {
+ table.increments('field_crop_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE').notNullable();
+ table.dateTime('start_date');
+ table.dateTime('end_date');
+ table.float('area_used');
+ table.float('estimated_production');
+ table.string('variety');
+ }),
+
+ knex.schema.createTable('cropSale', (table) => {
+ table.integer('field_crop_id')
+ .references('field_crop_id')
+ .inTable('fieldCrop').onDelete('CASCADE');
+ table.integer('sale_id')
+ .references('sale_id')
+ .inTable('sale').onDelete('CASCADE');
+ table.integer('quantity').unsigned();
+ table.integer('sale_value');
+ }),
+
+ knex.schema.createTable('shiftTask', (table) => {
+ table.integer('task_id')
+ .references('task_id')
+ .inTable('taskType');
+ table.uuid('shift_id')
+ .references('shift_id')
+ .inTable('shift');
+ table.integer('field_crop_id')
+ .references('field_crop_id')
+ .inTable('fieldCrop').onDelete('CASCADE').nullable();
+ table.boolean('is_field').defaultTo(false);
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE').nullable();
+ table.integer('duration').notNullable();
+ }),
+
+ knex.schema.createTable('activityCrops', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.integer('field_crop_id')
+ .references('field_crop_id')
+ .inTable('fieldCrop').onDelete('CASCADE');
+ table.float('quantity').unsigned();
+ table.enu('quantity_unit', ['lb', 'kg']).defaultTo('kg');
+ table.primary(['activity_id', 'field_crop_id']);
+ }),
+
+ knex.schema.createTable('yield', (table) => {
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.dateTime('date');
+ table.float('value');
+ table.jsonb('grid_points');
+ }),
+
+ knex.schema.createTable('price', (table) => {
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.dateTime('date');
+ table.float('value');
+ table.jsonb('grid_points');
+ }),
+ ]);
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('activityCrops'),
+ knex.schema.dropTable('shiftTask'),
+ knex.schema.dropTable('cropSale'),
+ knex.schema.dropTable('fieldCrop'),
+ knex.schema.dropTable('yield'),
+ knex.schema.dropTable('price'),
+ knex.schema.createTable('farmCrop', (table) => {
+ table.increments('farm_crop_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.float('expected_yield');
+ table.string('variety');
+ table.unique(['crop_id', 'farm_id', 'variety']);
+ }),
+ knex.schema.createTable('cropSale', (table) => {
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop');
+ table.integer('sale_id')
+ .references('sale_id')
+ .inTable('sale').onDelete('CASCADE');
+ table.integer('quantity').unsigned();
+ table.integer('sale_value');
+ }),
+ knex.schema.createTable('shiftTask', (table) => {
+ table.uuid('shift_id')
+ .references('shift_id')
+ .inTable('shift');
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop').notNullable();
+ table.boolean('is_field').defaultTo(false);
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').nullable();
+ table.integer('duration').notNullable();
+ }),
+ knex.schema.createTable('activityCrops', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop');
+ table.float('quantity').unsigned();
+ table.enu('quantity_unit', ['lb', 'kg']).defaultTo('kg');
+ table.primary(['activity_id', 'farm_crop_id']);
+ }),
+ knex.schema.createTable('cropBed', function (table) {
+ table.integer('farm_crop_id')
+ .references('farm_crop_id')
+ .inTable('farmCrop');
+ table.uuid('bed_id')
+ .references('bed_id')
+ .inTable('bed');
+ table.float('length').notNullable();
+ table.integer('crop_bed_index_in_bed').notNullable();
+ table.primary(['bed_id', 'farm_crop_id']);
+ }),
+ ]);
+};
diff --git a/packages/api/db/migration/20180827135325_addFieldName.js b/packages/api/db/migration/20180827135325_addFieldName.js
new file mode 100644
index 0000000000..24362d692a
--- /dev/null
+++ b/packages/api/db/migration/20180827135325_addFieldName.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180827135325_addFieldName.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('field', (table) => {
+ table.string('field_name');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('field', (table) => {
+ table.dropColumn('field_name');
+ }),
+ ]);
+};
diff --git a/packages/api/db/migration/20180827142733_addPriceAndYield.js b/packages/api/db/migration/20180827142733_addPriceAndYield.js
new file mode 100644
index 0000000000..c73e07a323
--- /dev/null
+++ b/packages/api/db/migration/20180827142733_addPriceAndYield.js
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180827142733_addPriceAndYield.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('yield'),
+ knex.schema.dropTable('price'),
+ knex.schema.createTable('yield', (table) => {
+ table.increments('yield_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop');
+ table.float('value_kg/acre');
+ table.dateTime('date');
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ // eslint-disable-next-line quotes,comma-spacing
+ }),
+ knex.schema.createTable('price', (table) => {
+ table.increments('yield_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop');
+ table.float('value_$/kg');
+ table.dateTime('date');
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ // eslint-disable-next-line quotes,comma-spacing
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('yield'),
+ knex.schema.dropTable('price'),
+ knex.schema.createTable('yield', (table) => {
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.dateTime('date');
+ table.float('value');
+ table.jsonb('grid_points');
+ }),
+
+ knex.schema.createTable('price', (table) => {
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').notNullable();
+ table.dateTime('date');
+ table.float('value');
+ table.jsonb('grid_points');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20180828165910_fixPriceTable.js b/packages/api/db/migration/20180828165910_fixPriceTable.js
new file mode 100644
index 0000000000..b3935e91fe
--- /dev/null
+++ b/packages/api/db/migration/20180828165910_fixPriceTable.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180828165910_fixPriceTable.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('price', (table) => {
+ table.renameColumn('yield_id', 'price_id');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('price', (table) => {
+ table.renameColumn('price_id', 'yield_id');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20180910054802_drop_seedlog_column.js b/packages/api/db/migration/20180910054802_drop_seedlog_column.js
new file mode 100644
index 0000000000..14bb208d09
--- /dev/null
+++ b/packages/api/db/migration/20180910054802_drop_seedlog_column.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180910054802_drop_seedlog_column.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('seedLog', (table) => {
+ table.dropColumn('product_name');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('seedLog', (table) => {
+ table.string('product_name');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20180910062336_remove_unnecessary_columns.js b/packages/api/db/migration/20180910062336_remove_unnecessary_columns.js
new file mode 100644
index 0000000000..402f243afe
--- /dev/null
+++ b/packages/api/db/migration/20180910062336_remove_unnecessary_columns.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180910062336_remove_unnecessary_columns.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('activityCrops', (table) => {
+ table.dropColumn('quantity');
+ table.dropColumn('quantity_unit');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('activityCrops', (table) => {
+ table.float('quantity').unsigned();
+ table.enu('quantity_unit', ['lb', 'kg']).defaultTo('kg');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20180911034029_add_c_to_soil_data_table.js b/packages/api/db/migration/20180911034029_add_c_to_soil_data_table.js
new file mode 100644
index 0000000000..a5cbb60e3b
--- /dev/null
+++ b/packages/api/db/migration/20180911034029_add_c_to_soil_data_table.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180911034029_add_c_to_soil_data_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('soilDataLog', (table) => {
+ table.dropColumn('depth');
+ table.float('c');
+ table.float('na');
+ table.float('total_carbon');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('soilDataLog', (table) => {
+ table.dropColumn('c');
+ table.dropColumn('na');
+ table.dropColumn('total_carbon');
+ table.enu('depth', ['cm', 'in']);
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20180911040842_add_depth_to_soil_data.js b/packages/api/db/migration/20180911040842_add_depth_to_soil_data.js
new file mode 100644
index 0000000000..aab957cf9a
--- /dev/null
+++ b/packages/api/db/migration/20180911040842_add_depth_to_soil_data.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20180911040842_add_depth_to_soil_data.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('soilDataLog', (table) => {
+ table.float('depth');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('soilDataLog', (table) => {
+ table.dropColumn('depth');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20181213080718_add_harvest_log.js b/packages/api/db/migration/20181213080718_add_harvest_log.js
new file mode 100644
index 0000000000..0153e6dcdf
--- /dev/null
+++ b/packages/api/db/migration/20181213080718_add_harvest_log.js
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20181213080718_add_harvest_log.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('harvestLog', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .primary()
+ .onDelete('CASCADE');
+ table.float('quantity_kg');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('harvestLog'),
+ ])
+};
diff --git a/packages/api/db/migration/20181215131030_consistent_units.js b/packages/api/db/migration/20181215131030_consistent_units.js
new file mode 100644
index 0000000000..81c30bb341
--- /dev/null
+++ b/packages/api/db/migration/20181215131030_consistent_units.js
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20181215131030_consistent_units.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fertilizerLog', (table) => {
+ table.dropColumn('quantity_unit');
+ table.dropColumn('quantity');
+ table.float('quantity_kg')
+ }),
+ knex.schema.table('pestControlLog', (table) => {
+ table.renameColumn('quantity', 'quantity_kg');
+ table.dropColumn('quantity_unit');
+ }),
+ knex.schema.table('seedLog', (table) => {
+ table.renameColumn('space_depth', 'space_depth_cm');
+ table.renameColumn('space_length', 'space_length_cm');
+ table.renameColumn('space_width', 'space_width_cm');
+ table.renameColumn('rate', 'rate_seeds/m2');
+ table.dropColumn('rate_unit');
+ table.dropColumn('space_unit');
+ }),
+ knex.schema.table('soilDataLog', (table) => {
+ table.renameColumn('bulk_density', 'bulk_density_kg/m3');
+ table.renameColumn('depth', 'depth_cm');
+ table.dropColumn('units');
+ table.dropColumn('bulk_density_unit');
+ table.dropColumn('start_depth');
+ table.dropColumn('end_depth');
+ }),
+ knex.schema.table('irrigationLog', (table) => {
+ table.renameColumn('flow_rate', 'flow_rate_l/min');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fertilizerLog', (table) => {
+ table.renameColumn('quantity_kg', 'quantity');
+ table.string('quantity_unit');
+ }),
+ knex.schema.table('pestControlLog', (table) => {
+ table.renameColumn('quantity_kg', 'quantity');
+ table.string('quantity_unit');
+ }),
+ knex.schema.table('seedLog', (table) => {
+ table.renameColumn('space_depth_cm', 'space_depth');
+ table.renameColumn('space_length_cm', 'space_length');
+ table.renameColumn('space_width_cm', 'space_width');
+ table.renameColumn('rate_seeds/m2', 'rate');
+ table.string('rate_unit');
+ table.string('space_unit');
+ }),
+ knex.schema.table('soilDataLog', (table) => {
+ table.renameColumn('bulk_density_kg/m3', 'bulk_density');
+ table.renameColumn('depth_cm', 'depth');
+ table.enu('units', ['percentage', 'mg/kg', 'ounces/lb']);
+ table.enu('bulk_density_unit', ['g/cm3', 'lb/inch3']);
+ table.float('start_depth');
+ table.float('end_depth');
+ }),
+ knex.schema.table('irrigationLog', (table) => {
+ table.renameColumn('flow_rate_l/min', 'flow_rate');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20181229170458_unit_conversion_sale_quantity.js b/packages/api/db/migration/20181229170458_unit_conversion_sale_quantity.js
new file mode 100644
index 0000000000..7d77c16bb3
--- /dev/null
+++ b/packages/api/db/migration/20181229170458_unit_conversion_sale_quantity.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20181229170458_unit_conversion_sale_quantity.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('cropSale', (table) => {
+ table.renameColumn('quantity', 'quantity_kg');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('cropSale', (table) => {
+ table.renameColumn('quantity_kg', 'quantity');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190103113052_delete_column_in_farm_expense.js b/packages/api/db/migration/20190103113052_delete_column_in_farm_expense.js
new file mode 100644
index 0000000000..2ff99a1fa4
--- /dev/null
+++ b/packages/api/db/migration/20190103113052_delete_column_in_farm_expense.js
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190103113052_delete_column_in_farm_expense.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('expense_type_id');
+ }),
+ knex.schema.table('farmExpenseType', (table) => {
+ table.dropColumn('expense_type_id');
+ table.dropColumn('user_added');
+ }),
+ knex.schema.table('farmExpenseType', (table) => {
+ table.uuid('expense_type_id').primary();
+ table.uuid('farm_id').references('farm_id').inTable('farm').onDelete('CASCADE');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpenseType', (table) => {
+ table.dropColumn('expense_type_id');
+ table.dropColumn('farm_id');
+ }),
+ ]).then(() => {
+ return Promise.all([
+ knex.schema.table('farmExpenseType', (table) => {
+ table.boolean('user_added');
+ table.increments('expense_type_id').primary();
+ }),
+ ])
+ })
+};
diff --git a/packages/api/db/migration/20190103120409_update_expense_id_data_type.js b/packages/api/db/migration/20190103120409_update_expense_id_data_type.js
new file mode 100644
index 0000000000..631acb9cb5
--- /dev/null
+++ b/packages/api/db/migration/20190103120409_update_expense_id_data_type.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190103120409_update_expense_id_data_type.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpenseType', (table) => {
+ table.dropColumn('expense_type_id');
+ }),
+ knex.schema.table('farmExpenseType', (table) => {
+ table.uuid('expense_type_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.resolve(
+ knex.schema.table('farmExpenseType', (table) => {
+ table.dropColumn('expense_type_id');
+ })
+ ).then(() => {
+ return Promise.resolve(
+ knex.schema.table('farmExpenseType', (table) => {
+ table.increments('expense_type_id').primary();
+ }),
+ )
+ })
+};
diff --git a/packages/api/db/migration/20190103120541_add_id_to_farm_expense.js b/packages/api/db/migration/20190103120541_add_id_to_farm_expense.js
new file mode 100644
index 0000000000..e02df6b5e5
--- /dev/null
+++ b/packages/api/db/migration/20190103120541_add_id_to_farm_expense.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190103120541_add_id_to_farm_expense.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.uuid('expense_type_id').references('expense_type_id').inTable('farmExpenseType');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('expense_type_id');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190103162144_update_farm_expense.js b/packages/api/db/migration/20190103162144_update_farm_expense.js
new file mode 100644
index 0000000000..8f4136abfb
--- /dev/null
+++ b/packages/api/db/migration/20190103162144_update_farm_expense.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190103162144_update_farm_expense.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('farm_expense_id');
+ }),
+ knex.schema.table('farmExpense', (table) => {
+ table.uuid('farm_expense_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('farm_expense_id');
+ }),
+ knex.schema.table('farmExpense', (table) => {
+ table.uuid('farm_expense_id').primary();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190124160146_change_farmExpense_value_type.js b/packages/api/db/migration/20190124160146_change_farmExpense_value_type.js
new file mode 100644
index 0000000000..8f6d21a47b
--- /dev/null
+++ b/packages/api/db/migration/20190124160146_change_farmExpense_value_type.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190124160146_change_farmExpense_value_type.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('value');
+ }),
+ knex.schema.table('farmExpense', (table) => {
+ table.float('value');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmExpense', (table) => {
+ table.dropColumn('value');
+ }),
+ knex.schema.table('farmExpense', (table) => {
+ table.integer('value');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190220112318_change_field_model.js b/packages/api/db/migration/20190220112318_change_field_model.js
new file mode 100644
index 0000000000..aa2d5ad1d3
--- /dev/null
+++ b/packages/api/db/migration/20190220112318_change_field_model.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190220112318_change_field_model.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('field', (table) => {
+ table.integer('area')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('field', (table) => {
+ table.dropColumn('area')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190221214442_change_yield_table.js b/packages/api/db/migration/20190221214442_change_yield_table.js
new file mode 100644
index 0000000000..496e4bf199
--- /dev/null
+++ b/packages/api/db/migration/20190221214442_change_yield_table.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190221214442_change_yield_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('yield', (table) => {
+ table.dropColumn('value_kg/acre')
+ }),
+ knex.schema.table('yield', (table) => {
+ table.float('quantity_kg')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('yield', (table) => {
+ table.dropColumn('quantity_kg')
+ }),
+ knex.schema.table('yield', (table) => {
+ table.float('value_kg/acre')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190221223936_add_field_crop_column.js b/packages/api/db/migration/20190221223936_add_field_crop_column.js
new file mode 100644
index 0000000000..da565803d3
--- /dev/null
+++ b/packages/api/db/migration/20190221223936_add_field_crop_column.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190221223936_add_field_crop_column.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fieldCrop', (table) => {
+ table.integer('estimated_revenue')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fieldCrop', (table) => {
+ table.dropColumn('estimated_revenue')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190223021522_update_yield.js b/packages/api/db/migration/20190223021522_update_yield.js
new file mode 100644
index 0000000000..318c6377c1
--- /dev/null
+++ b/packages/api/db/migration/20190223021522_update_yield.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190223021522_update_yield.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('yield', (table) => {
+ table.dropColumn('quantity_kg')
+ }),
+ knex.schema.table('yield', (table) => {
+ table.float('quantity_kg/m2')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('yield', (table) => {
+ table.dropColumn('quantity_kg/m2')
+ }),
+ knex.schema.table('yield', (table) => {
+ table.float('quantity_kg')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190305205638_remove_unused_tables.js b/packages/api/db/migration/20190305205638_remove_unused_tables.js
new file mode 100644
index 0000000000..dab3223bb8
--- /dev/null
+++ b/packages/api/db/migration/20190305205638_remove_unused_tables.js
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190305205638_remove_unused_tables.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ //remove all the tables
+ return Promise.all([
+ knex.schema.dropTable('activityBeds'),
+ knex.schema.dropTable('bed'),
+ knex.schema.dropTable('userManages'),
+ ])
+};
+
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('userManages', function (table) {
+ table.string('manager_id')
+ .references('user_id')
+ .inTable('users');
+ table.string('manages_id')
+ .references('user_id')
+ .inTable('users');
+ table.primary(['manages_id', 'manager_id']);
+ }),
+ knex.schema.createTable('bed', function (table) {
+ table.uuid('bed_id').primary().defaultTo(knex.raw('uuid_generate_v1()'));
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field');
+ table.float('bed_length').unsigned();
+ table.integer('bed_index_in_field').unsigned().notNullable();
+
+ table.index(['field_id']);
+ }),
+ knex.schema.createTable('activityBeds', function (table) {
+ table.integer('activity_id')
+ .references('activity_id')
+ .inTable('activityLog')
+ .onDelete('CASCADE');
+ table.uuid('bed_id')
+ .references('bed_id')
+ .inTable('bed');
+ table.primary(['bed_id', 'activity_id']);
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190308183222_add_water_balance_table.js b/packages/api/db/migration/20190308183222_add_water_balance_table.js
new file mode 100644
index 0000000000..a42167c2d4
--- /dev/null
+++ b/packages/api/db/migration/20190308183222_add_water_balance_table.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190308183222_add_water_balance_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('waterBalance', (table) => {
+ table.increments('water_balance_id');
+ table.integer('crop_id')
+ .references('crop_id')
+ .inTable('crop').notNullable();
+ table.uuid('field_id')
+ .references('field_id')
+ .inTable('field').onDelete('CASCADE').nullable();
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.float('soil_water').notNullable();
+ table.float('plant_available_water').notNullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('waterBalance'),
+ ])
+};
diff --git a/packages/api/db/migration/20190311140416_create_weather_table.js b/packages/api/db/migration/20190311140416_create_weather_table.js
new file mode 100644
index 0000000000..8a9a5c65df
--- /dev/null
+++ b/packages/api/db/migration/20190311140416_create_weather_table.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190311140416_create_weather_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('weather', (table) => {
+ table.increments('weather_id');
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.float('min_degrees');
+ table.float('max_degrees');
+ table.float('min_humidity');
+ table.float('max_humidity');
+ table.float('precipitation');
+ table.float('wind_speed');
+ table.uuid('field_id').references('field_id').inTable('field').notNullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('weather'),
+ ])
+};
diff --git a/packages/api/db/migration/20190317170211_rename.js b/packages/api/db/migration/20190317170211_rename.js
new file mode 100644
index 0000000000..943dd6bfa0
--- /dev/null
+++ b/packages/api/db/migration/20190317170211_rename.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190317170211_rename.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.renameTable('fieldworkLog', 'fieldWorkLog'),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.renameTable('fieldWorkLog', 'fieldworkLog'),
+ ])
+};
diff --git a/packages/api/db/migration/20190317171241_rename_typo_in_column.js b/packages/api/db/migration/20190317171241_rename_typo_in_column.js
new file mode 100644
index 0000000000..f0fc03a2bd
--- /dev/null
+++ b/packages/api/db/migration/20190317171241_rename_typo_in_column.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190317171241_rename_typo_in_column.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('activityLog', (table) => {
+ table.renameColumn('action_need', 'action_needed');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('activityLog', (table) => {
+ table.renameColumn('action_needed', 'action_need');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190325144916_nitrogen_balance_table.js b/packages/api/db/migration/20190325144916_nitrogen_balance_table.js
new file mode 100644
index 0000000000..e82966daa3
--- /dev/null
+++ b/packages/api/db/migration/20190325144916_nitrogen_balance_table.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190325144916_nitrogen_balance_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('nitrogenBalance', (table) => {
+ table.increments('nitrogen_id');
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.uuid('field_id').references('field_id').inTable('field').onDelete('CASCADE').notNullable();
+ table.float('nitrogen_value');
+ }),
+ knex.schema.createTable('nitrogenSchedule', (table) => {
+ table.increments('nitrogen_schedule_id');
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.timestamp('scheduled_at');
+ table.uuid('farm_id').references('farm_id').inTable('farm').notNullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('nitrogenBalance'),
+ knex.schema.dropTable('nitrogenSchedule'),
+ ])
+};
diff --git a/packages/api/db/migration/20190416183353_add_column_in_fertilizer.js b/packages/api/db/migration/20190416183353_add_column_in_fertilizer.js
new file mode 100644
index 0000000000..f4de471316
--- /dev/null
+++ b/packages/api/db/migration/20190416183353_add_column_in_fertilizer.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190416183353_add_column_in_fertilizer.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fertilizer', (table) => {
+ table.float('mineralization_rate')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fieldCrop', (table) => {
+ table.dropColumn('mineralization_rate')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190416204632_crop_create_column_nutrient_credits.js b/packages/api/db/migration/20190416204632_crop_create_column_nutrient_credits.js
new file mode 100644
index 0000000000..865fdf08b2
--- /dev/null
+++ b/packages/api/db/migration/20190416204632_crop_create_column_nutrient_credits.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190416204632_crop_create_column_nutrient_credits.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('crop', (table) => {
+ table.float('nutrient_credits')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('crop', (table) => {
+ table.dropColumn('nutrient_credits')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190728205619_add_is_pseudo_to_users.js b/packages/api/db/migration/20190728205619_add_is_pseudo_to_users.js
new file mode 100644
index 0000000000..3b2c25e1c2
--- /dev/null
+++ b/packages/api/db/migration/20190728205619_add_is_pseudo_to_users.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190728205619_add_is_pseudo_to_users.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.boolean('is_pseudo').notNullable().defaultTo(false);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.dropColumn('is_pseudo');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190806193220_update_shift.js b/packages/api/db/migration/20190806193220_update_shift.js
new file mode 100644
index 0000000000..b5d7e4f0d8
--- /dev/null
+++ b/packages/api/db/migration/20190806193220_update_shift.js
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190806193220_update_shift.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const formatAlterTableEnumSql = (
+ tableName,
+ columnName,
+ enums,
+) => {
+ const constraintName = `${tableName}_${columnName}_check`;
+ return [
+ `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${constraintName};`,
+ `ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} CHECK (${columnName} = ANY (ARRAY['${enums.join(
+ "'::text, '" // eslint-disable-line
+ )}'::text]));`,
+ ].join('\n');
+};
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.float('wage').defaultTo(0);
+ }),
+ knex.raw(
+ formatAlterTableEnumSql('shift', 'mood', ['happy', 'neutral', 'very happy', 'sad', 'very sad', 'na'])
+ ),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.dropColumn('wage');
+ }),
+ knex.raw(
+ formatAlterTableEnumSql('shift', 'mood', ['happy', 'neutral', 'very happy', 'sad', 'very sad'])
+ ),
+ ])
+};
diff --git a/packages/api/db/migration/20190830065614_add_bed_config_to_field_crop.js b/packages/api/db/migration/20190830065614_add_bed_config_to_field_crop.js
new file mode 100644
index 0000000000..36c85ef31d
--- /dev/null
+++ b/packages/api/db/migration/20190830065614_add_bed_config_to_field_crop.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190830065614_add_bed_config_to_field_crop.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fieldCrop', (table) => {
+ table.boolean('is_by_bed').notNullable().defaultTo(false);
+ table.jsonb('bed_config').nullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('fieldCrop', (table) => {
+ table.dropColumn('is_by_bed');
+ table.dropColumn('bed_config');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190912175155_add_has_consent_to_users.js b/packages/api/db/migration/20190912175155_add_has_consent_to_users.js
new file mode 100644
index 0000000000..102954b98c
--- /dev/null
+++ b/packages/api/db/migration/20190912175155_add_has_consent_to_users.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190912175155_add_has_consent_to_users.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.boolean('has_consent').notNullable().defaultTo(false);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.dropColumn('has_consent');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20190925134531_add_is_active_to_users.js b/packages/api/db/migration/20190925134531_add_is_active_to_users.js
new file mode 100644
index 0000000000..024d24f114
--- /dev/null
+++ b/packages/api/db/migration/20190925134531_add_is_active_to_users.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20190925134531_add_is_active_to_users.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.boolean('is_active').notNullable().defaultTo(true);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.dropColumn('is_active');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20191022141313_change_wage_name_in_shift.js b/packages/api/db/migration/20191022141313_change_wage_name_in_shift.js
new file mode 100644
index 0000000000..9edf3c089e
--- /dev/null
+++ b/packages/api/db/migration/20191022141313_change_wage_name_in_shift.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20191022141313_change_wage_name_in_shift.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.renameColumn('wage', 'wage_at_moment');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.renameColumn('wage_at_moment', 'wage');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20191029154420_nitrogen_schedule_changes.js b/packages/api/db/migration/20191029154420_nitrogen_schedule_changes.js
new file mode 100644
index 0000000000..a0b2d2e513
--- /dev/null
+++ b/packages/api/db/migration/20191029154420_nitrogen_schedule_changes.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20191029154420_nitrogen_schedule_changes.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('nitrogenSchedule', (table) => {
+ table.integer('frequency')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('nitrogenSchedule', (table) => {
+ table.dropColumn('frequency');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20191203123105_water_balance_tables.js b/packages/api/db/migration/20191203123105_water_balance_tables.js
new file mode 100644
index 0000000000..8d99147cf2
--- /dev/null
+++ b/packages/api/db/migration/20191203123105_water_balance_tables.js
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20191203123105_water_balance_tables.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('weatherHourly', (table) => {
+ table.increments('weather_hourly_id');
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.float('min_degrees');
+ table.float('max_degrees');
+ table.float('humidity');
+ table.float('precipitation');
+ table.float('wind_speed');
+ table.uuid('field_id').references('field_id').inTable('field').notNullable();
+ }),
+ knex.schema.createTable('waterBalanceSchedule', (table) => {
+ table.increments('water_balance_schedule_id');
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ table.uuid('farm_id').references('farm_id').inTable('farm').notNullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('weatherHourly'),
+ knex.schema.dropTable('waterBalanceSchedule'),
+ ])
+};
\ No newline at end of file
diff --git a/packages/api/db/migration/20191203220239_update_crop_sale_to_float.js b/packages/api/db/migration/20191203220239_update_crop_sale_to_float.js
new file mode 100644
index 0000000000..9dcbc9d8a8
--- /dev/null
+++ b/packages/api/db/migration/20191203220239_update_crop_sale_to_float.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20191203220239_update_crop_sale_to_float.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('cropSale', (table) => {
+ table.float('quantity_kg').alter();
+ table.float('sale_value').alter();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('cropSale', (table) => {
+ table.integer('quantity_kg').alter();
+ table.integer('sale_value').alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20191204144643_change_production_and_revenue_to_float.js b/packages/api/db/migration/20191204144643_change_production_and_revenue_to_float.js
new file mode 100644
index 0000000000..c926f6e5ac
--- /dev/null
+++ b/packages/api/db/migration/20191204144643_change_production_and_revenue_to_float.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20191204144643_change_production_and_revenue_to_float.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('fieldCrop', (table) => {
+ table.float('estimated_production').alter();
+ table.float('estimated_revenue').alter();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('fieldCrop', (table) => {
+ table.integer('estimated_production').alter();
+ table.integer('estimated_revenue').alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200116073247_add_farm_data_schedule_table.js b/packages/api/db/migration/20200116073247_add_farm_data_schedule_table.js
new file mode 100644
index 0000000000..5124a14f30
--- /dev/null
+++ b/packages/api/db/migration/20200116073247_add_farm_data_schedule_table.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200116073247_add_farm_data_schedule_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('farmDataSchedule', (table) => {
+ table.increments('request_number');
+ table.uuid('farm_id').references('farm_id').inTable('farm').notNullable();
+ table.boolean('is_processed').notNullable().defaultTo(false);
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('farmDataSchedule'),
+ ])
+};
diff --git a/packages/api/db/migration/20200116080158_add_user_id_to_farm_data.js b/packages/api/db/migration/20200116080158_add_user_id_to_farm_data.js
new file mode 100644
index 0000000000..78fb5fb924
--- /dev/null
+++ b/packages/api/db/migration/20200116080158_add_user_id_to_farm_data.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200116080158_add_user_id_to_farm_data.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.string('user_id').references('user_id').inTable('users');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.dropColumn('user_id');
+ }),
+ ])
+};
+
diff --git a/packages/api/db/migration/20200310174929_add_farm_geolocation.js b/packages/api/db/migration/20200310174929_add_farm_geolocation.js
new file mode 100644
index 0000000000..af806b7728
--- /dev/null
+++ b/packages/api/db/migration/20200310174929_add_farm_geolocation.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200310174929_add_farm_geolocation.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farm', (table) => {
+ table.jsonb('grid_points')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farm', (table) => {
+ table.dropColumn('grid_points')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200312082442_change_shift_task_duration_to_float.js b/packages/api/db/migration/20200312082442_change_shift_task_duration_to_float.js
new file mode 100644
index 0000000000..391b237fe0
--- /dev/null
+++ b/packages/api/db/migration/20200312082442_change_shift_task_duration_to_float.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200312082442_change_shift_task_duration_to_float.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('shiftTask', (table) => {
+ table.float('duration').alter();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('shiftTask', (table) => {
+ table.integer('duration').alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200408111941_alter_weather_hourly.js b/packages/api/db/migration/20200408111941_alter_weather_hourly.js
new file mode 100644
index 0000000000..c5e08af580
--- /dev/null
+++ b/packages/api/db/migration/20200408111941_alter_weather_hourly.js
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200408111941_alter_weather_hourly.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('weatherHourly', (table) => {
+ table.dropColumn('humidity');
+ table.float('min_humidity');
+ table.float('max_humidity');
+ table.integer('data_points');
+ }),
+ knex.schema.table('weather', (table) => {
+ table.integer('data_points');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('weatherHourly', (table) => {
+ table.float('humidity');
+ table.dropColumn('min_humidity');
+ table.dropColumn('max_humidity');
+ table.dropColumn('data_points');
+ }),
+ knex.schema.table('weather', (table) => {
+ table.dropColumn('data_points')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200415164120_add_crop_id_to_cropSale.js b/packages/api/db/migration/20200415164120_add_crop_id_to_cropSale.js
new file mode 100644
index 0000000000..aea5ee0682
--- /dev/null
+++ b/packages/api/db/migration/20200415164120_add_crop_id_to_cropSale.js
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200415164120_add_crop_id_to_cropSale.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function (knex, Promise) {
+ await knex.raw(`
+ ALTER TABLE "cropSale"
+ ADD COLUMN crop_id integer, ADD COLUMN farm_id uuid;
+ `);
+
+ await knex.raw(`
+ ALTER TABLE "sale"
+ ADD COLUMN farm_id uuid;
+ `);
+
+ await knex.raw(`
+ ALTER TABLE "cropSale"
+ ADD CONSTRAINT fk_crop_sale_crop_id FOREIGN KEY (crop_id) REFERENCES crop(crop_id);
+ `);
+
+ await knex.raw(`
+ ALTER TABLE "sale"
+ ADD CONSTRAINT fk_crop_sale_farm_id FOREIGN KEY (farm_id) REFERENCES farm(farm_id);
+ `);
+
+ await knex.raw(`UPDATE "cropSale" c
+ SET crop_id = f.crop_id
+ FROM "fieldCrop" f
+ WHERE f.field_crop_id = c.field_crop_id;`);
+
+ await knex.raw(`
+ UPDATE "sale" s
+SET farm_id = f.farm_id
+FROM "fieldCrop" fc, "field" f, "cropSale" cs
+WHERE fc.field_crop_id = cs.field_crop_id and f.field_id = fc.field_id and s.sale_id = cs.sale_id;
+ `)
+
+
+
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex.schema.table('cropSale', (table) => {
+ table.dropColumn('crop_id');
+ }),
+ knex.schema.table('sale', (table) => {
+ table.dropColumn('farm_id');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200427154215_remove_flow_rate_unit_in_irrrrigation_log.js b/packages/api/db/migration/20200427154215_remove_flow_rate_unit_in_irrrrigation_log.js
new file mode 100644
index 0000000000..4a1aadd933
--- /dev/null
+++ b/packages/api/db/migration/20200427154215_remove_flow_rate_unit_in_irrrrigation_log.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200427154215_remove_flow_rate_unit_in_irrrrigation_log.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('irrigationLog', (table) => {
+ table.dropColumn('flow_rate_unit');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('irrigationLog', (table) => {
+ table.string('flow_rate_unit');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200429142239_make_flags_in_crop_nullable.js b/packages/api/db/migration/20200429142239_make_flags_in_crop_nullable.js
new file mode 100644
index 0000000000..b65a77ae0d
--- /dev/null
+++ b/packages/api/db/migration/20200429142239_make_flags_in_crop_nullable.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200429142239_make_flags_in_crop_nullable.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('crop', (table) => {
+ table.boolean('is_avg_depth').nullable().alter();
+ table.boolean('is_avg_kc').nullable().alter();
+ table.boolean('is_avg_nutrient').nullable().alter();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('crop', (table) => {
+ table.boolean('is_avg_depth').defaultTo(false).notNullable().alter();
+ table.boolean('is_avg_kc').defaultTo(false).notNullable().alter();
+ table.boolean('is_avg_nutrient').defaultTo(false).notNullable().alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200430133453_make_field_crop_area_float.js b/packages/api/db/migration/20200430133453_make_field_crop_area_float.js
new file mode 100644
index 0000000000..bbfd299ae0
--- /dev/null
+++ b/packages/api/db/migration/20200430133453_make_field_crop_area_float.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200430133453_make_field_crop_area_float.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('fieldCrop', (table) => {
+ table.float('area_used').alter();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('fieldCrop', (table) => {
+ table.integer('area_used').alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200505124117_update_insert_new_crops_into_crop_with_fc_variety.js b/packages/api/db/migration/20200505124117_update_insert_new_crops_into_crop_with_fc_variety.js
new file mode 100644
index 0000000000..ef9363a751
--- /dev/null
+++ b/packages/api/db/migration/20200505124117_update_insert_new_crops_into_crop_with_fc_variety.js
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200505124117_update_insert_new_crops_into_crop_with_fc_variety.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function (knex, Promise) {
+ await knex.raw(`
+ INSERT INTO "crop" (crop_common_name, crop_genus, crop_specie, crop_group, crop_subgroup, max_rooting_depth, depletion_fraction, initial_kc, is_avg_depth, mid_kc, end_kc, max_height, is_avg_kc, nutrient_notes, percentrefuse, refuse, protein, lipid, energy, ca, fe, mg, ph, k, na, zn, cu, fl, mn, se, vita_rae, vite, vitc, thiamin, riboflavin, niacin, pantothenic, vitb6, folate, vitb12, vitk, is_avg_nutrient, farm_id, user_added, deleted, nutrient_credits)
+ SELECT REPLACE(crop_common_name, crop_common_name, CONCAT(crop_common_name, ' - ', fc.variety)), crop_genus, crop_specie, crop_group, crop_subgroup, max_rooting_depth, depletion_fraction, initial_kc, NULL, mid_kc, end_kc, max_height, NULL, nutrient_notes, percentrefuse, refuse, protein, lipid, energy, ca, fe, mg, ph, k, na, zn, cu, fl, mn, se, vita_rae, vite, vitc, thiamin, riboflavin, niacin, pantothenic, vitb6, folate, vitb12, vitk, NULL, f.farm_id, TRUE, deleted, nutrient_credits
+ FROM "crop" c
+ INNER JOIN "fieldCrop" fc on c.crop_id = fc.crop_id AND fc.variety!='' AND fc.variety IS NOT NULL
+ INNER JOIN "field" f on f.field_id = fc.field_id
+ `);
+
+ await knex.raw(
+ `
+ CREATE MATERIALIZED VIEW update_field_crop_view AS
+ SELECT c.crop_id, c.crop_common_name, fc.variety, fc.crop_id AS fc_old_crop_id, fc.field_crop_id, fc.field_id, f.farm_id
+ FROM "crop" c
+ INNER JOIN "field" f on f.farm_id = c.farm_id
+ INNER JOIN "fieldCrop" fc on (fc.field_id = f.field_id)
+ WHERE c.crop_common_name = CONCAT(
+ (
+ SELECT c2.crop_common_name
+ FROM "crop" c2
+ WHERE c2.crop_id=fc.crop_id
+ ),
+ ' - ',
+ fc.variety
+ )
+ `
+ );
+
+ await knex.raw(
+ `
+ UPDATE "fieldCrop" fc
+ SET crop_id = v.crop_id
+ FROM "update_field_crop_view" v
+ WHERE fc.field_crop_id = v.field_crop_id
+ `
+ );
+
+ await knex.raw(
+ `
+ UPDATE "yield" y
+ SET crop_id = v.crop_id
+ FROM "update_field_crop_view" v
+ WHERE y.crop_id = v.fc_old_crop_id AND y.farm_id = v.farm_id
+ `
+ );
+
+ await knex.raw(
+ `
+ UPDATE "price" p
+ SET crop_id = v.crop_id
+ FROM "update_field_crop_view" v
+ WHERE p.crop_id = v.fc_old_crop_id AND p.farm_id = v.farm_id
+ `
+ );
+
+ await knex.raw(
+ `
+ UPDATE "waterBalance" w
+ SET crop_id = v.crop_id
+ FROM "update_field_crop_view" v
+ WHERE w.crop_id = v.fc_old_crop_id AND w.field_id = v.field_id
+ `
+ );
+
+ await knex.raw(
+ `
+ UPDATE "cropSale" cs
+ SET crop_id = v.crop_id
+ FROM "update_field_crop_view" v
+ INNER JOIN "sale" s on s.farm_id = v.farm_id
+ WHERE cs.crop_id = v.fc_old_crop_id AND s.sale_id = cs.sale_id
+ `
+ );
+
+};
+
+exports.down = function (knex, Promise) {
+
+};
\ No newline at end of file
diff --git a/packages/api/db/migration/20200508135516_add_sanbox_bool_to_farm.js b/packages/api/db/migration/20200508135516_add_sanbox_bool_to_farm.js
new file mode 100644
index 0000000000..67891c47c2
--- /dev/null
+++ b/packages/api/db/migration/20200508135516_add_sanbox_bool_to_farm.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200508135516_add_sanbox_bool_to_farm.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farm', (table) => {
+ table.boolean('sandbox_bool').notNullable().defaultTo(false);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farm', (table) => {
+ table.dropColumn('sandbox_bool').notNullable().defaultTo(false);
+ }),
+])
+};
+
diff --git a/packages/api/db/migration/20200529132839_add_role_table.js b/packages/api/db/migration/20200529132839_add_role_table.js
new file mode 100644
index 0000000000..3151d24952
--- /dev/null
+++ b/packages/api/db/migration/20200529132839_add_role_table.js
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200529132839_add_role_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('role', (table) => {
+ table.increments('role_id');
+ table.string('role').notNullable();
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('role'),
+ ])
+};
diff --git a/packages/api/db/migration/20200529132842_add_user_farm_table.js b/packages/api/db/migration/20200529132842_add_user_farm_table.js
new file mode 100644
index 0000000000..cec4901d20
--- /dev/null
+++ b/packages/api/db/migration/20200529132842_add_user_farm_table.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200529132842_add_user_farm_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('userFarm', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').onDelete('CASCADE').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').onDelete('CASCADE').nullable();
+ table.primary(['user_id', 'farm_id']);
+ table.integer('role_id').references('role_id').inTable('role').nullable();
+ table.boolean('has_consent').notNullable().defaultTo(false);
+ table.boolean('is_deleted').notNullable().defaultTo(false);
+ table.timestamp('created_at').defaultTo(knex.fn.now());
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('userFarm'),
+ ])
+};
diff --git a/packages/api/db/migration/20200529140525_add_roles_in_role.js b/packages/api/db/migration/20200529140525_add_roles_in_role.js
new file mode 100644
index 0000000000..f3b658e9b3
--- /dev/null
+++ b/packages/api/db/migration/20200529140525_add_roles_in_role.js
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200529140525_add_roles_in_role.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex("role").insert([
+ {role_id: 1, role: "Owner"},
+ {role_id: 2, role: "Manager"},
+ {role_id: 3, role: "Worker"},
+ ])
+ ]);
+};
+
+exports.down = function(knex, Promise) {
+
+};
diff --git a/packages/api/db/migration/20200602123113_migrate_user_data_to_userFarm.js b/packages/api/db/migration/20200602123113_migrate_user_data_to_userFarm.js
new file mode 100644
index 0000000000..6c90695a1d
--- /dev/null
+++ b/packages/api/db/migration/20200602123113_migrate_user_data_to_userFarm.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200602123113_migrate_user_data_to_userFarm.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex.raw(
+ `
+ INSERT INTO "userFarm" (user_id, farm_id, has_consent, role_id, is_deleted)
+ SELECT user_id, farm_id, has_consent,
+ (CASE
+ WHEN is_admin = true THEN 1
+ ELSE 3
+ END),
+ (CASE
+ WHEN is_active = true THEN false
+ ELSE true
+ END)
+ FROM "users" u
+ WHERE u.farm_id IS NOT NULL
+ `
+ )
+ ])
+};
+
+exports.down = function (knex, Promise) {
+
+};
diff --git a/packages/api/db/migration/20200602123120_has_consent_default_null.js b/packages/api/db/migration/20200602123120_has_consent_default_null.js
new file mode 100644
index 0000000000..34b9f178cd
--- /dev/null
+++ b/packages/api/db/migration/20200602123120_has_consent_default_null.js
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200602123120_has_consent_default_null.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('userFarm', (table) => {
+ table.boolean('has_consent').nullable().defaultTo(null).alter();
+ }),
+ ])
+};
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('userFarm', (table) => {
+ table.boolean('has_consent').notNullable().defaultTo(false).alter();
+ }),
+ ])
+};
\ No newline at end of file
diff --git a/packages/api/db/migration/20200603161246_remove_has_consent_and_is_admin_in_users.js b/packages/api/db/migration/20200603161246_remove_has_consent_and_is_admin_in_users.js
new file mode 100644
index 0000000000..ee59d24412
--- /dev/null
+++ b/packages/api/db/migration/20200603161246_remove_has_consent_and_is_admin_in_users.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200603161246_remove_has_consent_and_is_admin_in_users.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.dropColumn('is_admin');
+ table.dropColumn('has_consent');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.boolean('has_consent').defaultTo(false);
+ }),
+ // can't go back with is_admin
+ ])
+};
diff --git a/packages/api/db/migration/202006151420_update_is_deleted_to_enum.js b/packages/api/db/migration/202006151420_update_is_deleted_to_enum.js
new file mode 100644
index 0000000000..8980209302
--- /dev/null
+++ b/packages/api/db/migration/202006151420_update_is_deleted_to_enum.js
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (202006151420_update_is_deleted_to_enum.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function (knex, Promise) {
+ return Promise.all([
+ await knex.schema.table('userFarm', (table) => {
+ table.enu('status', ['Active', 'Inactive', 'Invited']);
+ }),
+ await knex.raw(
+ `
+ UPDATE "userFarm"
+ SET status = (CASE WHEN is_deleted = false
+ THEN 'Active'
+ ELSE 'Inactive'
+ END)
+ `
+ ),
+ await knex.schema.table('userFarm', (table) => {
+ table.dropColumn('is_deleted');
+ }),
+ ])
+};
+
+exports.down = async function (knex, Promise) {
+ return Promise.all([
+ await knex.schema.table('userFarm', (table) => {
+ table.boolean('is_deleted').notNullable().defaultTo(false);
+ }),
+ await knex.raw(
+ `
+ UPDATE "userFarm"
+ SET is_deleted = (CASE WHEN status = 'Active'
+ THEN false
+ ELSE true
+ END)
+ `
+ ),
+ await knex.schema.table('userFarm', (table) => {
+ table.dropColumn('status');
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200617081549_add_has_failed_to_data_schedule.js b/packages/api/db/migration/20200617081549_add_has_failed_to_data_schedule.js
new file mode 100644
index 0000000000..ce0d842b57
--- /dev/null
+++ b/packages/api/db/migration/20200617081549_add_has_failed_to_data_schedule.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200617081549_add_has_failed_to_data_schedule.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.boolean('has_failed').notNullable().defaultTo(false);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.dropColumn('has_failed');
+ }),
+ ])
+};
+
diff --git a/packages/api/db/migration/20200617100116_add_consent_version_to_user_farm.js b/packages/api/db/migration/20200617100116_add_consent_version_to_user_farm.js
new file mode 100644
index 0000000000..63cbcbe077
--- /dev/null
+++ b/packages/api/db/migration/20200617100116_add_consent_version_to_user_farm.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200617100116_add_consent_version_to_user_farm.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('userFarm', (table) => {
+ table.string('consent_version').notNullable().defaultTo('1.0')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('userFarm', (table) => {
+ table.dropColumn('consent_version');
+ }),
+ ])
+};
+
diff --git a/packages/api/db/migration/20200623233314_add_permissions_table.js b/packages/api/db/migration/20200623233314_add_permissions_table.js
new file mode 100644
index 0000000000..81f9ea84bc
--- /dev/null
+++ b/packages/api/db/migration/20200623233314_add_permissions_table.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200623233314_add_permissions_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('permissions', (table) => {
+ table.increments('permission_id');
+ table.string('name').notNullable();
+ table.string('description');
+ }),
+ ])
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('permissions'),
+ ])
+};
diff --git a/packages/api/db/migration/20200623234118_add_role_permissions_table.js b/packages/api/db/migration/20200623234118_add_role_permissions_table.js
new file mode 100644
index 0000000000..a273c5e1ec
--- /dev/null
+++ b/packages/api/db/migration/20200623234118_add_role_permissions_table.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200623234118_add_role_permissions_table.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('rolePermissions', (table) => {
+ table.integer('role_id')
+ .references('role_id')
+ .inTable('role').onDelete('CASCADE');
+ table.integer('permission_id')
+ .references('permission_id')
+ .inTable('permissions').onDelete('CASCADE');
+ table.primary(['role_id', 'permission_id']);
+ }),
+ ])
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('rolePermissions'),
+ ])
+};
diff --git a/packages/api/db/migration/20200623235501_add_permissions_values.js b/packages/api/db/migration/20200623235501_add_permissions_values.js
new file mode 100644
index 0000000000..c525e4240c
--- /dev/null
+++ b/packages/api/db/migration/20200623235501_add_permissions_values.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200623235501_add_permissions_values.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex('permissions').insert([
+ { name: 'add:actual_revenue', description: 'add actual revenue' },
+ { name: 'add:crops', description: 'add crops' },
+ { name: 'add:diseases', description: 'add diseases' },
+ { name: 'add:expected_yields', description: 'add expected yields' },
+ { name: 'add:expenses', description: 'add expenses' },
+ { name: 'add:expense_types', description: 'add expense types' },
+ { name: 'add:farms', description: 'add farms' },
+ { name: 'add:farm_schedules', description: 'add farm schedules' },
+ { name: 'add:fertilizers', description: 'add fertilizers' },
+ { name: 'add:field_crops', description: 'add field crops' },
+ { name: 'add:fields', description: 'add fields' },
+ { name: 'add:insights', description: 'add insights' },
+ { name: 'add:logs', description: 'add logs' },
+ { name: 'add:pesticides', description: 'add pesticides' },
+ { name: 'add:plans', description: 'add plans' },
+ { name: 'add:prices', description: 'add prices' },
+ { name: 'add:sales', description: 'add sales' },
+ { name: 'add:shift_tasks', description: 'add shift tasks' },
+ { name: 'add:shifts', description: 'add shifts' },
+ { name: 'add:task_types', description: 'add task types' },
+ { name: 'add:users', description: 'add users' },
+ { name: 'add:yields', description: 'add yields' },
+ { name: 'delete:crops', description: 'delete crops' },
+ { name: 'delete:diseases', description: 'delete diseases' },
+ { name: 'delete:expenses', description: 'delete expenses' },
+ { name: 'delete:expense_types', description: 'delete expense types' },
+ { name: 'delete:farms', description: 'delete farms' },
+ { name: 'delete:farm_schedules', description: 'delete farm schedules' },
+ { name: 'delete:fertilizers', description: 'delete fertilizers' },
+ { name: 'delete:field_crops', description: 'delete field crops' },
+ { name: 'delete:fields', description: 'delete fields' },
+ { name: 'delete:insights', description: 'delete insights' },
+ { name: 'delete:logs', description: 'delete logs' },
+ { name: 'delete:plans', description: 'delete plans' },
+ { name: 'delete:pesticides', description: 'delete pesticides' },
+ { name: 'delete:prices', description: 'delete prices' },
+ { name: 'delete:sales', description: 'delete sales' },
+ { name: 'delete:shifts', description: 'delete shifts' },
+ { name: 'delete:task_types', description: 'delete task types' },
+ { name: 'delete:users', description: 'delete users' },
+ { name: 'delete:yields', description: 'delete yields' },
+ { name: 'edit:crops', description: 'edit crops' },
+ { name: 'edit:diseases', description: 'edit diseases' },
+ { name: 'edit:expenses', description: 'edit expenses' },
+ { name: 'edit:expense_types', description: 'edit expense types' },
+ { name: 'edit:farms', description: 'edit farms' },
+ { name: 'edit:farm_schedules', description: 'edit farm schedules' },
+ { name: 'edit:fertilizers', description: 'edit fertilizers' },
+ { name: 'edit:field_crops', description: 'edit field crops' },
+ { name: 'edit:fields', description: 'edit fields' },
+ { name: 'edit:logs', description: 'edit logs' },
+ { name: 'edit:pesticides', description: 'edit pesticides' },
+ { name: 'edit:prices', description: 'edit prices' },
+ { name: 'edit:sales', description: 'edit sales' },
+ { name: 'edit:shifts', description: 'edit shifts' },
+ { name: 'edit:task_types', description: 'edit task types' },
+ { name: 'edit:users', description: 'edit users' },
+ { name: 'edit:user_role', description: 'edit other users\' role' },
+ { name: 'edit:user_status', description: 'edit other users\' status' },
+ { name: 'edit:yields', description: 'edit yields' },
+ { name: 'get:crops', description: 'get crops' },
+ { name: 'get:diseases', description: 'get diseases' },
+ { name: 'get:expenses', description: 'get expenses' },
+ { name: 'get:expense_types', description: 'get expense types' },
+ { name: 'get:farm_schedules', description: 'get farm schedules' },
+ { name: 'get:fertilizers', description: 'get fertilizers' },
+ { name: 'get:field_crops', description: 'get field crops' },
+ { name: 'get:fields', description: 'get fields' },
+ { name: 'get:fields_by_user', description: 'get fields by user' },
+ { name: 'get:insights', description: 'get insights' },
+ { name: 'get:logs', description: 'get logs' },
+ { name: 'get:notifications', description: 'get notifications' },
+ { name: 'get:pesticides', description: 'get pesticides' },
+ { name: 'get:plans', description: 'get plans' },
+ { name: 'get:prices', description: 'get prices' },
+ { name: 'get:sales', description: 'get sales' },
+ { name: 'get:shift_tasks', description: 'get shift tasks' },
+ { name: 'get:shifts', description: 'get shifts' },
+ { name: 'get:task_types', description: 'get task types' },
+ { name: 'get:users', description: 'get users' },
+ { name: 'get:user_farm_info', description: 'get user farm info' },
+ { name: 'get:yields', description: 'get yields' },
+ ]),
+ ]);
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex('permissions').del(),
+ ]);
+};
diff --git a/packages/api/db/migration/20200625144918_add_role_permissions_for_owner.js b/packages/api/db/migration/20200625144918_add_role_permissions_for_owner.js
new file mode 100644
index 0000000000..ed1389dd3c
--- /dev/null
+++ b/packages/api/db/migration/20200625144918_add_role_permissions_for_owner.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200625144918_add_role_permissions_for_owner.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').insert([
+ { role_id: 1, permission_id: 1 },
+ { role_id: 1, permission_id: 2 },
+ { role_id: 1, permission_id: 3 },
+ { role_id: 1, permission_id: 4 },
+ { role_id: 1, permission_id: 5 },
+ { role_id: 1, permission_id: 6 },
+ { role_id: 1, permission_id: 7 },
+ { role_id: 1, permission_id: 8 },
+ { role_id: 1, permission_id: 9 },
+ { role_id: 1, permission_id: 10 },
+ { role_id: 1, permission_id: 11 },
+ { role_id: 1, permission_id: 12 },
+ { role_id: 1, permission_id: 13 },
+ { role_id: 1, permission_id: 14 },
+ { role_id: 1, permission_id: 15 },
+ { role_id: 1, permission_id: 16 },
+ { role_id: 1, permission_id: 17 },
+ { role_id: 1, permission_id: 18 },
+ { role_id: 1, permission_id: 19 },
+ { role_id: 1, permission_id: 20 },
+ { role_id: 1, permission_id: 21 },
+ { role_id: 1, permission_id: 22 },
+ { role_id: 1, permission_id: 23 },
+ { role_id: 1, permission_id: 24 },
+ { role_id: 1, permission_id: 25 },
+ { role_id: 1, permission_id: 26 },
+ { role_id: 1, permission_id: 27 },
+ { role_id: 1, permission_id: 28 },
+ { role_id: 1, permission_id: 29 },
+ { role_id: 1, permission_id: 30 },
+ { role_id: 1, permission_id: 31 },
+ { role_id: 1, permission_id: 32 },
+ { role_id: 1, permission_id: 33 },
+ { role_id: 1, permission_id: 34 },
+ { role_id: 1, permission_id: 35 },
+ { role_id: 1, permission_id: 36 },
+ { role_id: 1, permission_id: 37 },
+ { role_id: 1, permission_id: 38 },
+ { role_id: 1, permission_id: 39 },
+ { role_id: 1, permission_id: 40 },
+ { role_id: 1, permission_id: 41 },
+ { role_id: 1, permission_id: 42 },
+ { role_id: 1, permission_id: 43 },
+ { role_id: 1, permission_id: 44 },
+ { role_id: 1, permission_id: 45 },
+ { role_id: 1, permission_id: 46 },
+ { role_id: 1, permission_id: 47 },
+ { role_id: 1, permission_id: 48 },
+ { role_id: 1, permission_id: 49 },
+ { role_id: 1, permission_id: 50 },
+ { role_id: 1, permission_id: 51 },
+ { role_id: 1, permission_id: 52 },
+ { role_id: 1, permission_id: 53 },
+ { role_id: 1, permission_id: 54 },
+ { role_id: 1, permission_id: 55 },
+ { role_id: 1, permission_id: 56 },
+ { role_id: 1, permission_id: 57 },
+ { role_id: 1, permission_id: 58 },
+ { role_id: 1, permission_id: 59 },
+ { role_id: 1, permission_id: 60 },
+ { role_id: 1, permission_id: 61 },
+ { role_id: 1, permission_id: 62 },
+ { role_id: 1, permission_id: 63 },
+ { role_id: 1, permission_id: 64 },
+ { role_id: 1, permission_id: 65 },
+ { role_id: 1, permission_id: 66 },
+ { role_id: 1, permission_id: 67 },
+ { role_id: 1, permission_id: 68 },
+ { role_id: 1, permission_id: 69 },
+ { role_id: 1, permission_id: 70 },
+ { role_id: 1, permission_id: 71 },
+ { role_id: 1, permission_id: 72 },
+ { role_id: 1, permission_id: 73 },
+ { role_id: 1, permission_id: 74 },
+ { role_id: 1, permission_id: 75 },
+ { role_id: 1, permission_id: 76 },
+ { role_id: 1, permission_id: 77 },
+ { role_id: 1, permission_id: 78 },
+ { role_id: 1, permission_id: 79 },
+ { role_id: 1, permission_id: 80 },
+ { role_id: 1, permission_id: 81 },
+ { role_id: 1, permission_id: 82 },
+ ]),
+ ]);
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').del(),
+ ]);
+};
diff --git a/packages/api/db/migration/20200629074209_insert_pseudo_into_role.js b/packages/api/db/migration/20200629074209_insert_pseudo_into_role.js
new file mode 100644
index 0000000000..a3eb0efec8
--- /dev/null
+++ b/packages/api/db/migration/20200629074209_insert_pseudo_into_role.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200629074209_insert_pseudo_into_role.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex('role').insert({role_id: 4, role: 'Worker Without Account'}),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex('role').where('role_id', 4).del(),
+ ])
+};
+
diff --git a/packages/api/db/migration/20200629074702_add_wage_to_userfarm.js b/packages/api/db/migration/20200629074702_add_wage_to_userfarm.js
new file mode 100644
index 0000000000..039a457a28
--- /dev/null
+++ b/packages/api/db/migration/20200629074702_add_wage_to_userfarm.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200629074702_add_wage_to_userfarm.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('userFarm', (table) => {
+ table.jsonb('wage').defaultTo(JSON.stringify(
+ {
+ type: 'hourly',
+ amount: 0,
+ }
+ ));
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('userFarm', (table) => {
+ table.dropColumn('wage')
+ }),
+ ])
+};
+
diff --git a/packages/api/db/migration/20200629080929_migrate_user_to_userfarm.js b/packages/api/db/migration/20200629080929_migrate_user_to_userfarm.js
new file mode 100644
index 0000000000..3b11aed312
--- /dev/null
+++ b/packages/api/db/migration/20200629080929_migrate_user_to_userfarm.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200629080929_migrate_user_to_userfarm.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function(knex, Promise) {
+ await knex.raw(`
+ UPDATE "userFarm" uf
+ SET role_id =
+ (CASE
+ WHEN u.is_pseudo = true THEN 4
+ ELSE uf.role_id
+ END)
+ FROM "users" u
+ WHERE u.user_id = uf.user_id
+ `);
+
+ await knex.raw(`
+ UPDATE "userFarm" uf
+ SET wage = u.wage
+ FROM "users" u
+ WHERE u.user_id = uf.user_id
+ `);
+};
+
+exports.down = function(knex, Promise) {
+
+};
\ No newline at end of file
diff --git a/packages/api/db/migration/20200629081242_drop_flags_in_users.js b/packages/api/db/migration/20200629081242_drop_flags_in_users.js
new file mode 100644
index 0000000000..9e7221753e
--- /dev/null
+++ b/packages/api/db/migration/20200629081242_drop_flags_in_users.js
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200629081242_drop_flags_in_users.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('users', (table) => {
+ table.dropColumn('is_pseudo');
+ table.dropColumn('is_active');
+ table.dropColumn('wage');
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+
+};
diff --git a/packages/api/db/migration/20200630153142_add_role_permissions_for_manager.js b/packages/api/db/migration/20200630153142_add_role_permissions_for_manager.js
new file mode 100644
index 0000000000..62a28833be
--- /dev/null
+++ b/packages/api/db/migration/20200630153142_add_role_permissions_for_manager.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200630153142_add_role_permissions_for_manager.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').insert([
+ { role_id: 2, permission_id: 1 },
+ { role_id: 2, permission_id: 2 },
+ { role_id: 2, permission_id: 3 },
+ { role_id: 2, permission_id: 4 },
+ { role_id: 2, permission_id: 5 },
+ { role_id: 2, permission_id: 6 },
+ { role_id: 2, permission_id: 7 },
+ { role_id: 2, permission_id: 8 },
+ { role_id: 2, permission_id: 9 },
+ { role_id: 2, permission_id: 10 },
+ { role_id: 2, permission_id: 11 },
+ { role_id: 2, permission_id: 12 },
+ { role_id: 2, permission_id: 13 },
+ { role_id: 2, permission_id: 14 },
+ { role_id: 2, permission_id: 15 },
+ { role_id: 2, permission_id: 16 },
+ { role_id: 2, permission_id: 17 },
+ { role_id: 2, permission_id: 18 },
+ { role_id: 2, permission_id: 19 },
+ { role_id: 2, permission_id: 20 },
+ { role_id: 2, permission_id: 21 },
+ { role_id: 2, permission_id: 22 },
+ { role_id: 2, permission_id: 23 },
+ { role_id: 2, permission_id: 24 },
+ { role_id: 2, permission_id: 25 },
+ { role_id: 2, permission_id: 26 },
+ { role_id: 2, permission_id: 27 },
+ { role_id: 2, permission_id: 28 },
+ { role_id: 2, permission_id: 29 },
+ { role_id: 2, permission_id: 30 },
+ { role_id: 2, permission_id: 31 },
+ { role_id: 2, permission_id: 32 },
+ { role_id: 2, permission_id: 33 },
+ { role_id: 2, permission_id: 34 },
+ { role_id: 2, permission_id: 35 },
+ { role_id: 2, permission_id: 36 },
+ { role_id: 2, permission_id: 37 },
+ { role_id: 2, permission_id: 38 },
+ { role_id: 2, permission_id: 39 },
+ { role_id: 2, permission_id: 40 },
+ { role_id: 2, permission_id: 41 },
+ { role_id: 2, permission_id: 42 },
+ { role_id: 2, permission_id: 43 },
+ { role_id: 2, permission_id: 44 },
+ { role_id: 2, permission_id: 45 },
+ { role_id: 2, permission_id: 46 },
+ { role_id: 2, permission_id: 47 },
+ { role_id: 2, permission_id: 48 },
+ { role_id: 2, permission_id: 49 },
+ { role_id: 2, permission_id: 50 },
+ { role_id: 2, permission_id: 51 },
+ { role_id: 2, permission_id: 52 },
+ { role_id: 2, permission_id: 53 },
+ { role_id: 2, permission_id: 54 },
+ { role_id: 2, permission_id: 55 },
+ { role_id: 2, permission_id: 56 },
+ { role_id: 2, permission_id: 57 },
+ { role_id: 2, permission_id: 58 },
+ { role_id: 2, permission_id: 59 },
+ { role_id: 2, permission_id: 60 },
+ { role_id: 2, permission_id: 61 },
+ { role_id: 2, permission_id: 62 },
+ { role_id: 2, permission_id: 63 },
+ { role_id: 2, permission_id: 64 },
+ { role_id: 2, permission_id: 65 },
+ { role_id: 2, permission_id: 66 },
+ { role_id: 2, permission_id: 67 },
+ { role_id: 2, permission_id: 68 },
+ { role_id: 2, permission_id: 69 },
+ { role_id: 2, permission_id: 70 },
+ { role_id: 2, permission_id: 71 },
+ { role_id: 2, permission_id: 72 },
+ { role_id: 2, permission_id: 73 },
+ { role_id: 2, permission_id: 74 },
+ { role_id: 2, permission_id: 75 },
+ { role_id: 2, permission_id: 76 },
+ { role_id: 2, permission_id: 77 },
+ { role_id: 2, permission_id: 78 },
+ { role_id: 2, permission_id: 79 },
+ { role_id: 2, permission_id: 80 },
+ { role_id: 2, permission_id: 81 },
+ { role_id: 2, permission_id: 82 },
+ ]),
+ ]);
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').where('role_id', 2).del(),
+ ]);
+};
diff --git a/packages/api/db/migration/20200630153458_add_role_permissions_for_worker.js b/packages/api/db/migration/20200630153458_add_role_permissions_for_worker.js
new file mode 100644
index 0000000000..fe16b1d5b2
--- /dev/null
+++ b/packages/api/db/migration/20200630153458_add_role_permissions_for_worker.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200630153458_add_role_permissions_for_worker.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').insert([
+ { role_id: 3, permission_id: 1 },
+ { role_id: 3, permission_id: 2 },
+ { role_id: 3, permission_id: 3 },
+ { role_id: 3, permission_id: 4 },
+ { role_id: 3, permission_id: 5 },
+ { role_id: 3, permission_id: 6 },
+ { role_id: 3, permission_id: 7 },
+ { role_id: 3, permission_id: 8 },
+ { role_id: 3, permission_id: 9 },
+ { role_id: 3, permission_id: 10 },
+ { role_id: 3, permission_id: 11 },
+ { role_id: 3, permission_id: 12 },
+ { role_id: 3, permission_id: 13 },
+ { role_id: 3, permission_id: 14 },
+ { role_id: 3, permission_id: 15 },
+ { role_id: 3, permission_id: 16 },
+ { role_id: 3, permission_id: 17 },
+ { role_id: 3, permission_id: 18 },
+ { role_id: 3, permission_id: 19 },
+ { role_id: 3, permission_id: 20 },
+ { role_id: 3, permission_id: 21 },
+ { role_id: 3, permission_id: 22 },
+ { role_id: 3, permission_id: 23 },
+ { role_id: 3, permission_id: 24 },
+ { role_id: 3, permission_id: 25 },
+ { role_id: 3, permission_id: 26 },
+ { role_id: 3, permission_id: 27 },
+ { role_id: 3, permission_id: 28 },
+ { role_id: 3, permission_id: 29 },
+ { role_id: 3, permission_id: 30 },
+ { role_id: 3, permission_id: 31 },
+ { role_id: 3, permission_id: 32 },
+ { role_id: 3, permission_id: 33 },
+ { role_id: 3, permission_id: 34 },
+ { role_id: 3, permission_id: 35 },
+ { role_id: 3, permission_id: 36 },
+ { role_id: 3, permission_id: 37 },
+ { role_id: 3, permission_id: 38 },
+ { role_id: 3, permission_id: 39 },
+ { role_id: 3, permission_id: 40 },
+ { role_id: 3, permission_id: 41 },
+ { role_id: 3, permission_id: 42 },
+ { role_id: 3, permission_id: 43 },
+ { role_id: 3, permission_id: 44 },
+ { role_id: 3, permission_id: 45 },
+ { role_id: 3, permission_id: 46 },
+ { role_id: 3, permission_id: 47 },
+ { role_id: 3, permission_id: 48 },
+ { role_id: 3, permission_id: 49 },
+ { role_id: 3, permission_id: 50 },
+ { role_id: 3, permission_id: 51 },
+ { role_id: 3, permission_id: 52 },
+ { role_id: 3, permission_id: 53 },
+ { role_id: 3, permission_id: 54 },
+ { role_id: 3, permission_id: 55 },
+ { role_id: 3, permission_id: 56 },
+ { role_id: 3, permission_id: 57 },
+ { role_id: 3, permission_id: 58 },
+ { role_id: 3, permission_id: 59 },
+ { role_id: 3, permission_id: 60 },
+ { role_id: 3, permission_id: 61 },
+ { role_id: 3, permission_id: 62 },
+ { role_id: 3, permission_id: 63 },
+ { role_id: 3, permission_id: 64 },
+ { role_id: 3, permission_id: 65 },
+ { role_id: 3, permission_id: 66 },
+ { role_id: 3, permission_id: 67 },
+ { role_id: 3, permission_id: 68 },
+ { role_id: 3, permission_id: 69 },
+ { role_id: 3, permission_id: 70 },
+ { role_id: 3, permission_id: 71 },
+ { role_id: 3, permission_id: 72 },
+ { role_id: 3, permission_id: 73 },
+ { role_id: 3, permission_id: 74 },
+ { role_id: 3, permission_id: 75 },
+ { role_id: 3, permission_id: 76 },
+ { role_id: 3, permission_id: 77 },
+ { role_id: 3, permission_id: 78 },
+ { role_id: 3, permission_id: 79 },
+ { role_id: 3, permission_id: 80 },
+ { role_id: 3, permission_id: 81 },
+ { role_id: 3, permission_id: 82 },
+ ]),
+ ]);
+};
+
+exports.down = function (knex, Promise) {
+ return Promise.all([
+ knex('rolePermissions').where('role_id', 3).del(),
+ ]);
+};
diff --git a/packages/api/db/migration/20200630230342_alter_tables_with_user_id.js b/packages/api/db/migration/20200630230342_alter_tables_with_user_id.js
new file mode 100644
index 0000000000..4e170fe07c
--- /dev/null
+++ b/packages/api/db/migration/20200630230342_alter_tables_with_user_id.js
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200630230342_alter_tables_with_user_id.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+// drops constraints
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('userFarm', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('activityLog', (table) => {
+ table.dropForeign('user_id')
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.alterTable('shift', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').alter();
+ }),
+ knex.schema.alterTable('userFarm', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').alter();
+ }),
+ knex.schema.alterTable('farmDataSchedule', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').alter();
+ }),
+ knex.schema.alterTable('activityLog', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').alter();
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200630231959_add_constraint_back_in_tables.js b/packages/api/db/migration/20200630231959_add_constraint_back_in_tables.js
new file mode 100644
index 0000000000..c9697c2faa
--- /dev/null
+++ b/packages/api/db/migration/20200630231959_add_constraint_back_in_tables.js
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (20200630231959_add_constraint_back_in_tables.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+exports.up = async function(knex, Promise) {
+ await knex.raw(
+ `
+ ALTER TABLE "activityLog"
+ ADD CONSTRAINT user_id foreign key(user_id) references users(user_id) ON UPDATE CASCADE
+ `
+ );
+
+ await knex.raw(
+ `
+ ALTER TABLE "shift"
+ ADD CONSTRAINT user_id foreign key(user_id) references users(user_id) ON UPDATE CASCADE
+ `
+ );
+
+ await knex.raw(
+ `
+ ALTER TABLE "farmDataSchedule"
+ ADD CONSTRAINT user_id foreign key(user_id) references users(user_id) ON UPDATE CASCADE
+ `
+ );
+
+ await knex.raw(
+ `
+ ALTER TABLE "userFarm"
+ ADD CONSTRAINT user_id foreign key(user_id) references users(user_id) ON UPDATE CASCADE
+ `
+ );
+
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.table('shift', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('userFarm', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('farmDataSchedule', (table) => {
+ table.dropForeign('user_id')
+ }),
+ knex.schema.table('activityLog', (table) => {
+ table.dropForeign('user_id')
+ }),
+ ])
+};
diff --git a/packages/api/db/migration/20200713160251_make_email_token_table.js b/packages/api/db/migration/20200713160251_make_email_token_table.js
new file mode 100644
index 0000000000..069b7a0828
--- /dev/null
+++ b/packages/api/db/migration/20200713160251_make_email_token_table.js
@@ -0,0 +1,24 @@
+
+exports.up = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.createTable('emailToken', (table) => {
+ table.string('user_id')
+ .references('user_id')
+ .inTable('users').onDelete('CASCADE').onUpdate('CASCADE').notNullable();
+ table.uuid('farm_id')
+ .references('farm_id')
+ .inTable('farm').onDelete('CASCADE').onUpdate('CASCADE').notNullable();
+ table.string('token').notNullable();
+ table.boolean('is_used').defaultTo(false).notNullable();
+ table.timestamps(false, true);
+ table.primary(['user_id', 'farm_id']);
+ }),
+ ])
+};
+
+exports.down = function(knex, Promise) {
+ return Promise.all([
+ knex.schema.dropTable('emailToken'),
+ ])
+
+};
diff --git a/packages/api/db/seeds/put_all_datasets.js b/packages/api/db/seeds/put_all_datasets.js
new file mode 100644
index 0000000000..2c5ac2d0d3
--- /dev/null
+++ b/packages/api/db/seeds/put_all_datasets.js
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (put_all_datasets.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+var csv = require('csvtojson');
+const knex = require('knex');
+const farmData = require('./seedData/generalFarmSeedData');
+const _ = require('lodash');
+
+function insertCsvIntoTable(knex, tableName, fromFile) {
+ return new Promise(resolve => {
+ knex(tableName).del()
+ .then(function () {
+ return csv().fromFile(fromFile)
+ .then((jsonBlob) => {
+ var jsonObject = JSON.stringify(jsonBlob, function (key, value) {
+ return value.length === 0 ? null : value
+ });
+ return knex(tableName).insert(JSON.parse(jsonObject)).then(() => {
+ //console.log("resolved");
+ resolve();
+ });
+ });
+ });
+ });
+}
+
+function insertCropDisease(knex, disease) {
+ const { crop_genus, crop_specie, disease_common_name } = disease;
+ if (crop_specie.length == 0) {
+ return new Promise(resolve => {
+ knex.select('crop_id').from('crop')
+ .where({
+ crop_genus,
+ }).then((crop_object_ids) => { //array of ids of crop
+ knex.select('disease_id').from('disease')
+ .where({ disease_common_name }).first().then((disease) => {
+ const crop_disease_insertion = crop_object_ids.map((crop_object) => {
+ // console.log("crop_id: "+crop_id.crop_id+" diease id:" +disease_id.disease_id)
+ if (disease.disease_id != undefined) {
+ //console.log("inserting multiple");
+ knex('cropDisease').insert({ crop_id: crop_object.crop_id, disease_id: disease.disease_id })
+ }
+ });
+ Promise.all(crop_disease_insertion).then(() => {
+ resolve();
+ });
+ }).catch((error) => {
+ console.log('Error: ' + error);
+ })
+ })
+ });
+ } else {
+ return new Promise(resolve => {
+ knex.select('crop_id').from('crop')
+ .where({
+ crop_genus,
+ crop_specie,
+ }).first().then((crop) => {
+ // disease.id = id;
+ knex.select('disease_id').from('disease')
+ .where({ disease_common_name }).first().then((disease) => {
+ if (disease != null && crop != null) {
+ //console.log("Inserting one for one");
+ knex('cropDisease').insert({ disease_id: disease.disease_id, crop_id: crop.crop_id }).then(() => {
+ resolve()
+ });
+ // console.log("Disease id:"+disease.disease_id+" Crop id:"+crop.crop_id);
+ } else {
+ resolve();
+ }
+
+ })
+ }).catch((error) => {
+ console.log(error);
+ });
+ })
+ }
+}
+
+function insertCropDiseasesData(knex) {
+ return knex('cropDisease').del()
+ .then(function () {
+ return csv().fromFile(__dirname + '/seedData/cropDisease.csv');
+ }).then(function (diseaseData) {
+ var mappingDisease = diseaseData.map(disease => insertCropDisease(knex, disease));
+ console.log('Mapping disease ' + mappingDisease.length);
+ return Promise.all(mappingDisease).then(() => {
+ console.log('Added all data');
+ })
+ })
+}
+
+function insertTestData(knex, farmData) {
+ return new Promise(resolve => {
+ knex(farmData[0].table).insert(farmData[0].data).then(() => {
+ knex(farmData[1].table).insert(farmData[1].data).then(() => {
+ knex(farmData[2].table).insert(farmData[2].data).then(() => {
+ knex(farmData[3].table).insert(farmData[3].data).then(() => {
+ knex(farmData[4].table).insert(farmData[4].data).then(() => {
+ knex(farmData[5].table).insert(farmData[5].data).then(() => {
+ knex(farmData[6].table).insert(farmData[6].data).then(async () => {
+ for (let i = 7; i < farmData.length; i++) {
+ await knex(farmData[i].table).insert(farmData[i].data)
+ }
+ }).then(() => resolve())
+ })
+ })
+ })
+ })
+ })
+ })
+ })
+}
+
+exports.seed = function (knex, Promise) {
+ // Deletes ALL existing entries
+ var BASEURL = __dirname + '/seedData/';
+ var seeds = [
+ { tableName: 'fertilizer', fileName: BASEURL + 'fertilizers.csv' },
+ { tableName: 'crop', fileName: BASEURL + 'crop_data.csv' },
+ { tableName: 'disease', fileName: BASEURL + 'disease.csv' },
+ { tableName: 'taskType', fileName: BASEURL + 'taskTypes.csv' },
+ { tableName: 'pesticide', fileName: BASEURL + 'pesticides.csv' },
+ { tableName: 'farmExpenseType', fileName: BASEURL + 'farmExpenseType.csv' },
+ ];
+ var migration = [];
+
+ seeds.forEach(function (seed) {
+ // console.log("Table name:"+seed.tableName + " File name:"+seed.fileName);
+ migration.push(insertCsvIntoTable(knex, seed.tableName, seed.fileName))
+ });
+
+ return Promise.all(migration).then(() => {
+ migration.push(insertCropDiseasesData(knex));
+ }).then(() => {
+ return insertTestData(knex, farmData);
+ });
+};
+
+
diff --git a/packages/api/db/seeds/seedData/cropDisease.csv b/packages/api/db/seeds/seedData/cropDisease.csv
new file mode 100644
index 0000000000..ed732c1630
--- /dev/null
+++ b/packages/api/db/seeds/seedData/cropDisease.csv
@@ -0,0 +1,1751 @@
+disease_common_name,disease_sci_name,crop_genus,crop_specie
+African Mole Cricket,Gryllotalpa africana,Abelmoschus,esculentus
+Aphid,Aphidoidea family,Abelmoschus,esculentus
+Boron Deficiency,Boron Deficiency,Abelmoschus,esculentus
+Common Red Spider Mite,Tetranychus urticae,Abelmoschus,esculentus
+Flea Beetle,Psylliodes,Abelmoschus,esculentus
+Magnesium Deficiency,Magnesium Deficiency,Abelmoschus,esculentus
+Manganese Deficiency,Manganese Deficiency,Abelmoschus,esculentus
+Nematode,Nematoda,Abelmoschus,esculentus
+Pesticide Burn,Pesticide Burn,Abelmoschus,esculentus
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Abelmoschus,esculentus
+Variegated Grasshopper,Zonocerus variegatus,Abelmoschus,esculentus
+Water Deficiency,Water Deficiency,Abelmoschus,esculentus
+Zinc Deficiency,Zinc Deficiency,Abelmoschus,esculentus
+African Mole Cricket,Gryllotalpa africana,Allium,cepa
+Aphid,Aphidoidea family,Allium,sativum
+Aphid,Aphidoidea family,Allium,cepa
+Boron Deficiency,Boron Deficiency,Allium,sativum
+Boron Deficiency,Boron Deficiency,Allium,cepa
+Botrytis Blight,Botrytis cinerea,Allium,cepa
+Botrytis Leaf Blight,Botryotinia squamosa,Allium,sativum
+Botrytis Leaf Blight,Botryotinia squamosa,Allium,cepa
+Cabbage Moth,Mamestra brassicae,Allium,sativum
+Cabbage Moth,Mamestra brassicae,Allium,cepa
+Calcium Deficiency,Calcium Deficiency,Allium,cepa
+Common Red Spider Mite,Tetranychus urticae,Allium,sativum
+Common Red Spider Mite,Tetranychus urticae,Allium,cepa
+Downy Mildew,Peronosporales,Allium,sativum
+Downy Mildew,Peronosporales,Allium,cepa
+Flea Beetle,Psylliodes,Allium,cepa
+Iron Deficiency,Iron Deficiency,Allium,sativum
+Iron Deficiency,Iron Deficiency,Allium,cepa
+Leek Rust,Puccinia porri,Allium,sativum
+Leek Rust,Puccinia porri,Allium,cepa
+Magnesium Deficiency,Magnesium Deficiency,Allium,sativum
+Magnesium Deficiency,Magnesium Deficiency,Allium,cepa
+Manganese Deficiency,Manganese Deficiency,Allium,sativum
+Manganese Deficiency,Manganese Deficiency,Allium,cepa
+Nematode,Nematoda,Allium,sativum
+Nematode,Nematoda,Allium,cepa
+Nitrogen Deficiency,Nitrogen Deficiency,Allium,sativum
+Nitrogen Deficiency,Nitrogen Deficiency,Allium,cepa
+Onion Leaf Miner,Phytomyza gymnostoma,Allium,sativum
+Onion Leaf Miner,Phytomyza gymnostoma,Allium,cepa
+Onion Maggots,Delia platura,Allium,sativum
+Onion Maggots,Delia platura,Allium,cepa
+Onion Yellow Dwarf Virus,OYDV,Allium,sativum
+Onion Yellow Dwarf Virus,OYDV,Allium,cepa
+Pesticide Burn,Pesticide Burn,Allium,sativum
+Pesticide Burn,Pesticide Burn,Allium,cepa
+Phosphorus Deficiency,Phosphorus Deficiency,Allium,sativum
+Phosphorus Deficiency,Phosphorus Deficiency,Allium,cepa
+Potassium Deficiency,Potassium Deficiency,Allium,cepa
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Allium,cepa
+Sclerotium Rot,Athelia rolfsii,Allium,cepa
+Slug,Class Gastropoda,Allium,sativum
+Slug,Class Gastropoda,Allium,cepa
+Thrips,Order Thysanoptera,Allium,sativum
+Thrips,Order Thysanoptera,Allium,cepa
+Variegated Grasshopper,Zonocerus variegatus,Allium,cepa
+Verticillium Wilt,Verticillium spp.,Allium,sativum
+Vole,Cricetidae,Allium,sativum
+Vole,Cricetidae,Allium,cepa
+Water Deficiency,Water Deficiency,Allium,cepa
+White Rot,Stromatinia cepivora,Allium,sativum
+White Rot,Stromatinia cepivora,Allium,cepa
+Zinc Deficiency,Zinc Deficiency,Allium,sativum
+Zinc Deficiency,Zinc Deficiency,Allium,cepa
+Alternaria Leaf Spot of Peanut,Alternaria spp.,Arachis,hypogaea
+Aphid,Aphidoidea family,Arachis,hypogaea
+Bean Leaf Webber,Hedylepta indicata,Arachis,hypogaea
+Black Cutworm,Agrotis ipsilon,Arachis,hypogaea
+Boron Deficiency,Boron Deficiency,Arachis,hypogaea
+Botrytis Blight,Botrytis cinerea,Arachis,hypogaea
+Bud Necrosis Disease,PBND,Arachis,hypogaea
+Calcium Deficiency in Peanut,Calcium Deficiency,Arachis,hypogaea
+Castor Semilooper,Ophiusa melicerta,Arachis,hypogaea
+Common Red Spider Mite,Tetranychus urticae,Arachis,hypogaea
+Fall Armyworm,Spodoptera frugiperda,Arachis,hypogaea
+Greenhouse Whitefly,Trialeurodes vaporariorum,Arachis,hypogaea
+Iron Deficiency in Peanut,Iron Deficiency,Arachis,hypogaea
+Jassids on Peanut,Empoasca kerri,Arachis,hypogaea
+Late and Early Leaf Spot,Mycosphaerella spp.,Arachis,hypogaea
+Leaf Miner Flies,Agromyzidae spp.,Arachis,hypogaea
+Lesser cornstalk borer,Elasmopalpus lignosellus,Arachis,hypogaea
+Magnesium Deficiency,Magnesium Deficiency,Arachis,hypogaea
+Manganese Deficiency,Manganese Deficiency,Arachis,hypogaea
+Pea Pod Borer,Etiella zinckenella,Arachis,hypogaea
+Peanut Rust,Puccinia arachidis,Arachis,hypogaea
+Pesticide Burn,Pesticide Burn,Arachis,hypogaea
+Phosphorus Deficiency in Peanut,Phosphorus Deficiency,Arachis,hypogaea
+Phyllosticta Leaf Spot,Phyllosticta arachidis-hypogaea,Arachis,hypogaea
+Potassium Deficiency,Potassium Deficiency,Arachis,hypogaea
+Red Hairy Caterpillar,Amsacta albistriga,Arachis,hypogaea
+Stem rot of Peanut,Athelia rolfsii,Arachis,hypogaea
+Thrips,Order Thysanoptera,Arachis,hypogaea
+Tobacco Caterpillar,Spodoptera litura,Arachis,hypogaea
+Velvetbean Caterpillar,Anticarsia gemmatalis,Arachis,hypogaea
+Water Deficiency,Water Deficiency,Arachis,hypogaea
+White Grub on Peanut,Holotrichia spp.,Arachis,hypogaea
+Zinc Deficiency in Peanut,Zinc Deficiency,Arachis,hypogaea
+Aphid,Aphidoidea family,Beta,vulgaris
+Bean Leaf Webber,Hedylepta indicata,Beta,vulgaris
+Boron Deficiency,Boron Deficiency,Beta,vulgaris
+Botrytis Blight,Botrytis cinerea,Beta,vulgaris
+Cabbage Moth,Mamestra brassicae,Beta,vulgaris
+Leaf Spot of Beet,Cercospora beticola,Beta,vulgaris
+Magnesium Deficiency,Magnesium Deficiency,Beta,vulgaris
+Manganese Deficiency,Manganese Deficiency,Beta,vulgaris
+Pesticide Burn,Pesticide Burn,Beta,vulgaris
+Ramularia Leaf Spot of Beet,Ramularia beticola,Beta,vulgaris
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Beta,vulgaris
+Zinc Deficiency,Zinc Deficiency,Beta,vulgaris
+Aphid,Aphidoidea family,Brassica,oleracea
+Aphid,Aphidoidea family,Brassica,napus
+Black Cutworm,Agrotis ipsilon,Brassica,oleracea
+Black Leg of Rapeseed,Plenodomus lingam,Brassica,napus
+Black Mold,Alternaria brassicae,Brassica,oleracea
+Black Mold,Alternaria brassicae,Brassica,napus
+Black Rot,Xanthomonas campestris pv. campestris,Brassica,oleracea
+Botrytis Blight,Botrytis cinerea,Brassica,oleracea
+Botrytis Blight,Botrytis cinerea,Brassica,napus
+Bright Line Brown Eye,Lacanobia oleracea,Brassica,oleracea
+Cabbage Moth,Mamestra brassicae,Brassica,oleracea
+Cabbage Whitefly,Aleyrodes proletella,Brassica,oleracea
+Calcium Deficiency,Calcium Deficiency,Brassica,oleracea
+Clubroot,Plasmodiophora brassicae,Brassica,oleracea
+Clubroot of Canola,Plasmodiophora brassicae,Brassica,napus
+Common Red Spider Mite,Tetranychus urticae,Brassica,oleracea
+Downy Mildew,Peronosporales,Brassica,oleracea
+Fall Armyworm,Spodoptera frugiperda,Brassica,oleracea
+Fertilizer or Pesticide Burn,Fertilizer Burn,Brassica,napus
+Flea Beetle,Psylliodes,Brassica,oleracea
+Fusarium Wilt,Fusarium oxysporum,Brassica,napus
+Green Peach Aphid,Myzus persicae,Brassica,oleracea
+Iron Deficiency,Iron Deficiency,Brassica,oleracea
+Leaf Miner Flies,Agromyzidae spp.,Brassica,oleracea
+Magnesium Deficiency,Magnesium Deficiency,Brassica,oleracea
+Magnesium Deficiency,Magnesium Deficiency,Brassica,napus
+Manganese Deficiency,Manganese Deficiency,Brassica,oleracea
+Manganese Deficiency,Manganese Deficiency,Brassica,napus
+Nematode,Nematoda,Brassica,oleracea
+Onion Maggots,Delia platura,Brassica,oleracea
+Pesticide Burn,Pesticide Burn,Brassica,oleracea
+Pesticide Burn,Pesticide Burn,Brassica,napus
+Powdery Mildew,Erysiphaceae,Brassica,oleracea
+Powdery Mildew,Erysiphaceae,Brassica,napus
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Brassica,oleracea
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Brassica,napus
+Sclerotium Rot,Athelia rolfsii,Brassica,oleracea
+Slug,Class Gastropoda,Brassica,oleracea
+Small and Large Cabbage White,Pieris,Brassica,oleracea
+Thrips,Order Thysanoptera,Brassica,oleracea
+Tobacco Caterpillar,Spodoptera litura,Brassica,oleracea
+Verticillium Wilt,Verticillium spp.,Brassica,oleracea
+Verticillium Wilt,Verticillium spp.,Brassica,napus
+Vole,Cricetidae,Brassica,oleracea
+Water Deficiency,Water Deficiency,Brassica,oleracea
+Zinc Deficiency,Zinc Deficiency,Brassica,oleracea
+Zinc Deficiency,Zinc Deficiency,Brassica,napus
+Abiotic Sunburn,Abiotic Sunburn,Capsicum,spp.
+African Mole Cricket,Gryllotalpa africana,Capsicum,spp.
+Anthracnose of Pepper,Glomerella cingulata,Capsicum,spp.
+Aphid,Aphidoidea family,Capsicum,spp.
+Bacterial Soft Rot of Pepper,Pectobacterium carotovorum subsp. carotovorum,Capsicum,spp.
+Bacterial Spot,Xanthomonas spp.,Capsicum,spp.
+Bacterial Wilt,Ralstonia solanacearum,Capsicum,spp.
+Black Cutworm,Agrotis ipsilon,Capsicum,spp.
+Blight of Pepper,Phytophthora capsici,Capsicum,spp.
+Blossom End Rot,blossom end rot,Capsicum,spp.
+Boron Deficiency,Boron Deficiency,Capsicum,spp.
+Botrytis Blight,Botrytis cinerea,Capsicum,spp.
+Bright Line Brown Eye,Lacanobia oleracea,Capsicum,spp.
+Broad Mite,Polyphagotarsonemus latus,Capsicum,spp.
+Calcium Deficiency,Calcium Deficiency,Capsicum,spp.
+Chilli Cercospora Leaf Spot,Cercospora capsici,Capsicum,spp.
+Chilli Damping-off,Pythium aphanidermatum,Capsicum,spp.
+Common Red Spider Mite,Tetranychus urticae,Capsicum,spp.
+Cotton Bollworm,Helicoverpa armigera,Capsicum,spp.
+Fall Armyworm,Spodoptera frugiperda,Capsicum,spp.
+Flea Beetle,Psylliodes,Capsicum,spp.
+Greenhouse Whitefly,Trialeurodes vaporariorum,Capsicum,spp.
+Iron Deficiency,Iron Deficiency,Capsicum,spp.
+Leaf Miner Flies,Agromyzidae spp.,Capsicum,spp.
+Magnesium Deficiency,Magnesium Deficiency,Capsicum,spp.
+Manganese Deficiency,Manganese Deficiency,Capsicum,spp.
+Mealybug,Pseudococcidae,Capsicum,spp.
+Mediterranean Fruit Fly,Ceratitis capitata,Capsicum,spp.
+Nematode,Nematoda,Capsicum,spp.
+Nitrogen Deficiency,Nitrogen Deficiency,Capsicum,spp.
+Pesticide Burn,Pesticide Burn,Capsicum,spp.
+Phosphorus Deficiency,Phosphorus Deficiency,Capsicum,spp.
+Potassium Deficiency,Potassium Deficiency,Capsicum,spp.
+Potato Y Virus,PVY,Capsicum,spp.
+Powdery Mildew,Erysiphaceae,Capsicum,spp.
+Root-Knot Nematode,Meloidogyne spp.,Capsicum,spp.
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Capsicum,spp.
+Sclerotium Rot,Athelia rolfsii,Capsicum,spp.
+Slug,Class Gastropoda,Capsicum,spp.
+Sooty Mold,"Capnodium, Fumago, Scorias spp",Capsicum,spp.
+Thrips,Order Thysanoptera,Capsicum,spp.
+Variegated Grasshopper,Zonocerus variegatus,Capsicum,spp.
+Verticillium Wilt,Verticillium spp.,Capsicum,spp.
+Vole,Cricetidae,Capsicum,spp.
+Water Deficiency,Water Deficiency,Capsicum,spp.
+Zinc Deficiency,Zinc Deficiency,Capsicum,spp.
+African Mole Cricket,Gryllotalpa africana,Carica,papaya
+Anthracnose of Papaya and Mango,Colletotrichum gloeosporioides,Carica,papaya
+Aphid,Aphidoidea family,Carica,papaya
+Banana Scale Insect,Aspidiotus destructor,Carica,papaya
+Black Spot Disease of Papaya,Asperisporium caricae,Carica,papaya
+Boron Deficiency,Boron Deficiency,Carica,papaya
+Damping-Off,Pythium aphanidermatum,Carica,papaya
+Green Citrus Aphid,Aphis spiraecola,Carica,papaya
+Iron Deficiency,Iron Deficiency,Carica,papaya
+Magnesium Deficiency,Magnesium Deficiency,Carica,papaya
+Manganese Deficiency,Manganese Deficiency,Carica,papaya
+Mealybug on Papaya,Paracoccus marginatus,Carica,papaya
+Mediterranean Fruit Fly,Ceratitis capitata,Carica,papaya
+Melon Fruit Fly,Zeugodacus cucurbitae,Carica,papaya
+Nitrogen Deficiency,Nitrogen Deficiency,Carica,papaya
+Papaya Brown Spot,Corynespora cassiicola,Carica,papaya
+Papaya Fruit Fly,Toxotrypana curvicauda,Carica,papaya
+Papaya Leaf Curl,PaLCV,Carica,papaya
+Papaya Mosaic Virus,PapMV,Carica,papaya
+Pesticide Burn,Pesticide Burn,Carica,papaya
+Phosphorus Deficiency,Phosphorus Deficiency,Carica,papaya
+Powdery Mildew of Papaya,Oidium caricae-papayae,Carica,papaya
+Ring Spot Virus,PRSV,Carica,papaya
+Sooty Mold,"Capnodium, Fumago, Scorias spp",Carica,papaya
+Vole,Cricetidae,Carica,papaya
+Water Deficiency,Water Deficiency,Carica,papaya
+Zinc Deficiency,Zinc Deficiency,Carica,papaya
+Aphid,Aphidoidea family,Cicer,arietinum
+Ascochyta Blight,Ascochyta rabiei,Cicer,arietinum
+Ashy Stem Blight of Bean,Macrophomina phaseolina,Cicer,arietinum
+Black Cutworm,Agrotis ipsilon,Cicer,arietinum
+Boron Deficiency,Boron Deficiency,Cicer,arietinum
+Botrytis Blight,Botrytis cinerea,Cicer,arietinum
+Chickpea Rust,Uromyces ciceris-arietini,Cicer,arietinum
+Downy Mildew,Peronosporales,Cicer,arietinum
+Fusarium Wilt,Fusarium oxysporum,Cicer,arietinum
+Gram Pod Borer,Helicoverpa armigera,Cicer,arietinum
+Iron Deficiency,Iron Deficiency,Cicer,arietinum
+Leaf Miner Flies,Agromyzidae spp.,Cicer,arietinum
+Lentil Rust,Uromyces viciae-fabae,Cicer,arietinum
+Lesion Nematode,Pratylenchus spp.,Cicer,arietinum
+Magnesium Deficiency,Magnesium Deficiency,Cicer,arietinum
+Manganese Deficiency,Manganese Deficiency,Cicer,arietinum
+Pea Pod Borer,Etiella zinckenella,Cicer,arietinum
+Pea Rust,Uromyces pisi-sativi,Cicer,arietinum
+Pesticide Burn,Pesticide Burn,Cicer,arietinum
+Phosphorus Deficiency,Phosphorus Deficiency,Cicer,arietinum
+Powdery Mildew,Erysiphaceae,Cicer,arietinum
+Root-Knot Nematode,Meloidogyne spp.,Cicer,arietinum
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Cicer,arietinum
+Sclerotium Rot,Athelia rolfsii,Cicer,arietinum
+Semilooper,Autographa nigrisigna,Cicer,arietinum
+Verticillium Wilt,Verticillium spp.,Cicer,arietinum
+Water Deficiency,Water Deficiency,Cicer,arietinum
+Zinc Deficiency,Zinc Deficiency,Cicer,arietinum
+Abiotic Sunburn,Abiotic Sunburn,Citrus,
+Algal Leaf Spot,Cephaleuros virescens,Citrus,
+Alternaria Brown Spot,Alternaria alternata,Citrus,
+Anthracnose of Citrus,Colletotrichum gloeosporioides,Citrus,
+Anthracnose of Lime,Glomerella acutata,Citrus,
+Aphid,Aphidoidea family,Citrus,
+Bacterial Spot of Citrus,Xanthomonas alfalfae,Citrus,
+Banana Scale Insect,Aspidiotus destructor,Citrus,
+Black Citrus Aphid,Toxoptera aurantii,Citrus,
+Black Parlatoria Scale,Parlatoria ziziphi,Citrus,
+Black Scale,Saissetia oleae,Citrus,
+Black Shank,Phytophthora nicotianae,Citrus,
+Blast of Citrus,Pseudomonas syringae pv. syringae,Citrus,
+Boron Deficiency,Boron Deficiency,Citrus,
+Botrytis Blight,Botrytis cinerea,Citrus,
+Calcium Deficiency,Calcium Deficiency,Citrus,
+Castor Semilooper,Ophiusa melicerta,Citrus,
+Citrus Black Spot,Phyllosticta citricarpa,Citrus,
+Citrus Bud Mite,Aceria sheldoni,Citrus,
+Citrus Canker,Xanthomonas axonopodis pv. citri,Citrus,
+Citrus Chlorotic Dwarf Virus,CCDV,Citrus,
+Citrus Exocortis Viroid,CEVd,Citrus,
+Citrus Flatid Plant Hopper,Metcalfa pruinosa,Citrus,
+Citrus Greening Disease,Candidatus Liberibacter,Citrus,
+Citrus Leaf Miner,Phyllocnistis citrella,Citrus,
+Citrus Leprosis,Citrus leprosis virus sensu lato,Citrus,
+Citrus Nematode,Tylenchulus semipenetrans,Citrus,
+Citrus Psorosis Virus,CPsV,Citrus,
+Citrus Red Mite,Panonychus citri,Citrus,
+Citrus Scab,Elsinoe fawcettii,Citrus,
+Citrus Stubborn Disease,Spiroplasma citri,Citrus,
+Citrus Thrips,Scirtothrips citri,Citrus,
+Citrus Tristeza Virus,CTV,Citrus,
+Citrus Variegated Chlorosis,Xylella fastidiosa subsp. pauca,Citrus,
+Citrus Whitefly,Dialeurodes citri,Citrus,
+Citrus Wolly Whitefly,Aleurothrixus floccosus,Citrus,
+Common Red Spider Mite,Tetranychus urticae,Citrus,
+Cottony Cushion Scale,Icerya purchasi,Citrus,
+Dead Arm,Eutypa lata,Citrus,
+Greasy Spot of Citrus,Mycosphaerella citri,Citrus,
+Green Citrus Aphid,Aphis spiraecola,Citrus,
+Iron Deficiency,Iron Deficiency,Citrus,
+Leaf Spot of Citrus,Pseudocercospora angolensis,Citrus,
+Magnesium Deficiency,Magnesium Deficiency,Citrus,
+Mal Secco,Phoma tracheiphila,Citrus,
+Manganese Deficiency,Manganese Deficiency,Citrus,
+Mealybug,Pseudococcidae,Citrus,
+Mediterranean Fruit Fly,Ceratitis capitata,Citrus,
+Melanose,Diaporthe citri,Citrus,
+Melon Fruit Fly,Zeugodacus cucurbitae,Citrus,
+Nitrogen Deficiency,Nitrogen Deficiency,Citrus,
+Oleander Scale,Aspidiotus nerii,Citrus,
+Pesticide Burn,Pesticide Burn,Citrus,
+Phosphorus Deficiency,Phosphorus Deficiency,Citrus,
+Phytophthora Gummosis,Phytophthora,Citrus,
+Phytophthora Root Rot,Phytophthora cactorum,Citrus,
+Potassium Deficiency,Potassium Deficiency,Citrus,
+Powdery Mildew,Erysiphaceae,Citrus,
+Septoria Spot,Septoria citri,Citrus,
+Sooty Mold,"Capnodium, Fumago, Scorias spp",Citrus,
+Water Deficiency,Water Deficiency,Citrus,
+Zinc Deficiency,Zinc Deficiency,Citrus,
+Abiotic Sunburn,Abiotic Sunburn,Cucumis,melo
+African Mole Cricket,Gryllotalpa africana,Cucumis,melo
+Angular Leaf Spot Disease,Pseudomonas syringae,Cucumis,sativus
+Anthracnose of Cucurbits,Glomerella lagenarium,Cucumis,sativus
+Anthracnose of Cucurbits,Glomerella lagenarium,Cucumis,melo
+Aphid,Aphidoidea family,Cucumis,sativus
+Aphid,Aphidoidea family,Cucumis,melo
+Bacterial Fruit Blotch,Acidovorax citrulli,Cucumis,sativus
+Bacterial Fruit Blotch,Acidovorax citrulli,Cucumis,melo
+Boron Deficiency,Boron Deficiency,Cucumis,sativus
+Boron Deficiency,Boron Deficiency,Cucumis,melo
+Botrytis Blight,Botrytis cinerea,Cucumis,sativus
+Calcium Deficiency in Cucurbits,Calcium Deficiency,Cucumis,sativus
+Calcium Deficiency in Cucurbits,Calcium Deficiency,Cucumis,melo
+Common Red Spider Mite,Tetranychus urticae,Cucumis,sativus
+Cucumber Beetle,Diabrotica spp.,Cucumis,sativus
+Cucumber Green Mottle Virus,CGMMV,Cucumis,sativus
+Cucumber Mosaic Virus,CMV,Cucumis,sativus
+Cucumber Scab,Cladosporium cucumerinum,Cucumis,sativus
+Downy Mildew,Peronosporales,Cucumis,sativus
+Downy Mildew on Cucurbits,Pseudoperonospora cubensis,Cucumis,sativus
+Downy Mildew on Cucurbits,Pseudoperonospora cubensis,Cucumis,melo
+Flea Beetle,Psylliodes,Cucumis,sativus
+Fusarium Wilt,Fusarium oxysporum,Cucumis,sativus
+Green Leafhopper,Empoasca decipiens,Cucumis,sativus
+Greenhouse Whitefly,Trialeurodes vaporariorum,Cucumis,sativus
+Gummy Stem Blight of Cucurbits,Stagonosporopsis cucurbitacearum,Cucumis,sativus
+Gummy Stem Blight of Cucurbits,Stagonosporopsis cucurbitacearum,Cucumis,melo
+Iron Deficiency,Iron Deficiency,Cucumis,sativus
+Leaf Blight of Cucurbits,Alternaria cucumerina,Cucumis,sativus
+Leaf Blight of Cucurbits,Alternaria cucumerina,Cucumis,melo
+Leaf Miner Flies,Agromyzidae spp.,Cucumis,sativus
+Magnesium Deficiency in Cucurbits,Magnesium Deficiency,Cucumis,sativus
+Magnesium Deficiency in Cucurbits,Magnesium Deficiency,Cucumis,melo
+Manganese Deficiency in Cucurbits,Manganese Deficiency,Cucumis,sativus
+Manganese Deficiency in Cucurbits,Manganese Deficiency,Cucumis,melo
+Melon Fruit Fly,Zeugodacus cucurbitae,Cucumis,sativus
+Melon Fruit Fly,Zeugodacus cucurbitae,Cucumis,melo
+Nematode,Nematoda,Cucumis,sativus
+Nitrogen Deficiency in Cucurbits,Nitrogen Deficiency,Cucumis,sativus
+Nitrogen Deficiency in Cucurbits,Nitrogen Deficiency,Cucumis,melo
+Pesticide Burn,Pesticide Burn,Cucumis,sativus
+Pesticide Burn,Pesticide Burn,Cucumis,melo
+Potassium Deficiency in Cucurbits,Potassium Deficiency,Cucumis,sativus
+Potassium Deficiency in Cucurbits,Potassium Deficiency,Cucumis,melo
+Powdery Mildew,Erysiphaceae,Cucumis,sativus
+Ring Spot Virus,PRSV,Cucumis,sativus
+Ring Spot Virus,PRSV,Cucumis,melo
+Root-Knot Nematode,Meloidogyne spp.,Cucumis,sativus
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Cucumis,sativus
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Cucumis,melo
+Sclerotium Rot,Athelia rolfsii,Cucumis,sativus
+Sclerotium Rot,Athelia rolfsii,Cucumis,melo
+Silverleaf Whitefly,Bemisia tabaci,Cucumis,sativus
+Silverleaf Whitefly,Bemisia tabaci,Cucumis,melo
+Slug,Class Gastropoda,Cucumis,sativus
+Thrips,Order Thysanoptera,Cucumis,sativus
+Variegated Grasshopper,Zonocerus variegatus,Cucumis,melo
+Verticillium Wilt,Verticillium spp.,Cucumis,sativus
+Verticillium Wilt,Verticillium spp.,Cucumis,melo
+Vole,Cricetidae,Cucumis,sativus
+Water Deficiency,Water Deficiency,Cucumis,sativus
+Water Deficiency,Water Deficiency,Cucumis,melo
+Watermelon mosaic virus,Watermelon mosaic virus,Cucumis,sativus
+Watermelon mosaic virus,Watermelon mosaic virus,Cucumis,melo
+Zinc Deficiency,Zinc Deficiency,Cucumis,sativus
+Zinc Deficiency,Zinc Deficiency,Cucumis,melo
+Angular Leaf Spot Disease,Pseudomonas syringae,Cucurbita,spp.
+Angular Leaf Spot Disease,Pseudomonas syringae,Cucurbita,pepo
+Anthracnose of Cucurbits,Glomerella lagenarium,Cucurbita,spp.
+Anthracnose of Cucurbits,Glomerella lagenarium,Cucurbita,pepo
+Aphid,Aphidoidea family,Cucurbita,spp.
+Aphid,Aphidoidea family,Cucurbita,pepo
+Bacterial Fruit Blotch,Acidovorax citrulli,Cucurbita,spp.
+Bacterial Fruit Blotch,Acidovorax citrulli,Cucurbita,pepo
+Boron Deficiency,Boron Deficiency,Cucurbita,spp.
+Boron Deficiency,Boron Deficiency,Cucurbita,pepo
+Botrytis Blight,Botrytis cinerea,Cucurbita,spp.
+Botrytis Blight,Botrytis cinerea,Cucurbita,pepo
+Calcium Deficiency in Cucurbits,Calcium Deficiency,Cucurbita,spp.
+Calcium Deficiency in Cucurbits,Calcium Deficiency,Cucurbita,pepo
+Common Red Spider Mite,Tetranychus urticae,Cucurbita,spp.
+Common Red Spider Mite,Tetranychus urticae,Cucurbita,pepo
+Cucumber Beetle,Diabrotica spp.,Cucurbita,spp.
+Cucumber Beetle,Diabrotica spp.,Cucurbita,pepo
+Cucumber Green Mottle Virus,CGMMV,Cucurbita,spp.
+Cucumber Green Mottle Virus,CGMMV,Cucurbita,pepo
+Cucumber Mosaic Virus,CMV,Cucurbita,spp.
+Cucumber Mosaic Virus,CMV,Cucurbita,pepo
+Downy Mildew,Peronosporales,Cucurbita,spp.
+Downy Mildew,Peronosporales,Cucurbita,pepo
+Downy Mildew on Cucurbits,Pseudoperonospora cubensis,Cucurbita,spp.
+Downy Mildew on Cucurbits,Pseudoperonospora cubensis,Cucurbita,pepo
+Flea Beetle,Psylliodes,Cucurbita,spp.
+Flea Beetle,Psylliodes,Cucurbita,pepo
+Fusarium Wilt,Fusarium oxysporum,Cucurbita,spp.
+Fusarium Wilt,Fusarium oxysporum,Cucurbita,pepo
+Greenhouse Whitefly,Trialeurodes vaporariorum,Cucurbita,spp.
+Greenhouse Whitefly,Trialeurodes vaporariorum,Cucurbita,pepo
+Gummy Stem Blight of Cucurbits,Stagonosporopsis cucurbitacearum,Cucurbita,spp.
+Gummy Stem Blight of Cucurbits,Stagonosporopsis cucurbitacearum,Cucurbita,pepo
+Iron Deficiency,Iron Deficiency,Cucurbita,spp.
+Iron Deficiency,Iron Deficiency,Cucurbita,pepo
+Leaf Blight of Cucurbits,Alternaria cucumerina,Cucurbita,spp.
+Leaf Blight of Cucurbits,Alternaria cucumerina,Cucurbita,pepo
+Leaf Miner Flies,Agromyzidae spp.,Cucurbita,spp.
+Leaf Miner Flies,Agromyzidae spp.,Cucurbita,pepo
+Magnesium Deficiency in Cucurbits,Magnesium Deficiency,Cucurbita,spp.
+Magnesium Deficiency in Cucurbits,Magnesium Deficiency,Cucurbita,pepo
+Manganese Deficiency in Cucurbits,Manganese Deficiency,Cucurbita,spp.
+Manganese Deficiency in Cucurbits,Manganese Deficiency,Cucurbita,pepo
+Melon Fruit Fly,Zeugodacus cucurbitae,Cucurbita,spp.
+Nematode,Nematoda,Cucurbita,spp.
+Nematode,Nematoda,Cucurbita,pepo
+Nitrogen Deficiency in Cucurbits,Nitrogen Deficiency,Cucurbita,spp.
+Nitrogen Deficiency in Cucurbits,Nitrogen Deficiency,Cucurbita,pepo
+Pesticide Burn,Pesticide Burn,Cucurbita,spp.
+Pesticide Burn,Pesticide Burn,Cucurbita,pepo
+Potassium Deficiency in Cucurbits,Potassium Deficiency,Cucurbita,spp.
+Potassium Deficiency in Cucurbits,Potassium Deficiency,Cucurbita,pepo
+Powdery Mildew,Erysiphaceae,Cucurbita,spp.
+Powdery Mildew,Erysiphaceae,Cucurbita,pepo
+Ring Spot Virus,PRSV,Cucurbita,pepo
+Sclerotium Rot,Athelia rolfsii,Cucurbita,spp.
+Slug,Class Gastropoda,Cucurbita,spp.
+Slug,Class Gastropoda,Cucurbita,pepo
+Thrips,Order Thysanoptera,Cucurbita,spp.
+Thrips,Order Thysanoptera,Cucurbita,pepo
+Verticillium Wilt,Verticillium spp.,Cucurbita,spp.
+Verticillium Wilt,Verticillium spp.,Cucurbita,pepo
+Vole,Cricetidae,Cucurbita,spp.
+Vole,Cricetidae,Cucurbita,pepo
+Water Deficiency,Water Deficiency,Cucurbita,spp.
+Water Deficiency,Water Deficiency,Cucurbita,pepo
+Watermelon mosaic virus,Watermelon mosaic virus,Cucurbita,spp.
+Zinc Deficiency,Zinc Deficiency,Cucurbita,spp.
+Zinc Deficiency,Zinc Deficiency,Cucurbita,pepo
+Aphid,Aphidoidea family,Daucus,carota ssp. sativa
+Boron Deficiency,Boron Deficiency,Daucus,carota ssp. sativa
+Botrytis Blight,Botrytis cinerea,Daucus,carota ssp. sativa
+Carrot Fly,Chamaepsila rosae,Daucus,carota ssp. sativa
+Common Red Spider Mite,Tetranychus urticae,Daucus,carota ssp. sativa
+Green Citrus Aphid,Aphis spiraecola,Daucus,carota ssp. sativa
+Iron Deficiency,Iron Deficiency,Daucus,carota ssp. sativa
+Magnesium Deficiency,Magnesium Deficiency,Daucus,carota ssp. sativa
+Manganese Deficiency,Manganese Deficiency,Daucus,carota ssp. sativa
+Nematode,Nematoda,Daucus,carota ssp. sativa
+Nitrogen Deficiency,Nitrogen Deficiency,Daucus,carota ssp. sativa
+Pesticide Burn,Pesticide Burn,Daucus,carota ssp. sativa
+Phosphorus Deficiency,Phosphorus Deficiency,Daucus,carota ssp. sativa
+Powdery Mildew,Erysiphaceae,Daucus,carota ssp. sativa
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Daucus,carota ssp. sativa
+Sclerotium Rot,Athelia rolfsii,Daucus,carota ssp. sativa
+Slug,Class Gastropoda,Daucus,carota ssp. sativa
+Thrips,Order Thysanoptera,Daucus,carota ssp. sativa
+Verticillium Wilt,Verticillium spp.,Daucus,carota ssp. sativa
+Vole,Cricetidae,Daucus,carota ssp. sativa
+Water Deficiency,Water Deficiency,Daucus,carota ssp. sativa
+Zinc Deficiency,Zinc Deficiency,Daucus,carota ssp. sativa
+Angular Leaf Spot of Strawberry,Xanthomonas fragariae,Fragaria,spp.
+Aphid,Aphidoidea family,Fragaria,spp.
+Boron Deficiency,Boron Deficiency,Fragaria,spp.
+Botrytis Blight,Botrytis cinerea,Fragaria,spp.
+Common Leaf Spot,Mycosphaerella fragariae,Fragaria,spp.
+Common Red Spider Mite,Tetranychus urticae,Fragaria,spp.
+Crown Rot,Phytophthora cactorum,Fragaria,spp.
+Iron Deficiency,Iron Deficiency,Fragaria,spp.
+Magnesium Deficiency,Magnesium Deficiency,Fragaria,spp.
+Manganese Deficiency,Manganese Deficiency,Fragaria,spp.
+Nematode,Nematoda,Fragaria,spp.
+Nitrogen Deficiency,Nitrogen Deficiency,Fragaria,spp.
+Pesticide Burn,Pesticide Burn,Fragaria,spp.
+Phosphorus Deficiency,Phosphorus Deficiency,Fragaria,spp.
+Powdery Mildew of Strawberry,Podosphaera aphanis,Fragaria,spp.
+Slug,Class Gastropoda,Fragaria,spp.
+Strawberry Blossom Weevil,Anthonomus rubi,Fragaria,spp.
+Strawberry Whitefly,Trialeurodes packardi,Fragaria,spp.
+Thrips,Order Thysanoptera,Fragaria,spp.
+Verticillium Wilt,Verticillium spp.,Fragaria,spp.
+Vole,Cricetidae,Fragaria,spp.
+Water Deficiency,Water Deficiency,Fragaria,spp.
+Zinc Deficiency,Zinc Deficiency,Fragaria,spp.
+Anthracnose of Soybean,Colletotrichum truncatum,Glycine,max
+Aphid,Aphidoidea family,Glycine,max
+Ascochyta Blight,Ascochyta rabiei,Glycine,max
+Bacterial Pustule,Xanthomonas axonopodis,Glycine,max
+Bean Leaf Beetle,Cerotoma trifurcata,Glycine,max
+Bean Leaf Webber,Hedylepta indicata,Glycine,max
+Bean Shoot Borer,Epinotia aporema,Glycine,max
+Bean Yellow Mosaic Virus,BYMV,Glycine,max
+Boron Deficiency,Boron Deficiency,Glycine,max
+Brown Spot of Soybean,Septoria glycines,Glycine,max
+Cabbage Moth,Mamestra brassicae,Glycine,max
+Calcium Deficiency,Calcium Deficiency,Glycine,max
+Castor Semilooper,Ophiusa melicerta,Glycine,max
+Cercospora Leaf Spot of Gram,Cercospora canescens,Glycine,max
+Charcoal Rot of Soybean,Macrophomina phaseolina,Glycine,max
+Common Red Spider Mite,Tetranychus urticae,Glycine,max
+Cottony Cushion Scale,Icerya purchasi,Glycine,max
+Cucumber Beetle,Diabrotica spp.,Glycine,max
+Cyst Nematode,Heterodera glycines,Glycine,max
+Fall Armyworm,Spodoptera frugiperda,Glycine,max
+Fertilizer or Pesticide Burn,Fertilizer Burn,Glycine,max
+Frogeye Leaf Spot,Cercospora sojina,Glycine,max
+Helicoverpa on Soybean,Helicoverpa armigera,Glycine,max
+Iron Deficiency,Iron Deficiency,Glycine,max
+Leaf Miner Flies,Agromyzidae spp.,Glycine,max
+Magnesium Deficiency,Magnesium Deficiency,Glycine,max
+Manganese Deficiency,Manganese Deficiency,Glycine,max
+Nitrogen Deficiency,Nitrogen Deficiency,Glycine,max
+Northern Stem Canker,Diaporthe phaseolorum var. caulivora,Glycine,max
+Pea Pod Borer,Etiella zinckenella,Glycine,max
+Pesticide Burn,Pesticide Burn,Glycine,max
+Phosphorus Deficiency,Phosphorus Deficiency,Glycine,max
+Phyllosticta Leaf Spot,Phyllosticta arachidis-hypogaea,Glycine,max
+Potassium Deficiency,Potassium Deficiency,Glycine,max
+Powdery Mildew of Soybean,Erysiphe diffusa,Glycine,max
+Purple Seed Stain of Soybean,Cercospora kikuchii,Glycine,max
+Rhizoctonia Aerial Blight,Rhizoctonia solani,Glycine,max
+Root-Knot Nematode in Soybean,Meloidogyne ethiopica,Glycine,max
+Rust of Soybean,Phakopsora pachyrhizi,Glycine,max
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Glycine,max
+Sclerotium Rot,Athelia rolfsii,Glycine,max
+Silverleaf Whitefly,Bemisia tabaci,Glycine,max
+Slug,Class Gastropoda,Glycine,max
+Southern Armyworm,Spodoptera eridania,Glycine,max
+Soybean Looper,Pseudoplusia includens,Glycine,max
+Soybean Mosaic Virus,SMV,Glycine,max
+Soybean Stalk Weevil,Sternechus subsignatus,Glycine,max
+Stem and Root Rot of Soybean,Phytophthora sojae,Glycine,max
+Stink Bugs on Soybean,Acrosternum hilare,Glycine,max
+Sudden Death Syndrome,Fusarium virguliforme,Glycine,max
+Target Spot of Soybean,Corynespora cassiicola,Glycine,max
+Tobacco Caterpillar,Spodoptera litura,Glycine,max
+Variegated Grasshopper,Zonocerus variegatus,Glycine,max
+Velvetbean Caterpillar,Anticarsia gemmatalis,Glycine,max
+Water Deficiency,Water Deficiency,Glycine,max
+Zinc Deficiency,Zinc Deficiency,Glycine,max
+Alternaria Leaf Spot of Cotton,Alternaria macrospora,Gossypium,spp.
+Anthracnose of Cotton,Glomerella gossypii,Gossypium,spp.
+Aphid,Aphidoidea family,Gossypium,spp.
+Bacterial Blight of Cotton,Xanthomonas citri subsp. malvacearum,Gossypium,spp.
+Black Cutworm,Agrotis ipsilon,Gossypium,spp.
+Boll Weevil,Anthonomus grandis,Gossypium,spp.
+Boron Deficiency,Boron Deficiency,Gossypium,spp.
+Cercospora Leaf Spot of Cotton,Mycosphaerella gossypina,Gossypium,spp.
+Common Red Spider Mite,Tetranychus urticae,Gossypium,spp.
+Corn Earworm,Helicoverpa zea,Gossypium,spp.
+Cotton Bollworm,Helicoverpa armigera,Gossypium,spp.
+Cotton Leaf Hopper,Amrasca devastans,Gossypium,spp.
+Fall Armyworm,Spodoptera frugiperda,Gossypium,spp.
+Fertilizer or Pesticide Burn,Fertilizer Burn,Gossypium,spp.
+Fusarium Wilt,Fusarium oxysporum,Gossypium,spp.
+Grey Mildew of Cotton,Mycosphaerella areola,Gossypium,spp.
+Iron Deficiency,Iron Deficiency,Gossypium,spp.
+Leaf Miner Flies,Agromyzidae spp.,Gossypium,spp.
+Magnesium Deficiency,Magnesium Deficiency,Gossypium,spp.
+Manganese Deficiency,Manganese Deficiency,Gossypium,spp.
+Mealybug,Pseudococcidae,Gossypium,spp.
+Nitrogen Deficiency,Nitrogen Deficiency,Gossypium,spp.
+Pesticide Burn,Pesticide Burn,Gossypium,spp.
+Phosphorus Deficiency,Phosphorus Deficiency,Gossypium,spp.
+Pink Bollworm,Pectinophora gossypiella,Gossypium,spp.
+Potassium Deficiency,Potassium Deficiency,Gossypium,spp.
+Powdery Mildew,Erysiphaceae,Gossypium,spp.
+Root Rot of Cotton,Macrophomina phaseolina,Gossypium,spp.
+Root-Knot Nematode,Meloidogyne spp.,Gossypium,spp.
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Gossypium,spp.
+Silverleaf Whitefly,Bemisia tabaci,Gossypium,spp.
+Soreshin,Rhizoctonia solani,Gossypium,spp.
+Stink Bug on Cotton,Euschistus servus,Gossypium,spp.
+Thrips,Order Thysanoptera,Gossypium,spp.
+Tobacco Caterpillar,Spodoptera litura,Gossypium,spp.
+Tobacco Streak Virus,Tobacco Streak Virus,Gossypium,spp.
+Velvetbean Caterpillar,Anticarsia gemmatalis,Gossypium,spp.
+Water Deficiency,Water Deficiency,Gossypium,spp.
+Western Flower Thrips,Frankliniella occidentalis,Gossypium,spp.
+Zinc Deficiency,Zinc Deficiency,Gossypium,spp.
+Aphid,Aphidoidea family,Hordeum,vulgare
+Boron Deficiency in Cereals,Boron Deficiency,Hordeum,vulgare
+Brown Rust of Barley,Puccinia hordei,Hordeum,vulgare
+Calcium Deficiency in Wheat,Calcium Deficiency,Hordeum,vulgare
+Cereal Leaf Beetle,Oulema melanopus,Hordeum,vulgare
+Common Bunt of Wheat,Tilletia caries,Hordeum,vulgare
+Crown Rust of Grasses,Puccinia coronata,Hordeum,vulgare
+Eyespot,Oculimacula yallundae,Hordeum,vulgare
+Fusarium Head Blight,Fusarium graminearum,Hordeum,vulgare
+Leaf and Glume Blotch of Wheat,Parastagonospora nodorum,Hordeum,vulgare
+Leaf Stripe of Barley,Pyrenophora graminea,Hordeum,vulgare
+Magnesium Deficiency,Magnesium Deficiency,Hordeum,vulgare
+Manganese Deficiency,Manganese Deficiency,Hordeum,vulgare
+Net Blotch,Pyrenophora teres,Hordeum,vulgare
+Pesticide Burn,Pesticide Burn,Hordeum,vulgare
+Physiological Leaf Spot,PLS,Hordeum,vulgare
+Potassium Deficiency in Cereals,Potassium Deficiency,Hordeum,vulgare
+Powdery Mildew of Cereals,Blumeria graminis,Hordeum,vulgare
+Ramularia Leaf Spot,Ramularia collo-cygni,Hordeum,vulgare
+Rhynchosporium,Rhynchosporium secalis,Hordeum,vulgare
+Sulfur Deficiency in Wheat,Sulfur Deficiency,Hordeum,vulgare
+Violet Stem Borer,Sesamia inferens,Hordeum,vulgare
+Water Deficiency,Water Deficiency,Hordeum,vulgare
+Zinc Deficiency in Wheat,Zinc Deficiency,Hordeum,vulgare
+African Mole Cricket,Gryllotalpa africana,Lactuca,sativa var. capitata
+Aphid,Aphidoidea family,Lactuca,sativa var. capitata
+Boron Deficiency,Boron Deficiency,Lactuca,sativa var. capitata
+Botrytis Blight in Lettuce,Botrytis cinerea,Lactuca,sativa var. capitata
+Bottom Rot,Thanatephorus cucumeris,Lactuca,sativa var. capitata
+Bright Line Brown Eye,Lacanobia oleracea,Lactuca,sativa var. capitata
+Cabbage Moth,Mamestra brassicae,Lactuca,sativa var. capitata
+Calcium Deficiency,Calcium Deficiency,Lactuca,sativa var. capitata
+Common Red Spider Mite,Tetranychus urticae,Lactuca,sativa var. capitata
+Downy Mildew,Peronosporales,Lactuca,sativa var. capitata
+Fall Armyworm,Spodoptera frugiperda,Lactuca,sativa var. capitata
+Flea Beetle,Psylliodes,Lactuca,sativa var. capitata
+Green Citrus Aphid,Aphis spiraecola,Lactuca,sativa var. capitata
+Iron Deficiency,Iron Deficiency,Lactuca,sativa var. capitata
+Leaf Miner Flies,Agromyzidae spp.,Lactuca,sativa var. capitata
+Lettuce Big-Vein Disease,Olpidium brassicae,Lactuca,sativa var. capitata
+Magnesium Deficiency,Magnesium Deficiency,Lactuca,sativa var. capitata
+Manganese Deficiency,Manganese Deficiency,Lactuca,sativa var. capitata
+Nematode,Nematoda,Lactuca,sativa var. capitata
+Nitrogen Deficiency,Nitrogen Deficiency,Lactuca,sativa var. capitata
+Onion Maggots,Delia platura,Lactuca,sativa var. capitata
+Pesticide Burn,Pesticide Burn,Lactuca,sativa var. capitata
+Phosphorus Deficiency,Phosphorus Deficiency,Lactuca,sativa var. capitata
+Potassium Deficiency,Potassium Deficiency,Lactuca,sativa var. capitata
+Powdery Mildew,Erysiphaceae,Lactuca,sativa var. capitata
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Lactuca,sativa var. capitata
+Silverleaf Whitefly,Bemisia tabaci,Lactuca,sativa var. capitata
+Slug,Class Gastropoda,Lactuca,sativa var. capitata
+Thrips,Order Thysanoptera,Lactuca,sativa var. capitata
+Variegated Grasshopper,Zonocerus variegatus,Lactuca,sativa var. capitata
+Verticillium Wilt,Verticillium spp.,Lactuca,sativa var. capitata
+Vole,Cricetidae,Lactuca,sativa var. capitata
+Water Deficiency,Water Deficiency,Lactuca,sativa var. capitata
+Zinc Deficiency,Zinc Deficiency,Lactuca,sativa var. capitata
+Anthracnose of Lentil,Colletotrichum truncatum,Lens,culinaris
+Aphid,Aphidoidea family,Lens,culinaris
+Ascochyta Blight of Lentil,Didymella fabae,Lens,culinaris
+Bean Bollworm,Helicoverpa armigera,Lens,culinaris
+Boron Deficiency,Boron Deficiency,Lens,culinaris
+Botrytis Blight,Botrytis cinerea,Lens,culinaris
+Fusarium Wilt,Fusarium oxysporum,Lens,culinaris
+Lentil Rust,Uromyces viciae-fabae,Lens,culinaris
+Magnesium Deficiency,Magnesium Deficiency,Lens,culinaris
+Manganese Deficiency,Manganese Deficiency,Lens,culinaris
+Mealybug,Pseudococcidae,Lens,culinaris
+Pea Pod Borer,Etiella zinckenella,Lens,culinaris
+Pesticide Burn,Pesticide Burn,Lens,culinaris
+Phosphorus Deficiency,Phosphorus Deficiency,Lens,culinaris
+Powdery Mildew,Erysiphaceae,Lens,culinaris
+Root Rot of Lentil,Rhizoctonia solani,Lens,culinaris
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Lens,culinaris
+Sclerotium Rot,Athelia rolfsii,Lens,culinaris
+Zinc Deficiency,Zinc Deficiency,Lens,culinaris
+African Mole Cricket,Gryllotalpa africana,Lopmoea,batatas
+Aphid,Aphidoidea family,Lopmoea,batatas
+Boron Deficiency,Boron Deficiency,Lopmoea,batatas
+Calcium Deficiency in Potato,Calcium Deficiency,Lopmoea,batatas
+Iron Deficiency in Potato,Iron Deficiency,Lopmoea,batatas
+Magnesium Deficiency in Potato,Magnesium Deficiency,Lopmoea,batatas
+Manganese Deficiency,Manganese Deficiency,Lopmoea,batatas
+Nitrogen Deficiency in Potato,Nitrogen Deficiency,Lopmoea,batatas
+Pesticide Burn,Pesticide Burn,Lopmoea,batatas
+Phosphorus Deficiency in Potato,Phosphorus Deficiency,Lopmoea,batatas
+Potassium Deficiency in Potato,Potassium Deficiency,Lopmoea,batatas
+Sclerotium Rot,Athelia rolfsii,Lopmoea,batatas
+Slug,Class Gastropoda,Lopmoea,batatas
+Thrips,Order Thysanoptera,Lopmoea,batatas
+Variegated Grasshopper,Zonocerus variegatus,Lopmoea,batatas
+Water Deficiency,Water Deficiency,Lopmoea,batatas
+Zinc Deficiency,Zinc Deficiency,Lopmoea,batatas
+Abiotic Sunburn,Abiotic Sunburn,Lycopersicon,esculentum
+African Mole Cricket,Gryllotalpa africana,Lycopersicon,esculentum
+Aphid,Aphidoidea family,Lycopersicon,esculentum
+Bacterial Canker of Tomato,Clavibacter michiganensis subs. michiganensis,Lycopersicon,esculentum
+Bacterial Speck of Tomato,Pseudomonas syringae pv. tomato,Lycopersicon,esculentum
+Bacterial Spot,Xanthomonas spp.,Lycopersicon,esculentum
+Bacterial Wilt,Ralstonia solanacearum,Lycopersicon,esculentum
+Black Cutworm,Agrotis ipsilon,Lycopersicon,esculentum
+Blossom End Rot,blossom end rot,Lycopersicon,esculentum
+Boron Deficiency,Boron Deficiency,Lycopersicon,esculentum
+Botrytis Blight,Botrytis cinerea,Lycopersicon,esculentum
+Bright Line Brown Eye,Lacanobia oleracea,Lycopersicon,esculentum
+Cabbage Moth,Mamestra brassicae,Lycopersicon,esculentum
+Calcium Deficiency in Tomato,Calcium Deficiency,Lycopersicon,esculentum
+Castor Semilooper,Ophiusa melicerta,Lycopersicon,esculentum
+Common Red Spider Mite,Tetranychus urticae,Lycopersicon,esculentum
+Didymella Stem Rot of Tomato,Didymella lycopersici,Lycopersicon,esculentum
+Early Blight of Tomato,Alternaria solani,Lycopersicon,esculentum
+Flea Beetle,Psylliodes,Lycopersicon,esculentum
+Fusarium Wilt,Fusarium oxysporum,Lycopersicon,esculentum
+Green Leafhopper,Empoasca decipiens,Lycopersicon,esculentum
+Greenhouse Whitefly,Trialeurodes vaporariorum,Lycopersicon,esculentum
+Iron Deficiency in Tomato,Iron Deficiency,Lycopersicon,esculentum
+Leaf Miner Flies,Agromyzidae spp.,Lycopersicon,esculentum
+Leaf Mold of Tomato,Mycovellosiella fulva,Lycopersicon,esculentum
+Magnesium Deficiency in Tomato,Magnesium Deficiency,Lycopersicon,esculentum
+Manganese Deficiency,Manganese Deficiency,Lycopersicon,esculentum
+Mealybug,Pseudococcidae,Lycopersicon,esculentum
+Mediterranean Fruit Fly,Ceratitis capitata,Lycopersicon,esculentum
+Melon Fruit Fly,Zeugodacus cucurbitae,Lycopersicon,esculentum
+Nematode,Nematoda,Lycopersicon,esculentum
+Nitrogen Deficiency in Tomato,Nitrogen Deficiency,Lycopersicon,esculentum
+Pesticide Burn,Pesticide Burn,Lycopersicon,esculentum
+Phosphorus Deficiency in Tomato,Phosphorus Deficiency,Lycopersicon,esculentum
+Potassium Deficiency in Tomato,Potassium Deficiency,Lycopersicon,esculentum
+Powdery Mildew,Erysiphaceae,Lycopersicon,esculentum
+Root-Knot Nematode,Meloidogyne spp.,Lycopersicon,esculentum
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Lycopersicon,esculentum
+Sclerotium Rot,Athelia rolfsii,Lycopersicon,esculentum
+Septoria Leaf Spot,Septoria lycopersici,Lycopersicon,esculentum
+Silverleaf Whitefly,Bemisia tabaci,Lycopersicon,esculentum
+Thrips,Order Thysanoptera,Lycopersicon,esculentum
+Tomato Fruit Borer,Helicoverpa armigera,Lycopersicon,esculentum
+Tomato Mosaic Virus,ToMV,Lycopersicon,esculentum
+Tomato Spotted Wilt Virus,TSWV,Lycopersicon,esculentum
+Tomato Yellow Leaf Curl Virus,TYLCV,Lycopersicon,esculentum
+Tuta Absoluta,Tuta Absoluta,Lycopersicon,esculentum
+Variegated Grasshopper,Zonocerus variegatus,Lycopersicon,esculentum
+Verticillium Wilt,Verticillium spp.,Lycopersicon,esculentum
+Vole,Cricetidae,Lycopersicon,esculentum
+Water Deficiency,Water Deficiency,Lycopersicon,esculentum
+Zinc Deficiency,Zinc Deficiency,Lycopersicon,esculentum
+Tomato Late Blight,Phytophthora infestans,Lycopersicon esculentum,esculentum
+Anthracnose of Apple,Neofabraea malicorticis,Malus,sylvestris
+Aphid,Aphidoidea family,Malus,sylvestris
+Apple Leaf Miner,Lyonetia clerkella,Malus,sylvestris
+Apple Mosaic Virus,APMV,Malus,sylvestris
+Apple Scab,Venturia inaequalis,Malus,sylvestris
+Bacterial Canker,Pseudomonas syringae pv. syringae,Malus,sylvestris
+Bitter Rot on Apple,Glomerella cingulata,Malus,sylvestris
+Boron Deficiency,Boron Deficiency,Malus,sylvestris
+Botryosphaeria Dieback,Botryosphaeriaceae,Malus,sylvestris
+Botrytis Blight,Botrytis cinerea,Malus,sylvestris
+Brown Rot,Monilinia laxa,Malus,sylvestris
+Brown Rot of Fruits,Monilinia fructigena,Malus,sylvestris
+Calcium Deficiency,Calcium Deficiency,Malus,sylvestris
+Codling Moth,Cydia pomonella,Malus,sylvestris
+Curculio Weevil,Otiorhynchus cribricollis,Malus,sylvestris
+Dead Arm,Eutypa lata,Malus,sylvestris
+Ermine Moth,Yponomeutidae,Malus,sylvestris
+European Red Mite,Panonychus ulmi,Malus,sylvestris
+Fire Blight,Erwinia amylovora,Malus,sylvestris
+Fruit Tree Bark Beetle,Scolytus mali,Malus,sylvestris
+Fruit Tree Canker,Neonectria ditissima,Malus,sylvestris
+Fruit Tree Leafroller,Archips argyrospila,Malus,sylvestris
+Gall Mite,Eriophyidae,Malus,sylvestris
+Grape Tortrix Moth,Argyrotaenia ljungiana,Malus,sylvestris
+Green Citrus Aphid,Aphis spiraecola,Malus,sylvestris
+Iron Deficiency,Iron Deficiency,Malus,sylvestris
+Magnesium Deficiency,Magnesium Deficiency,Malus,sylvestris
+Manganese Deficiency,Manganese Deficiency,Malus,sylvestris
+Mediterranean Fruit Fly,Ceratitis capitata,Malus,sylvestris
+Nematode,Nematoda,Malus,sylvestris
+Oleander Scale,Aspidiotus nerii,Malus,sylvestris
+Olive Scale,Parlatoria oleae,Malus,sylvestris
+Oriental Fruit Moth,Grapholita molesta,Malus,sylvestris
+Pesticide Burn,Pesticide Burn,Malus,sylvestris
+Phosphorus Deficiency,Phosphorus Deficiency,Malus,sylvestris
+Phytophthora Root Rot,Phytophthora cactorum,Malus,sylvestris
+Potassium Deficiency,Potassium Deficiency,Malus,sylvestris
+Powdery Mildew,Erysiphaceae,Malus,sylvestris
+Silver Leaf,Chondrostereum purpureum,Malus,sylvestris
+Thrips,Order Thysanoptera,Malus,sylvestris
+Vole,Cricetidae,Malus,sylvestris
+Water Deficiency,Water Deficiency,Malus,sylvestris
+Western Plant Bug,Lygus hesperus,Malus,sylvestris
+Winter Moth,Operophtera brumata,Malus,sylvestris
+Woolly Aphid,Eriosoma lanigerum,Malus,sylvestris
+Zinc Deficiency,Zinc Deficiency,Malus,sylvestris
+African Mole Cricket,Gryllotalpa africana,Mangifera,indica
+Algal Leaf Spot,Cephaleuros virescens,Mangifera,indica
+Anthracnose of Papaya and Mango,Colletotrichum gloeosporioides,Mangifera,indica
+Aphid,Aphidoidea family,Mangifera,indica
+Bacterial Black Spot of Mango,Xanthomonas axonopodis pv. mangiferaeindicae,Mangifera,indica
+Bacterial Canker of Mango,Xanthomonas citri pv. mangiferaeindicae,Mangifera,indica
+Banana Scale Insect,Aspidiotus destructor,Mangifera,indica
+Black Citrus Aphid,Toxoptera aurantii,Mangifera,indica
+Boron Deficiency,Boron Deficiency,Mangifera,indica
+Botrytis Blight,Botrytis cinerea,Mangifera,indica
+Cottony Cushion Scale,Icerya purchasi,Mangifera,indica
+Hairy Caterpillars,Euproctis fraterna,Mangifera,indica
+Iron Deficiency,Iron Deficiency,Mangifera,indica
+Magnesium Deficiency,Magnesium Deficiency,Mangifera,indica
+Manganese Deficiency,Manganese Deficiency,Mangifera,indica
+Mango Blister Midge,Procontarinia mangiferae,Mangifera,indica
+Mango Dieback Disease,Botryosphaeria rhodina,Mangifera,indica
+Mango Fruit Borer,Citripestis eutraphera,Mangifera,indica
+Mango Fruit Fly,Ceratitis cosyra,Mangifera,indica
+Mango Gall Midge,Procontarinia pustulata,Mangifera,indica
+Mango Hoppers,Idioscopus spp.,Mangifera,indica
+Mango Nut Weevil,Sternochetus mangiferae,Mangifera,indica
+Mango Seed Borer,Deanolis albizonalis,Mangifera,indica
+Mango Shoot Borer,Chlumetia transversa,Mangifera,indica
+Mango Shoot Psyllid,Apsylla cistellata,Mangifera,indica
+Mango Spider Mite,Oligonychus mangiferus,Mangifera,indica
+Mealybug,Drosicha mangiferae,Mangifera,indica
+Mediterranean Fruit Fly,Ceratitis capitata,Mangifera,indica
+Melon Fruit Fly,Zeugodacus cucurbitae,Mangifera,indica
+Nitrogen Deficiency,Nitrogen Deficiency,Mangifera,indica
+Oleander Scale,Aspidiotus nerii,Mangifera,indica
+Pesticide Burn,Pesticide Burn,Mangifera,indica
+Phoma Blight,Peyronellaea glomerata,Mangifera,indica
+Phosphorus Deficiency,Phosphorus Deficiency,Mangifera,indica
+Powdery Mildew of Mango,Oidium mangiferae,Mangifera,indica
+Sooty Mold,"Capnodium, Fumago, Scorias spp",Mangifera,indica
+Thrips in Mango,Scirtothrips spp.,Mangifera,indica
+Vole,Cricetidae,Mangifera,indica
+Water Deficiency,Water Deficiency,Mangifera,indica
+Zinc Deficiency,Zinc Deficiency,Mangifera,indica
+African Mole Cricket,Gryllotalpa africana,Manihot,esculenta
+Aphid,Aphidoidea family,Manihot,esculenta
+Boron Deficiency,Boron Deficiency,Manihot,esculenta
+Brown leaf spot,Mycosphaerella henningsii,Manihot,esculenta
+Bud Necrosis,Unknown Pathogen,Manihot,esculenta
+Cassava Bacterial Blight,Xanthomonas axonopodis pv. manihotis,Manihot,esculenta
+Cassava Brown Streak Disease,CBSV,Manihot,esculenta
+Cassava Green Spider Mite,Mononychellus tanajoa,Manihot,esculenta
+Cassava Mosaic Disease,ACMV,Manihot,esculenta
+Cassava Phytoplasma Disease,Phytoplasma spp.,Manihot,esculenta
+Cassava Root Mealybug,Stictococcus vayssierei,Manihot,esculenta
+Cassava scale,Aonidomytilus albus,Manihot,esculenta
+Magnesium Deficiency,Magnesium Deficiency,Manihot,esculenta
+Manganese Deficiency,Manganese Deficiency,Manihot,esculenta
+Mealybug,Pseudococcidae,Manihot,esculenta
+Pesticide Burn,Pesticide Burn,Manihot,esculenta
+Variegated Grasshopper,Zonocerus variegatus,Manihot,esculenta
+Water Deficiency,Water Deficiency,Manihot,esculenta
+White Leaf Spot,Phaeoramularia manihotis,Manihot,esculenta
+Zinc Deficiency,Zinc Deficiency,Manihot,esculenta
+African Mole Cricket,Gryllotalpa africana,Musa,paradisiaca
+Anthracnose of Banana,Colletotrichum musae,Musa,paradisiaca
+Aphid,Aphidoidea family,Musa,paradisiaca
+Bacterial Soft Rot of Banana,Pectobacterium carotovorum,Musa,paradisiaca
+Banana Bract Mosaic Virus,BBrMV,Musa,paradisiaca
+Banana Fruit-Scarring Beetle,Colaspis hypochlora,Musa,paradisiaca
+Banana Lace Wing Bug,Stephanitis typica,Musa,paradisiaca
+Banana Moth,Opogona sacchari,Musa,paradisiaca
+Banana Rust Thrips,Chaetanaphothrips signipennis,Musa,paradisiaca
+Banana Scab Moth,Nacoleia octasema,Musa,paradisiaca
+Banana Scale Insect,Aspidiotus destructor,Musa,paradisiaca
+Banana Streak Virus,Banana Streak Virus,Musa,paradisiaca
+Banana Xanthomonas Wilt,Xanthomonas musacearum,Musa,paradisiaca
+Black Leaf Spot of Banana,Deightoniella torulosa,Musa,paradisiaca
+Black Sigatoka,Mycosphaerella fijiensis,Musa,paradisiaca
+Boron Deficiency in Banana,Boron Deficiency,Musa,paradisiaca
+Bunchy Top Virus,Bunchy Top Virus,Musa,paradisiaca
+Calcium Deficiency,Calcium Deficiency,Musa,paradisiaca
+Castor Hairy Caterpillar,Pericallia ricini,Musa,paradisiaca
+Cigar End Rot,Trachysphaera fructigena,Musa,paradisiaca
+Cucumber Mosaic Virus on Banana,CMV,Musa,paradisiaca
+Cut Worm on Banana,Spodoptera litura,Musa,paradisiaca
+Downy Mildew,Peronosporales,Musa,paradisiaca
+Freckle of Banana,Phyllosticta maculata,Musa,paradisiaca
+Leaf Blotch of Banana,Cordana musae,Musa,paradisiaca
+Magnesium Deficiency,Magnesium Deficiency,Musa,paradisiaca
+Manganese Deficiency,Manganese Deficiency,Musa,paradisiaca
+Mealybug,Pseudococcidae,Musa,paradisiaca
+Moko Disease,Ralstonia solanacearum,Musa,paradisiaca
+Nematode,Nematoda,Musa,paradisiaca
+Nitrogen Deficiency,Nitrogen Deficiency,Musa,paradisiaca
+Oriental Fruit Fly,Bactrocera dorsalis,Musa,paradisiaca
+Pesticide Burn,Pesticide Burn,Musa,paradisiaca
+Phosphorus Deficiency,Phosphorus Deficiency,Musa,paradisiaca
+Potassium Deficiency,Potassium Deficiency,Musa,paradisiaca
+Powdery Mildew,Erysiphaceae,Musa,paradisiaca
+Pseudostem Weevil,Odoiporus longicollis,Musa,paradisiaca
+Red Palm Mite,Raoiella indica,Musa,paradisiaca
+Root Borer,Cosmopolites sordidus,Musa,paradisiaca
+Vascular Wilt of Banana,Fusarium oxysporum,Musa,paradisiaca
+Vole,Cricetidae,Musa,paradisiaca
+Water Deficiency,Water Deficiency,Musa,paradisiaca
+Yellow Sigatoka,Mycosphaerella musicola,Musa,paradisiaca
+Zinc Deficiency,Zinc Deficiency,Musa,paradisiaca
+Aphid,Aphidoidea family,Olea,europaea
+Black Scale,Saissetia oleae,Olea,europaea
+Boron Deficiency,Boron Deficiency,Olea,europaea
+Botryosphaeria Dieback,Botryosphaeriaceae,Olea,europaea
+Cercospora Leaf Spot of Olive,Pseudocercospora cladosporioides,Olea,europaea
+Crown Gall,Agrobacterium,Olea,europaea
+Curculio Weevil,Otiorhynchus cribricollis,Olea,europaea
+Dead Arm,Eutypa lata,Olea,europaea
+Grape Berry Moth,Lobesia botrana,Olea,europaea
+Jasmine Moth,Palpita unionalis,Olea,europaea
+Magnesium Deficiency,Magnesium Deficiency,Olea,europaea
+Manganese Deficiency,Manganese Deficiency,Olea,europaea
+Mediterranean Fruit Fly,Ceratitis capitata,Olea,europaea
+Nitrogen Deficiency,Nitrogen Deficiency,Olea,europaea
+Oleander Scale,Aspidiotus nerii,Olea,europaea
+Olive Bark Beetle,Phloeotribus scarabaeoides,Olea,europaea
+Olive Borer,Hylesinus toranio,Olea,europaea
+Olive Bud Mite,Oxycenus maxwelli,Olea,europaea
+Olive Fruit Fly,Bactrocera oleae,Olea,europaea
+Olive Knot,Pseudomonas savastanoi pv. savastanoi,Olea,europaea
+Olive Leaf Spot,Fusicladium oleagineum,Olea,europaea
+Olive Moth,Prays oleae,Olea,europaea
+Olive Psyllid,Euphyllura olivina,Olea,europaea
+Olive Scale,Parlatoria oleae,Olea,europaea
+Pesticide Burn,Pesticide Burn,Olea,europaea
+Phosphorus Deficiency,Phosphorus Deficiency,Olea,europaea
+Potassium Deficiency,Potassium Deficiency,Olea,europaea
+Rhizoctonia Root Rot of Olive,Rhizoctonia solani,Olea,europaea
+Thrips,Order Thysanoptera,Olea,europaea
+Verticillium Wilt,Verticillium spp.,Olea,europaea
+Water Deficiency,Water Deficiency,Olea,europaea
+Zinc Deficiency,Zinc Deficiency,Olea,europaea
+African Mole Cricket,Gryllotalpa africana,Oryza,sativa
+Alkalinity,Alkalinity,Oryza,sativa
+Aphid,Aphidoidea family,Oryza,sativa
+Asian Rice Gall Midge,Orseolia oryzae,Oryza,sativa
+Bacterial Blight of Rice,Xanthomonas oryzae pv. oryzae,Oryza,sativa
+Bacterial Leaf Streak,Xanthomonas oryzae pv. oryzicola,Oryza,sativa
+Bacterial Panicle Blight,Burkholderia spp.,Oryza,sativa
+Bakanae and Foot Rot,Gibberella fujikuroi,Oryza,sativa
+Biomphalaria Snails,Biomphalaria spp.,Oryza,sativa
+Black Cutworm,Agrotis ipsilon,Oryza,sativa
+Blast of Rice,Magnaporthe oryzae,Oryza,sativa
+Boron Deficiency in Rice,Boron Deficiency,Oryza,sativa
+Brown Planthopper,Nilaparvata lugens,Oryza,sativa
+Brown Spot of Rice,Cochliobolus miyabeanus,Oryza,sativa
+Fall Armyworm,Spodoptera frugiperda,Oryza,sativa
+False Smut,Villosiclava virens,Oryza,sativa
+Golden Apple Snail,Pomacea canaliculata,Oryza,sativa
+Green Paddy Leafhoppers,Nephotettix spp.,Oryza,sativa
+Greenhorned Caterpillars,Melanitis leda,Oryza,sativa
+Iron deficiency in Rice,Iron Deficiency,Oryza,sativa
+Leaf Scald of Rice,Monographella albescens,Oryza,sativa
+Magnesium Deficiency,Magnesium Deficiency,Oryza,sativa
+Manganese Deficiency,Manganese Deficiency,Oryza,sativa
+Narrow Brown Leaf Spot of Rice,Sphaerulina oryzina,Oryza,sativa
+Nitrogen Deficiency in Rice,Nitrogen Deficiency,Oryza,sativa
+Paddy Swarming Caterpillar,Spodoptera mauritia,Oryza,sativa
+Pesticide Burn,Pesticide Burn,Oryza,sativa
+Phoma Sorghina in Rice,Epicoccum sorghi,Oryza,sativa
+Phosphorus Deficiency in Rice,Phosphorus Deficiency,Oryza,sativa
+Potassium Deficiency in Rice,Potassium Deficiency,Oryza,sativa
+Red Stripe Disease,Gonatophragmium sp.,Oryza,sativa
+Rice Bug,Leptocorisa spp.,Oryza,sativa
+Rice Case Worm,Parapoynx stagnalis,Oryza,sativa
+Rice Ear-Cutting Caterpillar,Mythimna separata,Oryza,sativa
+Rice Grasshopper,Oxya intricata,Oryza,sativa
+Rice Hispa,Dicladispa armigera,Oryza,sativa
+Rice Leaf Mite,Oligonychus oryzae,Oryza,sativa
+Rice Leafroller,Cnaphalocrocis medinalis,Oryza,sativa
+Rice Mealybug,Brevennia rehi,Oryza,sativa
+Rice Panicle Mite,Steneotarsonemus spinki,Oryza,sativa
+Rice Sheath Blight,Rhizoctonia solani,Oryza,sativa
+Rice Skipper,Pelopidas mathias,Oryza,sativa
+Rice Stalk Stinkbug,Tibraca limbativentris,Oryza,sativa
+Rice Thrips,Stenchaetothrips biformis,Oryza,sativa
+Rice Yellow Mottle Virus,RYMV,Oryza,sativa
+Root-Knot Nematode,Meloidogyne spp.,Oryza,sativa
+Sheath Rot of Rice,Sarocladium oryzae,Oryza,sativa
+Stem Rot of RIce,Magnaporthe salvinii,Oryza,sativa
+Sulfur Deficiency,Sulfur Deficiency,Oryza,sativa
+Tungro,RTBV,Oryza,sativa
+Udbatta Disease of Rice,Balansia oryzae-sativae,Oryza,sativa
+Vole,Cricetidae,Oryza,sativa
+Water Deficiency,Water Deficiency,Oryza,sativa
+Whorl Maggot,Hydrellia philippina,Oryza,sativa
+Yellow Stem Borer,Scirpophaga incertulas,Oryza,sativa
+Zinc Deficency in Rice,Zinc Deficiency,Oryza,sativa
+African Mole Cricket,Gryllotalpa africana,Pennisetum,americanum
+Aphid,Aphidoidea family,Pennisetum,americanum
+Boron Deficiency in Cereals,Boron Deficiency,Pennisetum,americanum
+Calcium Deficiency in Wheat,Calcium Deficiency,Pennisetum,americanum
+Ergot,Claviceps fusiformis,Pennisetum,americanum
+Fusarium Head Blight,Fusarium graminearum,Pennisetum,americanum
+Head Miner,Heliocheilus albipunctella,Pennisetum,americanum
+Holcus Spot,Pseudomonas syringae pv. syringae,Pennisetum,americanum
+Magnesium Deficiency,Magnesium Deficiency,Pennisetum,americanum
+Manganese Deficiency,Manganese Deficiency,Pennisetum,americanum
+Millet Cercospora Leaf Spot,Cercospora penniseti,Pennisetum,americanum
+Millet Rust,Puccinia substriata,Pennisetum,americanum
+Pesticide Burn,Pesticide Burn,Pennisetum,americanum
+Phosphorus Deficiency,Phosphorus Deficiency,Pennisetum,americanum
+Potassium Deficiency in Cereals,Potassium Deficiency,Pennisetum,americanum
+Pyricularia Leaf Spot,Magnaporthe oryzae,Pennisetum,americanum
+Spotted Stemborer,Chilo partellus,Pennisetum,americanum
+Stem Borer,Coniesta ignefusalis,Pennisetum,americanum
+"Stink Bugs on Corn, Millet and Sorghum",Euschistus spp.,Pennisetum,americanum
+Violet Stem Borer,Sesamia inferens,Pennisetum,americanum
+Vole,Cricetidae,Pennisetum,americanum
+Water Deficiency,Water Deficiency,Pennisetum,americanum
+Zinc Deficiency,Zinc Deficiency,Pennisetum,americanum
+Zonate Leaf Spot,Gloeocercospora sorghi,Pennisetum,americanum
+Aphid,Aphidoidea family,Phaseolus,vulgaris
+Ashy Stem Blight of Bean,Macrophomina phaseolina,Phaseolus,vulgaris
+Bean Bollworm,Helicoverpa armigera,Phaseolus,vulgaris
+Bean Common Mosaic Virus,BCMV,Phaseolus,vulgaris
+Bean Golden Mosaic Virus,BGMV,Phaseolus,vulgaris
+Bean Leaf Beetle,Cerotoma trifurcata,Phaseolus,vulgaris
+Bean Leaf Webber,Hedylepta indicata,Phaseolus,vulgaris
+Bean Leafroller,Urbanus proteus,Phaseolus,vulgaris
+Bean Rust,Uromyces appendiculatus,Phaseolus,vulgaris
+Bean Shoot Borer,Epinotia aporema,Phaseolus,vulgaris
+Bean Yellow Mosaic Virus,BYMV,Phaseolus,vulgaris
+Black Cutworm,Agrotis ipsilon,Phaseolus,vulgaris
+Black Spot Disease,Colletotrichum lindemuthianum,Phaseolus,vulgaris
+Boron Deficiency,Boron Deficiency,Phaseolus,vulgaris
+Botrytis Blight,Botrytis cinerea,Phaseolus,vulgaris
+Broad Mite,Polyphagotarsonemus latus,Phaseolus,vulgaris
+Cabbage Moth,Mamestra brassicae,Phaseolus,vulgaris
+Calcium Deficiency,Calcium Deficiency,Phaseolus,vulgaris
+Cercospora Leaf Spot of Gram,Cercospora canescens,Phaseolus,vulgaris
+Chocolate Spot of Broad Bean,Botrytis fabae,Phaseolus,vulgaris
+Common Red Spider Mite,Tetranychus urticae,Phaseolus,vulgaris
+Cucumber Beetle,Diabrotica spp.,Phaseolus,vulgaris
+Downy Mildew,Peronosporales,Phaseolus,vulgaris
+Dry Root Rot of Bean,Fusarium solani f. sp. phaseoli,Phaseolus,vulgaris
+Fall Armyworm,Spodoptera frugiperda,Phaseolus,vulgaris
+Flea Beetle,Psylliodes,Phaseolus,vulgaris
+Fusarium Wilt,Fusarium oxysporum,Phaseolus,vulgaris
+Green Leafhopper,Empoasca decipiens,Phaseolus,vulgaris
+Halo Blight,Pseudomonas savastanoi pv. phaseolicola,Phaseolus,vulgaris
+Iron Deficiency,Iron Deficiency,Phaseolus,vulgaris
+Leaf Miner Flies,Agromyzidae spp.,Phaseolus,vulgaris
+Lesion Nematode,Pratylenchus spp.,Phaseolus,vulgaris
+Magnesium Deficiency,Magnesium Deficiency,Phaseolus,vulgaris
+Manganese Deficiency,Manganese Deficiency,Phaseolus,vulgaris
+Onion Maggots,Delia platura,Phaseolus,vulgaris
+Pesticide Burn,Pesticide Burn,Phaseolus,vulgaris
+Phosphorus Deficiency,Phosphorus Deficiency,Phaseolus,vulgaris
+Potassium Deficiency,Potassium Deficiency,Phaseolus,vulgaris
+Powdery Mildew,Erysiphaceae,Phaseolus,vulgaris
+Root-Knot Nematode,Meloidogyne spp.,Phaseolus,vulgaris
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Phaseolus,vulgaris
+Sclerotium Rot,Athelia rolfsii,Phaseolus,vulgaris
+Silverleaf Whitefly,Bemisia tabaci,Phaseolus,vulgaris
+Slug,Class Gastropoda,Phaseolus,vulgaris
+Soybean Stalk Weevil,Sternechus subsignatus,Phaseolus,vulgaris
+Thrips,Order Thysanoptera,Phaseolus,vulgaris
+Velvetbean Caterpillar,Anticarsia gemmatalis,Phaseolus,vulgaris
+Verticillium Wilt,Verticillium spp.,Phaseolus,vulgaris
+Vole,Cricetidae,Phaseolus,vulgaris
+Water Deficiency,Water Deficiency,Phaseolus,vulgaris
+Zinc Deficiency,Zinc Deficiency,Phaseolus,vulgaris
+Aphid,Aphidoidea family,Pisum,sativum
+Bean Leaf Beetle,Cerotoma trifurcata,Pisum,sativum
+Bean Leaf Webber,Hedylepta indicata,Pisum,sativum
+Bean Shoot Borer,Epinotia aporema,Pisum,sativum
+Boron Deficiency,Boron Deficiency,Pisum,sativum
+Botrytis Blight,Botrytis cinerea,Pisum,sativum
+Bright Line Brown Eye,Lacanobia oleracea,Pisum,sativum
+Cabbage Moth,Mamestra brassicae,Pisum,sativum
+Calcium Deficiency,Calcium Deficiency,Pisum,sativum
+Common Red Spider Mite,Tetranychus urticae,Pisum,sativum
+Downy Mildew,Peronosporales,Pisum,sativum
+Flea Beetle,Psylliodes,Pisum,sativum
+Fusarium Wilt,Fusarium oxysporum,Pisum,sativum
+Green Leafhopper,Empoasca decipiens,Pisum,sativum
+Iron Deficiency,Iron Deficiency,Pisum,sativum
+Leaf Miner Flies,Agromyzidae spp.,Pisum,sativum
+Lentil Rust,Uromyces viciae-fabae,Pisum,sativum
+Magnesium Deficiency,Magnesium Deficiency,Pisum,sativum
+Manganese Deficiency,Manganese Deficiency,Pisum,sativum
+Mealybug,Pseudococcidae,Pisum,sativum
+Nematode,Nematoda,Pisum,sativum
+Nitrogen Deficiency,Nitrogen Deficiency,Pisum,sativum
+Onion Maggots,Delia platura,Pisum,sativum
+Pea Rust,Uromyces pisi-sativi,Pisum,sativum
+Pesticide Burn,Pesticide Burn,Pisum,sativum
+Phosphorus Deficiency,Phosphorus Deficiency,Pisum,sativum
+Potassium Deficiency,Potassium Deficiency,Pisum,sativum
+Powdery Mildew,Erysiphaceae,Pisum,sativum
+Root-Knot Nematode,Meloidogyne spp.,Pisum,sativum
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Pisum,sativum
+Sclerotium Rot,Athelia rolfsii,Pisum,sativum
+Slug,Class Gastropoda,Pisum,sativum
+Thrips,Order Thysanoptera,Pisum,sativum
+Velvetbean Caterpillar,Anticarsia gemmatalis,Pisum,sativum
+Verticillium Wilt,Verticillium spp.,Pisum,sativum
+Vole,Cricetidae,Pisum,sativum
+Water Deficiency,Water Deficiency,Pisum,sativum
+Zinc Deficiency,Zinc Deficiency,Pisum,sativum
+Almond Bark Beetle,Scolytus amygdali,Prunus,dulcis
+Almond Red Leaf Blotch,Polystigma ochraceum,Prunus,dulcis
+Anthracnose of Almond,Colletotrichum acutatum,Prunus,dulcis
+Anthracnose of Almond,Colletotrichum acutatum,Prunus,armeniaca
+Aphid,Aphidoidea family,Prunus,dulcis
+Aphid,Aphidoidea family,Prunus,armeniaca
+Aphid,Aphidoidea family,Prunus,spp.
+Aphid,Aphidoidea family,Prunus,persica
+Aphid,Aphidoidea family,Prunus,domestica
+Apple Leaf Miner,Lyonetia clerkella,Prunus,armeniaca
+Apple Leaf Miner,Lyonetia clerkella,Prunus,spp.
+Apple Leaf Miner,Lyonetia clerkella,Prunus,persica
+Apple Leaf Miner,Lyonetia clerkella,Prunus,domestica
+Armillaria Root Rot,Armillaria mellea,Prunus,armeniaca
+Bacterial Canker,Pseudomonas syringae pv. syringae,Prunus,armeniaca
+Bacterial Canker,Pseudomonas syringae pv. syringae,Prunus,spp.
+Bacterial Canker,Pseudomonas syringae pv. syringae,Prunus,persica
+Bacterial Canker,Pseudomonas syringae pv. syringae,Prunus,domestica
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Prunus,dulcis
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Prunus,armeniaca
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Prunus,spp.
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Prunus,persica
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Prunus,domestica
+Bitter Rot on Apple,Glomerella cingulata,Prunus,spp.
+Black Cherry Aphid,Myzus cerasi,Prunus,spp.
+Black Scale,Saissetia oleae,Prunus,armeniaca
+Black Scale,Saissetia oleae,Prunus,domestica
+Blossom Blight,Monilinia fructicola,Prunus,dulcis
+Blossom Blight,Monilinia fructicola,Prunus,armeniaca
+Blossom Blight,Monilinia fructicola,Prunus,spp.
+Blossom Blight,Monilinia fructicola,Prunus,persica
+Blossom Blight,Monilinia fructicola,Prunus,domestica
+Boron Deficiency,Boron Deficiency,Prunus,dulcis
+Boron Deficiency,Boron Deficiency,Prunus,armeniaca
+Boron Deficiency,Boron Deficiency,Prunus,spp.
+Boron Deficiency,Boron Deficiency,Prunus,persica
+Boron Deficiency,Boron Deficiency,Prunus,domestica
+Botryosphaeria Dieback,Botryosphaeriaceae,Prunus,dulcis
+Botryosphaeria Dieback,Botryosphaeriaceae,Prunus,persica
+Botrytis Blight,Botrytis cinerea,Prunus,dulcis
+Botrytis Blight,Botrytis cinerea,Prunus,spp.
+Botrytis Blight,Botrytis cinerea,Prunus,domestica
+Brown Mite,Bryobia rubrioculus,Prunus,dulcis
+Brown Rot,Monilinia laxa,Prunus,dulcis
+Brown Rot,Monilinia laxa,Prunus,armeniaca
+Brown Rot,Monilinia laxa,Prunus,spp.
+Brown Rot,Monilinia laxa,Prunus,persica
+Brown Rot,Monilinia laxa,Prunus,domestica
+Brown Rot of Fruits,Monilinia fructigena,Prunus,dulcis
+Brown Rot of Fruits,Monilinia fructigena,Prunus,armeniaca
+Brown Rot of Fruits,Monilinia fructigena,Prunus,spp.
+Brown Rot of Fruits,Monilinia fructigena,Prunus,persica
+Brown Rot of Fruits,Monilinia fructigena,Prunus,domestica
+Cherry Fruit Fly,Rhagoletis cerasi,Prunus,spp.
+Cherry Leaf Scorch,Apiognomonia erythrostoma,Prunus,armeniaca
+Cherry Leaf Scorch,Apiognomonia erythrostoma,Prunus,spp.
+Cherry Leaf Scorch,Apiognomonia erythrostoma,Prunus,domestica
+Cherry Leaf Spot,Blumeriella jaapii,Prunus,dulcis
+Cherry Leaf Spot,Blumeriella jaapii,Prunus,armeniaca
+Cherry Leaf Spot,Blumeriella jaapii,Prunus,spp.
+Cherry Leaf Spot,Blumeriella jaapii,Prunus,domestica
+Chlorotic Leaf Roll of Apricot,Phytoplasma prunorum,Prunus,armeniaca
+Chlorotic Leaf Roll of Apricot,Phytoplasma prunorum,Prunus,persica
+Common Red Spider Mite,Tetranychus urticae,Prunus,dulcis
+Constriction Canker,Phomopsis amygdali,Prunus,persica
+Constriction Canker of Peach,Phomopsis amygdali,Prunus,dulcis
+Constriction Canker of Peach,Phomopsis amygdali,Prunus,persica
+Crown Gall,Agrobacterium,Prunus,dulcis
+Crown Gall,Agrobacterium,Prunus,persica
+Dead Arm,Eutypa lata,Prunus,dulcis
+Dead Arm,Eutypa lata,Prunus,armeniaca
+Dead Arm,Eutypa lata,Prunus,spp.
+Dead Arm,Eutypa lata,Prunus,persica
+Dead Arm,Eutypa lata,Prunus,domestica
+Dieback of Stone Fruit,Valsa cincta,Prunus,armeniaca
+Dieback of Stone Fruit,Valsa cincta,Prunus,spp.
+Dieback of Stone Fruit,Valsa cincta,Prunus,persica
+Dieback of Stone Fruit,Valsa cincta,Prunus,domestica
+Ermine Moth,Yponomeutidae,Prunus,spp.
+Ermine Moth,Yponomeutidae,Prunus,domestica
+European Earwig,Forficula auricularia,Prunus,armeniaca
+European Red Mite,Panonychus ulmi,Prunus,dulcis
+European Red Mite,Panonychus ulmi,Prunus,armeniaca
+European Red Mite,Panonychus ulmi,Prunus,spp.
+European Red Mite,Panonychus ulmi,Prunus,persica
+European Red Mite,Panonychus ulmi,Prunus,domestica
+Fruit Tree Bark Beetle,Scolytus mali,Prunus,armeniaca
+Fruit Tree Bark Beetle,Scolytus mali,Prunus,spp.
+Fruit Tree Bark Beetle,Scolytus mali,Prunus,persica
+Fruit Tree Bark Beetle,Scolytus mali,Prunus,domestica
+Fruit Tree Leafroller,Archips argyrospila,Prunus,armeniaca
+Fruit Tree Leafroller,Archips argyrospila,Prunus,persica
+Gall Mite,Eriophyidae,Prunus,armeniaca
+Gall Mite,Eriophyidae,Prunus,spp.
+Gall Mite,Eriophyidae,Prunus,persica
+Gall Mite,Eriophyidae,Prunus,domestica
+Green Citrus Aphid,Aphis spiraecola,Prunus,domestica
+Green Peach Aphid,Myzus persicae,Prunus,dulcis
+Green Peach Aphid,Myzus persicae,Prunus,armeniaca
+Green Peach Aphid,Myzus persicae,Prunus,persica
+Gummosis,Botryosphaeria dothidea,Prunus,armeniaca
+Gummosis,Botryosphaeria dothidea,Prunus,persica
+Gummosis,Botryosphaeria dothidea,Prunus,domestica
+Iron Deficiency,Iron Deficiency,Prunus,armeniaca
+Iron Deficiency,Iron Deficiency,Prunus,persica
+Jacket Rot,Monilinia spp,Prunus,armeniaca
+Jacket Rot,Monilinia spp,Prunus,persica
+Magnesium Deficiency,Magnesium Deficiency,Prunus,dulcis
+Magnesium Deficiency,Magnesium Deficiency,Prunus,armeniaca
+Magnesium Deficiency,Magnesium Deficiency,Prunus,spp.
+Magnesium Deficiency,Magnesium Deficiency,Prunus,persica
+Magnesium Deficiency,Magnesium Deficiency,Prunus,domestica
+Manganese Deficiency,Manganese Deficiency,Prunus,dulcis
+Manganese Deficiency,Manganese Deficiency,Prunus,armeniaca
+Manganese Deficiency,Manganese Deficiency,Prunus,spp.
+Manganese Deficiency,Manganese Deficiency,Prunus,persica
+Manganese Deficiency,Manganese Deficiency,Prunus,domestica
+Mealy Plum Aphid,Hyalopterus pruni,Prunus,armeniaca
+Mealy Plum Aphid,Hyalopterus pruni,Prunus,persica
+Mealy Plum Aphid,Hyalopterus pruni,Prunus,domestica
+Mediterranean Fruit Fly,Ceratitis capitata,Prunus,dulcis
+Mediterranean Fruit Fly,Ceratitis capitata,Prunus,armeniaca
+Mediterranean Fruit Fly,Ceratitis capitata,Prunus,spp.
+Mediterranean Fruit Fly,Ceratitis capitata,Prunus,persica
+Mediterranean Fruit Fly,Ceratitis capitata,Prunus,domestica
+Melon Fruit Fly,Zeugodacus cucurbitae,Prunus,persica
+Nematode,Nematoda,Prunus,armeniaca
+Nematode,Nematoda,Prunus,spp.
+Nematode,Nematoda,Prunus,persica
+Nematode,Nematoda,Prunus,domestica
+Olive Scale,Parlatoria oleae,Prunus,dulcis
+Olive Scale,Parlatoria oleae,Prunus,armeniaca
+Olive Scale,Parlatoria oleae,Prunus,persica
+Olive Scale,Parlatoria oleae,Prunus,domestica
+Oriental Fruit Fly,Bactrocera dorsalis,Prunus,persica
+Oriental Fruit Moth,Grapholita molesta,Prunus,armeniaca
+Oriental Fruit Moth,Grapholita molesta,Prunus,spp.
+Oriental Fruit Moth,Grapholita molesta,Prunus,domestica
+Peach Leaf Curl,Taphrina deformans,Prunus,dulcis
+Peach Leaf Curl,Taphrina deformans,Prunus,armeniaca
+Peach Leaf Curl,Taphrina deformans,Prunus,persica
+Peach Scab,Venturia carpophila,Prunus,armeniaca
+Peach Scab,Venturia carpophila,Prunus,persica
+Peach Twig Borer,Anarsia lineatella,Prunus,dulcis
+Peach Twig Borer,Anarsia lineatella,Prunus,armeniaca
+Peach Twig Borer,Anarsia lineatella,Prunus,spp.
+Peach Twig Borer,Anarsia lineatella,Prunus,persica
+Peach Twig Borer,Anarsia lineatella,Prunus,domestica
+Pesticide Burn,Pesticide Burn,Prunus,dulcis
+Pesticide Burn,Pesticide Burn,Prunus,armeniaca
+Pesticide Burn,Pesticide Burn,Prunus,spp.
+Pesticide Burn,Pesticide Burn,Prunus,persica
+Pesticide Burn,Pesticide Burn,Prunus,domestica
+Phony Peach Disease,Xylella fastidiosa,Prunus,armeniaca
+Phony Peach Disease,Xylella fastidiosa,Prunus,persica
+Phony Peach Disease,Xylella fastidiosa,Prunus,domestica
+Phosphorus Deficiency,Phosphorus Deficiency,Prunus,armeniaca
+Phosphorus Deficiency,Phosphorus Deficiency,Prunus,persica
+Plum Pox Virus,Plum pox virus,Prunus,dulcis
+Plum Pox Virus,Plum pox virus,Prunus,armeniaca
+Plum Pox Virus,Plum pox virus,Prunus,persica
+Plum Pox Virus,Plum pox virus,Prunus,domestica
+Plum Rust,Tranzschelia pruni spinosae,Prunus,dulcis
+Plum Rust,Tranzschelia pruni spinosae,Prunus,armeniaca
+Plum Rust,Tranzschelia pruni spinosae,Prunus,persica
+Plum Rust,Tranzschelia pruni spinosae,Prunus,domestica
+Pocket Plum Gall,Taphrina pruni,Prunus,spp.
+Pocket Plum Gall,Taphrina pruni,Prunus,persica
+Pocket Plum Gall,Taphrina pruni,Prunus,domestica
+Poplar Lace Bug,Monosteira unicostata,Prunus,dulcis
+Potassium Deficiency,Potassium Deficiency,Prunus,armeniaca
+Potassium Deficiency,Potassium Deficiency,Prunus,persica
+Powdery Mildew,Erysiphaceae,Prunus,armeniaca
+Powdery Mildew,Erysiphaceae,Prunus,spp.
+Powdery Mildew,Erysiphaceae,Prunus,persica
+Powdery Mildew,Erysiphaceae,Prunus,domestica
+Rose Mildew,Podosphaera pannosa,Prunus,armeniaca
+Rose Mildew,Podosphaera pannosa,Prunus,persica
+Shothole Disease,Wilsonomyces carpophilus,Prunus,dulcis
+Shothole Disease,Wilsonomyces carpophilus,Prunus,armeniaca
+Shothole Disease,Wilsonomyces carpophilus,Prunus,spp.
+Shothole Disease,Wilsonomyces carpophilus,Prunus,persica
+Shothole Disease,Wilsonomyces carpophilus,Prunus,domestica
+Silver Leaf,Chondrostereum purpureum,Prunus,armeniaca
+Silver Leaf,Chondrostereum purpureum,Prunus,spp.
+Silver Leaf,Chondrostereum purpureum,Prunus,persica
+Silver Leaf,Chondrostereum purpureum,Prunus,domestica
+Stecklenberger Disease,PNRSV Prunus necrotic ringspot virus,Prunus,armeniaca
+Stecklenberger Disease,PNRSV Prunus necrotic ringspot virus,Prunus,spp.
+Stecklenberger Disease,PNRSV Prunus necrotic ringspot virus,Prunus,persica
+Stecklenberger Disease,PNRSV Prunus necrotic ringspot virus,Prunus,domestica
+Thrips,Order Thysanoptera,Prunus,armeniaca
+Thrips,Order Thysanoptera,Prunus,spp.
+Thrips,Order Thysanoptera,Prunus,persica
+Valsa Disease,Valsa leucostoma,Prunus,armeniaca
+Valsa Disease,Valsa leucostoma,Prunus,spp.
+Valsa Disease,Valsa leucostoma,Prunus,persica
+Valsa Disease,Valsa leucostoma,Prunus,domestica
+Verticillium Wilt,Verticillium spp.,Prunus,armeniaca
+Vole,Cricetidae,Prunus,armeniaca
+Vole,Cricetidae,Prunus,spp.
+Vole,Cricetidae,Prunus,persica
+Vole,Cricetidae,Prunus,domestica
+Water Deficiency,Water Deficiency,Prunus,dulcis
+Water Deficiency,Water Deficiency,Prunus,armeniaca
+Water Deficiency,Water Deficiency,Prunus,spp.
+Water Deficiency,Water Deficiency,Prunus,persica
+Water Deficiency,Water Deficiency,Prunus,domestica
+Western Flower Thrips,Frankliniella occidentalis,Prunus,persica
+Western Plant Bug,Lygus hesperus,Prunus,armeniaca
+Western Plant Bug,Lygus hesperus,Prunus,persica
+Western Plant Bug,Lygus hesperus,Prunus,domestica
+Winter Moth,Operophtera brumata,Prunus,spp.
+Yellow Vine Mite,Eotetranychus carpini,Prunus,persica
+Zinc Deficiency,Zinc Deficiency,Prunus,dulcis
+Zinc Deficiency,Zinc Deficiency,Prunus,armeniaca
+Zinc Deficiency,Zinc Deficiency,Prunus,spp.
+Zinc Deficiency,Zinc Deficiency,Prunus,persica
+Zinc Deficiency,Zinc Deficiency,Prunus,domestica
+Alternaria Black Spot and Fruit Rot,Alternaria alternata,Punica,granatum
+Anthracnose of Pomegranate,Glomerella cingulata,Punica,granatum
+Aphid,Aphidoidea family,Punica,granatum
+Black Scale,Saissetia oleae,Punica,granatum
+Boron Deficiency,Boron Deficiency,Punica,granatum
+Castor Semilooper,Ophiusa melicerta,Punica,granatum
+Cercospora Fruit and Leaf Spot,Pseudocercospora punicae,Punica,granatum
+Magnesium Deficiency,Magnesium Deficiency,Punica,granatum
+Manganese Deficiency,Manganese Deficiency,Punica,granatum
+Mediterranean Fruit Fly,Ceratitis capitata,Punica,granatum
+Pesticide Burn,Pesticide Burn,Punica,granatum
+Pomegranate Thrips,Scirtothrips dorsalis,Punica,granatum
+Pomegranate Wilt,Ceratocystis fimbriata,Punica,granatum
+Zinc Deficiency,Zinc Deficiency,Punica,granatum
+Aphid,Aphidoidea family,Pyrus,communis
+Apple Leaf Miner,Lyonetia clerkella,Pyrus,communis
+Bacterial Canker,Pseudomonas syringae pv. syringae,Pyrus,communis
+Black Scale,Saissetia oleae,Pyrus,communis
+Boron Deficiency,Boron Deficiency,Pyrus,communis
+Brown Rot,Monilinia laxa,Pyrus,communis
+Brown Rot of Fruits,Monilinia fructigena,Pyrus,communis
+Dead Arm,Eutypa lata,Pyrus,communis
+Ermine Moth,Yponomeutidae,Pyrus,communis
+European Pear Rust,Gymnosporangium sabinae,Pyrus,communis
+European Red Mite,Panonychus ulmi,Pyrus,communis
+Fire Blight,Erwinia amylovora,Pyrus,communis
+Fruit Tree Bark Beetle,Scolytus mali,Pyrus,communis
+Fruit Tree Canker,Neonectria ditissima,Pyrus,communis
+Fruit Tree Leafroller,Archips argyrospila,Pyrus,communis
+Gall Mite,Eriophyidae,Pyrus,communis
+Grape Tortrix Moth,Argyrotaenia ljungiana,Pyrus,communis
+Green Citrus Aphid,Aphis spiraecola,Pyrus,communis
+Magnesium Deficiency,Magnesium Deficiency,Pyrus,communis
+Manganese Deficiency,Manganese Deficiency,Pyrus,communis
+Mediterranean Fruit Fly,Ceratitis capitata,Pyrus,communis
+Nematode,Nematoda,Pyrus,communis
+Olive Scale,Parlatoria oleae,Pyrus,communis
+Oriental Fruit Moth,Grapholita molesta,Pyrus,communis
+Pear Leaf Blister Mite,Eriophyes pyri,Pyrus,communis
+Pear Leaf Spot,Diplocarpon maculatum,Pyrus,communis
+Pear Scab,Venturia pyrina,Pyrus,communis
+Pesticide Burn,Pesticide Burn,Pyrus,communis
+Phytophthora Root Rot,Phytophthora cactorum,Pyrus,communis
+Powdery Mildew,Erysiphaceae,Pyrus,communis
+Silver Leaf,Chondrostereum purpureum,Pyrus,communis
+Thrips,Order Thysanoptera,Pyrus,communis
+Vole,Cricetidae,Pyrus,communis
+Water Deficiency,Water Deficiency,Pyrus,communis
+Western Plant Bug,Lygus hesperus,Pyrus,communis
+Winter Moth,Operophtera brumata,Pyrus,communis
+Woolly Aphid,Eriosoma lanigerum,Pyrus,communis
+Zinc Deficiency,Zinc Deficiency,Pyrus,communis
+Aphid,Aphidoidea family,red,"gram, Cajanus cajan"
+Ashy Stem Blight of Bean,Macrophomina phaseolina,red,"gram, Cajanus cajan"
+Boron Deficiency,Boron Deficiency,red,"gram, Cajanus cajan"
+Botrytis Blight,Botrytis cinerea,red,"gram, Cajanus cajan"
+Cercospora Leaf Spot of Gram,Cercospora canescens,red,"gram, Cajanus cajan"
+Fusarium Wilt,Fusarium oxysporum,red,"gram, Cajanus cajan"
+Gram Pod Borer,Helicoverpa armigera,red,"gram, Cajanus cajan"
+Halo Blight,Pseudomonas savastanoi pv. phaseolicola,red,"gram, Cajanus cajan"
+Iron Deficiency,Iron Deficiency,red,"gram, Cajanus cajan"
+Leaf Miner Flies,Agromyzidae spp.,red,"gram, Cajanus cajan"
+Lesion Nematode,Pratylenchus spp.,red,"gram, Cajanus cajan"
+Magnesium Deficiency,Magnesium Deficiency,red,"gram, Cajanus cajan"
+Manganese Deficiency,Manganese Deficiency,red,"gram, Cajanus cajan"
+Pea Pod Borer,Etiella zinckenella,red,"gram, Cajanus cajan"
+Pea Rust,Uromyces pisi-sativi,red,"gram, Cajanus cajan"
+Pesticide Burn,Pesticide Burn,red,"gram, Cajanus cajan"
+Phosphorus Deficiency,Phosphorus Deficiency,red,"gram, Cajanus cajan"
+Phytophthora Blight,Phytophthora drechsleri,red,"gram, Cajanus cajan"
+Powdery Mildew,Erysiphaceae,red,"gram, Cajanus cajan"
+Root-Knot Nematode,Meloidogyne spp.,red,"gram, Cajanus cajan"
+Sclerotium Rot,Athelia rolfsii,red,"gram, Cajanus cajan"
+Spotted Pod Borer,Maruca testulalis,red,"gram, Cajanus cajan"
+Sterility Mosaic,PPSMV,red,"gram, Cajanus cajan"
+Thrips,Order Thysanoptera,red,"gram, Cajanus cajan"
+Water Deficiency,Water Deficiency,red,"gram, Cajanus cajan"
+Zinc Deficiency,Zinc Deficiency,red,"gram, Cajanus cajan"
+American Gooseberry Mildew,Podosphaera mors-uvae,Ribes,spp.
+Anthracnose of Currant & Gooseberry,Drepanopeziza ribis,Ribes,spp.
+Aphid,Aphidoidea family,Ribes,spp.
+Boron Deficiency,Boron Deficiency,Ribes,spp.
+Botrytis Blight,Botrytis cinerea,Ribes,spp.
+Bright Line Brown Eye,Lacanobia oleracea,Ribes,spp.
+Common Red Spider Mite,Tetranychus urticae,Ribes,spp.
+European Red Mite,Panonychus ulmi,Ribes,spp.
+Iron Deficiency,Iron Deficiency,Ribes,spp.
+Magnesium Deficiency,Magnesium Deficiency,Ribes,spp.
+Manganese Deficiency,Manganese Deficiency,Ribes,spp.
+Nematode,Nematoda,Ribes,spp.
+Nitrogen Deficiency,Nitrogen Deficiency,Ribes,spp.
+Pesticide Burn,Pesticide Burn,Ribes,spp.
+Phosphorus Deficiency,Phosphorus Deficiency,Ribes,spp.
+Redcurrant Blister Aphid,Cryptomyzus ribis,Ribes,spp.
+Slug,Class Gastropoda,Ribes,spp.
+Thrips,Order Thysanoptera,Ribes,spp.
+Verticillium Wilt,Verticillium spp.,Ribes,spp.
+Vole,Cricetidae,Ribes,spp.
+Water Deficiency,Water Deficiency,Ribes,spp.
+White Pine Blister Rust,Cronartium ribicola,Ribes,spp.
+Winter Moth,Operophtera brumata,Ribes,spp.
+Zinc Deficiency,Zinc Deficiency,Ribes,spp.
+Aphid,Aphidoidea family,Rubus,spp.
+Boron Deficiency,Boron Deficiency,Rubus,spp.
+Common Red Spider Mite,Tetranychus urticae,Rubus,spp.
+European Red Mite,Panonychus ulmi,Rubus,spp.
+Iron Deficiency,Iron Deficiency,Rubus,spp.
+Magnesium Deficiency,Magnesium Deficiency,Rubus,spp.
+Manganese Deficiency,Manganese Deficiency,Rubus,spp.
+Nematode,Nematoda,Rubus,spp.
+Nitrogen Deficiency,Nitrogen Deficiency,Rubus,spp.
+Pesticide Burn,Pesticide Burn,Rubus,spp.
+Phosphorus Deficiency,Phosphorus Deficiency,Rubus,spp.
+Powdery Mildew,Erysiphaceae,Rubus,spp.
+Raspberry Spur Blight,Didymella applanata,Rubus,spp.
+Slug,Class Gastropoda,Rubus,spp.
+Strawberry Blossom Weevil,Anthonomus rubi,Rubus,spp.
+Thrips,Order Thysanoptera,Rubus,spp.
+Verticillium Wilt,Verticillium spp.,Rubus,spp.
+Vole,Cricetidae,Rubus,spp.
+Water Deficiency,Water Deficiency,Rubus,spp.
+Zinc Deficiency,Zinc Deficiency,Rubus,spp.
+Abiotic Sunburn,Abiotic Sunburn,Saccharum,officinarum
+Aphid,Aphidoidea family,Saccharum,officinarum
+Bacterial Leaf Blight of Sugarcane,Acidovorax avenae,Saccharum,officinarum
+Banana Fruit-Scarring Beetle,Colaspis hypochlora,Saccharum,officinarum
+Boron Deficiency,Boron Deficiency,Saccharum,officinarum
+Calcium Deficiency,Calcium Deficiency,Saccharum,officinarum
+Cucumber Beetle,Diabrotica spp.,Saccharum,officinarum
+Early Shoot Borer,Chilo infuscatellus,Saccharum,officinarum
+Fall Armyworm,Spodoptera frugiperda,Saccharum,officinarum
+Iron Deficiency,Iron Deficiency,Saccharum,officinarum
+Magnesium Deficiency,Magnesium Deficiency,Saccharum,officinarum
+Manganese Deficiency,Manganese Deficiency,Saccharum,officinarum
+Nitrogen Deficiency,Nitrogen Deficiency,Saccharum,officinarum
+Pesticide Burn,Pesticide Burn,Saccharum,officinarum
+Phosphorus Deficiency,Phosphorus Deficiency,Saccharum,officinarum
+Smut of Sugarcane,Sporisorium scitamineum,Saccharum,officinarum
+Sugarcane Borer,Diatraea saccharalis,Saccharum,officinarum
+Sugarcane Common Rust,Puccinia melanocephala,Saccharum,officinarum
+Sugarcane Mosaic Virus,SCMV,Saccharum,officinarum
+Sugarcane Pineapple Disease,Ceratocystis paradoxa,Saccharum,officinarum
+Sugarcane Ratoon Stunting Disease,Leifsonia xyli,Saccharum,officinarum
+Sugarcane White Grub,Lepidiota stigma,Saccharum,officinarum
+Violet Stem Borer,Sesamia inferens,Saccharum,officinarum
+Water Deficiency,Water Deficiency,Saccharum,officinarum
+Wilt Disease of Sugarcane,Gibberella fujikuroi,Saccharum,officinarum
+Zinc Deficiency,Zinc Deficiency,Saccharum,officinarum
+Aphid,Aphidoidea family,Secale,cereale
+Boron Deficiency in Cereals,Boron Deficiency,Secale,cereale
+Brown Rust of Rye,Puccinia recondita,Secale,cereale
+Calcium Deficiency in Wheat,Calcium Deficiency,Secale,cereale
+Cereal Leaf Beetle,Oulema melanopus,Secale,cereale
+Common Bunt of Wheat,Tilletia caries,Secale,cereale
+Eyespot,Oculimacula yallundae,Secale,cereale
+Fusarium Head Blight,Fusarium graminearum,Secale,cereale
+Leaf and Glume Blotch of Wheat,Parastagonospora nodorum,Secale,cereale
+Magnesium Deficiency,Magnesium Deficiency,Secale,cereale
+Manganese Deficiency,Manganese Deficiency,Secale,cereale
+Pesticide Burn,Pesticide Burn,Secale,cereale
+Potassium Deficiency in Cereals,Potassium Deficiency,Secale,cereale
+Powdery Mildew of Cereals,Blumeria graminis,Secale,cereale
+Rhynchosporium,Rhynchosporium secalis,Secale,cereale
+Septoria Tritici Blotch,Mycosphaerella graminicola,Secale,cereale
+Water Deficiency,Water Deficiency,Secale,cereale
+Wheat Leaf Rust,Puccinia triticina,Secale,cereale
+Yellow Stripe Rust,Puccinia striiformis,Secale,cereale
+Zinc Deficiency,Zinc Deficiency,Secale,cereale
+Zinc Deficiency in Wheat,Zinc Deficiency,Secale,cereale
+African Mole Cricket,Gryllotalpa africana,Solamum,tuberosum
+Aphid,Aphidoidea family,Solamum,tuberosum
+Bacterial Wilt,Ralstonia solanacearum,Solamum,tuberosum
+Black Cutworm,Agrotis ipsilon,Solamum,tuberosum
+Black Scurf,Rhizoctonia solani,Solamum,tuberosum
+Blackleg,Pectobacterium atrosepticum,Solamum,tuberosum
+Boron Deficiency,Boron Deficiency,Solamum,tuberosum
+Botrytis Blight,Botrytis cinerea,Solamum,tuberosum
+Cabbage Moth,Mamestra brassicae,Solamum,tuberosum
+Calcium Deficiency in Potato,Calcium Deficiency,Solamum,tuberosum
+Common Red Spider Mite,Tetranychus urticae,Solamum,tuberosum
+Early Blight of Potato,Alternaria solani,Solamum,tuberosum
+Fall Armyworm,Spodoptera frugiperda,Solamum,tuberosum
+Flea Beetle,Psylliodes,Solamum,tuberosum
+Green Leafhopper,Empoasca decipiens,Solamum,tuberosum
+Iron Deficiency in Potato,Iron Deficiency,Solamum,tuberosum
+Leaf Miner Flies,Agromyzidae spp.,Solamum,tuberosum
+Magnesium Deficiency in Potato,Magnesium Deficiency,Solamum,tuberosum
+Manganese Deficiency,Manganese Deficiency,Solamum,tuberosum
+Mealybug,Pseudococcidae,Solamum,tuberosum
+Nematode,Nematoda,Solamum,tuberosum
+Nitrogen Deficiency in Potato,Nitrogen Deficiency,Solamum,tuberosum
+Pesticide Burn,Pesticide Burn,Solamum,tuberosum
+Phosphorus Deficiency in Potato,Phosphorus Deficiency,Solamum,tuberosum
+Potassium Deficiency in Potato,Potassium Deficiency,Solamum,tuberosum
+Potato Beetle,Leptinotarsa decemlineata,Solamum,tuberosum
+Potato Late Blight,Phytophthora infestans,Solamum,tuberosum
+Potato Leafroll Virus,PLRV,Solamum,tuberosum
+Potato Scab,Streptomyces scabies,Solamum,tuberosum
+Potato Tuber Moth,Phthorimaea operculella,Solamum,tuberosum
+Potato X Virus,PVX,Solamum,tuberosum
+Potato Y Virus,PVY,Solamum,tuberosum
+Powdery Mildew,Erysiphaceae,Solamum,tuberosum
+Powdery Scab,Spongospora subterranea,Solamum,tuberosum
+Root-Knot Nematode,Meloidogyne spp.,Solamum,tuberosum
+Sclerotium Rot,Athelia rolfsii,Solamum,tuberosum
+Silver Scurf,Helminthosporium solani,Solamum,tuberosum
+Silverleaf Whitefly,Bemisia tabaci,Solamum,tuberosum
+Slug,Class Gastropoda,Solamum,tuberosum
+Thrips,Order Thysanoptera,Solamum,tuberosum
+Variegated Grasshopper,Zonocerus variegatus,Solamum,tuberosum
+Verticillium Wilt,Verticillium spp.,Solamum,tuberosum
+Vole,Cricetidae,Solamum,tuberosum
+Water Deficiency,Water Deficiency,Solamum,tuberosum
+Zinc Deficiency,Zinc Deficiency,Solamum,tuberosum
+African Mole Cricket,Gryllotalpa africana,Solanum,melongena
+Aphid,Aphidoidea family,Solanum,melongena
+Blight of Pepper,Phytophthora capsici,Solanum,melongena
+Boron Deficiency,Boron Deficiency,Solanum,melongena
+Botrytis Blight,Botrytis cinerea,Solanum,melongena
+Brinjal Fruit Borer,Leucinodes orbonalis,Solanum,melongena
+Cercospora Leaf Spot of Eggplant,Cercospora melongenae,Solanum,melongena
+Common Red Spider Mite,Tetranychus urticae,Solanum,melongena
+Eggplant Lace Bug,Gargaphia solani,Solanum,melongena
+Eggplant Leaf Roller,Eublemma olivacea,Solanum,melongena
+Flea Beetle,Psylliodes,Solanum,melongena
+Green Leafhopper,Empoasca decipiens,Solanum,melongena
+Iron Deficiency,Iron Deficiency,Solanum,melongena
+Jassids on Eggplant,Hishimonus phycitis,Solanum,melongena
+Leaf Eating Beetle,Epilachna vigintioctopunctata,Solanum,melongena
+Magnesium Deficiency,Magnesium Deficiency,Solanum,melongena
+Manganese Deficiency,Manganese Deficiency,Solanum,melongena
+Mealybug,Pseudococcidae,Solanum,melongena
+Mediterranean Fruit Fly,Ceratitis capitata,Solanum,melongena
+Nematode,Nematoda,Solanum,melongena
+Nitrogen Deficiency,Nitrogen Deficiency,Solanum,melongena
+Pesticide Burn,Pesticide Burn,Solanum,melongena
+Phosphorus Deficiency,Phosphorus Deficiency,Solanum,melongena
+Potassium Deficiency,Potassium Deficiency,Solanum,melongena
+Powdery Mildew,Erysiphaceae,Solanum,melongena
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Solanum,melongena
+Sclerotium Rot,Athelia rolfsii,Solanum,melongena
+Silverleaf Whitefly,Bemisia tabaci,Solanum,melongena
+Slug,Class Gastropoda,Solanum,melongena
+Thrips,Order Thysanoptera,Solanum,melongena
+Variegated Grasshopper,Zonocerus variegatus,Solanum,melongena
+Verticillium Wilt,Verticillium spp.,Solanum,melongena
+Vole,Cricetidae,Solanum,melongena
+Water Deficiency,Water Deficiency,Solanum,melongena
+Zinc Deficiency,Zinc Deficiency,Solanum,melongena
+Anthracnose Leaf Blight,Colletotrichum graminicola,Sorghum,bicolor
+Aphid,Aphidoidea family,Sorghum,bicolor
+Boron Deficiency,Boron Deficiency,Sorghum,bicolor
+Charcoal Stalk Rot,Macrophomina phaseolina,Sorghum,bicolor
+Ergot of Sorghum,Claviceps africana,Sorghum,bicolor
+Fall Armyworm,Spodoptera frugiperda,Sorghum,bicolor
+Fusarium Head Blight,Fusarium graminearum,Sorghum,bicolor
+Head Smut,Sphacelotheca reiliana,Sorghum,bicolor
+Holcus Spot,Pseudomonas syringae pv. syringae,Sorghum,bicolor
+Lesser cornstalk borer,Elasmopalpus lignosellus,Sorghum,bicolor
+Magnesium Deficiency,Magnesium Deficiency,Sorghum,bicolor
+Manganese Deficiency,Manganese Deficiency,Sorghum,bicolor
+Nitrogen Deficiency,Nitrogen Deficiency,Sorghum,bicolor
+Penicillium ear rot,Penicillium spp.,Sorghum,bicolor
+Pesticide Burn,Pesticide Burn,Sorghum,bicolor
+Phosphorus Deficiency,Phosphorus Deficiency,Sorghum,bicolor
+Rough Leaf Spot Of Sorghum,Ascochyta sorghi,Sorghum,bicolor
+Sorghum Midge,Stenodiplosis sorghicola,Sorghum,bicolor
+Spotted Stemborer,Chilo partellus,Sorghum,bicolor
+"Stink Bugs on Corn, Millet and Sorghum",Euschistus spp.,Sorghum,bicolor
+Turcicum Leaf Blight,Setosphaeria turcica,Sorghum,bicolor
+Violet Stem Borer,Sesamia inferens,Sorghum,bicolor
+Water Deficiency,Water Deficiency,Sorghum,bicolor
+Zinc Deficiency,Zinc Deficiency,Sorghum,bicolor
+Zonate Leaf Spot,Gloeocercospora sorghi,Sorghum,bicolor
+Aphid,Aphidoidea family,Triticum,aestivum
+Boron Deficiency in Cereals,Boron Deficiency,Triticum,aestivum
+Calcium Deficiency in Wheat,Calcium Deficiency,Triticum,aestivum
+Cereal Leaf Beetle,Oulema melanopus,Triticum,aestivum
+Common Bunt of Wheat,Tilletia caries,Triticum,aestivum
+Ear Cockle Eelworm,Anguina tritici,Triticum,aestivum
+Eyespot,Oculimacula yallundae,Triticum,aestivum
+Fall Armyworm,Spodoptera frugiperda,Triticum,aestivum
+Fusarium Head Blight,Fusarium graminearum,Triticum,aestivum
+Iron Deficiency,Iron Deficiency,Triticum,aestivum
+Karnal Bunt of Wheat,Tilletia indica,Triticum,aestivum
+Leaf and Glume Blotch of Wheat,Parastagonospora nodorum,Triticum,aestivum
+Lesion Nematode,Pratylenchus spp.,Triticum,aestivum
+Lesser cornstalk borer,Elasmopalpus lignosellus,Triticum,aestivum
+Loose Smut,Ustilago tritici,Triticum,aestivum
+Magnesium Deficiency,Magnesium Deficiency,Triticum,aestivum
+Manganese Deficiency,Manganese Deficiency,Triticum,aestivum
+Pesticide Burn,Pesticide Burn,Triticum,aestivum
+Physiological Leaf Spot,PLS,Triticum,aestivum
+Potassium Deficiency in Cereals,Potassium Deficiency,Triticum,aestivum
+Powdery Mildew of Cereals,Blumeria graminis,Triticum,aestivum
+Septoria Tritici Blotch,Mycosphaerella graminicola,Triticum,aestivum
+Snow Mold of Cereals,Monographella nivalis,Triticum,aestivum
+Sulfur Deficiency in Wheat,Sulfur Deficiency,Triticum,aestivum
+Take All,Gaeumannomyces graminis,Triticum,aestivum
+Tan Spot,Pyrenophora tritici-repentis,Triticum,aestivum
+Violet Stem Borer,Sesamia inferens,Triticum,aestivum
+Water Deficiency,Water Deficiency,Triticum,aestivum
+Wheat Blast,Magnaporthe oryzae,Triticum,aestivum
+Wheat Dwarf Virus,WDV,Triticum,aestivum
+Wheat Leaf Rust,Puccinia triticina,Triticum,aestivum
+Wheat Stem Rust,Puccinia graminis,Triticum,aestivum
+Yellow Stripe Rust,Puccinia striiformis,Triticum,aestivum
+Zinc Deficiency in Wheat,Zinc Deficiency,Triticum,aestivum
+Anthracnose of Blackgram,Colletotrichum lindemuthianum,Vigna,radiata
+Aphid,Aphidoidea family,Vigna,radiata
+Bacterial Leaf Blight,Xanthomonas phaseoli,Vigna,radiata
+Boron Deficiency,Boron Deficiency,Vigna,radiata
+Castor Semilooper,Ophiusa melicerta,Vigna,radiata
+Cercospora Leaf Spot of Gram,Cercospora canescens,Vigna,radiata
+Common Red Spider Mite,Tetranychus urticae,Vigna,radiata
+Gram Pod Borer,Helicoverpa armigera,Vigna,radiata
+Green Leafhopper,Empoasca decipiens,Vigna,radiata
+Leaf Miner Flies,Agromyzidae spp.,Vigna,radiata
+Magnesium Deficiency,Magnesium Deficiency,Vigna,radiata
+Manganese Deficiency,Manganese Deficiency,Vigna,radiata
+Mealybug,Pseudococcidae,Vigna,radiata
+Mungbean Yellow Mosaic Virus,MYMV,Vigna,radiata
+Pea Blue Butterfly,Lampides boeticus,Vigna,radiata
+Pea Pod Borer,Etiella zinckenella,Vigna,radiata
+Pesticide Burn,Pesticide Burn,Vigna,radiata
+Phosphorus Deficiency,Phosphorus Deficiency,Vigna,radiata
+Powdery Mildew,Erysiphaceae,Vigna,radiata
+Rust on Blackgram,Uromyces phaseoli,Vigna,radiata
+Silverleaf Whitefly,Bemisia tabaci,Vigna,radiata
+Soybean Looper,Pseudoplusia includens,Vigna,radiata
+Spotted Pod Borer,Maruca testulalis,Vigna,radiata
+Thrips,Order Thysanoptera,Vigna,radiata
+Tobacco Caterpillar,Spodoptera litura,Vigna,radiata
+Urd Bean Leaf Crinkle Virus,ULCV,Vigna,radiata
+Water Deficiency,Water Deficiency,Vigna,radiata
+Zinc Deficiency,Zinc Deficiency,Vigna,radiata
+Abiotic Sunburn,Abiotic Sunburn,Vitis,vinifera
+Angular Leaf Scorch,Pseudopezicula tetraspora,Vitis,vinifera
+Angular Leaf Spot,Mycosphaerella angulata,Vitis,vinifera
+Anthracnose of Grape,Elsinoe ampelina,Vitis,vinifera
+Aphid,Aphidoidea family,Vitis,vinifera
+Boron Deficiency,Boron Deficiency,Vitis,vinifera
+Botryosphaeria Dieback,Botryosphaeriaceae,Vitis,vinifera
+Botrytis Blight,Botrytis cinerea,Vitis,vinifera
+Common Red Spider Mite,Tetranychus urticae,Vitis,vinifera
+Crown Gall,Agrobacterium,Vitis,vinifera
+Crown Rot,Phytophthora cactorum,Vitis,vinifera
+Curculio Weevil,Otiorhynchus cribricollis,Vitis,vinifera
+Dead Arm,Eutypa lata,Vitis,vinifera
+Downy Mildew on Grape,Plasmopara viticola,Vitis,vinifera
+Esca,Togninia minima,Vitis,vinifera
+European Red Mite,Panonychus ulmi,Vitis,vinifera
+Fusarium Wilt,Fusarium oxysporum,Vitis,vinifera
+Grape Berry Moth,Lobesia botrana,Vitis,vinifera
+Grape Blister Mite,Colomerus vitis,Vitis,vinifera
+Grape Bud Moth,Eupoecilia ambiguella,Vitis,vinifera
+Grape Rust Mite,Calepitrimerus vitis,Vitis,vinifera
+Grape Thrips,Drepanothrips reuteri,Vitis,vinifera
+Grape Tortrix Moth,Argyrotaenia ljungiana,Vitis,vinifera
+Grapevine Leafroll Disease,GLD,Vitis,vinifera
+Grapevine Leafroller,Sparganothis pilleriana,Vitis,vinifera
+Iron Deficiency,Iron Deficiency,Vitis,vinifera
+Leafhopper on Grape,Empoasca vitis,Vitis,vinifera
+Magnesium Deficiency,Magnesium Deficiency,Vitis,vinifera
+Manganese Deficiency,Manganese Deficiency,Vitis,vinifera
+Mealybug,Pseudococcidae,Vitis,vinifera
+Mediterranean Fruit Fly,Ceratitis capitata,Vitis,vinifera
+Nematode,Nematoda,Vitis,vinifera
+Nitrogen Deficiency,Nitrogen Deficiency,Vitis,vinifera
+Pesticide Burn,Pesticide Burn,Vitis,vinifera
+Phomopsis Cane and Leaf Spot,Phomopsis viticola,Vitis,vinifera
+Phosphorus Deficiency,Phosphorus Deficiency,Vitis,vinifera
+Potassium Deficiency,Potassium Deficiency,Vitis,vinifera
+Powdery Mildew of Grape,Erysiphe necator,Vitis,vinifera
+Verticillium Wilt,Verticillium spp.,Vitis,vinifera
+Vine Flea Beetle,Altica ampelophaga,Vitis,vinifera
+Vole,Cricetidae,Vitis,vinifera
+Water Deficiency,Water Deficiency,Vitis,vinifera
+Yellow Vine Mite,Eotetranychus carpini,Vitis,vinifera
+Zinc Deficiency,Zinc Deficiency,Vitis,vinifera
+Anthracnose Leaf Blight,Colletotrichum graminicola,Zea,mays
+Aphid,Aphidoidea family,Zea,mays
+Bacterial Stalk Rot of Maize,Erwinia chrysanthemi,Zea,mays
+Bean Leaf Webber,Hedylepta indicata,Zea,mays
+Black Cutworm,Agrotis ipsilon,Zea,mays
+Boron Deficiency in Maize,Boron Deficiency,Zea,mays
+Calcium Deficiency,Calcium Deficiency,Zea,mays
+Charcoal Stalk Rot,Macrophomina phaseolina,Zea,mays
+Common Red Spider Mite,Tetranychus urticae,Zea,mays
+Common Rust of Maize,Puccinia sorghi,Zea,mays
+Corn Earworm,Helicoverpa zea,Zea,mays
+Corn Grey Leaf Spot,Cercospora zeae-maydis,Zea,mays
+Cucumber Beetle,Diabrotica spp.,Zea,mays
+European Corn Borer,Ostrinia nubilalis,Zea,mays
+Eyespot of Corn,Kabatiella zeae,Zea,mays
+Fall Armyworm,Spodoptera frugiperda,Zea,mays
+Flea Beetle,Psylliodes,Zea,mays
+Fusarium Ear Rot,Fusarium verticillioides,Zea,mays
+Goss's Wilt,Clavibacter michiganensis,Zea,mays
+Head Smut,Sphacelotheca reiliana,Zea,mays
+Holcus Spot,Pseudomonas syringae pv. syringae,Zea,mays
+Iron Deficiency,Iron Deficiency,Zea,mays
+Lesion Nematode,Pratylenchus spp.,Zea,mays
+Lesser cornstalk borer,Elasmopalpus lignosellus,Zea,mays
+Magnesium Deficiency,Magnesium Deficiency,Zea,mays
+Maize Leaf Streak Virus,MSV,Zea,mays
+Maize Lethal Necrosis Disease,MLND,Zea,mays
+Maize Smut,Ustilago maydis,Zea,mays
+Manganese Deficiency,Manganese Deficiency,Zea,mays
+Nematode,Nematoda,Zea,mays
+Nitrogen Deficiency,Nitrogen Deficiency,Zea,mays
+Northern Corn Leaf Spot,Cochliobolus carbonum,Zea,mays
+Onion Maggots,Delia platura,Zea,mays
+Oriental Armyworm,Mythimna separata,Zea,mays
+Penicillium ear rot,Penicillium spp.,Zea,mays
+Pesticide Burn,Pesticide Burn,Zea,mays
+Phaeosphaeria Leaf Spot,Phaeosphaeria maydis,Zea,mays
+Phosphorus Deficiency,Phosphorus Deficiency,Zea,mays
+Potassium Deficiency,Potassium Deficiency,Zea,mays
+Root-Knot Nematode,Meloidogyne spp.,Zea,mays
+Sclerotium Rot,Athelia rolfsii,Zea,mays
+Southern Corn Leaf Blight,Cochliobolus heterostrophus,Zea,mays
+Southern Rust of Maize,Puccinia polysora,Zea,mays
+Spotted Stemborer,Chilo partellus,Zea,mays
+"Stink Bugs on Corn, Millet and Sorghum",Euschistus spp.,Zea,mays
+Striga,Striga hermonthica,Zea,mays
+Thrips,Order Thysanoptera,Zea,mays
+Tropical Rust,Physopella zeae,Zea,mays
+Turcicum Leaf Blight,Setosphaeria turcica,Zea,mays
+Verticillium Wilt,Verticillium spp.,Zea,mays
+Violet Stem Borer,Sesamia inferens,Zea,mays
+Vole,Cricetidae,Zea,mays
+Water Deficiency,Water Deficiency,Zea,mays
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/crop_data.csv b/packages/api/db/seeds/seedData/crop_data.csv
new file mode 100644
index 0000000000..0898808339
--- /dev/null
+++ b/packages/api/db/seeds/seedData/crop_data.csv
@@ -0,0 +1,168 @@
+"crop_genus","crop_specie","crop_common_name","crop_group","crop_subgroup","max_rooting_depth","depletion_fraction","is_avg_depth","initial_kc","mid_kc","end_kc","max_height","is_avg_kc","is_avg_nutrient","nutrient_credits","nutrient_notes","refuse","energy","protein","lipid","vitc","vita_rae","folate","ca","fe","zn","k","cu","na","ph","thiamin","riboflavin","niacin","vitb6","mg","mn","vitb12","percentrefuse","fl","se","vite","pantothenic","vitk"
+"Camellia","sinensis ","Tea","Beverage and spice crops","Leafy or stem vegetables",1.2,0.4,FALSE,0.95,1,1,"1.5",FALSE,FALSE,"","","","6.23125","0","0","0","0","31.15625","0","0.124625","0.124625","230.55625","0.0623125","18.69375","6.23125","0","0.0872375","0","0","18.69375","1.36464375","0","","","","","",""
+"Coffea","spp. ","Coffee","Beverage and spice crops","Leafy or stem vegetables",1.2,0.4,FALSE,0.9,0.95,0.95,"2.5",FALSE,FALSE,"","","","16.565","1.9878","0.3313","0","0","33.13","33.13","0.16565","0.3313","811.685","0.03313","33.13","49.695","0.23191","1.25894","3.163915","0.016565","49.695","0.380995","0","","","","","",""
+"Humulus","lupulus ","Hops","Beverage and spice crops","Leafy or stem vegetables",1.1,0.5,FALSE,0.3,1.05,0.85,"5",FALSE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Mentha","spp. ","Mint (all varieties)","Beverage and spice crops","Temporary spice crops",0.6,0.4,FALSE,0.6,1.15,1.1,"0.7",FALSE,FALSE,"","","","70","3.75","0.94","31.8","212","114","243","5.08","1.11","569","0.329","31","73","0.082","0.266","1.706","0.129","80","1.176","0","39","","","","",""
+"Theobroma","cacao ","Cocoa (cacao)","Beverage and spice crops","Leafy or stem vegetables",0.85,0.3,FALSE,1,1.05,1.05,"3",FALSE,FALSE,"","","","228","19.6","13.7","0","0","32","128","13.86","6.81","1524","3.788","21","734","0.078","0.241","2.185","0.118","499","3.837","0","0","","","","",""
+"Ave","spp. ","Oats","Cereals","Cereals",1.25,0.55,FALSE,0.3,1.15,0.25,"1",FALSE,FALSE,"","","","389","16.89","6.9","0","0","56","54","4.72","3.97","429","0.626","2","523","0.763","0.139","0.961","0.119","177","4.916","0","0","","","","",""
+"Echinochloa","esculenta ","Millet (Japanese)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Eleusine","coracana ","Millet (finger)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Hordeum","vulgare ","Barley","Cereals","Cereals",1.25,0.55,FALSE,0.3,1.15,0.25,"1",FALSE,FALSE,"","","","354","12.48","2.3","0","1","19","33","3.6","2.77","452","0.498","12","264","0.646","0.285","4.604","0.318","133","1.943","0","0","","","","",""
+"Oryza","glaberrima ","Rice (African)","Cereals","Cereals",0.75,0.204,FALSE,1.05,1.2,0.75,"1",FALSE,FALSE,"","","","358","6.5","0.52","0","0","","3","4.23","1.1","76","0.21","1","95","0.565","0.048","4.113","0.171","23","1.037","0","0","","","","",""
+"Oryza","sativa ","Rice","Cereals","Cereals",0.75,0.204,FALSE,1.05,1.2,0.75,"1",FALSE,FALSE,"","","","358","6.5","0.52","0","0","","3","4.23","1.1","76","0.21","1","95","0.565","0.048","4.113","0.171","23","1.037","0","0","","","","",""
+"Panicum","miliaceum ","Millet (proso)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Pennisetum","americanum ","Millet (bajra, pearl)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Secale","cereale ","Rye","Cereals","Cereals",0.8,0.6,FALSE,0.95,1.05,1,"0.3",FALSE,FALSE,"","","","338","10.34","1.63","0","1","38","24","2.63","2.65","510","0.367","2","332","0.316","0.251","4.27","0.294","110","2.577","0","0","","","","",""
+"Setaria","italica ","Millet (foxtail)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Sorghum","bicolor ","Broom millet","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Sorghum","bicolor ","Broom sorghum","Cereals","Cereals",1.5,0.55,FALSE,0.3,1.1,0.55,"1.5",FALSE,FALSE,"","","","329","10.62","3.46","0","0","20","13","3.36","1.67","363","0.284","2","289","0.332","0.096","3.688","0.443","165","1.605","0","0","","","","",""
+"Sorghum","bicolor ","Millet (broom)","Cereals","Cereals",1.5,0.55,FALSE,0.3,1,0.3,"1.5",FALSE,FALSE,"","","","378","11.02","4.22","0","0","85","8","3.01","1.68","195","0.75","5","285","0.421","0.29","4.72","0.384","114","1.632","0","0","","","","",""
+"Sorghum","bicolor ","Sorghum","Cereals","Cereals",1.5,0.55,FALSE,0.3,1.1,0.55,"1.5",FALSE,FALSE,"","","","329","10.62","3.46","0","0","20","13","3.36","1.67","363","0.284","2","289","0.332","0.096","3.688","0.443","165","1.605","0","0","","","","",""
+"Triticum","aestivum ","Wheat","Cereals","Cereals",1.25,0.55,FALSE,0.3,1.15,0.3,"1",FALSE,FALSE,"","","","329","15.4","1.92","0","0","43","25","3.6","2.78","340","0.41","2","332","0.504","0.11","5.71","0.336","124","4.055","0","0","","","","",""
+"Ananas","comosus ","Pineapple","Fruit and nuts","Tropical and subtropical fruits",0.45,0.5,FALSE,0.5,0.3,0.3,"0.8",FALSE,FALSE,"","","","50","0.54","0.12","47.8","3","18","13","0.29","0.12","109","0.11","1","8","0.079","0.032","0.5","0.112","12","0.927","0","49","","","","",""
+"Citrus","paradisi ","Grapefruit","Fruit and nuts","Citrus fruits",1.5,0.35,FALSE,0.3,0.85,0.45,"2",FALSE,FALSE,"","","","32","0.63","0.1","34.4","46","10","12","0.09","0.07","139","0.047","0","8","0.036","0.02","0.25","0.042","8","0.012","0","50","","","","",""
+"Fragaria","spp. ","Strawberry","Fruit and nuts","Berries",0.25,0.2,FALSE,0.4,0.85,0.75,"0.2",FALSE,FALSE,"","","","32","0.67","0.3","58.8","1","24","16","0.41","0.14","153","0.048","1","24","0.024","0.022","0.386","0.047","13","0.386","0","6","","","","",""
+"Juglans","spp. ","Walnut","Fruit and nuts","Nuts",2.05,0.5,FALSE,0.5,1.1,0.6518,"4.5",FALSE,FALSE,"","","","619","24.06","59.33","1.7","2","31","61","3.12","3.37","523","1.36","2","513","0.057","0.13","0.47","0.583","201","3.896","0","76","","","","",""
+"Malus","sylvestris ","Apple","Fruit and nuts","Pome fruits and stone fruits",0.45,0.5,FALSE,0.5,0.3,0.3,"0.8",FALSE,FALSE,"","","","52","0.26","0.17","4.6","3","3","6","0.12","0.04","107","0.027","1","11","0.017","0.026","0.091","0.041","5","0.035","0","10","","","","",""
+"Musa","paradisiaca ","Banana","Fruit and nuts","Tropical and subtropical fruits",0.7,0.35,FALSE,0.5,1.1,1,"3",FALSE,FALSE,"","","","89","1.09","0.33","8.7","3","20","5","0.26","0.15","358","0.078","1","22","0.031","0.073","0.665","0.367","27","0.27","0","36","","","","",""
+"Musa","sapientum ","Plantain","Fruit and nuts","Tropical and subtropical fruits",0.95,0.45,FALSE,0.6,1.05,0.9,"0.8",FALSE,FALSE,"","","","122","1.3","0.37","18.4","56","22","3","0.6","0.14","499","0.081","4","34","0.052","0.054","0.686","0.299","37","","0","35","","","","",""
+"Persea","americana ","Avocado","Fruit and nuts","Tropical and subtropical fruits",0.75,0.7,FALSE,0.6,0.85,0.75,"3",FALSE,FALSE,"","","","160","2","14.66","10","7","81","12","0.55","0.64","485","0.19","7","52","0.067","0.13","1.738","0.257","29","0.142","0","26","","","","",""
+"Phoenix","dactylifera ","Dates","Fruit and nuts","Tropical and subtropical fruits",2,0.5,FALSE,0.9,0.95,0.95,"8",FALSE,FALSE,"","","","282","2.45","0.39","0.4","0","19","39","1.02","0.29","656","0.206","2","62","0.052","0.066","1.274","0.165","43","0.262","0","10","","","","",""
+"Pistacia","vera ","Pistachio nut","Fruit and nuts","Nuts",1.25,0.4,FALSE,0.4,1.1,0.45,"4",FALSE,FALSE,"","","","562","20.27","45.39","5.6","21","51","105","3.92","2.2","1025","1.3","1","490","0.87","0.16","1.3","1.7","121","1.2","0","47","","","","",""
+"Prunus","armeniaca ","Apricot","Fruit and nuts","Pome fruits and stone fruits",1.5,0.5,FALSE,0.55,0.9,0.6518,"3",FALSE,FALSE,"","","","48","1.4","0.39","10","96","9","13","0.39","0.2","259","0.078","1","23","0.03","0.04","0.6","0.054","10","0.077","0","7","","","","",""
+"Prunus","dulcis ","Almond","Fruit and nuts","Nuts",1.5,0.4,FALSE,0.4,0.9,0.6518,"5",FALSE,FALSE,"","","","579","21.15","49.93","0","0","44","269","3.71","3.12","733","1.031","1","481","0.205","1.138","3.618","0.137","270","2.179","0","60","","","","",""
+"Prunus","persica ","Peach","Fruit and nuts","Pome fruits and stone fruits",1.5,0.5,FALSE,0.55,0.9,0.6518,"3",FALSE,FALSE,"","","","39","0.91","0.25","6.6","16","4","6","0.25","0.17","190","0.068","0","20","0.024","0.031","0.806","0.025","9","0.061","0","4","","","","",""
+"Pyrus","communis ","Pear","Fruit and nuts","Pome fruits and stone fruits",1.5,0.5,FALSE,0.6,0.95,0.7518,"4",FALSE,FALSE,"","","","57","0.36","0.14","4.3","1","7","9","0.18","0.1","116","0.082","1","12","0.012","0.026","0.161","0.029","7","0.048","0","10","","","","",""
+"Vitis","vinifera ","Grapes ","Fruit and nuts","Grapes",1.5,0.35,FALSE,0.3,0.85,0.45,"2",FALSE,FALSE,"","","","67","0.63","0.35","4","5","4","14","0.29","0.04","191","0.04","2","10","0.092","0.057","0.3","0.11","5","0.718","0","42","","","","",""
+"Cicer","arietinum ","Chickpea (gram pea)","Leguminous crops","Legumes",0.8,0.5,FALSE,0.4,1,0.35,"0.4",FALSE,FALSE,"50","","","378","20.47","6.04","4","3","557","57","4.31","2.76","718","0.656","24","252","0.477","0.212","1.541","0.535","79","21.306","0","0","","","","",""
+"Lens","culinaris ","Lentil","Leguminous crops","Legumes",0.7,0.5,FALSE,0.4,1.1,0.3,"0.5",FALSE,FALSE,"40","","","352","24.63","1.06","4.5","2","479","35","6.51","3.27","677","0.754","6","281","0.873","0.211","2.605","0.54","47","1.393","0","0","","","","",""
+"Arachis","hypogaea ","Groundnut (peanut)","Oilseed crops","Temporary oilseed crops",0.75,0.5,FALSE,0.4,1.15,0.6,"0.4",FALSE,FALSE,"80","","","567","25.8","49.24","0","0","240","92","4.58","3.27","705","1.144","18","376","0.64","0.135","12.066","0.348","168","1.934","0","0","","","","",""
+"Carthamus","tinctorius ","Safflower","Oilseed crops","Temporary oilseed crops",1.5,0.6,FALSE,0.35,1.15,0.25,"0.8",FALSE,FALSE,"","","","517","16.18","38.45","0","3","160","78","4.9","5.05","687","1.747","3","644","1.163","0.415","2.284","1.17","353","2.014","0","49","","","","",""
+"Glycine","max ","Soybean","Oilseed crops","Temporary oilseed crops",0.95,0.5,FALSE,0.4,1.15,0.5,"0.7",FALSE,FALSE,"80","","","446","36.49","19.94","6","1","375","277","15.7","4.89","1797","1.658","2","704","0.874","0.87","1.623","0.377","280","2.517","0","0","","","","",""
+"Helianthus","annuus ","Sunflower","Oilseed crops","Temporary oilseed crops",1.5,0.6,FALSE,0.35,1.15,0.25,"0.8",FALSE,FALSE,"","","","584","20.78","51.46","1.4","3","227","78","5.25","5","645","1.8","9","660","1.48","0.355","8.335","1.345","325","1.95","0","46","","","","",""
+"Olea","europaea ","Olive","Oilseed crops","Permanent oilseed crops",1.45,0.65,FALSE,0.65,0.7,0.7,"4",FALSE,FALSE,"","","","115","0.84","10.68","0.9","20","0","88","3.3","0.22","8","0.251","735","3","0.003","0","0.037","0.009","4","0.02","0","0","","","","",""
+"Sesamum","indicum ","Sesame","Oilseed crops","Temporary oilseed crops",1.25,0.6,FALSE,0.35,1.1,0.25,"1",FALSE,FALSE,"","","","631","20.45","61.21","0","3","115","60","6.36","6.73","370","1.4","47","667","0.699","0.09","5.8","0.4","345","1.44","0","0","","","","",""
+"Agave","sisalana ","Sisal","Other crops","Fibre crops",0.75,0.8,FALSE,0.35,0.6,0.6,"1.5",FALSE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Gossypium","spp. ","Cotton (all varieties)","Other crops","Fibre crops",1.35,0.65,FALSE,0.35,1.15,0.6,"1.3",FALSE,FALSE,"","","","506","32.59","36.29","9","22","233","100","5.4","6","1350","1.2","25","800","0.75","0.255","3","0.782","440","2.181","0","0","","","","",""
+"Hevea","brasiliensis ","Rubber","Other crops","Rubber",1.25,0.4,FALSE,0.95,1,1,"10",FALSE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Linum","usitatissimum ","Flax ","Other crops","Fibre crops",1.25,0.5,FALSE,0.35,1.1,0.25,"1.2",FALSE,FALSE,"","","","534","18.29","42.16","0.6","0","87","255","5.73","4.34","813","1.22","30","642","1.644","0.161","3.08","0.473","392","2.482","0","0","","","","",""
+"Ipomoea","batatas ","Sweet potato","Potatoes and yams","High starch Root/tuber crops",0.5,0.35,FALSE,0.5,1.15,0.754,"0.6",FALSE,FALSE,"","","","86","1.57","0.05","2.4","709","11","30","0.61","0.3","337","0.151","55","47","0.078","0.061","0.557","0.209","25","0.258","0","28","","","","",""
+"Manihot","esculenta ","Cassava (manioc)","Potatoes and yams","High starch Root/tuber crops",0.75,0.38,FALSE,0.3,0.803,0.3,"1",FALSE,FALSE,"","","","160","1.36","0.28","20.6","1","27","16","0.27","0.34","271","0.1","14","27","0.087","0.048","0.854","0.088","21","0.384","0","16","","","","",""
+"Solamum","tuberosum ","Potato","Potatoes and yams","High starch Root/tuber crops",0.5,0.35,FALSE,0.5,1.15,0.754,"0.6",FALSE,FALSE,"","","","79","2.14","0.08","5.7","0","14","13","0.86","0.29","417","0.103","5","55","0.082","0.033","1.035","0.345","23","0.157","0","25","","","","",""
+"Saccharum","officinarum ","Sugarcane","Sugar crops","Sugar crops (other)",1.6,0.65,FALSE,0.4,1.25,0.75,"3",FALSE,FALSE,"","","","399","0","0","","","","12","0.37","0.03","29","0.009","3","1","","","","","2","0.046","","0","","","","",""
+"Allium","cepa ","Onion","Vegetables and melons","Root, bulb, or tuberous vegetables",0.45,0.3,FALSE,1.05,1.05,0.75,"0.4",FALSE,FALSE,"","","","40","1.1","0.1","7.4","0","19","23","0.21","0.17","146","0.039","4","29","0.046","0.027","0.116","0.12","10","0.129","0","10","","","","",""
+"Allium","sativum ","Garlic","Vegetables and melons","Root, bulb, or tuberous vegetables",0.4,0.3,FALSE,0.7,1,0.7,"0.3",FALSE,FALSE,"","","","149","6.36","0.5","31.2","0","3","181","1.7","1.16","401","0.299","17","153","0.2","0.11","0.7","1.235","25","1.672","0","13","","","","",""
+"Apium","graveolens ","Celery","Vegetables and melons","Leafy or stem vegetables",0.4,0.2,FALSE,0.7,1.05,1,"0.6",FALSE,FALSE,"","","","16","0.69","0.17","3.1","22","36","40","0.2","0.13","260","0.035","80","24","0.021","0.057","0.32","0.074","11","0.103","0","11","","","","",""
+"Apium","graveolens var. rapaceum ","Celeriac","Vegetables and melons","Root, bulb, or tuberous vegetables",0.4,0.2,FALSE,0.7,1.05,1,"0.6",FALSE,FALSE,"","","","42","1.5","0.3","8","0","8","43","0.7","0.33","300","0.07","100","115","0.05","0.06","0.7","0.165","20","0.158","0","14","","","","",""
+"Asparagus","officinalis ","Asparagus","Vegetables and melons","Leafy or stem vegetables",1.5,0.45,FALSE,0.5,0.957,0.3,"0.5",FALSE,FALSE,"","","","20","2.2","0.12","5.6","38","52","24","2.14","0.54","202","0.189","2","52","0.143","0.141","0.978","0.091","14","0.158","0","47","","","","",""
+"Brassica","chinensis ","Cabbage, Chinese","Vegetables and melons","Leafy or stem vegetables",0.65,0.45,FALSE,0.7,1.05,0.95,"0.4",FALSE,FALSE,"","","","13","1.5","0.2","45","223","66","105","0.8","0.19","252","0.021","65","37","0.04","0.07","0.5","0.194","19","0.159","0","12","","","","",""
+"Brassica","oleracea","Broccoli","Vegetables and melons","Leafy or stem vegetables",0.5,0.45,FALSE,0.7,1.05,0.95,"0.3",FALSE,FALSE,"","","","34","2.82","0.37","89.2","31","63","47","0.73","0.41","316","0.049","33","66","0.071","0.117","0.639","0.175","21","0.21","0","39","","","","",""
+"Brassica","oleracea var. botrytis ","Cauliflower","Vegetables and melons","Leafy or stem vegetables",0.55,0.45,FALSE,0.7,1.05,0.95,"0.4",FALSE,FALSE,"","","","25","1.92","0.28","48.2","0","57","22","0.42","0.27","299","0.039","30","44","0.05","0.06","0.507","0.184","15","0.155","0","61","","","","",""
+"Brassica","oleracea var. capitata ","Cabbage","Vegetables and melons","Leafy or stem vegetables",0.65,0.45,FALSE,0.7,1.05,0.95,"0.4",FALSE,FALSE,"","","","13","1.5","0.2","45","223","66","105","0.8","0.19","252","0.021","65","37","0.04","0.07","0.5","0.194","19","0.159","0","12","","","","",""
+"Brassica","oleracea var. gemmifera ","Brussels sprouts","Vegetables and melons","Leafy or stem vegetables",0.5,0.45,FALSE,0.7,1.05,0.95,"0.4",FALSE,FALSE,"","","","43","3.38","0.3","85","38","61","42","1.4","0.42","389","0.07","25","69","0.139","0.09","0.745","0.219","23","0.337","0","10","","","","",""
+"Citrullus","lanatus ","Watermelon","Vegetables and melons","Fruit-bearing vegetables",1.15,0.4,FALSE,0.4,1,0.75,"0.4",FALSE,FALSE,"","","","30","0.61","0.15","8.1","28","3","7","0.24","0.1","112","0.042","1","11","0.033","0.021","0.178","0.045","10","0.038","0","48","","","","",""
+"Cucumis","melo ","Cantaloupe","Vegetables and melons","Fruit-bearing vegetables",1.2,0.45,FALSE,0.5,0.85,0.6,"0.3",FALSE,FALSE,"","","","34","0.84","0.19","36.7","169","21","9","0.21","0.18","267","0.041","16","15","0.041","0.019","0.734","0.072","12","0.041","0","49","","","","",""
+"Cucumis","sativus ","Cucumber","Vegetables and melons","Fruit-bearing vegetables",0.95,0.5,FALSE,0.6,1,0.8,"0.3",FALSE,FALSE,"","","","15","0.65","0.11","2.8","5","7","16","0.28","0.2","147","0.041","2","24","0.027","0.033","0.098","0.04","13","0.079","0","3","","","","",""
+"Cucurbita","spp. ","Squash","Vegetables and melons","Fruit-bearing vegetables",1.25,0.35,FALSE,0.6,1,0.8,"0.4",FALSE,FALSE,"","","","16","1.21","0.18","17","10","29","15","0.35","0.29","262","0.051","2","38","0.048","0.142","0.487","0.218","17","0.175","0","5","","","","",""
+"Cynara","scolymus ","Artichoke","Vegetables and melons","Leafy or stem vegetables",0.75,0.45,FALSE,0.5,1,0.95,"0.7",FALSE,FALSE,"","","","47","3.27","0.15","11.7","1","68","44","1.28","0.49","370","0.231","94","90","0.072","0.066","1.046","0.116","60","0.256","0","60","","","","",""
+"Daucus","carota ssp. sativa ","Carrot","Vegetables and melons","Root, bulb, or tuberous vegetables",0.75,0.35,FALSE,0.7,1.05,0.95,"0.3",FALSE,FALSE,"","","","41","0.93","0.24","5.9","835","19","33","0.3","0.24","320","0.045","69","35","0.066","0.058","0.983","0.138","12","0.143","0","11","","","","",""
+"Helianthus","tuberosus ","Jerusalem artichoke","Vegetables and melons","Leafy or stem vegetables",0.75,0.45,FALSE,0.5,1,0.95,"0.7",FALSE,FALSE,"","","","73","2","0.01","4","1","13","14","3.4","0.12","429","0.14","4","78","0.2","0.06","1.3","0.077","17","0.06","0","31","","","","",""
+"Lactuca","sativa var. capitata ","Lettuce","Vegetables and melons","Leafy or stem vegetables",0.4,0.3,FALSE,0.7,1,0.95,"0.3",FALSE,FALSE,"","","","13","1.35","0.22","3.7","166","73","35","1.24","0.2","238","0.016","5","33","0.057","0.062","0.357","0.082","13","0.179","0","26","","","","",""
+"Lycopersicon","esculentum ","Tomato","Vegetables and melons","Fruit-bearing vegetables",1.1,0.4,FALSE,0.6,1.152,0.8,"0.6",FALSE,FALSE,"","","","18","0.88","0.2","13.7","42","15","10","0.27","0.17","237","0.059","5","24","0.037","0.019","0.594","0.08","11","0.114","0","9","","","","",""
+"Pastinaca","sativa ","Parsnip","Vegetables and melons","Root, bulb, or tuberous vegetables",0.75,0.4,FALSE,0.5,1.05,0.95,"0.4",FALSE,FALSE,"","","","75","1.2","0.3","17","0","67","36","0.59","0.59","375","0.12","10","71","0.09","0.05","0.7","0.09","29","0.56","0","15","","","","",""
+"Raphanus","sativus ","Radish","Vegetables and melons","Root, bulb, or tuberous vegetables",0.4,0.3,FALSE,0.7,0.9,0.85,"0.3",FALSE,FALSE,"","","","23","1.43","0.25","8","1","60","19","0.57","0.62","302","0.341","22","40","0.016","0.028","0.255","0.057","13","0.138","0","9","","","","",""
+"Spinacia","oleracea ","Spinach","Vegetables and melons","Leafy or stem vegetables",0.4,0.2,FALSE,0.7,1,0.95,"0.3",FALSE,FALSE,"","","","23","2.86","0.39","28.1","469","194","99","2.71","0.53","558","0.13","79","49","0.078","0.189","0.724","0.195","79","0.897","0","28","","","","",""
+"Capsicum","spp. ","Chili (all varieties)","Beverage and spice crops","Temporary spice crops",0.6,0.4,TRUE,0.6,1.15,1.1,"",TRUE,FALSE,"","","","40","1.87","0.44","143.7","48","23","14","1.03","0.26","322","0.129","9","43","0.072","0.086","1.244","0.506","23","0.187","0","27","","","","",""
+"Carum","carvi ","Caraway seeds","Beverage and spice crops","Temporary spice crops",0.6,0.4,TRUE,0.6,1.15,1.1,"",TRUE,FALSE,"","","","333","19.77","14.59","21","18","10","689","16.23","5.5","1351","0.91","17","568","0.383","0.379","3.606","0.36","258","1.3","0","0","","","","",""
+"Cinnamomum","verum ","Cinnamon","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","247","3.99","1.24","3.8","15","6","1002","8.32","1.83","431","0.339","10","64","0.022","0.041","1.332","0.158","60","17.466","0","0","","","","",""
+"Elettaria","cardamomum ","Cardamom","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","311","10.76","6.7","21","0","","383","13.97","7.47","1119","0.383","18","178","0.198","0.182","1.102","0.23","229","28","0","0","","","","",""
+"Moringa","oleifera ","Drumstick tree","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","64","9.4","1.4","51.7","378","40","185","4","0.6","337","0.105","9","112","0.257","0.66","2.22","1.2","147","1.063","0","38","","","","",""
+"Myristica","fragrans ","Mace","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","475","6.71","32.38","21","40","76","252","13.9","2.3","463","2.467","80","110","0.312","0.448","1.35","0.16","163","1.5","0","0","","","","",""
+"Myristica","fragrans ","Nutmeg","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","525","5.84","36.31","3","5","76","184","3.04","2.15","350","1.027","16","213","0.346","0.057","1.299","0.16","183","2.9","0","0","","","","",""
+"Pimpinella","anisum ","Anise seeds","Beverage and spice crops","Temporary spice crops",0.6,0.4,TRUE,0.6,1.15,1.1,"",TRUE,FALSE,"","","","337","17.6","15.9","21","16","10","646","36.96","5.3","1441","0.91","16","440","0.34","0.29","3.06","0.65","170","2.3","0","0","","","","",""
+"Piper","nigrum ","Black pepper","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","27","1.66","0.45","82.7","17","29","14","0.46","0.25","256","0.094","13","32","0.081","0.054","1.242","0.357","17","0.1","0","18","","","","",""
+"Vanilla","planifolia ","Vanilla","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","288","0.06","0.06","0","0","0","11","0.12","0.11","148","0.072","9","6","0.011","0.095","0.425","0.026","12","0.23","0","0","","","","",""
+"Zingiber","officinale ","Ginger","Beverage and spice crops","Permanent spice crops",0.99,0.4,TRUE,0.75,1.04,0.99,"",TRUE,FALSE,"","","","335","8.98","4.24","0.7","2","13","114","19.8","3.64","1320","0.48","27","168","0.046","0.17","9.62","0.626","214","33.3","0","0","","","","",""
+"Chenopodium","quinoa ","Quinoa","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"",TRUE,FALSE,"","","","368","14.12","6.07","","1","184","47","4.57","3.1","563","0.59","5","457","0.36","0.318","1.52","0.487","197","2.033","0","0","","","","",""
+"Eragrostis","abyssinica ","Tef","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"",TRUE,FALSE,"","","","367","13.3","2.38","","0","","180","7.63","3.63","427","0.81","12","429","0.39","0.27","3.363","0.482","184","9.24","","0","","","","",""
+"Fagopyrum","esculentum ","Buckwheat","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"1",TRUE,FALSE,"","","","343","13.25","3.4","0","0","30","18","2.2","2.4","460","1.1","1","347","0.101","0.425","7.02","0.21","231","1.3","0","0","","","","",""
+"Triticum","durum ","Durum wheat","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"1",TRUE,FALSE,"","","","339","13.68","2.47","0","0","43","34","3.52","4.16","431","0.553","2","508","0.419","0.121","6.738","0.419","144","3.012","0","0","","","","",""
+"Zea","mays ","Maize (grain)","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"",TRUE,FALSE,"","","","365","9.42","4.74","0","11","19","7","2.71","2.21","287","0.314","35","210","0.385","0.201","3.627","0.622","127","0.485","0","0","","","","",""
+"Zea","mays ","Maize (sweet corn)","Cereals","Cereals",1.303333333,0.5072,TRUE,0.443333333,1.073333333,0.433333333,"",TRUE,FALSE,"","","","86","3.27","1.35","6.8","9","42","2","0.52","0.46","270","0.054","15","89","0.155","0.055","1.77","0.093","37","0.163","0","64","","","","",""
+"Achras","sapota ","Sapodilla","Fruit and nuts","Other fruits",1.171875,0.45,TRUE,0.509375,0.865625,0.6536875,"",TRUE,FALSE,"","","","83","0.44","1.1","14.7","3","14","21","0.8","0.1","193","0.086","12","12","0","0.02","0.2","0.037","12","","0","20","","","","",""
+"Anacardium","occidentale ","Cashew nuts","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","553","18.22","43.85","0.5","0","25","37","6.68","5.78","660","2.195","12","593","0.423","0.058","1.062","0.417","292","1.655","0","28","","","","",""
+"Anno","reticulate ","Custard apple","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","101","1.7","0.6","19.2","2","","30","0.71","","382","","4","21","0.08","0.1","0.5","0.221","18","","0","42","","","","",""
+"Artocarpus","altilis ","Breadfruit","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","103","1.07","0.23","29","0","14","17","0.54","0.12","490","0.084","2","30","0.11","0.03","0.9","0.1","25","0.06","0","22","","","","",""
+"Bertholletia","excelsa ","Brazil nut","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","659","14.32","67.1","0.7","0","22","160","2.43","4.06","659","1.743","3","725","0.617","0.035","0.295","0.101","376","1.223","0","49","","","","",""
+"Carica","papaya ","Papaya (pawpaw)","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","43","0.47","0.26","60.9","47","37","20","0.25","0.08","182","0.045","8","10","0.023","0.027","0.357","0.038","21","0.04","0","38","","","","",""
+"Carya","illinoensis ","Pecan nut","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","691","9.17","71.97","1.1","3","22","70","2.53","4.53","410","1.2","0","277","0.66","0.13","1.167","0.21","121","4.5","0","47","","","","",""
+"Castanea","sativa ","Chestnut","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","374","6.39","4.45","15","0","109","67","2.38","0.35","986","0.65","37","175","0.295","0.36","0.85","0.663","74","1.3","0","20","","","","",""
+"Citrus","aurantium ","Orange (bitter)","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","47","0.94","0.12","53.2","11","30","40","0.1","0.07","181","0.045","0","14","0.087","0.04","0.282","0.06","10","0.025","0","27","","","","",""
+"Citrus","grandis ","Pomelo","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","38","0.76","0.04","61","0","","4","0.11","0.08","216","0.048","1","17","0.034","0.027","0.22","0.036","6","0.017","0","44","","","","",""
+"Citrus","limon ","Lemon","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","29","1.1","0.3","53","1","11","26","0.6","0.06","138","0.037","2","16","0.04","0.02","0.1","0.08","8","0.03","0","47","","","","",""
+"Citrus","reticulata ","Clementine","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","47","0.85","0.15","48.8","","24","30","0.14","0.06","177","0.043","1","21","0.086","0.03","0.636","0.075","10","0.023","","23","","","","",""
+"Citrus","sinensis ","Orange","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","47","0.94","0.12","53.2","11","30","40","0.1","0.07","181","0.045","0","14","0.087","0.04","0.282","0.06","10","0.025","0","27","","","","",""
+"Citrus","spp. ","Lime","Fruit and nuts","Citrus fruits",1.5,0.35,TRUE,0.3,0.85,0.45,"",TRUE,FALSE,"","","","30","0.7","0.2","29.1","2","8","33","0.6","0.11","102","0.065","2","18","0.03","0.02","0.2","0.043","6","0.008","0","16","","","","",""
+"Corylus","avellana ","Hazelnut (filbert)","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","628","14.95","60.75","6.3","1","113","114","4.7","2.45","680","1.725","0","290","0.643","0.113","1.8","0.563","163","6.175","0","59","","","","",""
+"Cydonia","oblonga ","Quince","Fruit and nuts","Pome fruits and stone fruits",1.2375,0.5,TRUE,0.55,0.7625,0.58885,"",TRUE,FALSE,"","","","57","0.4","0.1","15","2","3","11","0.7","0.04","197","0.13","4","17","0.02","0.03","0.2","0.04","8","","0","39","","","","",""
+"Diospyros","kaki ","Persimmon (kaki)","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","70","0.58","0.19","7.5","81","8","8","0.15","0.11","161","0.113","1","17","0.03","0.02","0.1","0.1","9","0.355","0","16","","","","",""
+"Diospyros","virginiana ","Persimmon","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","70","0.58","0.19","7.5","81","8","8","0.15","0.11","161","0.113","1","17","0.03","0.02","0.1","0.1","9","0.355","0","16","","","","",""
+"Ficus","carica ","Fig","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","74","0.75","0.3","2","7","6","35","0.37","0.15","232","0.07","1","14","0.06","0.05","0.4","0.113","17","0.128","0","1","","","","",""
+"Litchi","chinensis ","Litchi","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","66","0.83","0.44","71.5","0","14","5","0.31","0.07","171","0.148","1","31","0.011","0.065","0.603","0.1","10","0.055","0","40","","","","",""
+"Macadamia","spp. ternifolia ","Macadamia nut","Fruit and nuts","Nuts",1.6,0.433333333,TRUE,0.433333333,1.033333333,0.584533333,"",TRUE,FALSE,"","","","718","7.91","75.77","1.2","0","11","85","3.69","1.3","368","0.756","5","188","1.195","0.162","2.473","0.275","130","4.131","0","69","","","","",""
+"Mangifera","indica ","Mango","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","60","0.82","0.38","36.4","54","43","11","0.16","0.09","168","0.111","1","14","0.028","0.038","0.669","0.119","10","0.063","0","29","","","","",""
+"Morus","spp. ","Mulberry (all varieties)","Fruit and nuts","Other fruits",1.171875,0.45,TRUE,0.509375,0.865625,0.6536875,"",TRUE,FALSE,"","","","43","1.44","0.39","36.4","1","6","39","1.85","0.12","194","0.06","10","38","0.029","0.101","0.62","0.05","18","","0","0","","","","",""
+"Prunus","domestica ","Plum","Fruit and nuts","Pome fruits and stone fruits",1.2375,0.5,TRUE,0.55,0.7625,0.58885,"",TRUE,FALSE,"","","","46","0.7","0.28","9.5","17","5","6","0.17","0.1","157","0.057","0","16","0.028","0.026","0.417","0.029","7","0.052","0","6","","","","",""
+"Prunus","persica var. nectarina ","Nectarine","Fruit and nuts","Pome fruits and stone fruits",1.2375,0.5,TRUE,0.55,0.7625,0.58885,"",TRUE,FALSE,"","","","44","1.06","0.32","5.4","17","5","6","0.28","0.17","201","0.086","0","26","0.034","0.027","1.125","0.025","9","0.054","0","9","","","","",""
+"Prunus","spp. ","Cherry (all varieties)","Fruit and nuts","Pome fruits and stone fruits",1.2375,0.5,TRUE,0.55,0.7625,0.58885,"",TRUE,FALSE,"","","","50","1","0.3","10","64","8","16","0.32","0.1","173","0.104","3","15","0.03","0.04","0.4","0.044","9","0.112","0","10","","","","",""
+"Psidium","guajava ","Guava","Fruit and nuts","Tropical and subtropical fruits",0.97,0.5,TRUE,0.62,0.85,0.78,"",TRUE,FALSE,"","","","68","2.55","0.95","228.3","31","49","18","0.26","0.23","417","0.23","2","40","0.067","0.04","1.084","0.11","22","0.15","0","22","","","","",""
+"Punica","granatum ","Pomegranate","Fruit and nuts","Other fruits",1.171875,0.45,TRUE,0.509375,0.865625,0.6536875,"",TRUE,FALSE,"","","","83","1.67","1.17","10.2","0","38","10","0.3","0.35","236","0.158","3","36","0.067","0.053","0.293","0.075","12","0.119","0","44","","","","",""
+"Ribes","spp. ","Currants (all varieties)","Fruit and nuts","Berries",0.575,0.35,TRUE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","63","1.4","0.41","181","12","","55","1.54","0.27","322","0.086","2","59","0.05","0.05","0.3","0.066","24","0.256","0","2","","","","",""
+"Ribes","spp. ","Gooseberry (all varieties)","Fruit and nuts","Berries",0.575,0.35,TRUE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","44","0.88","0.58","27.7","15","6","25","0.31","0.12","198","0.07","1","27","0.04","0.03","0.3","0.08","10","0.144","0","0","","","","",""
+"Rubus","spp. ","Blackberries ","Fruit and nuts","Berries",0.575,0.35,FALSE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","43","1.39","0.49","21","11","25","29","0.62","0.53","162","0.165","1","22","0.02","0.026","0.646","0.03","20","0.646","0","4","","","","",""
+"Rubus","spp. ","Raspberry (all varieties)","Fruit and nuts","Berries",0.575,0.35,TRUE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","52","1.2","0.65","26.2","2","21","25","0.69","0.42","151","0.09","1","29","0.032","0.038","0.598","0.055","22","0.67","0","4","","","","",""
+"Vaccinium","spp. ","Blueberry","Fruit and nuts","Berries",0.575,0.35,TRUE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","57","0.74","0.33","9.7","3","6","6","0.28","0.16","77","0.057","1","12","0.037","0.041","0.418","0.052","6","0.336","0","5","","","","",""
+"Vaccinium","spp. ","Cranberry","Fruit and nuts","Berries",0.575,0.35,TRUE,0.475,0.875,0.775,"",TRUE,FALSE,"","","","46","0.39","0.13","13.3","3","1","8","0.25","0.1","85","0.061","2","13","0.012","0.02","0.101","0.057","6","0.36","0","2","","","","",""
+"Cajanus","cajan ","Pigeon pea","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"60","","","343","21.7","1.49","0","1","456","130","5.23","2.76","1392","1.057","17","367","0.643","0.187","2.965","0.283","183","1.791","0","0","","","","",""
+"Pisum","sativum ","Pea","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"60","","","352","23.82","1.16","1.8","7","274","37","4.82","3.55","823","0.815","15","321","0.726","0.215","2.889","0.174","49","1.22","0","0","","","","",""
+"Trigonella","foenum-graecum ","Fenugreek","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"40","","","323","23","6.41","3","3","57","176","33.53","2.5","770","1.11","67","296","0.322","0.366","1.64","0.6","191","1.228","0","0","","","","",""
+"Vicia","faba ","Broad bean","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"100","","","333","23.58","0.83","4.5","0","394","143","8.2","2.79","1406","0.958","24","407","0.529","0.219","2.06","0.397","140","1.021","0","0","","","","",""
+"Vig","spp. ","Beans","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"40","","","333","23.58","0.83","4.5","0","394","143","8.2","2.79","1406","0.958","24","407","0.529","0.219","2.06","0.397","140","1.021","0","0","","","","",""
+"Vig","unguiculata ","Cowpea","Leguminous crops","Legumes",0.75,0.5,TRUE,0.4,1.05,0.325,"",TRUE,FALSE,"60","","","343","23.85","2.07","1.5","2","639","85","9.95","6.11","1375","1.059","58","438","0.68","0.17","2.795","0.361","333","1.544","0","0","","","","",""
+"Brassica","napus ","Rapeseed (colza)","Oilseed crops","Temporary oilseed crops",1.19,0.56,TRUE,0.37,1.14,0.37,"",TRUE,FALSE,"","","","884","0","100","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","","","","",""
+"Brassica","nigra ","Mustard","Oilseed crops","Temporary oilseed crops",1.19,0.56,TRUE,0.37,1.14,0.37,"",TRUE,FALSE,"","","","27","2.86","0.42","70","151","12","115","1.64","0.25","384","0.165","20","58","0.08","0.11","0.8","0.18","32","","0","7","","","","",""
+"Cocos","nucifera ","Coconut","Oilseed crops","Permanent oilseed crops",1.45,0.65,TRUE,0.65,0.7,0.7,"",TRUE,FALSE,"","","","354","3.33","33.49","3.3","0","26","14","2.43","1.1","356","0.435","20","113","0.066","0.02","0.54","0.054","32","1.5","0","48","","","","",""
+"Elaeis","guineensis ","Oil palm","Oilseed crops","Permanent oilseed crops",1.45,0.65,TRUE,0.65,0.7,0.7,"",TRUE,FALSE,"","","","884","0","100","0","0","0","0","0.01","0","0","0","0","0","0","0","0","0","0","","0","0","","","","",""
+"Elaeis","guineensis ","Palm oil","Oilseed crops","Permanent oilseed crops",1.45,0.65,TRUE,0.65,0.7,0.7,"",TRUE,FALSE,"","","","884","0","100","0","0","0","0","0.01","0","0","0","0","0","0","0","0","0","0","","0","0","","","","",""
+"Papaver","somniferum ","Poppy seed","Oilseed crops","Temporary oilseed crops",1.19,0.56,TRUE,0.37,1.14,0.37,"",TRUE,FALSE,"","","","525","17.99","41.56","1","0","82","1438","9.76","7.9","719","1.627","26","870","0.854","0.1","0.896","0.247","347","6.707","0","0","","","","",""
+"Sinapis","alba ","Mustard","Oilseed crops","Temporary oilseed crops",1.19,0.56,TRUE,0.37,1.14,0.37,"",TRUE,FALSE,"","","","27","2.86","0.42","70","151","12","115","1.64","0.25","384","0.165","20","58","0.08","0.11","0.8","0.18","32","","0","7","","","","",""
+"Cannabis","sativa ssp. indica ","Hemp ","Other crops","Fibre crops",1.116666667,0.65,TRUE,0.35,0.95,0.483333333,"",TRUE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Corchorus","spp. ","Jute","Other crops","Fibre crops",1.116666667,0.65,TRUE,0.35,0.95,0.483333333,"",TRUE,FALSE,"","","","34","4.65","0.25","37","278","123","208","4.76","0.79","559","0.255","8","83","0.133","0.546","1.26","0.6","64","0.123","0","38","","","","",""
+"Cymbopogon","citratus ","Lemon grass","Other crops","Fibre crops",1.116666667,0.65,TRUE,0.35,0.95,0.483333333,"",TRUE,FALSE,"","","","99","1.82","0.49","2.6","0","75","65","8.17","2.23","723","0.266","6","101","0.065","0.135","1.101","0.08","60","5.224","0","35","","","","",""
+"Lolium","spp. ","Ryegrass ","Other crops","Other crops",1.32,0.58,TRUE,0.52,0.94,0.66,"",TRUE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Medicago","sativa ","Alfalfa for fodder","Other crops","Grasses and other fodder crops",2,0.55,TRUE,0.6,0.85,0.85,"",TRUE,FALSE,"200","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Nicotia","tabacum ","Tobacco","Other crops","Tobacco",1.32,0.58,TRUE,0.52,0.94,0.66,"",TRUE,FALSE,"","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Trifolium","spp. ","Clover","Other crops","Grasses and other fodder crops",2,0.55,TRUE,0.6,0.85,0.85,"",TRUE,FALSE,"150","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
+"Colocasia","esculenta ","Taro","Potatoes and yams","High starch Root/tuber crops",0.583333333,0.36,TRUE,0.433333333,1.034333333,0.602666667,"",TRUE,FALSE,"","","","112","1.5","0.2","4.5","4","22","43","0.55","0.23","591","0.172","11","84","0.095","0.025","0.6","0.283","33","0.383","0","14","","","","",""
+"Dioscorea","spp. ","Yam","Potatoes and yams","High starch Root/tuber crops",0.583333333,0.36,TRUE,0.433333333,1.034333333,0.602666667,"",TRUE,FALSE,"","","","118","1.53","0.17","17.1","7","23","17","0.54","0.24","816","0.178","9","55","0.112","0.032","0.552","0.293","21","0.397","0","14","","","","",""
+"Maranta","arundinacea ","Arrowroot","Potatoes and yams","High starch Root/tuber crops",0.583333333,0.36,TRUE,0.433333333,1.034333333,0.602666667,"",TRUE,FALSE,"","","","65","4.24","0.2","1.9","1","338","6","2.22","0.63","454","0.121","26","98","0.143","0.059","1.693","0.266","25","0.174","0","15","","","","",""
+"Beta","vulgaris ","Beet","Sugar crops","Sugar crops (root)",0.8,0.5,TRUE,0.4,1.25,0.75,"",TRUE,FALSE,"","","","43","1.61","0.17","4.9","2","109","16","0.8","0.35","325","0.075","78","40","0.031","0.04","0.334","0.067","23","0.329","0","33","","","","",""
+"Abelmoschus","esculentus ","Okra","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"",TRUE,FALSE,"","","","33","1.93","0.19","23","36","60","82","0.62","0.58","299","0.109","7","61","0.2","0.06","1","0.215","57","0.788","0","14","","","","",""
+"Agaricus","spp. ","Mushrooms","Vegetables and melons","Mushrooms and truffles",0.720454545,0.375,TRUE,0.643181818,1.016318182,0.854545455,"",TRUE,FALSE,"","","","22","3.09","0.34","2.1","0","17","3","0.5","0.52","318","0.318","5","86","0.081","0.402","3.607","0.104","9","0.047","0.04","3","","","","",""
+"Allium","porrum ","Leek","Vegetables and melons","Root, bulb, or tuberous vegetables",0.525,0.308333333,TRUE,0.725,1.016666667,0.866666667,"",TRUE,FALSE,"","","","61","1.5","0.3","12","83","64","59","2.1","0.12","180","0.12","20","35","0.06","0.03","0.4","0.233","28","0.481","0","56","","","","",""
+"Brassica","napus var. napobrassica ","Rutabaga (swede)","Vegetables and melons","Root, bulb, or tuberous vegetables",0.525,0.308333333,TRUE,0.725,1.016666667,0.866666667,"",TRUE,FALSE,"","","","37","1.08","0.16","25","0","21","43","0.44","0.24","305","0.032","12","53","0.09","0.04","0.7","0.1","20","0.131","0","15","","","","",""
+"Brassica","oleracea var. acephala ","Kale","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","49","4.28","0.93","120","500","141","150","1.47","0.56","491","1.499","38","92","0.11","0.13","1","0.271","47","0.659","0","28","","","","",""
+"Brassica","oleracea var. gongylodes ","Kohlrabi","Vegetables and melons","Root, bulb, or tuberous vegetables",0.525,0.308333333,TRUE,0.725,1.016666667,0.866666667,"",TRUE,FALSE,"","","","27","1.7","0.1","62","2","16","24","0.4","0.03","350","0.129","20","46","0.05","0.02","0.4","0.15","19","0.139","0","54","","","","",""
+"Brassica","rapa ","Turnip","Vegetables and melons","Root, bulb, or tuberous vegetables",0.525,0.308333333,TRUE,0.725,1.016666667,0.866666667,"",TRUE,FALSE,"","","","28","0.9","0.1","21","0","15","30","0.3","0.27","191","0.085","67","27","0.04","0.03","0.4","0.09","11","0.134","0","19","","","","",""
+"Cichorium","endivia ","Endive","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","17","1.25","0.2","6.5","108","142","52","0.83","0.79","314","0.099","22","28","0.08","0.075","0.4","0.02","15","0.42","0","14","","","","",""
+"Cichorium","intybus ","Chicory","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","17","0.9","0.1","2.8","1","37","19","0.24","0.16","211","0.051","2","26","0.062","0.027","0.16","0.042","10","0.1","0","11","","","","",""
+"Cucumis","melo ","Melon ","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"0.4",TRUE,FALSE,"","","","34","0.84","0.19","36.7","169","21","9","0.21","0.18","267","0.041","16","15","0.041","0.019","0.734","0.072","12","0.041","0","49","","","","",""
+"Cucurbita","spp. ","Gourd (American)","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"",TRUE,FALSE,"","","","26","1","0.1","9","426","16","21","0.8","0.32","340","0.127","1","44","0.05","0.11","0.6","0.061","12","0.125","0","30","","","","",""
+"Cucurbita","spp. ","Pumpkin","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"",TRUE,FALSE,"","","","26","1","0.1","9","426","16","21","0.8","0.32","340","0.127","1","44","0.05","0.11","0.6","0.061","12","0.125","0","30","","","","",""
+"Cynara","cardunculus ","Cardoon","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","17","0.7","0.1","2","0","68","70","0.7","0.17","400","0.231","170","23","0.02","0.03","0.3","0.116","42","0.256","0","51","","","","",""
+"Foeniculum","vulgare ","Fennel","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","31","1.24","0.2","12","48","27","49","0.73","0.2","414","0.066","52","50","0.01","0.032","0.64","0.047","17","0.191","0","28","","","","",""
+"Lagenaria","spp. ","Gourd (African)","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"",TRUE,FALSE,"","","","26","1","0.1","9","426","16","21","0.8","0.32","340","0.127","1","44","0.05","0.11","0.6","0.061","12","0.125","0","30","","","","",""
+"Lepidium","sativum ","Cress","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","32","2.6","0.7","69","346","80","81","1.3","0.23","606","0.17","14","76","0.08","0.26","1","0.247","38","0.553","0","29","","","","",""
+"Rheum","spp. ","Rhubarb","Vegetables and melons","Leafy or stem vegetables",0.76,0.393333333,TRUE,0.683333333,1.020466667,0.913333333,"",TRUE,FALSE,"","","","21","0.9","0.2","8","5","7","86","0.22","0.1","288","0.021","4","14","0.02","0.03","0.3","0.024","12","0.196","0","25","","","","",""
+"Solanum","melongena ","Eggplant","Vegetables and melons","Fruit-bearing vegetables",1.13,0.42,TRUE,0.54,1.0004,0.75,"",TRUE,FALSE,"","","","25","0.98","0.18","2.2","1","22","9","0.23","0.16","229","0.081","2","24","0.039","0.037","0.649","0.084","14","0.232","0","19","","","","",""
+"Tragopogon","porrifolius ","Salsify","Vegetables and melons","Root, bulb, or tuberous vegetables",0.525,0.308333333,TRUE,0.725,1.016666667,0.866666667,"",TRUE,FALSE,"","","","82","3.3","0.2","8","0","26","60","0.7","0.38","380","0.089","20","75","0.08","0.22","0.5","0.277","23","0.268","0","13","","","","",""
diff --git a/packages/api/db/seeds/seedData/disease.csv b/packages/api/db/seeds/seedData/disease.csv
new file mode 100644
index 0000000000..d0af4710cb
--- /dev/null
+++ b/packages/api/db/seeds/seedData/disease.csv
@@ -0,0 +1,510 @@
+disease_common_name,disease_scientific_name,disease_group
+Bacterial Soft Rot of Pepper,Pectobacterium carotovorum subsp. carotovorum,Bacteria
+Bacterial Black Spot of Mango,Xanthomonas axonopodis pv. mangiferaeindicae,Bacteria
+Bacterial Blight of Rice,Xanthomonas oryzae pv. oryzae,Bacteria
+Angular Leaf Spot Disease,Pseudomonas syringae,Bacteria
+Bacterial Leaf Streak,Xanthomonas oryzae pv. oryzicola,Bacteria
+Bacterial Spot,Xanthomonas spp.,Bacteria
+Bacterial Canker of Mango,Xanthomonas citri pv. mangiferaeindicae,Bacteria
+Halo Blight,Pseudomonas savastanoi pv. phaseolicola,Bacteria
+Fire Blight,Erwinia amylovora,Bacteria
+Black Rot,Xanthomonas campestris pv. campestris,Bacteria
+Angular Leaf Spot of Strawberry,Xanthomonas fragariae,Bacteria
+Bacterial Canker,Pseudomonas syringae pv. syringae,Bacteria
+Potato Scab,Streptomyces scabies,Bacteria
+Blast of Citrus,Pseudomonas syringae pv. syringae,Bacteria
+Chlorotic Leaf Roll of Apricot,Phytoplasma prunorum,Bacteria
+Sugarcane Ratoon Stunting Disease,Leifsonia xyli,Bacteria
+Holcus Spot,Pseudomonas syringae pv. syringae,Bacteria
+Blackleg,Pectobacterium atrosepticum,Bacteria
+Bacterial Wilt,Ralstonia solanacearum,Bacteria
+Bacterial Leaf Blight of Sugarcane,Acidovorax avenae,Bacteria
+Citrus Stubborn Disease,Spiroplasma citri,Bacteria
+Bacterial Blight of Cotton,Xanthomonas citri subsp. malvacearum,Bacteria
+Citrus Canker,Xanthomonas axonopodis pv. citri,Bacteria
+Banana Xanthomonas Wilt,Xanthomonas musacearum,Bacteria
+Bacterial Spot on Stone Fruits,Xanthomonas arboricola,Bacteria
+Bacterial Spot of Citrus,Xanthomonas alfalfae,Bacteria
+Bacterial Soft Rot of Banana,Pectobacterium carotovorum,Bacteria
+Phony Peach Disease,Xylella fastidiosa,Bacteria
+Bacterial Fruit Blotch,Acidovorax citrulli,Bacteria
+Bacterial Canker of Tomato,Clavibacter michiganensis subs. michiganensis,Bacteria
+Bacterial Speck of Tomato,Pseudomonas syringae pv. tomato,Bacteria
+Bacterial Panicle Blight,Burkholderia spp.,Bacteria
+Crown Gall,Agrobacterium,Bacteria
+Moko Disease,Ralstonia solanacearum,Bacteria
+Cassava Phytoplasma Disease,Phytoplasma spp.,Bacteria
+Goss's Wilt,Clavibacter michiganensis,Bacteria
+Citrus Variegated Chlorosis,Xylella fastidiosa subsp. pauca,Bacteria
+Citrus Greening Disease,Candidatus Liberibacter,Bacteria
+Bacterial Stalk Rot of Maize,Erwinia chrysanthemi,Bacteria
+Olive Knot,Pseudomonas savastanoi pv. savastanoi,Bacteria
+Bacterial Pustule,Xanthomonas axonopodis,Bacteria
+Bacterial Leaf Blight,Xanthomonas phaseoli,Bacteria
+Cassava Bacterial Blight,Xanthomonas axonopodis pv. manihotis,Bacteria
+Tomato Late Blight,Phytophthora infestans,Fungus
+Powdery Mildew of Mango,Oidium mangiferae,Fungus
+Late and Early Leaf Spot,Mycosphaerella spp.,Fungus
+Peanut Rust,Puccinia arachidis,Fungus
+Anthracnose of Soybean,Colletotrichum truncatum,Fungus
+Citrus Scab,Elsinoe fawcettii,Fungus
+Common Rust of Maize,Puccinia sorghi,Fungus
+Brown Spot of Rice,Cochliobolus miyabeanus,Fungus
+Peach Leaf Curl,Taphrina deformans,Fungus
+Yellow Sigatoka,Mycosphaerella musicola,Fungus
+Blight of Pepper,Phytophthora capsici,Fungus
+Sheath Rot of Rice,Sarocladium oryzae,Fungus
+Turcicum Leaf Blight,Setosphaeria turcica,Fungus
+Bean Rust,Uromyces appendiculatus,Fungus
+Cherry Leaf Spot,Blumeriella jaapii,Fungus
+Corn Grey Leaf Spot,Cercospora zeae-maydis,Fungus
+Early Blight of Potato,Alternaria solani,Fungus
+Anthracnose of Citrus,Colletotrichum gloeosporioides,Fungus
+Anthracnose Leaf Blight,Colletotrichum graminicola,Fungus
+Black Sigatoka,Mycosphaerella fijiensis,Fungus
+False Smut,Villosiclava virens,Fungus
+Anthracnose of Papaya and Mango,Colletotrichum gloeosporioides,Fungus
+Black Spot Disease of Papaya,Asperisporium caricae,Fungus
+Anthracnose of Banana,Colletotrichum musae,Fungus
+Phaeosphaeria Leaf Spot,Phaeosphaeria maydis,Fungus
+Alternaria Brown Spot,Alternaria alternata,Fungus
+Early Blight of Tomato,Alternaria solani,Fungus
+Powdery Mildew,Erysiphaceae,Fungus
+Peach Scab,Venturia carpophila,Fungus
+Frogeye Leaf Spot,Cercospora sojina,Fungus
+Rust of Soybean,Phakopsora pachyrhizi,Fungus
+Apple Scab,Venturia inaequalis,Fungus
+Target Spot of Soybean,Corynespora cassiicola,Fungus
+Eyespot of Corn,Kabatiella zeae,Fungus
+Rust on Blackgram,Uromyces phaseoli,Fungus
+Leaf Scald of Rice,Monographella albescens,Fungus
+Stem rot of Peanut,Athelia rolfsii,Fungus
+Rice Sheath Blight,Rhizoctonia solani,Fungus
+Maize Smut,Ustilago maydis,Fungus
+Verticillium Wilt,Verticillium spp.,Fungus
+Blast of Rice,Magnaporthe oryzae,Fungus
+Anthracnose of Pepper,Glomerella cingulata,Fungus
+Sooty Mold,"Capnodium, Fumago, Scorias spp",Fungus
+Cercospora Leaf Spot of Gram,Cercospora canescens,Fungus
+Phyllosticta Leaf Spot,Phyllosticta arachidis-hypogaea,Fungus
+Downy Mildew,Peronosporales,Fungus
+Phytophthora Root Rot,Phytophthora cactorum,Fungus
+Crown Rot,Phytophthora cactorum,Fungus
+Powdery Mildew of Soybean,Erysiphe diffusa,Fungus
+Phomopsis Cane and Leaf Spot,Phomopsis viticola,Fungus
+Leaf and Glume Blotch of Wheat,Parastagonospora nodorum,Fungus
+Leaf Mold of Tomato,Mycovellosiella fulva,Fungus
+Fusarium Wilt,Fusarium oxysporum,Fungus
+Rough Leaf Spot Of Sorghum,Ascochyta sorghi,Fungus
+Root Rot of Cotton,Macrophomina phaseolina,Fungus
+Head Smut,Sphacelotheca reiliana,Fungus
+Olive Leaf Spot,Fusicladium oleagineum,Fungus
+Anthracnose of Almond,Colletotrichum acutatum,Fungus
+Cercospora Leaf Spot of Cotton,Mycosphaerella gossypina,Fungus
+Common Bunt of Wheat,Tilletia caries,Fungus
+Freckle of Banana,Phyllosticta maculata,Fungus
+Millet Cercospora Leaf Spot,Cercospora penniseti,Fungus
+Tan Spot,Pyrenophora tritici-repentis,Fungus
+Yellow Stripe Rust,Puccinia striiformis,Fungus
+European Pear Rust,Gymnosporangium sabinae,Fungus
+Leek Rust,Puccinia porri,Fungus
+Stem Rot of RIce,Magnaporthe salvinii,Fungus
+Chocolate Spot of Broad Bean,Botrytis fabae,Fungus
+Northern Stem Canker,Diaporthe phaseolorum var. caulivora,Fungus
+Sudden Death Syndrome,Fusarium virguliforme,Fungus
+Blossom Blight,Monilinia fructicola,Fungus
+Angular Leaf Spot,Mycosphaerella angulata,Fungus
+Leaf Spot of Citrus,Pseudocercospora angolensis,Fungus
+Zonate Leaf Spot,Gloeocercospora sorghi,Fungus
+Leaf Spot of Beet,Cercospora beticola,Fungus
+Leaf Blight of Cucurbits,Alternaria cucumerina,Fungus
+Ergot,Claviceps fusiformis,Fungus
+Didymella Stem Rot of Tomato,Didymella lycopersici,Fungus
+Black Scurf,Rhizoctonia solani,Fungus
+Black Spot Disease,Colletotrichum lindemuthianum,Fungus
+Constriction Canker of Peach,Phomopsis amygdali,Fungus
+Lettuce Big-Vein Disease,Olpidium brassicae,Fungus
+Cercospora Leaf Spot of Eggplant,Cercospora melongenae,Fungus
+Pea Rust,Uromyces pisi-sativi,Fungus
+Bottom Rot,Thanatephorus cucumeris,Fungus
+Bud Necrosis,Unknown Pathogen,Fungus
+Esca,Togninia minima,Fungus
+Jacket Rot,Monilinia spp,Fungus
+Armillaria Root Rot,Armillaria mellea,Fungus
+Brown Rot,Monilinia laxa,Fungus
+Pear Scab,Venturia pyrina,Fungus
+Anthracnose of Cotton,Glomerella gossypii,Fungus
+Angular Leaf Scorch,Pseudopezicula tetraspora,Fungus
+Silver Scurf,Helminthosporium solani,Fungus
+American Gooseberry Mildew,Podosphaera mors-uvae,Fungus
+Gummy Stem Blight of Cucurbits,Stagonosporopsis cucurbitacearum,Fungus
+Cucumber Scab,Cladosporium cucumerinum,Fungus
+White Rot,Stromatinia cepivora,Fungus
+Plum Rust,Tranzschelia pruni spinosae,Fungus
+Karnal Bunt of Wheat,Tilletia indica,Fungus
+Eyespot,Oculimacula yallundae,Fungus
+Downy Mildew on Grape,Plasmopara viticola,Fungus
+Clubroot of Canola,Plasmodiophora brassicae,Fungus
+Common Leaf Spot,Mycosphaerella fragariae,Fungus
+Raspberry Spur Blight,Didymella applanata,Fungus
+White Leaf Spot,Phaeoramularia manihotis,Fungus
+Southern Rust of Maize,Puccinia polysora,Fungus
+Botrytis Blight in Lettuce,Botrytis cinerea,Fungus
+Pocket Plum Gall,Taphrina pruni,Fungus
+Brown Rust of Barley,Puccinia hordei,Fungus
+Pomegranate Wilt,Ceratocystis fimbriata,Fungus
+Stem and Root Rot of Soybean,Phytophthora sojae,Fungus
+White Pine Blister Rust,Cronartium ribicola,Fungus
+Phoma Blight,Peyronellaea glomerata,Fungus
+Lentil Rust,Uromyces viciae-fabae,Fungus
+Brown Rot of Fruits,Monilinia fructigena,Fungus
+Pear Leaf Spot,Diplocarpon maculatum,Fungus
+Dieback of Stone Fruit,Valsa cincta,Fungus
+Powdery Mildew of Strawberry,Podosphaera aphanis,Fungus
+Black Mold,Alternaria brassicae,Fungus
+Botrytis Leaf Blight,Botryotinia squamosa,Fungus
+Ascochyta Blight of Lentil,Didymella fabae,Fungus
+Anthracnose of Lentil,Colletotrichum truncatum,Fungus
+Soreshin,Rhizoctonia solani,Fungus
+Cherry Leaf Scorch,Apiognomonia erythrostoma,Fungus
+Bitter Rot on Apple,Glomerella cingulata,Fungus
+Powdery Scab,Spongospora subterranea,Fungus
+Dead Arm,Eutypa lata,Fungus
+Valsa Disease,Valsa leucostoma,Fungus
+Fruit Tree Canker,Neonectria ditissima,Fungus
+Sclerotium Rot,Athelia rolfsii,Fungus
+Constriction Canker,Phomopsis amygdali,Fungus
+Powdery Mildew of Grape,Erysiphe necator,Fungus
+Net Blotch,Pyrenophora teres,Fungus
+Black Leg of Rapeseed,Plenodomus lingam,Fungus
+Potato Late Blight,Phytophthora infestans,Fungus
+Black Shank,Phytophthora nicotianae,Fungus
+Brown Spot of Soybean,Septoria glycines,Fungus
+Root Rot of Lentil,Rhizoctonia solani,Fungus
+Pyricularia Leaf Spot,Magnaporthe oryzae,Fungus
+Ramularia Leaf Spot of Beet,Ramularia beticola,Fungus
+Tropical Rust,Physopella zeae,Fungus
+Sclerotinia Stem Rot,Sclerotinia sclerotiorum,Fungus
+Shothole Disease,Wilsonomyces carpophilus,Fungus
+Anthracnose of Pomegranate,Glomerella cingulata,Fungus
+Fusarium Head Blight,Fusarium graminearum,Fungus
+Alternaria Black Spot and Fruit Rot,Alternaria alternata,Fungus
+Cercospora Fruit and Leaf Spot,Pseudocercospora punicae,Fungus
+Anthracnose of Currant & Gooseberry,Drepanopeziza ribis,Fungus
+Ergot of Sorghum,Claviceps africana,Fungus
+Bakanae and Foot Rot,Gibberella fujikuroi,Fungus
+Septoria Spot,Septoria citri,Fungus
+Alternaria Leaf Spot of Peanut,Alternaria spp.,Fungus
+Anthracnose of Apple,Neofabraea malicorticis,Fungus
+Ashy Stem Blight of Bean,Macrophomina phaseolina,Fungus
+Silver Leaf,Chondrostereum purpureum,Fungus
+Cigar End Rot,Trachysphaera fructigena,Fungus
+Chilli Damping-off,Pythium aphanidermatum,Fungus
+Narrow Brown Leaf Spot of Rice,Sphaerulina oryzina,Fungus
+Downy Mildew on Cucurbits,Pseudoperonospora cubensis,Fungus
+Black Leaf Spot of Banana,Deightoniella torulosa,Fungus
+Papaya Brown Spot,Corynespora cassiicola,Fungus
+Rhizoctonia Root Rot of Olive,Rhizoctonia solani,Fungus
+Northern Corn Leaf Spot,Cochliobolus carbonum,Fungus
+Greasy Spot of Citrus,Mycosphaerella citri,Fungus
+Charcoal Stalk Rot,Macrophomina phaseolina,Fungus
+Loose Smut,Ustilago tritici,Fungus
+Alternaria Leaf Spot of Cotton,Alternaria macrospora,Fungus
+Brown leaf spot,Mycosphaerella henningsii,Fungus
+Phoma Sorghina in Rice,Epicoccum sorghi,Fungus
+Leaf Stripe of Barley,Pyrenophora graminea,Fungus
+Phytophthora Blight,Phytophthora drechsleri,Fungus
+Sugarcane Common Rust,Puccinia melanocephala,Fungus
+Powdery Mildew of Papaya,Oidium caricae-papayae,Fungus
+Rose Mildew,Podosphaera pannosa,Fungus
+Take All,Gaeumannomyces graminis,Fungus
+Rhizoctonia Aerial Blight,Rhizoctonia solani,Fungus
+Sugarcane Pineapple Disease,Ceratocystis paradoxa,Fungus
+Purple Seed Stain of Soybean,Cercospora kikuchii,Fungus
+Anthracnose of Blackgram,Colletotrichum lindemuthianum,Fungus
+Gummosis,Botryosphaeria dothidea,Fungus
+Millet Rust,Puccinia substriata,Fungus
+Chilli Cercospora Leaf Spot,Cercospora capsici,Fungus
+Powdery Mildew of Cereals,Blumeria graminis,Fungus
+Septoria Leaf Spot,Septoria lycopersici,Fungus
+Melanose,Diaporthe citri,Fungus
+Brown Rust of Rye,Puccinia recondita,Fungus
+Damping-Off,Pythium aphanidermatum,Fungus
+Vascular Wilt of Banana,Fusarium oxysporum,Fungus
+Chickpea Rust,Uromyces ciceris-arietini,Fungus
+Mal Secco,Phoma tracheiphila,Fungus
+Snow Mold of Cereals,Monographella nivalis,Fungus
+Leaf Blotch of Banana,Cordana musae,Fungus
+Penicillium ear rot,Penicillium spp.,Fungus
+Charcoal Rot of Soybean,Macrophomina phaseolina,Fungus
+Almond Red Leaf Blotch,Polystigma ochraceum,Fungus
+Grey Mildew of Cotton,Mycosphaerella areola,Fungus
+Wilt Disease of Sugarcane,Gibberella fujikuroi,Fungus
+Southern Corn Leaf Blight,Cochliobolus heterostrophus,Fungus
+Wheat Leaf Rust,Puccinia triticina,Fungus
+Crown Rust of Grasses,Puccinia coronata,Fungus
+Septoria Tritici Blotch,Mycosphaerella graminicola,Fungus
+Red Stripe Disease,Gonatophragmium sp.,Fungus
+Ascochyta Blight,Ascochyta rabiei,Fungus
+Phytophthora Gummosis,Phytophthora,Fungus
+Anthracnose of Cucurbits,Glomerella lagenarium,Fungus
+Anthracnose of Lime,Glomerella acutata,Fungus
+Smut of Sugarcane,Sporisorium scitamineum,Fungus
+Botrytis Blight,Botrytis cinerea,Fungus
+Anthracnose of Grape,Elsinoe ampelina,Fungus
+Dry Root Rot of Bean,Fusarium solani f. sp. phaseoli,Fungus
+Wheat Stem Rust,Puccinia graminis,Fungus
+Cercospora Leaf Spot of Olive,Pseudocercospora cladosporioides,Fungus
+Rhynchosporium,Rhynchosporium secalis,Fungus
+Citrus Black Spot,Phyllosticta citricarpa,Fungus
+Mango Dieback Disease,Botryosphaeria rhodina,Fungus
+Botryosphaeria Dieback,Botryosphaeriaceae,Fungus
+Fusarium Ear Rot,Fusarium verticillioides,Fungus
+Ramularia Leaf Spot,Ramularia collo-cygni,Fungus
+Wheat Blast,Magnaporthe oryzae,Fungus
+Clubroot,Plasmodiophora brassicae,Fungus
+Udbatta Disease of Rice,Balansia oryzae-sativae,Fungus
+Mealybug on Papaya,Paracoccus marginatus,Insect
+Aphid,Aphidoidea family,Insect
+Rice Leafroller,Cnaphalocrocis medinalis,Insect
+Green Peach Aphid,Myzus persicae,Insect
+Potato Beetle,Leptinotarsa decemlineata,Insect
+Jassids on Eggplant,Hishimonus phycitis,Insect
+Woolly Aphid,Eriosoma lanigerum,Insect
+Spotted Stemborer,Chilo partellus,Insect
+Rice Hispa,Dicladispa armigera,Insect
+Mango Blister Midge,Procontarinia mangiferae,Insect
+Citrus Leaf Miner,Phyllocnistis citrella,Insect
+Papaya Fruit Fly,Toxotrypana curvicauda,Insect
+Bean Leaf Beetle,Cerotoma trifurcata,Insect
+Citrus Whitefly,Dialeurodes citri,Insect
+Leaf Miner Flies,Agromyzidae spp.,Insect
+Apple Leaf Miner,Lyonetia clerkella,Insect
+Yellow Stem Borer,Scirpophaga incertulas,Insect
+Violet Stem Borer,Sesamia inferens,Insect
+European Corn Borer,Ostrinia nubilalis,Insect
+Corn Earworm,Helicoverpa zea,Insect
+Jassids on Peanut,Empoasca kerri,Insect
+Mealybug,Pseudococcidae,Insect
+Cottony Cushion Scale,Icerya purchasi,Insect
+Mango Fruit Fly,Ceratitis cosyra,Insect
+Flea Beetle,Psylliodes,Insect
+Greenhouse Whitefly,Trialeurodes vaporariorum,Insect
+Thrips,Order Thysanoptera,Insect
+African Mole Cricket,Gryllotalpa africana,Insect
+Variegated Grasshopper,Zonocerus variegatus,Insect
+Black Cutworm,Agrotis ipsilon,Insect
+Fall Armyworm,Spodoptera frugiperda,Insect
+Mealybug,Drosicha mangiferae,Insect
+Redcurrant Blister Aphid,Cryptomyzus ribis,Insect
+Cotton Leaf Hopper,Amrasca devastans,Insect
+Sorghum Midge,Stenodiplosis sorghicola,Insect
+Helicoverpa on Soybean,Helicoverpa armigera,Insect
+Semilooper,Autographa nigrisigna,Insect
+Banana Scale Insect,Aspidiotus destructor,Insect
+Pea Blue Butterfly,Lampides boeticus,Insect
+Oriental Fruit Fly,Bactrocera dorsalis,Insect
+Rice Grasshopper,Oxya intricata,Insect
+Red Hairy Caterpillar,Amsacta albistriga,Insect
+Vine Flea Beetle,Altica ampelophaga,Insect
+Pink Bollworm,Pectinophora gossypiella,Insect
+Rice Bug,Leptocorisa spp.,Insect
+Olive Fruit Fly,Bactrocera oleae,Insect
+Rice Skipper,Pelopidas mathias,Insect
+Lesser cornstalk borer,Elasmopalpus lignosellus,Insect
+Black Scale,Saissetia oleae,Insect
+Cassava Root Mealybug,Stictococcus vayssierei,Insect
+Cabbage Moth,Mamestra brassicae,Insect
+Sugarcane White Grub,Lepidiota stigma,Insect
+Cut Worm on Banana,Spodoptera litura,Insect
+Mealy Plum Aphid,Hyalopterus pruni,Insect
+Rice Mealybug,Brevennia rehi,Insect
+Banana Fruit-Scarring Beetle,Colaspis hypochlora,Insect
+Mango Nut Weevil,Sternochetus mangiferae,Insect
+Green Paddy Leafhoppers,Nephotettix spp.,Insect
+Fruit Tree Leafroller,Archips argyrospila,Insect
+Bean Leaf Webber,Hedylepta indicata,Insect
+Sugarcane Borer,Diatraea saccharalis,Insect
+Mediterranean Fruit Fly,Ceratitis capitata,Insect
+Citrus Wolly Whitefly,Aleurothrixus floccosus,Insect
+Pseudostem Weevil,Odoiporus longicollis,Insect
+Banana Rust Thrips,Chaetanaphothrips signipennis,Insect
+Eggplant Leaf Roller,Eublemma olivacea,Insect
+Grape Bud Moth,Eupoecilia ambiguella,Insect
+Soybean Stalk Weevil,Sternechus subsignatus,Insect
+Bean Leafroller,Urbanus proteus,Insect
+Green Citrus Aphid,Aphis spiraecola,Insect
+Western Flower Thrips,Frankliniella occidentalis,Insect
+Western Plant Bug,Lygus hesperus,Insect
+Black Parlatoria Scale,Parlatoria ziziphi,Insect
+"Stink Bugs on Corn, Millet and Sorghum",Euschistus spp.,Insect
+Whorl Maggot,Hydrellia philippina,Insect
+Greenhorned Caterpillars,Melanitis leda,Insect
+Oriental Fruit Moth,Grapholita molesta,Insect
+Grape Berry Moth,Lobesia botrana,Insect
+Castor Hairy Caterpillar,Pericallia ricini,Insect
+Tomato Fruit Borer,Helicoverpa armigera,Insect
+Thrips in Mango,Scirtothrips spp.,Insect
+Cherry Fruit Fly,Rhagoletis cerasi,Insect
+Banana Scab Moth,Nacoleia octasema,Insect
+Citrus Thrips,Scirtothrips citri,Insect
+Pea Pod Borer,Etiella zinckenella,Insect
+Small and Large Cabbage White,Pieris,Insect
+Boll Weevil,Anthonomus grandis,Insect
+Citrus Flatid Plant Hopper,Metcalfa pruinosa,Insect
+Mango Fruit Borer,Citripestis eutraphera,Insect
+Onion Leaf Miner,Phytomyza gymnostoma,Insect
+Cucumber Beetle,Diabrotica spp.,Insect
+Banana Moth,Opogona sacchari,Insect
+Black Citrus Aphid,Toxoptera aurantii,Insect
+Olive Borer,Hylesinus toranio,Insect
+Mango Seed Borer,Deanolis albizonalis,Insect
+Velvetbean Caterpillar,Anticarsia gemmatalis,Insect
+Grapevine Leafroller,Sparganothis pilleriana,Insect
+Paddy Swarming Caterpillar,Spodoptera mauritia,Insect
+Rice Ear-Cutting Caterpillar,Mythimna separata,Insect
+Brown Planthopper,Nilaparvata lugens,Insect
+Pomegranate Thrips,Scirtothrips dorsalis,Insect
+Mango Gall Midge,Procontarinia pustulata,Insect
+Asian Rice Gall Midge,Orseolia oryzae,Insect
+Olive Psyllid,Euphyllura olivina,Insect
+Cabbage Whitefly,Aleyrodes proletella,Insect
+Melon Fruit Fly,Zeugodacus cucurbitae,Insect
+Poplar Lace Bug,Monosteira unicostata,Insect
+Rice Case Worm,Parapoynx stagnalis,Insect
+Potato Tuber Moth,Phthorimaea operculella,Insect
+Winter Moth,Operophtera brumata,Insect
+Hairy Caterpillars,Euproctis fraterna,Insect
+Bright Line Brown Eye,Lacanobia oleracea,Insect
+Silverleaf Whitefly,Bemisia tabaci,Insect
+Early Shoot Borer,Chilo infuscatellus,Insect
+Mango Shoot Psyllid,Apsylla cistellata,Insect
+Stem Borer,Coniesta ignefusalis,Insect
+Spotted Pod Borer,Maruca testulalis,Insect
+Bean Shoot Borer,Epinotia aporema,Insect
+Grape Thrips,Drepanothrips reuteri,Insect
+Gram Pod Borer,Helicoverpa armigera,Insect
+Strawberry Whitefly,Trialeurodes packardi,Insect
+Strawberry Blossom Weevil,Anthonomus rubi,Insect
+Fruit Tree Bark Beetle,Scolytus mali,Insect
+Rice Stalk Stinkbug,Tibraca limbativentris,Insect
+Black Cherry Aphid,Myzus cerasi,Insect
+Brinjal Fruit Borer,Leucinodes orbonalis,Insect
+Root Borer,Cosmopolites sordidus,Insect
+Rice Thrips,Stenchaetothrips biformis,Insect
+Cotton Bollworm,Helicoverpa armigera,Insect
+Green Leafhopper,Empoasca decipiens,Insect
+Grape Tortrix Moth,Argyrotaenia ljungiana,Insect
+Banana Lace Wing Bug,Stephanitis typica,Insect
+Carrot Fly,Chamaepsila rosae,Insect
+Olive Scale,Parlatoria oleae,Insect
+Onion Maggots,Delia platura,Insect
+Mango Shoot Borer,Chlumetia transversa,Insect
+Curculio Weevil,Otiorhynchus cribricollis,Insect
+Stink Bug on Cotton,Euschistus servus,Insect
+Almond Bark Beetle,Scolytus amygdali,Insect
+Leafhopper on Grape,Empoasca vitis,Insect
+Olive Bark Beetle,Phloeotribus scarabaeoides,Insect
+Cassava scale,Aonidomytilus albus,Insect
+Ermine Moth,Yponomeutidae,Insect
+Mango Hoppers,Idioscopus spp.,Insect
+Oriental Armyworm,Mythimna separata,Insect
+Southern Armyworm,Spodoptera eridania,Insect
+Head Miner,Heliocheilus albipunctella,Insect
+Peach Twig Borer,Anarsia lineatella,Insect
+Leaf Eating Beetle,Epilachna vigintioctopunctata,Insect
+Codling Moth,Cydia pomonella,Insect
+Tobacco Caterpillar,Spodoptera litura,Insect
+Olive Moth,Prays oleae,Insect
+White Grub on Peanut,Holotrichia spp.,Insect
+Stink Bugs on Soybean,Acrosternum hilare,Insect
+Tuta Absoluta,Tuta Absoluta,Insect
+Jasmine Moth,Palpita unionalis,Insect
+Oleander Scale,Aspidiotus nerii,Insect
+Castor Semilooper,Ophiusa melicerta,Insect
+Cereal Leaf Beetle,Oulema melanopus,Insect
+Bean Bollworm,Helicoverpa armigera,Insect
+European Earwig,Forficula auricularia,Insect
+Eggplant Lace Bug,Gargaphia solani,Insect
+Soybean Looper,Pseudoplusia includens,Insect
+Common Red Spider Mite,Tetranychus urticae,Mite
+European Red Mite,Panonychus ulmi,Mite
+Citrus Red Mite,Panonychus citri,Mite
+Red Palm Mite,Raoiella indica,Mite
+Grape Rust Mite,Calepitrimerus vitis,Mite
+Cassava Green Spider Mite,Mononychellus tanajoa,Mite
+Brown Mite,Bryobia rubrioculus,Mite
+Pear Leaf Blister Mite,Eriophyes pyri,Mite
+Yellow Vine Mite,Eotetranychus carpini,Mite
+Citrus Bud Mite,Aceria sheldoni,Mite
+Rice Panicle Mite,Steneotarsonemus spinki,Mite
+Olive Bud Mite,Oxycenus maxwelli,Mite
+Mango Spider Mite,Oligonychus mangiferus,Mite
+Rice Leaf Mite,Oligonychus oryzae,Mite
+Grape Blister Mite,Colomerus vitis,Mite
+Gall Mite,Eriophyidae,Mite
+Broad Mite,Polyphagotarsonemus latus,Mite
+Root-Knot Nematode,Meloidogyne spp.,Other
+Root-Knot Nematode in Soybean,Meloidogyne ethiopica,Other
+Slug,Class Gastropoda,Other
+Physiological Leaf Spot,PLS,Other
+Giant Arrowhead,Sagittaria montevidensis,Other
+Alkalinity,Alkalinity,Other
+Ear Cockle Eelworm,Anguina tritici,Other
+Vole,Cricetidae,Other
+Citrus Nematode,Tylenchulus semipenetrans,Other
+Cyst Nematode,Heterodera glycines,Other
+Biomphalaria Snails,Biomphalaria spp.,Other
+Lesion Nematode,Pratylenchus spp.,Other
+Abiotic Sunburn,Abiotic Sunburn,Other
+Abiotic Sunburn in Pistachio,Abiotic Sunburn,Other
+Nematode,Nematoda,Other
+Fertilizer or Pesticide Burn,Fertilizer Burn,Other
+Algal Leaf Spot,Cephaleuros virescens,Other
+Golden Apple Snail,Pomacea canaliculata,Other
+Healthy,Healthy,Other
+Pesticide Burn,Pesticide Burn,Other
+Mungbean Yellow Mosaic Virus,MYMV,Virus
+Urd Bean Leaf Crinkle Virus,ULCV,Virus
+Bean Common Mosaic Virus,BCMV,Virus
+Bud Necrosis Disease,PBND,Virus
+Ring Spot Virus,PRSV,Virus
+Papaya Mosaic Virus,PapMV,Virus
+Cucumber Mosaic Virus,CMV,Virus
+Apple Mosaic Virus,APMV,Virus
+Watermelon mosaic virus,Watermelon mosaic virus,Virus
+Citrus Exocortis Viroid,CEVd,Virus
+Stecklenberger Disease,PNRSV Prunus necrotic ringspot virus,Virus
+Grapevine Leafroll Disease,GLD,Virus
+Potato Y Virus,PVY,Virus
+Citrus Chlorotic Dwarf Virus,CCDV,Virus
+Potato Leafroll Virus,PLRV,Virus
+Bean Golden Mosaic Virus,BGMV,Virus
+Tobacco Streak Virus,Tobacco Streak Virus,Virus
+Cucumber Green Mottle Virus,CGMMV,Virus
+Maize Leaf Streak Virus,MSV,Virus
+Plum Pox Virus,Plum pox virus,Virus
+Banana Streak Virus,Banana Streak Virus,Virus
+Potato X Virus,PVX,Virus
+Cassava Brown Streak Disease,CBSV,Virus
+Tungro,RTBV,Virus
+Papaya Leaf Curl,PaLCV,Virus
+Sterility Mosaic,PPSMV,Virus
+Soybean Mosaic Virus,SMV,Virus
+Wheat Dwarf Virus,WDV,Virus
+Maize Lethal Necrosis Disease,MLND,Virus
+Tomato Yellow Leaf Curl Virus,TYLCV,Virus
+Cucumber Mosaic Virus on Banana,CMV,Virus
+Banana Bract Mosaic Virus,BBrMV,Virus
+Tomato Mosaic Virus,ToMV,Virus
+Bunchy Top Virus,Bunchy Top Virus,Virus
+Cassava Mosaic Disease,ACMV,Virus
+Citrus Psorosis Virus,CPsV,Virus
+Rice Yellow Mottle Virus,RYMV,Virus
+Bean Yellow Mosaic Virus,BYMV,Virus
+Tomato Spotted Wilt Virus,TSWV,Virus
+Onion Yellow Dwarf Virus,OYDV,Virus
+Citrus Tristeza Virus,CTV,Virus
+Sugarcane Mosaic Virus,SCMV,Virus
+Citrus Leprosis,Citrus leprosis virus sensu lato,Virus
+Striga,Striga hermonthica,Weed
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/farmExpenseType.csv b/packages/api/db/seeds/seedData/farmExpenseType.csv
new file mode 100644
index 0000000000..74483948f5
--- /dev/null
+++ b/packages/api/db/seeds/seedData/farmExpenseType.csv
@@ -0,0 +1,9 @@
+expense_name
+Equipment
+Fertilizer
+Pesticide
+Fuel
+Machinery
+Land
+Seeds
+Other
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/fertilizers.csv b/packages/api/db/seeds/seedData/fertilizers.csv
new file mode 100644
index 0000000000..42bc44423e
--- /dev/null
+++ b/packages/api/db/seeds/seedData/fertilizers.csv
@@ -0,0 +1 @@
+fertilizer_type,moisture_percentage,n_percentage,nh4_n_ppm,p_percentage,k_percentage,mineralization_rate
compost (manure),40,1.5,0,0.5,0.5,0.1
compost (HIP),0,2.2,0,0.9,0.8,0.1
Beef-feedlot- solid (dry),72,0.42,44,0.13,0.67,0.3
Beef-feedlot- solid (moist),77,0.68,368,0.15,0.3,0.3
Beef- liquid,86,0.28,77,0.09,0.19,0.3
Chicken-broiler (general),50,2.26,3423,0.91,1.14,0.55
Chicken-broiler (manure aged outdoors),70,1.91,3095,0.8,1.14,0.55
Chicken-broiler (manure fresh from barn),25,2.97,4078,1.05,1.04,0.55
Chicken-broiler breeder,46,1.25,3096,0.84,1.71,0.55
Chicken-layer,50,2.26,3889,1.13,1.51,0.55
Dairy- solid (dry),72,0.76,317,0.2,0.43,0.21
Dairy- solid (moist),77,0.39,797,0.1,0.3,0.21
Dairy- liquid (thick slurry),86,0.4,1760,0.08,0.3,0.21
Dairy- liquid (medium slurry),93.5,0.28,1450,0.06,0.25,0.21
Dairy- liquid (quite watery),96.5,0.2,1110,0.04,0.16,0.21
Dairy- liquid (very watery),98.5,0.13,730,0.02,0.12,0.21
Goat (dairy),65,1.04,2818,0.28,1.03,0.21
Hog- liquid,82,0.33,2211,0.1,0.15,0.4
Hog- solid,82,0.86,525,0.42,0.5,0.4
Horse,83,0.32,268,0.09,0.25,0.2
Mink,54,3.28,14151,1.82,0.79,0.2
Sheep,68,0.87,2784,0.34,0.76,0.2
Turkey (manure aged >7 weeks out of barn),70,0.87,1281,0.44,0.59,0.55
Turkey (manure fresh from barn <7 weeks),33,1.79,2518,0.79,1.31,0.55
Biosolids- anaerobically digested & dewatered,70,1.47,2940,0.9,0.03,0.18
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/generalFarmSeedData.js b/packages/api/db/seeds/seedData/generalFarmSeedData.js
new file mode 100644
index 0000000000..828397e40a
--- /dev/null
+++ b/packages/api/db/seeds/seedData/generalFarmSeedData.js
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (generalFarmSeedData.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+require('dotenv').config();
+
+const seedFarmData = [
+ {
+ table: 'farm',
+ data: {
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ farm_name: 'Test Farm',
+ units: {
+ currency: 'CAD',
+ measurement: 'metric',
+ date_format: 'MM/DD/YY',
+ },
+ },
+ },
+
+ {
+ table: 'users',
+ data: {
+ email: process.env.TEST_USER,
+ first_name: 'test',
+ last_name: 'user',
+ is_admin: true,
+ user_id: process.env.TEST_USER_ID,
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ },
+ },
+
+ {
+ table: 'activityLog',
+ data: {
+ activity_id: 100,
+ activity_kind: 'other',
+ date: '2018-09-30 21:26:02.536-07',
+ user_id: '5b515beef7ac1b2c61285039',
+ notes: '',
+ action_needed: false,
+ },
+ },
+
+ {
+ table: 'field',
+ data: {
+ field_id: 'ad949da6-a4f8-4521-95ff-6a9073e71a0b',
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ field_name: 'Test Field',
+ grid_points: JSON.stringify([
+ { lat: 49.25148925443262, lng: -123.24001308685746 },
+ { lat: 49.250054989957334, lng: -123.24128338098143 },
+ { lat: 49.24765698722413, lng: -123.2366485238037 },
+ { lat: 49.24933784209375, lng: -123.23462291968661 },
+ ]),
+ area: 100000,
+ },
+ },
+
+ {
+ table: 'fieldCrop',
+ data: [{
+ field_crop_id: 100,
+ field_id: 'ad949da6-a4f8-4521-95ff-6a9073e71a0b',
+ crop_id: 101,
+ start_date: '2018-09-24 03:04:00-07',
+ end_date: '2019-09-24 04:04:00-07',
+ area_used: 50,
+ estimated_production: 500,
+ estimated_revenue: 50000,
+ }, {
+ field_crop_id: 101,
+ field_id: 'ad949da6-a4f8-4521-95ff-6a9073e71a0b',
+ crop_id: 102,
+ start_date: '2018-09-24 03:04:00-07',
+ end_date: '2019-09-24 04:04:00-07',
+ area_used: 50,
+ estimated_production: 500,
+ estimated_revenue: 50000,
+ }],
+ },
+
+ {
+ table: 'shift',
+ data: {
+ shift_id: '59f720da-d774-11e8-92b1-88e9fe7badb4',
+ start_time: '2018-09-24 03:04:00-07',
+ end_time: '2018-09-24 04:04:00-07',
+ user_id: '5b515beef7ac1b2c61285039',
+ break_duration: 0,
+ },
+ },
+
+ {
+ table: 'sale',
+ data: {
+ sale_id: 100,
+ customer_name: 'sheldon',
+ sale_date: '2019-09-30 21:26:02.536-07',
+ },
+ },
+
+ {
+ table: 'shiftTask',
+ data: {
+ task_id: 5,
+ shift_id: '59f720da-d774-11e8-92b1-88e9fe7badb4',
+ field_crop_id: 100,
+ field_id: 'ad949da6-a4f8-4521-95ff-6a9073e71a0b',
+ duration: 30,
+ },
+ },
+
+ {
+ table: 'activityCrops',
+ data: {
+ activity_id: 100,
+ field_crop_id: 100,
+ },
+ },
+
+ {
+ table: 'activityFields',
+ data: {
+ activity_id: 100,
+ field_id: 'ad949da6-a4f8-4521-95ff-6a9073e71a0b',
+ },
+ },
+
+ {
+ table: 'cropSale',
+ data: {
+ sale_id: 100,
+ field_crop_id: 100,
+ quantity_kg: 1,
+ sale_value: 100,
+ },
+ },
+
+ {
+ table: 'price',
+ data: [{
+ crop_id: 101,
+ 'value_$/kg': 100,
+ date: '2019-09-30 21:26:02.536-07',
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ }, {
+ crop_id: 100,
+ 'value_$/kg': 100,
+ date: '2019-09-30 21:26:02.536-07',
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ }],
+ },
+
+ {
+ table: 'yield',
+ data: [{
+ crop_id: 101,
+ 'quantity_kg/m2': 10,
+ date: '2019-09-30 21:26:02.536-07',
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ }, {
+ crop_id: 100,
+ 'quantity_kg/m2': 10,
+ date: '2019-09-30 21:26:02.536-07',
+ farm_id: '5be5faae-d608-4700-8b05-ae08e9edf747',
+ }],
+ },
+];
+
+module.exports = seedFarmData;
diff --git a/packages/api/db/seeds/seedData/pesticides.csv b/packages/api/db/seeds/seedData/pesticides.csv
new file mode 100644
index 0000000000..a05c58e6df
--- /dev/null
+++ b/packages/api/db/seeds/seedData/pesticides.csv
@@ -0,0 +1,2 @@
+pesticide_name,entry_interval,harvest_interval,active_ingredients,concentration
+Roundup,0.5,14,glyphosate,50.2
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/price.csv b/packages/api/db/seeds/seedData/price.csv
new file mode 100644
index 0000000000..d20cff5a40
--- /dev/null
+++ b/packages/api/db/seeds/seedData/price.csv
@@ -0,0 +1,3112 @@
+country,crop_id,value,is_average
+Albania,7,381.3,FALSE
+Albania,8,732.1,FALSE
+Albania,17,319.7,FALSE
+Albania,18,1661.7,FALSE
+Albania,19,767.5,FALSE
+Albania,40,202.1,FALSE
+Albania,49,377.5,FALSE
+Albania,54,760.9,FALSE
+Albania,58,1169.7,FALSE
+Albania,59,1256.1,FALSE
+Albania,63,317.5,FALSE
+Albania,90,481.7,FALSE
+Albania,94,342.7,FALSE
+Albania,101,487.9,FALSE
+Albania,105,724.5,FALSE
+Albania,112,1623.5,FALSE
+Albania,120,561.8,FALSE
+Albania,152,244.5,FALSE
+Albania,154,729.9,FALSE
+Albania,158,500.6,FALSE
+Albania,169,290.2,FALSE
+Albania,179,361,FALSE
+Albania,200,329.1,FALSE
+Albania,203,1447.8,FALSE
+Albania,205,319.2,FALSE
+Albania,206,456.6,FALSE
+Albania,208,397.7,FALSE
+Albania,219,603.6,FALSE
+Albania,221,674.7,FALSE
+Albania,218,666.2,FALSE
+Albania,231,343.5,FALSE
+Albania,235,293.3,FALSE
+Albania,238,421.7,FALSE
+Albania,243,748.6,FALSE
+Albania,259,430.5,FALSE
+Albania,276,525.5,FALSE
+Albania,279,493.2,FALSE
+Albania,289,839.9,FALSE
+Albania,298,445.3,FALSE
+Albania,305,2291.6,FALSE
+Albania,306,446.2,FALSE
+Albania,317,133.9,FALSE
+Albania,318,296.9,FALSE
+Algeria,7,1690.4,FALSE
+Algeria,17,228.4,FALSE
+Algeria,19,1206.1,FALSE
+Algeria,40,392.9,FALSE
+Algeria,49,356.3,FALSE
+Algeria,54,520.8,FALSE
+Algeria,63,639.6,FALSE
+Algeria,94,3517.8,FALSE
+Algeria,112,3079.2,FALSE
+Algeria,120,1498.5,FALSE
+Algeria,154,1324.9,FALSE
+Algeria,158,520.8,FALSE
+Algeria,179,575.6,FALSE
+Algeria,200,146.2,FALSE
+Algeria,205,392.9,FALSE
+Algeria,206,246.7,FALSE
+Algeria,208,986.8,FALSE
+Algeria,221,1242.7,FALSE
+Algeria,218,968.5,FALSE
+Algeria,235,274.1,FALSE
+Algeria,238,593.9,FALSE
+Algeria,298,834.2,FALSE
+Algeria,306,383.8,FALSE
+Algeria,317,365.5,FALSE
+Algeria,318,411.2,FALSE
+Armenia,7,437.2,FALSE
+Armenia,8,1049.6,FALSE
+Armenia,17,212.9,FALSE
+Armenia,18,2550.4,FALSE
+Armenia,40,153.2,FALSE
+Armenia,49,364,FALSE
+Armenia,58,970.6,FALSE
+Armenia,63,383.8,FALSE
+Armenia,90,358.4,FALSE
+Armenia,91,1645.3,FALSE
+Armenia,101,220.5,FALSE
+Armenia,105,584.8,FALSE
+Armenia,112,2263.1,FALSE
+Armenia,120,395.1,FALSE
+Armenia,156,2497.5,FALSE
+Armenia,192,1342.4,FALSE
+Armenia,205,269.2,FALSE
+Armenia,206,1434.1,FALSE
+Armenia,219,497.2,FALSE
+Armenia,221,638.6,FALSE
+Armenia,218,935.9,FALSE
+Armenia,231,328.7,FALSE
+Armenia,235,196.7,FALSE
+Armenia,243,536.3,FALSE
+Armenia,259,212.6,FALSE
+Armenia,281,1493,FALSE
+Armenia,305,163.2,FALSE
+Armenia,306,184.2,FALSE
+Armenia,316,2440.5,FALSE
+Armenia,317,216.5,FALSE
+Armenia,318,231.1,FALSE
+Australia,4,7143.1,FALSE
+Australia,7,1303.1,FALSE
+Australia,8,2045.8,FALSE
+Australia,13,3632.1,FALSE
+Australia,16,858.6,FALSE
+Australia,17,188.1,FALSE
+Australia,19,2916.3,FALSE
+Australia,40,608.1,FALSE
+Australia,49,492.9,FALSE
+Australia,54,594,FALSE
+Australia,58,6983.3,FALSE
+Australia,60,582.8,FALSE
+Australia,120,559,FALSE
+Australia,154,1777.4,FALSE
+Australia,156,869,FALSE
+Australia,158,994.6,FALSE
+Australia,165,269.1,FALSE
+Australia,169,242.3,FALSE
+Australia,175,2161.7,FALSE
+Australia,179,637.1,FALSE
+Australia,192,4771.7,FALSE
+Australia,200,227.5,FALSE
+Australia,205,591.7,FALSE
+Australia,208,704,FALSE
+Australia,219,1397.5,FALSE
+Australia,221,644.5,FALSE
+Australia,218,628.9,FALSE
+Australia,228,523.3,FALSE
+Australia,231,2042.8,FALSE
+Australia,235,342,FALSE
+Australia,238,622.9,FALSE
+Australia,254,311.5,FALSE
+Australia,84,1807.9,FALSE
+Australia,270,204.4,FALSE
+Australia,281,4763.6,FALSE
+Australia,286,27.5,FALSE
+Australia,298,1182,FALSE
+Australia,306,559,FALSE
+Australia,308,184.4,FALSE
+Australia,318,205.9,FALSE
+Austria,7,386,FALSE
+Austria,8,3910.2,FALSE
+Austria,12,7021.9,FALSE
+Austria,17,99.6,FALSE
+Austria,18,5109.3,FALSE
+Austria,19,1194.6,FALSE
+Austria,33,165.9,FALSE
+Austria,40,282.1,FALSE
+Austria,49,475.6,FALSE
+Austria,54,553.1,FALSE
+Austria,58,4582.8,FALSE
+Austria,63,1451.3,FALSE
+Austria,90,618.3,FALSE
+Austria,91,2639.3,FALSE
+Austria,101,1630.5,FALSE
+Austria,112,4048.5,FALSE
+Austria,120,1080.7,FALSE
+Austria,138,8616.9,FALSE
+Austria,152,1105,FALSE
+Austria,158,691.3,FALSE
+Austria,169,136.1,FALSE
+Austria,192,2765.4,FALSE
+Austria,200,95.1,FALSE
+Austria,205,251.1,FALSE
+Austria,219,1268.8,FALSE
+Austria,221,883.8,FALSE
+Austria,217,161.5,FALSE
+Austria,218,334.1,FALSE
+Austria,231,1636,FALSE
+Austria,234,2077.4,FALSE
+Austria,235,163.7,FALSE
+Austria,238,929.2,FALSE
+Austria,248,355.1,FALSE
+Austria,259,111.7,FALSE
+Austria,276,368.3,FALSE
+Austria,279,712.4,FALSE
+Austria,281,3788.6,FALSE
+Austria,282,28.8,FALSE
+Austria,289,295.3,FALSE
+Austria,306,935.8,FALSE
+Austria,308,104,FALSE
+Austria,316,4117.1,FALSE
+Austria,318,109.5,FALSE
+Azerbaijan,4,1253.4,FALSE
+Azerbaijan,7,263.2,FALSE
+Azerbaijan,8,720.7,FALSE
+Azerbaijan,17,119.1,FALSE
+Azerbaijan,18,1002.7,FALSE
+Azerbaijan,33,626.7,FALSE
+Azerbaijan,40,194.3,FALSE
+Azerbaijan,49,325.9,FALSE
+Azerbaijan,58,564,FALSE
+Azerbaijan,59,2005.4,FALSE
+Azerbaijan,63,376,FALSE
+Azerbaijan,90,350.9,FALSE
+Azerbaijan,91,940,FALSE
+Azerbaijan,101,250.7,FALSE
+Azerbaijan,105,501.3,FALSE
+Azerbaijan,112,626.7,FALSE
+Azerbaijan,120,450,FALSE
+Azerbaijan,106,1566.7,FALSE
+Azerbaijan,154,1253.4,FALSE
+Azerbaijan,156,940,FALSE
+Azerbaijan,169,159.2,FALSE
+Azerbaijan,179,164.2,FALSE
+Azerbaijan,180,94,FALSE
+Azerbaijan,192,689.3,FALSE
+Azerbaijan,200,125.3,FALSE
+Azerbaijan,203,313.3,FALSE
+Azerbaijan,205,156.7,FALSE
+Azerbaijan,206,626.7,FALSE
+Azerbaijan,208,626.7,FALSE
+Azerbaijan,219,501.3,FALSE
+Azerbaijan,221,438.7,FALSE
+Azerbaijan,217,877.3,FALSE
+Azerbaijan,229,940,FALSE
+Azerbaijan,231,225.6,FALSE
+Azerbaijan,235,247.5,FALSE
+Azerbaijan,238,228.1,FALSE
+Azerbaijan,243,470,FALSE
+Azerbaijan,249,940,FALSE
+Azerbaijan,254,1040.3,FALSE
+Azerbaijan,259,125.3,FALSE
+Azerbaijan,84,304.6,FALSE
+Azerbaijan,282,37.6,FALSE
+Azerbaijan,289,481.3,FALSE
+Azerbaijan,298,501.3,FALSE
+Azerbaijan,302,592.2,FALSE
+Azerbaijan,305,128.5,FALSE
+Azerbaijan,306,350.9,FALSE
+Azerbaijan,316,1629.4,FALSE
+Azerbaijan,317,100.3,FALSE
+Azerbaijan,318,173,FALSE
+Bangladesh,8,2868.8,FALSE
+Bangladesh,19,430.4,FALSE
+Bangladesh,60,903.4,FALSE
+Bangladesh,90,251.1,FALSE
+Bangladesh,112,1362.8,FALSE
+Bangladesh,115,831.4,FALSE
+Bangladesh,128,880.9,FALSE
+Bangladesh,156,1134,FALSE
+Bangladesh,161,640.9,FALSE
+Bangladesh,169,212.6,FALSE
+Bangladesh,175,396.5,FALSE
+Bangladesh,205,312.4,FALSE
+Bangladesh,208,121.2,FALSE
+Bangladesh,215,387.3,FALSE
+Bangladesh,235,198.8,FALSE
+Bangladesh,248,561.9,FALSE
+Bangladesh,254,218.2,FALSE
+Bangladesh,267,508.4,FALSE
+Bangladesh,276,459.2,FALSE
+Bangladesh,296,172.9,FALSE
+Bangladesh,306,417.9,FALSE
+Bangladesh,318,255.3,FALSE
+Barbados,16,1515,FALSE
+Barbados,40,2490,FALSE
+Barbados,49,3080,FALSE
+Barbados,52,2055,FALSE
+Barbados,54,3590,FALSE
+Barbados,63,3720,FALSE
+Barbados,90,1515,FALSE
+Barbados,101,1535,FALSE
+Barbados,154,2650,FALSE
+Barbados,179,1835,FALSE
+Barbados,202,2150,FALSE
+Barbados,215,2440,FALSE
+Barbados,238,1325,FALSE
+Barbados,296,2335,FALSE
+Barbados,306,2740,FALSE
+Barbados,319,3665,FALSE
+Belarus,7,456.8,FALSE
+Belarus,17,174.1,FALSE
+Belarus,39,366.9,FALSE
+Belarus,40,281.5,FALSE
+Belarus,49,248.2,FALSE
+Belarus,88,2583.6,FALSE
+Belarus,90,1216,FALSE
+Belarus,108,619.3,FALSE
+Belarus,161,802.9,FALSE
+Belarus,169,559.7,FALSE
+Belarus,200,127.5,FALSE
+Belarus,205,253.8,FALSE
+Belarus,221,844.9,FALSE
+Belarus,217,757.8,FALSE
+Belarus,218,441.8,FALSE
+Belarus,231,709.6,FALSE
+Belarus,235,133.5,FALSE
+Belarus,248,596.4,FALSE
+Belarus,259,145.1,FALSE
+Belarus,281,3089.5,FALSE
+Belarus,282,56.8,FALSE
+Belarus,306,1504.5,FALSE
+Belarus,308,156,FALSE
+Belarus,318,214.1,FALSE
+Belgium,7,395.8,FALSE
+Belgium,12,2290.3,FALSE
+Belgium,17,130.7,FALSE
+Belgium,19,2477.1,FALSE
+Belgium,40,1179.8,FALSE
+Belgium,49,631.3,FALSE
+Belgium,54,1223.8,FALSE
+Belgium,58,2071.4,FALSE
+Belgium,61,553.3,FALSE
+Belgium,63,1415.6,FALSE
+Belgium,90,354.1,FALSE
+Belgium,91,1612.9,FALSE
+Belgium,108,338.5,FALSE
+Belgium,138,5352,FALSE
+Belgium,152,322.9,FALSE
+Belgium,158,346.3,FALSE
+Belgium,192,1640.6,FALSE
+Belgium,200,62,FALSE
+Belgium,205,144.8,FALSE
+Belgium,221,520.6,FALSE
+Belgium,231,964.8,FALSE
+Belgium,235,210.2,FALSE
+Belgium,243,520.6,FALSE
+Belgium,248,215.9,FALSE
+Belgium,249,8236.7,FALSE
+Belgium,259,107.6,FALSE
+Belgium,281,1174.3,FALSE
+Belgium,282,29.1,FALSE
+Belgium,305,2000,FALSE
+Belgium,306,758.4,FALSE
+Belgium,308,63.5,FALSE
+Belgium,318,147.5,FALSE
+Bhutan,7,744.1,FALSE
+Bhutan,12,1771,FALSE
+Bhutan,16,386.9,FALSE
+Bhutan,18,1212.9,FALSE
+Bhutan,19,684.6,FALSE
+Bhutan,39,654.8,FALSE
+Bhutan,40,386.9,FALSE
+Bhutan,49,580.4,FALSE
+Bhutan,54,729.2,FALSE
+Bhutan,63,982.2,FALSE
+Bhutan,101,550.6,FALSE
+Bhutan,112,1116.1,FALSE
+Bhutan,115,639.9,FALSE
+Bhutan,169,878,FALSE
+Bhutan,175,639.9,FALSE
+Bhutan,192,5521.2,FALSE
+Bhutan,194,699.5,FALSE
+Bhutan,219,625,FALSE
+Bhutan,221,759,FALSE
+Bhutan,218,625,FALSE
+Bhutan,228,416.7,FALSE
+Bhutan,231,416.7,FALSE
+Bhutan,235,357.2,FALSE
+Bhutan,254,818.5,FALSE
+Bhutan,276,788.7,FALSE
+Bhutan,286,297.6,FALSE
+Bhutan,306,625,FALSE
+Bhutan,318,565.5,FALSE
+Bolivia (Plurinational State of),7,646.3,FALSE
+Bolivia (Plurinational State of),17,213.6,FALSE
+Bolivia (Plurinational State of),19,752.1,FALSE
+Bolivia (Plurinational State of),49,160.3,FALSE
+Bolivia (Plurinational State of),52,205.7,FALSE
+Bolivia (Plurinational State of),59,683.9,FALSE
+Bolivia (Plurinational State of),63,455,FALSE
+Bolivia (Plurinational State of),74,2075.3,FALSE
+Bolivia (Plurinational State of),77,1325.5,FALSE
+Bolivia (Plurinational State of),90,166,FALSE
+Bolivia (Plurinational State of),112,1330.6,FALSE
+Bolivia (Plurinational State of),120,549.4,FALSE
+Bolivia (Plurinational State of),128,741.6,FALSE
+Bolivia (Plurinational State of),158,273.9,FALSE
+Bolivia (Plurinational State of),169,303.7,FALSE
+Bolivia (Plurinational State of),205,94.8,FALSE
+Bolivia (Plurinational State of),218,620.7,FALSE
+Bolivia (Plurinational State of),235,321.8,FALSE
+Bolivia (Plurinational State of),238,133.6,FALSE
+Bolivia (Plurinational State of),245,1028.8,FALSE
+Bolivia (Plurinational State of),254,269.9,FALSE
+Bolivia (Plurinational State of),270,124.9,FALSE
+Bolivia (Plurinational State of),276,268.2,FALSE
+Bolivia (Plurinational State of),286,97.1,FALSE
+Bolivia (Plurinational State of),289,294.9,FALSE
+Bolivia (Plurinational State of),296,309.8,FALSE
+Bolivia (Plurinational State of),306,213.5,FALSE
+Bolivia (Plurinational State of),318,283.6,FALSE
+Bosnia and Herzegovina,7,401.6,FALSE
+Bosnia and Herzegovina,8,799.7,FALSE
+Bosnia and Herzegovina,17,174.2,FALSE
+Bosnia and Herzegovina,18,2333,FALSE
+Bosnia and Herzegovina,19,977.9,FALSE
+Bosnia and Herzegovina,39,509,FALSE
+Bosnia and Herzegovina,40,148.7,FALSE
+Bosnia and Herzegovina,49,498.8,FALSE
+Bosnia and Herzegovina,58,2174,FALSE
+Bosnia and Herzegovina,63,588.8,FALSE
+Bosnia and Herzegovina,90,519.8,FALSE
+Bosnia and Herzegovina,105,2293.9,FALSE
+Bosnia and Herzegovina,112,2922.8,FALSE
+Bosnia and Herzegovina,120,527.1,FALSE
+Bosnia and Herzegovina,154,1747.6,FALSE
+Bosnia and Herzegovina,158,555.4,FALSE
+Bosnia and Herzegovina,169,154.4,FALSE
+Bosnia and Herzegovina,200,226.2,FALSE
+Bosnia and Herzegovina,205,219.4,FALSE
+Bosnia and Herzegovina,219,696.8,FALSE
+Bosnia and Herzegovina,221,638,FALSE
+Bosnia and Herzegovina,231,535.6,FALSE
+Bosnia and Herzegovina,235,204.2,FALSE
+Bosnia and Herzegovina,243,261.3,FALSE
+Bosnia and Herzegovina,248,369.3,FALSE
+Bosnia and Herzegovina,249,1671.8,FALSE
+Bosnia and Herzegovina,259,194.6,FALSE
+Bosnia and Herzegovina,276,319.5,FALSE
+Bosnia and Herzegovina,281,1193.9,FALSE
+Bosnia and Herzegovina,289,275.4,FALSE
+Bosnia and Herzegovina,298,381.8,FALSE
+Bosnia and Herzegovina,305,1545.1,FALSE
+Bosnia and Herzegovina,306,565,FALSE
+Bosnia and Herzegovina,308,169.7,FALSE
+Bosnia and Herzegovina,316,2554.7,FALSE
+Bosnia and Herzegovina,317,109.2,FALSE
+Bosnia and Herzegovina,318,178.7,FALSE
+Brazil,16,630.6,FALSE
+Brazil,18,1232.4,FALSE
+Brazil,52,86.1,FALSE
+Brazil,77,2235.6,FALSE
+Brazil,169,183.7,FALSE
+Brazil,235,544.6,FALSE
+Brazil,254,258,FALSE
+Brazil,84,1031.8,FALSE
+Brazil,276,343.9,FALSE
+Brazil,286,20.5,FALSE
+Brazil,305,2378.9,FALSE
+Brazil,306,601.9,FALSE
+Bulgaria,7,250.9,FALSE
+Bulgaria,8,343.3,FALSE
+Bulgaria,17,155.6,FALSE
+Bulgaria,18,1238.4,FALSE
+Bulgaria,19,311.1,FALSE
+Bulgaria,40,196,FALSE
+Bulgaria,49,201.9,FALSE
+Bulgaria,58,624.4,FALSE
+Bulgaria,63,309.9,FALSE
+Bulgaria,90,574.5,FALSE
+Bulgaria,101,214.4,FALSE
+Bulgaria,112,1363.1,FALSE
+Bulgaria,120,330.3,FALSE
+Bulgaria,128,1244.3,FALSE
+Bulgaria,138,11204.5,FALSE
+Bulgaria,156,817.9,FALSE
+Bulgaria,169,157.6,FALSE
+Bulgaria,192,1505.1,FALSE
+Bulgaria,200,194,FALSE
+Bulgaria,205,257.1,FALSE
+Bulgaria,219,314.5,FALSE
+Bulgaria,221,656.5,FALSE
+Bulgaria,217,291.6,FALSE
+Bulgaria,218,283.9,FALSE
+Bulgaria,231,226.8,FALSE
+Bulgaria,235,214.7,FALSE
+Bulgaria,238,272.1,FALSE
+Bulgaria,248,385.2,FALSE
+Bulgaria,249,2011.8,FALSE
+Bulgaria,254,341.9,FALSE
+Bulgaria,259,159.5,FALSE
+Bulgaria,84,125.5,TRUE
+Bulgaria,270,153.8,FALSE
+Bulgaria,276,406.1,FALSE
+Bulgaria,281,1403.2,FALSE
+Bulgaria,289,394.2,FALSE
+Bulgaria,305,3115.9,FALSE
+Bulgaria,306,475.7,FALSE
+Bulgaria,308,156.7,FALSE
+Bulgaria,316,1129.5,FALSE
+Bulgaria,317,152.1,FALSE
+Bulgaria,318,155.5,FALSE
+Cabo Verde,16,1195.6,FALSE
+Cabo Verde,19,3948.8,FALSE
+Cabo Verde,40,1816.9,FALSE
+Cabo Verde,49,2272.7,FALSE
+Cabo Verde,52,2231.4,FALSE
+Cabo Verde,90,1562.8,FALSE
+Cabo Verde,112,3553.3,FALSE
+Cabo Verde,158,2875.8,FALSE
+Cabo Verde,169,704.9,FALSE
+Cabo Verde,205,1167.3,FALSE
+Cabo Verde,235,2043.6,FALSE
+Cabo Verde,238,2194.4,FALSE
+Cabo Verde,296,1889.2,FALSE
+Cabo Verde,306,1762.3,FALSE
+Cabo Verde,317,1660.9,FALSE
+Canada,7,421.5,FALSE
+Canada,8,1244.8,FALSE
+Canada,12,3100.6,FALSE
+Canada,17,165.4,FALSE
+Canada,18,654.5,FALSE
+Canada,19,521.4,FALSE
+Canada,30,911.7,FALSE
+Canada,40,358.1,FALSE
+Canada,49,259.5,FALSE
+Canada,54,710.9,FALSE
+Canada,58,2679.6,FALSE
+Canada,60,652.1,FALSE
+Canada,63,666.1,FALSE
+Canada,88,640.2,FALSE
+Canada,90,465.6,FALSE
+Canada,112,8030.5,FALSE
+Canada,120,1171.2,FALSE
+Canada,152,1294.6,FALSE
+Canada,156,624.7,FALSE
+Canada,158,658.1,FALSE
+Canada,161,347.1,FALSE
+Canada,169,146.4,FALSE
+Canada,80,289.6,FALSE
+Canada,179,368.1,FALSE
+Canada,192,2959,FALSE
+Canada,194,675.2,FALSE
+Canada,200,132.7,FALSE
+Canada,205,301.7,FALSE
+Canada,219,1280.5,FALSE
+Canada,221,896.4,FALSE
+Canada,217,265.1,FALSE
+Canada,218,326,FALSE
+Canada,231,1522,FALSE
+Canada,235,211.6,FALSE
+Canada,238,243.4,FALSE
+Canada,248,357.8,FALSE
+Canada,249,2403.4,FALSE
+Canada,259,148.2,FALSE
+Canada,276,341.8,FALSE
+Canada,279,1584.5,FALSE
+Canada,281,3064,FALSE
+Canada,289,433.7,FALSE
+Canada,305,4285.5,FALSE
+Canada,306,172.3,FALSE
+Canada,317,368.1,FALSE
+Canada,318,174.3,FALSE
+Chile,7,650.2,FALSE
+Chile,8,1079.7,FALSE
+Chile,12,2012,FALSE
+Chile,13,2466,FALSE
+Chile,18,1991.9,FALSE
+Chile,19,1249.9,FALSE
+Chile,49,363.2,FALSE
+Chile,58,2279.8,FALSE
+Chile,60,2084.2,FALSE
+Chile,63,1260.5,FALSE
+Chile,88,5169.8,FALSE
+Chile,112,2816.1,FALSE
+Chile,121,730.6,FALSE
+Chile,120,1801,FALSE
+Chile,154,676.2,FALSE
+Chile,156,2189.8,FALSE
+Chile,169,84.7,FALSE
+Chile,205,524.8,FALSE
+Chile,208,626.6,FALSE
+Chile,215,1500.8,FALSE
+Chile,219,1052.4,FALSE
+Chile,221,610.8,FALSE
+Chile,217,2053.3,FALSE
+Chile,218,973.6,FALSE
+Chile,231,638.7,FALSE
+Chile,235,368.9,FALSE
+Chile,238,724.5,FALSE
+Chile,243,789.1,FALSE
+Chile,249,4672.4,FALSE
+Chile,254,15.3,FALSE
+Chile,279,929.8,FALSE
+Chile,281,1713.1,FALSE
+Chile,298,693,FALSE
+Chile,306,758.9,FALSE
+Chile,317,1097.1,FALSE
+Chile,318,84.8,FALSE
+"China, mainland",7,468.4,FALSE
+"China, mainland",40,279,FALSE
+"China, mainland",49,342.8,FALSE
+"China, mainland",54,527.1,FALSE
+"China, mainland",63,571,FALSE
+"China, mainland",90,479.3,FALSE
+"China, mainland",101,524.2,FALSE
+"China, mainland",112,1487.6,FALSE
+"China, mainland",128,967.7,FALSE
+"China, mainland",158,558.2,FALSE
+"China, mainland",169,264.3,FALSE
+"China, mainland",192,1084.8,FALSE
+"China, mainland",206,579.3,FALSE
+"China, mainland",235,325.5,FALSE
+"China, mainland",238,334,FALSE
+"China, mainland",248,682.1,FALSE
+"China, mainland",254,559.9,FALSE
+"China, mainland",276,581.5,FALSE
+"China, mainland",279,630.7,FALSE
+"China, mainland",282,69.8,FALSE
+"China, mainland",306,513.8,FALSE
+"China, mainland",318,385.1,FALSE
+Colombia,13,513.3,FALSE
+Colombia,17,332.9,FALSE
+Colombia,18,1154.1,FALSE
+Colombia,19,629.9,FALSE
+Colombia,49,191.9,FALSE
+Colombia,52,272,FALSE
+Colombia,154,261.5,FALSE
+Colombia,175,224.4,FALSE
+Colombia,205,262.5,FALSE
+Colombia,215,240.9,FALSE
+Colombia,217,770.9,FALSE
+Colombia,218,513.3,FALSE
+Colombia,228,173.5,FALSE
+Colombia,235,262.5,FALSE
+Colombia,254,381.8,FALSE
+Colombia,84,1205.5,FALSE
+Colombia,306,238,FALSE
+Colombia,319,264.1,FALSE
+Costa Rica,16,423.9,FALSE
+Costa Rica,18,1089.5,FALSE
+Costa Rica,49,353.2,FALSE
+Costa Rica,54,771.5,FALSE
+Costa Rica,77,1370.1,FALSE
+Costa Rica,90,393.3,FALSE
+Costa Rica,158,280,FALSE
+Costa Rica,169,493.4,FALSE
+Costa Rica,205,1044.8,FALSE
+Costa Rica,208,50.5,FALSE
+Costa Rica,215,282.2,FALSE
+Costa Rica,235,812.5,FALSE
+Costa Rica,254,552.3,FALSE
+Costa Rica,296,642.5,FALSE
+Costa Rica,305,4999.9,FALSE
+Costa Rica,306,1155.1,FALSE
+Costa Rica,317,378.7,FALSE
+Costa Rica,319,674.6,FALSE
+Croatia,4,2206.4,FALSE
+Croatia,7,329.3,FALSE
+Croatia,8,715.6,FALSE
+Croatia,17,145.5,FALSE
+Croatia,18,1076.9,FALSE
+Croatia,19,1620.2,FALSE
+Croatia,40,185.9,FALSE
+Croatia,49,231.1,FALSE
+Croatia,54,588.9,FALSE
+Croatia,58,2387,FALSE
+Croatia,63,476,FALSE
+Croatia,90,639.1,FALSE
+Croatia,105,2273.3,FALSE
+Croatia,112,3012,FALSE
+Croatia,120,787.9,FALSE
+Croatia,106,3195.8,FALSE
+Croatia,152,687.6,FALSE
+Croatia,154,1105.4,FALSE
+Croatia,158,597.7,FALSE
+Croatia,169,131.9,FALSE
+Croatia,179,389.8,FALSE
+Croatia,192,2452.6,FALSE
+Croatia,200,137.9,FALSE
+Croatia,203,938.6,FALSE
+Croatia,205,211.9,FALSE
+Croatia,206,1156.7,FALSE
+Croatia,208,477.6,FALSE
+Croatia,219,677.4,FALSE
+Croatia,221,505,FALSE
+Croatia,217,293.9,FALSE
+Croatia,218,358.5,FALSE
+Croatia,231,315.7,FALSE
+Croatia,235,200.4,FALSE
+Croatia,248,349.5,FALSE
+Croatia,259,131.5,FALSE
+Croatia,276,341.9,FALSE
+Croatia,281,1959.9,FALSE
+Croatia,282,38.5,FALSE
+Croatia,289,324.9,FALSE
+Croatia,298,254.6,FALSE
+Croatia,305,1292.3,FALSE
+Croatia,306,510.7,FALSE
+Croatia,308,135.3,FALSE
+Croatia,316,2149.2,FALSE
+Croatia,317,183.9,FALSE
+Croatia,318,135,FALSE
+Cyprus,4,1482.2,FALSE
+Cyprus,7,597.3,FALSE
+Cyprus,8,1482.2,FALSE
+Cyprus,11,464.6,FALSE
+Cyprus,13,2013.2,FALSE
+Cyprus,16,442.5,FALSE
+Cyprus,17,199.1,FALSE
+Cyprus,18,2765.4,FALSE
+Cyprus,19,2311.9,FALSE
+Cyprus,33,2057.4,FALSE
+Cyprus,40,542,FALSE
+Cyprus,48,420.3,FALSE
+Cyprus,49,475.6,FALSE
+Cyprus,54,907,FALSE
+Cyprus,58,6260.8,FALSE
+Cyprus,60,2269.8,FALSE
+Cyprus,63,1028.7,FALSE
+Cyprus,86,4175.7,FALSE
+Cyprus,90,724.5,FALSE
+Cyprus,101,519.9,FALSE
+Cyprus,105,1581.8,FALSE
+Cyprus,121,254.4,FALSE
+Cyprus,120,387.2,FALSE
+Cyprus,128,2754.3,FALSE
+Cyprus,106,2754.3,FALSE
+Cyprus,154,365,FALSE
+Cyprus,156,1769.8,FALSE
+Cyprus,158,1327.4,FALSE
+Cyprus,179,320.8,FALSE
+Cyprus,192,2920.2,FALSE
+Cyprus,200,331.8,FALSE
+Cyprus,202,1902.6,FALSE
+Cyprus,203,1039.8,FALSE
+Cyprus,205,298.7,FALSE
+Cyprus,206,2020.9,FALSE
+Cyprus,208,232.3,FALSE
+Cyprus,219,1216.8,FALSE
+Cyprus,221,1194.6,FALSE
+Cyprus,218,1924.7,FALSE
+Cyprus,229,3894.8,FALSE
+Cyprus,231,901.5,FALSE
+Cyprus,235,398.2,FALSE
+Cyprus,238,730.1,FALSE
+Cyprus,243,1105,FALSE
+Cyprus,267,2024.3,FALSE
+Cyprus,279,1155.9,FALSE
+Cyprus,281,1338.4,FALSE
+Cyprus,298,394.9,FALSE
+Cyprus,301,1139.3,FALSE
+Cyprus,306,1095.1,FALSE
+Cyprus,308,210.2,FALSE
+Cyprus,316,5254.2,FALSE
+Cyprus,317,320.8,FALSE
+Cyprus,318,265.5,FALSE
+Czechia,7,267.9,FALSE
+Czechia,8,1131.3,FALSE
+Czechia,17,164,FALSE
+Czechia,40,290.3,FALSE
+Czechia,49,311.3,FALSE
+Czechia,54,631.6,FALSE
+Czechia,58,1703,FALSE
+Czechia,63,806.2,FALSE
+Czechia,90,817.1,FALSE
+Czechia,91,515.8,FALSE
+Czechia,112,5229.6,FALSE
+Czechia,120,800.4,FALSE
+Czechia,138,8567.5,FALSE
+Czechia,158,1296.3,FALSE
+Czechia,161,713.3,FALSE
+Czechia,169,159.6,FALSE
+Czechia,192,1709.6,FALSE
+Czechia,194,627.6,FALSE
+Czechia,200,164.4,FALSE
+Czechia,205,319.2,FALSE
+Czechia,219,777.6,FALSE
+Czechia,221,588.3,FALSE
+Czechia,217,238.8,FALSE
+Czechia,231,469.2,FALSE
+Czechia,234,1365.3,FALSE
+Czechia,235,233.1,FALSE
+Czechia,248,414.4,FALSE
+Czechia,259,153.5,FALSE
+Czechia,281,2775.5,FALSE
+Czechia,282,34.9,FALSE
+Czechia,289,394.9,FALSE
+Czechia,306,1007.2,FALSE
+Czechia,308,138.1,FALSE
+Czechia,318,148.1,FALSE
+Denmark,7,468.5,FALSE
+Denmark,17,151.8,FALSE
+Denmark,40,241.2,FALSE
+Denmark,49,600.3,FALSE
+Denmark,54,1475.6,FALSE
+Denmark,58,4324.3,FALSE
+Denmark,90,1425.9,FALSE
+Denmark,91,112.6,FALSE
+Denmark,152,289.7,FALSE
+Denmark,158,1697,FALSE
+Denmark,192,11015.5,FALSE
+Denmark,200,141.6,FALSE
+Denmark,205,265.8,FALSE
+Denmark,221,844.7,FALSE
+Denmark,217,197.9,FALSE
+Denmark,231,2125,FALSE
+Denmark,235,275.7,FALSE
+Denmark,248,398.3,FALSE
+Denmark,249,10050.9,FALSE
+Denmark,259,136.8,FALSE
+Denmark,281,3424.1,FALSE
+Denmark,282,44.7,FALSE
+Denmark,306,1402,FALSE
+Denmark,308,144.2,FALSE
+Denmark,318,153.9,FALSE
+Ecuador,7,876.7,FALSE
+Ecuador,8,634.5,FALSE
+Ecuador,13,1022.1,FALSE
+Ecuador,16,255.3,FALSE
+Ecuador,17,440.5,FALSE
+Ecuador,18,1610.1,FALSE
+Ecuador,19,675.3,FALSE
+Ecuador,40,105.6,FALSE
+Ecuador,49,162.7,FALSE
+Ecuador,52,187.8,FALSE
+Ecuador,54,326.2,FALSE
+Ecuador,63,612.5,FALSE
+Ecuador,74,2300.3,FALSE
+Ecuador,77,435.8,FALSE
+Ecuador,90,307.2,FALSE
+Ecuador,128,1579.6,FALSE
+Ecuador,158,151,FALSE
+Ecuador,169,1076.8,FALSE
+Ecuador,133,1925.8,FALSE
+Ecuador,179,502.6,FALSE
+Ecuador,205,357.5,FALSE
+Ecuador,206,586.3,FALSE
+Ecuador,208,367.2,FALSE
+Ecuador,215,410,FALSE
+Ecuador,221,797,FALSE
+Ecuador,217,1375.5,FALSE
+Ecuador,228,354.7,FALSE
+Ecuador,231,1896,FALSE
+Ecuador,235,335.4,FALSE
+Ecuador,254,362.7,FALSE
+Ecuador,84,744.3,FALSE
+Ecuador,276,592.8,FALSE
+Ecuador,281,1229.7,FALSE
+Ecuador,286,32.2,FALSE
+Ecuador,302,8333.3,FALSE
+Ecuador,306,507.3,FALSE
+Ecuador,317,500.9,FALSE
+Estonia,7,346.1,FALSE
+Estonia,17,139.7,FALSE
+Estonia,200,112.7,FALSE
+Estonia,235,463,FALSE
+Estonia,248,401.6,FALSE
+Estonia,259,112.1,FALSE
+Estonia,306,1460.8,FALSE
+Estonia,318,151.5,FALSE
+Ethiopia,13,234.1,FALSE
+Ethiopia,16,228.2,FALSE
+Ethiopia,17,346,FALSE
+Ethiopia,18,649.3,FALSE
+Ethiopia,40,170,FALSE
+Ethiopia,49,228.2,FALSE
+Ethiopia,53,432.6,FALSE
+Ethiopia,60,678.2,FALSE
+Ethiopia,63,589.7,FALSE
+Ethiopia,112,1586.3,FALSE
+Ethiopia,115,622.7,FALSE
+Ethiopia,120,146.6,FALSE
+Ethiopia,128,930.6,FALSE
+Ethiopia,138,1163.9,FALSE
+Ethiopia,154,292.3,FALSE
+Ethiopia,156,1431,FALSE
+Ethiopia,158,547.1,FALSE
+Ethiopia,161,988.4,FALSE
+Ethiopia,169,186,FALSE
+Ethiopia,175,259.3,FALSE
+Ethiopia,180,290,FALSE
+Ethiopia,198,620,FALSE
+Ethiopia,200,433.9,FALSE
+Ethiopia,205,414.2,FALSE
+Ethiopia,208,304.3,FALSE
+Ethiopia,215,247,FALSE
+Ethiopia,217,719.4,FALSE
+Ethiopia,218,453.6,FALSE
+Ethiopia,228,303.3,FALSE
+Ethiopia,235,184.2,FALSE
+Ethiopia,238,126.9,FALSE
+Ethiopia,248,710.2,FALSE
+Ethiopia,254,373.4,FALSE
+Ethiopia,267,770.7,FALSE
+Ethiopia,270,261.6,FALSE
+Ethiopia,276,384.4,FALSE
+Ethiopia,279,287.8,FALSE
+Ethiopia,286,125.1,FALSE
+Ethiopia,289,582.8,FALSE
+Ethiopia,296,135.2,FALSE
+Ethiopia,306,301.5,FALSE
+Ethiopia,318,392.7,FALSE
+Finland,7,1622.7,FALSE
+Finland,17,137.2,FALSE
+Finland,49,720.1,FALSE
+Finland,90,1609.5,FALSE
+Finland,91,3140.4,FALSE
+Finland,200,143.8,FALSE
+Finland,205,702.4,FALSE
+Finland,235,221.2,FALSE
+Finland,248,410.4,FALSE
+Finland,259,186.9,FALSE
+Finland,281,5468.8,FALSE
+Finland,282,37.6,FALSE
+Finland,306,1872.7,FALSE
+Finland,318,167,FALSE
+France,7,675.2,FALSE
+France,8,1738,FALSE
+France,11,1173.9,FALSE
+France,17,138.9,FALSE
+France,19,256.7,FALSE
+France,40,730.3,FALSE
+France,49,225.9,FALSE
+France,54,326.1,FALSE
+France,58,3486.8,FALSE
+France,63,2105.4,FALSE
+France,90,869.8,FALSE
+France,120,2320.5,FALSE
+France,106,2363.8,FALSE
+France,158,990.1,FALSE
+France,169,180.3,FALSE
+France,192,1147.3,FALSE
+France,200,172,FALSE
+France,203,1751.1,FALSE
+France,206,220.7,FALSE
+France,219,2339.1,FALSE
+France,221,867.2,FALSE
+France,218,312.1,FALSE
+France,235,404.5,FALSE
+France,248,393.2,FALSE
+France,254,338.9,FALSE
+France,259,188.7,FALSE
+France,276,376.3,FALSE
+France,281,4603.3,FALSE
+France,282,32.2,FALSE
+France,289,436.2,FALSE
+France,305,3792.6,FALSE
+France,306,908.8,FALSE
+France,308,139.8,FALSE
+France,316,3202.3,FALSE
+France,318,159.9,FALSE
+Georgia,7,246.6,FALSE
+Georgia,17,183.3,FALSE
+Georgia,18,1321,FALSE
+Georgia,40,76.6,FALSE
+Georgia,49,186.3,FALSE
+Georgia,58,666.5,FALSE
+Georgia,90,334.2,FALSE
+Georgia,120,389.2,FALSE
+Georgia,106,1880.4,FALSE
+Georgia,169,217.5,FALSE
+Georgia,205,170.1,FALSE
+Georgia,219,182.2,FALSE
+Georgia,221,447.8,FALSE
+Georgia,231,332.2,FALSE
+Georgia,235,181.4,FALSE
+Georgia,243,318.1,FALSE
+Georgia,289,377,FALSE
+Georgia,306,260.3,FALSE
+Georgia,316,1873.5,FALSE
+Georgia,317,91.9,FALSE
+Georgia,318,173.8,FALSE
+Germany,7,495.6,FALSE
+Germany,8,2145.9,FALSE
+Germany,12,5274.1,FALSE
+Germany,17,139.4,FALSE
+Germany,19,1405.9,FALSE
+Germany,30,6686.7,FALSE
+Germany,40,192.5,FALSE
+Germany,49,281,FALSE
+Germany,54,746.7,FALSE
+Germany,58,3178,FALSE
+Germany,90,648.2,FALSE
+Germany,91,2603.9,FALSE
+Germany,116,3335,FALSE
+Germany,138,495.6,FALSE
+Germany,152,710.1,FALSE
+Germany,158,1341.8,FALSE
+Germany,169,168.1,FALSE
+Germany,192,2189.1,FALSE
+Germany,200,157.1,FALSE
+Germany,205,232.3,FALSE
+Germany,219,1806.3,FALSE
+Germany,221,627.2,FALSE
+Germany,218,2538.6,FALSE
+Germany,231,884.9,FALSE
+Germany,235,221.2,FALSE
+Germany,238,838.5,FALSE
+Germany,248,393.8,FALSE
+Germany,249,6979.8,FALSE
+Germany,259,135,FALSE
+Germany,279,1592.9,FALSE
+Germany,281,2563,FALSE
+Germany,282,38.7,FALSE
+Germany,305,5054,FALSE
+Germany,306,1674.7,FALSE
+Germany,308,141.6,FALSE
+Germany,316,4982.1,FALSE
+Germany,318,154.9,FALSE
+Greece,4,3192.1,FALSE
+Greece,7,616.8,FALSE
+Greece,8,862.2,FALSE
+Greece,11,1331.5,FALSE
+Greece,12,6246.9,FALSE
+Greece,17,179.2,FALSE
+Greece,18,3108.4,FALSE
+Greece,19,1818.1,FALSE
+Greece,40,398.5,FALSE
+Greece,48,245.1,FALSE
+Greece,49,877.1,FALSE
+Greece,54,899.3,FALSE
+Greece,58,2689.8,FALSE
+Greece,59,2159.8,FALSE
+Greece,60,2408.3,FALSE
+Greece,61,599.6,FALSE
+Greece,63,612.2,FALSE
+Greece,90,574.6,FALSE
+Greece,91,1221.4,FALSE
+Greece,101,700.5,FALSE
+Greece,105,2228.6,FALSE
+Greece,112,3368.8,FALSE
+Greece,120,778.9,FALSE
+Greece,128,1196.8,FALSE
+Greece,106,4978.7,FALSE
+Greece,152,651.1,FALSE
+Greece,154,625.6,FALSE
+Greece,156,1642.2,FALSE
+Greece,158,901.1,FALSE
+Greece,169,238,FALSE
+Greece,179,563.1,FALSE
+Greece,192,3452.1,FALSE
+Greece,200,187.5,FALSE
+Greece,202,3084.2,FALSE
+Greece,203,2347.7,FALSE
+Greece,205,537.6,FALSE
+Greece,206,832.9,FALSE
+Greece,208,302.4,FALSE
+Greece,219,417.9,FALSE
+Greece,221,1608.3,FALSE
+Greece,218,1005.3,FALSE
+Greece,229,11145.3,FALSE
+Greece,235,545.2,FALSE
+Greece,238,862.4,FALSE
+Greece,254,250,FALSE
+Greece,259,145.5,FALSE
+Greece,84,555,FALSE
+Greece,279,731.8,FALSE
+Greece,281,1776.2,FALSE
+Greece,282,29.2,FALSE
+Greece,289,387.2,FALSE
+Greece,298,434.5,FALSE
+Greece,305,4104.1,FALSE
+Greece,306,498.4,FALSE
+Greece,316,3399.6,FALSE
+Greece,317,245.6,FALSE
+Greece,318,208,FALSE
+Grenada,13,1167.6,FALSE
+Grenada,16,925.7,FALSE
+Grenada,18,2121.3,FALSE
+Grenada,40,1790.2,FALSE
+Grenada,49,2076,FALSE
+Grenada,52,815.8,FALSE
+Grenada,54,2999.7,FALSE
+Grenada,74,2141.5,FALSE
+Grenada,75,1924.8,FALSE
+Grenada,90,885.5,FALSE
+Grenada,115,2868,FALSE
+Grenada,121,620.3,FALSE
+Grenada,154,305.9,FALSE
+Grenada,158,2909.1,FALSE
+Grenada,169,900.8,FALSE
+Grenada,175,525.9,FALSE
+Grenada,179,1536,FALSE
+Grenada,198,3263.2,FALSE
+Grenada,208,573.3,FALSE
+Grenada,215,680.7,FALSE
+Grenada,227,1835.5,FALSE
+Grenada,228,2099,FALSE
+Grenada,231,571.1,FALSE
+Grenada,238,1209.7,FALSE
+Grenada,286,611.8,FALSE
+Grenada,296,1572.1,FALSE
+Grenada,306,1815.7,FALSE
+Grenada,317,1278.9,FALSE
+Grenada,319,1535.7,FALSE
+Guyana,16,468.7,FALSE
+Guyana,40,1474.6,FALSE
+Guyana,52,242.1,FALSE
+Guyana,58,1523,FALSE
+Guyana,63,1635.2,FALSE
+Guyana,75,329.5,FALSE
+Guyana,90,240.7,FALSE
+Guyana,101,719.1,FALSE
+Guyana,115,2257.1,FALSE
+Guyana,154,523.9,FALSE
+Guyana,202,638,FALSE
+Guyana,208,926.5,FALSE
+Guyana,215,777.3,FALSE
+Guyana,228,588.5,FALSE
+Guyana,238,240.2,FALSE
+Guyana,296,437,FALSE
+Guyana,301,353.5,FALSE
+Guyana,306,1510.9,FALSE
+Guyana,317,444.1,FALSE
+Guyana,319,1031.1,FALSE
+Hungary,7,96.1,FALSE
+Hungary,8,576.1,FALSE
+Hungary,12,1935.2,FALSE
+Hungary,17,130.5,FALSE
+Hungary,18,786.6,FALSE
+Hungary,19,261.4,FALSE
+Hungary,30,5940.2,FALSE
+Hungary,40,235,FALSE
+Hungary,49,188.1,FALSE
+Hungary,54,453.7,FALSE
+Hungary,58,968.9,FALSE
+Hungary,59,669.5,FALSE
+Hungary,63,296.1,FALSE
+Hungary,63,296.1,FALSE
+Hungary,90,455.4,FALSE
+Hungary,91,426.2,FALSE
+Hungary,101,529.5,FALSE
+Hungary,112,1941.3,FALSE
+Hungary,116,685.8,FALSE
+Hungary,120,91.7,FALSE
+Hungary,152,843.9,FALSE
+Hungary,158,734.9,FALSE
+Hungary,169,148,FALSE
+Hungary,80,133,FALSE
+Hungary,179,440.9,FALSE
+Hungary,180,271.8,FALSE
+Hungary,192,1193.1,FALSE
+Hungary,200,143,FALSE
+Hungary,205,226.4,FALSE
+Hungary,219,286.6,FALSE
+Hungary,221,372.2,FALSE
+Hungary,217,461.9,FALSE
+Hungary,218,309,FALSE
+Hungary,231,238.9,FALSE
+Hungary,234,1458.8,FALSE
+Hungary,235,285.5,FALSE
+Hungary,238,256.7,FALSE
+Hungary,243,416.6,FALSE
+Hungary,248,390.5,FALSE
+Hungary,249,2185.2,FALSE
+Hungary,259,126.7,FALSE
+Hungary,270,139.7,FALSE
+Hungary,276,374,FALSE
+Hungary,279,81.9,FALSE
+Hungary,281,2297.7,FALSE
+Hungary,289,375.9,FALSE
+Hungary,306,326,FALSE
+Hungary,308,122.4,FALSE
+Hungary,316,572.4,FALSE
+Hungary,317,110.7,FALSE
+Hungary,318,141.9,FALSE
+Iceland,17,249.6,FALSE
+Iceland,40,1278,FALSE
+Iceland,49,3013.8,FALSE
+Iceland,54,2724.1,FALSE
+Iceland,90,2265.5,FALSE
+Iceland,192,5378.6,FALSE
+Iceland,235,903.1,FALSE
+Iceland,306,4521.1,FALSE
+Indonesia,13,581.9,FALSE
+Indonesia,19,816.2,FALSE
+Indonesia,40,376.6,FALSE
+Indonesia,49,627.2,FALSE
+Indonesia,52,198.3,FALSE
+Indonesia,63,2181.2,FALSE
+Indonesia,74,1868.8,FALSE
+Indonesia,77,1488.8,FALSE
+Indonesia,90,350.9,FALSE
+Indonesia,101,356.7,FALSE
+Indonesia,128,1094.4,FALSE
+Indonesia,169,307.7,FALSE
+Indonesia,175,572.9,FALSE
+Indonesia,179,457.4,FALSE
+Indonesia,198,3865.9,FALSE
+Indonesia,208,568,FALSE
+Indonesia,215,283,FALSE
+Indonesia,235,761,FALSE
+Indonesia,254,703.2,FALSE
+Indonesia,257,479.1,FALSE
+Indonesia,276,622.5,FALSE
+Indonesia,279,401.8,FALSE
+Indonesia,296,296.1,FALSE
+Indonesia,306,644.9,FALSE
+Indonesia,317,361.7,FALSE
+Iran (Islamic Republic of),4,4757.6,FALSE
+Iran (Islamic Republic of),7,493.9,FALSE
+Iran (Islamic Republic of),8,983.7,FALSE
+Iran (Islamic Republic of),16,603.7,FALSE
+Iran (Islamic Republic of),17,276.3,FALSE
+Iran (Islamic Republic of),18,1575.7,FALSE
+Iran (Islamic Republic of),49,147.6,FALSE
+Iran (Islamic Republic of),58,1301.2,FALSE
+Iran (Islamic Republic of),60,1330.3,FALSE
+Iran (Islamic Republic of),90,325.3,FALSE
+Iran (Islamic Republic of),94,785.1,FALSE
+Iran (Islamic Republic of),101,233,FALSE
+Iran (Islamic Republic of),105,713.8,FALSE
+Iran (Islamic Republic of),112,1038.1,FALSE
+Iran (Islamic Republic of),121,327.5,FALSE
+Iran (Islamic Republic of),120,327.2,FALSE
+Iran (Islamic Republic of),106,5846.4,FALSE
+Iran (Islamic Republic of),152,233.1,FALSE
+Iran (Islamic Republic of),154,1652.7,FALSE
+Iran (Islamic Republic of),156,1481.4,FALSE
+Iran (Islamic Republic of),158,178.7,FALSE
+Iran (Islamic Republic of),169,377.7,FALSE
+Iran (Islamic Republic of),175,852.7,FALSE
+Iran (Islamic Republic of),179,243.9,FALSE
+Iran (Islamic Republic of),180,468.9,FALSE
+Iran (Islamic Republic of),203,1325,FALSE
+Iran (Islamic Republic of),205,156.1,FALSE
+Iran (Islamic Republic of),208,245.2,FALSE
+Iran (Islamic Republic of),219,695.2,FALSE
+Iran (Islamic Republic of),221,1554.5,FALSE
+Iran (Islamic Republic of),229,7943.1,FALSE
+Iran (Islamic Republic of),231,619.8,FALSE
+Iran (Islamic Republic of),235,136.4,FALSE
+Iran (Islamic Republic of),243,792.6,FALSE
+Iran (Islamic Republic of),254,1158.9,FALSE
+Iran (Islamic Republic of),84,973,FALSE
+Iran (Islamic Republic of),267,1746,FALSE
+Iran (Islamic Republic of),276,712.1,FALSE
+Iran (Islamic Republic of),279,236.9,FALSE
+Iran (Islamic Republic of),281,1223.1,FALSE
+Iran (Islamic Republic of),282,95.6,FALSE
+Iran (Islamic Republic of),286,40.4,FALSE
+Iran (Islamic Republic of),298,297,FALSE
+Iran (Islamic Republic of),302,511.5,FALSE
+Iran (Islamic Republic of),305,3620.9,FALSE
+Iran (Islamic Republic of),306,124.4,FALSE
+Iran (Islamic Republic of),316,6699.8,FALSE
+Iran (Islamic Republic of),317,147.7,FALSE
+Iran (Islamic Republic of),318,401.8,FALSE
+Iraq,7,667.5,FALSE
+Iraq,8,1043.6,FALSE
+Iraq,17,315.4,FALSE
+Iraq,19,1111.1,FALSE
+Iraq,33,1112,FALSE
+Iraq,40,376.1,FALSE
+Iraq,49,362.4,FALSE
+Iraq,54,440.2,FALSE
+Iraq,60,1380.3,FALSE
+Iraq,63,1503.4,FALSE
+Iraq,90,893.2,FALSE
+Iraq,94,388.9,FALSE
+Iraq,101,448.7,FALSE
+Iraq,105,1211.1,FALSE
+Iraq,112,887.2,FALSE
+Iraq,120,805.1,FALSE
+Iraq,154,1448.7,FALSE
+Iraq,156,1117.1,FALSE
+Iraq,158,426.5,FALSE
+Iraq,169,514.5,FALSE
+Iraq,179,393.2,FALSE
+Iraq,180,529.9,FALSE
+Iraq,200,740.2,FALSE
+Iraq,202,1788,FALSE
+Iraq,203,809.4,FALSE
+Iraq,205,360.7,FALSE
+Iraq,206,389.7,FALSE
+Iraq,208,603.4,FALSE
+Iraq,221,606.8,FALSE
+Iraq,231,723.1,FALSE
+Iraq,235,498.3,FALSE
+Iraq,238,947,FALSE
+Iraq,254,542.7,FALSE
+Iraq,270,651.3,FALSE
+Iraq,279,549.6,FALSE
+Iraq,298,676.9,FALSE
+Iraq,306,371.8,FALSE
+Iraq,317,328.2,FALSE
+Iraq,318,407.7,FALSE
+Ireland,40,414.8,FALSE
+Ireland,49,442.5,FALSE
+Ireland,54,663.7,FALSE
+Ireland,158,872.3,FALSE
+Ireland,192,2057.4,FALSE
+Ireland,200,140.8,FALSE
+Ireland,306,1548.6,FALSE
+Israel,4,7057.4,FALSE
+Israel,7,1340.5,FALSE
+Israel,8,3654.3,FALSE
+Israel,11,1076.4,FALSE
+Israel,12,3450.1,FALSE
+Israel,13,2394,FALSE
+Israel,16,1043.7,FALSE
+Israel,17,195.3,FALSE
+Israel,19,2070.1,FALSE
+Israel,33,1088.9,FALSE
+Israel,40,457.7,FALSE
+Israel,49,453.4,FALSE
+Israel,54,735,FALSE
+Israel,58,5692.3,FALSE
+Israel,60,1041.5,FALSE
+Israel,63,989.2,FALSE
+Israel,90,802.5,FALSE
+Israel,94,3779.4,FALSE
+Israel,101,725.1,FALSE
+Israel,105,2773.6,FALSE
+Israel,112,3317.3,FALSE
+Israel,121,768.4,FALSE
+Israel,120,2951.7,FALSE
+Israel,128,1562.3,FALSE
+Israel,154,1258.9,FALSE
+Israel,156,768.1,FALSE
+Israel,158,1564.1,FALSE
+Israel,169,1046.2,FALSE
+Israel,175,2447.8,FALSE
+Israel,179,830.9,FALSE
+Israel,192,6387.1,FALSE
+Israel,203,1093.6,FALSE
+Israel,205,540.2,FALSE
+Israel,206,1223.8,FALSE
+Israel,208,720.7,FALSE
+Israel,215,2551.5,FALSE
+Israel,219,1738.3,FALSE
+Israel,221,1618.7,FALSE
+Israel,217,425.1,FALSE
+Israel,218,1953.4,FALSE
+Israel,228,5015.1,FALSE
+Israel,231,2420.2,FALSE
+Israel,235,532,FALSE
+Israel,238,708.6,FALSE
+Israel,243,2670.7,FALSE
+Israel,261,1562.3,FALSE
+Israel,84,1036.3,TRUE
+Israel,279,3482.3,FALSE
+Israel,281,3981.1,FALSE
+Israel,289,4210.6,FALSE
+Israel,296,1104.5,FALSE
+Israel,298,848.1,FALSE
+Israel,306,942.6,FALSE
+Israel,317,569.6,FALSE
+Israel,318,215.1,FALSE
+Italy,4,1762.9,FALSE
+Italy,7,597.3,FALSE
+Italy,18,2380.9,FALSE
+Italy,106,3555.6,FALSE
+Italy,154,559,FALSE
+Italy,169,203.6,FALSE
+Italy,200,209.9,FALSE
+Italy,208,542.7,FALSE
+Italy,235,454.8,FALSE
+Italy,254,505.2,FALSE
+Italy,306,880.1,FALSE
+Italy,316,3611.3,FALSE
+Italy,318,197.1,FALSE
+Jamaica,18,2472.1,FALSE
+Jamaica,33,2150.9,FALSE
+Jamaica,40,853.5,FALSE
+Jamaica,49,1028.8,FALSE
+Jamaica,52,336.5,FALSE
+Jamaica,54,1742,FALSE
+Jamaica,63,2103.4,FALSE
+Jamaica,86,2641.1,FALSE
+Jamaica,90,704.4,FALSE
+Jamaica,101,1092.3,FALSE
+Jamaica,115,1800.2,FALSE
+Jamaica,128,2223.7,FALSE
+Jamaica,158,1547.3,FALSE
+Jamaica,169,3326.9,FALSE
+Jamaica,80,2907.9,FALSE
+Jamaica,179,1125.7,FALSE
+Jamaica,202,1303.7,FALSE
+Jamaica,205,1537.3,FALSE
+Jamaica,206,791.2,FALSE
+Jamaica,215,1006,FALSE
+Jamaica,217,2813.6,FALSE
+Jamaica,227,2463.2,FALSE
+Jamaica,228,1133.4,FALSE
+Jamaica,235,1082.4,FALSE
+Jamaica,238,704.5,FALSE
+Jamaica,254,1021.3,FALSE
+Jamaica,279,584.2,FALSE
+Jamaica,296,957.5,FALSE
+Jamaica,306,1046.8,FALSE
+Jamaica,317,821.4,FALSE
+Jamaica,319,1141.3,FALSE
+Japan,7,2598.5,FALSE
+Japan,8,2644.5,FALSE
+Japan,12,9140.3,FALSE
+Japan,17,1243.5,FALSE
+Japan,19,5751.3,FALSE
+Japan,39,2974.1,FALSE
+Japan,40,729.8,FALSE
+Japan,49,1308,FALSE
+Japan,58,17331.1,FALSE
+Japan,59,5505.9,FALSE
+Japan,63,3806.3,FALSE
+Japan,90,2693.2,FALSE
+Japan,101,3071.9,FALSE
+Japan,112,14743.6,FALSE
+Japan,115,5520.6,FALSE
+Japan,120,5993,FALSE
+Japan,128,7111.4,FALSE
+Japan,152,3132.6,FALSE
+Japan,158,1615.9,FALSE
+Japan,80,2113.2,FALSE
+Japan,175,26187.4,FALSE
+Japan,179,3668.4,FALSE
+Japan,206,812.6,FALSE
+Japan,208,1105.8,FALSE
+Japan,219,3934.1,FALSE
+Japan,221,2979.1,FALSE
+Japan,218,14513.8,FALSE
+Japan,228,1348.4,FALSE
+Japan,231,3944.3,FALSE
+Japan,235,1314.4,FALSE
+Japan,238,1591.1,FALSE
+Japan,254,1884.3,FALSE
+Japan,276,1331.3,FALSE
+Japan,279,4729.2,FALSE
+Japan,281,10662.5,FALSE
+Japan,282,104.9,FALSE
+Japan,286,199,FALSE
+Japan,296,2103.1,FALSE
+Japan,298,2397.2,FALSE
+Japan,301,3105.9,FALSE
+Japan,302,13907.2,FALSE
+Japan,305,20166.8,FALSE
+Japan,306,2821.9,FALSE
+Japan,317,1500.1,FALSE
+Japan,318,241.7,FALSE
+Japan,319,2755.7,FALSE
+Jordan,7,609.6,FALSE
+Jordan,8,573.8,FALSE
+Jordan,16,747,FALSE
+Jordan,40,148.7,FALSE
+Jordan,49,404.1,FALSE
+Jordan,54,303.7,FALSE
+Jordan,60,727.7,FALSE
+Jordan,63,396.8,FALSE
+Jordan,90,360.1,FALSE
+Jordan,101,271.1,FALSE
+Jordan,112,276.1,FALSE
+Jordan,121,344.8,FALSE
+Jordan,120,911.5,FALSE
+Jordan,154,592.8,FALSE
+Jordan,158,326.2,FALSE
+Jordan,169,360.7,FALSE
+Jordan,179,450,FALSE
+Jordan,202,1901.1,FALSE
+Jordan,205,360.6,FALSE
+Jordan,206,804.2,FALSE
+Jordan,208,566.3,FALSE
+Jordan,219,587.7,FALSE
+Jordan,218,651.1,FALSE
+Jordan,235,364.1,FALSE
+Jordan,238,408.6,FALSE
+Jordan,279,399.4,FALSE
+Jordan,281,1069.3,FALSE
+Jordan,298,430.6,FALSE
+Jordan,306,224.4,FALSE
+Jordan,317,285.8,FALSE
+Kazakhstan,7,366.4,FALSE
+Kazakhstan,8,375.9,FALSE
+Kazakhstan,17,76.6,FALSE
+Kazakhstan,39,222.1,FALSE
+Kazakhstan,40,133.2,FALSE
+Kazakhstan,49,145.5,FALSE
+Kazakhstan,90,574.7,FALSE
+Kazakhstan,120,328.7,FALSE
+Kazakhstan,161,208.8,FALSE
+Kazakhstan,169,114.2,FALSE
+Kazakhstan,179,114.7,FALSE
+Kazakhstan,180,93.4,FALSE
+Kazakhstan,200,58.7,FALSE
+Kazakhstan,205,107.8,FALSE
+Kazakhstan,219,1023.3,FALSE
+Kazakhstan,221,403.8,FALSE
+Kazakhstan,217,153.8,FALSE
+Kazakhstan,231,500.7,FALSE
+Kazakhstan,235,136,FALSE
+Kazakhstan,248,209.1,FALSE
+Kazakhstan,254,178,FALSE
+Kazakhstan,259,91.2,FALSE
+Kazakhstan,261,132.1,FALSE
+Kazakhstan,84,371.5,FALSE
+Kazakhstan,276,220.1,FALSE
+Kazakhstan,281,683.5,FALSE
+Kazakhstan,282,34.6,FALSE
+Kazakhstan,289,247.8,FALSE
+Kazakhstan,305,1238,FALSE
+Kazakhstan,306,638.2,FALSE
+Kazakhstan,317,82.7,FALSE
+Kazakhstan,318,105.1,FALSE
+Kenya,13,158.8,FALSE
+Kenya,16,390,FALSE
+Kenya,18,744.2,FALSE
+Kenya,40,282.9,FALSE
+Kenya,49,171.4,FALSE
+Kenya,51,344.5,FALSE
+Kenya,54,320,FALSE
+Kenya,75,150.7,FALSE
+Kenya,77,4020.7,FALSE
+Kenya,90,250.5,FALSE
+Kenya,128,913.9,FALSE
+Kenya,154,232.8,FALSE
+Kenya,158,183.6,FALSE
+Kenya,169,292.5,FALSE
+Kenya,175,125.9,FALSE
+Kenya,180,830.7,FALSE
+Kenya,205,441,FALSE
+Kenya,208,250.4,FALSE
+Kenya,221,213.7,FALSE
+Kenya,228,145.1,FALSE
+Kenya,231,151,FALSE
+Kenya,235,386.5,FALSE
+Kenya,240,1766.1,FALSE
+Kenya,254,550.5,FALSE
+Kenya,84,413.7,FALSE
+Kenya,269,1917.3,FALSE
+Kenya,270,526.7,FALSE
+Kenya,279,153.3,FALSE
+Kenya,286,32.9,FALSE
+Kenya,302,2436.4,FALSE
+Kenya,306,605,FALSE
+Kenya,317,226.9,FALSE
+Kenya,318,366.3,FALSE
+Kuwait,17,529.5,FALSE
+Kuwait,19,595.7,FALSE
+Kuwait,40,496.4,FALSE
+Kuwait,49,827.3,FALSE
+Kuwait,54,661.9,FALSE
+Kuwait,63,463.3,FALSE
+Kuwait,90,496.4,FALSE
+Kuwait,94,827.3,FALSE
+Kuwait,101,165.5,FALSE
+Kuwait,112,992.8,FALSE
+Kuwait,120,1489.2,FALSE
+Kuwait,154,1323.8,FALSE
+Kuwait,158,496.4,FALSE
+Kuwait,169,992.8,FALSE
+Kuwait,179,661.9,FALSE
+Kuwait,202,661.9,FALSE
+Kuwait,203,1985.6,FALSE
+Kuwait,205,628.8,FALSE
+Kuwait,208,1323.8,FALSE
+Kuwait,235,430.2,FALSE
+Kuwait,238,529.5,FALSE
+Kuwait,261,463.3,FALSE
+Kuwait,279,628.8,FALSE
+Kuwait,281,893.5,FALSE
+Kuwait,306,496.4,FALSE
+Kuwait,317,827.3,FALSE
+Kuwait,318,628.8,FALSE
+Kyrgyzstan,17,118.8,FALSE
+Kyrgyzstan,18,500.5,FALSE
+Kyrgyzstan,39,335.8,FALSE
+Kyrgyzstan,40,147.9,FALSE
+Kyrgyzstan,49,197.1,FALSE
+Kyrgyzstan,90,356,FALSE
+Kyrgyzstan,112,2271.8,FALSE
+Kyrgyzstan,120,700,FALSE
+Kyrgyzstan,169,175.6,FALSE
+Kyrgyzstan,180,268.3,FALSE
+Kyrgyzstan,200,150.8,FALSE
+Kyrgyzstan,205,156.8,FALSE
+Kyrgyzstan,217,197.1,FALSE
+Kyrgyzstan,235,161,FALSE
+Kyrgyzstan,254,1026.2,FALSE
+Kyrgyzstan,270,120.1,FALSE
+Kyrgyzstan,282,45.8,FALSE
+Kyrgyzstan,305,282.4,FALSE
+Kyrgyzstan,306,447.2,FALSE
+Kyrgyzstan,308,136.9,FALSE
+Kyrgyzstan,318,168.7,FALSE
+Latvia,7,403.7,FALSE
+Latvia,17,135,FALSE
+Latvia,18,190.3,FALSE
+Latvia,39,382.7,FALSE
+Latvia,40,192.5,FALSE
+Latvia,49,240,FALSE
+Latvia,54,626.1,FALSE
+Latvia,58,2308.5,FALSE
+Latvia,90,1570.7,FALSE
+Latvia,91,836.3,FALSE
+Latvia,108,190.3,FALSE
+Latvia,112,3079.5,FALSE
+Latvia,116,1165.9,FALSE
+Latvia,152,550.9,FALSE
+Latvia,158,3861.6,FALSE
+Latvia,161,574.1,FALSE
+Latvia,192,1161.5,FALSE
+Latvia,200,136.1,FALSE
+Latvia,205,217.9,FALSE
+Latvia,206,2026.5,FALSE
+Latvia,221,799.7,FALSE
+Latvia,217,241.1,FALSE
+Latvia,218,2259.9,FALSE
+Latvia,231,1257.7,FALSE
+Latvia,235,157.1,FALSE
+Latvia,238,694.7,FALSE
+Latvia,243,1199.1,FALSE
+Latvia,248,387.2,FALSE
+Latvia,249,2791.9,FALSE
+Latvia,259,119.5,FALSE
+Latvia,281,2243.3,FALSE
+Latvia,306,1433.6,FALSE
+Latvia,308,118.4,FALSE
+Latvia,318,149.3,FALSE
+Lithuania,7,405.8,FALSE
+Lithuania,17,141.9,FALSE
+Lithuania,18,200.7,FALSE
+Lithuania,39,430.7,FALSE
+Lithuania,40,197.8,FALSE
+Lithuania,49,252.4,FALSE
+Lithuania,54,572.9,FALSE
+Lithuania,58,3723.4,FALSE
+Lithuania,90,1028.4,FALSE
+Lithuania,91,1972.6,FALSE
+Lithuania,112,3309.2,FALSE
+Lithuania,152,823.1,FALSE
+Lithuania,158,1520,FALSE
+Lithuania,161,584.3,FALSE
+Lithuania,165,232.3,FALSE
+Lithuania,169,136.3,FALSE
+Lithuania,192,1646.6,FALSE
+Lithuania,200,135.1,FALSE
+Lithuania,205,211.7,FALSE
+Lithuania,221,767.2,FALSE
+Lithuania,217,262,FALSE
+Lithuania,231,941.7,FALSE
+Lithuania,235,182.7,FALSE
+Lithuania,248,403.5,FALSE
+Lithuania,249,2905.2,FALSE
+Lithuania,259,121.3,FALSE
+Lithuania,279,4342.6,FALSE
+Lithuania,281,4126.1,FALSE
+Lithuania,282,33.2,FALSE
+Lithuania,306,854.1,FALSE
+Lithuania,308,123.7,FALSE
+Lithuania,318,160.3,FALSE
+Luxembourg,7,1526.5,FALSE
+Luxembourg,17,125,FALSE
+Luxembourg,40,608.4,FALSE
+Luxembourg,49,1438,FALSE
+Luxembourg,58,7134.7,FALSE
+Luxembourg,158,1969,FALSE
+Luxembourg,169,196.3,FALSE
+Luxembourg,200,145.8,FALSE
+Luxembourg,221,1769.8,FALSE
+Luxembourg,217,177.9,FALSE
+Luxembourg,231,1382.7,FALSE
+Luxembourg,235,321.1,FALSE
+Luxembourg,248,372.7,FALSE
+Luxembourg,259,126.5,FALSE
+Luxembourg,281,5309.5,FALSE
+Luxembourg,306,2643.7,FALSE
+Luxembourg,308,126.9,FALSE
+Luxembourg,318,158.7,FALSE
+Malawi,13,282,FALSE
+Malawi,16,497.9,FALSE
+Malawi,18,1010.6,FALSE
+Malawi,40,341.7,FALSE
+Malawi,52,328.5,FALSE
+Malawi,86,691,FALSE
+Malawi,90,302,FALSE
+Malawi,101,380,FALSE
+Malawi,128,563.1,FALSE
+Malawi,169,304.2,FALSE
+Malawi,175,238.9,FALSE
+Malawi,180,616,FALSE
+Malawi,202,335.6,FALSE
+Malawi,205,640.9,FALSE
+Malawi,217,539.8,FALSE
+Malawi,218,690.4,FALSE
+Malawi,227,802,FALSE
+Malawi,228,376.2,FALSE
+Malawi,235,436,FALSE
+Malawi,254,940.1,FALSE
+Malawi,270,558.8,FALSE
+Malawi,276,602.2,FALSE
+Malawi,296,313.9,FALSE
+Malawi,306,550.1,FALSE
+Malaysia,16,433.9,FALSE
+Malaysia,40,361.6,FALSE
+Malaysia,52,313.4,FALSE
+Malaysia,54,1048.6,FALSE
+Malaysia,63,1518.7,FALSE
+Malaysia,74,2017.7,FALSE
+Malaysia,75,241.1,FALSE
+Malaysia,90,325.4,FALSE
+Malaysia,101,578.6,FALSE
+Malaysia,121,554.4,FALSE
+Malaysia,154,771.4,FALSE
+Malaysia,175,1265.6,FALSE
+Malaysia,202,771.4,FALSE
+Malaysia,215,337.5,FALSE
+Malaysia,228,313.4,FALSE
+Malaysia,238,313.4,FALSE
+Malaysia,254,289.3,FALSE
+Malaysia,257,1370.3,FALSE
+Malaysia,279,421.9,FALSE
+Malaysia,286,204.9,FALSE
+Malaysia,296,301.3,FALSE
+Malaysia,306,482.1,FALSE
+Malaysia,317,277.2,FALSE
+Malaysia,319,518.3,FALSE
+Maldives,16,1171.2,FALSE
+Maldives,40,2017.1,FALSE
+Maldives,52,1431.5,FALSE
+Maldives,63,10736.3,FALSE
+Maldives,75,279.8,FALSE
+Maldives,90,1301.4,FALSE
+Maldives,101,1496.6,FALSE
+Maldives,158,1952.1,FALSE
+Maldives,175,4331.6,FALSE
+Maldives,179,1301.4,FALSE
+Maldives,215,979.4,FALSE
+Maldives,238,1106.2,FALSE
+Maldives,296,2212.3,FALSE
+Maldives,301,1431.5,FALSE
+Maldives,317,845.9,FALSE
+Malta,7,508.7,FALSE
+Malta,8,1503.5,FALSE
+Malta,40,130.2,FALSE
+Malta,54,221.7,FALSE
+Malta,105,3191.2,FALSE
+Malta,112,1012.5,FALSE
+Malta,121,1058.3,FALSE
+Malta,120,1194.9,FALSE
+Malta,154,791.9,FALSE
+Malta,179,624.1,FALSE
+Malta,203,614.6,FALSE
+Malta,205,883.9,FALSE
+Malta,208,681.4,FALSE
+Malta,219,1229,FALSE
+Malta,221,994.6,FALSE
+Malta,235,435.1,FALSE
+Malta,238,534.3,FALSE
+Malta,281,2818.4,FALSE
+Malta,298,1227.7,FALSE
+Malta,306,865.2,FALSE
+Mauritius,16,256,FALSE
+Mauritius,19,906.9,FALSE
+Mauritius,40,315.9,FALSE
+Mauritius,49,411.4,FALSE
+Mauritius,52,292.6,FALSE
+Mauritius,54,584.4,FALSE
+Mauritius,63,2639.7,FALSE
+Mauritius,75,450.2,FALSE
+Mauritius,90,509.6,FALSE
+Mauritius,101,448,FALSE
+Mauritius,112,2391.5,FALSE
+Mauritius,115,1362.1,FALSE
+Mauritius,128,1186.1,FALSE
+Mauritius,158,1330.3,FALSE
+Mauritius,202,1209.1,FALSE
+Mauritius,205,604.9,FALSE
+Mauritius,228,540.5,FALSE
+Mauritius,235,619,FALSE
+Mauritius,238,620.4,FALSE
+Mauritius,286,404,FALSE
+Mauritius,296,442.6,FALSE
+Mauritius,301,1441.9,FALSE
+Mauritius,302,408.8,FALSE
+Mauritius,306,893.6,FALSE
+Mexico,5,1147.7,FALSE
+Mexico,7,348.2,FALSE
+Mexico,11,467.6,FALSE
+Mexico,12,1969.2,FALSE
+Mexico,13,858.3,FALSE
+Mexico,17,225.1,FALSE
+Mexico,18,653.1,FALSE
+Mexico,19,335.1,FALSE
+Mexico,30,3047.2,FALSE
+Mexico,33,654.9,FALSE
+Mexico,40,125,FALSE
+Mexico,49,154.8,FALSE
+Mexico,51,263.5,FALSE
+Mexico,52,193.8,FALSE
+Mexico,54,218.6,FALSE
+Mexico,58,3717.7,FALSE
+Mexico,59,1235.9,FALSE
+Mexico,60,618.5,FALSE
+Mexico,63,465.5,FALSE
+Mexico,74,2095.5,FALSE
+Mexico,75,111.8,FALSE
+Mexico,77,294.1,FALSE
+Mexico,90,291.1,FALSE
+Mexico,94,2639,FALSE
+Mexico,101,363.7,FALSE
+Mexico,105,497.3,FALSE
+Mexico,112,835.5,FALSE
+Mexico,115,833.2,FALSE
+Mexico,121,117.5,FALSE
+Mexico,120,870,FALSE
+Mexico,128,594.1,FALSE
+Mexico,154,228.8,FALSE
+Mexico,156,470.4,FALSE
+Mexico,158,180.2,FALSE
+Mexico,161,401.8,FALSE
+Mexico,169,189.2,FALSE
+Mexico,80,116.3,FALSE
+Mexico,175,170.8,FALSE
+Mexico,179,266.5,FALSE
+Mexico,194,2143.2,FALSE
+Mexico,200,224.8,FALSE
+Mexico,202,234.9,FALSE
+Mexico,203,522.8,FALSE
+Mexico,206,258,FALSE
+Mexico,208,91.9,FALSE
+Mexico,215,265,FALSE
+Mexico,219,422.7,FALSE
+Mexico,221,241,FALSE
+Mexico,217,390.9,FALSE
+Mexico,218,412.1,FALSE
+Mexico,228,200.5,FALSE
+Mexico,229,6844.6,FALSE
+Mexico,231,245.6,FALSE
+Mexico,235,322.7,FALSE
+Mexico,238,335.1,FALSE
+Mexico,243,323,FALSE
+Mexico,248,305.6,FALSE
+Mexico,249,1860.1,FALSE
+Mexico,254,205.8,FALSE
+Mexico,257,589.2,FALSE
+Mexico,259,193.5,FALSE
+Mexico,261,326.9,FALSE
+Mexico,84,706.1,FALSE
+Mexico,267,830.1,FALSE
+Mexico,270,165.5,FALSE
+Mexico,276,365.5,FALSE
+Mexico,279,255,FALSE
+Mexico,281,895.7,FALSE
+Mexico,286,29.4,FALSE
+Mexico,289,308.3,FALSE
+Mexico,296,234,FALSE
+Mexico,298,118,FALSE
+Mexico,302,80.1,FALSE
+Mexico,305,1735.8,FALSE
+Mexico,306,381.9,FALSE
+Mexico,308,183.9,FALSE
+Mexico,314,5262.5,FALSE
+Mexico,316,3697.3,FALSE
+Mexico,317,170.9,FALSE
+Mexico,318,196.1,FALSE
+Mexico,76,225.7,FALSE
+Mongolia,17,226.8,FALSE
+Mongolia,40,619.7,FALSE
+Mongolia,49,675.4,FALSE
+Mongolia,90,1694.3,FALSE
+Mongolia,112,4181.2,FALSE
+Mongolia,200,235.2,FALSE
+Mongolia,205,925.1,FALSE
+Mongolia,235,407.5,FALSE
+Mongolia,318,197.9,FALSE
+Morocco,7,832,FALSE
+Morocco,8,1037,FALSE
+Morocco,11,398.7,FALSE
+Morocco,13,2589.9,FALSE
+Morocco,16,736.2,FALSE
+Morocco,17,283.5,FALSE
+Morocco,18,1199.1,FALSE
+Morocco,33,472.1,FALSE
+Morocco,40,240.6,FALSE
+Morocco,49,252.9,FALSE
+Morocco,54,317.1,FALSE
+Morocco,58,2193.2,FALSE
+Morocco,60,1039,FALSE
+Morocco,63,390.5,FALSE
+Morocco,90,342.6,FALSE
+Morocco,101,308.9,FALSE
+Morocco,105,1231.7,FALSE
+Morocco,120,427.2,FALSE
+Morocco,128,1043.1,FALSE
+Morocco,154,615.9,FALSE
+Morocco,156,1012.5,FALSE
+Morocco,169,258,FALSE
+Morocco,179,518,FALSE
+Morocco,200,330.4,FALSE
+Morocco,203,600.6,FALSE
+Morocco,205,463.9,FALSE
+Morocco,206,244.7,FALSE
+Morocco,208,394.6,FALSE
+Morocco,219,1124.7,FALSE
+Morocco,221,1581.4,FALSE
+Morocco,217,752.5,FALSE
+Morocco,218,936,FALSE
+Morocco,228,1706.9,FALSE
+Morocco,231,1009.4,FALSE
+Morocco,235,203.9,FALSE
+Morocco,238,483.3,FALSE
+Morocco,243,451.7,FALSE
+Morocco,270,489.4,FALSE
+Morocco,281,839.2,FALSE
+Morocco,289,557.7,FALSE
+Morocco,298,366,FALSE
+Morocco,306,198.8,FALSE
+Morocco,317,394.6,FALSE
+Morocco,318,272.2,FALSE
+Nepal,4,2767.6,FALSE
+Nepal,7,649.2,FALSE
+Nepal,8,473.6,FALSE
+Nepal,8,516.4,FALSE
+Nepal,16,259.7,FALSE
+Nepal,17,267.1,FALSE
+Nepal,39,425,FALSE
+Nepal,60,866.9,FALSE
+Nepal,75,835.1,FALSE
+Nepal,77,1474.5,FALSE
+Nepal,112,685.7,FALSE
+Nepal,115,406.2,FALSE
+Nepal,146,409.1,FALSE
+Nepal,154,273.7,FALSE
+Nepal,156,866.9,FALSE
+Nepal,161,757.6,FALSE
+Nepal,169,268.4,FALSE
+Nepal,175,296,FALSE
+Nepal,180,300.9,FALSE
+Nepal,194,1011.1,FALSE
+Nepal,198,5801.3,FALSE
+Nepal,205,306.2,FALSE
+Nepal,208,526.9,FALSE
+Nepal,215,299.1,FALSE
+Nepal,219,246.2,FALSE
+Nepal,221,228.6,FALSE
+Nepal,227,855.6,FALSE
+Nepal,228,435.3,FALSE
+Nepal,231,237.6,FALSE
+Nepal,235,281.8,FALSE
+Nepal,254,260.4,FALSE
+Nepal,84,261.6,TRUE
+Nepal,276,910.7,FALSE
+Nepal,286,49.3,FALSE
+Nepal,302,446.5,FALSE
+Nepal,305,1350.4,FALSE
+Nepal,316,1159.5,FALSE
+Nepal,318,267.3,FALSE
+Netherlands,7,538.4,FALSE
+Netherlands,12,3403.1,FALSE
+Netherlands,17,167.1,FALSE
+Netherlands,18,742,FALSE
+Netherlands,40,196.9,FALSE
+Netherlands,49,160,FALSE
+Netherlands,54,1160.7,FALSE
+Netherlands,63,1295.2,FALSE
+Netherlands,90,669.9,FALSE
+Netherlands,101,906.8,FALSE
+Netherlands,152,663.2,FALSE
+Netherlands,158,1724.3,FALSE
+Netherlands,192,1531.5,FALSE
+Netherlands,205,159.7,FALSE
+Netherlands,221,563.6,FALSE
+Netherlands,234,1490.9,FALSE
+Netherlands,235,189.5,FALSE
+Netherlands,248,368.7,FALSE
+Netherlands,281,4212.2,FALSE
+Netherlands,282,38.3,FALSE
+Netherlands,306,669.6,FALSE
+Netherlands,308,150.6,FALSE
+Netherlands,318,161.8,FALSE
+New Zealand,7,591.7,FALSE
+New Zealand,17,229,FALSE
+New Zealand,169,241.6,FALSE
+New Zealand,200,285.4,FALSE
+New Zealand,318,210.9,FALSE
+Norway,7,1276.2,FALSE
+Norway,17,316.4,FALSE
+Norway,19,527.4,FALSE
+Norway,40,1044,FALSE
+Norway,49,957.1,FALSE
+Norway,54,1282.1,FALSE
+Norway,58,8208.3,FALSE
+Norway,90,2175,FALSE
+Norway,91,1183.3,FALSE
+Norway,152,1782.1,FALSE
+Norway,158,3196.4,FALSE
+Norway,200,290.7,FALSE
+Norway,206,801.2,FALSE
+Norway,221,1846.4,FALSE
+Norway,217,413.6,FALSE
+Norway,218,359.5,FALSE
+Norway,231,3776.2,FALSE
+Norway,235,331,FALSE
+Norway,248,610.7,FALSE
+Norway,249,7528.6,FALSE
+Norway,259,310.7,FALSE
+Norway,281,5242.9,FALSE
+Norway,306,2466.7,FALSE
+Norway,318,363.5,FALSE
+Oman,16,709.5,FALSE
+Oman,17,213,FALSE
+Oman,40,305.8,FALSE
+Oman,49,395.3,FALSE
+Oman,54,623.9,FALSE
+Oman,63,652.4,FALSE
+Oman,90,450.5,FALSE
+Oman,101,405.8,FALSE
+Oman,112,3029.4,FALSE
+Oman,154,1342.7,FALSE
+Oman,169,557.9,FALSE
+Oman,175,1709.5,FALSE
+Oman,179,410,FALSE
+Oman,200,234.9,FALSE
+Oman,202,997.1,FALSE
+Oman,205,520.4,FALSE
+Oman,215,517.1,FALSE
+Oman,235,361.2,FALSE
+Oman,238,299.7,FALSE
+Oman,286,96.2,FALSE
+Oman,306,328.8,FALSE
+Oman,317,298.8,FALSE
+Oman,318,929.8,FALSE
+Pakistan,254,192.8,FALSE
+Pakistan,84,668.1,FALSE
+Pakistan,286,39.4,FALSE
+Pakistan,318,286.3,FALSE
+Panama,16,93.1,FALSE
+Panama,18,1183.6,FALSE
+Panama,40,1014.1,FALSE
+Panama,49,948,FALSE
+Panama,52,531.1,FALSE
+Panama,63,1587.3,FALSE
+Panama,75,768.5,FALSE
+Panama,77,4658.7,FALSE
+Panama,90,705.5,FALSE
+Panama,158,1653.4,FALSE
+Panama,169,560.6,FALSE
+Panama,205,1080.3,FALSE
+Panama,208,355,FALSE
+Panama,215,579.8,FALSE
+Panama,228,652.6,FALSE
+Panama,235,992.1,FALSE
+Panama,254,558.6,FALSE
+Panama,306,1300.7,FALSE
+Panama,319,1118.8,FALSE
+Panama,76,1317.7,FALSE
+Paraguay,52,47.1,FALSE
+Paraguay,53,191,FALSE
+Paraguay,169,121.5,FALSE
+Paraguay,248,263.8,FALSE
+Paraguay,254,194,FALSE
+Paraguay,84,388,FALSE
+Paraguay,267,705.4,FALSE
+Paraguay,276,329.4,FALSE
+Paraguay,286,21.2,FALSE
+Paraguay,310,114.6,FALSE
+Paraguay,318,119.6,FALSE
+Peru,5,2408.2,FALSE
+Peru,7,250.8,FALSE
+Peru,8,2320.7,FALSE
+Peru,11,669.2,FALSE
+Peru,12,1240.5,FALSE
+Peru,13,774.1,FALSE
+Peru,17,366.7,FALSE
+Peru,18,1050.9,FALSE
+Peru,19,430.5,FALSE
+Peru,33,608.3,FALSE
+Peru,40,228.6,FALSE
+Peru,49,230.4,FALSE
+Peru,51,186,FALSE
+Peru,52,183,FALSE
+Peru,54,315.2,FALSE
+Peru,58,172.1,FALSE
+Peru,60,1286.6,FALSE
+Peru,63,672.2,FALSE
+Peru,74,2347.9,FALSE
+Peru,75,121.2,FALSE
+Peru,77,1658.9,FALSE
+Peru,86,555.3,FALSE
+Peru,90,215.1,FALSE
+Peru,94,444.1,FALSE
+Peru,101,364.6,FALSE
+Peru,105,649.4,FALSE
+Peru,112,1149.4,FALSE
+Peru,121,172.4,FALSE
+Peru,120,711.5,FALSE
+Peru,128,1087,FALSE
+Peru,152,246.9,FALSE
+Peru,154,248.7,FALSE
+Peru,156,1116.6,FALSE
+Peru,158,246.6,FALSE
+Peru,161,1640.9,FALSE
+Peru,165,1070.7,FALSE
+Peru,169,492.3,FALSE
+Peru,80,320.5,FALSE
+Peru,175,171.5,FALSE
+Peru,179,234.2,FALSE
+Peru,200,482,FALSE
+Peru,203,962.8,FALSE
+Peru,205,148.1,FALSE
+Peru,208,187.2,FALSE
+Peru,215,225.9,FALSE
+Peru,219,645.5,FALSE
+Peru,221,551.5,FALSE
+Peru,217,696.1,FALSE
+Peru,218,476.1,FALSE
+Peru,228,209.1,FALSE
+Peru,231,536.8,FALSE
+Peru,235,310.5,FALSE
+Peru,238,190.4,FALSE
+Peru,243,501.8,FALSE
+Peru,245,1178.7,FALSE
+Peru,254,340.6,FALSE
+Peru,259,365.2,FALSE
+Peru,84,851.6,FALSE
+Peru,267,1207.4,FALSE
+Peru,270,176.8,FALSE
+Peru,276,744,FALSE
+Peru,279,299.3,FALSE
+Peru,281,577.2,FALSE
+Peru,296,190.7,FALSE
+Peru,298,325,FALSE
+Peru,302,200.2,FALSE
+Peru,305,300.1,FALSE
+Peru,306,268.5,FALSE
+Peru,317,180.4,FALSE
+Peru,318,463.4,FALSE
+Peru,76,280,FALSE
+Philippines,12,1351.8,FALSE
+Philippines,13,422.4,FALSE
+Philippines,16,289.4,FALSE
+Philippines,18,1135.5,FALSE
+Philippines,40,409.1,FALSE
+Philippines,49,534.4,FALSE
+Philippines,51,652.1,FALSE
+Philippines,52,132.4,FALSE
+Philippines,54,711.5,FALSE
+Philippines,63,1539.6,FALSE
+Philippines,63,746.4,FALSE
+Philippines,74,2169,FALSE
+Philippines,75,165.1,FALSE
+Philippines,77,1732.3,FALSE
+Philippines,86,520.5,FALSE
+Philippines,90,350.6,FALSE
+Philippines,101,408.3,FALSE
+Philippines,112,1656.3,FALSE
+Philippines,115,823.9,FALSE
+Philippines,121,660.9,FALSE
+Philippines,128,823.3,FALSE
+Philippines,152,808.1,FALSE
+Philippines,158,789.2,FALSE
+Philippines,169,253.5,FALSE
+Philippines,80,253.5,FALSE
+Philippines,175,514.1,FALSE
+Philippines,133,1238.1,FALSE
+Philippines,202,412.7,FALSE
+Philippines,205,1111.5,FALSE
+Philippines,206,529.1,FALSE
+Philippines,215,145.7,FALSE
+Philippines,218,2156.6,FALSE
+Philippines,228,192.5,FALSE
+Philippines,235,784.1,FALSE
+Philippines,238,223.4,FALSE
+Philippines,254,367,FALSE
+Philippines,257,470.2,FALSE
+Philippines,276,490.2,FALSE
+Philippines,286,67.6,TRUE
+Philippines,296,315.6,FALSE
+Philippines,298,280.5,FALSE
+Philippines,301,398.2,FALSE
+Philippines,305,2259.7,FALSE
+Philippines,306,347,FALSE
+Philippines,317,266.4,FALSE
+Philippines,319,537.3,FALSE
+Philippines,76,424.1,FALSE
+Poland,7,148.6,FALSE
+Poland,17,148.1,FALSE
+Poland,18,887.4,FALSE
+Poland,39,403,FALSE
+Poland,40,208.2,FALSE
+Poland,49,98.4,FALSE
+Poland,54,314,FALSE
+Poland,58,1106.1,FALSE
+Poland,61,62.1,FALSE
+Poland,90,357.4,FALSE
+Poland,91,320.1,FALSE
+Poland,116,327.9,FALSE
+Poland,138,4696.7,FALSE
+Poland,161,502.4,FALSE
+Poland,165,210.5,FALSE
+Poland,169,134.9,FALSE
+Poland,180,216.1,FALSE
+Poland,192,1112.2,FALSE
+Poland,200,131.4,FALSE
+Poland,205,216.6,FALSE
+Poland,219,524,FALSE
+Poland,221,494.1,FALSE
+Poland,217,274.2,FALSE
+Poland,231,295.7,FALSE
+Poland,235,97.4,FALSE
+Poland,248,410.1,FALSE
+Poland,249,1351.1,FALSE
+Poland,259,131.4,FALSE
+Poland,281,767.2,FALSE
+Poland,282,29.7,FALSE
+Poland,305,2296.6,FALSE
+Poland,306,361.2,FALSE
+Poland,308,145.6,FALSE
+Poland,318,157.5,FALSE
+Portugal,4,995.3,FALSE
+Portugal,7,708.4,FALSE
+Portugal,8,2066.3,FALSE
+Portugal,13,1361,FALSE
+Portugal,16,417,FALSE
+Portugal,17,210.2,FALSE
+Portugal,19,1786.2,FALSE
+Portugal,30,5233,FALSE
+Portugal,40,465.8,FALSE
+Portugal,48,386.2,FALSE
+Portugal,49,241,FALSE
+Portugal,54,653,FALSE
+Portugal,58,3218.2,FALSE
+Portugal,59,1981,FALSE
+Portugal,90,573.3,FALSE
+Portugal,101,880.4,FALSE
+Portugal,105,2553.4,FALSE
+Portugal,112,2760.5,FALSE
+Portugal,121,694.7,FALSE
+Portugal,120,1891.2,FALSE
+Portugal,106,1935.8,FALSE
+Portugal,138,4756.5,FALSE
+Portugal,152,565.1,FALSE
+Portugal,154,817.4,FALSE
+Portugal,158,605.8,FALSE
+Portugal,169,185.4,FALSE
+Portugal,179,689.4,FALSE
+Portugal,192,3051.7,FALSE
+Portugal,200,182.5,FALSE
+Portugal,203,445.2,FALSE
+Portugal,206,415,FALSE
+Portugal,208,566.1,FALSE
+Portugal,219,1073.9,FALSE
+Portugal,221,1036.1,FALSE
+Portugal,218,2582.6,FALSE
+Portugal,228,2251.8,FALSE
+Portugal,231,896.5,FALSE
+Portugal,235,381.6,FALSE
+Portugal,238,183.2,FALSE
+Portugal,243,807.2,FALSE
+Portugal,249,9065.9,FALSE
+Portugal,254,304.2,FALSE
+Portugal,259,221.2,FALSE
+Portugal,279,1051.2,FALSE
+Portugal,281,2483.5,FALSE
+Portugal,286,298.7,FALSE
+Portugal,289,419.1,FALSE
+Portugal,296,1320,FALSE
+Portugal,298,886.5,FALSE
+Portugal,306,674.9,FALSE
+Portugal,308,184.7,FALSE
+Portugal,316,4019,FALSE
+Portugal,317,410.3,FALSE
+Portugal,318,205.3,FALSE
+Portugal,319,1751.1,FALSE
+Romania,7,654.6,FALSE
+Romania,8,1184.2,FALSE
+Romania,17,196.1,FALSE
+Romania,18,2093.8,FALSE
+Romania,19,1194,FALSE
+Romania,40,340.8,FALSE
+Romania,49,578.6,FALSE
+Romania,54,953.7,FALSE
+Romania,58,1779.9,FALSE
+Romania,63,659.5,FALSE
+Romania,90,615.4,FALSE
+Romania,101,485.4,FALSE
+Romania,112,3307.4,FALSE
+Romania,120,711,FALSE
+Romania,152,939,FALSE
+Romania,158,1635.3,FALSE
+Romania,169,181.4,FALSE
+Romania,179,448.7,FALSE
+Romania,192,2191.8,FALSE
+Romania,200,218.2,FALSE
+Romania,205,522.2,FALSE
+Romania,219,831.1,FALSE
+Romania,221,1174.4,FALSE
+Romania,217,1554.4,FALSE
+Romania,218,1130.2,FALSE
+Romania,231,527.1,FALSE
+Romania,235,338.3,FALSE
+Romania,238,497.7,FALSE
+Romania,248,384.9,FALSE
+Romania,276,340.8,FALSE
+Romania,279,1240.6,FALSE
+Romania,281,1113.1,FALSE
+Romania,282,31.9,FALSE
+Romania,289,370.2,FALSE
+Romania,306,747.8,FALSE
+Romania,316,1721.1,FALSE
+Romania,317,237.8,FALSE
+Romania,318,154.5,FALSE
+Russian Federation,17,115.4,FALSE
+Russian Federation,39,385.8,FALSE
+Russian Federation,40,182.2,FALSE
+Russian Federation,49,184.1,FALSE
+Russian Federation,90,1122.8,FALSE
+Russian Federation,108,337.9,FALSE
+Russian Federation,120,368.8,FALSE
+Russian Federation,169,124.5,FALSE
+Russian Federation,180,96,FALSE
+Russian Federation,200,95.4,FALSE
+Russian Federation,205,144.7,FALSE
+Russian Federation,217,212.5,FALSE
+Russian Federation,235,152.8,FALSE
+Russian Federation,248,336.8,FALSE
+Russian Federation,254,240.7,FALSE
+Russian Federation,259,91.7,FALSE
+Russian Federation,276,349.9,FALSE
+Russian Federation,282,43.5,FALSE
+Russian Federation,289,326.4,FALSE
+Russian Federation,306,929.1,FALSE
+Russian Federation,317,78.4,FALSE
+Russian Federation,318,131.8,FALSE
+Rwanda,13,273.2,FALSE
+Rwanda,18,560.6,FALSE
+Rwanda,19,856.6,FALSE
+Rwanda,40,204.6,FALSE
+Rwanda,49,450.7,FALSE
+Rwanda,52,269.5,FALSE
+Rwanda,63,700.3,FALSE
+Rwanda,101,384.5,FALSE
+Rwanda,128,1290.9,FALSE
+Rwanda,154,806.3,FALSE
+Rwanda,169,364.8,FALSE
+Rwanda,175,753.8,FALSE
+Rwanda,205,736.4,FALSE
+Rwanda,208,701.7,FALSE
+Rwanda,215,463.8,FALSE
+Rwanda,217,1496.5,FALSE
+Rwanda,228,282,FALSE
+Rwanda,235,317.2,FALSE
+Rwanda,238,309.9,FALSE
+Rwanda,254,851.9,FALSE
+Rwanda,270,393.1,FALSE
+Rwanda,276,548.2,FALSE
+Rwanda,286,115.4,FALSE
+Rwanda,296,225.5,FALSE
+Rwanda,301,458.4,FALSE
+Rwanda,306,491.6,FALSE
+Rwanda,318,638,FALSE
+Rwanda,319,358.2,FALSE
+Saint Vincent and the Grenadines,13,1124.4,FALSE
+Saint Vincent and the Grenadines,16,673.2,FALSE
+Saint Vincent and the Grenadines,49,2255,FALSE
+Saint Vincent and the Grenadines,52,2430.2,FALSE
+Saint Vincent and the Grenadines,63,2387.4,FALSE
+Saint Vincent and the Grenadines,74,1629.6,FALSE
+Saint Vincent and the Grenadines,75,543.1,FALSE
+Saint Vincent and the Grenadines,115,2344.6,FALSE
+Saint Vincent and the Grenadines,121,446.1,FALSE
+Saint Vincent and the Grenadines,128,6428.9,FALSE
+Saint Vincent and the Grenadines,154,1416.7,FALSE
+Saint Vincent and the Grenadines,169,1263,FALSE
+Saint Vincent and the Grenadines,175,1535.9,FALSE
+Saint Vincent and the Grenadines,198,5942,FALSE
+Saint Vincent and the Grenadines,208,1833.3,FALSE
+Saint Vincent and the Grenadines,215,1010.4,FALSE
+Saint Vincent and the Grenadines,227,5229.1,FALSE
+Saint Vincent and the Grenadines,238,1625.6,FALSE
+Saint Vincent and the Grenadines,296,1004.3,FALSE
+Saint Vincent and the Grenadines,298,1666.3,FALSE
+Saint Vincent and the Grenadines,319,1393.3,FALSE
+Samoa,13,1939,FALSE
+Samoa,16,1201.5,FALSE
+Samoa,75,213.3,FALSE
+Samoa,154,273.8,FALSE
+Samoa,175,1000.6,FALSE
+Samoa,215,959.2,FALSE
+Samoa,228,2538.3,FALSE
+Samoa,301,1048.8,FALSE
+Samoa,319,1400.6,FALSE
+Serbia,7,414.2,FALSE
+Serbia,8,805.9,FALSE
+Serbia,17,146.9,FALSE
+Serbia,18,1307.3,FALSE
+Serbia,40,153.8,FALSE
+Serbia,49,236.1,FALSE
+Serbia,58,1736.1,FALSE
+Serbia,90,328.9,FALSE
+Serbia,112,2559.8,FALSE
+Serbia,120,566.7,FALSE
+Serbia,169,136.1,FALSE
+Serbia,200,167.2,FALSE
+Serbia,205,221.2,FALSE
+Serbia,219,673.9,FALSE
+Serbia,221,682.3,FALSE
+Serbia,231,418,FALSE
+Serbia,235,181.9,FALSE
+Serbia,248,349.7,FALSE
+Serbia,259,165.4,FALSE
+Serbia,276,338.3,FALSE
+Serbia,281,1534.3,FALSE
+Serbia,282,36.6,FALSE
+Serbia,289,275.7,FALSE
+Serbia,305,2214.5,FALSE
+Serbia,306,458.2,FALSE
+Serbia,316,1941.6,FALSE
+Serbia,317,131.4,FALSE
+Serbia,318,135.3,FALSE
+Sierra Leone,52,222.1,FALSE
+Sierra Leone,75,422.3,FALSE
+Sierra Leone,169,953.1,FALSE
+Sierra Leone,175,1177,FALSE
+Sierra Leone,254,762.1,FALSE
+Sierra Leone,296,1481.8,FALSE
+Sierra Leone,306,948.9,FALSE
+Singapore,158,2423.8,FALSE
+Singapore,192,7238.3,FALSE
+Singapore,306,2170.4,FALSE
+Slovakia,7,384.1,FALSE
+Slovakia,8,1308.2,FALSE
+Slovakia,17,165.2,FALSE
+Slovakia,40,218.6,FALSE
+Slovakia,49,302.7,FALSE
+Slovakia,54,574.7,FALSE
+Slovakia,58,1547.7,FALSE
+Slovakia,63,529.2,FALSE
+Slovakia,63,610.1,FALSE
+Slovakia,90,591.1,FALSE
+Slovakia,91,1033.6,FALSE
+Slovakia,120,838.7,FALSE
+Slovakia,156,725.7,FALSE
+Slovakia,158,1254.5,FALSE
+Slovakia,161,402.1,FALSE
+Slovakia,169,141.9,FALSE
+Slovakia,194,587,FALSE
+Slovakia,200,219.1,FALSE
+Slovakia,205,343.3,FALSE
+Slovakia,219,687.4,FALSE
+Slovakia,221,556.3,FALSE
+Slovakia,217,273.1,FALSE
+Slovakia,231,440,FALSE
+Slovakia,234,1811.8,FALSE
+Slovakia,235,284.6,FALSE
+Slovakia,248,394.6,FALSE
+Slovakia,259,118.2,FALSE
+Slovakia,276,360.3,FALSE
+Slovakia,281,2175.9,FALSE
+Slovakia,282,30.6,FALSE
+Slovakia,289,358.4,FALSE
+Slovakia,306,760.8,FALSE
+Slovakia,317,260.3,FALSE
+Slovakia,318,139.6,FALSE
+Slovenia,7,547.4,FALSE
+Slovenia,12,5819.7,FALSE
+Slovenia,17,147.1,FALSE
+Slovenia,18,4023.3,FALSE
+Slovenia,19,2086.4,FALSE
+Slovenia,39,642.1,FALSE
+Slovenia,40,261.2,FALSE
+Slovenia,49,490.7,FALSE
+Slovenia,54,1053.1,FALSE
+Slovenia,58,3301.2,FALSE
+Slovenia,90,497.9,FALSE
+Slovenia,112,4627.4,FALSE
+Slovenia,120,613.5,FALSE
+Slovenia,138,7310.1,FALSE
+Slovenia,152,1009.7,FALSE
+Slovenia,158,816.2,FALSE
+Slovenia,169,144.5,FALSE
+Slovenia,200,280.7,FALSE
+Slovenia,205,452.7,FALSE
+Slovenia,219,825.6,FALSE
+Slovenia,221,903.7,FALSE
+Slovenia,231,1034.5,FALSE
+Slovenia,235,257.5,FALSE
+Slovenia,248,361.3,FALSE
+Slovenia,259,158,FALSE
+Slovenia,276,348.4,FALSE
+Slovenia,281,3011.7,FALSE
+Slovenia,308,145.6,FALSE
+Slovenia,316,6264.6,FALSE
+Slovenia,318,148,FALSE
+South Africa,7,444.9,FALSE
+South Africa,8,980.7,FALSE
+South Africa,12,5713.5,FALSE
+South Africa,13,667.1,FALSE
+South Africa,16,471.1,FALSE
+South Africa,17,228,FALSE
+South Africa,19,625.8,FALSE
+South Africa,40,153,FALSE
+South Africa,49,251,FALSE
+South Africa,54,539.8,FALSE
+South Africa,58,4858.8,FALSE
+South Africa,61,103.3,FALSE
+South Africa,63,1343.2,FALSE
+South Africa,90,456,FALSE
+South Africa,105,1493.9,FALSE
+South Africa,112,2957.7,FALSE
+South Africa,116,5264.5,FALSE
+South Africa,121,350.4,FALSE
+South Africa,120,886.2,FALSE
+South Africa,128,525,FALSE
+South Africa,152,665.5,FALSE
+South Africa,154,1883.4,FALSE
+South Africa,158,442.2,FALSE
+South Africa,169,226.2,FALSE
+South Africa,80,325.3,FALSE
+South Africa,175,694.7,FALSE
+South Africa,192,1608.5,FALSE
+South Africa,200,186.5,FALSE
+South Africa,205,305.7,FALSE
+South Africa,208,247.2,FALSE
+South Africa,215,558.8,FALSE
+South Africa,219,2044,FALSE
+South Africa,221,445.4,FALSE
+South Africa,218,2623.3,FALSE
+South Africa,228,584.5,FALSE
+South Africa,231,536.2,FALSE
+South Africa,235,319.2,FALSE
+South Africa,238,607,FALSE
+South Africa,243,524.9,FALSE
+South Africa,84,506.4,FALSE
+South Africa,270,233.5,FALSE
+South Africa,276,420.9,FALSE
+South Africa,279,281.4,FALSE
+South Africa,281,2065.7,FALSE
+South Africa,286,38.3,FALSE
+South Africa,289,412.2,FALSE
+South Africa,296,331.3,FALSE
+South Africa,306,276.1,FALSE
+South Africa,317,172.3,FALSE
+South Africa,318,251.5,FALSE
+Spain,4,1911.7,FALSE
+Spain,5,2062.5,FALSE
+Spain,7,475.9,FALSE
+Spain,8,956.6,FALSE
+Spain,11,730.4,FALSE
+Spain,12,2338.6,FALSE
+Spain,13,2341.4,FALSE
+Spain,16,409.4,FALSE
+Spain,17,167.4,FALSE
+Spain,18,1847.3,FALSE
+Spain,19,1508.3,FALSE
+Spain,30,4801.7,FALSE
+Spain,33,230,FALSE
+Spain,40,521.4,FALSE
+Spain,48,266.5,FALSE
+Spain,49,327.9,FALSE
+Spain,54,537.6,FALSE
+Spain,58,2009.1,FALSE
+Spain,59,1641.8,FALSE
+Spain,60,680.4,FALSE
+Spain,61,836.8,FALSE
+Spain,63,3313.9,FALSE
+Spain,63,919.5,FALSE
+Spain,90,572.5,FALSE
+Spain,91,7331.7,FALSE
+Spain,94,3661.4,FALSE
+Spain,101,584.2,FALSE
+Spain,105,1520.5,FALSE
+Spain,112,2226.7,FALSE
+Spain,121,241.3,FALSE
+Spain,120,756.3,FALSE
+Spain,128,774.3,FALSE
+Spain,106,2744.1,FALSE
+Spain,138,4426.8,FALSE
+Spain,152,535,FALSE
+Spain,154,725.9,FALSE
+Spain,156,725,FALSE
+Spain,158,354.2,FALSE
+Spain,165,340.6,FALSE
+Spain,169,186.7,FALSE
+Spain,175,1974.6,FALSE
+Spain,179,375.1,FALSE
+Spain,192,1235.1,FALSE
+Spain,200,174.4,FALSE
+Spain,203,749.3,FALSE
+Spain,205,214.6,FALSE
+Spain,206,922.8,FALSE
+Spain,208,292.8,FALSE
+Spain,215,791.8,FALSE
+Spain,219,661.8,FALSE
+Spain,221,613.1,FALSE
+Spain,217,228.6,FALSE
+Spain,218,549.2,FALSE
+Spain,228,2364.7,FALSE
+Spain,231,604.6,FALSE
+Spain,234,973.4,FALSE
+Spain,235,354.1,FALSE
+Spain,238,427.2,FALSE
+Spain,243,330.8,FALSE
+Spain,248,332.9,FALSE
+Spain,249,6201.1,FALSE
+Spain,254,332.7,FALSE
+Spain,259,148.9,FALSE
+Spain,261,365.8,FALSE
+Spain,84,529.4,FALSE
+Spain,270,176.9,FALSE
+Spain,276,507.8,FALSE
+Spain,279,795.9,FALSE
+Spain,281,1147.3,FALSE
+Spain,282,42.7,FALSE
+Spain,286,38.7,FALSE
+Spain,289,385.2,FALSE
+Spain,296,582.3,FALSE
+Spain,298,261.5,FALSE
+Spain,305,2458.1,FALSE
+Spain,306,311,FALSE
+Spain,308,176.4,FALSE
+Spain,316,3824.4,FALSE
+Spain,317,282,FALSE
+Spain,318,187.8,FALSE
+Sri Lanka,8,899.1,FALSE
+Sri Lanka,19,767.9,FALSE
+Sri Lanka,40,436,FALSE
+Sri Lanka,49,692.4,FALSE
+Sri Lanka,51,1954.4,FALSE
+Sri Lanka,52,283.6,FALSE
+Sri Lanka,63,1601.3,FALSE
+Sri Lanka,65,9354.7,FALSE
+Sri Lanka,70,7562.6,FALSE
+Sri Lanka,74,2041,FALSE
+Sri Lanka,75,306.1,FALSE
+Sri Lanka,77,2437.9,FALSE
+Sri Lanka,86,1201.8,FALSE
+Sri Lanka,90,258.7,FALSE
+Sri Lanka,115,1024.9,FALSE
+Sri Lanka,128,1130.5,FALSE
+Sri Lanka,152,520.8,FALSE
+Sri Lanka,154,1392.1,FALSE
+Sri Lanka,169,281.3,FALSE
+Sri Lanka,175,403.8,FALSE
+Sri Lanka,194,1305.1,FALSE
+Sri Lanka,198,10177.9,FALSE
+Sri Lanka,205,638,FALSE
+Sri Lanka,208,564.8,FALSE
+Sri Lanka,228,513.3,FALSE
+Sri Lanka,235,614.7,FALSE
+Sri Lanka,238,320.3,FALSE
+Sri Lanka,254,264.5,FALSE
+Sri Lanka,267,957.1,FALSE
+Sri Lanka,276,1201.8,FALSE
+Sri Lanka,286,31.6,FALSE
+Sri Lanka,296,331.6,FALSE
+Sri Lanka,302,441.2,FALSE
+Sri Lanka,306,448.9,FALSE
+Suriname,13,1557.3,FALSE
+Suriname,16,401.4,FALSE
+Suriname,19,2724.5,FALSE
+Suriname,40,989,FALSE
+Suriname,52,430.3,FALSE
+Suriname,63,903.9,FALSE
+Suriname,75,632.6,FALSE
+Suriname,90,342,FALSE
+Suriname,101,600.5,FALSE
+Suriname,121,844.5,FALSE
+Suriname,128,1900.9,FALSE
+Suriname,154,3151.6,FALSE
+Suriname,169,1255.5,FALSE
+Suriname,175,314.7,FALSE
+Suriname,202,756.2,FALSE
+Suriname,208,1005,FALSE
+Suriname,215,1054.8,FALSE
+Suriname,228,1083.7,FALSE
+Suriname,238,269.7,FALSE
+Suriname,254,131.7,FALSE
+Suriname,276,2809.6,FALSE
+Suriname,296,486.5,FALSE
+Suriname,298,710.4,FALSE
+Suriname,306,1319.7,FALSE
+Suriname,317,700,FALSE
+Sweden,7,676.4,FALSE
+Sweden,17,137.6,FALSE
+Sweden,40,501.3,FALSE
+Sweden,49,394.4,FALSE
+Sweden,54,1023.5,FALSE
+Sweden,90,1259.4,FALSE
+Sweden,200,128.4,FALSE
+Sweden,205,251.8,FALSE
+Sweden,235,328.8,FALSE
+Sweden,248,389.4,FALSE
+Sweden,259,137.6,FALSE
+Sweden,281,2892.6,FALSE
+Sweden,282,29.7,FALSE
+Sweden,306,1512.8,FALSE
+Sweden,308,131.6,FALSE
+Sweden,318,150.1,FALSE
+Switzerland,8,2588.2,FALSE
+Switzerland,11,5406.8,FALSE
+Switzerland,12,10134.6,FALSE
+Switzerland,17,305.5,FALSE
+Switzerland,19,1140.8,FALSE
+Switzerland,40,1485.9,FALSE
+Switzerland,49,749.1,FALSE
+Switzerland,54,2268.5,FALSE
+Switzerland,58,3614.4,FALSE
+Switzerland,63,4306.6,FALSE
+Switzerland,90,1575.3,FALSE
+Switzerland,91,4834.4,FALSE
+Switzerland,116,4834.4,FALSE
+Switzerland,120,3377.9,FALSE
+Switzerland,138,8515.7,FALSE
+Switzerland,158,2930.3,FALSE
+Switzerland,165,355.2,FALSE
+Switzerland,169,320.7,FALSE
+Switzerland,80,2448.1,FALSE
+Switzerland,179,3097.7,FALSE
+Switzerland,200,288.3,FALSE
+Switzerland,205,708.5,FALSE
+Switzerland,206,3281.4,FALSE
+Switzerland,219,4567.4,FALSE
+Switzerland,218,722.7,FALSE
+Switzerland,231,1853.4,FALSE
+Switzerland,235,513.6,FALSE
+Switzerland,238,1577.3,FALSE
+Switzerland,248,762.3,FALSE
+Switzerland,249,11936.2,FALSE
+Switzerland,259,370.5,FALSE
+Switzerland,279,1088.1,FALSE
+Switzerland,281,6240.1,FALSE
+Switzerland,282,55.8,FALSE
+Switzerland,289,791.7,FALSE
+Switzerland,305,15935.2,FALSE
+Switzerland,306,2621.7,FALSE
+Switzerland,308,310.6,FALSE
+Switzerland,316,3193.1,FALSE
+Switzerland,318,458.8,FALSE
+Thailand,12,2229.4,FALSE
+Thailand,16,364.8,FALSE
+Thailand,40,395.8,FALSE
+Thailand,52,52.1,FALSE
+Thailand,54,587,FALSE
+Thailand,75,325.5,FALSE
+Thailand,77,1767.3,FALSE
+Thailand,90,408.5,FALSE
+Thailand,101,439.1,FALSE
+Thailand,112,2186.6,FALSE
+Thailand,115,650.8,FALSE
+Thailand,121,960.7,FALSE
+Thailand,120,1164.7,FALSE
+Thailand,128,1316.8,FALSE
+Thailand,154,1572.4,FALSE
+Thailand,158,664.7,FALSE
+Thailand,169,194.4,FALSE
+Thailand,175,1027,FALSE
+Thailand,192,2192.9,FALSE
+Thailand,205,374,FALSE
+Thailand,215,167.2,FALSE
+Thailand,218,1265.6,FALSE
+Thailand,228,288.4,FALSE
+Thailand,235,352.2,FALSE
+Thailand,238,416.8,FALSE
+Thailand,254,228.2,FALSE
+Thailand,257,1382.9,FALSE
+Thailand,270,190.1,FALSE
+Thailand,276,410,FALSE
+Thailand,279,913.7,FALSE
+Thailand,281,4136.4,FALSE
+Thailand,286,20.9,FALSE
+Thailand,289,357,FALSE
+Thailand,298,1322.2,FALSE
+Thailand,301,723,FALSE
+Thailand,306,374,FALSE
+The former Yugoslav Republic of Macedonia,7,309.4,FALSE
+The former Yugoslav Republic of Macedonia,8,1070.1,FALSE
+The former Yugoslav Republic of Macedonia,17,161.8,FALSE
+The former Yugoslav Republic of Macedonia,40,209.2,FALSE
+The former Yugoslav Republic of Macedonia,49,263,FALSE
+The former Yugoslav Republic of Macedonia,58,717.7,FALSE
+The former Yugoslav Republic of Macedonia,63,380.6,FALSE
+The former Yugoslav Republic of Macedonia,90,508.5,FALSE
+The former Yugoslav Republic of Macedonia,120,247.5,FALSE
+The former Yugoslav Republic of Macedonia,169,167.3,FALSE
+The former Yugoslav Republic of Macedonia,200,259.3,FALSE
+The former Yugoslav Republic of Macedonia,205,147.6,FALSE
+The former Yugoslav Republic of Macedonia,219,508,FALSE
+The former Yugoslav Republic of Macedonia,221,541.4,FALSE
+The former Yugoslav Republic of Macedonia,231,266.7,FALSE
+The former Yugoslav Republic of Macedonia,235,259,FALSE
+The former Yugoslav Republic of Macedonia,248,569.8,FALSE
+The former Yugoslav Republic of Macedonia,254,298.4,FALSE
+The former Yugoslav Republic of Macedonia,259,168.9,FALSE
+The former Yugoslav Republic of Macedonia,281,920.1,FALSE
+The former Yugoslav Republic of Macedonia,289,349.8,FALSE
+The former Yugoslav Republic of Macedonia,305,3347.3,FALSE
+The former Yugoslav Republic of Macedonia,306,705.9,FALSE
+The former Yugoslav Republic of Macedonia,316,1198.2,FALSE
+The former Yugoslav Republic of Macedonia,317,133.4,FALSE
+The former Yugoslav Republic of Macedonia,318,164.7,FALSE
+Togo,15,640.8,FALSE
+Togo,18,688,FALSE
+Togo,52,204,FALSE
+Togo,128,613.8,FALSE
+Togo,169,288.4,FALSE
+Togo,180,408.1,FALSE
+Togo,208,350.8,FALSE
+Togo,227,367.6,FALSE
+Togo,228,222.6,FALSE
+Togo,254,387.9,FALSE
+Togo,270,392.9,FALSE
+Togo,296,261.4,FALSE
+Togo,301,344,FALSE
+Togo,306,532.9,FALSE
+Togo,319,401.3,FALSE
+Trinidad and Tobago,40,1346,FALSE
+Trinidad and Tobago,52,733.8,FALSE
+Trinidad and Tobago,54,2465.4,FALSE
+Trinidad and Tobago,63,6354.8,FALSE
+Trinidad and Tobago,90,643.7,FALSE
+Trinidad and Tobago,101,1763.1,FALSE
+Trinidad and Tobago,115,2933.6,FALSE
+Trinidad and Tobago,158,5148.4,FALSE
+Trinidad and Tobago,202,2972.6,FALSE
+Trinidad and Tobago,215,693.3,FALSE
+Trinidad and Tobago,227,2435.4,FALSE
+Trinidad and Tobago,228,1035.4,FALSE
+Trinidad and Tobago,238,396.1,FALSE
+Trinidad and Tobago,254,421.7,FALSE
+Trinidad and Tobago,296,1683.6,FALSE
+Trinidad and Tobago,301,1409,FALSE
+Trinidad and Tobago,306,1809.7,FALSE
+Trinidad and Tobago,317,624.2,FALSE
+Trinidad and Tobago,319,1155.4,FALSE
+Tunisia,4,2033.5,FALSE
+Tunisia,7,512.1,FALSE
+Tunisia,8,465.5,FALSE
+Tunisia,11,397,FALSE
+Tunisia,17,185.6,FALSE
+Tunisia,19,745.3,FALSE
+Tunisia,33,460.3,FALSE
+Tunisia,40,145.7,FALSE
+Tunisia,49,159.2,FALSE
+Tunisia,54,111.7,FALSE
+Tunisia,58,2412.4,FALSE
+Tunisia,60,1102.9,FALSE
+Tunisia,63,381.7,FALSE
+Tunisia,90,331,FALSE
+Tunisia,94,1582.4,FALSE
+Tunisia,101,269.1,FALSE
+Tunisia,105,748.1,FALSE
+Tunisia,112,650.8,FALSE
+Tunisia,121,180.6,FALSE
+Tunisia,120,465.1,FALSE
+Tunisia,154,406.9,FALSE
+Tunisia,158,238.8,FALSE
+Tunisia,179,299.8,FALSE
+Tunisia,192,3174.1,FALSE
+Tunisia,203,521.4,FALSE
+Tunisia,206,265.4,FALSE
+Tunisia,208,349.2,FALSE
+Tunisia,219,515.8,FALSE
+Tunisia,221,558.7,FALSE
+Tunisia,218,553.1,FALSE
+Tunisia,231,504.6,FALSE
+Tunisia,235,227.2,FALSE
+Tunisia,238,219.3,FALSE
+Tunisia,243,281.7,FALSE
+Tunisia,279,331.5,FALSE
+Tunisia,281,694.6,FALSE
+Tunisia,298,472.1,FALSE
+Tunisia,305,911.1,FALSE
+Tunisia,306,130.7,FALSE
+Tunisia,308,167.9,FALSE
+Tunisia,317,149.9,FALSE
+Tunisia,318,298.9,FALSE
+Turkey,4,2820.7,FALSE
+Turkey,5,1939.3,FALSE
+Turkey,7,348.3,FALSE
+Turkey,8,758.8,FALSE
+Turkey,11,1182.1,FALSE
+Turkey,13,1446.9,FALSE
+Turkey,16,641,FALSE
+Turkey,17,224.9,FALSE
+Turkey,18,1140.4,FALSE
+Turkey,19,641.7,FALSE
+Turkey,33,611.4,FALSE
+Turkey,40,278.8,FALSE
+Turkey,48,464.6,FALSE
+Turkey,49,229.2,FALSE
+Turkey,54,458.1,FALSE
+Turkey,58,1167.7,FALSE
+Turkey,59,2629.3,FALSE
+Turkey,60,1217.2,FALSE
+Turkey,63,461.6,FALSE
+Turkey,90,383.5,FALSE
+Turkey,94,486.7,FALSE
+Turkey,101,415.7,FALSE
+Turkey,105,986,FALSE
+Turkey,112,1995.3,FALSE
+Turkey,121,195.5,FALSE
+Turkey,120,491.8,FALSE
+Turkey,128,1378.2,FALSE
+Turkey,106,3488.9,FALSE
+Turkey,152,444.6,FALSE
+Turkey,154,449.1,FALSE
+Turkey,156,835.6,FALSE
+Turkey,158,443.3,FALSE
+Turkey,169,219.7,FALSE
+Turkey,179,276,FALSE
+Turkey,180,421.7,FALSE
+Turkey,192,1212.8,FALSE
+Turkey,200,267.7,FALSE
+Turkey,202,1915.2,FALSE
+Turkey,203,1247.1,FALSE
+Turkey,205,250.3,FALSE
+Turkey,208,193.2,FALSE
+Turkey,219,561.2,FALSE
+Turkey,221,605.4,FALSE
+Turkey,217,375,FALSE
+Turkey,218,439.8,FALSE
+Turkey,229,5227.8,FALSE
+Turkey,231,670.2,FALSE
+Turkey,234,2317.8,FALSE
+Turkey,235,212,FALSE
+Turkey,238,574.9,FALSE
+Turkey,243,487.3,FALSE
+Turkey,248,433.2,FALSE
+Turkey,254,505,FALSE
+Turkey,259,220,FALSE
+Turkey,267,2042.9,FALSE
+Turkey,276,380.7,FALSE
+Turkey,279,470.8,FALSE
+Turkey,281,799,FALSE
+Turkey,282,63.2,FALSE
+Turkey,289,698.5,FALSE
+Turkey,298,207.9,FALSE
+Turkey,302,586.1,FALSE
+Turkey,305,4566.1,FALSE
+Turkey,306,509.4,FALSE
+Turkey,308,233.6,FALSE
+Turkey,316,4874.3,FALSE
+Turkey,317,181.3,FALSE
+Turkey,318,265.8,FALSE
+Ukraine,7,177.1,FALSE
+Ukraine,8,482.6,FALSE
+Ukraine,17,117.7,FALSE
+Ukraine,30,1031.5,FALSE
+Ukraine,39,513,FALSE
+Ukraine,40,133.3,FALSE
+Ukraine,49,146.7,FALSE
+Ukraine,58,575.3,FALSE
+Ukraine,90,617.5,FALSE
+Ukraine,91,360.8,FALSE
+Ukraine,108,180.4,FALSE
+Ukraine,112,1713.3,FALSE
+Ukraine,116,764.7,FALSE
+Ukraine,120,246.8,FALSE
+Ukraine,138,4642.5,FALSE
+Ukraine,169,138.2,FALSE
+Ukraine,180,125.1,FALSE
+Ukraine,192,1004.9,FALSE
+Ukraine,194,374.3,FALSE
+Ukraine,200,110.4,FALSE
+Ukraine,205,125,FALSE
+Ukraine,219,380.8,FALSE
+Ukraine,221,345.8,FALSE
+Ukraine,217,252.1,FALSE
+Ukraine,231,273.2,FALSE
+Ukraine,235,103,FALSE
+Ukraine,248,356.8,FALSE
+Ukraine,249,1054.7,FALSE
+Ukraine,254,247.9,FALSE
+Ukraine,259,115.5,FALSE
+Ukraine,276,348.1,FALSE
+Ukraine,281,666.8,FALSE
+Ukraine,282,33.2,FALSE
+Ukraine,289,333.3,FALSE
+Ukraine,306,120.9,FALSE
+Ukraine,317,50.2,FALSE
+Ukraine,318,128.7,FALSE
+United Kingdom,7,930.3,FALSE
+United Kingdom,12,12785,FALSE
+United Kingdom,17,137.7,FALSE
+United Kingdom,18,179.6,FALSE
+United Kingdom,19,2700.4,FALSE
+United Kingdom,40,434.8,FALSE
+United Kingdom,49,523.9,FALSE
+United Kingdom,54,903.3,FALSE
+United Kingdom,58,7161.4,FALSE
+United Kingdom,90,1095,FALSE
+United Kingdom,152,1378.5,FALSE
+United Kingdom,158,2214.3,FALSE
+United Kingdom,200,153.9,FALSE
+United Kingdom,205,484.7,FALSE
+United Kingdom,221,908.7,FALSE
+United Kingdom,217,167.4,FALSE
+United Kingdom,218,2364.2,FALSE
+United Kingdom,231,2210.3,FALSE
+United Kingdom,235,252.5,FALSE
+United Kingdom,248,378.1,FALSE
+United Kingdom,281,3821,FALSE
+United Kingdom,306,664.3,FALSE
+United Kingdom,318,162,FALSE
+United States of America,11,1545,FALSE
+United States of America,12,2491,FALSE
+United States of America,17,227,FALSE
+United States of America,18,666,FALSE
+United States of America,19,569,FALSE
+United States of America,40,481,FALSE
+United States of America,49,765,FALSE
+United States of America,54,1290,FALSE
+United States of America,60,518,FALSE
+United States of America,63,765,FALSE
+United States of America,90,575,FALSE
+United States of America,112,1605,FALSE
+United States of America,121,292,FALSE
+United States of America,128,417,FALSE
+United States of America,154,784,FALSE
+United States of America,156,611,FALSE
+United States of America,158,611,FALSE
+United States of America,161,319,FALSE
+United States of America,169,134,FALSE
+United States of America,80,633,FALSE
+United States of America,179,333,FALSE
+United States of America,180,109,FALSE
+United States of America,192,2778,FALSE
+United States of America,194,723,FALSE
+United States of America,200,138,FALSE
+United States of America,205,306,FALSE
+United States of America,208,250,FALSE
+United States of America,217,238,FALSE
+United States of America,218,284,FALSE
+United States of America,235,196,FALSE
+United States of America,238,589,FALSE
+United States of America,248,556,FALSE
+United States of America,254,231,FALSE
+United States of America,259,203,FALSE
+United States of America,261,456,FALSE
+United States of America,84,856,TRUE
+United States of America,270,106,FALSE
+United States of America,276,349,FALSE
+United States of America,279,1116,FALSE
+United States of America,289,384,FALSE
+United States of America,296,494,FALSE
+United States of America,298,633,FALSE
+United States of America,305,4449,FALSE
+United States of America,306,897,FALSE
+United States of America,317,317,FALSE
+United States of America,318,141,FALSE
+Venezuela (Bolivarian Republic of),13,35727.6,FALSE
+Venezuela (Bolivarian Republic of),16,23449.4,FALSE
+Venezuela (Bolivarian Republic of),18,104546.3,FALSE
+Venezuela (Bolivarian Republic of),40,16436.9,FALSE
+Venezuela (Bolivarian Republic of),49,50997.9,FALSE
+Venezuela (Bolivarian Republic of),52,24640.5,FALSE
+Venezuela (Bolivarian Republic of),54,96178.9,FALSE
+Venezuela (Bolivarian Republic of),63,49736.9,FALSE
+Venezuela (Bolivarian Republic of),74,734342.1,FALSE
+Venezuela (Bolivarian Republic of),75,13930.4,FALSE
+Venezuela (Bolivarian Republic of),77,168851,FALSE
+Venezuela (Bolivarian Republic of),90,20013,FALSE
+Venezuela (Bolivarian Republic of),101,20929.8,FALSE
+Venezuela (Bolivarian Republic of),112,229271.1,FALSE
+Venezuela (Bolivarian Republic of),120,59262.2,FALSE
+Venezuela (Bolivarian Republic of),128,22797.2,FALSE
+Venezuela (Bolivarian Republic of),154,21604.6,FALSE
+Venezuela (Bolivarian Republic of),158,28245.2,FALSE
+Venezuela (Bolivarian Republic of),169,27408.9,FALSE
+Venezuela (Bolivarian Republic of),175,15631.8,FALSE
+Venezuela (Bolivarian Republic of),179,25613.9,FALSE
+Venezuela (Bolivarian Republic of),205,60080,FALSE
+Venezuela (Bolivarian Republic of),206,51837.1,FALSE
+Venezuela (Bolivarian Republic of),208,32426.1,FALSE
+Venezuela (Bolivarian Republic of),215,21169.9,FALSE
+Venezuela (Bolivarian Republic of),219,50148.8,FALSE
+Venezuela (Bolivarian Republic of),217,73470.9,FALSE
+Venezuela (Bolivarian Republic of),227,118532,FALSE
+Venezuela (Bolivarian Republic of),228,29198.3,FALSE
+Venezuela (Bolivarian Republic of),235,47991.4,FALSE
+Venezuela (Bolivarian Republic of),238,16037.5,FALSE
+Venezuela (Bolivarian Republic of),254,15027.3,FALSE
+Venezuela (Bolivarian Republic of),84,4320.9,FALSE
+Venezuela (Bolivarian Republic of),267,37807.8,FALSE
+Venezuela (Bolivarian Republic of),269,12962.7,FALSE
+Venezuela (Bolivarian Republic of),270,12638.6,FALSE
+Venezuela (Bolivarian Republic of),276,728.1,FALSE
+Venezuela (Bolivarian Republic of),279,17494.8,FALSE
+Venezuela (Bolivarian Republic of),281,52551.2,FALSE
+Venezuela (Bolivarian Republic of),282,25591.1,FALSE
+Venezuela (Bolivarian Republic of),286,1600.4,FALSE
+Venezuela (Bolivarian Republic of),289,10262.1,FALSE
+Venezuela (Bolivarian Republic of),296,28830.4,FALSE
+Venezuela (Bolivarian Republic of),298,22423.5,FALSE
+Venezuela (Bolivarian Republic of),305,124243.7,FALSE
+Venezuela (Bolivarian Republic of),306,53474.2,FALSE
+Venezuela (Bolivarian Republic of),317,19088.5,FALSE
+Venezuela (Bolivarian Republic of),319,34139.7,FALSE
+Venezuela (Bolivarian Republic of),76,39645,FALSE
+Viet Nam,16,322.1,FALSE
+Viet Nam,18,1315.9,FALSE
+Viet Nam,40,325.3,FALSE
+Viet Nam,51,1350.7,FALSE
+Viet Nam,52,169.2,FALSE
+Viet Nam,54,483.5,FALSE
+Viet Nam,63,872.1,FALSE
+Viet Nam,65,1058.3,FALSE
+Viet Nam,77,1551.8,FALSE
+Viet Nam,121,844.6,FALSE
+Viet Nam,120,774.8,FALSE
+Viet Nam,128,1071.3,FALSE
+Viet Nam,146,1276.2,FALSE
+Viet Nam,169,324.1,FALSE
+Viet Nam,175,709.3,FALSE
+Viet Nam,192,1782.5,FALSE
+Viet Nam,205,497.8,FALSE
+Viet Nam,208,971.4,FALSE
+Viet Nam,228,388,FALSE
+Viet Nam,235,537.4,FALSE
+Viet Nam,254,280.5,FALSE
+Viet Nam,257,977.8,FALSE
+Viet Nam,267,1961.8,FALSE
+Viet Nam,276,812.6,FALSE
+Viet Nam,286,44.7,FALSE
+Viet Nam,296,354.8,FALSE
+Viet Nam,302,372.6,FALSE
+Viet Nam,305,2214.6,FALSE
+Viet Nam,317,265.3,FALSE
+China,7,468.4,FALSE
+China,40,279,FALSE
+China,49,342.8,FALSE
+China,54,527.1,FALSE
+China,63,571,FALSE
+China,90,479.3,FALSE
+China,101,524.2,FALSE
+China,112,1487.6,FALSE
+China,128,967.7,FALSE
+China,158,558.2,FALSE
+China,169,264.3,FALSE
+China,192,1084.8,FALSE
+China,206,579.3,FALSE
+China,235,325.5,FALSE
+China,238,334,FALSE
+China,248,682.1,FALSE
+China,254,559.9,FALSE
+China,276,581.5,FALSE
+China,279,630.7,FALSE
+China,282,69.8,FALSE
+China,306,513.8,FALSE
+China,318,385.1,FALSE
diff --git a/packages/api/db/seeds/seedData/taskTypes.csv b/packages/api/db/seeds/seedData/taskTypes.csv
new file mode 100644
index 0000000000..4ddeb637a7
--- /dev/null
+++ b/packages/api/db/seeds/seedData/taskTypes.csv
@@ -0,0 +1,13 @@
+task_name
+Bed Preparation
+Delivery
+Sales
+Social Event
+Seeding
+Fertilizing
+Scouting
+Harvesting
+Weeding
+Wash and Pack
+Pest Control
+Other
\ No newline at end of file
diff --git a/packages/api/db/seeds/seedData/yield.csv b/packages/api/db/seeds/seedData/yield.csv
new file mode 100644
index 0000000000..d90c1089bd
--- /dev/null
+++ b/packages/api/db/seeds/seedData/yield.csv
@@ -0,0 +1,25832 @@
+country,crop_id,value,is_average
+Afghanistan,4,16859,FALSE
+Afghanistan,5,6434,FALSE
+Afghanistan,7,72762,FALSE
+Afghanistan,8,20819,FALSE
+Afghanistan,17,13770,FALSE
+Afghanistan,105,38755,FALSE
+Afghanistan,120,106069,FALSE
+Afghanistan,161,3787,FALSE
+Afghanistan,169,20517,FALSE
+Afghanistan,179,63322,FALSE
+Afghanistan,180,35015,FALSE
+Afghanistan,203,34759,FALSE
+Afghanistan,205,106223,FALSE
+Afghanistan,208,45632,FALSE
+Afghanistan,219,49215,FALSE
+Afghanistan,221,38826,FALSE
+Afghanistan,229,12179,FALSE
+Afghanistan,231,56039,FALSE
+Afghanistan,235,119868,FALSE
+Afghanistan,254,29963,FALSE
+Afghanistan,84,11545,FALSE
+Afghanistan,267,21333,FALSE
+Afghanistan,282,78317,FALSE
+Afghanistan,286,130263,FALSE
+Afghanistan,289,15598,FALSE
+Afghanistan,316,16498,FALSE
+Afghanistan,317,115473,FALSE
+Afghanistan,318,19803,FALSE
+Afghanistan,18,11273.75269,TRUE
+Afghanistan,19,77366.60983,TRUE
+Afghanistan,33,30270.38924,TRUE
+Afghanistan,40,180987.6885,TRUE
+Afghanistan,49,247408.5214,TRUE
+Afghanistan,54,175365.1249,TRUE
+Afghanistan,58,74040.89691,TRUE
+Afghanistan,59,22326.21725,TRUE
+Afghanistan,63,234336.5313,TRUE
+Afghanistan,90,194487.8189,TRUE
+Afghanistan,94,61002.28577,TRUE
+Afghanistan,101,138512.4356,TRUE
+Afghanistan,112,122104.9439,TRUE
+Afghanistan,138,17125.18189,TRUE
+Afghanistan,152,119704.6269,TRUE
+Afghanistan,154,96782.90416,TRUE
+Afghanistan,158,96473.15601,TRUE
+Afghanistan,200,22918.25267,TRUE
+Afghanistan,202,85300.04797,TRUE
+Afghanistan,206,183393.7134,TRUE
+Afghanistan,218,52990.31222,TRUE
+Afghanistan,238,116960.1876,TRUE
+Afghanistan,243,112174.5654,TRUE
+Afghanistan,259,55616.6005,TRUE
+Afghanistan,276,10950.60863,TRUE
+Afghanistan,279,177754.1672,TRUE
+Afghanistan,298,120463.1286,TRUE
+Afghanistan,305,15590.0347,TRUE
+Afghanistan,306,131681.4608,TRUE
+Afghanistan,11,178064.2799,TRUE
+Afghanistan,16,74389.59543,TRUE
+Afghanistan,48,27222.34375,TRUE
+Afghanistan,60,22383.25858,TRUE
+Afghanistan,63,11715.28525,TRUE
+Afghanistan,121,115777.4722,TRUE
+Afghanistan,128,9353.124815,TRUE
+Afghanistan,156,10200.29705,TRUE
+Afghanistan,217,21196.4891,TRUE
+Afghanistan,248,14225.32829,TRUE
+Afghanistan,270,9151.63574,TRUE
+Afghanistan,52,72720.10141,TRUE
+Afghanistan,74,4541.36112,TRUE
+Afghanistan,75,47178.96176,TRUE
+Afghanistan,80,49992.57574,TRUE
+Afghanistan,301,113987.8459,TRUE
+Afghanistan,319,89190.44102,TRUE
+Afghanistan,51,26504.47085,TRUE
+Afghanistan,53,6581.96824,TRUE
+Afghanistan,77,5993.147024,TRUE
+Afghanistan,213,124295.9159,TRUE
+Afghanistan,228,133880.2683,TRUE
+Afghanistan,269,15171.62496,TRUE
+Afghanistan,296,43692.55808,TRUE
+Afghanistan,175,70802.39066,TRUE
+Afghanistan,12,36715.19395,TRUE
+Afghanistan,13,74728.86082,TRUE
+Afghanistan,108,12577.92841,TRUE
+Afghanistan,165,14797.07017,TRUE
+Afghanistan,215,105585.0293,TRUE
+Afghanistan,261,8946.089355,TRUE
+Afghanistan,281,136069.2843,TRUE
+Afghanistan,302,27087.34387,TRUE
+Afghanistan,310,36133,TRUE
+Afghanistan,106,13595.99028,TRUE
+Afghanistan,30,62885.73079,TRUE
+Afghanistan,91,126485.3041,TRUE
+Afghanistan,192,3780098.195,TRUE
+Afghanistan,249,70032.42373,TRUE
+Afghanistan,308,35296.76443,TRUE
+Afghanistan,116,98484.54468,TRUE
+Afghanistan,234,8162.890747,TRUE
+Afghanistan,88,138218.959,TRUE
+Afghanistan,227,9358.848173,TRUE
+Afghanistan,8,20819,FALSE
+Afghanistan,115,186672.4488,TRUE
+Afghanistan,146,28645.96233,TRUE
+Afghanistan,257,14862.84549,TRUE
+Afghanistan,39,10075.63454,TRUE
+Afghanistan,61,218943.5096,TRUE
+Afghanistan,76,100326.9844,TRUE
+Afghanistan,268,27005.25,TRUE
+Afghanistan,194,9390.783666,TRUE
+Afghanistan,198,5299.135169,TRUE
+Afghanistan,245,11957.75,TRUE
+Afghanistan,86,15341.61704,TRUE
+Afghanistan,247,27947.125,TRUE
+Afghanistan,15,5922.875,TRUE
+Afghanistan,135,5719.346191,TRUE
+Afghanistan,65,4252.65625,TRUE
+Afghanistan,70,8796.273438,TRUE
+Afghanistan,314,4472.643433,TRUE
+Afghanistan,133,6124.625,TRUE
+Afghanistan,240,4373.4375,TRUE
+Afghanistan,148,23186,TRUE
+Afghanistan,31,5157,TRUE
+Albania,4,20977.52128,TRUE
+Albania,5,7484.490489,TRUE
+Albania,7,240028,FALSE
+Albania,8,159325,FALSE
+Albania,17,28995,FALSE
+Albania,105,140376,FALSE
+Albania,120,204776,FALSE
+Albania,161,8730.264786,TRUE
+Albania,169,64877,FALSE
+Albania,179,274125,FALSE
+Albania,180,7520.279265,TRUE
+Albania,203,25476,FALSE
+Albania,205,208738,FALSE
+Albania,208,481483,FALSE
+Albania,219,158380,FALSE
+Albania,221,188507,FALSE
+Albania,229,16244.65912,TRUE
+Albania,231,163533,FALSE
+Albania,235,245894,FALSE
+Albania,254,26952.37295,TRUE
+Albania,84,10523,FALSE
+Albania,267,9372.487582,TRUE
+Albania,282,159381,FALSE
+Albania,286,760050.6713,TRUE
+Albania,289,28997,FALSE
+Albania,316,72255.87156,TRUE
+Albania,317,448276,FALSE
+Albania,318,39000,FALSE
+Albania,18,18120,FALSE
+Albania,19,126370,FALSE
+Albania,33,12628,FALSE
+Albania,40,306907,FALSE
+Albania,49,331652,FALSE
+Albania,54,198350,FALSE
+Albania,58,91806,FALSE
+Albania,59,25125,FALSE
+Albania,63,261259,FALSE
+Albania,90,415692,FALSE
+Albania,94,293264,FALSE
+Albania,101,270305,FALSE
+Albania,112,105107,FALSE
+Albania,138,7566,FALSE
+Albania,152,226890,FALSE
+Albania,154,68057,FALSE
+Albania,158,143092,FALSE
+Albania,200,21718,FALSE
+Albania,202,112570,FALSE
+Albania,206,199487,FALSE
+Albania,218,107992,FALSE
+Albania,238,265772,FALSE
+Albania,243,49314,FALSE
+Albania,259,22533,FALSE
+Albania,276,25152,FALSE
+Albania,279,145913,FALSE
+Albania,298,361051,FALSE
+Albania,305,17984,FALSE
+Albania,306,440142,FALSE
+Albania,11,178064.2799,TRUE
+Albania,16,74389.59543,TRUE
+Albania,48,27222.34375,TRUE
+Albania,60,22383.25858,TRUE
+Albania,63,261259,FALSE
+Albania,121,115777.4722,TRUE
+Albania,128,9353.124815,TRUE
+Albania,156,10200.29705,TRUE
+Albania,217,21196.4891,TRUE
+Albania,248,14225.32829,TRUE
+Albania,270,9151.63574,TRUE
+Albania,52,72720.10141,TRUE
+Albania,74,4541.36112,TRUE
+Albania,75,47178.96176,TRUE
+Albania,80,49992.57574,TRUE
+Albania,301,113987.8459,TRUE
+Albania,319,89190.44102,TRUE
+Albania,51,26504.47085,TRUE
+Albania,53,6581.96824,TRUE
+Albania,77,5993.147024,TRUE
+Albania,213,124295.9159,TRUE
+Albania,228,133880.2683,TRUE
+Albania,269,15171.62496,TRUE
+Albania,296,43692.55808,TRUE
+Albania,175,70802.39066,TRUE
+Albania,12,36715.19395,TRUE
+Albania,13,74728.86082,TRUE
+Albania,108,12577.92841,TRUE
+Albania,165,14797.07017,TRUE
+Albania,215,105585.0293,TRUE
+Albania,261,8946.089355,TRUE
+Albania,281,136069.2843,TRUE
+Albania,302,27087.34387,TRUE
+Albania,310,36133,TRUE
+Albania,106,13595.99028,TRUE
+Albania,30,62885.73079,TRUE
+Albania,91,126485.3041,TRUE
+Albania,192,3780098.195,TRUE
+Albania,249,70032.42373,TRUE
+Albania,308,35296.76443,TRUE
+Albania,116,98484.54468,TRUE
+Albania,234,8162.890747,TRUE
+Albania,88,138218.959,TRUE
+Albania,227,9358.848173,TRUE
+Albania,8,159325,FALSE
+Albania,115,186672.4488,TRUE
+Albania,146,28645.96233,TRUE
+Albania,257,14862.84549,TRUE
+Albania,39,10075.63454,TRUE
+Albania,61,218943.5096,TRUE
+Albania,76,100326.9844,TRUE
+Albania,268,27005.25,TRUE
+Albania,194,9390.783666,TRUE
+Albania,198,5299.135169,TRUE
+Albania,245,11957.75,TRUE
+Albania,86,15341.61704,TRUE
+Albania,247,27947.125,TRUE
+Albania,15,5922.875,TRUE
+Albania,135,5719.346191,TRUE
+Albania,65,4252.65625,TRUE
+Albania,70,8796.273438,TRUE
+Albania,314,4472.643433,TRUE
+Albania,133,6124.625,TRUE
+Albania,240,4373.4375,TRUE
+Albania,148,23186,TRUE
+Albania,31,5157,TRUE
+Algeria,4,16653,FALSE
+Algeria,5,7484.490489,TRUE
+Algeria,7,124110,FALSE
+Algeria,8,67149,FALSE
+Algeria,17,13022,FALSE
+Algeria,105,31196,FALSE
+Algeria,120,86166,FALSE
+Algeria,161,8730.264786,TRUE
+Algeria,169,45122,FALSE
+Algeria,179,121608.9919,TRUE
+Algeria,180,7520.279265,TRUE
+Algeria,203,16437,FALSE
+Algeria,205,305834,FALSE
+Algeria,208,212801,FALSE
+Algeria,219,93136,FALSE
+Algeria,221,86659,FALSE
+Algeria,229,16244.65912,TRUE
+Algeria,231,64909,FALSE
+Algeria,235,306198,FALSE
+Algeria,254,17502,FALSE
+Algeria,84,2909,FALSE
+Algeria,267,9372.487582,TRUE
+Algeria,282,423220.8453,TRUE
+Algeria,286,760050.6713,TRUE
+Algeria,289,4587,FALSE
+Algeria,316,72255.87156,TRUE
+Algeria,317,318315,FALSE
+Algeria,318,16912,FALSE
+Algeria,18,6679,FALSE
+Algeria,19,73924,FALSE
+Algeria,33,10697,FALSE
+Algeria,40,252057,FALSE
+Algeria,49,233145,FALSE
+Algeria,54,235775,FALSE
+Algeria,58,24136,FALSE
+Algeria,59,22326.21725,TRUE
+Algeria,63,35430,FALSE
+Algeria,90,343726,FALSE
+Algeria,94,61550,FALSE
+Algeria,101,189811,FALSE
+Algeria,112,109716,FALSE
+Algeria,138,17125.18189,TRUE
+Algeria,152,119704.6269,TRUE
+Algeria,154,190238,FALSE
+Algeria,158,96473.15601,TRUE
+Algeria,200,12713,FALSE
+Algeria,202,85300.04797,TRUE
+Algeria,206,109930,FALSE
+Algeria,218,39163,FALSE
+Algeria,238,219495,FALSE
+Algeria,243,68253,FALSE
+Algeria,259,55616.6005,TRUE
+Algeria,276,10950.60863,TRUE
+Algeria,279,177754.1672,TRUE
+Algeria,298,189638,FALSE
+Algeria,305,20672,FALSE
+Algeria,306,567729,FALSE
+Algeria,11,187999,FALSE
+Algeria,16,272237,FALSE
+Algeria,48,40260,FALSE
+Algeria,60,9559,FALSE
+Algeria,63,35430,FALSE
+Algeria,121,221512,FALSE
+Algeria,128,20914,FALSE
+Algeria,156,11494,FALSE
+Algeria,217,7785,FALSE
+Algeria,248,19811,FALSE
+Algeria,270,255800,FALSE
+Algeria,52,72720.10141,TRUE
+Algeria,74,4541.36112,TRUE
+Algeria,75,47178.96176,TRUE
+Algeria,80,49992.57574,TRUE
+Algeria,301,113987.8459,TRUE
+Algeria,319,89190.44102,TRUE
+Algeria,51,26504.47085,TRUE
+Algeria,53,6581.96824,TRUE
+Algeria,77,5993.147024,TRUE
+Algeria,213,124295.9159,TRUE
+Algeria,228,133880.2683,TRUE
+Algeria,269,15171.62496,TRUE
+Algeria,296,43692.55808,TRUE
+Algeria,175,70802.39066,TRUE
+Algeria,12,36715.19395,TRUE
+Algeria,13,74728.86082,TRUE
+Algeria,108,12577.92841,TRUE
+Algeria,165,14797.07017,TRUE
+Algeria,215,105585.0293,TRUE
+Algeria,261,8946.089355,TRUE
+Algeria,281,136069.2843,TRUE
+Algeria,302,27087.34387,TRUE
+Algeria,310,36133,TRUE
+Algeria,106,13595.99028,TRUE
+Algeria,30,62885.73079,TRUE
+Algeria,91,126485.3041,TRUE
+Algeria,192,3780098.195,TRUE
+Algeria,249,70032.42373,TRUE
+Algeria,308,35296.76443,TRUE
+Algeria,116,98484.54468,TRUE
+Algeria,234,8162.890747,TRUE
+Algeria,88,138218.959,TRUE
+Algeria,227,9358.848173,TRUE
+Algeria,8,67149,FALSE
+Algeria,115,186672.4488,TRUE
+Algeria,146,28645.96233,TRUE
+Algeria,257,14862.84549,TRUE
+Algeria,39,10075.63454,TRUE
+Algeria,61,218943.5096,TRUE
+Algeria,76,100326.9844,TRUE
+Algeria,268,27005.25,TRUE
+Algeria,194,9390.783666,TRUE
+Algeria,198,5299.135169,TRUE
+Algeria,245,11957.75,TRUE
+Algeria,86,15341.61704,TRUE
+Algeria,247,27947.125,TRUE
+Algeria,15,5922.875,TRUE
+Algeria,135,5719.346191,TRUE
+Algeria,65,4252.65625,TRUE
+Algeria,70,8796.273438,TRUE
+Algeria,314,4472.643433,TRUE
+Algeria,133,6124.625,TRUE
+Algeria,240,4373.4375,TRUE
+Algeria,148,23186,TRUE
+Algeria,31,5157,TRUE
+American Samoa,4,20977.52128,TRUE
+American Samoa,5,7484.490489,TRUE
+American Samoa,7,111437.9893,TRUE
+American Samoa,8,47030.54376,TRUE
+American Samoa,17,33099.94094,TRUE
+American Samoa,105,149702.6633,TRUE
+American Samoa,120,115713.1489,TRUE
+American Samoa,161,8730.264786,TRUE
+American Samoa,169,16777.49735,TRUE
+American Samoa,179,73042,FALSE
+American Samoa,180,7520.279265,TRUE
+American Samoa,203,26179.47154,TRUE
+American Samoa,205,158255.8483,TRUE
+American Samoa,208,84004.18102,TRUE
+American Samoa,219,80605.62094,TRUE
+American Samoa,221,53059.48552,TRUE
+American Samoa,229,16244.65912,TRUE
+American Samoa,231,60255.26389,TRUE
+American Samoa,235,172280.9273,TRUE
+American Samoa,254,26952.37295,TRUE
+American Samoa,84,9355.713607,TRUE
+American Samoa,267,9372.487582,TRUE
+American Samoa,282,423220.8453,TRUE
+American Samoa,286,9635,FALSE
+American Samoa,289,9979.922823,TRUE
+American Samoa,316,72255.87156,TRUE
+American Samoa,317,188762.6372,TRUE
+American Samoa,318,32261.2753,TRUE
+American Samoa,18,11273.75269,TRUE
+American Samoa,19,29623,FALSE
+American Samoa,33,30270.38924,TRUE
+American Samoa,40,29266,FALSE
+American Samoa,49,247408.5214,TRUE
+American Samoa,54,175365.1249,TRUE
+American Samoa,58,74040.89691,TRUE
+American Samoa,59,22326.21725,TRUE
+American Samoa,63,234336.5313,TRUE
+American Samoa,90,48172,FALSE
+American Samoa,94,61002.28577,TRUE
+American Samoa,101,45700,FALSE
+American Samoa,112,122104.9439,TRUE
+American Samoa,138,17125.18189,TRUE
+American Samoa,152,119704.6269,TRUE
+American Samoa,154,96782.90416,TRUE
+American Samoa,158,96473.15601,TRUE
+American Samoa,200,22918.25267,TRUE
+American Samoa,202,85300.04797,TRUE
+American Samoa,206,19881,FALSE
+American Samoa,218,52990.31222,TRUE
+American Samoa,238,116960.1876,TRUE
+American Samoa,243,112174.5654,TRUE
+American Samoa,259,55616.6005,TRUE
+American Samoa,276,10950.60863,TRUE
+American Samoa,279,177754.1672,TRUE
+American Samoa,298,120463.1286,TRUE
+American Samoa,305,15590.0347,TRUE
+American Samoa,306,32878,FALSE
+American Samoa,11,178064.2799,TRUE
+American Samoa,16,23591,FALSE
+American Samoa,48,27222.34375,TRUE
+American Samoa,60,22383.25858,TRUE
+American Samoa,63,11715.28525,TRUE
+American Samoa,121,115777.4722,TRUE
+American Samoa,128,9353.124815,TRUE
+American Samoa,156,10200.29705,TRUE
+American Samoa,217,21196.4891,TRUE
+American Samoa,248,14225.32829,TRUE
+American Samoa,270,9151.63574,TRUE
+American Samoa,52,57225,FALSE
+American Samoa,74,552,FALSE
+American Samoa,75,28401,FALSE
+American Samoa,80,63956,FALSE
+American Samoa,301,39021,FALSE
+American Samoa,319,36022,FALSE
+American Samoa,51,26504.47085,TRUE
+American Samoa,53,6581.96824,TRUE
+American Samoa,77,5993.147024,TRUE
+American Samoa,213,124295.9159,TRUE
+American Samoa,228,133880.2683,TRUE
+American Samoa,269,15171.62496,TRUE
+American Samoa,296,43692.55808,TRUE
+American Samoa,175,70802.39066,TRUE
+American Samoa,12,36715.19395,TRUE
+American Samoa,13,74728.86082,TRUE
+American Samoa,108,12577.92841,TRUE
+American Samoa,165,14797.07017,TRUE
+American Samoa,215,105585.0293,TRUE
+American Samoa,261,8946.089355,TRUE
+American Samoa,281,136069.2843,TRUE
+American Samoa,302,27087.34387,TRUE
+American Samoa,310,36133,TRUE
+American Samoa,106,13595.99028,TRUE
+American Samoa,30,62885.73079,TRUE
+American Samoa,91,126485.3041,TRUE
+American Samoa,192,3780098.195,TRUE
+American Samoa,249,70032.42373,TRUE
+American Samoa,308,35296.76443,TRUE
+American Samoa,116,98484.54468,TRUE
+American Samoa,234,8162.890747,TRUE
+American Samoa,88,138218.959,TRUE
+American Samoa,227,9358.848173,TRUE
+American Samoa,8,21599.0332,TRUE
+American Samoa,115,186672.4488,TRUE
+American Samoa,146,28645.96233,TRUE
+American Samoa,257,14862.84549,TRUE
+American Samoa,39,10075.63454,TRUE
+American Samoa,61,218943.5096,TRUE
+American Samoa,76,100326.9844,TRUE
+American Samoa,268,27005.25,TRUE
+American Samoa,194,9390.783666,TRUE
+American Samoa,198,5299.135169,TRUE
+American Samoa,245,11957.75,TRUE
+American Samoa,86,15341.61704,TRUE
+American Samoa,247,27947.125,TRUE
+American Samoa,15,5922.875,TRUE
+American Samoa,135,5719.346191,TRUE
+American Samoa,65,4252.65625,TRUE
+American Samoa,70,8796.273438,TRUE
+American Samoa,314,4472.643433,TRUE
+American Samoa,133,6124.625,TRUE
+American Samoa,240,4373.4375,TRUE
+American Samoa,148,23186,TRUE
+American Samoa,31,5157,TRUE
+Angola,4,20977.52128,TRUE
+Angola,5,7484.490489,TRUE
+Angola,7,111437.9893,TRUE
+Angola,8,47030.54376,TRUE
+Angola,17,33099.94094,TRUE
+Angola,105,149702.6633,TRUE
+Angola,120,115713.1489,TRUE
+Angola,161,8730.264786,TRUE
+Angola,169,10789,FALSE
+Angola,179,121608.9919,TRUE
+Angola,180,2241,FALSE
+Angola,203,26179.47154,TRUE
+Angola,205,158255.8483,TRUE
+Angola,208,84004.18102,TRUE
+Angola,219,80605.62094,TRUE
+Angola,221,53059.48552,TRUE
+Angola,229,16244.65912,TRUE
+Angola,231,60255.26389,TRUE
+Angola,235,58913,FALSE
+Angola,254,15477,FALSE
+Angola,84,19145,FALSE
+Angola,267,2608,FALSE
+Angola,282,423220.8453,TRUE
+Angola,286,390116,FALSE
+Angola,289,7024,FALSE
+Angola,316,72255.87156,TRUE
+Angola,317,188762.6372,TRUE
+Angola,318,7269,FALSE
+Angola,18,4364,FALSE
+Angola,19,77366.60983,TRUE
+Angola,33,30270.38924,TRUE
+Angola,40,28129,FALSE
+Angola,49,247408.5214,TRUE
+Angola,54,175365.1249,TRUE
+Angola,58,74040.89691,TRUE
+Angola,59,22326.21725,TRUE
+Angola,63,234336.5313,TRUE
+Angola,90,194487.8189,TRUE
+Angola,94,61002.28577,TRUE
+Angola,101,138512.4356,TRUE
+Angola,112,122104.9439,TRUE
+Angola,138,17125.18189,TRUE
+Angola,152,119704.6269,TRUE
+Angola,154,96782.90416,TRUE
+Angola,158,96473.15601,TRUE
+Angola,200,22918.25267,TRUE
+Angola,202,85300.04797,TRUE
+Angola,206,21892,FALSE
+Angola,218,52990.31222,TRUE
+Angola,238,116960.1876,TRUE
+Angola,243,112174.5654,TRUE
+Angola,259,55616.6005,TRUE
+Angola,276,6175,FALSE
+Angola,279,177754.1672,TRUE
+Angola,298,120463.1286,TRUE
+Angola,305,10236,FALSE
+Angola,306,27049,FALSE
+Angola,11,178064.2799,TRUE
+Angola,16,293489,FALSE
+Angola,48,27222.34375,TRUE
+Angola,60,22383.25858,TRUE
+Angola,63,11715.28525,TRUE
+Angola,121,115777.4722,TRUE
+Angola,128,7123,FALSE
+Angola,156,10200.29705,TRUE
+Angola,217,21196.4891,TRUE
+Angola,248,14225.32829,TRUE
+Angola,270,2329,FALSE
+Angola,52,108518,FALSE
+Angola,74,1458,FALSE
+Angola,75,47178.96176,TRUE
+Angola,80,49992.57574,TRUE
+Angola,301,113987.8459,TRUE
+Angola,319,89190.44102,TRUE
+Angola,51,7286,FALSE
+Angola,53,2549,FALSE
+Angola,77,3013,FALSE
+Angola,213,120583,FALSE
+Angola,228,127221,FALSE
+Angola,269,10780,FALSE
+Angola,296,98432,FALSE
+Angola,175,70802.39066,TRUE
+Angola,12,36715.19395,TRUE
+Angola,13,74728.86082,TRUE
+Angola,108,12577.92841,TRUE
+Angola,165,14797.07017,TRUE
+Angola,215,105585.0293,TRUE
+Angola,261,8946.089355,TRUE
+Angola,281,136069.2843,TRUE
+Angola,302,27087.34387,TRUE
+Angola,310,36133,TRUE
+Angola,106,13595.99028,TRUE
+Angola,30,62885.73079,TRUE
+Angola,91,126485.3041,TRUE
+Angola,192,3780098.195,TRUE
+Angola,249,70032.42373,TRUE
+Angola,308,35296.76443,TRUE
+Angola,116,98484.54468,TRUE
+Angola,234,8162.890747,TRUE
+Angola,88,138218.959,TRUE
+Angola,227,9358.848173,TRUE
+Angola,8,21599.0332,TRUE
+Angola,115,186672.4488,TRUE
+Angola,146,28645.96233,TRUE
+Angola,257,14862.84549,TRUE
+Angola,39,10075.63454,TRUE
+Angola,61,218943.5096,TRUE
+Angola,76,100326.9844,TRUE
+Angola,268,27005.25,TRUE
+Angola,194,9390.783666,TRUE
+Angola,198,5299.135169,TRUE
+Angola,245,11957.75,TRUE
+Angola,86,15341.61704,TRUE
+Angola,247,27947.125,TRUE
+Angola,15,5922.875,TRUE
+Angola,135,5719.346191,TRUE
+Angola,65,4252.65625,TRUE
+Angola,70,8796.273438,TRUE
+Angola,314,4472.643433,TRUE
+Angola,133,6124.625,TRUE
+Angola,240,4373.4375,TRUE
+Angola,148,23186,TRUE
+Angola,31,5157,TRUE
+Antigua and Barbuda,4,20977.52128,TRUE
+Antigua and Barbuda,5,7484.490489,TRUE
+Antigua and Barbuda,7,111437.9893,TRUE
+Antigua and Barbuda,8,47030.54376,TRUE
+Antigua and Barbuda,17,33099.94094,TRUE
+Antigua and Barbuda,105,149702.6633,TRUE
+Antigua and Barbuda,120,115713.1489,TRUE
+Antigua and Barbuda,161,8730.264786,TRUE
+Antigua and Barbuda,169,15925,FALSE
+Antigua and Barbuda,179,109184,FALSE
+Antigua and Barbuda,180,7520.279265,TRUE
+Antigua and Barbuda,203,26179.47154,TRUE
+Antigua and Barbuda,205,79021,FALSE
+Antigua and Barbuda,208,84004.18102,TRUE
+Antigua and Barbuda,219,80605.62094,TRUE
+Antigua and Barbuda,221,53059.48552,TRUE
+Antigua and Barbuda,229,16244.65912,TRUE
+Antigua and Barbuda,231,60255.26389,TRUE
+Antigua and Barbuda,235,172280.9273,TRUE
+Antigua and Barbuda,254,26952.37295,TRUE
+Antigua and Barbuda,84,1683,FALSE
+Antigua and Barbuda,267,9372.487582,TRUE
+Antigua and Barbuda,282,423220.8453,TRUE
+Antigua and Barbuda,286,760050.6713,TRUE
+Antigua and Barbuda,289,9979.922823,TRUE
+Antigua and Barbuda,316,72255.87156,TRUE
+Antigua and Barbuda,317,188762.6372,TRUE
+Antigua and Barbuda,318,32261.2753,TRUE
+Antigua and Barbuda,18,11273.75269,TRUE
+Antigua and Barbuda,19,38141,FALSE
+Antigua and Barbuda,33,30270.38924,TRUE
+Antigua and Barbuda,40,40374,FALSE
+Antigua and Barbuda,49,34812,FALSE
+Antigua and Barbuda,54,175365.1249,TRUE
+Antigua and Barbuda,58,74040.89691,TRUE
+Antigua and Barbuda,59,22326.21725,TRUE
+Antigua and Barbuda,63,47446,FALSE
+Antigua and Barbuda,90,46090,FALSE
+Antigua and Barbuda,94,61002.28577,TRUE
+Antigua and Barbuda,101,64808,FALSE
+Antigua and Barbuda,112,122104.9439,TRUE
+Antigua and Barbuda,138,17125.18189,TRUE
+Antigua and Barbuda,152,119704.6269,TRUE
+Antigua and Barbuda,154,43889,FALSE
+Antigua and Barbuda,158,96473.15601,TRUE
+Antigua and Barbuda,200,22918.25267,TRUE
+Antigua and Barbuda,202,85300.04797,TRUE
+Antigua and Barbuda,206,183393.7134,TRUE
+Antigua and Barbuda,218,52990.31222,TRUE
+Antigua and Barbuda,238,95056,FALSE
+Antigua and Barbuda,243,112174.5654,TRUE
+Antigua and Barbuda,259,55616.6005,TRUE
+Antigua and Barbuda,276,10950.60863,TRUE
+Antigua and Barbuda,279,177754.1672,TRUE
+Antigua and Barbuda,298,120463.1286,TRUE
+Antigua and Barbuda,305,15590.0347,TRUE
+Antigua and Barbuda,306,97022,FALSE
+Antigua and Barbuda,11,178064.2799,TRUE
+Antigua and Barbuda,16,86358,FALSE
+Antigua and Barbuda,48,27222.34375,TRUE
+Antigua and Barbuda,60,22383.25858,TRUE
+Antigua and Barbuda,63,47446,FALSE
+Antigua and Barbuda,121,115777.4722,TRUE
+Antigua and Barbuda,128,9353.124815,TRUE
+Antigua and Barbuda,156,10200.29705,TRUE
+Antigua and Barbuda,217,21196.4891,TRUE
+Antigua and Barbuda,248,14225.32829,TRUE
+Antigua and Barbuda,270,9151.63574,TRUE
+Antigua and Barbuda,52,54164,FALSE
+Antigua and Barbuda,74,4541.36112,TRUE
+Antigua and Barbuda,75,47178.96176,TRUE
+Antigua and Barbuda,80,49992.57574,TRUE
+Antigua and Barbuda,301,38891,FALSE
+Antigua and Barbuda,319,33911,FALSE
+Antigua and Barbuda,51,26504.47085,TRUE
+Antigua and Barbuda,53,6581.96824,TRUE
+Antigua and Barbuda,77,5993.147024,TRUE
+Antigua and Barbuda,213,124295.9159,TRUE
+Antigua and Barbuda,228,119594,FALSE
+Antigua and Barbuda,269,15171.62496,TRUE
+Antigua and Barbuda,296,63598,FALSE
+Antigua and Barbuda,175,50067,FALSE
+Antigua and Barbuda,12,36715.19395,TRUE
+Antigua and Barbuda,13,74728.86082,TRUE
+Antigua and Barbuda,108,12577.92841,TRUE
+Antigua and Barbuda,165,14797.07017,TRUE
+Antigua and Barbuda,215,105585.0293,TRUE
+Antigua and Barbuda,261,8946.089355,TRUE
+Antigua and Barbuda,281,136069.2843,TRUE
+Antigua and Barbuda,302,27087.34387,TRUE
+Antigua and Barbuda,310,36133,TRUE
+Antigua and Barbuda,106,13595.99028,TRUE
+Antigua and Barbuda,30,62885.73079,TRUE
+Antigua and Barbuda,91,126485.3041,TRUE
+Antigua and Barbuda,192,3780098.195,TRUE
+Antigua and Barbuda,249,70032.42373,TRUE
+Antigua and Barbuda,308,35296.76443,TRUE
+Antigua and Barbuda,116,98484.54468,TRUE
+Antigua and Barbuda,234,8162.890747,TRUE
+Antigua and Barbuda,88,138218.959,TRUE
+Antigua and Barbuda,227,9358.848173,TRUE
+Antigua and Barbuda,8,21599.0332,TRUE
+Antigua and Barbuda,115,186672.4488,TRUE
+Antigua and Barbuda,146,28645.96233,TRUE
+Antigua and Barbuda,257,14862.84549,TRUE
+Antigua and Barbuda,39,10075.63454,TRUE
+Antigua and Barbuda,61,218943.5096,TRUE
+Antigua and Barbuda,76,100326.9844,TRUE
+Antigua and Barbuda,268,27005.25,TRUE
+Antigua and Barbuda,194,9390.783666,TRUE
+Antigua and Barbuda,198,5299.135169,TRUE
+Antigua and Barbuda,245,11957.75,TRUE
+Antigua and Barbuda,86,15341.61704,TRUE
+Antigua and Barbuda,247,27947.125,TRUE
+Antigua and Barbuda,15,5922.875,TRUE
+Antigua and Barbuda,135,5719.346191,TRUE
+Antigua and Barbuda,65,4252.65625,TRUE
+Antigua and Barbuda,70,8796.273438,TRUE
+Antigua and Barbuda,314,4472.643433,TRUE
+Antigua and Barbuda,133,6124.625,TRUE
+Antigua and Barbuda,240,4373.4375,TRUE
+Antigua and Barbuda,148,23186,TRUE
+Antigua and Barbuda,31,5157,TRUE
+Argentina,4,19107,FALSE
+Argentina,5,8478,FALSE
+Argentina,7,300590,FALSE
+Argentina,8,114822,FALSE
+Argentina,17,38018,FALSE
+Argentina,105,32503,FALSE
+Argentina,120,78520,FALSE
+Argentina,161,12777,FALSE
+Argentina,169,74427,FALSE
+Argentina,179,140010,FALSE
+Argentina,180,15536,FALSE
+Argentina,203,28268,FALSE
+Argentina,205,250000,FALSE
+Argentina,208,215887,FALSE
+Argentina,219,111857,FALSE
+Argentina,221,356216,FALSE
+Argentina,229,16244.65912,TRUE
+Argentina,231,104809,FALSE
+Argentina,235,292476,FALSE
+Argentina,254,67632,FALSE
+Argentina,84,17866,FALSE
+Argentina,267,9372.487582,TRUE
+Argentina,282,423220.8453,TRUE
+Argentina,286,662975,FALSE
+Argentina,289,21220,FALSE
+Argentina,316,24646,FALSE
+Argentina,317,138254,FALSE
+Argentina,318,32966,FALSE
+Argentina,18,10151,FALSE
+Argentina,19,42226,FALSE
+Argentina,33,89753,FALSE
+Argentina,40,180987.6885,TRUE
+Argentina,49,317895,FALSE
+Argentina,54,175365.1249,TRUE
+Argentina,58,42625,FALSE
+Argentina,59,22326.21725,TRUE
+Argentina,63,11252,FALSE
+Argentina,90,194487.8189,TRUE
+Argentina,94,61002.28577,TRUE
+Argentina,101,138512.4356,TRUE
+Argentina,112,94630,FALSE
+Argentina,138,12231,FALSE
+Argentina,152,119704.6269,TRUE
+Argentina,154,320331,FALSE
+Argentina,158,96473.15601,TRUE
+Argentina,200,24450,FALSE
+Argentina,202,85300.04797,TRUE
+Argentina,206,183393.7134,TRUE
+Argentina,218,20078,FALSE
+Argentina,238,155849,FALSE
+Argentina,243,84440,FALSE
+Argentina,259,19274,FALSE
+Argentina,276,30146,FALSE
+Argentina,279,177754.1672,TRUE
+Argentina,298,113917,FALSE
+Argentina,305,21379,FALSE
+Argentina,306,424667,FALSE
+Argentina,11,224919,FALSE
+Argentina,16,208632,FALSE
+Argentina,48,27222.34375,TRUE
+Argentina,60,10610,FALSE
+Argentina,63,11252,FALSE
+Argentina,121,235565,FALSE
+Argentina,128,29286,FALSE
+Argentina,156,14443,FALSE
+Argentina,217,11192,FALSE
+Argentina,248,19992,FALSE
+Argentina,270,44976,FALSE
+Argentina,52,100127,FALSE
+Argentina,74,4541.36112,TRUE
+Argentina,75,47178.96176,TRUE
+Argentina,80,49992.57574,TRUE
+Argentina,301,113987.8459,TRUE
+Argentina,319,89190.44102,TRUE
+Argentina,51,26504.47085,TRUE
+Argentina,53,6581.96824,TRUE
+Argentina,77,5993.147024,TRUE
+Argentina,213,124295.9159,TRUE
+Argentina,228,184315,FALSE
+Argentina,269,15171.62496,TRUE
+Argentina,296,145614,FALSE
+Argentina,175,79665,FALSE
+Argentina,12,39637,FALSE
+Argentina,13,67334,FALSE
+Argentina,108,8862,FALSE
+Argentina,165,14992,FALSE
+Argentina,215,127701,FALSE
+Argentina,261,6447,FALSE
+Argentina,281,123285,FALSE
+Argentina,302,23757,FALSE
+Argentina,310,24783,FALSE
+Argentina,106,13595.99028,TRUE
+Argentina,30,62885.73079,TRUE
+Argentina,91,126485.3041,TRUE
+Argentina,192,3780098.195,TRUE
+Argentina,249,70032.42373,TRUE
+Argentina,308,35296.76443,TRUE
+Argentina,116,98484.54468,TRUE
+Argentina,234,8162.890747,TRUE
+Argentina,88,138218.959,TRUE
+Argentina,227,9358.848173,TRUE
+Argentina,8,114822,FALSE
+Argentina,115,186672.4488,TRUE
+Argentina,146,28645.96233,TRUE
+Argentina,257,14862.84549,TRUE
+Argentina,39,10075.63454,TRUE
+Argentina,61,218943.5096,TRUE
+Argentina,76,100326.9844,TRUE
+Argentina,268,27005.25,TRUE
+Argentina,194,9390.783666,TRUE
+Argentina,198,5299.135169,TRUE
+Argentina,245,11957.75,TRUE
+Argentina,86,15341.61704,TRUE
+Argentina,247,27947.125,TRUE
+Argentina,15,5922.875,TRUE
+Argentina,135,5719.346191,TRUE
+Argentina,65,4252.65625,TRUE
+Argentina,70,8796.273438,TRUE
+Argentina,314,4472.643433,TRUE
+Argentina,133,6124.625,TRUE
+Argentina,240,4373.4375,TRUE
+Argentina,148,23186,TRUE
+Argentina,31,5157,TRUE
+Armenia,4,20977.52128,TRUE
+Armenia,5,7484.490489,TRUE
+Armenia,7,60687,FALSE
+Armenia,8,65108,FALSE
+Armenia,17,27633,FALSE
+Armenia,105,68618,FALSE
+Armenia,120,110130,FALSE
+Armenia,161,12687,FALSE
+Armenia,169,63909,FALSE
+Armenia,179,121608.9919,TRUE
+Armenia,180,7520.279265,TRUE
+Armenia,203,26179.47154,TRUE
+Armenia,205,263806,FALSE
+Armenia,208,84004.18102,TRUE
+Armenia,219,112953,FALSE
+Armenia,221,50246,FALSE
+Armenia,229,16244.65912,TRUE
+Armenia,231,67984,FALSE
+Armenia,235,210314,FALSE
+Armenia,254,26952.37295,TRUE
+Armenia,84,9355.713607,TRUE
+Armenia,267,9372.487582,TRUE
+Armenia,282,152600,FALSE
+Armenia,286,760050.6713,TRUE
+Armenia,289,9979.922823,TRUE
+Armenia,316,24790,FALSE
+Armenia,317,325134,FALSE
+Armenia,318,32427,FALSE
+Armenia,18,24279,FALSE
+Armenia,19,77366.60983,TRUE
+Armenia,33,30270.38924,TRUE
+Armenia,40,344736,FALSE
+Armenia,49,250807,FALSE
+Armenia,54,300890,FALSE
+Armenia,58,84329,FALSE
+Armenia,59,22326.21725,TRUE
+Armenia,63,234336.5313,TRUE
+Armenia,90,316203,FALSE
+Armenia,94,61002.28577,TRUE
+Armenia,101,138512.4356,TRUE
+Armenia,112,135434,FALSE
+Armenia,138,17125.18189,TRUE
+Armenia,152,119704.6269,TRUE
+Armenia,154,96782.90416,TRUE
+Armenia,158,96473.15601,TRUE
+Armenia,200,27675,FALSE
+Armenia,202,85300.04797,TRUE
+Armenia,206,183393.7134,TRUE
+Armenia,218,73810,FALSE
+Armenia,238,116960.1876,TRUE
+Armenia,243,39003,FALSE
+Armenia,259,29000,FALSE
+Armenia,276,10950.60863,TRUE
+Armenia,279,177754.1672,TRUE
+Armenia,298,120463.1286,TRUE
+Armenia,305,24397,FALSE
+Armenia,306,390747,FALSE
+Armenia,11,178064.2799,TRUE
+Armenia,16,74389.59543,TRUE
+Armenia,48,27222.34375,TRUE
+Armenia,60,22383.25858,TRUE
+Armenia,63,11715.28525,TRUE
+Armenia,121,115777.4722,TRUE
+Armenia,128,9353.124815,TRUE
+Armenia,156,20000,FALSE
+Armenia,217,20938,FALSE
+Armenia,248,14225.32829,TRUE
+Armenia,270,9151.63574,TRUE
+Armenia,52,72720.10141,TRUE
+Armenia,74,4541.36112,TRUE
+Armenia,75,47178.96176,TRUE
+Armenia,80,49992.57574,TRUE
+Armenia,301,113987.8459,TRUE
+Armenia,319,89190.44102,TRUE
+Armenia,51,26504.47085,TRUE
+Armenia,53,6581.96824,TRUE
+Armenia,77,5993.147024,TRUE
+Armenia,213,124295.9159,TRUE
+Armenia,228,133880.2683,TRUE
+Armenia,269,15171.62496,TRUE
+Armenia,296,43692.55808,TRUE
+Armenia,175,70802.39066,TRUE
+Armenia,12,36715.19395,TRUE
+Armenia,13,74728.86082,TRUE
+Armenia,108,12577.92841,TRUE
+Armenia,165,14797.07017,TRUE
+Armenia,215,105585.0293,TRUE
+Armenia,261,8946.089355,TRUE
+Armenia,281,136069.2843,TRUE
+Armenia,302,27087.34387,TRUE
+Armenia,310,36133,TRUE
+Armenia,106,22278,FALSE
+Armenia,30,62885.73079,TRUE
+Armenia,91,126485.3041,TRUE
+Armenia,192,3780098.195,TRUE
+Armenia,249,70032.42373,TRUE
+Armenia,308,35296.76443,TRUE
+Armenia,116,98484.54468,TRUE
+Armenia,234,8162.890747,TRUE
+Armenia,88,138218.959,TRUE
+Armenia,227,9358.848173,TRUE
+Armenia,8,65108,FALSE
+Armenia,115,186672.4488,TRUE
+Armenia,146,28645.96233,TRUE
+Armenia,257,14862.84549,TRUE
+Armenia,39,10075.63454,TRUE
+Armenia,61,218943.5096,TRUE
+Armenia,76,100326.9844,TRUE
+Armenia,268,27005.25,TRUE
+Armenia,194,9390.783666,TRUE
+Armenia,198,5299.135169,TRUE
+Armenia,245,11957.75,TRUE
+Armenia,86,15341.61704,TRUE
+Armenia,247,27947.125,TRUE
+Armenia,15,5922.875,TRUE
+Armenia,135,5719.346191,TRUE
+Armenia,65,4252.65625,TRUE
+Armenia,70,8796.273438,TRUE
+Armenia,314,4472.643433,TRUE
+Armenia,133,6124.625,TRUE
+Armenia,240,4373.4375,TRUE
+Armenia,148,23186,TRUE
+Armenia,31,5157,TRUE
+Australia,4,35476,FALSE
+Australia,5,13483,FALSE
+Australia,7,160472,FALSE
+Australia,8,9937,FALSE
+Australia,17,21892,FALSE
+Australia,105,9187,FALSE
+Australia,120,130103,FALSE
+Australia,161,10000,FALSE
+Australia,169,75080,FALSE
+Australia,179,388982,FALSE
+Australia,180,10173,FALSE
+Australia,203,22928,FALSE
+Australia,205,562029,FALSE
+Australia,208,193766,FALSE
+Australia,219,71338,FALSE
+Australia,221,182979,FALSE
+Australia,229,10185,FALSE
+Australia,231,68042,FALSE
+Australia,235,404096,FALSE
+Australia,254,102889,FALSE
+Australia,84,54157,FALSE
+Australia,267,9372.487582,TRUE
+Australia,282,423220.8453,TRUE
+Australia,286,769291,FALSE
+Australia,289,10870,FALSE
+Australia,316,3566,FALSE
+Australia,317,447287,FALSE
+Australia,318,19743,FALSE
+Australia,18,9972,FALSE
+Australia,19,52393,FALSE
+Australia,33,12085,FALSE
+Australia,40,373453,FALSE
+Australia,49,571234,FALSE
+Australia,54,125605,FALSE
+Australia,58,64283,FALSE
+Australia,59,22326.21725,TRUE
+Australia,63,206935,FALSE
+Australia,90,297266,FALSE
+Australia,94,61002.28577,TRUE
+Australia,101,138512.4356,TRUE
+Australia,112,122104.9439,TRUE
+Australia,138,23459,FALSE
+Australia,152,119704.6269,TRUE
+Australia,154,228423,FALSE
+Australia,158,161194,FALSE
+Australia,200,15821,FALSE
+Australia,202,85300.04797,TRUE
+Australia,206,183393.7134,TRUE
+Australia,218,56749,FALSE
+Australia,238,185623,FALSE
+Australia,243,112174.5654,TRUE
+Australia,259,5967,FALSE
+Australia,276,21422,FALSE
+Australia,279,58972,FALSE
+Australia,298,231632,FALSE
+Australia,305,27522,FALSE
+Australia,306,746164,FALSE
+Australia,11,178064.2799,TRUE
+Australia,16,213244,FALSE
+Australia,48,27222.34375,TRUE
+Australia,60,12910,FALSE
+Australia,63,206935,FALSE
+Australia,121,96716,FALSE
+Australia,128,28250,FALSE
+Australia,156,8075,FALSE
+Australia,217,11473,FALSE
+Australia,248,12490,FALSE
+Australia,270,34399,FALSE
+Australia,52,72720.10141,TRUE
+Australia,74,4541.36112,TRUE
+Australia,75,47178.96176,TRUE
+Australia,80,108797,FALSE
+Australia,301,113987.8459,TRUE
+Australia,319,89190.44102,TRUE
+Australia,51,26504.47085,TRUE
+Australia,53,6581.96824,TRUE
+Australia,77,5993.147024,TRUE
+Australia,213,124295.9159,TRUE
+Australia,228,446128,FALSE
+Australia,269,15171.62496,TRUE
+Australia,296,348062,FALSE
+Australia,175,45265,FALSE
+Australia,12,49548,FALSE
+Australia,13,47737,FALSE
+Australia,108,12577.92841,TRUE
+Australia,165,12207,FALSE
+Australia,215,205431,FALSE
+Australia,261,5849,FALSE
+Australia,281,199703,FALSE
+Australia,302,27087.34387,TRUE
+Australia,310,36133,TRUE
+Australia,106,13595.99028,TRUE
+Australia,30,38026,FALSE
+Australia,91,47876,FALSE
+Australia,192,3499097,FALSE
+Australia,249,24442,FALSE
+Australia,308,16249,FALSE
+Australia,116,98484.54468,TRUE
+Australia,234,8162.890747,TRUE
+Australia,88,138218.959,TRUE
+Australia,227,9358.848173,TRUE
+Australia,8,9937,FALSE
+Australia,115,186672.4488,TRUE
+Australia,146,28645.96233,TRUE
+Australia,257,14862.84549,TRUE
+Australia,39,10075.63454,TRUE
+Australia,61,218943.5096,TRUE
+Australia,76,100326.9844,TRUE
+Australia,268,27005.25,TRUE
+Australia,194,9390.783666,TRUE
+Australia,198,5299.135169,TRUE
+Australia,245,11957.75,TRUE
+Australia,86,15341.61704,TRUE
+Australia,247,27947.125,TRUE
+Australia,15,5922.875,TRUE
+Australia,135,5719.346191,TRUE
+Australia,65,4252.65625,TRUE
+Australia,70,8796.273438,TRUE
+Australia,314,4472.643433,TRUE
+Australia,133,6124.625,TRUE
+Australia,240,4373.4375,TRUE
+Australia,148,23186,TRUE
+Australia,31,5157,TRUE
+Austria,4,20977.52128,TRUE
+Austria,5,7484.490489,TRUE
+Austria,7,111437.9893,TRUE
+Austria,8,66702,FALSE
+Austria,17,61221,FALSE
+Austria,105,149702.6633,TRUE
+Austria,120,56003,FALSE
+Austria,161,13455,FALSE
+Austria,169,111629,FALSE
+Austria,179,121608.9919,TRUE
+Austria,180,38825,FALSE
+Austria,203,26179.47154,TRUE
+Austria,205,465013,FALSE
+Austria,208,84004.18102,TRUE
+Austria,219,76114,FALSE
+Austria,221,53059.48552,TRUE
+Austria,229,16244.65912,TRUE
+Austria,231,166514,FALSE
+Austria,235,361557,FALSE
+Austria,254,26952.37295,TRUE
+Austria,84,9355.713607,TRUE
+Austria,267,9372.487582,TRUE
+Austria,282,812569,FALSE
+Austria,286,760050.6713,TRUE
+Austria,289,32941,FALSE
+Austria,316,72255.87156,TRUE
+Austria,317,373654,FALSE
+Austria,318,62534,FALSE
+Austria,18,11273.75269,TRUE
+Austria,19,113561,FALSE
+Austria,33,25588,FALSE
+Austria,40,498127,FALSE
+Austria,49,542755,FALSE
+Austria,54,210677,FALSE
+Austria,58,34600,FALSE
+Austria,59,22326.21725,TRUE
+Austria,63,866875,FALSE
+Austria,90,1270938,FALSE
+Austria,94,61002.28577,TRUE
+Austria,101,1233338,FALSE
+Austria,112,54589,FALSE
+Austria,138,19662,FALSE
+Austria,152,374227,FALSE
+Austria,154,96782.90416,TRUE
+Austria,158,291887,FALSE
+Austria,200,42124,FALSE
+Austria,202,85300.04797,TRUE
+Austria,206,183393.7134,TRUE
+Austria,218,45086,FALSE
+Austria,238,336619,FALSE
+Austria,243,112174.5654,TRUE
+Austria,259,50488,FALSE
+Austria,276,30648,FALSE
+Austria,279,225790,FALSE
+Austria,298,120463.1286,TRUE
+Austria,305,16101,FALSE
+Austria,306,3100334,FALSE
+Austria,11,178064.2799,TRUE
+Austria,16,74389.59543,TRUE
+Austria,48,27222.34375,TRUE
+Austria,60,22383.25858,TRUE
+Austria,63,866875,FALSE
+Austria,121,115777.4722,TRUE
+Austria,128,9353.124815,TRUE
+Austria,156,10200.29705,TRUE
+Austria,217,24771,FALSE
+Austria,248,35775,FALSE
+Austria,270,73403,FALSE
+Austria,52,72720.10141,TRUE
+Austria,74,4541.36112,TRUE
+Austria,75,47178.96176,TRUE
+Austria,80,170730,FALSE
+Austria,301,113987.8459,TRUE
+Austria,319,89190.44102,TRUE
+Austria,51,26504.47085,TRUE
+Austria,53,6581.96824,TRUE
+Austria,77,5993.147024,TRUE
+Austria,213,124295.9159,TRUE
+Austria,228,133880.2683,TRUE
+Austria,269,15171.62496,TRUE
+Austria,296,43692.55808,TRUE
+Austria,175,70802.39066,TRUE
+Austria,12,31888,FALSE
+Austria,13,74728.86082,TRUE
+Austria,108,0,FALSE
+Austria,165,17139,FALSE
+Austria,215,105585.0293,TRUE
+Austria,261,8946.089355,TRUE
+Austria,281,86189,FALSE
+Austria,302,27087.34387,TRUE
+Austria,310,36133,TRUE
+Austria,106,13595.99028,TRUE
+Austria,30,62885.73079,TRUE
+Austria,91,77033,FALSE
+Austria,192,3780098.195,TRUE
+Austria,249,37495,FALSE
+Austria,308,58769,FALSE
+Austria,116,50080,FALSE
+Austria,234,8368,FALSE
+Austria,88,138218.959,TRUE
+Austria,227,9358.848173,TRUE
+Austria,8,66702,FALSE
+Austria,115,186672.4488,TRUE
+Austria,146,28645.96233,TRUE
+Austria,257,14862.84549,TRUE
+Austria,39,10075.63454,TRUE
+Austria,61,218943.5096,TRUE
+Austria,76,100326.9844,TRUE
+Austria,268,27005.25,TRUE
+Austria,194,9390.783666,TRUE
+Austria,198,5299.135169,TRUE
+Austria,245,11957.75,TRUE
+Austria,86,15341.61704,TRUE
+Austria,247,27947.125,TRUE
+Austria,15,5922.875,TRUE
+Austria,135,5719.346191,TRUE
+Austria,65,4252.65625,TRUE
+Austria,70,8796.273438,TRUE
+Austria,314,4472.643433,TRUE
+Austria,133,6124.625,TRUE
+Austria,240,4373.4375,TRUE
+Austria,148,23186,TRUE
+Austria,31,5157,TRUE
+Azerbaijan,4,24174,FALSE
+Azerbaijan,5,7484.490489,TRUE
+Azerbaijan,7,89929,FALSE
+Azerbaijan,8,85231,FALSE
+Azerbaijan,17,26157,FALSE
+Azerbaijan,105,48461,FALSE
+Azerbaijan,120,97913,FALSE
+Azerbaijan,161,8730.264786,TRUE
+Azerbaijan,169,62485,FALSE
+Azerbaijan,179,150090,FALSE
+Azerbaijan,180,19159,FALSE
+Azerbaijan,203,5325,FALSE
+Azerbaijan,205,149163,FALSE
+Azerbaijan,208,138210,FALSE
+Azerbaijan,219,54967,FALSE
+Azerbaijan,221,81619,FALSE
+Azerbaijan,229,21810,FALSE
+Azerbaijan,231,66011,FALSE
+Azerbaijan,235,143714,FALSE
+Azerbaijan,254,21538,FALSE
+Azerbaijan,84,17610,FALSE
+Azerbaijan,267,9372.487582,TRUE
+Azerbaijan,282,442577,FALSE
+Azerbaijan,286,760050.6713,TRUE
+Azerbaijan,289,20151,FALSE
+Azerbaijan,316,30419,FALSE
+Azerbaijan,317,186688,FALSE
+Azerbaijan,318,30475,FALSE
+Azerbaijan,18,24036,FALSE
+Azerbaijan,19,22946,FALSE
+Azerbaijan,33,20784,FALSE
+Azerbaijan,40,179541,FALSE
+Azerbaijan,49,208808,FALSE
+Azerbaijan,54,175365.1249,TRUE
+Azerbaijan,58,53145,FALSE
+Azerbaijan,59,20464,FALSE
+Azerbaijan,63,118171,FALSE
+Azerbaijan,90,168361,FALSE
+Azerbaijan,94,61002.28577,TRUE
+Azerbaijan,101,163746,FALSE
+Azerbaijan,112,91481,FALSE
+Azerbaijan,138,17125.18189,TRUE
+Azerbaijan,152,119704.6269,TRUE
+Azerbaijan,154,108142,FALSE
+Azerbaijan,158,96473.15601,TRUE
+Azerbaijan,200,25617,FALSE
+Azerbaijan,202,85300.04797,TRUE
+Azerbaijan,206,154159,FALSE
+Azerbaijan,218,71664,FALSE
+Azerbaijan,238,172837,FALSE
+Azerbaijan,243,78896,FALSE
+Azerbaijan,259,25091,FALSE
+Azerbaijan,276,6067,FALSE
+Azerbaijan,279,177754.1672,TRUE
+Azerbaijan,298,254232,FALSE
+Azerbaijan,305,15197,FALSE
+Azerbaijan,306,211105,FALSE
+Azerbaijan,11,178064.2799,TRUE
+Azerbaijan,16,74389.59543,TRUE
+Azerbaijan,48,27222.34375,TRUE
+Azerbaijan,60,22383.25858,TRUE
+Azerbaijan,63,118171,FALSE
+Azerbaijan,121,115777.4722,TRUE
+Azerbaijan,128,9353.124815,TRUE
+Azerbaijan,156,15098,FALSE
+Azerbaijan,217,17109,FALSE
+Azerbaijan,248,14225.32829,TRUE
+Azerbaijan,270,20250,FALSE
+Azerbaijan,52,72720.10141,TRUE
+Azerbaijan,74,4541.36112,TRUE
+Azerbaijan,75,47178.96176,TRUE
+Azerbaijan,80,49992.57574,TRUE
+Azerbaijan,301,113987.8459,TRUE
+Azerbaijan,319,89190.44102,TRUE
+Azerbaijan,51,26504.47085,TRUE
+Azerbaijan,53,6581.96824,TRUE
+Azerbaijan,77,5993.147024,TRUE
+Azerbaijan,213,124295.9159,TRUE
+Azerbaijan,228,133880.2683,TRUE
+Azerbaijan,269,15171.62496,TRUE
+Azerbaijan,296,43692.55808,TRUE
+Azerbaijan,175,70802.39066,TRUE
+Azerbaijan,12,36715.19395,TRUE
+Azerbaijan,13,74728.86082,TRUE
+Azerbaijan,108,12577.92841,TRUE
+Azerbaijan,165,14797.07017,TRUE
+Azerbaijan,215,105585.0293,TRUE
+Azerbaijan,261,8946.089355,TRUE
+Azerbaijan,281,136069.2843,TRUE
+Azerbaijan,302,15301,FALSE
+Azerbaijan,310,36133,TRUE
+Azerbaijan,106,10666,FALSE
+Azerbaijan,30,62885.73079,TRUE
+Azerbaijan,91,42287,FALSE
+Azerbaijan,192,3780098.195,TRUE
+Azerbaijan,249,47472,FALSE
+Azerbaijan,308,35296.76443,TRUE
+Azerbaijan,116,98484.54468,TRUE
+Azerbaijan,234,8162.890747,TRUE
+Azerbaijan,88,44597,FALSE
+Azerbaijan,227,9358.848173,TRUE
+Azerbaijan,8,85231,FALSE
+Azerbaijan,115,186672.4488,TRUE
+Azerbaijan,146,28645.96233,TRUE
+Azerbaijan,257,14862.84549,TRUE
+Azerbaijan,39,10075.63454,TRUE
+Azerbaijan,61,218943.5096,TRUE
+Azerbaijan,76,100326.9844,TRUE
+Azerbaijan,268,27005.25,TRUE
+Azerbaijan,194,9390.783666,TRUE
+Azerbaijan,198,5299.135169,TRUE
+Azerbaijan,245,11957.75,TRUE
+Azerbaijan,86,15341.61704,TRUE
+Azerbaijan,247,27947.125,TRUE
+Azerbaijan,15,5922.875,TRUE
+Azerbaijan,135,5719.346191,TRUE
+Azerbaijan,65,4252.65625,TRUE
+Azerbaijan,70,8796.273438,TRUE
+Azerbaijan,314,4472.643433,TRUE
+Azerbaijan,133,6124.625,TRUE
+Azerbaijan,240,4373.4375,TRUE
+Azerbaijan,148,23186,TRUE
+Azerbaijan,31,5157,TRUE
+Bahamas,4,20977.52128,TRUE
+Bahamas,5,7484.490489,TRUE
+Bahamas,7,111437.9893,TRUE
+Bahamas,8,47030.54376,TRUE
+Bahamas,17,33099.94094,TRUE
+Bahamas,105,149702.6633,TRUE
+Bahamas,120,115713.1489,TRUE
+Bahamas,161,8730.264786,TRUE
+Bahamas,169,93386,FALSE
+Bahamas,179,121608.9919,TRUE
+Bahamas,180,7520.279265,TRUE
+Bahamas,203,26179.47154,TRUE
+Bahamas,205,90303,FALSE
+Bahamas,208,227851,FALSE
+Bahamas,219,80605.62094,TRUE
+Bahamas,221,53059.48552,TRUE
+Bahamas,229,16244.65912,TRUE
+Bahamas,231,60255.26389,TRUE
+Bahamas,235,172280.9273,TRUE
+Bahamas,254,26952.37295,TRUE
+Bahamas,84,9355.713607,TRUE
+Bahamas,267,9372.487582,TRUE
+Bahamas,282,423220.8453,TRUE
+Bahamas,286,249535,FALSE
+Bahamas,289,9979.922823,TRUE
+Bahamas,316,72255.87156,TRUE
+Bahamas,317,188762.6372,TRUE
+Bahamas,318,32261.2753,TRUE
+Bahamas,18,11273.75269,TRUE
+Bahamas,19,77366.60983,TRUE
+Bahamas,33,30270.38924,TRUE
+Bahamas,40,269185,FALSE
+Bahamas,49,247408.5214,TRUE
+Bahamas,54,175365.1249,TRUE
+Bahamas,58,74040.89691,TRUE
+Bahamas,59,22326.21725,TRUE
+Bahamas,63,234336.5313,TRUE
+Bahamas,90,194487.8189,TRUE
+Bahamas,94,61002.28577,TRUE
+Bahamas,101,138512.4356,TRUE
+Bahamas,112,122104.9439,TRUE
+Bahamas,138,17125.18189,TRUE
+Bahamas,152,119704.6269,TRUE
+Bahamas,154,93172,FALSE
+Bahamas,158,136858,FALSE
+Bahamas,200,22918.25267,TRUE
+Bahamas,202,252371,FALSE
+Bahamas,206,78300,FALSE
+Bahamas,218,52990.31222,TRUE
+Bahamas,238,196033,FALSE
+Bahamas,243,112174.5654,TRUE
+Bahamas,259,55616.6005,TRUE
+Bahamas,276,10950.60863,TRUE
+Bahamas,279,177754.1672,TRUE
+Bahamas,298,182238,FALSE
+Bahamas,305,15590.0347,TRUE
+Bahamas,306,212439,FALSE
+Bahamas,11,178064.2799,TRUE
+Bahamas,16,160984,FALSE
+Bahamas,48,27222.34375,TRUE
+Bahamas,60,22383.25858,TRUE
+Bahamas,63,11715.28525,TRUE
+Bahamas,121,445067,FALSE
+Bahamas,128,9353.124815,TRUE
+Bahamas,156,10200.29705,TRUE
+Bahamas,217,21196.4891,TRUE
+Bahamas,248,14225.32829,TRUE
+Bahamas,270,9151.63574,TRUE
+Bahamas,52,236821,FALSE
+Bahamas,74,4541.36112,TRUE
+Bahamas,75,79139,FALSE
+Bahamas,80,49992.57574,TRUE
+Bahamas,301,113987.8459,TRUE
+Bahamas,319,89190.44102,TRUE
+Bahamas,51,26504.47085,TRUE
+Bahamas,53,6581.96824,TRUE
+Bahamas,77,5993.147024,TRUE
+Bahamas,213,124295.9159,TRUE
+Bahamas,228,133880.2683,TRUE
+Bahamas,269,15171.62496,TRUE
+Bahamas,296,35248,FALSE
+Bahamas,175,178945,FALSE
+Bahamas,12,36715.19395,TRUE
+Bahamas,13,123550,FALSE
+Bahamas,108,12577.92841,TRUE
+Bahamas,165,14797.07017,TRUE
+Bahamas,215,159299,FALSE
+Bahamas,261,8946.089355,TRUE
+Bahamas,281,136069.2843,TRUE
+Bahamas,302,27087.34387,TRUE
+Bahamas,310,36133,TRUE
+Bahamas,106,13595.99028,TRUE
+Bahamas,30,62885.73079,TRUE
+Bahamas,91,126485.3041,TRUE
+Bahamas,192,3780098.195,TRUE
+Bahamas,249,70032.42373,TRUE
+Bahamas,308,35296.76443,TRUE
+Bahamas,116,98484.54468,TRUE
+Bahamas,234,8162.890747,TRUE
+Bahamas,88,138218.959,TRUE
+Bahamas,227,13978,FALSE
+Bahamas,8,21599.0332,TRUE
+Bahamas,115,186672.4488,TRUE
+Bahamas,146,28645.96233,TRUE
+Bahamas,257,14862.84549,TRUE
+Bahamas,39,10075.63454,TRUE
+Bahamas,61,218943.5096,TRUE
+Bahamas,76,100326.9844,TRUE
+Bahamas,268,27005.25,TRUE
+Bahamas,194,9390.783666,TRUE
+Bahamas,198,5299.135169,TRUE
+Bahamas,245,11957.75,TRUE
+Bahamas,86,15341.61704,TRUE
+Bahamas,247,27947.125,TRUE
+Bahamas,15,5922.875,TRUE
+Bahamas,135,5719.346191,TRUE
+Bahamas,65,4252.65625,TRUE
+Bahamas,70,8796.273438,TRUE
+Bahamas,314,4472.643433,TRUE
+Bahamas,133,6124.625,TRUE
+Bahamas,240,4373.4375,TRUE
+Bahamas,148,23186,TRUE
+Bahamas,31,5157,TRUE
+Bahrain,4,20977.52128,TRUE
+Bahrain,5,7484.490489,TRUE
+Bahrain,7,111437.9893,TRUE
+Bahrain,8,47030.54376,TRUE
+Bahrain,17,33099.94094,TRUE
+Bahrain,105,149702.6633,TRUE
+Bahrain,120,28617,FALSE
+Bahrain,161,8730.264786,TRUE
+Bahrain,169,16777.49735,TRUE
+Bahrain,179,760686,FALSE
+Bahrain,180,7520.279265,TRUE
+Bahrain,203,26179.47154,TRUE
+Bahrain,205,213100,FALSE
+Bahrain,208,84004.18102,TRUE
+Bahrain,219,80605.62094,TRUE
+Bahrain,221,53059.48552,TRUE
+Bahrain,229,16244.65912,TRUE
+Bahrain,231,60255.26389,TRUE
+Bahrain,235,184840,FALSE
+Bahrain,254,26952.37295,TRUE
+Bahrain,84,9355.713607,TRUE
+Bahrain,267,9372.487582,TRUE
+Bahrain,282,423220.8453,TRUE
+Bahrain,286,760050.6713,TRUE
+Bahrain,289,9979.922823,TRUE
+Bahrain,316,72255.87156,TRUE
+Bahrain,317,561310,FALSE
+Bahrain,318,32261.2753,TRUE
+Bahrain,18,11273.75269,TRUE
+Bahrain,19,77366.60983,TRUE
+Bahrain,33,30270.38924,TRUE
+Bahrain,40,353689,FALSE
+Bahrain,49,354889,FALSE
+Bahrain,54,421534,FALSE
+Bahrain,58,74040.89691,TRUE
+Bahrain,59,22326.21725,TRUE
+Bahrain,63,61654,FALSE
+Bahrain,90,971868,FALSE
+Bahrain,94,26662,FALSE
+Bahrain,101,660315,FALSE
+Bahrain,112,122104.9439,TRUE
+Bahrain,138,17125.18189,TRUE
+Bahrain,152,119704.6269,TRUE
+Bahrain,154,108901,FALSE
+Bahrain,158,300411,FALSE
+Bahrain,200,22918.25267,TRUE
+Bahrain,202,257187,FALSE
+Bahrain,206,183393.7134,TRUE
+Bahrain,218,52990.31222,TRUE
+Bahrain,238,941896,FALSE
+Bahrain,243,112174.5654,TRUE
+Bahrain,259,55616.6005,TRUE
+Bahrain,276,10950.60863,TRUE
+Bahrain,279,177754.1672,TRUE
+Bahrain,298,120463.1286,TRUE
+Bahrain,305,15590.0347,TRUE
+Bahrain,306,686134,FALSE
+Bahrain,11,178064.2799,TRUE
+Bahrain,16,101424,FALSE
+Bahrain,48,27222.34375,TRUE
+Bahrain,60,22383.25858,TRUE
+Bahrain,63,61654,FALSE
+Bahrain,121,115777.4722,TRUE
+Bahrain,128,9353.124815,TRUE
+Bahrain,156,10200.29705,TRUE
+Bahrain,217,21196.4891,TRUE
+Bahrain,248,14225.32829,TRUE
+Bahrain,270,9151.63574,TRUE
+Bahrain,52,72720.10141,TRUE
+Bahrain,74,4541.36112,TRUE
+Bahrain,75,47178.96176,TRUE
+Bahrain,80,49992.57574,TRUE
+Bahrain,301,113987.8459,TRUE
+Bahrain,319,89190.44102,TRUE
+Bahrain,51,26504.47085,TRUE
+Bahrain,53,6581.96824,TRUE
+Bahrain,77,5993.147024,TRUE
+Bahrain,213,124295.9159,TRUE
+Bahrain,228,133880.2683,TRUE
+Bahrain,269,15171.62496,TRUE
+Bahrain,296,43692.55808,TRUE
+Bahrain,175,70802.39066,TRUE
+Bahrain,12,36715.19395,TRUE
+Bahrain,13,74728.86082,TRUE
+Bahrain,108,12577.92841,TRUE
+Bahrain,165,14797.07017,TRUE
+Bahrain,215,105585.0293,TRUE
+Bahrain,261,8946.089355,TRUE
+Bahrain,281,136069.2843,TRUE
+Bahrain,302,27087.34387,TRUE
+Bahrain,310,36133,TRUE
+Bahrain,106,13595.99028,TRUE
+Bahrain,30,62885.73079,TRUE
+Bahrain,91,126485.3041,TRUE
+Bahrain,192,3780098.195,TRUE
+Bahrain,249,70032.42373,TRUE
+Bahrain,308,35296.76443,TRUE
+Bahrain,116,98484.54468,TRUE
+Bahrain,234,8162.890747,TRUE
+Bahrain,88,138218.959,TRUE
+Bahrain,227,9358.848173,TRUE
+Bahrain,8,21599.0332,TRUE
+Bahrain,115,186672.4488,TRUE
+Bahrain,146,28645.96233,TRUE
+Bahrain,257,14862.84549,TRUE
+Bahrain,39,10075.63454,TRUE
+Bahrain,61,218943.5096,TRUE
+Bahrain,76,100326.9844,TRUE
+Bahrain,268,27005.25,TRUE
+Bahrain,194,9390.783666,TRUE
+Bahrain,198,5299.135169,TRUE
+Bahrain,245,11957.75,TRUE
+Bahrain,86,15341.61704,TRUE
+Bahrain,247,27947.125,TRUE
+Bahrain,15,5922.875,TRUE
+Bahrain,135,5719.346191,TRUE
+Bahrain,65,4252.65625,TRUE
+Bahrain,70,8796.273438,TRUE
+Bahrain,314,4472.643433,TRUE
+Bahrain,133,6124.625,TRUE
+Bahrain,240,4373.4375,TRUE
+Bahrain,148,23186,TRUE
+Bahrain,31,5157,TRUE
+Bangladesh,4,20977.52128,TRUE
+Bangladesh,5,7484.490489,TRUE
+Bangladesh,7,111437.9893,TRUE
+Bangladesh,8,5955,FALSE
+Bangladesh,17,8904,FALSE
+Bangladesh,105,149702.6633,TRUE
+Bangladesh,120,115713.1489,TRUE
+Bangladesh,161,6821,FALSE
+Bangladesh,169,73008,FALSE
+Bangladesh,179,225866,FALSE
+Bangladesh,180,3046,FALSE
+Bangladesh,203,26179.47154,TRUE
+Bangladesh,205,97770,FALSE
+Bangladesh,208,47832,FALSE
+Bangladesh,219,80605.62094,TRUE
+Bangladesh,221,53059.48552,TRUE
+Bangladesh,229,16244.65912,TRUE
+Bangladesh,231,60255.26389,TRUE
+Bangladesh,235,199162,FALSE
+Bangladesh,254,46188,FALSE
+Bangladesh,84,34481,FALSE
+Bangladesh,267,9157,FALSE
+Bangladesh,282,423220.8453,TRUE
+Bangladesh,286,427788,FALSE
+Bangladesh,289,9979.922823,TRUE
+Bangladesh,316,72255.87156,TRUE
+Bangladesh,317,188762.6372,TRUE
+Bangladesh,318,30296,FALSE
+Bangladesh,18,8452,FALSE
+Bangladesh,19,63666,FALSE
+Bangladesh,33,30270.38924,TRUE
+Bangladesh,40,164742,FALSE
+Bangladesh,49,247408.5214,TRUE
+Bangladesh,54,138888,FALSE
+Bangladesh,58,74040.89691,TRUE
+Bangladesh,59,22326.21725,TRUE
+Bangladesh,63,12774,FALSE
+Bangladesh,90,67526,FALSE
+Bangladesh,94,61002.28577,TRUE
+Bangladesh,101,138512.4356,TRUE
+Bangladesh,112,62829,FALSE
+Bangladesh,138,17125.18189,TRUE
+Bangladesh,152,119704.6269,TRUE
+Bangladesh,154,32272,FALSE
+Bangladesh,158,55436,FALSE
+Bangladesh,200,22918.25267,TRUE
+Bangladesh,202,85300.04797,TRUE
+Bangladesh,206,183393.7134,TRUE
+Bangladesh,218,52990.31222,TRUE
+Bangladesh,238,101602,FALSE
+Bangladesh,243,112174.5654,TRUE
+Bangladesh,259,55616.6005,TRUE
+Bangladesh,276,18319,FALSE
+Bangladesh,279,57963,FALSE
+Bangladesh,298,74147,FALSE
+Bangladesh,305,18856,FALSE
+Bangladesh,306,134636,FALSE
+Bangladesh,11,178064.2799,TRUE
+Bangladesh,16,168243,FALSE
+Bangladesh,48,27222.34375,TRUE
+Bangladesh,60,9402,FALSE
+Bangladesh,63,12774,FALSE
+Bangladesh,121,82062,FALSE
+Bangladesh,128,17428,FALSE
+Bangladesh,156,10240,FALSE
+Bangladesh,217,9693,FALSE
+Bangladesh,248,11358,FALSE
+Bangladesh,270,11841,FALSE
+Bangladesh,52,72720.10141,TRUE
+Bangladesh,74,4541.36112,TRUE
+Bangladesh,75,21492,FALSE
+Bangladesh,80,49992.57574,TRUE
+Bangladesh,301,113987.8459,TRUE
+Bangladesh,319,89190.44102,TRUE
+Bangladesh,51,26504.47085,TRUE
+Bangladesh,53,7099,FALSE
+Bangladesh,77,5993.147024,TRUE
+Bangladesh,213,124295.9159,TRUE
+Bangladesh,228,147999,FALSE
+Bangladesh,269,15171.62496,TRUE
+Bangladesh,296,104224,FALSE
+Bangladesh,175,75883,FALSE
+Bangladesh,12,36715.19395,TRUE
+Bangladesh,13,74728.86082,TRUE
+Bangladesh,108,12577.92841,TRUE
+Bangladesh,165,14797.07017,TRUE
+Bangladesh,215,59260,FALSE
+Bangladesh,261,8946.089355,TRUE
+Bangladesh,281,136069.2843,TRUE
+Bangladesh,302,10739,FALSE
+Bangladesh,310,36133,TRUE
+Bangladesh,106,13595.99028,TRUE
+Bangladesh,30,62885.73079,TRUE
+Bangladesh,91,126485.3041,TRUE
+Bangladesh,192,3780098.195,TRUE
+Bangladesh,249,70032.42373,TRUE
+Bangladesh,308,35296.76443,TRUE
+Bangladesh,116,98484.54468,TRUE
+Bangladesh,234,8162.890747,TRUE
+Bangladesh,88,138218.959,TRUE
+Bangladesh,227,13589,FALSE
+Bangladesh,8,5955,FALSE
+Bangladesh,115,81590,FALSE
+Bangladesh,146,19832,FALSE
+Bangladesh,257,1008,FALSE
+Bangladesh,39,10075.63454,TRUE
+Bangladesh,61,218943.5096,TRUE
+Bangladesh,76,100326.9844,TRUE
+Bangladesh,268,27005.25,TRUE
+Bangladesh,194,9390.783666,TRUE
+Bangladesh,198,5299.135169,TRUE
+Bangladesh,245,11957.75,TRUE
+Bangladesh,86,15341.61704,TRUE
+Bangladesh,247,27947.125,TRUE
+Bangladesh,15,5922.875,TRUE
+Bangladesh,135,5719.346191,TRUE
+Bangladesh,65,4252.65625,TRUE
+Bangladesh,70,8796.273438,TRUE
+Bangladesh,314,4472.643433,TRUE
+Bangladesh,133,6124.625,TRUE
+Bangladesh,240,4373.4375,TRUE
+Bangladesh,148,23186,TRUE
+Bangladesh,31,5157,TRUE
+Barbados,4,20977.52128,TRUE
+Barbados,5,7484.490489,TRUE
+Barbados,7,111437.9893,TRUE
+Barbados,8,47030.54376,TRUE
+Barbados,17,33099.94094,TRUE
+Barbados,105,149702.6633,TRUE
+Barbados,120,115713.1489,TRUE
+Barbados,161,8730.264786,TRUE
+Barbados,169,28489,FALSE
+Barbados,179,208716,FALSE
+Barbados,180,7520.279265,TRUE
+Barbados,203,26179.47154,TRUE
+Barbados,205,233383,FALSE
+Barbados,208,84004.18102,TRUE
+Barbados,219,80605.62094,TRUE
+Barbados,221,53059.48552,TRUE
+Barbados,229,16244.65912,TRUE
+Barbados,231,60255.26389,TRUE
+Barbados,235,172280.9273,TRUE
+Barbados,254,26952.37295,TRUE
+Barbados,84,9355.713607,TRUE
+Barbados,267,9372.487582,TRUE
+Barbados,282,423220.8453,TRUE
+Barbados,286,481068,FALSE
+Barbados,289,9979.922823,TRUE
+Barbados,316,72255.87156,TRUE
+Barbados,317,188762.6372,TRUE
+Barbados,318,32261.2753,TRUE
+Barbados,18,58222,FALSE
+Barbados,19,77366.60983,TRUE
+Barbados,33,30270.38924,TRUE
+Barbados,40,200570,FALSE
+Barbados,49,170423,FALSE
+Barbados,54,175365.1249,TRUE
+Barbados,58,74040.89691,TRUE
+Barbados,59,22326.21725,TRUE
+Barbados,63,140543,FALSE
+Barbados,90,239718,FALSE
+Barbados,94,61002.28577,TRUE
+Barbados,101,138512.4356,TRUE
+Barbados,112,122104.9439,TRUE
+Barbados,138,17125.18189,TRUE
+Barbados,152,119704.6269,TRUE
+Barbados,154,96782.90416,TRUE
+Barbados,158,166456,FALSE
+Barbados,200,22918.25267,TRUE
+Barbados,202,121172,FALSE
+Barbados,206,183393.7134,TRUE
+Barbados,218,52990.31222,TRUE
+Barbados,238,71952,FALSE
+Barbados,243,112174.5654,TRUE
+Barbados,259,55616.6005,TRUE
+Barbados,276,10950.60863,TRUE
+Barbados,279,177754.1672,TRUE
+Barbados,298,120463.1286,TRUE
+Barbados,305,15590.0347,TRUE
+Barbados,306,198527,FALSE
+Barbados,11,178064.2799,TRUE
+Barbados,16,55608,FALSE
+Barbados,48,27222.34375,TRUE
+Barbados,60,22383.25858,TRUE
+Barbados,63,140543,FALSE
+Barbados,121,115777.4722,TRUE
+Barbados,128,18440,FALSE
+Barbados,156,10200.29705,TRUE
+Barbados,217,21196.4891,TRUE
+Barbados,248,14225.32829,TRUE
+Barbados,270,9151.63574,TRUE
+Barbados,52,204104,FALSE
+Barbados,74,4541.36112,TRUE
+Barbados,75,41034,FALSE
+Barbados,80,34761,FALSE
+Barbados,301,35899,FALSE
+Barbados,319,110735,FALSE
+Barbados,51,26504.47085,TRUE
+Barbados,53,6581.96824,TRUE
+Barbados,77,5993.147024,TRUE
+Barbados,213,124295.9159,TRUE
+Barbados,228,133880.2683,TRUE
+Barbados,269,15171.62496,TRUE
+Barbados,296,225780,FALSE
+Barbados,175,70802.39066,TRUE
+Barbados,12,36715.19395,TRUE
+Barbados,13,46494,FALSE
+Barbados,108,12577.92841,TRUE
+Barbados,165,14797.07017,TRUE
+Barbados,215,105585.0293,TRUE
+Barbados,261,8946.089355,TRUE
+Barbados,281,136069.2843,TRUE
+Barbados,302,27087.34387,TRUE
+Barbados,310,36133,TRUE
+Barbados,106,13595.99028,TRUE
+Barbados,30,62885.73079,TRUE
+Barbados,91,126485.3041,TRUE
+Barbados,192,3780098.195,TRUE
+Barbados,249,70032.42373,TRUE
+Barbados,308,35296.76443,TRUE
+Barbados,116,98484.54468,TRUE
+Barbados,234,8162.890747,TRUE
+Barbados,88,138218.959,TRUE
+Barbados,227,9358.848173,TRUE
+Barbados,8,21599.0332,TRUE
+Barbados,115,186672.4488,TRUE
+Barbados,146,28645.96233,TRUE
+Barbados,257,14862.84549,TRUE
+Barbados,39,10075.63454,TRUE
+Barbados,61,218943.5096,TRUE
+Barbados,76,100326.9844,TRUE
+Barbados,268,27005.25,TRUE
+Barbados,194,9390.783666,TRUE
+Barbados,198,5299.135169,TRUE
+Barbados,245,11957.75,TRUE
+Barbados,86,15341.61704,TRUE
+Barbados,247,27947.125,TRUE
+Barbados,15,5922.875,TRUE
+Barbados,135,5719.346191,TRUE
+Barbados,65,4252.65625,TRUE
+Barbados,70,8796.273438,TRUE
+Barbados,314,4472.643433,TRUE
+Barbados,133,6124.625,TRUE
+Barbados,240,4373.4375,TRUE
+Barbados,148,23186,TRUE
+Barbados,31,5157,TRUE
+Belarus,4,20977.52128,TRUE
+Belarus,5,7484.490489,TRUE
+Belarus,7,96481,FALSE
+Belarus,8,47030.54376,TRUE
+Belarus,17,27787,FALSE
+Belarus,105,149702.6633,TRUE
+Belarus,120,41176,FALSE
+Belarus,161,2951,FALSE
+Belarus,169,59607,FALSE
+Belarus,179,121608.9919,TRUE
+Belarus,180,19821,FALSE
+Belarus,203,26179.47154,TRUE
+Belarus,205,202809,FALSE
+Belarus,208,84004.18102,TRUE
+Belarus,219,80605.62094,TRUE
+Belarus,221,53220,FALSE
+Belarus,229,16244.65912,TRUE
+Belarus,231,29011,FALSE
+Belarus,235,204712,FALSE
+Belarus,254,26952.37295,TRUE
+Belarus,84,9355.713607,TRUE
+Belarus,267,9372.487582,TRUE
+Belarus,282,445885,FALSE
+Belarus,286,760050.6713,TRUE
+Belarus,289,14647,FALSE
+Belarus,316,31059,FALSE
+Belarus,317,188762.6372,TRUE
+Belarus,318,32939,FALSE
+Belarus,18,25118,FALSE
+Belarus,19,77366.60983,TRUE
+Belarus,33,30270.38924,TRUE
+Belarus,40,376796,FALSE
+Belarus,49,325443,FALSE
+Belarus,54,175365.1249,TRUE
+Belarus,58,102965,FALSE
+Belarus,59,22326.21725,TRUE
+Belarus,63,234336.5313,TRUE
+Belarus,90,412969,FALSE
+Belarus,94,61002.28577,TRUE
+Belarus,101,138512.4356,TRUE
+Belarus,112,113942,FALSE
+Belarus,138,17125.18189,TRUE
+Belarus,152,119704.6269,TRUE
+Belarus,154,96782.90416,TRUE
+Belarus,158,96473.15601,TRUE
+Belarus,200,26811,FALSE
+Belarus,202,85300.04797,TRUE
+Belarus,206,183393.7134,TRUE
+Belarus,218,35547,FALSE
+Belarus,238,116960.1876,TRUE
+Belarus,243,112174.5654,TRUE
+Belarus,259,27003,FALSE
+Belarus,276,10950.60863,TRUE
+Belarus,279,177754.1672,TRUE
+Belarus,298,120463.1286,TRUE
+Belarus,305,15590.0347,TRUE
+Belarus,306,402141,FALSE
+Belarus,11,178064.2799,TRUE
+Belarus,16,74389.59543,TRUE
+Belarus,48,27222.34375,TRUE
+Belarus,60,22383.25858,TRUE
+Belarus,63,11715.28525,TRUE
+Belarus,121,115777.4722,TRUE
+Belarus,128,9353.124815,TRUE
+Belarus,156,10200.29705,TRUE
+Belarus,217,23367,FALSE
+Belarus,248,12386,FALSE
+Belarus,270,9151.63574,TRUE
+Belarus,52,72720.10141,TRUE
+Belarus,74,4541.36112,TRUE
+Belarus,75,47178.96176,TRUE
+Belarus,80,49992.57574,TRUE
+Belarus,301,113987.8459,TRUE
+Belarus,319,89190.44102,TRUE
+Belarus,51,26504.47085,TRUE
+Belarus,53,6581.96824,TRUE
+Belarus,77,5993.147024,TRUE
+Belarus,213,124295.9159,TRUE
+Belarus,228,133880.2683,TRUE
+Belarus,269,15171.62496,TRUE
+Belarus,296,43692.55808,TRUE
+Belarus,175,70802.39066,TRUE
+Belarus,12,36715.19395,TRUE
+Belarus,13,74728.86082,TRUE
+Belarus,108,9383,FALSE
+Belarus,165,20263,FALSE
+Belarus,215,105585.0293,TRUE
+Belarus,261,8946.089355,TRUE
+Belarus,281,93345,FALSE
+Belarus,302,27087.34387,TRUE
+Belarus,310,36133,TRUE
+Belarus,106,7555,FALSE
+Belarus,30,62885.73079,TRUE
+Belarus,91,126485.3041,TRUE
+Belarus,192,3780098.195,TRUE
+Belarus,249,70032.42373,TRUE
+Belarus,308,32853,FALSE
+Belarus,116,98484.54468,TRUE
+Belarus,234,8162.890747,TRUE
+Belarus,88,44653,FALSE
+Belarus,227,9358.848173,TRUE
+Belarus,8,21599.0332,TRUE
+Belarus,115,186672.4488,TRUE
+Belarus,146,28645.96233,TRUE
+Belarus,257,14862.84549,TRUE
+Belarus,39,9915,FALSE
+Belarus,61,218943.5096,TRUE
+Belarus,76,100326.9844,TRUE
+Belarus,268,27005.25,TRUE
+Belarus,194,9390.783666,TRUE
+Belarus,198,5299.135169,TRUE
+Belarus,245,11957.75,TRUE
+Belarus,86,15341.61704,TRUE
+Belarus,247,27947.125,TRUE
+Belarus,15,5922.875,TRUE
+Belarus,135,5719.346191,TRUE
+Belarus,65,4252.65625,TRUE
+Belarus,70,8796.273438,TRUE
+Belarus,314,4472.643433,TRUE
+Belarus,133,6124.625,TRUE
+Belarus,240,4373.4375,TRUE
+Belarus,148,23186,TRUE
+Belarus,31,5157,TRUE
+Belgium,4,20977.52128,TRUE
+Belgium,5,7484.490489,TRUE
+Belgium,7,367037,FALSE
+Belgium,8,47030.54376,TRUE
+Belgium,17,62371,FALSE
+Belgium,105,149702.6633,TRUE
+Belgium,120,95488,FALSE
+Belgium,161,6429,FALSE
+Belgium,169,92268,FALSE
+Belgium,179,121608.9919,TRUE
+Belgium,180,7520.279265,TRUE
+Belgium,203,26179.47154,TRUE
+Belgium,205,442555,FALSE
+Belgium,208,84004.18102,TRUE
+Belgium,219,80605.62094,TRUE
+Belgium,221,342122,FALSE
+Belgium,229,16244.65912,TRUE
+Belgium,231,4000,FALSE
+Belgium,235,381632,FALSE
+Belgium,254,26952.37295,TRUE
+Belgium,84,9355.713607,TRUE
+Belgium,267,9372.487582,TRUE
+Belgium,282,724472,FALSE
+Belgium,286,760050.6713,TRUE
+Belgium,289,9979.922823,TRUE
+Belgium,316,22317,FALSE
+Belgium,317,188762.6372,TRUE
+Belgium,318,67871,FALSE
+Belgium,18,43389,FALSE
+Belgium,19,123250,FALSE
+Belgium,33,45955,FALSE
+Belgium,40,316463,FALSE
+Belgium,49,658803,FALSE
+Belgium,54,203587,FALSE
+Belgium,58,42683,FALSE
+Belgium,59,22326.21725,TRUE
+Belgium,63,2760000,FALSE
+Belgium,90,4210714,FALSE
+Belgium,94,61002.28577,TRUE
+Belgium,101,4500000,FALSE
+Belgium,112,122104.9439,TRUE
+Belgium,138,18783,FALSE
+Belgium,152,341569,FALSE
+Belgium,154,96782.90416,TRUE
+Belgium,158,406244,FALSE
+Belgium,200,44707,FALSE
+Belgium,202,85300.04797,TRUE
+Belgium,206,183393.7134,TRUE
+Belgium,218,65000,FALSE
+Belgium,238,200000,FALSE
+Belgium,243,32565,FALSE
+Belgium,259,33066,FALSE
+Belgium,276,10950.60863,TRUE
+Belgium,279,159881,FALSE
+Belgium,298,120463.1286,TRUE
+Belgium,305,27996,FALSE
+Belgium,306,5069043,FALSE
+Belgium,11,178064.2799,TRUE
+Belgium,16,74389.59543,TRUE
+Belgium,48,27222.34375,TRUE
+Belgium,60,22383.25858,TRUE
+Belgium,63,2760000,FALSE
+Belgium,121,115777.4722,TRUE
+Belgium,128,9353.124815,TRUE
+Belgium,156,10200.29705,TRUE
+Belgium,217,29828,FALSE
+Belgium,248,34441,FALSE
+Belgium,270,9151.63574,TRUE
+Belgium,52,72720.10141,TRUE
+Belgium,74,4541.36112,TRUE
+Belgium,75,47178.96176,TRUE
+Belgium,80,49992.57574,TRUE
+Belgium,301,113987.8459,TRUE
+Belgium,319,89190.44102,TRUE
+Belgium,51,26504.47085,TRUE
+Belgium,53,6581.96824,TRUE
+Belgium,77,5993.147024,TRUE
+Belgium,213,124295.9159,TRUE
+Belgium,228,133880.2683,TRUE
+Belgium,269,15171.62496,TRUE
+Belgium,296,43692.55808,TRUE
+Belgium,175,70802.39066,TRUE
+Belgium,12,82670,FALSE
+Belgium,13,74728.86082,TRUE
+Belgium,108,57742,FALSE
+Belgium,165,14797.07017,TRUE
+Belgium,215,105585.0293,TRUE
+Belgium,261,8946.089355,TRUE
+Belgium,281,236842,FALSE
+Belgium,302,27087.34387,TRUE
+Belgium,310,36133,TRUE
+Belgium,106,13595.99028,TRUE
+Belgium,30,62885.73079,TRUE
+Belgium,91,218250,FALSE
+Belgium,192,3780098.195,TRUE
+Belgium,249,153712,FALSE
+Belgium,308,52622,FALSE
+Belgium,116,78082,FALSE
+Belgium,234,8162.890747,TRUE
+Belgium,88,138218.959,TRUE
+Belgium,227,9358.848173,TRUE
+Belgium,8,21599.0332,TRUE
+Belgium,115,186672.4488,TRUE
+Belgium,146,28645.96233,TRUE
+Belgium,257,14862.84549,TRUE
+Belgium,39,10075.63454,TRUE
+Belgium,61,500919,FALSE
+Belgium,76,100326.9844,TRUE
+Belgium,268,27005.25,TRUE
+Belgium,194,9390.783666,TRUE
+Belgium,198,5299.135169,TRUE
+Belgium,245,11957.75,TRUE
+Belgium,86,15341.61704,TRUE
+Belgium,247,27947.125,TRUE
+Belgium,15,5922.875,TRUE
+Belgium,135,5719.346191,TRUE
+Belgium,65,4252.65625,TRUE
+Belgium,70,8796.273438,TRUE
+Belgium,314,4472.643433,TRUE
+Belgium,133,6124.625,TRUE
+Belgium,240,4373.4375,TRUE
+Belgium,148,23186,TRUE
+Belgium,31,5157,TRUE
+Belize,4,20977.52128,TRUE
+Belize,5,7484.490489,TRUE
+Belize,7,111437.9893,TRUE
+Belize,8,47030.54376,TRUE
+Belize,17,33099.94094,TRUE
+Belize,105,149702.6633,TRUE
+Belize,120,115713.1489,TRUE
+Belize,161,8730.264786,TRUE
+Belize,169,29768,FALSE
+Belize,179,153030,FALSE
+Belize,180,7520.279265,TRUE
+Belize,203,26179.47154,TRUE
+Belize,205,158255.8483,TRUE
+Belize,208,96383,FALSE
+Belize,219,80605.62094,TRUE
+Belize,221,53059.48552,TRUE
+Belize,229,16244.65912,TRUE
+Belize,231,60255.26389,TRUE
+Belize,235,99596,FALSE
+Belize,254,47752,FALSE
+Belize,84,9355.713607,TRUE
+Belize,267,9372.487582,TRUE
+Belize,282,423220.8453,TRUE
+Belize,286,429177,FALSE
+Belize,289,9979.922823,TRUE
+Belize,316,72255.87156,TRUE
+Belize,317,231284,FALSE
+Belize,318,32261.2753,TRUE
+Belize,18,6651,FALSE
+Belize,19,16887,FALSE
+Belize,33,30270.38924,TRUE
+Belize,40,252830,FALSE
+Belize,49,119778,FALSE
+Belize,54,175365.1249,TRUE
+Belize,58,74040.89691,TRUE
+Belize,59,22326.21725,TRUE
+Belize,63,198857,FALSE
+Belize,90,76923,FALSE
+Belize,94,61002.28577,TRUE
+Belize,101,138512.4356,TRUE
+Belize,112,122104.9439,TRUE
+Belize,138,17125.18189,TRUE
+Belize,152,119704.6269,TRUE
+Belize,154,96782.90416,TRUE
+Belize,158,96473.15601,TRUE
+Belize,200,22918.25267,TRUE
+Belize,202,50000,FALSE
+Belize,206,194902,FALSE
+Belize,218,28079,FALSE
+Belize,238,78462,FALSE
+Belize,243,112174.5654,TRUE
+Belize,259,55616.6005,TRUE
+Belize,276,27276,FALSE
+Belize,279,177754.1672,TRUE
+Belize,298,120463.1286,TRUE
+Belize,305,15590.0347,TRUE
+Belize,306,242203,FALSE
+Belize,11,178064.2799,TRUE
+Belize,16,285676,FALSE
+Belize,48,27222.34375,TRUE
+Belize,60,22383.25858,TRUE
+Belize,63,198857,FALSE
+Belize,121,54498,FALSE
+Belize,128,10752,FALSE
+Belize,156,10200.29705,TRUE
+Belize,217,14026,FALSE
+Belize,248,14225.32829,TRUE
+Belize,270,27827,FALSE
+Belize,52,164624,FALSE
+Belize,74,897,FALSE
+Belize,75,16321,FALSE
+Belize,80,49992.57574,TRUE
+Belize,301,113987.8459,TRUE
+Belize,319,96667,FALSE
+Belize,51,26504.47085,TRUE
+Belize,53,6581.96824,TRUE
+Belize,77,11863,FALSE
+Belize,213,124295.9159,TRUE
+Belize,228,189867,FALSE
+Belize,269,15171.62496,TRUE
+Belize,296,73333,FALSE
+Belize,175,112500,FALSE
+Belize,12,36715.19395,TRUE
+Belize,13,74728.86082,TRUE
+Belize,108,12577.92841,TRUE
+Belize,165,14797.07017,TRUE
+Belize,215,601673,FALSE
+Belize,261,8946.089355,TRUE
+Belize,281,136069.2843,TRUE
+Belize,302,27087.34387,TRUE
+Belize,310,36133,TRUE
+Belize,106,13595.99028,TRUE
+Belize,30,62885.73079,TRUE
+Belize,91,126485.3041,TRUE
+Belize,192,3780098.195,TRUE
+Belize,249,70032.42373,TRUE
+Belize,308,35296.76443,TRUE
+Belize,116,98484.54468,TRUE
+Belize,234,8162.890747,TRUE
+Belize,88,138218.959,TRUE
+Belize,227,9358.848173,TRUE
+Belize,8,21599.0332,TRUE
+Belize,115,186672.4488,TRUE
+Belize,146,28645.96233,TRUE
+Belize,257,14862.84549,TRUE
+Belize,39,10075.63454,TRUE
+Belize,61,218943.5096,TRUE
+Belize,76,140000,FALSE
+Belize,268,27005.25,TRUE
+Belize,194,9390.783666,TRUE
+Belize,198,5299.135169,TRUE
+Belize,245,11957.75,TRUE
+Belize,86,15341.61704,TRUE
+Belize,247,27947.125,TRUE
+Belize,15,5922.875,TRUE
+Belize,135,5719.346191,TRUE
+Belize,65,4252.65625,TRUE
+Belize,70,8796.273438,TRUE
+Belize,314,4472.643433,TRUE
+Belize,133,6124.625,TRUE
+Belize,240,4373.4375,TRUE
+Belize,148,23186,TRUE
+Belize,31,5157,TRUE
+Benin,4,20977.52128,TRUE
+Benin,5,7484.490489,TRUE
+Benin,7,111437.9893,TRUE
+Benin,8,47030.54376,TRUE
+Benin,17,33099.94094,TRUE
+Benin,105,149702.6633,TRUE
+Benin,120,115713.1489,TRUE
+Benin,161,8730.264786,TRUE
+Benin,169,13762,FALSE
+Benin,179,121608.9919,TRUE
+Benin,180,8568,FALSE
+Benin,203,26179.47154,TRUE
+Benin,205,182284,FALSE
+Benin,208,25217,FALSE
+Benin,219,80605.62094,TRUE
+Benin,221,53059.48552,TRUE
+Benin,229,16244.65912,TRUE
+Benin,231,60255.26389,TRUE
+Benin,235,42043,FALSE
+Benin,254,34174,FALSE
+Benin,84,8281,FALSE
+Benin,267,6750,FALSE
+Benin,282,423220.8453,TRUE
+Benin,286,200953,FALSE
+Benin,289,9979.922823,TRUE
+Benin,316,72255.87156,TRUE
+Benin,317,188762.6372,TRUE
+Benin,318,32261.2753,TRUE
+Benin,18,8381,FALSE
+Benin,19,77366.60983,TRUE
+Benin,33,30270.38924,TRUE
+Benin,40,180987.6885,TRUE
+Benin,49,247408.5214,TRUE
+Benin,54,175365.1249,TRUE
+Benin,58,74040.89691,TRUE
+Benin,59,22326.21725,TRUE
+Benin,63,31833,FALSE
+Benin,90,194487.8189,TRUE
+Benin,94,24669,FALSE
+Benin,101,138512.4356,TRUE
+Benin,112,122104.9439,TRUE
+Benin,138,17125.18189,TRUE
+Benin,152,119704.6269,TRUE
+Benin,154,96782.90416,TRUE
+Benin,158,96473.15601,TRUE
+Benin,200,22918.25267,TRUE
+Benin,202,32210,FALSE
+Benin,206,183393.7134,TRUE
+Benin,218,52990.31222,TRUE
+Benin,238,116960.1876,TRUE
+Benin,243,112174.5654,TRUE
+Benin,259,55616.6005,TRUE
+Benin,276,10244,FALSE
+Benin,279,177754.1672,TRUE
+Benin,298,120463.1286,TRUE
+Benin,305,6000,FALSE
+Benin,306,83484,FALSE
+Benin,11,178064.2799,TRUE
+Benin,16,50030,FALSE
+Benin,48,27222.34375,TRUE
+Benin,60,22383.25858,TRUE
+Benin,63,31833,FALSE
+Benin,121,115777.4722,TRUE
+Benin,128,8607,FALSE
+Benin,156,10200.29705,TRUE
+Benin,217,21196.4891,TRUE
+Benin,248,14225.32829,TRUE
+Benin,270,9830,FALSE
+Benin,52,156687,FALSE
+Benin,74,4541.36112,TRUE
+Benin,75,12984,FALSE
+Benin,80,49992.57574,TRUE
+Benin,301,30481,FALSE
+Benin,319,147878,FALSE
+Benin,51,3250,FALSE
+Benin,53,7032,FALSE
+Benin,77,1917,FALSE
+Benin,213,174160,FALSE
+Benin,228,565616,FALSE
+Benin,269,15171.62496,TRUE
+Benin,296,58805,FALSE
+Benin,175,47587,FALSE
+Benin,12,36715.19395,TRUE
+Benin,13,74728.86082,TRUE
+Benin,108,12577.92841,TRUE
+Benin,165,14797.07017,TRUE
+Benin,215,105585.0293,TRUE
+Benin,261,8946.089355,TRUE
+Benin,281,136069.2843,TRUE
+Benin,302,27087.34387,TRUE
+Benin,310,36133,TRUE
+Benin,106,13595.99028,TRUE
+Benin,30,62885.73079,TRUE
+Benin,91,126485.3041,TRUE
+Benin,192,3780098.195,TRUE
+Benin,249,70032.42373,TRUE
+Benin,308,35296.76443,TRUE
+Benin,116,98484.54468,TRUE
+Benin,234,8162.890747,TRUE
+Benin,88,138218.959,TRUE
+Benin,227,9358.848173,TRUE
+Benin,8,21599.0332,TRUE
+Benin,115,186672.4488,TRUE
+Benin,146,28645.96233,TRUE
+Benin,257,14862.84549,TRUE
+Benin,39,10075.63454,TRUE
+Benin,61,218943.5096,TRUE
+Benin,76,100326.9844,TRUE
+Benin,268,17744,FALSE
+Benin,194,9390.783666,TRUE
+Benin,198,5299.135169,TRUE
+Benin,245,11957.75,TRUE
+Benin,86,15341.61704,TRUE
+Benin,247,27947.125,TRUE
+Benin,15,5922.875,TRUE
+Benin,135,5719.346191,TRUE
+Benin,65,4252.65625,TRUE
+Benin,70,8796.273438,TRUE
+Benin,314,4472.643433,TRUE
+Benin,133,6124.625,TRUE
+Benin,240,4373.4375,TRUE
+Benin,148,23186,TRUE
+Benin,31,5157,TRUE
+Bermuda,4,20977.52128,TRUE
+Bermuda,5,7484.490489,TRUE
+Bermuda,7,111437.9893,TRUE
+Bermuda,8,47030.54376,TRUE
+Bermuda,17,33099.94094,TRUE
+Bermuda,105,149702.6633,TRUE
+Bermuda,120,115713.1489,TRUE
+Bermuda,161,8730.264786,TRUE
+Bermuda,169,16777.49735,TRUE
+Bermuda,179,121608.9919,TRUE
+Bermuda,180,7520.279265,TRUE
+Bermuda,203,26179.47154,TRUE
+Bermuda,205,123614,FALSE
+Bermuda,208,84004.18102,TRUE
+Bermuda,219,80605.62094,TRUE
+Bermuda,221,53059.48552,TRUE
+Bermuda,229,16244.65912,TRUE
+Bermuda,231,60255.26389,TRUE
+Bermuda,235,242159,FALSE
+Bermuda,254,26952.37295,TRUE
+Bermuda,84,9355.713607,TRUE
+Bermuda,267,9372.487582,TRUE
+Bermuda,282,423220.8453,TRUE
+Bermuda,286,760050.6713,TRUE
+Bermuda,289,9979.922823,TRUE
+Bermuda,316,72255.87156,TRUE
+Bermuda,317,188762.6372,TRUE
+Bermuda,318,32261.2753,TRUE
+Bermuda,18,11273.75269,TRUE
+Bermuda,19,42463,FALSE
+Bermuda,33,30270.38924,TRUE
+Bermuda,40,201163,FALSE
+Bermuda,49,191322,FALSE
+Bermuda,54,175365.1249,TRUE
+Bermuda,58,74040.89691,TRUE
+Bermuda,59,22326.21725,TRUE
+Bermuda,63,234336.5313,TRUE
+Bermuda,90,194487.8189,TRUE
+Bermuda,94,61002.28577,TRUE
+Bermuda,101,138512.4356,TRUE
+Bermuda,112,122104.9439,TRUE
+Bermuda,138,17125.18189,TRUE
+Bermuda,152,119704.6269,TRUE
+Bermuda,154,96782.90416,TRUE
+Bermuda,158,96473.15601,TRUE
+Bermuda,200,22918.25267,TRUE
+Bermuda,202,85300.04797,TRUE
+Bermuda,206,183393.7134,TRUE
+Bermuda,218,52990.31222,TRUE
+Bermuda,238,116960.1876,TRUE
+Bermuda,243,112174.5654,TRUE
+Bermuda,259,55616.6005,TRUE
+Bermuda,276,10950.60863,TRUE
+Bermuda,279,177754.1672,TRUE
+Bermuda,298,120463.1286,TRUE
+Bermuda,305,15590.0347,TRUE
+Bermuda,306,138426,FALSE
+Bermuda,11,178064.2799,TRUE
+Bermuda,16,156901,FALSE
+Bermuda,48,27222.34375,TRUE
+Bermuda,60,22383.25858,TRUE
+Bermuda,63,11715.28525,TRUE
+Bermuda,121,115777.4722,TRUE
+Bermuda,128,9353.124815,TRUE
+Bermuda,156,10200.29705,TRUE
+Bermuda,217,21196.4891,TRUE
+Bermuda,248,14225.32829,TRUE
+Bermuda,270,9151.63574,TRUE
+Bermuda,52,72720.10141,TRUE
+Bermuda,74,4541.36112,TRUE
+Bermuda,75,47178.96176,TRUE
+Bermuda,80,49992.57574,TRUE
+Bermuda,301,113987.8459,TRUE
+Bermuda,319,89190.44102,TRUE
+Bermuda,51,26504.47085,TRUE
+Bermuda,53,6581.96824,TRUE
+Bermuda,77,5993.147024,TRUE
+Bermuda,213,124295.9159,TRUE
+Bermuda,228,133880.2683,TRUE
+Bermuda,269,15171.62496,TRUE
+Bermuda,296,114923,FALSE
+Bermuda,175,70802.39066,TRUE
+Bermuda,12,36715.19395,TRUE
+Bermuda,13,74728.86082,TRUE
+Bermuda,108,12577.92841,TRUE
+Bermuda,165,14797.07017,TRUE
+Bermuda,215,105585.0293,TRUE
+Bermuda,261,8946.089355,TRUE
+Bermuda,281,136069.2843,TRUE
+Bermuda,302,27087.34387,TRUE
+Bermuda,310,36133,TRUE
+Bermuda,106,13595.99028,TRUE
+Bermuda,30,62885.73079,TRUE
+Bermuda,91,126485.3041,TRUE
+Bermuda,192,3780098.195,TRUE
+Bermuda,249,70032.42373,TRUE
+Bermuda,308,35296.76443,TRUE
+Bermuda,116,98484.54468,TRUE
+Bermuda,234,8162.890747,TRUE
+Bermuda,88,138218.959,TRUE
+Bermuda,227,9358.848173,TRUE
+Bermuda,8,21599.0332,TRUE
+Bermuda,115,186672.4488,TRUE
+Bermuda,146,28645.96233,TRUE
+Bermuda,257,14862.84549,TRUE
+Bermuda,39,10075.63454,TRUE
+Bermuda,61,218943.5096,TRUE
+Bermuda,76,100326.9844,TRUE
+Bermuda,268,27005.25,TRUE
+Bermuda,194,9390.783666,TRUE
+Bermuda,198,5299.135169,TRUE
+Bermuda,245,11957.75,TRUE
+Bermuda,86,15341.61704,TRUE
+Bermuda,247,27947.125,TRUE
+Bermuda,15,5922.875,TRUE
+Bermuda,135,5719.346191,TRUE
+Bermuda,65,4252.65625,TRUE
+Bermuda,70,8796.273438,TRUE
+Bermuda,314,4472.643433,TRUE
+Bermuda,133,6124.625,TRUE
+Bermuda,240,4373.4375,TRUE
+Bermuda,148,23186,TRUE
+Bermuda,31,5157,TRUE
+Bhutan,4,20977.52128,TRUE
+Bhutan,5,7484.490489,TRUE
+Bhutan,7,63424,FALSE
+Bhutan,8,10519,FALSE
+Bhutan,17,15862,FALSE
+Bhutan,105,149702.6633,TRUE
+Bhutan,120,115713.1489,TRUE
+Bhutan,161,8730.264786,TRUE
+Bhutan,169,34803,FALSE
+Bhutan,179,121608.9919,TRUE
+Bhutan,180,19095,FALSE
+Bhutan,203,26179.47154,TRUE
+Bhutan,205,25380,FALSE
+Bhutan,208,84536,FALSE
+Bhutan,219,13550,FALSE
+Bhutan,221,9411,FALSE
+Bhutan,229,16244.65912,TRUE
+Bhutan,231,17083,FALSE
+Bhutan,235,100054,FALSE
+Bhutan,254,39556,FALSE
+Bhutan,84,9355.713607,TRUE
+Bhutan,267,9372.487582,TRUE
+Bhutan,282,423220.8453,TRUE
+Bhutan,286,312527,FALSE
+Bhutan,289,9979.922823,TRUE
+Bhutan,316,72255.87156,TRUE
+Bhutan,317,188762.6372,TRUE
+Bhutan,318,18307,FALSE
+Bhutan,18,14417,FALSE
+Bhutan,19,77366.60983,TRUE
+Bhutan,33,30270.38924,TRUE
+Bhutan,40,45844,FALSE
+Bhutan,49,85252,FALSE
+Bhutan,54,23959,FALSE
+Bhutan,58,74040.89691,TRUE
+Bhutan,59,22326.21725,TRUE
+Bhutan,63,55121,FALSE
+Bhutan,90,194487.8189,TRUE
+Bhutan,94,61002.28577,TRUE
+Bhutan,101,138512.4356,TRUE
+Bhutan,112,23654,FALSE
+Bhutan,138,17125.18189,TRUE
+Bhutan,152,119704.6269,TRUE
+Bhutan,154,96782.90416,TRUE
+Bhutan,158,96473.15601,TRUE
+Bhutan,200,22918.25267,TRUE
+Bhutan,202,85300.04797,TRUE
+Bhutan,206,183393.7134,TRUE
+Bhutan,218,52990.31222,TRUE
+Bhutan,238,84287,FALSE
+Bhutan,243,112174.5654,TRUE
+Bhutan,259,55616.6005,TRUE
+Bhutan,276,11397,FALSE
+Bhutan,279,177754.1672,TRUE
+Bhutan,298,120463.1286,TRUE
+Bhutan,305,14685,FALSE
+Bhutan,306,31323,FALSE
+Bhutan,11,178064.2799,TRUE
+Bhutan,16,74389.59543,TRUE
+Bhutan,48,27222.34375,TRUE
+Bhutan,60,22383.25858,TRUE
+Bhutan,63,55121,FALSE
+Bhutan,121,115777.4722,TRUE
+Bhutan,128,9353.124815,TRUE
+Bhutan,156,10200.29705,TRUE
+Bhutan,217,18367,FALSE
+Bhutan,248,14225.32829,TRUE
+Bhutan,270,9151.63574,TRUE
+Bhutan,52,72720.10141,TRUE
+Bhutan,74,4541.36112,TRUE
+Bhutan,75,47178.96176,TRUE
+Bhutan,80,49992.57574,TRUE
+Bhutan,301,113987.8459,TRUE
+Bhutan,319,89190.44102,TRUE
+Bhutan,51,26504.47085,TRUE
+Bhutan,53,6581.96824,TRUE
+Bhutan,77,5993.147024,TRUE
+Bhutan,213,124295.9159,TRUE
+Bhutan,228,133880.2683,TRUE
+Bhutan,269,15171.62496,TRUE
+Bhutan,296,17765,FALSE
+Bhutan,175,61258,FALSE
+Bhutan,12,36715.19395,TRUE
+Bhutan,13,74728.86082,TRUE
+Bhutan,108,12577.92841,TRUE
+Bhutan,165,14797.07017,TRUE
+Bhutan,215,105585.0293,TRUE
+Bhutan,261,8946.089355,TRUE
+Bhutan,281,136069.2843,TRUE
+Bhutan,302,27087.34387,TRUE
+Bhutan,310,36133,TRUE
+Bhutan,106,13595.99028,TRUE
+Bhutan,30,62885.73079,TRUE
+Bhutan,91,126485.3041,TRUE
+Bhutan,192,3780098.195,TRUE
+Bhutan,249,70032.42373,TRUE
+Bhutan,308,35296.76443,TRUE
+Bhutan,116,98484.54468,TRUE
+Bhutan,234,8162.890747,TRUE
+Bhutan,88,138218.959,TRUE
+Bhutan,227,9358.848173,TRUE
+Bhutan,8,10519,FALSE
+Bhutan,115,41904,FALSE
+Bhutan,146,40248,FALSE
+Bhutan,257,14862.84549,TRUE
+Bhutan,39,17473,FALSE
+Bhutan,61,218943.5096,TRUE
+Bhutan,76,100326.9844,TRUE
+Bhutan,268,27005.25,TRUE
+Bhutan,194,10759,FALSE
+Bhutan,198,4405,FALSE
+Bhutan,245,11957.75,TRUE
+Bhutan,86,15341.61704,TRUE
+Bhutan,247,27947.125,TRUE
+Bhutan,15,5922.875,TRUE
+Bhutan,135,5719.346191,TRUE
+Bhutan,65,4252.65625,TRUE
+Bhutan,70,8796.273438,TRUE
+Bhutan,314,4472.643433,TRUE
+Bhutan,133,6124.625,TRUE
+Bhutan,240,4373.4375,TRUE
+Bhutan,148,23186,TRUE
+Bhutan,31,5157,TRUE
+Bolivia (Plurinational State of),4,20977.52128,TRUE
+Bolivia (Plurinational State of),5,7484.490489,TRUE
+Bolivia (Plurinational State of),7,37254,FALSE
+Bolivia (Plurinational State of),8,47030.54376,TRUE
+Bolivia (Plurinational State of),17,8308,FALSE
+Bolivia (Plurinational State of),105,48583,FALSE
+Bolivia (Plurinational State of),120,69309,FALSE
+Bolivia (Plurinational State of),161,8730.264786,TRUE
+Bolivia (Plurinational State of),169,24696,FALSE
+Bolivia (Plurinational State of),179,121608.9919,TRUE
+Bolivia (Plurinational State of),180,7520.279265,TRUE
+Bolivia (Plurinational State of),203,26179.47154,TRUE
+Bolivia (Plurinational State of),205,106862,FALSE
+Bolivia (Plurinational State of),208,80954,FALSE
+Bolivia (Plurinational State of),219,64699,FALSE
+Bolivia (Plurinational State of),221,48747,FALSE
+Bolivia (Plurinational State of),229,16244.65912,TRUE
+Bolivia (Plurinational State of),231,71851,FALSE
+Bolivia (Plurinational State of),235,59092,FALSE
+Bolivia (Plurinational State of),254,24830,FALSE
+Bolivia (Plurinational State of),84,8634,FALSE
+Bolivia (Plurinational State of),267,5657,FALSE
+Bolivia (Plurinational State of),282,423220.8453,TRUE
+Bolivia (Plurinational State of),286,453745,FALSE
+Bolivia (Plurinational State of),289,8908,FALSE
+Bolivia (Plurinational State of),316,72255.87156,TRUE
+Bolivia (Plurinational State of),317,135454,FALSE
+Bolivia (Plurinational State of),318,14317,FALSE
+Bolivia (Plurinational State of),18,12560,FALSE
+Bolivia (Plurinational State of),19,29983,FALSE
+Bolivia (Plurinational State of),33,9771,FALSE
+Bolivia (Plurinational State of),40,78655,FALSE
+Bolivia (Plurinational State of),49,116458,FALSE
+Bolivia (Plurinational State of),54,63853,FALSE
+Bolivia (Plurinational State of),58,21879,FALSE
+Bolivia (Plurinational State of),59,15166,FALSE
+Bolivia (Plurinational State of),63,27655,FALSE
+Bolivia (Plurinational State of),90,85236,FALSE
+Bolivia (Plurinational State of),94,61002.28577,TRUE
+Bolivia (Plurinational State of),101,138512.4356,TRUE
+Bolivia (Plurinational State of),112,46972,FALSE
+Bolivia (Plurinational State of),138,17125.18189,TRUE
+Bolivia (Plurinational State of),152,119704.6269,TRUE
+Bolivia (Plurinational State of),154,73300,FALSE
+Bolivia (Plurinational State of),158,65413,FALSE
+Bolivia (Plurinational State of),200,15474,FALSE
+Bolivia (Plurinational State of),202,85300.04797,TRUE
+Bolivia (Plurinational State of),206,183393.7134,TRUE
+Bolivia (Plurinational State of),218,13465,FALSE
+Bolivia (Plurinational State of),238,74030,FALSE
+Bolivia (Plurinational State of),243,47917,FALSE
+Bolivia (Plurinational State of),259,7708,FALSE
+Bolivia (Plurinational State of),276,23980,FALSE
+Bolivia (Plurinational State of),279,177754.1672,TRUE
+Bolivia (Plurinational State of),298,84233,FALSE
+Bolivia (Plurinational State of),305,10184,FALSE
+Bolivia (Plurinational State of),306,131928,FALSE
+Bolivia (Plurinational State of),11,178064.2799,TRUE
+Bolivia (Plurinational State of),16,151021,FALSE
+Bolivia (Plurinational State of),48,27222.34375,TRUE
+Bolivia (Plurinational State of),60,7674,FALSE
+Bolivia (Plurinational State of),63,27655,FALSE
+Bolivia (Plurinational State of),121,87379,FALSE
+Bolivia (Plurinational State of),128,10823,FALSE
+Bolivia (Plurinational State of),156,10200.29705,TRUE
+Bolivia (Plurinational State of),217,14256,FALSE
+Bolivia (Plurinational State of),248,14225.32829,TRUE
+Bolivia (Plurinational State of),270,28223,FALSE
+Bolivia (Plurinational State of),52,67851,FALSE
+Bolivia (Plurinational State of),74,5969,FALSE
+Bolivia (Plurinational State of),75,47178.96176,TRUE
+Bolivia (Plurinational State of),80,25780,FALSE
+Bolivia (Plurinational State of),301,113987.8459,TRUE
+Bolivia (Plurinational State of),319,89190.44102,TRUE
+Bolivia (Plurinational State of),51,26504.47085,TRUE
+Bolivia (Plurinational State of),53,6581.96824,TRUE
+Bolivia (Plurinational State of),77,9194,FALSE
+Bolivia (Plurinational State of),213,124295.9159,TRUE
+Bolivia (Plurinational State of),228,169664,FALSE
+Bolivia (Plurinational State of),269,15171.62496,TRUE
+Bolivia (Plurinational State of),296,41064,FALSE
+Bolivia (Plurinational State of),175,80215,FALSE
+Bolivia (Plurinational State of),12,36715.19395,TRUE
+Bolivia (Plurinational State of),13,54501,FALSE
+Bolivia (Plurinational State of),108,12577.92841,TRUE
+Bolivia (Plurinational State of),165,14797.07017,TRUE
+Bolivia (Plurinational State of),215,78080,FALSE
+Bolivia (Plurinational State of),261,8946.089355,TRUE
+Bolivia (Plurinational State of),281,61705,FALSE
+Bolivia (Plurinational State of),302,42842,FALSE
+Bolivia (Plurinational State of),310,36133,TRUE
+Bolivia (Plurinational State of),106,13595.99028,TRUE
+Bolivia (Plurinational State of),30,62885.73079,TRUE
+Bolivia (Plurinational State of),91,126485.3041,TRUE
+Bolivia (Plurinational State of),192,3780098.195,TRUE
+Bolivia (Plurinational State of),249,70032.42373,TRUE
+Bolivia (Plurinational State of),308,35296.76443,TRUE
+Bolivia (Plurinational State of),116,98484.54468,TRUE
+Bolivia (Plurinational State of),234,8162.890747,TRUE
+Bolivia (Plurinational State of),88,138218.959,TRUE
+Bolivia (Plurinational State of),227,9358.848173,TRUE
+Bolivia (Plurinational State of),8,21599.0332,TRUE
+Bolivia (Plurinational State of),115,186672.4488,TRUE
+Bolivia (Plurinational State of),146,28645.96233,TRUE
+Bolivia (Plurinational State of),257,14862.84549,TRUE
+Bolivia (Plurinational State of),39,10075.63454,TRUE
+Bolivia (Plurinational State of),61,218943.5096,TRUE
+Bolivia (Plurinational State of),76,100326.9844,TRUE
+Bolivia (Plurinational State of),268,27005.25,TRUE
+Bolivia (Plurinational State of),194,9390.783666,TRUE
+Bolivia (Plurinational State of),198,5299.135169,TRUE
+Bolivia (Plurinational State of),245,5512,FALSE
+Bolivia (Plurinational State of),86,15341.61704,TRUE
+Bolivia (Plurinational State of),247,27947.125,TRUE
+Bolivia (Plurinational State of),15,5922.875,TRUE
+Bolivia (Plurinational State of),135,5719.346191,TRUE
+Bolivia (Plurinational State of),65,4252.65625,TRUE
+Bolivia (Plurinational State of),70,8796.273438,TRUE
+Bolivia (Plurinational State of),314,4472.643433,TRUE
+Bolivia (Plurinational State of),133,6124.625,TRUE
+Bolivia (Plurinational State of),240,4373.4375,TRUE
+Bolivia (Plurinational State of),148,23186,TRUE
+Bolivia (Plurinational State of),31,5157,TRUE
+Bosnia and Herzegovina,4,2611,FALSE
+Bosnia and Herzegovina,5,9953,FALSE
+Bosnia and Herzegovina,7,33262,FALSE
+Bosnia and Herzegovina,8,17717,FALSE
+Bosnia and Herzegovina,17,30156,FALSE
+Bosnia and Herzegovina,105,20419,FALSE
+Bosnia and Herzegovina,120,47061,FALSE
+Bosnia and Herzegovina,161,8730.264786,TRUE
+Bosnia and Herzegovina,169,61466,FALSE
+Bosnia and Herzegovina,179,121608.9919,TRUE
+Bosnia and Herzegovina,180,7520.279265,TRUE
+Bosnia and Herzegovina,203,14158,FALSE
+Bosnia and Herzegovina,205,91307,FALSE
+Bosnia and Herzegovina,208,5066,FALSE
+Bosnia and Herzegovina,219,45691,FALSE
+Bosnia and Herzegovina,221,27971,FALSE
+Bosnia and Herzegovina,229,16244.65912,TRUE
+Bosnia and Herzegovina,231,20798,FALSE
+Bosnia and Herzegovina,235,119661,FALSE
+Bosnia and Herzegovina,254,26952.37295,TRUE
+Bosnia and Herzegovina,84,9355.713607,TRUE
+Bosnia and Herzegovina,267,9372.487582,TRUE
+Bosnia and Herzegovina,282,181864,FALSE
+Bosnia and Herzegovina,286,760050.6713,TRUE
+Bosnia and Herzegovina,289,18317,FALSE
+Bosnia and Herzegovina,316,15559,FALSE
+Bosnia and Herzegovina,317,249342,FALSE
+Bosnia and Herzegovina,318,42945,FALSE
+Bosnia and Herzegovina,18,15005,FALSE
+Bosnia and Herzegovina,19,38255,FALSE
+Bosnia and Herzegovina,33,30270.38924,TRUE
+Bosnia and Herzegovina,40,165156,FALSE
+Bosnia and Herzegovina,49,102002,FALSE
+Bosnia and Herzegovina,54,175365.1249,TRUE
+Bosnia and Herzegovina,58,17358,FALSE
+Bosnia and Herzegovina,59,12850,FALSE
+Bosnia and Herzegovina,63,88015,FALSE
+Bosnia and Herzegovina,90,136245,FALSE
+Bosnia and Herzegovina,94,61002.28577,TRUE
+Bosnia and Herzegovina,101,138512.4356,TRUE
+Bosnia and Herzegovina,112,40919,FALSE
+Bosnia and Herzegovina,138,17125.18189,TRUE
+Bosnia and Herzegovina,152,119704.6269,TRUE
+Bosnia and Herzegovina,154,59712,FALSE
+Bosnia and Herzegovina,158,69641,FALSE
+Bosnia and Herzegovina,200,29407,FALSE
+Bosnia and Herzegovina,202,85300.04797,TRUE
+Bosnia and Herzegovina,206,183393.7134,TRUE
+Bosnia and Herzegovina,218,52990.31222,TRUE
+Bosnia and Herzegovina,238,116960.1876,TRUE
+Bosnia and Herzegovina,243,50995,FALSE
+Bosnia and Herzegovina,259,32910,FALSE
+Bosnia and Herzegovina,276,26576,FALSE
+Bosnia and Herzegovina,279,177754.1672,TRUE
+Bosnia and Herzegovina,298,65408,FALSE
+Bosnia and Herzegovina,305,15802,FALSE
+Bosnia and Herzegovina,306,160851,FALSE
+Bosnia and Herzegovina,11,178064.2799,TRUE
+Bosnia and Herzegovina,16,74389.59543,TRUE
+Bosnia and Herzegovina,48,27222.34375,TRUE
+Bosnia and Herzegovina,60,32182,FALSE
+Bosnia and Herzegovina,63,88015,FALSE
+Bosnia and Herzegovina,121,115777.4722,TRUE
+Bosnia and Herzegovina,128,9353.124815,TRUE
+Bosnia and Herzegovina,156,10200.29705,TRUE
+Bosnia and Herzegovina,217,22829,FALSE
+Bosnia and Herzegovina,248,26621,FALSE
+Bosnia and Herzegovina,270,9151.63574,TRUE
+Bosnia and Herzegovina,52,72720.10141,TRUE
+Bosnia and Herzegovina,74,4541.36112,TRUE
+Bosnia and Herzegovina,75,47178.96176,TRUE
+Bosnia and Herzegovina,80,60706,FALSE
+Bosnia and Herzegovina,301,113987.8459,TRUE
+Bosnia and Herzegovina,319,89190.44102,TRUE
+Bosnia and Herzegovina,51,26504.47085,TRUE
+Bosnia and Herzegovina,53,6581.96824,TRUE
+Bosnia and Herzegovina,77,5993.147024,TRUE
+Bosnia and Herzegovina,213,124295.9159,TRUE
+Bosnia and Herzegovina,228,133880.2683,TRUE
+Bosnia and Herzegovina,269,15171.62496,TRUE
+Bosnia and Herzegovina,296,43692.55808,TRUE
+Bosnia and Herzegovina,175,70802.39066,TRUE
+Bosnia and Herzegovina,12,36715.19395,TRUE
+Bosnia and Herzegovina,13,34960,FALSE
+Bosnia and Herzegovina,108,12577.92841,TRUE
+Bosnia and Herzegovina,165,14797.07017,TRUE
+Bosnia and Herzegovina,215,105585.0293,TRUE
+Bosnia and Herzegovina,261,8946.089355,TRUE
+Bosnia and Herzegovina,281,76742,FALSE
+Bosnia and Herzegovina,302,27087.34387,TRUE
+Bosnia and Herzegovina,310,36133,TRUE
+Bosnia and Herzegovina,106,13595.99028,TRUE
+Bosnia and Herzegovina,30,62885.73079,TRUE
+Bosnia and Herzegovina,91,126485.3041,TRUE
+Bosnia and Herzegovina,192,3780098.195,TRUE
+Bosnia and Herzegovina,249,83717,FALSE
+Bosnia and Herzegovina,308,33253,FALSE
+Bosnia and Herzegovina,116,98484.54468,TRUE
+Bosnia and Herzegovina,234,8162.890747,TRUE
+Bosnia and Herzegovina,88,138218.959,TRUE
+Bosnia and Herzegovina,227,9358.848173,TRUE
+Bosnia and Herzegovina,8,17717,FALSE
+Bosnia and Herzegovina,115,186672.4488,TRUE
+Bosnia and Herzegovina,146,28645.96233,TRUE
+Bosnia and Herzegovina,257,14862.84549,TRUE
+Bosnia and Herzegovina,39,10701,FALSE
+Bosnia and Herzegovina,61,238581,FALSE
+Bosnia and Herzegovina,76,100326.9844,TRUE
+Bosnia and Herzegovina,268,27005.25,TRUE
+Bosnia and Herzegovina,194,9390.783666,TRUE
+Bosnia and Herzegovina,198,5299.135169,TRUE
+Bosnia and Herzegovina,245,11957.75,TRUE
+Bosnia and Herzegovina,86,9607,FALSE
+Bosnia and Herzegovina,247,27947.125,TRUE
+Bosnia and Herzegovina,15,5922.875,TRUE
+Bosnia and Herzegovina,135,5719.346191,TRUE
+Bosnia and Herzegovina,65,4252.65625,TRUE
+Bosnia and Herzegovina,70,8796.273438,TRUE
+Bosnia and Herzegovina,314,4472.643433,TRUE
+Bosnia and Herzegovina,133,6124.625,TRUE
+Bosnia and Herzegovina,240,4373.4375,TRUE
+Bosnia and Herzegovina,148,23186,TRUE
+Bosnia and Herzegovina,31,5157,TRUE
+Botswana,4,20977.52128,TRUE
+Botswana,5,7484.490489,TRUE
+Botswana,7,111437.9893,TRUE
+Botswana,8,47030.54376,TRUE
+Botswana,17,33099.94094,TRUE
+Botswana,105,149702.6633,TRUE
+Botswana,120,115713.1489,TRUE
+Botswana,161,8730.264786,TRUE
+Botswana,169,2050,FALSE
+Botswana,179,121608.9919,TRUE
+Botswana,180,2740,FALSE
+Botswana,203,26179.47154,TRUE
+Botswana,205,359275,FALSE
+Botswana,208,241125,FALSE
+Botswana,219,80605.62094,TRUE
+Botswana,221,53059.48552,TRUE
+Botswana,229,16244.65912,TRUE
+Botswana,231,60255.26389,TRUE
+Botswana,235,172280.9273,TRUE
+Botswana,254,26952.37295,TRUE
+Botswana,84,24181,FALSE
+Botswana,267,9372.487582,TRUE
+Botswana,282,423220.8453,TRUE
+Botswana,286,760050.6713,TRUE
+Botswana,289,9017,FALSE
+Botswana,316,72255.87156,TRUE
+Botswana,317,188762.6372,TRUE
+Botswana,318,32261.2753,TRUE
+Botswana,18,11273.75269,TRUE
+Botswana,19,77366.60983,TRUE
+Botswana,33,30270.38924,TRUE
+Botswana,40,180987.6885,TRUE
+Botswana,49,247408.5214,TRUE
+Botswana,54,175365.1249,TRUE
+Botswana,58,74040.89691,TRUE
+Botswana,59,22326.21725,TRUE
+Botswana,63,234336.5313,TRUE
+Botswana,90,194487.8189,TRUE
+Botswana,94,61002.28577,TRUE
+Botswana,101,138512.4356,TRUE
+Botswana,112,122104.9439,TRUE
+Botswana,138,17125.18189,TRUE
+Botswana,152,119704.6269,TRUE
+Botswana,154,96782.90416,TRUE
+Botswana,158,96473.15601,TRUE
+Botswana,200,22918.25267,TRUE
+Botswana,202,85300.04797,TRUE
+Botswana,206,183393.7134,TRUE
+Botswana,218,52990.31222,TRUE
+Botswana,238,116960.1876,TRUE
+Botswana,243,112174.5654,TRUE
+Botswana,259,55616.6005,TRUE
+Botswana,276,10950.60863,TRUE
+Botswana,279,177754.1672,TRUE
+Botswana,298,120463.1286,TRUE
+Botswana,305,15590.0347,TRUE
+Botswana,306,131681.4608,TRUE
+Botswana,11,178064.2799,TRUE
+Botswana,16,74389.59543,TRUE
+Botswana,48,27222.34375,TRUE
+Botswana,60,22383.25858,TRUE
+Botswana,63,11715.28525,TRUE
+Botswana,121,115777.4722,TRUE
+Botswana,128,3924,FALSE
+Botswana,156,10200.29705,TRUE
+Botswana,217,21196.4891,TRUE
+Botswana,248,14225.32829,TRUE
+Botswana,270,8198,FALSE
+Botswana,52,72720.10141,TRUE
+Botswana,74,4541.36112,TRUE
+Botswana,75,47178.96176,TRUE
+Botswana,80,49992.57574,TRUE
+Botswana,301,113987.8459,TRUE
+Botswana,319,89190.44102,TRUE
+Botswana,51,26504.47085,TRUE
+Botswana,53,6581.96824,TRUE
+Botswana,77,5993.147024,TRUE
+Botswana,213,124295.9159,TRUE
+Botswana,228,133880.2683,TRUE
+Botswana,269,15171.62496,TRUE
+Botswana,296,43692.55808,TRUE
+Botswana,175,70802.39066,TRUE
+Botswana,12,36715.19395,TRUE
+Botswana,13,74728.86082,TRUE
+Botswana,108,12577.92841,TRUE
+Botswana,165,14797.07017,TRUE
+Botswana,215,105585.0293,TRUE
+Botswana,261,8946.089355,TRUE
+Botswana,281,136069.2843,TRUE
+Botswana,302,27087.34387,TRUE
+Botswana,310,36133,TRUE
+Botswana,106,13595.99028,TRUE
+Botswana,30,62885.73079,TRUE
+Botswana,91,126485.3041,TRUE
+Botswana,192,3780098.195,TRUE
+Botswana,249,70032.42373,TRUE
+Botswana,308,35296.76443,TRUE
+Botswana,116,98484.54468,TRUE
+Botswana,234,8162.890747,TRUE
+Botswana,88,138218.959,TRUE
+Botswana,227,9358.848173,TRUE
+Botswana,8,21599.0332,TRUE
+Botswana,115,186672.4488,TRUE
+Botswana,146,28645.96233,TRUE
+Botswana,257,14862.84549,TRUE
+Botswana,39,10075.63454,TRUE
+Botswana,61,218943.5096,TRUE
+Botswana,76,100326.9844,TRUE
+Botswana,268,27005.25,TRUE
+Botswana,194,9390.783666,TRUE
+Botswana,198,5299.135169,TRUE
+Botswana,245,11957.75,TRUE
+Botswana,86,15341.61704,TRUE
+Botswana,247,27947.125,TRUE
+Botswana,15,5922.875,TRUE
+Botswana,135,5719.346191,TRUE
+Botswana,65,4252.65625,TRUE
+Botswana,70,8796.273438,TRUE
+Botswana,314,4472.643433,TRUE
+Botswana,133,6124.625,TRUE
+Botswana,240,4373.4375,TRUE
+Botswana,148,23186,TRUE
+Botswana,31,5157,TRUE
+Brazil,4,20977.52128,TRUE
+Brazil,5,7484.490489,TRUE
+Brazil,7,308776,FALSE
+Brazil,8,47030.54376,TRUE
+Brazil,17,41699,FALSE
+Brazil,105,95970,FALSE
+Brazil,120,127860,FALSE
+Brazil,161,11126,FALSE
+Brazil,169,42880,FALSE
+Brazil,179,258139,FALSE
+Brazil,180,7520.279265,TRUE
+Brazil,203,11272,FALSE
+Brazil,205,288431,FALSE
+Brazil,208,261802,FALSE
+Brazil,219,111008,FALSE
+Brazil,221,119431,FALSE
+Brazil,229,16244.65912,TRUE
+Brazil,231,60255.26389,TRUE
+Brazil,235,296622,FALSE
+Brazil,254,54643,FALSE
+Brazil,84,34774,FALSE
+Brazil,267,7778,FALSE
+Brazil,282,423220.8453,TRUE
+Brazil,286,751675,FALSE
+Brazil,289,13193,FALSE
+Brazil,316,15996,FALSE
+Brazil,317,231122,FALSE
+Brazil,318,31551,FALSE
+Brazil,18,10123,FALSE
+Brazil,19,77366.60983,TRUE
+Brazil,33,2204,FALSE
+Brazil,40,180987.6885,TRUE
+Brazil,49,247408.5214,TRUE
+Brazil,54,175365.1249,TRUE
+Brazil,58,74040.89691,TRUE
+Brazil,59,22326.21725,TRUE
+Brazil,63,234336.5313,TRUE
+Brazil,90,194487.8189,TRUE
+Brazil,94,61002.28577,TRUE
+Brazil,101,138512.4356,TRUE
+Brazil,112,116074,FALSE
+Brazil,138,17125.18189,TRUE
+Brazil,152,119704.6269,TRUE
+Brazil,154,267001,FALSE
+Brazil,158,96473.15601,TRUE
+Brazil,200,26196,FALSE
+Brazil,202,85300.04797,TRUE
+Brazil,206,183393.7134,TRUE
+Brazil,218,52990.31222,TRUE
+Brazil,238,116960.1876,TRUE
+Brazil,243,65575,FALSE
+Brazil,259,18671,FALSE
+Brazil,276,29046,FALSE
+Brazil,279,177754.1672,TRUE
+Brazil,298,202712,FALSE
+Brazil,305,17985,FALSE
+Brazil,306,651396,FALSE
+Brazil,11,178064.2799,TRUE
+Brazil,16,144010,FALSE
+Brazil,48,27222.34375,TRUE
+Brazil,60,22383.25858,TRUE
+Brazil,63,11715.28525,TRUE
+Brazil,121,177955,FALSE
+Brazil,128,36542,FALSE
+Brazil,156,10200.29705,TRUE
+Brazil,217,34401,FALSE
+Brazil,248,15652,FALSE
+Brazil,270,20682,FALSE
+Brazil,52,149922,FALSE
+Brazil,74,2970,FALSE
+Brazil,75,113210,FALSE
+Brazil,80,49992.57574,TRUE
+Brazil,301,113987.8459,TRUE
+Brazil,319,96698,FALSE
+Brazil,51,1331,FALSE
+Brazil,53,5551,FALSE
+Brazil,77,15135,FALSE
+Brazil,213,115815,FALSE
+Brazil,228,392226,FALSE
+Brazil,269,9088,FALSE
+Brazil,296,140721,FALSE
+Brazil,175,179475,FALSE
+Brazil,12,36715.19395,TRUE
+Brazil,13,180094,FALSE
+Brazil,108,12577.92841,TRUE
+Brazil,165,14797.07017,TRUE
+Brazil,215,469067,FALSE
+Brazil,261,8946.089355,TRUE
+Brazil,281,83967,FALSE
+Brazil,302,24162,FALSE
+Brazil,310,35625,FALSE
+Brazil,106,13595.99028,TRUE
+Brazil,30,62885.73079,TRUE
+Brazil,91,126485.3041,TRUE
+Brazil,192,3780098.195,TRUE
+Brazil,249,70032.42373,TRUE
+Brazil,308,27107,FALSE
+Brazil,116,98484.54468,TRUE
+Brazil,234,8162.890747,TRUE
+Brazil,88,138218.959,TRUE
+Brazil,227,9358.848173,TRUE
+Brazil,8,21599.0332,TRUE
+Brazil,115,186672.4488,TRUE
+Brazil,146,11277,FALSE
+Brazil,257,12931,FALSE
+Brazil,39,13033,FALSE
+Brazil,61,218943.5096,TRUE
+Brazil,76,100326.9844,TRUE
+Brazil,268,27005.25,TRUE
+Brazil,194,9390.783666,TRUE
+Brazil,198,5299.135169,TRUE
+Brazil,245,11957.75,TRUE
+Brazil,86,15341.61704,TRUE
+Brazil,247,18000,FALSE
+Brazil,15,5922.875,TRUE
+Brazil,135,5719.346191,TRUE
+Brazil,65,4252.65625,TRUE
+Brazil,70,8796.273438,TRUE
+Brazil,314,4472.643433,TRUE
+Brazil,133,6124.625,TRUE
+Brazil,240,4373.4375,TRUE
+Brazil,148,23186,TRUE
+Brazil,31,5157,TRUE
+British Virgin Islands,4,20977.52128,TRUE
+British Virgin Islands,5,7484.490489,TRUE
+British Virgin Islands,7,111437.9893,TRUE
+British Virgin Islands,8,47030.54376,TRUE
+British Virgin Islands,17,33099.94094,TRUE
+British Virgin Islands,105,149702.6633,TRUE
+British Virgin Islands,120,115713.1489,TRUE
+British Virgin Islands,161,8730.264786,TRUE
+British Virgin Islands,169,16777.49735,TRUE
+British Virgin Islands,179,121608.9919,TRUE
+British Virgin Islands,180,7520.279265,TRUE
+British Virgin Islands,203,26179.47154,TRUE
+British Virgin Islands,205,158255.8483,TRUE
+British Virgin Islands,208,84004.18102,TRUE
+British Virgin Islands,219,80605.62094,TRUE
+British Virgin Islands,221,53059.48552,TRUE
+British Virgin Islands,229,16244.65912,TRUE
+British Virgin Islands,231,60255.26389,TRUE
+British Virgin Islands,235,172280.9273,TRUE
+British Virgin Islands,254,26952.37295,TRUE
+British Virgin Islands,84,9355.713607,TRUE
+British Virgin Islands,267,9372.487582,TRUE
+British Virgin Islands,282,423220.8453,TRUE
+British Virgin Islands,286,760050.6713,TRUE
+British Virgin Islands,289,9979.922823,TRUE
+British Virgin Islands,316,72255.87156,TRUE
+British Virgin Islands,317,188762.6372,TRUE
+British Virgin Islands,318,32261.2753,TRUE
+British Virgin Islands,18,11273.75269,TRUE
+British Virgin Islands,19,77366.60983,TRUE
+British Virgin Islands,33,30270.38924,TRUE
+British Virgin Islands,40,180987.6885,TRUE
+British Virgin Islands,49,247408.5214,TRUE
+British Virgin Islands,54,175365.1249,TRUE
+British Virgin Islands,58,74040.89691,TRUE
+British Virgin Islands,59,22326.21725,TRUE
+British Virgin Islands,63,234336.5313,TRUE
+British Virgin Islands,90,194487.8189,TRUE
+British Virgin Islands,94,61002.28577,TRUE
+British Virgin Islands,101,138512.4356,TRUE
+British Virgin Islands,112,122104.9439,TRUE
+British Virgin Islands,138,17125.18189,TRUE
+British Virgin Islands,152,119704.6269,TRUE
+British Virgin Islands,154,96782.90416,TRUE
+British Virgin Islands,158,96473.15601,TRUE
+British Virgin Islands,200,22918.25267,TRUE
+British Virgin Islands,202,85300.04797,TRUE
+British Virgin Islands,206,183393.7134,TRUE
+British Virgin Islands,218,52990.31222,TRUE
+British Virgin Islands,238,116960.1876,TRUE
+British Virgin Islands,243,112174.5654,TRUE
+British Virgin Islands,259,55616.6005,TRUE
+British Virgin Islands,276,10950.60863,TRUE
+British Virgin Islands,279,177754.1672,TRUE
+British Virgin Islands,298,120463.1286,TRUE
+British Virgin Islands,305,15590.0347,TRUE
+British Virgin Islands,306,131681.4608,TRUE
+British Virgin Islands,11,178064.2799,TRUE
+British Virgin Islands,16,93062,FALSE
+British Virgin Islands,48,27222.34375,TRUE
+British Virgin Islands,60,22383.25858,TRUE
+British Virgin Islands,63,11715.28525,TRUE
+British Virgin Islands,121,115777.4722,TRUE
+British Virgin Islands,128,9353.124815,TRUE
+British Virgin Islands,156,10200.29705,TRUE
+British Virgin Islands,217,21196.4891,TRUE
+British Virgin Islands,248,14225.32829,TRUE
+British Virgin Islands,270,9151.63574,TRUE
+British Virgin Islands,52,72720.10141,TRUE
+British Virgin Islands,74,4541.36112,TRUE
+British Virgin Islands,75,47178.96176,TRUE
+British Virgin Islands,80,49992.57574,TRUE
+British Virgin Islands,301,113987.8459,TRUE
+British Virgin Islands,319,89190.44102,TRUE
+British Virgin Islands,51,26504.47085,TRUE
+British Virgin Islands,53,6581.96824,TRUE
+British Virgin Islands,77,5993.147024,TRUE
+British Virgin Islands,213,124295.9159,TRUE
+British Virgin Islands,228,133880.2683,TRUE
+British Virgin Islands,269,15171.62496,TRUE
+British Virgin Islands,296,43692.55808,TRUE
+British Virgin Islands,175,70802.39066,TRUE
+British Virgin Islands,12,36715.19395,TRUE
+British Virgin Islands,13,74728.86082,TRUE
+British Virgin Islands,108,12577.92841,TRUE
+British Virgin Islands,165,14797.07017,TRUE
+British Virgin Islands,215,105585.0293,TRUE
+British Virgin Islands,261,8946.089355,TRUE
+British Virgin Islands,281,136069.2843,TRUE
+British Virgin Islands,302,27087.34387,TRUE
+British Virgin Islands,310,36133,TRUE
+British Virgin Islands,106,13595.99028,TRUE
+British Virgin Islands,30,62885.73079,TRUE
+British Virgin Islands,91,126485.3041,TRUE
+British Virgin Islands,192,3780098.195,TRUE
+British Virgin Islands,249,70032.42373,TRUE
+British Virgin Islands,308,35296.76443,TRUE
+British Virgin Islands,116,98484.54468,TRUE
+British Virgin Islands,234,8162.890747,TRUE
+British Virgin Islands,88,138218.959,TRUE
+British Virgin Islands,227,9358.848173,TRUE
+British Virgin Islands,8,21599.0332,TRUE
+British Virgin Islands,115,186672.4488,TRUE
+British Virgin Islands,146,28645.96233,TRUE
+British Virgin Islands,257,14862.84549,TRUE
+British Virgin Islands,39,10075.63454,TRUE
+British Virgin Islands,61,218943.5096,TRUE
+British Virgin Islands,76,100326.9844,TRUE
+British Virgin Islands,268,27005.25,TRUE
+British Virgin Islands,194,9390.783666,TRUE
+British Virgin Islands,198,5299.135169,TRUE
+British Virgin Islands,245,11957.75,TRUE
+British Virgin Islands,86,15341.61704,TRUE
+British Virgin Islands,247,27947.125,TRUE
+British Virgin Islands,15,5922.875,TRUE
+British Virgin Islands,135,5719.346191,TRUE
+British Virgin Islands,65,4252.65625,TRUE
+British Virgin Islands,70,8796.273438,TRUE
+British Virgin Islands,314,4472.643433,TRUE
+British Virgin Islands,133,6124.625,TRUE
+British Virgin Islands,240,4373.4375,TRUE
+British Virgin Islands,148,23186,TRUE
+British Virgin Islands,31,5157,TRUE
+Brunei Darussalam,4,20977.52128,TRUE
+Brunei Darussalam,5,7484.490489,TRUE
+Brunei Darussalam,7,111437.9893,TRUE
+Brunei Darussalam,8,47030.54376,TRUE
+Brunei Darussalam,17,33099.94094,TRUE
+Brunei Darussalam,105,149702.6633,TRUE
+Brunei Darussalam,120,115713.1489,TRUE
+Brunei Darussalam,161,8730.264786,TRUE
+Brunei Darussalam,169,16777.49735,TRUE
+Brunei Darussalam,179,121608.9919,TRUE
+Brunei Darussalam,180,7520.279265,TRUE
+Brunei Darussalam,203,26179.47154,TRUE
+Brunei Darussalam,205,158255.8483,TRUE
+Brunei Darussalam,208,68452,FALSE
+Brunei Darussalam,219,80605.62094,TRUE
+Brunei Darussalam,221,53059.48552,TRUE
+Brunei Darussalam,229,16244.65912,TRUE
+Brunei Darussalam,231,60255.26389,TRUE
+Brunei Darussalam,235,172280.9273,TRUE
+Brunei Darussalam,254,8442,FALSE
+Brunei Darussalam,84,9355.713607,TRUE
+Brunei Darussalam,267,9372.487582,TRUE
+Brunei Darussalam,282,423220.8453,TRUE
+Brunei Darussalam,286,760050.6713,TRUE
+Brunei Darussalam,289,9979.922823,TRUE
+Brunei Darussalam,316,72255.87156,TRUE
+Brunei Darussalam,317,153174,FALSE
+Brunei Darussalam,318,32261.2753,TRUE
+Brunei Darussalam,18,11273.75269,TRUE
+Brunei Darussalam,19,77366.60983,TRUE
+Brunei Darussalam,33,30270.38924,TRUE
+Brunei Darussalam,40,180987.6885,TRUE
+Brunei Darussalam,49,247408.5214,TRUE
+Brunei Darussalam,54,175365.1249,TRUE
+Brunei Darussalam,58,74040.89691,TRUE
+Brunei Darussalam,59,22326.21725,TRUE
+Brunei Darussalam,63,45314,FALSE
+Brunei Darussalam,90,101639,FALSE
+Brunei Darussalam,94,61002.28577,TRUE
+Brunei Darussalam,101,79720,FALSE
+Brunei Darussalam,112,122104.9439,TRUE
+Brunei Darussalam,138,17125.18189,TRUE
+Brunei Darussalam,152,119704.6269,TRUE
+Brunei Darussalam,154,41482,FALSE
+Brunei Darussalam,158,17529,FALSE
+Brunei Darussalam,200,22918.25267,TRUE
+Brunei Darussalam,202,8171,FALSE
+Brunei Darussalam,206,84258,FALSE
+Brunei Darussalam,218,52990.31222,TRUE
+Brunei Darussalam,238,198414,FALSE
+Brunei Darussalam,243,112174.5654,TRUE
+Brunei Darussalam,259,55616.6005,TRUE
+Brunei Darussalam,276,10950.60863,TRUE
+Brunei Darussalam,279,39187,FALSE
+Brunei Darussalam,298,120463.1286,TRUE
+Brunei Darussalam,305,15590.0347,TRUE
+Brunei Darussalam,306,121170,FALSE
+Brunei Darussalam,11,178064.2799,TRUE
+Brunei Darussalam,16,30843,FALSE
+Brunei Darussalam,48,27222.34375,TRUE
+Brunei Darussalam,60,22383.25858,TRUE
+Brunei Darussalam,63,45314,FALSE
+Brunei Darussalam,121,115777.4722,TRUE
+Brunei Darussalam,128,9353.124815,TRUE
+Brunei Darussalam,156,10200.29705,TRUE
+Brunei Darussalam,217,21196.4891,TRUE
+Brunei Darussalam,248,14225.32829,TRUE
+Brunei Darussalam,270,9151.63574,TRUE
+Brunei Darussalam,52,176374,FALSE
+Brunei Darussalam,74,4541.36112,TRUE
+Brunei Darussalam,75,17603,FALSE
+Brunei Darussalam,80,3467,FALSE
+Brunei Darussalam,301,113987.8459,TRUE
+Brunei Darussalam,319,89190.44102,TRUE
+Brunei Darussalam,51,26504.47085,TRUE
+Brunei Darussalam,53,6581.96824,TRUE
+Brunei Darussalam,77,5993.147024,TRUE
+Brunei Darussalam,213,124295.9159,TRUE
+Brunei Darussalam,228,88615,FALSE
+Brunei Darussalam,269,15171.62496,TRUE
+Brunei Darussalam,296,70159,FALSE
+Brunei Darussalam,175,70802.39066,TRUE
+Brunei Darussalam,12,36715.19395,TRUE
+Brunei Darussalam,13,74728.86082,TRUE
+Brunei Darussalam,108,12577.92841,TRUE
+Brunei Darussalam,165,14797.07017,TRUE
+Brunei Darussalam,215,105585.0293,TRUE
+Brunei Darussalam,261,8946.089355,TRUE
+Brunei Darussalam,281,136069.2843,TRUE
+Brunei Darussalam,302,27087.34387,TRUE
+Brunei Darussalam,310,36133,TRUE
+Brunei Darussalam,106,13595.99028,TRUE
+Brunei Darussalam,30,62885.73079,TRUE
+Brunei Darussalam,91,126485.3041,TRUE
+Brunei Darussalam,192,3780098.195,TRUE
+Brunei Darussalam,249,70032.42373,TRUE
+Brunei Darussalam,308,35296.76443,TRUE
+Brunei Darussalam,116,98484.54468,TRUE
+Brunei Darussalam,234,8162.890747,TRUE
+Brunei Darussalam,88,138218.959,TRUE
+Brunei Darussalam,227,9358.848173,TRUE
+Brunei Darussalam,8,21599.0332,TRUE
+Brunei Darussalam,115,186672.4488,TRUE
+Brunei Darussalam,146,28645.96233,TRUE
+Brunei Darussalam,257,635,FALSE
+Brunei Darussalam,39,10075.63454,TRUE
+Brunei Darussalam,61,218943.5096,TRUE
+Brunei Darussalam,76,100326.9844,TRUE
+Brunei Darussalam,268,27005.25,TRUE
+Brunei Darussalam,194,9390.783666,TRUE
+Brunei Darussalam,198,5299.135169,TRUE
+Brunei Darussalam,245,11957.75,TRUE
+Brunei Darussalam,86,15341.61704,TRUE
+Brunei Darussalam,247,27947.125,TRUE
+Brunei Darussalam,15,5922.875,TRUE
+Brunei Darussalam,135,5719.346191,TRUE
+Brunei Darussalam,65,4252.65625,TRUE
+Brunei Darussalam,70,8796.273438,TRUE
+Brunei Darussalam,314,4472.643433,TRUE
+Brunei Darussalam,133,6124.625,TRUE
+Brunei Darussalam,240,4373.4375,TRUE
+Brunei Darussalam,148,23186,TRUE
+Brunei Darussalam,31,5157,TRUE
+Bulgaria,4,8521,FALSE
+Bulgaria,5,11356,FALSE
+Bulgaria,7,108866,FALSE
+Bulgaria,8,60701,FALSE
+Bulgaria,17,43161,FALSE
+Bulgaria,105,149702.6633,TRUE
+Bulgaria,120,57750,FALSE
+Bulgaria,161,7510,FALSE
+Bulgaria,169,54703,FALSE
+Bulgaria,179,121608.9919,TRUE
+Bulgaria,180,15678,FALSE
+Bulgaria,203,26179.47154,TRUE
+Bulgaria,205,109311,FALSE
+Bulgaria,208,84004.18102,TRUE
+Bulgaria,219,79748,FALSE
+Bulgaria,221,48585,FALSE
+Bulgaria,229,16244.65912,TRUE
+Bulgaria,231,72528,FALSE
+Bulgaria,235,151841,FALSE
+Bulgaria,254,54032,FALSE
+Bulgaria,84,9468,FALSE
+Bulgaria,267,9372.487582,TRUE
+Bulgaria,282,423220.8453,TRUE
+Bulgaria,286,760050.6713,TRUE
+Bulgaria,289,22919,FALSE
+Bulgaria,316,7896,FALSE
+Bulgaria,317,180775,FALSE
+Bulgaria,318,47483,FALSE
+Bulgaria,18,10846,FALSE
+Bulgaria,19,65975,FALSE
+Bulgaria,33,14416,FALSE
+Bulgaria,40,263130,FALSE
+Bulgaria,49,182417,FALSE
+Bulgaria,54,146552,FALSE
+Bulgaria,58,45487,FALSE
+Bulgaria,59,40959,FALSE
+Bulgaria,63,42422,FALSE
+Bulgaria,90,1227495,FALSE
+Bulgaria,94,61002.28577,TRUE
+Bulgaria,101,254180,FALSE
+Bulgaria,112,73750,FALSE
+Bulgaria,138,17701,FALSE
+Bulgaria,152,119704.6269,TRUE
+Bulgaria,154,96782.90416,TRUE
+Bulgaria,158,970000,FALSE
+Bulgaria,200,20474,FALSE
+Bulgaria,202,85300.04797,TRUE
+Bulgaria,206,75938,FALSE
+Bulgaria,218,39461,FALSE
+Bulgaria,238,113032,FALSE
+Bulgaria,243,38971,FALSE
+Bulgaria,259,20324,FALSE
+Bulgaria,276,12923,FALSE
+Bulgaria,279,110417,FALSE
+Bulgaria,298,120463.1286,TRUE
+Bulgaria,305,15267,FALSE
+Bulgaria,306,391273,FALSE
+Bulgaria,11,178064.2799,TRUE
+Bulgaria,16,74389.59543,TRUE
+Bulgaria,48,27222.34375,TRUE
+Bulgaria,60,12844,FALSE
+Bulgaria,63,42422,FALSE
+Bulgaria,121,115777.4722,TRUE
+Bulgaria,128,21313,FALSE
+Bulgaria,156,15764,FALSE
+Bulgaria,217,25348,FALSE
+Bulgaria,248,29692,FALSE
+Bulgaria,270,23448,FALSE
+Bulgaria,52,72720.10141,TRUE
+Bulgaria,74,4541.36112,TRUE
+Bulgaria,75,47178.96176,TRUE
+Bulgaria,80,84930,FALSE
+Bulgaria,301,113987.8459,TRUE
+Bulgaria,319,89190.44102,TRUE
+Bulgaria,51,26504.47085,TRUE
+Bulgaria,53,6581.96824,TRUE
+Bulgaria,77,5993.147024,TRUE
+Bulgaria,213,124295.9159,TRUE
+Bulgaria,228,133880.2683,TRUE
+Bulgaria,269,15171.62496,TRUE
+Bulgaria,296,43692.55808,TRUE
+Bulgaria,175,70802.39066,TRUE
+Bulgaria,12,62073,FALSE
+Bulgaria,13,74728.86082,TRUE
+Bulgaria,108,21580,FALSE
+Bulgaria,165,14797.07017,TRUE
+Bulgaria,215,105585.0293,TRUE
+Bulgaria,261,8946.089355,TRUE
+Bulgaria,281,76866,FALSE
+Bulgaria,302,27087.34387,TRUE
+Bulgaria,310,36133,TRUE
+Bulgaria,106,4099,FALSE
+Bulgaria,30,76260,FALSE
+Bulgaria,91,6687,FALSE
+Bulgaria,192,3780098.195,TRUE
+Bulgaria,249,45816,FALSE
+Bulgaria,308,30607,FALSE
+Bulgaria,116,98484.54468,TRUE
+Bulgaria,234,6336,FALSE
+Bulgaria,88,12520,FALSE
+Bulgaria,227,9358.848173,TRUE
+Bulgaria,8,60701,FALSE
+Bulgaria,115,186672.4488,TRUE
+Bulgaria,146,28645.96233,TRUE
+Bulgaria,257,14862.84549,TRUE
+Bulgaria,39,10075.63454,TRUE
+Bulgaria,61,218943.5096,TRUE
+Bulgaria,76,100326.9844,TRUE
+Bulgaria,268,27005.25,TRUE
+Bulgaria,194,2635,FALSE
+Bulgaria,198,5299.135169,TRUE
+Bulgaria,245,11957.75,TRUE
+Bulgaria,86,15341.61704,TRUE
+Bulgaria,247,27947.125,TRUE
+Bulgaria,15,5922.875,TRUE
+Bulgaria,135,5719.346191,TRUE
+Bulgaria,65,4252.65625,TRUE
+Bulgaria,70,8796.273438,TRUE
+Bulgaria,314,4472.643433,TRUE
+Bulgaria,133,6124.625,TRUE
+Bulgaria,240,4373.4375,TRUE
+Bulgaria,148,23186,TRUE
+Bulgaria,31,5157,TRUE
+Burkina Faso,4,5622,FALSE
+Burkina Faso,5,7484.490489,TRUE
+Burkina Faso,7,111437.9893,TRUE
+Burkina Faso,8,47030.54376,TRUE
+Burkina Faso,17,33099.94094,TRUE
+Burkina Faso,105,149702.6633,TRUE
+Burkina Faso,120,115713.1489,TRUE
+Burkina Faso,161,8730.264786,TRUE
+Burkina Faso,169,16890,FALSE
+Burkina Faso,179,121608.9919,TRUE
+Burkina Faso,180,8492,FALSE
+Burkina Faso,203,26179.47154,TRUE
+Burkina Faso,205,158255.8483,TRUE
+Burkina Faso,208,45834,FALSE
+Burkina Faso,219,80605.62094,TRUE
+Burkina Faso,221,53059.48552,TRUE
+Burkina Faso,229,16244.65912,TRUE
+Burkina Faso,231,60255.26389,TRUE
+Burkina Faso,235,19964,FALSE
+Burkina Faso,254,21718,FALSE
+Burkina Faso,84,12506,FALSE
+Burkina Faso,267,5897,FALSE
+Burkina Faso,282,423220.8453,TRUE
+Burkina Faso,286,1005263,FALSE
+Burkina Faso,289,9979.922823,TRUE
+Burkina Faso,316,72255.87156,TRUE
+Burkina Faso,317,188762.6372,TRUE
+Burkina Faso,318,32261.2753,TRUE
+Burkina Faso,18,11273.75269,TRUE
+Burkina Faso,19,139683,FALSE
+Burkina Faso,33,30270.38924,TRUE
+Burkina Faso,40,180987.6885,TRUE
+Burkina Faso,49,247408.5214,TRUE
+Burkina Faso,54,175365.1249,TRUE
+Burkina Faso,58,74040.89691,TRUE
+Burkina Faso,59,22326.21725,TRUE
+Burkina Faso,63,48897,FALSE
+Burkina Faso,90,194487.8189,TRUE
+Burkina Faso,94,61002.28577,TRUE
+Burkina Faso,101,138512.4356,TRUE
+Burkina Faso,112,122104.9439,TRUE
+Burkina Faso,138,17125.18189,TRUE
+Burkina Faso,152,119704.6269,TRUE
+Burkina Faso,154,69942,FALSE
+Burkina Faso,158,96473.15601,TRUE
+Burkina Faso,200,22918.25267,TRUE
+Burkina Faso,202,88375,FALSE
+Burkina Faso,206,165018,FALSE
+Burkina Faso,218,52990.31222,TRUE
+Burkina Faso,238,116960.1876,TRUE
+Burkina Faso,243,112174.5654,TRUE
+Burkina Faso,259,55616.6005,TRUE
+Burkina Faso,276,12500,FALSE
+Burkina Faso,279,177754.1672,TRUE
+Burkina Faso,298,77798,FALSE
+Burkina Faso,305,8022,FALSE
+Burkina Faso,306,102041,FALSE
+Burkina Faso,11,178064.2799,TRUE
+Burkina Faso,16,74389.59543,TRUE
+Burkina Faso,48,27222.34375,TRUE
+Burkina Faso,60,22383.25858,TRUE
+Burkina Faso,63,48897,FALSE
+Burkina Faso,121,150518,FALSE
+Burkina Faso,128,7993,FALSE
+Burkina Faso,156,10200.29705,TRUE
+Burkina Faso,217,21196.4891,TRUE
+Burkina Faso,248,14225.32829,TRUE
+Burkina Faso,270,10546,FALSE
+Burkina Faso,52,13046,FALSE
+Burkina Faso,74,4541.36112,TRUE
+Burkina Faso,75,47178.96176,TRUE
+Burkina Faso,80,49992.57574,TRUE
+Burkina Faso,301,113987.8459,TRUE
+Burkina Faso,319,76443,FALSE
+Burkina Faso,51,9813,FALSE
+Burkina Faso,53,6581.96824,TRUE
+Burkina Faso,77,5993.147024,TRUE
+Burkina Faso,213,124295.9159,TRUE
+Burkina Faso,228,133880.2683,TRUE
+Burkina Faso,269,15171.62496,TRUE
+Burkina Faso,296,120111,FALSE
+Burkina Faso,175,92118,FALSE
+Burkina Faso,12,36715.19395,TRUE
+Burkina Faso,13,74728.86082,TRUE
+Burkina Faso,108,12577.92841,TRUE
+Burkina Faso,165,14797.07017,TRUE
+Burkina Faso,215,105585.0293,TRUE
+Burkina Faso,261,8946.089355,TRUE
+Burkina Faso,281,136069.2843,TRUE
+Burkina Faso,302,27087.34387,TRUE
+Burkina Faso,310,36133,TRUE
+Burkina Faso,106,13595.99028,TRUE
+Burkina Faso,30,62885.73079,TRUE
+Burkina Faso,91,126485.3041,TRUE
+Burkina Faso,192,3780098.195,TRUE
+Burkina Faso,249,70032.42373,TRUE
+Burkina Faso,308,35296.76443,TRUE
+Burkina Faso,116,98484.54468,TRUE
+Burkina Faso,234,8162.890747,TRUE
+Burkina Faso,88,138218.959,TRUE
+Burkina Faso,227,9358.848173,TRUE
+Burkina Faso,8,21599.0332,TRUE
+Burkina Faso,115,186672.4488,TRUE
+Burkina Faso,146,28645.96233,TRUE
+Burkina Faso,257,14862.84549,TRUE
+Burkina Faso,39,10075.63454,TRUE
+Burkina Faso,61,218943.5096,TRUE
+Burkina Faso,76,100326.9844,TRUE
+Burkina Faso,268,13570,FALSE
+Burkina Faso,194,9390.783666,TRUE
+Burkina Faso,198,5299.135169,TRUE
+Burkina Faso,245,11957.75,TRUE
+Burkina Faso,86,4799,FALSE
+Burkina Faso,247,27947.125,TRUE
+Burkina Faso,15,11142,FALSE
+Burkina Faso,135,5719.346191,TRUE
+Burkina Faso,65,4252.65625,TRUE
+Burkina Faso,70,8796.273438,TRUE
+Burkina Faso,314,4472.643433,TRUE
+Burkina Faso,133,6124.625,TRUE
+Burkina Faso,240,4373.4375,TRUE
+Burkina Faso,148,23186,TRUE
+Burkina Faso,31,5157,TRUE
+Burundi,4,20977.52128,TRUE
+Burundi,5,7484.490489,TRUE
+Burundi,7,111437.9893,TRUE
+Burundi,8,47030.54376,TRUE
+Burundi,17,33099.94094,TRUE
+Burundi,105,149702.6633,TRUE
+Burundi,120,115713.1489,TRUE
+Burundi,161,8730.264786,TRUE
+Burundi,169,13188,FALSE
+Burundi,179,121608.9919,TRUE
+Burundi,180,11124,FALSE
+Burundi,203,26179.47154,TRUE
+Burundi,205,158255.8483,TRUE
+Burundi,208,84004.18102,TRUE
+Burundi,219,80605.62094,TRUE
+Burundi,221,53059.48552,TRUE
+Burundi,229,16244.65912,TRUE
+Burundi,231,60255.26389,TRUE
+Burundi,235,97626,FALSE
+Burundi,254,23001,FALSE
+Burundi,84,6802,FALSE
+Burundi,267,9372.487582,TRUE
+Burundi,282,423220.8453,TRUE
+Burundi,286,727535,FALSE
+Burundi,289,9979.922823,TRUE
+Burundi,316,72255.87156,TRUE
+Burundi,317,188762.6372,TRUE
+Burundi,318,6827,FALSE
+Burundi,18,17835,FALSE
+Burundi,19,77366.60983,TRUE
+Burundi,33,30270.38924,TRUE
+Burundi,40,180987.6885,TRUE
+Burundi,49,247408.5214,TRUE
+Burundi,54,175365.1249,TRUE
+Burundi,58,74040.89691,TRUE
+Burundi,59,22326.21725,TRUE
+Burundi,63,234336.5313,TRUE
+Burundi,90,194487.8189,TRUE
+Burundi,94,61002.28577,TRUE
+Burundi,101,138512.4356,TRUE
+Burundi,112,122104.9439,TRUE
+Burundi,138,17125.18189,TRUE
+Burundi,152,119704.6269,TRUE
+Burundi,154,96782.90416,TRUE
+Burundi,158,96473.15601,TRUE
+Burundi,200,22918.25267,TRUE
+Burundi,202,85300.04797,TRUE
+Burundi,206,183393.7134,TRUE
+Burundi,218,52990.31222,TRUE
+Burundi,238,116960.1876,TRUE
+Burundi,243,112174.5654,TRUE
+Burundi,259,55616.6005,TRUE
+Burundi,276,8206,FALSE
+Burundi,279,177754.1672,TRUE
+Burundi,298,120463.1286,TRUE
+Burundi,305,6512,FALSE
+Burundi,306,131681.4608,TRUE
+Burundi,11,178064.2799,TRUE
+Burundi,16,46668,FALSE
+Burundi,48,27222.34375,TRUE
+Burundi,60,22383.25858,TRUE
+Burundi,63,11715.28525,TRUE
+Burundi,121,115777.4722,TRUE
+Burundi,128,5378,FALSE
+Burundi,156,10200.29705,TRUE
+Burundi,217,22986,FALSE
+Burundi,248,14225.32829,TRUE
+Burundi,270,19694,FALSE
+Burundi,52,84585,FALSE
+Burundi,74,4541.36112,TRUE
+Burundi,75,47178.96176,TRUE
+Burundi,80,49992.57574,TRUE
+Burundi,301,98114,FALSE
+Burundi,319,69528,FALSE
+Burundi,51,26504.47085,TRUE
+Burundi,53,6581.96824,TRUE
+Burundi,77,8525,FALSE
+Burundi,213,98929,FALSE
+Burundi,228,133880.2683,TRUE
+Burundi,269,15171.62496,TRUE
+Burundi,296,56876,FALSE
+Burundi,175,70802.39066,TRUE
+Burundi,12,36715.19395,TRUE
+Burundi,13,74728.86082,TRUE
+Burundi,108,12577.92841,TRUE
+Burundi,165,14797.07017,TRUE
+Burundi,215,105585.0293,TRUE
+Burundi,261,8946.089355,TRUE
+Burundi,281,136069.2843,TRUE
+Burundi,302,43812,FALSE
+Burundi,310,36133,TRUE
+Burundi,106,13595.99028,TRUE
+Burundi,30,62885.73079,TRUE
+Burundi,91,126485.3041,TRUE
+Burundi,192,3780098.195,TRUE
+Burundi,249,70032.42373,TRUE
+Burundi,308,35296.76443,TRUE
+Burundi,116,98484.54468,TRUE
+Burundi,234,8162.890747,TRUE
+Burundi,88,138218.959,TRUE
+Burundi,227,12290,FALSE
+Burundi,8,21599.0332,TRUE
+Burundi,115,186672.4488,TRUE
+Burundi,146,28645.96233,TRUE
+Burundi,257,14862.84549,TRUE
+Burundi,39,10075.63454,TRUE
+Burundi,61,218943.5096,TRUE
+Burundi,76,100326.9844,TRUE
+Burundi,268,27005.25,TRUE
+Burundi,194,9390.783666,TRUE
+Burundi,198,5299.135169,TRUE
+Burundi,245,11957.75,TRUE
+Burundi,86,15341.61704,TRUE
+Burundi,247,27947.125,TRUE
+Burundi,15,5922.875,TRUE
+Burundi,135,5719.346191,TRUE
+Burundi,65,4252.65625,TRUE
+Burundi,70,8796.273438,TRUE
+Burundi,314,4472.643433,TRUE
+Burundi,133,6124.625,TRUE
+Burundi,240,4373.4375,TRUE
+Burundi,148,23186,TRUE
+Burundi,31,5157,TRUE
+Cabo Verde,4,20977.52128,TRUE
+Cabo Verde,5,7484.490489,TRUE
+Cabo Verde,7,111437.9893,TRUE
+Cabo Verde,8,47030.54376,TRUE
+Cabo Verde,17,33099.94094,TRUE
+Cabo Verde,105,149702.6633,TRUE
+Cabo Verde,120,115713.1489,TRUE
+Cabo Verde,161,8730.264786,TRUE
+Cabo Verde,169,1780,FALSE
+Cabo Verde,179,121608.9919,TRUE
+Cabo Verde,180,7520.279265,TRUE
+Cabo Verde,203,26179.47154,TRUE
+Cabo Verde,205,213223,FALSE
+Cabo Verde,208,84004.18102,TRUE
+Cabo Verde,219,80605.62094,TRUE
+Cabo Verde,221,53059.48552,TRUE
+Cabo Verde,229,16244.65912,TRUE
+Cabo Verde,231,60255.26389,TRUE
+Cabo Verde,235,72993,FALSE
+Cabo Verde,254,26952.37295,TRUE
+Cabo Verde,84,9355.713607,TRUE
+Cabo Verde,267,9372.487582,TRUE
+Cabo Verde,282,423220.8453,TRUE
+Cabo Verde,286,218881,FALSE
+Cabo Verde,289,9979.922823,TRUE
+Cabo Verde,316,72255.87156,TRUE
+Cabo Verde,317,200051,FALSE
+Cabo Verde,318,32261.2753,TRUE
+Cabo Verde,18,11273.75269,TRUE
+Cabo Verde,19,47788,FALSE
+Cabo Verde,33,30270.38924,TRUE
+Cabo Verde,40,161563,FALSE
+Cabo Verde,49,210578,FALSE
+Cabo Verde,54,87727,FALSE
+Cabo Verde,58,74040.89691,TRUE
+Cabo Verde,59,22326.21725,TRUE
+Cabo Verde,63,126520,FALSE
+Cabo Verde,90,220950,FALSE
+Cabo Verde,94,61002.28577,TRUE
+Cabo Verde,101,138512.4356,TRUE
+Cabo Verde,112,50513,FALSE
+Cabo Verde,138,17125.18189,TRUE
+Cabo Verde,152,119704.6269,TRUE
+Cabo Verde,154,96782.90416,TRUE
+Cabo Verde,158,76987,FALSE
+Cabo Verde,200,22918.25267,TRUE
+Cabo Verde,202,85300.04797,TRUE
+Cabo Verde,206,183393.7134,TRUE
+Cabo Verde,218,52990.31222,TRUE
+Cabo Verde,238,70453,FALSE
+Cabo Verde,243,112174.5654,TRUE
+Cabo Verde,259,55616.6005,TRUE
+Cabo Verde,276,10950.60863,TRUE
+Cabo Verde,279,177754.1672,TRUE
+Cabo Verde,298,120463.1286,TRUE
+Cabo Verde,305,15590.0347,TRUE
+Cabo Verde,306,109366,FALSE
+Cabo Verde,11,178064.2799,TRUE
+Cabo Verde,16,86572,FALSE
+Cabo Verde,48,27222.34375,TRUE
+Cabo Verde,60,22383.25858,TRUE
+Cabo Verde,63,126520,FALSE
+Cabo Verde,121,115777.4722,TRUE
+Cabo Verde,128,5236,FALSE
+Cabo Verde,156,10200.29705,TRUE
+Cabo Verde,217,21196.4891,TRUE
+Cabo Verde,248,14225.32829,TRUE
+Cabo Verde,270,9151.63574,TRUE
+Cabo Verde,52,123794,FALSE
+Cabo Verde,74,4541.36112,TRUE
+Cabo Verde,75,31881,FALSE
+Cabo Verde,80,49992.57574,TRUE
+Cabo Verde,301,113987.8459,TRUE
+Cabo Verde,319,89190.44102,TRUE
+Cabo Verde,51,26504.47085,TRUE
+Cabo Verde,53,8050,FALSE
+Cabo Verde,77,2271,FALSE
+Cabo Verde,213,124295.9159,TRUE
+Cabo Verde,228,133880.2683,TRUE
+Cabo Verde,269,15171.62496,TRUE
+Cabo Verde,296,22909,FALSE
+Cabo Verde,175,229062,FALSE
+Cabo Verde,12,36715.19395,TRUE
+Cabo Verde,13,74728.86082,TRUE
+Cabo Verde,108,12577.92841,TRUE
+Cabo Verde,165,14797.07017,TRUE
+Cabo Verde,215,105585.0293,TRUE
+Cabo Verde,261,8946.089355,TRUE
+Cabo Verde,281,136069.2843,TRUE
+Cabo Verde,302,27087.34387,TRUE
+Cabo Verde,310,36133,TRUE
+Cabo Verde,106,13595.99028,TRUE
+Cabo Verde,30,62885.73079,TRUE
+Cabo Verde,91,126485.3041,TRUE
+Cabo Verde,192,3780098.195,TRUE
+Cabo Verde,249,70032.42373,TRUE
+Cabo Verde,308,35296.76443,TRUE
+Cabo Verde,116,98484.54468,TRUE
+Cabo Verde,234,8162.890747,TRUE
+Cabo Verde,88,138218.959,TRUE
+Cabo Verde,227,9358.848173,TRUE
+Cabo Verde,8,21599.0332,TRUE
+Cabo Verde,115,186672.4488,TRUE
+Cabo Verde,146,28645.96233,TRUE
+Cabo Verde,257,14862.84549,TRUE
+Cabo Verde,39,10075.63454,TRUE
+Cabo Verde,61,218943.5096,TRUE
+Cabo Verde,76,100326.9844,TRUE
+Cabo Verde,268,27005.25,TRUE
+Cabo Verde,194,9390.783666,TRUE
+Cabo Verde,198,5299.135169,TRUE
+Cabo Verde,245,11957.75,TRUE
+Cabo Verde,86,15341.61704,TRUE
+Cabo Verde,247,27947.125,TRUE
+Cabo Verde,15,5922.875,TRUE
+Cabo Verde,135,5719.346191,TRUE
+Cabo Verde,65,4252.65625,TRUE
+Cabo Verde,70,8796.273438,TRUE
+Cabo Verde,314,4472.643433,TRUE
+Cabo Verde,133,6124.625,TRUE
+Cabo Verde,240,4373.4375,TRUE
+Cabo Verde,148,23186,TRUE
+Cabo Verde,31,5157,TRUE
+Cambodia,4,20977.52128,TRUE
+Cambodia,5,7484.490489,TRUE
+Cambodia,7,111437.9893,TRUE
+Cambodia,8,47030.54376,TRUE
+Cambodia,17,33099.94094,TRUE
+Cambodia,105,149702.6633,TRUE
+Cambodia,120,115713.1489,TRUE
+Cambodia,161,8730.264786,TRUE
+Cambodia,169,46947,FALSE
+Cambodia,179,121608.9919,TRUE
+Cambodia,180,7520.279265,TRUE
+Cambodia,203,26179.47154,TRUE
+Cambodia,205,158255.8483,TRUE
+Cambodia,208,56740,FALSE
+Cambodia,219,80605.62094,TRUE
+Cambodia,221,53059.48552,TRUE
+Cambodia,229,16244.65912,TRUE
+Cambodia,231,60255.26389,TRUE
+Cambodia,235,172280.9273,TRUE
+Cambodia,254,34277,FALSE
+Cambodia,84,13257,FALSE
+Cambodia,267,7436,FALSE
+Cambodia,282,423220.8453,TRUE
+Cambodia,286,223055,FALSE
+Cambodia,289,9979.922823,TRUE
+Cambodia,316,72255.87156,TRUE
+Cambodia,317,188762.6372,TRUE
+Cambodia,318,32261.2753,TRUE
+Cambodia,18,11853,FALSE
+Cambodia,19,77366.60983,TRUE
+Cambodia,33,30270.38924,TRUE
+Cambodia,40,180987.6885,TRUE
+Cambodia,49,247408.5214,TRUE
+Cambodia,54,175365.1249,TRUE
+Cambodia,58,74040.89691,TRUE
+Cambodia,59,22326.21725,TRUE
+Cambodia,63,9129,FALSE
+Cambodia,90,194487.8189,TRUE
+Cambodia,94,61002.28577,TRUE
+Cambodia,101,138512.4356,TRUE
+Cambodia,112,122104.9439,TRUE
+Cambodia,138,17125.18189,TRUE
+Cambodia,152,119704.6269,TRUE
+Cambodia,154,93245,FALSE
+Cambodia,158,96473.15601,TRUE
+Cambodia,200,22918.25267,TRUE
+Cambodia,202,85300.04797,TRUE
+Cambodia,206,183393.7134,TRUE
+Cambodia,218,52990.31222,TRUE
+Cambodia,238,116960.1876,TRUE
+Cambodia,243,112174.5654,TRUE
+Cambodia,259,55616.6005,TRUE
+Cambodia,276,15882,FALSE
+Cambodia,279,177754.1672,TRUE
+Cambodia,298,120463.1286,TRUE
+Cambodia,305,18014,FALSE
+Cambodia,306,131681.4608,TRUE
+Cambodia,11,178064.2799,TRUE
+Cambodia,16,44114,FALSE
+Cambodia,48,27222.34375,TRUE
+Cambodia,60,22383.25858,TRUE
+Cambodia,63,9129,FALSE
+Cambodia,121,103985,FALSE
+Cambodia,128,15873,FALSE
+Cambodia,156,10200.29705,TRUE
+Cambodia,217,21196.4891,TRUE
+Cambodia,248,14225.32829,TRUE
+Cambodia,270,9151.63574,TRUE
+Cambodia,52,263302,FALSE
+Cambodia,74,4541.36112,TRUE
+Cambodia,75,52754,FALSE
+Cambodia,80,49992.57574,TRUE
+Cambodia,301,113987.8459,TRUE
+Cambodia,319,89190.44102,TRUE
+Cambodia,51,26504.47085,TRUE
+Cambodia,53,9103,FALSE
+Cambodia,77,7953,FALSE
+Cambodia,213,91237,FALSE
+Cambodia,228,104529,FALSE
+Cambodia,269,15171.62496,TRUE
+Cambodia,296,49996,FALSE
+Cambodia,175,140610,FALSE
+Cambodia,12,36715.19395,TRUE
+Cambodia,13,74728.86082,TRUE
+Cambodia,108,12577.92841,TRUE
+Cambodia,165,14797.07017,TRUE
+Cambodia,215,105585.0293,TRUE
+Cambodia,261,8946.089355,TRUE
+Cambodia,281,136069.2843,TRUE
+Cambodia,302,27087.34387,TRUE
+Cambodia,310,36133,TRUE
+Cambodia,106,13595.99028,TRUE
+Cambodia,30,62885.73079,TRUE
+Cambodia,91,126485.3041,TRUE
+Cambodia,192,3780098.195,TRUE
+Cambodia,249,70032.42373,TRUE
+Cambodia,308,35296.76443,TRUE
+Cambodia,116,98484.54468,TRUE
+Cambodia,234,8162.890747,TRUE
+Cambodia,88,138218.959,TRUE
+Cambodia,227,9358.848173,TRUE
+Cambodia,8,21599.0332,TRUE
+Cambodia,115,186672.4488,TRUE
+Cambodia,146,10525,FALSE
+Cambodia,257,10316,FALSE
+Cambodia,39,10075.63454,TRUE
+Cambodia,61,218943.5096,TRUE
+Cambodia,76,100326.9844,TRUE
+Cambodia,268,27005.25,TRUE
+Cambodia,194,9390.783666,TRUE
+Cambodia,198,5299.135169,TRUE
+Cambodia,245,11957.75,TRUE
+Cambodia,86,15341.61704,TRUE
+Cambodia,247,27947.125,TRUE
+Cambodia,15,5922.875,TRUE
+Cambodia,135,5719.346191,TRUE
+Cambodia,65,4252.65625,TRUE
+Cambodia,70,8796.273438,TRUE
+Cambodia,314,4472.643433,TRUE
+Cambodia,133,6124.625,TRUE
+Cambodia,240,4373.4375,TRUE
+Cambodia,148,23186,TRUE
+Cambodia,31,5157,TRUE
+Cameroon,4,20977.52128,TRUE
+Cameroon,5,7484.490489,TRUE
+Cameroon,7,111437.9893,TRUE
+Cameroon,8,50227,FALSE
+Cameroon,17,33099.94094,TRUE
+Cameroon,105,26788,FALSE
+Cameroon,120,115713.1489,TRUE
+Cameroon,161,8730.264786,TRUE
+Cameroon,169,17929,FALSE
+Cameroon,179,93534,FALSE
+Cameroon,180,13980,FALSE
+Cameroon,203,26179.47154,TRUE
+Cameroon,205,121149,FALSE
+Cameroon,208,84004.18102,TRUE
+Cameroon,219,64803,FALSE
+Cameroon,221,53059.48552,TRUE
+Cameroon,229,16244.65912,TRUE
+Cameroon,231,45512,FALSE
+Cameroon,235,158551,FALSE
+Cameroon,254,13011,FALSE
+Cameroon,84,11111,FALSE
+Cameroon,267,13128,FALSE
+Cameroon,282,423220.8453,TRUE
+Cameroon,286,94771,FALSE
+Cameroon,289,9979.922823,TRUE
+Cameroon,316,72255.87156,TRUE
+Cameroon,317,231906,FALSE
+Cameroon,318,13316,FALSE
+Cameroon,18,13021,FALSE
+Cameroon,19,59116,FALSE
+Cameroon,33,14646,FALSE
+Cameroon,40,234044,FALSE
+Cameroon,49,247408.5214,TRUE
+Cameroon,54,175365.1249,TRUE
+Cameroon,58,74040.89691,TRUE
+Cameroon,59,10119,FALSE
+Cameroon,63,25527,FALSE
+Cameroon,90,9427,FALSE
+Cameroon,94,37191,FALSE
+Cameroon,101,64437,FALSE
+Cameroon,112,122104.9439,TRUE
+Cameroon,138,17125.18189,TRUE
+Cameroon,152,119704.6269,TRUE
+Cameroon,154,96782.90416,TRUE
+Cameroon,158,96473.15601,TRUE
+Cameroon,200,22918.25267,TRUE
+Cameroon,202,27198,FALSE
+Cameroon,206,183393.7134,TRUE
+Cameroon,218,52990.31222,TRUE
+Cameroon,238,11872,FALSE
+Cameroon,243,112174.5654,TRUE
+Cameroon,259,55616.6005,TRUE
+Cameroon,276,13750,FALSE
+Cameroon,279,177754.1672,TRUE
+Cameroon,298,120463.1286,TRUE
+Cameroon,305,13650,FALSE
+Cameroon,306,127622,FALSE
+Cameroon,11,178064.2799,TRUE
+Cameroon,16,164119,FALSE
+Cameroon,48,27222.34375,TRUE
+Cameroon,60,22383.25858,TRUE
+Cameroon,63,25527,FALSE
+Cameroon,121,115777.4722,TRUE
+Cameroon,128,16475,FALSE
+Cameroon,156,10200.29705,TRUE
+Cameroon,217,21196.4891,TRUE
+Cameroon,248,14225.32829,TRUE
+Cameroon,270,15646,FALSE
+Cameroon,52,146849,FALSE
+Cameroon,74,4027,FALSE
+Cameroon,75,29889,FALSE
+Cameroon,80,49992.57574,TRUE
+Cameroon,301,74683,FALSE
+Cameroon,319,110863,FALSE
+Cameroon,51,26504.47085,TRUE
+Cameroon,53,6581.96824,TRUE
+Cameroon,77,3161,FALSE
+Cameroon,213,185049,FALSE
+Cameroon,228,349768,FALSE
+Cameroon,269,15171.62496,TRUE
+Cameroon,296,61210,FALSE
+Cameroon,175,57296,FALSE
+Cameroon,12,36715.19395,TRUE
+Cameroon,13,41863,FALSE
+Cameroon,108,12577.92841,TRUE
+Cameroon,165,14797.07017,TRUE
+Cameroon,215,105585.0293,TRUE
+Cameroon,261,8946.089355,TRUE
+Cameroon,281,136069.2843,TRUE
+Cameroon,302,27526,FALSE
+Cameroon,310,36133,TRUE
+Cameroon,106,10713,FALSE
+Cameroon,30,62885.73079,TRUE
+Cameroon,91,126485.3041,TRUE
+Cameroon,192,3780098.195,TRUE
+Cameroon,249,70032.42373,TRUE
+Cameroon,308,35296.76443,TRUE
+Cameroon,116,98484.54468,TRUE
+Cameroon,234,8162.890747,TRUE
+Cameroon,88,138218.959,TRUE
+Cameroon,227,9358.848173,TRUE
+Cameroon,8,50227,FALSE
+Cameroon,115,98280,FALSE
+Cameroon,146,4091,FALSE
+Cameroon,257,9177,FALSE
+Cameroon,39,10075.63454,TRUE
+Cameroon,61,218943.5096,TRUE
+Cameroon,76,100326.9844,TRUE
+Cameroon,268,27005.25,TRUE
+Cameroon,194,9390.783666,TRUE
+Cameroon,198,5299.135169,TRUE
+Cameroon,245,11957.75,TRUE
+Cameroon,86,8920,FALSE
+Cameroon,247,27947.125,TRUE
+Cameroon,15,8104,FALSE
+Cameroon,135,5719.346191,TRUE
+Cameroon,65,4252.65625,TRUE
+Cameroon,70,8796.273438,TRUE
+Cameroon,314,4472.643433,TRUE
+Cameroon,133,6124.625,TRUE
+Cameroon,240,4373.4375,TRUE
+Cameroon,148,23186,TRUE
+Cameroon,31,5157,TRUE
+Canada,4,20977.52128,TRUE
+Canada,5,8995,FALSE
+Canada,7,248193,FALSE
+Canada,8,69707,FALSE
+Canada,17,37249,FALSE
+Canada,105,149702.6633,TRUE
+Canada,120,76165,FALSE
+Canada,161,17130,FALSE
+Canada,169,93719,FALSE
+Canada,179,273645,FALSE
+Canada,180,7520.279265,TRUE
+Canada,203,26179.47154,TRUE
+Canada,205,409020,FALSE
+Canada,208,84004.18102,TRUE
+Canada,219,101225,FALSE
+Canada,221,124245,FALSE
+Canada,229,16244.65912,TRUE
+Canada,231,74536,FALSE
+Canada,235,126285,FALSE
+Canada,254,26952.37295,TRUE
+Canada,84,9355.713607,TRUE
+Canada,267,9372.487582,TRUE
+Canada,282,649630,FALSE
+Canada,286,760050.6713,TRUE
+Canada,289,19455,FALSE
+Canada,316,72255.87156,TRUE
+Canada,317,404783,FALSE
+Canada,318,32917,FALSE
+Canada,18,22570,FALSE
+Canada,19,61907,FALSE
+Canada,33,30270.38924,TRUE
+Canada,40,263889,FALSE
+Canada,49,454186,FALSE
+Canada,54,179453,FALSE
+Canada,58,91862,FALSE
+Canada,59,22326.21725,TRUE
+Canada,63,280514,FALSE
+Canada,90,242843,FALSE
+Canada,94,61002.28577,TRUE
+Canada,101,138512.4356,TRUE
+Canada,112,16043,FALSE
+Canada,138,17125.18189,TRUE
+Canada,152,184718,FALSE
+Canada,154,96782.90416,TRUE
+Canada,158,261510,FALSE
+Canada,200,32572,FALSE
+Canada,202,85300.04797,TRUE
+Canada,206,183393.7134,TRUE
+Canada,218,47433,FALSE
+Canada,238,192888,FALSE
+Canada,243,112174.5654,TRUE
+Canada,259,29160,FALSE
+Canada,276,26602,FALSE
+Canada,279,94255,FALSE
+Canada,298,120463.1286,TRUE
+Canada,305,27898,FALSE
+Canada,306,722309,FALSE
+Canada,11,178064.2799,TRUE
+Canada,16,74389.59543,TRUE
+Canada,48,27222.34375,TRUE
+Canada,60,17876,FALSE
+Canada,63,280514,FALSE
+Canada,121,115777.4722,TRUE
+Canada,128,9353.124815,TRUE
+Canada,156,14867,FALSE
+Canada,217,27169,FALSE
+Canada,248,23057,FALSE
+Canada,270,9151.63574,TRUE
+Canada,52,72720.10141,TRUE
+Canada,74,4541.36112,TRUE
+Canada,75,47178.96176,TRUE
+Canada,80,107898,FALSE
+Canada,301,113987.8459,TRUE
+Canada,319,89190.44102,TRUE
+Canada,51,26504.47085,TRUE
+Canada,53,6581.96824,TRUE
+Canada,77,5993.147024,TRUE
+Canada,213,124295.9159,TRUE
+Canada,228,133880.2683,TRUE
+Canada,269,15171.62496,TRUE
+Canada,296,43692.55808,TRUE
+Canada,175,70802.39066,TRUE
+Canada,12,51585,FALSE
+Canada,13,74728.86082,TRUE
+Canada,108,12577.92841,TRUE
+Canada,165,14797.07017,TRUE
+Canada,215,105585.0293,TRUE
+Canada,261,8946.089355,TRUE
+Canada,281,76226,FALSE
+Canada,302,27087.34387,TRUE
+Canada,310,36133,TRUE
+Canada,106,13595.99028,TRUE
+Canada,30,32776,FALSE
+Canada,91,126485.3041,TRUE
+Canada,192,3780098.195,TRUE
+Canada,249,52185,FALSE
+Canada,308,30977,FALSE
+Canada,116,98484.54468,TRUE
+Canada,234,8162.890747,TRUE
+Canada,88,216577,FALSE
+Canada,227,9358.848173,TRUE
+Canada,8,69707,FALSE
+Canada,115,186672.4488,TRUE
+Canada,146,28645.96233,TRUE
+Canada,257,14862.84549,TRUE
+Canada,39,10329,FALSE
+Canada,61,218943.5096,TRUE
+Canada,76,100326.9844,TRUE
+Canada,268,27005.25,TRUE
+Canada,194,12096,FALSE
+Canada,198,5299.135169,TRUE
+Canada,245,11957.75,TRUE
+Canada,86,15341.61704,TRUE
+Canada,247,27947.125,TRUE
+Canada,15,5922.875,TRUE
+Canada,135,5719.346191,TRUE
+Canada,65,4252.65625,TRUE
+Canada,70,8796.273438,TRUE
+Canada,314,4472.643433,TRUE
+Canada,133,6124.625,TRUE
+Canada,240,4373.4375,TRUE
+Canada,148,23186,TRUE
+Canada,31,5157,TRUE
+Cayman Islands,4,20977.52128,TRUE
+Cayman Islands,5,7484.490489,TRUE
+Cayman Islands,7,111437.9893,TRUE
+Cayman Islands,8,47030.54376,TRUE
+Cayman Islands,17,33099.94094,TRUE
+Cayman Islands,105,149702.6633,TRUE
+Cayman Islands,120,115713.1489,TRUE
+Cayman Islands,161,8730.264786,TRUE
+Cayman Islands,169,16777.49735,TRUE
+Cayman Islands,179,121608.9919,TRUE
+Cayman Islands,180,7520.279265,TRUE
+Cayman Islands,203,26179.47154,TRUE
+Cayman Islands,205,158255.8483,TRUE
+Cayman Islands,208,84004.18102,TRUE
+Cayman Islands,219,80605.62094,TRUE
+Cayman Islands,221,53059.48552,TRUE
+Cayman Islands,229,16244.65912,TRUE
+Cayman Islands,231,60255.26389,TRUE
+Cayman Islands,235,172280.9273,TRUE
+Cayman Islands,254,26952.37295,TRUE
+Cayman Islands,84,9355.713607,TRUE
+Cayman Islands,267,9372.487582,TRUE
+Cayman Islands,282,423220.8453,TRUE
+Cayman Islands,286,760050.6713,TRUE
+Cayman Islands,289,9979.922823,TRUE
+Cayman Islands,316,72255.87156,TRUE
+Cayman Islands,317,188762.6372,TRUE
+Cayman Islands,318,32261.2753,TRUE
+Cayman Islands,18,11273.75269,TRUE
+Cayman Islands,19,77366.60983,TRUE
+Cayman Islands,33,30270.38924,TRUE
+Cayman Islands,40,180987.6885,TRUE
+Cayman Islands,49,247408.5214,TRUE
+Cayman Islands,54,175365.1249,TRUE
+Cayman Islands,58,74040.89691,TRUE
+Cayman Islands,59,22326.21725,TRUE
+Cayman Islands,63,234336.5313,TRUE
+Cayman Islands,90,194487.8189,TRUE
+Cayman Islands,94,61002.28577,TRUE
+Cayman Islands,101,138512.4356,TRUE
+Cayman Islands,112,122104.9439,TRUE
+Cayman Islands,138,17125.18189,TRUE
+Cayman Islands,152,119704.6269,TRUE
+Cayman Islands,154,96782.90416,TRUE
+Cayman Islands,158,96473.15601,TRUE
+Cayman Islands,200,22918.25267,TRUE
+Cayman Islands,202,85300.04797,TRUE
+Cayman Islands,206,183393.7134,TRUE
+Cayman Islands,218,52990.31222,TRUE
+Cayman Islands,238,29866,FALSE
+Cayman Islands,243,112174.5654,TRUE
+Cayman Islands,259,55616.6005,TRUE
+Cayman Islands,276,10950.60863,TRUE
+Cayman Islands,279,177754.1672,TRUE
+Cayman Islands,298,120463.1286,TRUE
+Cayman Islands,305,15590.0347,TRUE
+Cayman Islands,306,71639,FALSE
+Cayman Islands,11,178064.2799,TRUE
+Cayman Islands,16,7233,FALSE
+Cayman Islands,48,27222.34375,TRUE
+Cayman Islands,60,22383.25858,TRUE
+Cayman Islands,63,11715.28525,TRUE
+Cayman Islands,121,115777.4722,TRUE
+Cayman Islands,128,9353.124815,TRUE
+Cayman Islands,156,10200.29705,TRUE
+Cayman Islands,217,21196.4891,TRUE
+Cayman Islands,248,14225.32829,TRUE
+Cayman Islands,270,9151.63574,TRUE
+Cayman Islands,52,31439,FALSE
+Cayman Islands,74,4541.36112,TRUE
+Cayman Islands,75,47178.96176,TRUE
+Cayman Islands,80,49992.57574,TRUE
+Cayman Islands,301,113987.8459,TRUE
+Cayman Islands,319,34738,FALSE
+Cayman Islands,51,26504.47085,TRUE
+Cayman Islands,53,6581.96824,TRUE
+Cayman Islands,77,5993.147024,TRUE
+Cayman Islands,213,124295.9159,TRUE
+Cayman Islands,228,133880.2683,TRUE
+Cayman Islands,269,15171.62496,TRUE
+Cayman Islands,296,30036,FALSE
+Cayman Islands,175,70802.39066,TRUE
+Cayman Islands,12,36715.19395,TRUE
+Cayman Islands,13,74728.86082,TRUE
+Cayman Islands,108,12577.92841,TRUE
+Cayman Islands,165,14797.07017,TRUE
+Cayman Islands,215,105585.0293,TRUE
+Cayman Islands,261,8946.089355,TRUE
+Cayman Islands,281,136069.2843,TRUE
+Cayman Islands,302,27087.34387,TRUE
+Cayman Islands,310,36133,TRUE
+Cayman Islands,106,13595.99028,TRUE
+Cayman Islands,30,62885.73079,TRUE
+Cayman Islands,91,126485.3041,TRUE
+Cayman Islands,192,3780098.195,TRUE
+Cayman Islands,249,70032.42373,TRUE
+Cayman Islands,308,35296.76443,TRUE
+Cayman Islands,116,98484.54468,TRUE
+Cayman Islands,234,8162.890747,TRUE
+Cayman Islands,88,138218.959,TRUE
+Cayman Islands,227,9358.848173,TRUE
+Cayman Islands,8,21599.0332,TRUE
+Cayman Islands,115,186672.4488,TRUE
+Cayman Islands,146,28645.96233,TRUE
+Cayman Islands,257,14862.84549,TRUE
+Cayman Islands,39,10075.63454,TRUE
+Cayman Islands,61,218943.5096,TRUE
+Cayman Islands,76,100326.9844,TRUE
+Cayman Islands,268,27005.25,TRUE
+Cayman Islands,194,9390.783666,TRUE
+Cayman Islands,198,5299.135169,TRUE
+Cayman Islands,245,11957.75,TRUE
+Cayman Islands,86,15341.61704,TRUE
+Cayman Islands,247,27947.125,TRUE
+Cayman Islands,15,5922.875,TRUE
+Cayman Islands,135,5719.346191,TRUE
+Cayman Islands,65,4252.65625,TRUE
+Cayman Islands,70,8796.273438,TRUE
+Cayman Islands,314,4472.643433,TRUE
+Cayman Islands,133,6124.625,TRUE
+Cayman Islands,240,4373.4375,TRUE
+Cayman Islands,148,23186,TRUE
+Cayman Islands,31,5157,TRUE
+Central African Republic,4,20977.52128,TRUE
+Central African Republic,5,7484.490489,TRUE
+Central African Republic,7,111437.9893,TRUE
+Central African Republic,8,47030.54376,TRUE
+Central African Republic,17,33099.94094,TRUE
+Central African Republic,105,149702.6633,TRUE
+Central African Republic,120,115713.1489,TRUE
+Central African Republic,161,8730.264786,TRUE
+Central African Republic,169,8000,FALSE
+Central African Republic,179,121608.9919,TRUE
+Central African Republic,180,10855,FALSE
+Central African Republic,203,26179.47154,TRUE
+Central African Republic,205,158255.8483,TRUE
+Central African Republic,208,43561,FALSE
+Central African Republic,219,80605.62094,TRUE
+Central African Republic,221,53059.48552,TRUE
+Central African Republic,229,16244.65912,TRUE
+Central African Republic,231,60255.26389,TRUE
+Central African Republic,235,8052,FALSE
+Central African Republic,254,14792,FALSE
+Central African Republic,84,4769,FALSE
+Central African Republic,267,2402,FALSE
+Central African Republic,282,423220.8453,TRUE
+Central African Republic,286,55778,FALSE
+Central African Republic,289,9979.922823,TRUE
+Central African Republic,316,72255.87156,TRUE
+Central African Republic,317,188762.6372,TRUE
+Central African Republic,318,32261.2753,TRUE
+Central African Republic,18,11273.75269,TRUE
+Central African Republic,19,77366.60983,TRUE
+Central African Republic,33,30270.38924,TRUE
+Central African Republic,40,180987.6885,TRUE
+Central African Republic,49,247408.5214,TRUE
+Central African Republic,54,175365.1249,TRUE
+Central African Republic,58,74040.89691,TRUE
+Central African Republic,59,22326.21725,TRUE
+Central African Republic,63,12967,FALSE
+Central African Republic,90,194487.8189,TRUE
+Central African Republic,94,61002.28577,TRUE
+Central African Republic,101,138512.4356,TRUE
+Central African Republic,112,122104.9439,TRUE
+Central African Republic,138,17125.18189,TRUE
+Central African Republic,152,119704.6269,TRUE
+Central African Republic,154,51008,FALSE
+Central African Republic,158,96473.15601,TRUE
+Central African Republic,200,22918.25267,TRUE
+Central African Republic,202,85300.04797,TRUE
+Central African Republic,206,183393.7134,TRUE
+Central African Republic,218,52990.31222,TRUE
+Central African Republic,238,62303,FALSE
+Central African Republic,243,112174.5654,TRUE
+Central African Republic,259,55616.6005,TRUE
+Central African Republic,276,10950.60863,TRUE
+Central African Republic,279,177754.1672,TRUE
+Central African Republic,298,120463.1286,TRUE
+Central African Republic,305,9109,FALSE
+Central African Republic,306,131681.4608,TRUE
+Central African Republic,11,178064.2799,TRUE
+Central African Republic,16,52683,FALSE
+Central African Republic,48,27222.34375,TRUE
+Central African Republic,60,22383.25858,TRUE
+Central African Republic,63,12967,FALSE
+Central African Republic,121,74517,FALSE
+Central African Republic,128,12020,FALSE
+Central African Republic,156,10200.29705,TRUE
+Central African Republic,217,21196.4891,TRUE
+Central African Republic,248,14225.32829,TRUE
+Central African Republic,270,9643,FALSE
+Central African Republic,52,28460,FALSE
+Central African Republic,74,505,FALSE
+Central African Republic,75,47178.96176,TRUE
+Central African Republic,80,49992.57574,TRUE
+Central African Republic,301,32780,FALSE
+Central African Republic,319,81097,FALSE
+Central African Republic,51,26504.47085,TRUE
+Central African Republic,53,6581.96824,TRUE
+Central African Republic,77,2300,FALSE
+Central African Republic,213,86364,FALSE
+Central African Republic,228,44417,FALSE
+Central African Republic,269,2361,FALSE
+Central African Republic,296,43692.55808,TRUE
+Central African Republic,175,44967,FALSE
+Central African Republic,12,36715.19395,TRUE
+Central African Republic,13,248863,FALSE
+Central African Republic,108,12577.92841,TRUE
+Central African Republic,165,14797.07017,TRUE
+Central African Republic,215,105585.0293,TRUE
+Central African Republic,261,8946.089355,TRUE
+Central African Republic,281,136069.2843,TRUE
+Central African Republic,302,27087.34387,TRUE
+Central African Republic,310,36133,TRUE
+Central African Republic,106,13595.99028,TRUE
+Central African Republic,30,62885.73079,TRUE
+Central African Republic,91,126485.3041,TRUE
+Central African Republic,192,3780098.195,TRUE
+Central African Republic,249,70032.42373,TRUE
+Central African Republic,308,35296.76443,TRUE
+Central African Republic,116,98484.54468,TRUE
+Central African Republic,234,8162.890747,TRUE
+Central African Republic,88,138218.959,TRUE
+Central African Republic,227,9358.848173,TRUE
+Central African Republic,8,21599.0332,TRUE
+Central African Republic,115,186672.4488,TRUE
+Central African Republic,146,28645.96233,TRUE
+Central African Republic,257,11600,FALSE
+Central African Republic,39,10075.63454,TRUE
+Central African Republic,61,218943.5096,TRUE
+Central African Republic,76,100326.9844,TRUE
+Central African Republic,268,27005.25,TRUE
+Central African Republic,194,9390.783666,TRUE
+Central African Republic,198,5299.135169,TRUE
+Central African Republic,245,11957.75,TRUE
+Central African Republic,86,15341.61704,TRUE
+Central African Republic,247,27947.125,TRUE
+Central African Republic,15,5922.875,TRUE
+Central African Republic,135,5719.346191,TRUE
+Central African Republic,65,4252.65625,TRUE
+Central African Republic,70,8796.273438,TRUE
+Central African Republic,314,4472.643433,TRUE
+Central African Republic,133,6124.625,TRUE
+Central African Republic,240,4373.4375,TRUE
+Central African Republic,148,23186,TRUE
+Central African Republic,31,5157,TRUE
+Chad,4,20977.52128,TRUE
+Chad,5,7484.490489,TRUE
+Chad,7,111437.9893,TRUE
+Chad,8,47030.54376,TRUE
+Chad,17,33099.94094,TRUE
+Chad,105,149702.6633,TRUE
+Chad,120,115713.1489,TRUE
+Chad,161,8730.264786,TRUE
+Chad,169,12726,FALSE
+Chad,179,121608.9919,TRUE
+Chad,180,5926,FALSE
+Chad,203,26179.47154,TRUE
+Chad,205,143994,FALSE
+Chad,208,84004.18102,TRUE
+Chad,219,80605.62094,TRUE
+Chad,221,53059.48552,TRUE
+Chad,229,16244.65912,TRUE
+Chad,231,60255.26389,TRUE
+Chad,235,97682,FALSE
+Chad,254,14128,FALSE
+Chad,84,4838,FALSE
+Chad,267,5152,FALSE
+Chad,282,423220.8453,TRUE
+Chad,286,1028671,FALSE
+Chad,289,9979.922823,TRUE
+Chad,316,72255.87156,TRUE
+Chad,317,188762.6372,TRUE
+Chad,318,20000,FALSE
+Chad,18,5920,FALSE
+Chad,19,77366.60983,TRUE
+Chad,33,30270.38924,TRUE
+Chad,40,180987.6885,TRUE
+Chad,49,247408.5214,TRUE
+Chad,54,175365.1249,TRUE
+Chad,58,74040.89691,TRUE
+Chad,59,22326.21725,TRUE
+Chad,63,234336.5313,TRUE
+Chad,90,194487.8189,TRUE
+Chad,94,19272,FALSE
+Chad,101,138512.4356,TRUE
+Chad,112,122104.9439,TRUE
+Chad,138,17125.18189,TRUE
+Chad,152,119704.6269,TRUE
+Chad,154,96782.90416,TRUE
+Chad,158,96473.15601,TRUE
+Chad,200,22918.25267,TRUE
+Chad,202,85300.04797,TRUE
+Chad,206,183393.7134,TRUE
+Chad,218,52990.31222,TRUE
+Chad,238,116960.1876,TRUE
+Chad,243,112174.5654,TRUE
+Chad,259,55616.6005,TRUE
+Chad,276,10950.60863,TRUE
+Chad,279,177754.1672,TRUE
+Chad,298,120463.1286,TRUE
+Chad,305,11824,FALSE
+Chad,306,131681.4608,TRUE
+Chad,11,178064.2799,TRUE
+Chad,16,74389.59543,TRUE
+Chad,48,27222.34375,TRUE
+Chad,60,22383.25858,TRUE
+Chad,63,11715.28525,TRUE
+Chad,121,115777.4722,TRUE
+Chad,128,10708,FALSE
+Chad,156,10200.29705,TRUE
+Chad,217,21196.4891,TRUE
+Chad,248,14225.32829,TRUE
+Chad,270,8319,FALSE
+Chad,52,56899,FALSE
+Chad,74,4541.36112,TRUE
+Chad,75,47178.96176,TRUE
+Chad,80,49992.57574,TRUE
+Chad,301,19478,FALSE
+Chad,319,95699,FALSE
+Chad,51,26504.47085,TRUE
+Chad,53,6581.96824,TRUE
+Chad,77,5993.147024,TRUE
+Chad,213,124295.9159,TRUE
+Chad,228,133880.2683,TRUE
+Chad,269,15171.62496,TRUE
+Chad,296,50361,FALSE
+Chad,175,40668,FALSE
+Chad,12,36715.19395,TRUE
+Chad,13,74728.86082,TRUE
+Chad,108,12577.92841,TRUE
+Chad,165,14797.07017,TRUE
+Chad,215,105585.0293,TRUE
+Chad,261,8946.089355,TRUE
+Chad,281,136069.2843,TRUE
+Chad,302,27087.34387,TRUE
+Chad,310,36133,TRUE
+Chad,106,13595.99028,TRUE
+Chad,30,62885.73079,TRUE
+Chad,91,126485.3041,TRUE
+Chad,192,3780098.195,TRUE
+Chad,249,70032.42373,TRUE
+Chad,308,35296.76443,TRUE
+Chad,116,98484.54468,TRUE
+Chad,234,8162.890747,TRUE
+Chad,88,138218.959,TRUE
+Chad,227,9358.848173,TRUE
+Chad,8,21599.0332,TRUE
+Chad,115,186672.4488,TRUE
+Chad,146,28645.96233,TRUE
+Chad,257,14862.84549,TRUE
+Chad,39,10075.63454,TRUE
+Chad,61,218943.5096,TRUE
+Chad,76,100326.9844,TRUE
+Chad,268,27005.25,TRUE
+Chad,194,9390.783666,TRUE
+Chad,198,5299.135169,TRUE
+Chad,245,11957.75,TRUE
+Chad,86,15341.61704,TRUE
+Chad,247,27947.125,TRUE
+Chad,15,5922.875,TRUE
+Chad,135,5719.346191,TRUE
+Chad,65,4252.65625,TRUE
+Chad,70,8796.273438,TRUE
+Chad,314,4472.643433,TRUE
+Chad,133,6124.625,TRUE
+Chad,240,4373.4375,TRUE
+Chad,148,23186,TRUE
+Chad,31,5157,TRUE
+Chile,4,39364,FALSE
+Chile,5,7484.490489,TRUE
+Chile,7,487871,FALSE
+Chile,8,101046,FALSE
+Chile,17,59066,FALSE
+Chile,105,13570,FALSE
+Chile,120,121776,FALSE
+Chile,161,4795,FALSE
+Chile,169,115440,FALSE
+Chile,179,142815,FALSE
+Chile,180,7520.279265,TRUE
+Chile,203,54800,FALSE
+Chile,205,478842,FALSE
+Chile,208,191342,FALSE
+Chile,219,200413,FALSE
+Chile,221,340990,FALSE
+Chile,229,16244.65912,TRUE
+Chile,231,170666,FALSE
+Chile,235,218010,FALSE
+Chile,254,65564,FALSE
+Chile,84,9355.713607,TRUE
+Chile,267,9372.487582,TRUE
+Chile,282,962295,FALSE
+Chile,286,760050.6713,TRUE
+Chile,289,10578,FALSE
+Chile,316,23747,FALSE
+Chile,317,184655,FALSE
+Chile,318,60706,FALSE
+Chile,18,16129,FALSE
+Chile,19,159535,FALSE
+Chile,33,30270.38924,TRUE
+Chile,40,245910,FALSE
+Chile,49,470477,FALSE
+Chile,54,195665,FALSE
+Chile,58,50299,FALSE
+Chile,59,23169,FALSE
+Chile,63,616004,FALSE
+Chile,90,224496,FALSE
+Chile,94,61002.28577,TRUE
+Chile,101,138512.4356,TRUE
+Chile,112,112109,FALSE
+Chile,138,17125.18189,TRUE
+Chile,152,119704.6269,TRUE
+Chile,154,225452,FALSE
+Chile,158,133598,FALSE
+Chile,200,49449,FALSE
+Chile,202,85300.04797,TRUE
+Chile,206,183393.7134,TRUE
+Chile,218,76641,FALSE
+Chile,238,234324,FALSE
+Chile,243,17489,FALSE
+Chile,259,53813,FALSE
+Chile,276,10950.60863,TRUE
+Chile,279,177754.1672,TRUE
+Chile,298,172718,FALSE
+Chile,305,31478,FALSE
+Chile,306,672226,FALSE
+Chile,11,75865,FALSE
+Chile,16,74389.59543,TRUE
+Chile,48,27222.34375,TRUE
+Chile,60,8900,FALSE
+Chile,63,616004,FALSE
+Chile,121,43245,FALSE
+Chile,128,9353.124815,TRUE
+Chile,156,8528,FALSE
+Chile,217,11772,FALSE
+Chile,248,39739,FALSE
+Chile,270,9151.63574,TRUE
+Chile,52,72720.10141,TRUE
+Chile,74,4541.36112,TRUE
+Chile,75,47178.96176,TRUE
+Chile,80,149697,FALSE
+Chile,301,113987.8459,TRUE
+Chile,319,89190.44102,TRUE
+Chile,51,26504.47085,TRUE
+Chile,53,6581.96824,TRUE
+Chile,77,5993.147024,TRUE
+Chile,213,124295.9159,TRUE
+Chile,228,133880.2683,TRUE
+Chile,269,15171.62496,TRUE
+Chile,296,114367,FALSE
+Chile,175,70802.39066,TRUE
+Chile,12,55161,FALSE
+Chile,13,45891,FALSE
+Chile,108,11144,FALSE
+Chile,165,20752,FALSE
+Chile,215,165232,FALSE
+Chile,261,8946.089355,TRUE
+Chile,281,267094,FALSE
+Chile,302,27087.34387,TRUE
+Chile,310,36133,TRUE
+Chile,106,12338,FALSE
+Chile,30,62885.73079,TRUE
+Chile,91,104931,FALSE
+Chile,192,3780098.195,TRUE
+Chile,249,40000,FALSE
+Chile,308,60666,FALSE
+Chile,116,98484.54468,TRUE
+Chile,234,8162.890747,TRUE
+Chile,88,65488,FALSE
+Chile,227,9358.848173,TRUE
+Chile,8,101046,FALSE
+Chile,115,186672.4488,TRUE
+Chile,146,28645.96233,TRUE
+Chile,257,14862.84549,TRUE
+Chile,39,10075.63454,TRUE
+Chile,61,218943.5096,TRUE
+Chile,76,100326.9844,TRUE
+Chile,268,27005.25,TRUE
+Chile,194,9390.783666,TRUE
+Chile,198,5299.135169,TRUE
+Chile,245,11957.75,TRUE
+Chile,86,15341.61704,TRUE
+Chile,247,27947.125,TRUE
+Chile,15,5922.875,TRUE
+Chile,135,6804,FALSE
+Chile,65,4252.65625,TRUE
+Chile,70,8796.273438,TRUE
+Chile,314,4472.643433,TRUE
+Chile,133,6124.625,TRUE
+Chile,240,4373.4375,TRUE
+Chile,148,23186,TRUE
+Chile,31,5157,TRUE
+China,4,32700,FALSE
+China,5,13123,FALSE
+China,7,186453,FALSE
+China,8,31132,FALSE
+China,17,43131,FALSE
+China,105,54710,FALSE
+China,120,175985,FALSE
+China,161,12269,FALSE
+China,169,59477,FALSE
+China,179,333961,FALSE
+China,180,26745,FALSE
+China,203,82557,FALSE
+China,205,219999,FALSE
+China,208,169090,FALSE
+China,219,172503,FALSE
+China,221,173843,FALSE
+China,229,31012,FALSE
+China,231,34037,FALSE
+China,235,170456,FALSE
+China,254,69324,FALSE
+China,84,47478,FALSE
+China,267,15557,FALSE
+China,282,596733,FALSE
+China,286,734591,FALSE
+China,289,26980,FALSE
+China,316,36671,FALSE
+China,317,418712,FALSE
+China,318,54088,FALSE
+China,18,16438,FALSE
+China,19,281384,FALSE
+China,33,19940,FALSE
+China,40,340841,FALSE
+China,49,476384,FALSE
+China,54,197325,FALSE
+China,58,41545,FALSE
+China,59,57554,FALSE
+China,63,66152,FALSE
+China,90,535966,FALSE
+China,94,128801,FALSE
+China,101,409603,FALSE
+China,112,266855,FALSE
+China,138,28874,FALSE
+China,152,272587,FALSE
+China,154,218062,FALSE
+China,158,238800,FALSE
+China,200,29164,FALSE
+China,202,85300.04797,TRUE
+China,206,352273,FALSE
+China,218,80145,FALSE
+China,238,184343,FALSE
+China,243,27451,FALSE
+China,259,32121,FALSE
+China,276,18019,FALSE
+China,279,335333,FALSE
+China,298,100058,FALSE
+China,305,22284,FALSE
+China,306,561995,FALSE
+China,11,72449,FALSE
+China,16,309835,FALSE
+China,48,27222.34375,TRUE
+China,60,47107,FALSE
+China,63,66152,FALSE
+China,121,441331,FALSE
+China,128,36741,FALSE
+China,156,23739,FALSE
+China,217,14323,FALSE
+China,248,20069,FALSE
+China,270,44901,FALSE
+China,52,164692,FALSE
+China,74,4541.36112,TRUE
+China,75,94928,FALSE
+China,80,97439,FALSE
+China,301,193651,FALSE
+China,319,89190.44102,TRUE
+China,51,8612,FALSE
+China,53,17391,FALSE
+China,77,27520,FALSE
+China,213,133123,FALSE
+China,228,274822,FALSE
+China,269,52241,FALSE
+China,296,215110,FALSE
+China,175,81413,FALSE
+China,12,55238,FALSE
+China,13,61271,FALSE
+China,108,46287,FALSE
+China,165,14797.07017,TRUE
+China,215,190637,FALSE
+China,261,14325,FALSE
+China,281,268688,FALSE
+China,302,10778,FALSE
+China,310,26452,FALSE
+China,106,20205,FALSE
+China,30,62885.73079,TRUE
+China,91,126485.3041,TRUE
+China,192,3040612,FALSE
+China,249,70032.42373,TRUE
+China,308,18067,FALSE
+China,116,98484.54468,TRUE
+China,234,8162.890747,TRUE
+China,88,138218.959,TRUE
+China,227,9358.848173,TRUE
+China,8,31132,FALSE
+China,115,107573,FALSE
+China,146,33082,FALSE
+China,257,11299,FALSE
+China,39,6949,FALSE
+China,61,218943.5096,TRUE
+China,76,100326.9844,TRUE
+China,268,27005.25,TRUE
+China,194,8353,FALSE
+China,198,5299.135169,TRUE
+China,245,11957.75,TRUE
+China,86,10963,FALSE
+China,247,19443,FALSE
+China,15,5922.875,TRUE
+China,135,26370,FALSE
+China,65,18299,FALSE
+China,70,13607,FALSE
+China,314,1276,FALSE
+China,133,6124.625,TRUE
+China,240,4373.4375,TRUE
+China,148,23186,TRUE
+China,31,5157,TRUE
+"China, Hong Kong SAR",4,20977.52128,TRUE
+"China, Hong Kong SAR",5,7484.490489,TRUE
+"China, Hong Kong SAR",7,111437.9893,TRUE
+"China, Hong Kong SAR",8,47030.54376,TRUE
+"China, Hong Kong SAR",17,33099.94094,TRUE
+"China, Hong Kong SAR",105,149702.6633,TRUE
+"China, Hong Kong SAR",120,115713.1489,TRUE
+"China, Hong Kong SAR",161,8730.264786,TRUE
+"China, Hong Kong SAR",169,16777.49735,TRUE
+"China, Hong Kong SAR",179,121608.9919,TRUE
+"China, Hong Kong SAR",180,7520.279265,TRUE
+"China, Hong Kong SAR",203,26179.47154,TRUE
+"China, Hong Kong SAR",205,158255.8483,TRUE
+"China, Hong Kong SAR",208,84004.18102,TRUE
+"China, Hong Kong SAR",219,80605.62094,TRUE
+"China, Hong Kong SAR",221,53059.48552,TRUE
+"China, Hong Kong SAR",229,16244.65912,TRUE
+"China, Hong Kong SAR",231,60255.26389,TRUE
+"China, Hong Kong SAR",235,172280.9273,TRUE
+"China, Hong Kong SAR",254,20000,FALSE
+"China, Hong Kong SAR",84,9355.713607,TRUE
+"China, Hong Kong SAR",267,9372.487582,TRUE
+"China, Hong Kong SAR",282,423220.8453,TRUE
+"China, Hong Kong SAR",286,760050.6713,TRUE
+"China, Hong Kong SAR",289,9979.922823,TRUE
+"China, Hong Kong SAR",316,72255.87156,TRUE
+"China, Hong Kong SAR",317,188762.6372,TRUE
+"China, Hong Kong SAR",318,32261.2753,TRUE
+"China, Hong Kong SAR",18,11273.75269,TRUE
+"China, Hong Kong SAR",19,95974,FALSE
+"China, Hong Kong SAR",33,30270.38924,TRUE
+"China, Hong Kong SAR",40,241564,FALSE
+"China, Hong Kong SAR",49,247408.5214,TRUE
+"China, Hong Kong SAR",54,175365.1249,TRUE
+"China, Hong Kong SAR",58,74040.89691,TRUE
+"China, Hong Kong SAR",59,22326.21725,TRUE
+"China, Hong Kong SAR",63,234336.5313,TRUE
+"China, Hong Kong SAR",90,204583,FALSE
+"China, Hong Kong SAR",94,61002.28577,TRUE
+"China, Hong Kong SAR",101,162275,FALSE
+"China, Hong Kong SAR",112,122104.9439,TRUE
+"China, Hong Kong SAR",138,17125.18189,TRUE
+"China, Hong Kong SAR",152,119704.6269,TRUE
+"China, Hong Kong SAR",154,96782.90416,TRUE
+"China, Hong Kong SAR",158,192890,FALSE
+"China, Hong Kong SAR",200,22918.25267,TRUE
+"China, Hong Kong SAR",202,85300.04797,TRUE
+"China, Hong Kong SAR",206,327925,FALSE
+"China, Hong Kong SAR",218,72877,FALSE
+"China, Hong Kong SAR",238,528471,FALSE
+"China, Hong Kong SAR",243,112174.5654,TRUE
+"China, Hong Kong SAR",259,55616.6005,TRUE
+"China, Hong Kong SAR",276,10950.60863,TRUE
+"China, Hong Kong SAR",279,264996,FALSE
+"China, Hong Kong SAR",298,120463.1286,TRUE
+"China, Hong Kong SAR",305,15590.0347,TRUE
+"China, Hong Kong SAR",306,173524,FALSE
+"China, Hong Kong SAR",11,178064.2799,TRUE
+"China, Hong Kong SAR",16,74389.59543,TRUE
+"China, Hong Kong SAR",48,27222.34375,TRUE
+"China, Hong Kong SAR",60,22383.25858,TRUE
+"China, Hong Kong SAR",63,11715.28525,TRUE
+"China, Hong Kong SAR",121,115777.4722,TRUE
+"China, Hong Kong SAR",128,9353.124815,TRUE
+"China, Hong Kong SAR",156,10200.29705,TRUE
+"China, Hong Kong SAR",217,21196.4891,TRUE
+"China, Hong Kong SAR",248,14225.32829,TRUE
+"China, Hong Kong SAR",270,9151.63574,TRUE
+"China, Hong Kong SAR",52,72720.10141,TRUE
+"China, Hong Kong SAR",74,4541.36112,TRUE
+"China, Hong Kong SAR",75,47178.96176,TRUE
+"China, Hong Kong SAR",80,49992.57574,TRUE
+"China, Hong Kong SAR",301,113987.8459,TRUE
+"China, Hong Kong SAR",319,89190.44102,TRUE
+"China, Hong Kong SAR",51,26504.47085,TRUE
+"China, Hong Kong SAR",53,6581.96824,TRUE
+"China, Hong Kong SAR",77,5993.147024,TRUE
+"China, Hong Kong SAR",213,124295.9159,TRUE
+"China, Hong Kong SAR",228,133880.2683,TRUE
+"China, Hong Kong SAR",269,15171.62496,TRUE
+"China, Hong Kong SAR",296,133832,FALSE
+"China, Hong Kong SAR",175,70802.39066,TRUE
+"China, Hong Kong SAR",12,36715.19395,TRUE
+"China, Hong Kong SAR",13,74728.86082,TRUE
+"China, Hong Kong SAR",108,12577.92841,TRUE
+"China, Hong Kong SAR",165,14797.07017,TRUE
+"China, Hong Kong SAR",215,105585.0293,TRUE
+"China, Hong Kong SAR",261,8946.089355,TRUE
+"China, Hong Kong SAR",281,136069.2843,TRUE
+"China, Hong Kong SAR",302,27087.34387,TRUE
+"China, Hong Kong SAR",310,36133,TRUE
+"China, Hong Kong SAR",106,13595.99028,TRUE
+"China, Hong Kong SAR",30,62885.73079,TRUE
+"China, Hong Kong SAR",91,126485.3041,TRUE
+"China, Hong Kong SAR",192,3780098.195,TRUE
+"China, Hong Kong SAR",249,70032.42373,TRUE
+"China, Hong Kong SAR",308,35296.76443,TRUE
+"China, Hong Kong SAR",116,98484.54468,TRUE
+"China, Hong Kong SAR",234,8162.890747,TRUE
+"China, Hong Kong SAR",88,138218.959,TRUE
+"China, Hong Kong SAR",227,9358.848173,TRUE
+"China, Hong Kong SAR",8,21599.0332,TRUE
+"China, Hong Kong SAR",115,186672.4488,TRUE
+"China, Hong Kong SAR",146,28645.96233,TRUE
+"China, Hong Kong SAR",257,14862.84549,TRUE
+"China, Hong Kong SAR",39,10075.63454,TRUE
+"China, Hong Kong SAR",61,218943.5096,TRUE
+"China, Hong Kong SAR",76,100326.9844,TRUE
+"China, Hong Kong SAR",268,27005.25,TRUE
+"China, Hong Kong SAR",194,9390.783666,TRUE
+"China, Hong Kong SAR",198,5299.135169,TRUE
+"China, Hong Kong SAR",245,11957.75,TRUE
+"China, Hong Kong SAR",86,15341.61704,TRUE
+"China, Hong Kong SAR",247,27947.125,TRUE
+"China, Hong Kong SAR",15,5922.875,TRUE
+"China, Hong Kong SAR",135,5719.346191,TRUE
+"China, Hong Kong SAR",65,4252.65625,TRUE
+"China, Hong Kong SAR",70,8796.273438,TRUE
+"China, Hong Kong SAR",314,4472.643433,TRUE
+"China, Hong Kong SAR",133,6124.625,TRUE
+"China, Hong Kong SAR",240,4373.4375,TRUE
+"China, Hong Kong SAR",148,23186,TRUE
+"China, Hong Kong SAR",31,5157,TRUE
+"China, Macao SAR",4,20977.52128,TRUE
+"China, Macao SAR",5,7484.490489,TRUE
+"China, Macao SAR",7,111437.9893,TRUE
+"China, Macao SAR",8,47030.54376,TRUE
+"China, Macao SAR",17,33099.94094,TRUE
+"China, Macao SAR",105,149702.6633,TRUE
+"China, Macao SAR",120,115713.1489,TRUE
+"China, Macao SAR",161,8730.264786,TRUE
+"China, Macao SAR",169,16777.49735,TRUE
+"China, Macao SAR",179,121608.9919,TRUE
+"China, Macao SAR",180,7520.279265,TRUE
+"China, Macao SAR",203,26179.47154,TRUE
+"China, Macao SAR",205,158255.8483,TRUE
+"China, Macao SAR",208,84004.18102,TRUE
+"China, Macao SAR",219,80605.62094,TRUE
+"China, Macao SAR",221,53059.48552,TRUE
+"China, Macao SAR",229,16244.65912,TRUE
+"China, Macao SAR",231,60255.26389,TRUE
+"China, Macao SAR",235,172280.9273,TRUE
+"China, Macao SAR",254,26952.37295,TRUE
+"China, Macao SAR",84,9355.713607,TRUE
+"China, Macao SAR",267,9372.487582,TRUE
+"China, Macao SAR",282,423220.8453,TRUE
+"China, Macao SAR",286,760050.6713,TRUE
+"China, Macao SAR",289,9979.922823,TRUE
+"China, Macao SAR",316,72255.87156,TRUE
+"China, Macao SAR",317,188762.6372,TRUE
+"China, Macao SAR",318,32261.2753,TRUE
+"China, Macao SAR",18,11273.75269,TRUE
+"China, Macao SAR",19,77366.60983,TRUE
+"China, Macao SAR",33,30270.38924,TRUE
+"China, Macao SAR",40,180987.6885,TRUE
+"China, Macao SAR",49,247408.5214,TRUE
+"China, Macao SAR",54,175365.1249,TRUE
+"China, Macao SAR",58,74040.89691,TRUE
+"China, Macao SAR",59,22326.21725,TRUE
+"China, Macao SAR",63,234336.5313,TRUE
+"China, Macao SAR",90,194487.8189,TRUE
+"China, Macao SAR",94,61002.28577,TRUE
+"China, Macao SAR",101,138512.4356,TRUE
+"China, Macao SAR",112,122104.9439,TRUE
+"China, Macao SAR",138,17125.18189,TRUE
+"China, Macao SAR",152,119704.6269,TRUE
+"China, Macao SAR",154,96782.90416,TRUE
+"China, Macao SAR",158,96473.15601,TRUE
+"China, Macao SAR",200,22918.25267,TRUE
+"China, Macao SAR",202,85300.04797,TRUE
+"China, Macao SAR",206,183393.7134,TRUE
+"China, Macao SAR",218,52990.31222,TRUE
+"China, Macao SAR",238,116960.1876,TRUE
+"China, Macao SAR",243,112174.5654,TRUE
+"China, Macao SAR",259,55616.6005,TRUE
+"China, Macao SAR",276,10950.60863,TRUE
+"China, Macao SAR",279,177754.1672,TRUE
+"China, Macao SAR",298,120463.1286,TRUE
+"China, Macao SAR",305,15590.0347,TRUE
+"China, Macao SAR",306,131681.4608,TRUE
+"China, Macao SAR",11,178064.2799,TRUE
+"China, Macao SAR",16,74389.59543,TRUE
+"China, Macao SAR",48,27222.34375,TRUE
+"China, Macao SAR",60,22383.25858,TRUE
+"China, Macao SAR",63,11715.28525,TRUE
+"China, Macao SAR",121,115777.4722,TRUE
+"China, Macao SAR",128,9353.124815,TRUE
+"China, Macao SAR",156,10200.29705,TRUE
+"China, Macao SAR",217,21196.4891,TRUE
+"China, Macao SAR",248,14225.32829,TRUE
+"China, Macao SAR",270,9151.63574,TRUE
+"China, Macao SAR",52,72720.10141,TRUE
+"China, Macao SAR",74,4541.36112,TRUE
+"China, Macao SAR",75,47178.96176,TRUE
+"China, Macao SAR",80,49992.57574,TRUE
+"China, Macao SAR",301,113987.8459,TRUE
+"China, Macao SAR",319,89190.44102,TRUE
+"China, Macao SAR",51,26504.47085,TRUE
+"China, Macao SAR",53,6581.96824,TRUE
+"China, Macao SAR",77,5993.147024,TRUE
+"China, Macao SAR",213,124295.9159,TRUE
+"China, Macao SAR",228,133880.2683,TRUE
+"China, Macao SAR",269,15171.62496,TRUE
+"China, Macao SAR",296,43692.55808,TRUE
+"China, Macao SAR",175,70802.39066,TRUE
+"China, Macao SAR",12,36715.19395,TRUE
+"China, Macao SAR",13,74728.86082,TRUE
+"China, Macao SAR",108,12577.92841,TRUE
+"China, Macao SAR",165,14797.07017,TRUE
+"China, Macao SAR",215,105585.0293,TRUE
+"China, Macao SAR",261,8946.089355,TRUE
+"China, Macao SAR",281,136069.2843,TRUE
+"China, Macao SAR",302,27087.34387,TRUE
+"China, Macao SAR",310,36133,TRUE
+"China, Macao SAR",106,13595.99028,TRUE
+"China, Macao SAR",30,62885.73079,TRUE
+"China, Macao SAR",91,126485.3041,TRUE
+"China, Macao SAR",192,3780098.195,TRUE
+"China, Macao SAR",249,70032.42373,TRUE
+"China, Macao SAR",308,35296.76443,TRUE
+"China, Macao SAR",116,98484.54468,TRUE
+"China, Macao SAR",234,8162.890747,TRUE
+"China, Macao SAR",88,138218.959,TRUE
+"China, Macao SAR",227,9358.848173,TRUE
+"China, Macao SAR",8,21599.0332,TRUE
+"China, Macao SAR",115,186672.4488,TRUE
+"China, Macao SAR",146,28645.96233,TRUE
+"China, Macao SAR",257,14862.84549,TRUE
+"China, Macao SAR",39,10075.63454,TRUE
+"China, Macao SAR",61,218943.5096,TRUE
+"China, Macao SAR",76,100326.9844,TRUE
+"China, Macao SAR",268,27005.25,TRUE
+"China, Macao SAR",194,9390.783666,TRUE
+"China, Macao SAR",198,5299.135169,TRUE
+"China, Macao SAR",245,11957.75,TRUE
+"China, Macao SAR",86,15341.61704,TRUE
+"China, Macao SAR",247,27947.125,TRUE
+"China, Macao SAR",15,5922.875,TRUE
+"China, Macao SAR",135,5719.346191,TRUE
+"China, Macao SAR",65,4252.65625,TRUE
+"China, Macao SAR",70,8796.273438,TRUE
+"China, Macao SAR",314,4472.643433,TRUE
+"China, Macao SAR",133,6124.625,TRUE
+"China, Macao SAR",240,4373.4375,TRUE
+"China, Macao SAR",148,23186,TRUE
+"China, Macao SAR",31,5157,TRUE
+"China, mainland",4,32700,FALSE
+"China, mainland",5,13123,FALSE
+"China, mainland",7,186457,FALSE
+"China, mainland",8,29757,FALSE
+"China, mainland",17,43131,FALSE
+"China, mainland",105,54710,FALSE
+"China, mainland",120,175624,FALSE
+"China, mainland",161,12269,FALSE
+"China, mainland",169,59476,FALSE
+"China, mainland",179,335884,FALSE
+"China, mainland",180,26749,FALSE
+"China, mainland",203,26179.47154,TRUE
+"China, mainland",205,219692,FALSE
+"China, mainland",208,168031,FALSE
+"China, mainland",219,172632,FALSE
+"China, mainland",221,173715,FALSE
+"China, mainland",229,31012,FALSE
+"China, mainland",231,33998,FALSE
+"China, mainland",235,170425,FALSE
+"China, mainland",254,69373,FALSE
+"China, mainland",84,47478,FALSE
+"China, mainland",267,15590,FALSE
+"China, mainland",282,596733,FALSE
+"China, mainland",286,734823,FALSE
+"China, mainland",289,26980,FALSE
+"China, mainland",316,36671,FALSE
+"China, mainland",317,420107,FALSE
+"China, mainland",318,54091,FALSE
+"China, mainland",18,16400,FALSE
+"China, mainland",19,282043,FALSE
+"China, mainland",33,19940,FALSE
+"China, mainland",40,340353,FALSE
+"China, mainland",49,476485,FALSE
+"China, mainland",54,196985,FALSE
+"China, mainland",58,41545,FALSE
+"China, mainland",59,57554,FALSE
+"China, mainland",63,66152,FALSE
+"China, mainland",90,536586,FALSE
+"China, mainland",94,128801,FALSE
+"China, mainland",101,409923,FALSE
+"China, mainland",112,267892,FALSE
+"China, mainland",138,28874,FALSE
+"China, mainland",152,252807,FALSE
+"China, mainland",154,219876,FALSE
+"China, mainland",158,238816,FALSE
+"China, mainland",200,29164,FALSE
+"China, mainland",202,85300.04797,TRUE
+"China, mainland",206,376370,FALSE
+"China, mainland",218,80145,FALSE
+"China, mainland",238,184252,FALSE
+"China, mainland",243,27451,FALSE
+"China, mainland",259,32121,FALSE
+"China, mainland",276,18019,FALSE
+"China, mainland",279,335378,FALSE
+"China, mainland",298,99616,FALSE
+"China, mainland",305,22283,FALSE
+"China, mainland",306,563477,FALSE
+"China, mainland",11,72449,FALSE
+"China, mainland",16,313774,FALSE
+"China, mainland",48,27222.34375,TRUE
+"China, mainland",60,47107,FALSE
+"China, mainland",63,66152,FALSE
+"China, mainland",121,455649,FALSE
+"China, mainland",128,36763,FALSE
+"China, mainland",156,23739,FALSE
+"China, mainland",217,14323,FALSE
+"China, mainland",248,20069,FALSE
+"China, mainland",270,45020,FALSE
+"China, mainland",52,164505,FALSE
+"China, mainland",74,4541.36112,TRUE
+"China, mainland",75,94576,FALSE
+"China, mainland",80,97396,FALSE
+"China, mainland",301,194397,FALSE
+"China, mainland",319,89190.44102,TRUE
+"China, mainland",51,8612,FALSE
+"China, mainland",53,17391,FALSE
+"China, mainland",77,27520,FALSE
+"China, mainland",213,133123,FALSE
+"China, mainland",228,236488,FALSE
+"China, mainland",269,52281,FALSE
+"China, mainland",296,215056,FALSE
+"China, mainland",175,81878,FALSE
+"China, mainland",12,55239,FALSE
+"China, mainland",13,61271,FALSE
+"China, mainland",108,57147,FALSE
+"China, mainland",165,14797.07017,TRUE
+"China, mainland",215,67439,FALSE
+"China, mainland",261,14325,FALSE
+"China, mainland",281,269023,FALSE
+"China, mainland",302,10776,FALSE
+"China, mainland",310,26452,FALSE
+"China, mainland",106,20205,FALSE
+"China, mainland",30,62885.73079,TRUE
+"China, mainland",91,126485.3041,TRUE
+"China, mainland",192,3040111,FALSE
+"China, mainland",249,70032.42373,TRUE
+"China, mainland",308,18067,FALSE
+"China, mainland",116,98484.54468,TRUE
+"China, mainland",234,8162.890747,TRUE
+"China, mainland",88,138218.959,TRUE
+"China, mainland",227,9358.848173,TRUE
+"China, mainland",8,29757,FALSE
+"China, mainland",115,103541,FALSE
+"China, mainland",146,33082,FALSE
+"China, mainland",257,11299,FALSE
+"China, mainland",39,6949,FALSE
+"China, mainland",61,218943.5096,TRUE
+"China, mainland",76,100326.9844,TRUE
+"China, mainland",268,27005.25,TRUE
+"China, mainland",194,8353,FALSE
+"China, mainland",198,5299.135169,TRUE
+"China, mainland",245,11957.75,TRUE
+"China, mainland",86,10963,FALSE
+"China, mainland",247,19443,FALSE
+"China, mainland",15,5922.875,TRUE
+"China, mainland",135,26370,FALSE
+"China, mainland",65,18299,FALSE
+"China, mainland",70,13607,FALSE
+"China, mainland",314,1276,FALSE
+"China, mainland",133,6124.625,TRUE
+"China, mainland",240,4373.4375,TRUE
+"China, mainland",148,23186,TRUE
+"China, mainland",31,5157,TRUE
+"China, Taiwan Province of",4,20977.52128,TRUE
+"China, Taiwan Province of",5,7484.490489,TRUE
+"China, Taiwan Province of",7,86792,FALSE
+"China, Taiwan Province of",8,37020,FALSE
+"China, Taiwan Province of",17,33099.94094,TRUE
+"China, Taiwan Province of",105,149702.6633,TRUE
+"China, Taiwan Province of",120,283909,FALSE
+"China, Taiwan Province of",161,8730.264786,TRUE
+"China, Taiwan Province of",169,60559,FALSE
+"China, Taiwan Province of",179,138634,FALSE
+"China, Taiwan Province of",180,15503,FALSE
+"China, Taiwan Province of",203,82557,FALSE
+"China, Taiwan Province of",205,512028,FALSE
+"China, Taiwan Province of",208,284213,FALSE
+"China, Taiwan Province of",219,124866,FALSE
+"China, Taiwan Province of",221,199318,FALSE
+"China, Taiwan Province of",229,16244.65912,TRUE
+"China, Taiwan Province of",231,83243,FALSE
+"China, Taiwan Province of",235,249200,FALSE
+"China, Taiwan Province of",254,63438,FALSE
+"China, Taiwan Province of",84,9464,FALSE
+"China, Taiwan Province of",267,8533,FALSE
+"China, Taiwan Province of",282,423220.8453,TRUE
+"China, Taiwan Province of",286,668966,FALSE
+"China, Taiwan Province of",289,12808,FALSE
+"China, Taiwan Province of",316,72255.87156,TRUE
+"China, Taiwan Province of",317,181714,FALSE
+"China, Taiwan Province of",318,28094,FALSE
+"China, Taiwan Province of",18,20644,FALSE
+"China, Taiwan Province of",19,61357,FALSE
+"China, Taiwan Province of",33,30270.38924,TRUE
+"China, Taiwan Province of",40,372935,FALSE
+"China, Taiwan Province of",49,457244,FALSE
+"China, Taiwan Province of",54,250447,FALSE
+"China, Taiwan Province of",58,74040.89691,TRUE
+"China, Taiwan Province of",59,22326.21725,TRUE
+"China, Taiwan Province of",63,106711,FALSE
+"China, Taiwan Province of",90,219820,FALSE
+"China, Taiwan Province of",94,61002.28577,TRUE
+"China, Taiwan Province of",101,208444,FALSE
+"China, Taiwan Province of",112,119066,FALSE
+"China, Taiwan Province of",138,17125.18189,TRUE
+"China, Taiwan Province of",152,375621,FALSE
+"China, Taiwan Province of",154,148453,FALSE
+"China, Taiwan Province of",158,96473.15601,TRUE
+"China, Taiwan Province of",200,22918.25267,TRUE
+"China, Taiwan Province of",202,85300.04797,TRUE
+"China, Taiwan Province of",206,215930,FALSE
+"China, Taiwan Province of",218,82575,FALSE
+"China, Taiwan Province of",238,199292,FALSE
+"China, Taiwan Province of",243,112174.5654,TRUE
+"China, Taiwan Province of",259,55616.6005,TRUE
+"China, Taiwan Province of",276,17433,FALSE
+"China, Taiwan Province of",279,177754.1672,TRUE
+"China, Taiwan Province of",298,191396,FALSE
+"China, Taiwan Province of",305,25005,FALSE
+"China, Taiwan Province of",306,245527,FALSE
+"China, Taiwan Province of",11,178064.2799,TRUE
+"China, Taiwan Province of",16,189285,FALSE
+"China, Taiwan Province of",48,27222.34375,TRUE
+"China, Taiwan Province of",60,22383.25858,TRUE
+"China, Taiwan Province of",63,106711,FALSE
+"China, Taiwan Province of",121,151952,FALSE
+"China, Taiwan Province of",128,31608,FALSE
+"China, Taiwan Province of",156,10200.29705,TRUE
+"China, Taiwan Province of",217,21196.4891,TRUE
+"China, Taiwan Province of",248,11700,FALSE
+"China, Taiwan Province of",270,14315,FALSE
+"China, Taiwan Province of",52,249573,FALSE
+"China, Taiwan Province of",74,4541.36112,TRUE
+"China, Taiwan Province of",75,100607,FALSE
+"China, Taiwan Province of",80,49992.57574,TRUE
+"China, Taiwan Province of",301,164113,FALSE
+"China, Taiwan Province of",319,89190.44102,TRUE
+"China, Taiwan Province of",51,26504.47085,TRUE
+"China, Taiwan Province of",53,6581.96824,TRUE
+"China, Taiwan Province of",77,5993.147024,TRUE
+"China, Taiwan Province of",213,124295.9159,TRUE
+"China, Taiwan Province of",228,525375,FALSE
+"China, Taiwan Province of",269,13779,FALSE
+"China, Taiwan Province of",296,233825,FALSE
+"China, Taiwan Province of",175,65236,FALSE
+"China, Taiwan Province of",12,53014,FALSE
+"China, Taiwan Province of",13,74728.86082,TRUE
+"China, Taiwan Province of",108,5493,FALSE
+"China, Taiwan Province of",165,14797.07017,TRUE
+"China, Taiwan Province of",215,459135,FALSE
+"China, Taiwan Province of",261,8946.089355,TRUE
+"China, Taiwan Province of",281,168821,FALSE
+"China, Taiwan Province of",302,11137,FALSE
+"China, Taiwan Province of",310,36133,TRUE
+"China, Taiwan Province of",106,13595.99028,TRUE
+"China, Taiwan Province of",30,62885.73079,TRUE
+"China, Taiwan Province of",91,126485.3041,TRUE
+"China, Taiwan Province of",192,3411089,FALSE
+"China, Taiwan Province of",249,70032.42373,TRUE
+"China, Taiwan Province of",308,35296.76443,TRUE
+"China, Taiwan Province of",116,98484.54468,TRUE
+"China, Taiwan Province of",234,8162.890747,TRUE
+"China, Taiwan Province of",88,138218.959,TRUE
+"China, Taiwan Province of",227,9358.848173,TRUE
+"China, Taiwan Province of",8,37020,FALSE
+"China, Taiwan Province of",115,281862,FALSE
+"China, Taiwan Province of",146,28645.96233,TRUE
+"China, Taiwan Province of",257,14862.84549,TRUE
+"China, Taiwan Province of",39,10075.63454,TRUE
+"China, Taiwan Province of",61,218943.5096,TRUE
+"China, Taiwan Province of",76,100326.9844,TRUE
+"China, Taiwan Province of",268,27005.25,TRUE
+"China, Taiwan Province of",194,9390.783666,TRUE
+"China, Taiwan Province of",198,5299.135169,TRUE
+"China, Taiwan Province of",245,11957.75,TRUE
+"China, Taiwan Province of",86,15341.61704,TRUE
+"China, Taiwan Province of",247,27947.125,TRUE
+"China, Taiwan Province of",15,5922.875,TRUE
+"China, Taiwan Province of",135,5719.346191,TRUE
+"China, Taiwan Province of",65,4252.65625,TRUE
+"China, Taiwan Province of",70,8796.273438,TRUE
+"China, Taiwan Province of",314,4472.643433,TRUE
+"China, Taiwan Province of",133,6124.625,TRUE
+"China, Taiwan Province of",240,4373.4375,TRUE
+"China, Taiwan Province of",148,23186,TRUE
+"China, Taiwan Province of",31,5157,TRUE
+Colombia,4,20977.52128,TRUE
+Colombia,5,7484.490489,TRUE
+Colombia,7,106727,FALSE
+Colombia,8,47030.54376,TRUE
+Colombia,17,19869,FALSE
+Colombia,105,243650,FALSE
+Colombia,120,114373,FALSE
+Colombia,161,8730.264786,TRUE
+Colombia,169,35525,FALSE
+Colombia,179,131479,FALSE
+Colombia,180,7520.279265,TRUE
+Colombia,203,26179.47154,TRUE
+Colombia,205,242491,FALSE
+Colombia,208,158700,FALSE
+Colombia,219,147134,FALSE
+Colombia,221,132563,FALSE
+Colombia,229,16244.65912,TRUE
+Colombia,231,100783,FALSE
+Colombia,235,193147,FALSE
+Colombia,254,47109,FALSE
+Colombia,84,34979,FALSE
+Colombia,267,6981,FALSE
+Colombia,282,249183,FALSE
+Colombia,286,886915,FALSE
+Colombia,289,9979.922823,TRUE
+Colombia,316,72255.87156,TRUE
+Colombia,317,178855,FALSE
+Colombia,318,16153,FALSE
+Colombia,18,12128,FALSE
+Colombia,19,77366.60983,TRUE
+Colombia,33,46088,FALSE
+Colombia,40,283587,FALSE
+Colombia,49,287230,FALSE
+Colombia,54,210469,FALSE
+Colombia,58,74040.89691,TRUE
+Colombia,59,22326.21725,TRUE
+Colombia,63,59359,FALSE
+Colombia,90,161040,FALSE
+Colombia,94,44541,FALSE
+Colombia,101,66251,FALSE
+Colombia,112,180532,FALSE
+Colombia,138,17125.18189,TRUE
+Colombia,152,119704.6269,TRUE
+Colombia,154,135112,FALSE
+Colombia,158,215050,FALSE
+Colombia,200,12937,FALSE
+Colombia,202,85300.04797,TRUE
+Colombia,206,183393.7134,TRUE
+Colombia,218,19102,FALSE
+Colombia,238,136139,FALSE
+Colombia,243,112174.5654,TRUE
+Colombia,259,55616.6005,TRUE
+Colombia,276,24949,FALSE
+Colombia,279,261485,FALSE
+Colombia,298,135112,FALSE
+Colombia,305,16469,FALSE
+Colombia,306,387364,FALSE
+Colombia,11,178064.2799,TRUE
+Colombia,16,241464,FALSE
+Colombia,48,27222.34375,TRUE
+Colombia,60,15613,FALSE
+Colombia,63,59359,FALSE
+Colombia,121,115777.4722,TRUE
+Colombia,128,11264,FALSE
+Colombia,156,3084,FALSE
+Colombia,217,19144,FALSE
+Colombia,248,14225.32829,TRUE
+Colombia,270,28036,FALSE
+Colombia,52,100140,FALSE
+Colombia,74,3387,FALSE
+Colombia,75,72997,FALSE
+Colombia,80,49992.57574,TRUE
+Colombia,301,113987.8459,TRUE
+Colombia,319,100330,FALSE
+Colombia,51,26504.47085,TRUE
+Colombia,53,6581.96824,TRUE
+Colombia,77,8605,FALSE
+Colombia,213,203991,FALSE
+Colombia,228,411077,FALSE
+Colombia,269,15171.62496,TRUE
+Colombia,296,43692.55808,TRUE
+Colombia,175,113540,FALSE
+Colombia,12,31302,FALSE
+Colombia,13,88122,FALSE
+Colombia,108,12577.92841,TRUE
+Colombia,165,14797.07017,TRUE
+Colombia,215,325257,FALSE
+Colombia,261,8946.089355,TRUE
+Colombia,281,365426,FALSE
+Colombia,302,24768,FALSE
+Colombia,310,36133,TRUE
+Colombia,106,13595.99028,TRUE
+Colombia,30,62885.73079,TRUE
+Colombia,91,126485.3041,TRUE
+Colombia,192,3780098.195,TRUE
+Colombia,249,70032.42373,TRUE
+Colombia,308,35296.76443,TRUE
+Colombia,116,98484.54468,TRUE
+Colombia,234,8162.890747,TRUE
+Colombia,88,138218.959,TRUE
+Colombia,227,9358.848173,TRUE
+Colombia,8,21599.0332,TRUE
+Colombia,115,186672.4488,TRUE
+Colombia,146,28645.96233,TRUE
+Colombia,257,14862.84549,TRUE
+Colombia,39,10075.63454,TRUE
+Colombia,61,218943.5096,TRUE
+Colombia,76,100326.9844,TRUE
+Colombia,268,27005.25,TRUE
+Colombia,194,9390.783666,TRUE
+Colombia,198,5299.135169,TRUE
+Colombia,245,11957.75,TRUE
+Colombia,86,15341.61704,TRUE
+Colombia,247,27947.125,TRUE
+Colombia,15,5922.875,TRUE
+Colombia,135,5719.346191,TRUE
+Colombia,65,4252.65625,TRUE
+Colombia,70,8796.273438,TRUE
+Colombia,314,4472.643433,TRUE
+Colombia,133,6124.625,TRUE
+Colombia,240,4373.4375,TRUE
+Colombia,148,23186,TRUE
+Colombia,31,5157,TRUE
+Comoros,4,20977.52128,TRUE
+Comoros,5,7484.490489,TRUE
+Comoros,7,111437.9893,TRUE
+Comoros,8,47030.54376,TRUE
+Comoros,17,33099.94094,TRUE
+Comoros,105,149702.6633,TRUE
+Comoros,120,115713.1489,TRUE
+Comoros,161,8730.264786,TRUE
+Comoros,169,20509,FALSE
+Comoros,179,121608.9919,TRUE
+Comoros,180,7520.279265,TRUE
+Comoros,203,26179.47154,TRUE
+Comoros,205,158255.8483,TRUE
+Comoros,208,84004.18102,TRUE
+Comoros,219,80605.62094,TRUE
+Comoros,221,53059.48552,TRUE
+Comoros,229,16244.65912,TRUE
+Comoros,231,60255.26389,TRUE
+Comoros,235,149757,FALSE
+Comoros,254,12772,FALSE
+Comoros,84,9355.713607,TRUE
+Comoros,267,9372.487582,TRUE
+Comoros,282,423220.8453,TRUE
+Comoros,286,760050.6713,TRUE
+Comoros,289,9979.922823,TRUE
+Comoros,316,72255.87156,TRUE
+Comoros,317,188762.6372,TRUE
+Comoros,318,32261.2753,TRUE
+Comoros,18,11273.75269,TRUE
+Comoros,19,77366.60983,TRUE
+Comoros,33,30270.38924,TRUE
+Comoros,40,180987.6885,TRUE
+Comoros,49,247408.5214,TRUE
+Comoros,54,175365.1249,TRUE
+Comoros,58,74040.89691,TRUE
+Comoros,59,22326.21725,TRUE
+Comoros,63,234336.5313,TRUE
+Comoros,90,194487.8189,TRUE
+Comoros,94,61002.28577,TRUE
+Comoros,101,138512.4356,TRUE
+Comoros,112,122104.9439,TRUE
+Comoros,138,17125.18189,TRUE
+Comoros,152,119704.6269,TRUE
+Comoros,154,96782.90416,TRUE
+Comoros,158,96473.15601,TRUE
+Comoros,200,22918.25267,TRUE
+Comoros,202,85300.04797,TRUE
+Comoros,206,25218,FALSE
+Comoros,218,52990.31222,TRUE
+Comoros,238,116960.1876,TRUE
+Comoros,243,112174.5654,TRUE
+Comoros,259,55616.6005,TRUE
+Comoros,276,10950.60863,TRUE
+Comoros,279,177754.1672,TRUE
+Comoros,298,120463.1286,TRUE
+Comoros,305,15590.0347,TRUE
+Comoros,306,91716,FALSE
+Comoros,11,178064.2799,TRUE
+Comoros,16,57250,FALSE
+Comoros,48,27222.34375,TRUE
+Comoros,60,22383.25858,TRUE
+Comoros,63,11715.28525,TRUE
+Comoros,121,115777.4722,TRUE
+Comoros,128,8426,FALSE
+Comoros,156,10200.29705,TRUE
+Comoros,217,21196.4891,TRUE
+Comoros,248,14225.32829,TRUE
+Comoros,270,9151.63574,TRUE
+Comoros,52,56317,FALSE
+Comoros,74,3362,FALSE
+Comoros,75,29853,FALSE
+Comoros,80,49992.57574,TRUE
+Comoros,301,72580,FALSE
+Comoros,319,54732,FALSE
+Comoros,51,26504.47085,TRUE
+Comoros,53,6581.96824,TRUE
+Comoros,77,1396,FALSE
+Comoros,213,124295.9159,TRUE
+Comoros,228,133880.2683,TRUE
+Comoros,269,15171.62496,TRUE
+Comoros,296,23548,FALSE
+Comoros,175,70802.39066,TRUE
+Comoros,12,36715.19395,TRUE
+Comoros,13,74728.86082,TRUE
+Comoros,108,12577.92841,TRUE
+Comoros,165,14797.07017,TRUE
+Comoros,215,105585.0293,TRUE
+Comoros,261,8946.089355,TRUE
+Comoros,281,136069.2843,TRUE
+Comoros,302,27087.34387,TRUE
+Comoros,310,36133,TRUE
+Comoros,106,13595.99028,TRUE
+Comoros,30,62885.73079,TRUE
+Comoros,91,126485.3041,TRUE
+Comoros,192,3780098.195,TRUE
+Comoros,249,70032.42373,TRUE
+Comoros,308,35296.76443,TRUE
+Comoros,116,98484.54468,TRUE
+Comoros,234,8162.890747,TRUE
+Comoros,88,138218.959,TRUE
+Comoros,227,7847,FALSE
+Comoros,8,21599.0332,TRUE
+Comoros,115,186672.4488,TRUE
+Comoros,146,28645.96233,TRUE
+Comoros,257,14862.84549,TRUE
+Comoros,39,10075.63454,TRUE
+Comoros,61,218943.5096,TRUE
+Comoros,76,100326.9844,TRUE
+Comoros,268,27005.25,TRUE
+Comoros,194,9390.783666,TRUE
+Comoros,198,5299.135169,TRUE
+Comoros,245,11957.75,TRUE
+Comoros,86,15341.61704,TRUE
+Comoros,247,27947.125,TRUE
+Comoros,15,5922.875,TRUE
+Comoros,135,5719.346191,TRUE
+Comoros,65,4252.65625,TRUE
+Comoros,70,2874,FALSE
+Comoros,314,2458,FALSE
+Comoros,133,6124.625,TRUE
+Comoros,240,4373.4375,TRUE
+Comoros,148,23186,TRUE
+Comoros,31,5157,TRUE
+Congo,4,20977.52128,TRUE
+Congo,5,7484.490489,TRUE
+Congo,7,111437.9893,TRUE
+Congo,8,47030.54376,TRUE
+Congo,17,33099.94094,TRUE
+Congo,105,149702.6633,TRUE
+Congo,120,115713.1489,TRUE
+Congo,161,8730.264786,TRUE
+Congo,169,8373,FALSE
+Congo,179,121608.9919,TRUE
+Congo,180,8800,FALSE
+Congo,203,26179.47154,TRUE
+Congo,205,123552,FALSE
+Congo,208,37573,FALSE
+Congo,219,80605.62094,TRUE
+Congo,221,53059.48552,TRUE
+Congo,229,16244.65912,TRUE
+Congo,231,60255.26389,TRUE
+Congo,235,85392,FALSE
+Congo,254,5903,FALSE
+Congo,84,9355.713607,TRUE
+Congo,267,4576,FALSE
+Congo,282,423220.8453,TRUE
+Congo,286,341424,FALSE
+Congo,289,9979.922823,TRUE
+Congo,316,72255.87156,TRUE
+Congo,317,188762.6372,TRUE
+Congo,318,32261.2753,TRUE
+Congo,18,8242,FALSE
+Congo,19,41180,FALSE
+Congo,33,30270.38924,TRUE
+Congo,40,152057,FALSE
+Congo,49,63962,FALSE
+Congo,54,175365.1249,TRUE
+Congo,58,74040.89691,TRUE
+Congo,59,22326.21725,TRUE
+Congo,63,234336.5313,TRUE
+Congo,90,194487.8189,TRUE
+Congo,94,61002.28577,TRUE
+Congo,101,103601,FALSE
+Congo,112,122104.9439,TRUE
+Congo,138,17125.18189,TRUE
+Congo,152,47775,FALSE
+Congo,154,109078,FALSE
+Congo,158,393360,FALSE
+Congo,200,22918.25267,TRUE
+Congo,202,30130,FALSE
+Congo,206,183393.7134,TRUE
+Congo,218,52990.31222,TRUE
+Congo,238,116960.1876,TRUE
+Congo,243,112174.5654,TRUE
+Congo,259,55616.6005,TRUE
+Congo,276,10950.60863,TRUE
+Congo,279,101819,FALSE
+Congo,298,41191,FALSE
+Congo,305,4502,FALSE
+Congo,306,47914,FALSE
+Congo,11,178064.2799,TRUE
+Congo,16,69669,FALSE
+Congo,48,27222.34375,TRUE
+Congo,60,22383.25858,TRUE
+Congo,63,11715.28525,TRUE
+Congo,121,150794,FALSE
+Congo,128,4995,FALSE
+Congo,156,10200.29705,TRUE
+Congo,217,7444,FALSE
+Congo,248,14225.32829,TRUE
+Congo,270,9151.63574,TRUE
+Congo,52,105225,FALSE
+Congo,74,2677,FALSE
+Congo,75,35121,FALSE
+Congo,80,49992.57574,TRUE
+Congo,301,113987.8459,TRUE
+Congo,319,46664,FALSE
+Congo,51,26504.47085,TRUE
+Congo,53,6581.96824,TRUE
+Congo,77,3103,FALSE
+Congo,213,124827,FALSE
+Congo,228,36874,FALSE
+Congo,269,15171.62496,TRUE
+Congo,296,71121,FALSE
+Congo,175,80607,FALSE
+Congo,12,36715.19395,TRUE
+Congo,13,79980,FALSE
+Congo,108,12577.92841,TRUE
+Congo,165,14797.07017,TRUE
+Congo,215,165807,FALSE
+Congo,261,8946.089355,TRUE
+Congo,281,136069.2843,TRUE
+Congo,302,27087.34387,TRUE
+Congo,310,36133,TRUE
+Congo,106,13595.99028,TRUE
+Congo,30,62885.73079,TRUE
+Congo,91,126485.3041,TRUE
+Congo,192,3780098.195,TRUE
+Congo,249,70032.42373,TRUE
+Congo,308,35296.76443,TRUE
+Congo,116,98484.54468,TRUE
+Congo,234,8162.890747,TRUE
+Congo,88,138218.959,TRUE
+Congo,227,9358.848173,TRUE
+Congo,8,21599.0332,TRUE
+Congo,115,186672.4488,TRUE
+Congo,146,28645.96233,TRUE
+Congo,257,8993,FALSE
+Congo,39,10075.63454,TRUE
+Congo,61,218943.5096,TRUE
+Congo,76,100326.9844,TRUE
+Congo,268,27005.25,TRUE
+Congo,194,9390.783666,TRUE
+Congo,198,5299.135169,TRUE
+Congo,245,11957.75,TRUE
+Congo,86,15341.61704,TRUE
+Congo,247,27947.125,TRUE
+Congo,15,5922.875,TRUE
+Congo,135,5719.346191,TRUE
+Congo,65,4252.65625,TRUE
+Congo,70,8796.273438,TRUE
+Congo,314,4472.643433,TRUE
+Congo,133,6124.625,TRUE
+Congo,240,4373.4375,TRUE
+Congo,148,23186,TRUE
+Congo,31,5157,TRUE
+Cook Islands,4,20977.52128,TRUE
+Cook Islands,5,7484.490489,TRUE
+Cook Islands,7,111437.9893,TRUE
+Cook Islands,8,47030.54376,TRUE
+Cook Islands,17,33099.94094,TRUE
+Cook Islands,105,149702.6633,TRUE
+Cook Islands,120,115713.1489,TRUE
+Cook Islands,161,8730.264786,TRUE
+Cook Islands,169,16777.49735,TRUE
+Cook Islands,179,121608.9919,TRUE
+Cook Islands,180,7520.279265,TRUE
+Cook Islands,203,26179.47154,TRUE
+Cook Islands,205,158255.8483,TRUE
+Cook Islands,208,62799,FALSE
+Cook Islands,219,80605.62094,TRUE
+Cook Islands,221,53059.48552,TRUE
+Cook Islands,229,16244.65912,TRUE
+Cook Islands,231,60255.26389,TRUE
+Cook Islands,235,172280.9273,TRUE
+Cook Islands,254,26952.37295,TRUE
+Cook Islands,84,9355.713607,TRUE
+Cook Islands,267,9372.487582,TRUE
+Cook Islands,282,423220.8453,TRUE
+Cook Islands,286,760050.6713,TRUE
+Cook Islands,289,9979.922823,TRUE
+Cook Islands,316,72255.87156,TRUE
+Cook Islands,317,213944,FALSE
+Cook Islands,318,32261.2753,TRUE
+Cook Islands,18,11273.75269,TRUE
+Cook Islands,19,77366.60983,TRUE
+Cook Islands,33,30270.38924,TRUE
+Cook Islands,40,180987.6885,TRUE
+Cook Islands,49,247408.5214,TRUE
+Cook Islands,54,175365.1249,TRUE
+Cook Islands,58,74040.89691,TRUE
+Cook Islands,59,22326.21725,TRUE
+Cook Islands,63,234336.5313,TRUE
+Cook Islands,90,194487.8189,TRUE
+Cook Islands,94,61002.28577,TRUE
+Cook Islands,101,138512.4356,TRUE
+Cook Islands,112,122104.9439,TRUE
+Cook Islands,138,17125.18189,TRUE
+Cook Islands,152,119704.6269,TRUE
+Cook Islands,154,31755,FALSE
+Cook Islands,158,96473.15601,TRUE
+Cook Islands,200,22918.25267,TRUE
+Cook Islands,202,85300.04797,TRUE
+Cook Islands,206,183393.7134,TRUE
+Cook Islands,218,52990.31222,TRUE
+Cook Islands,238,116960.1876,TRUE
+Cook Islands,243,112174.5654,TRUE
+Cook Islands,259,55616.6005,TRUE
+Cook Islands,276,10950.60863,TRUE
+Cook Islands,279,177754.1672,TRUE
+Cook Islands,298,120463.1286,TRUE
+Cook Islands,305,15590.0347,TRUE
+Cook Islands,306,262324,FALSE
+Cook Islands,11,178064.2799,TRUE
+Cook Islands,16,38766,FALSE
+Cook Islands,48,27222.34375,TRUE
+Cook Islands,60,22383.25858,TRUE
+Cook Islands,63,11715.28525,TRUE
+Cook Islands,121,150045,FALSE
+Cook Islands,128,9353.124815,TRUE
+Cook Islands,156,10200.29705,TRUE
+Cook Islands,217,21196.4891,TRUE
+Cook Islands,248,14225.32829,TRUE
+Cook Islands,270,9151.63574,TRUE
+Cook Islands,52,275977,FALSE
+Cook Islands,74,4541.36112,TRUE
+Cook Islands,75,17044,FALSE
+Cook Islands,80,49992.57574,TRUE
+Cook Islands,301,113987.8459,TRUE
+Cook Islands,319,89190.44102,TRUE
+Cook Islands,51,26504.47085,TRUE
+Cook Islands,53,6581.96824,TRUE
+Cook Islands,77,7188,FALSE
+Cook Islands,213,124295.9159,TRUE
+Cook Islands,228,30029,FALSE
+Cook Islands,269,15171.62496,TRUE
+Cook Islands,296,277405,FALSE
+Cook Islands,175,80728,FALSE
+Cook Islands,12,36715.19395,TRUE
+Cook Islands,13,45796,FALSE
+Cook Islands,108,12577.92841,TRUE
+Cook Islands,165,14797.07017,TRUE
+Cook Islands,215,82717,FALSE
+Cook Islands,261,8946.089355,TRUE
+Cook Islands,281,136069.2843,TRUE
+Cook Islands,302,27087.34387,TRUE
+Cook Islands,310,36133,TRUE
+Cook Islands,106,13595.99028,TRUE
+Cook Islands,30,62885.73079,TRUE
+Cook Islands,91,126485.3041,TRUE
+Cook Islands,192,3780098.195,TRUE
+Cook Islands,249,70032.42373,TRUE
+Cook Islands,308,35296.76443,TRUE
+Cook Islands,116,98484.54468,TRUE
+Cook Islands,234,8162.890747,TRUE
+Cook Islands,88,138218.959,TRUE
+Cook Islands,227,9358.848173,TRUE
+Cook Islands,8,21599.0332,TRUE
+Cook Islands,115,186672.4488,TRUE
+Cook Islands,146,28645.96233,TRUE
+Cook Islands,257,14862.84549,TRUE
+Cook Islands,39,10075.63454,TRUE
+Cook Islands,61,218943.5096,TRUE
+Cook Islands,76,100326.9844,TRUE
+Cook Islands,268,27005.25,TRUE
+Cook Islands,194,9390.783666,TRUE
+Cook Islands,198,5299.135169,TRUE
+Cook Islands,245,11957.75,TRUE
+Cook Islands,86,15341.61704,TRUE
+Cook Islands,247,27947.125,TRUE
+Cook Islands,15,5922.875,TRUE
+Cook Islands,135,5719.346191,TRUE
+Cook Islands,65,4252.65625,TRUE
+Cook Islands,70,8796.273438,TRUE
+Cook Islands,314,11102,FALSE
+Cook Islands,133,6124.625,TRUE
+Cook Islands,240,4373.4375,TRUE
+Cook Islands,148,23186,TRUE
+Cook Islands,31,5157,TRUE
+Costa Rica,4,20977.52128,TRUE
+Costa Rica,5,7484.490489,TRUE
+Costa Rica,7,111437.9893,TRUE
+Costa Rica,8,47030.54376,TRUE
+Costa Rica,17,33099.94094,TRUE
+Costa Rica,105,149702.6633,TRUE
+Costa Rica,120,115713.1489,TRUE
+Costa Rica,161,8730.264786,TRUE
+Costa Rica,169,19434,FALSE
+Costa Rica,179,295494,FALSE
+Costa Rica,180,7520.279265,TRUE
+Costa Rica,203,26179.47154,TRUE
+Costa Rica,205,275282,FALSE
+Costa Rica,208,100000,FALSE
+Costa Rica,219,80605.62094,TRUE
+Costa Rica,221,53059.48552,TRUE
+Costa Rica,229,16244.65912,TRUE
+Costa Rica,231,60255.26389,TRUE
+Costa Rica,235,247068,FALSE
+Costa Rica,254,42396,FALSE
+Costa Rica,84,7380,FALSE
+Costa Rica,267,5998,FALSE
+Costa Rica,282,423220.8453,TRUE
+Costa Rica,286,602400,FALSE
+Costa Rica,289,9979.922823,TRUE
+Costa Rica,316,72255.87156,TRUE
+Costa Rica,317,409865,FALSE
+Costa Rica,318,32261.2753,TRUE
+Costa Rica,18,7634,FALSE
+Costa Rica,19,10031,FALSE
+Costa Rica,33,30270.38924,TRUE
+Costa Rica,40,395499,FALSE
+Costa Rica,49,160480,FALSE
+Costa Rica,54,71456,FALSE
+Costa Rica,58,74040.89691,TRUE
+Costa Rica,59,22326.21725,TRUE
+Costa Rica,63,37675,FALSE
+Costa Rica,90,90871,FALSE
+Costa Rica,94,61002.28577,TRUE
+Costa Rica,101,52678,FALSE
+Costa Rica,112,122104.9439,TRUE
+Costa Rica,138,17125.18189,TRUE
+Costa Rica,152,100013,FALSE
+Costa Rica,154,204787,FALSE
+Costa Rica,158,27897,FALSE
+Costa Rica,200,22918.25267,TRUE
+Costa Rica,202,85300.04797,TRUE
+Costa Rica,206,60954,FALSE
+Costa Rica,218,52990.31222,TRUE
+Costa Rica,238,116960.1876,TRUE
+Costa Rica,243,112174.5654,TRUE
+Costa Rica,259,55616.6005,TRUE
+Costa Rica,276,10950.60863,TRUE
+Costa Rica,279,53363,FALSE
+Costa Rica,298,120463.1286,TRUE
+Costa Rica,305,17500,FALSE
+Costa Rica,306,589091,FALSE
+Costa Rica,11,48627,FALSE
+Costa Rica,16,568154,FALSE
+Costa Rica,48,27222.34375,TRUE
+Costa Rica,60,22383.25858,TRUE
+Costa Rica,63,37675,FALSE
+Costa Rica,121,81110,FALSE
+Costa Rica,128,11366,FALSE
+Costa Rica,156,10200.29705,TRUE
+Costa Rica,217,21196.4891,TRUE
+Costa Rica,248,14225.32829,TRUE
+Costa Rica,270,9151.63574,TRUE
+Costa Rica,52,138505,FALSE
+Costa Rica,74,1625,FALSE
+Costa Rica,75,93584,FALSE
+Costa Rica,80,49992.57574,TRUE
+Costa Rica,301,113987.8459,TRUE
+Costa Rica,319,150000,FALSE
+Costa Rica,51,26504.47085,TRUE
+Costa Rica,53,6581.96824,TRUE
+Costa Rica,77,10399,FALSE
+Costa Rica,213,150360,FALSE
+Costa Rica,228,681549,FALSE
+Costa Rica,269,15171.62496,TRUE
+Costa Rica,296,29710,FALSE
+Costa Rica,175,74859,FALSE
+Costa Rica,12,42801,FALSE
+Costa Rica,13,39321,FALSE
+Costa Rica,108,12577.92841,TRUE
+Costa Rica,165,14797.07017,TRUE
+Costa Rica,215,909091,FALSE
+Costa Rica,261,8946.089355,TRUE
+Costa Rica,281,284768,FALSE
+Costa Rica,302,27087.34387,TRUE
+Costa Rica,310,36133,TRUE
+Costa Rica,106,13595.99028,TRUE
+Costa Rica,30,62885.73079,TRUE
+Costa Rica,91,126485.3041,TRUE
+Costa Rica,192,3780098.195,TRUE
+Costa Rica,249,70032.42373,TRUE
+Costa Rica,308,35296.76443,TRUE
+Costa Rica,116,98484.54468,TRUE
+Costa Rica,234,8162.890747,TRUE
+Costa Rica,88,138218.959,TRUE
+Costa Rica,227,9358.848173,TRUE
+Costa Rica,8,21599.0332,TRUE
+Costa Rica,115,120000,FALSE
+Costa Rica,146,28645.96233,TRUE
+Costa Rica,257,14862.84549,TRUE
+Costa Rica,39,10075.63454,TRUE
+Costa Rica,61,218943.5096,TRUE
+Costa Rica,76,120000,FALSE
+Costa Rica,268,27005.25,TRUE
+Costa Rica,194,9390.783666,TRUE
+Costa Rica,198,5299.135169,TRUE
+Costa Rica,245,11957.75,TRUE
+Costa Rica,86,15341.61704,TRUE
+Costa Rica,247,27947.125,TRUE
+Costa Rica,15,5922.875,TRUE
+Costa Rica,135,5719.346191,TRUE
+Costa Rica,65,4252.65625,TRUE
+Costa Rica,70,8796.273438,TRUE
+Costa Rica,314,4472.643433,TRUE
+Costa Rica,133,11032,FALSE
+Costa Rica,240,4373.4375,TRUE
+Costa Rica,148,23186,TRUE
+Costa Rica,31,5157,TRUE
+Croatia,4,5419,FALSE
+Croatia,5,7484.490489,TRUE
+Croatia,7,72696,FALSE
+Croatia,8,21691,FALSE
+Croatia,17,46592,FALSE
+Croatia,105,22978,FALSE
+Croatia,120,52842,FALSE
+Croatia,161,8730.264786,TRUE
+Croatia,169,86154,FALSE
+Croatia,179,121608.9919,TRUE
+Croatia,180,18410,FALSE
+Croatia,203,17149,FALSE
+Croatia,205,296446,FALSE
+Croatia,208,97931,FALSE
+Croatia,219,47866,FALSE
+Croatia,221,42465,FALSE
+Croatia,229,16244.65912,TRUE
+Croatia,231,23957,FALSE
+Croatia,235,196596,FALSE
+Croatia,254,26952.37295,TRUE
+Croatia,84,9355.713607,TRUE
+Croatia,267,9372.487582,TRUE
+Croatia,282,754936,FALSE
+Croatia,286,760050.6713,TRUE
+Croatia,289,27467,FALSE
+Croatia,316,517,FALSE
+Croatia,317,269247,FALSE
+Croatia,318,57138,FALSE
+Croatia,18,9282,FALSE
+Croatia,19,47504,FALSE
+Croatia,33,30270.38924,TRUE
+Croatia,40,305194,FALSE
+Croatia,49,261853,FALSE
+Croatia,54,161512,FALSE
+Croatia,58,15247,FALSE
+Croatia,59,22326.21725,TRUE
+Croatia,63,142539,FALSE
+Croatia,90,490438,FALSE
+Croatia,94,61002.28577,TRUE
+Croatia,101,138512.4356,TRUE
+Croatia,112,58898,FALSE
+Croatia,138,17125.18189,TRUE
+Croatia,152,151749,FALSE
+Croatia,154,90635,FALSE
+Croatia,158,198652,FALSE
+Croatia,200,30263,FALSE
+Croatia,202,85300.04797,TRUE
+Croatia,206,183393.7134,TRUE
+Croatia,218,76296,FALSE
+Croatia,238,116960.1876,TRUE
+Croatia,243,46845,FALSE
+Croatia,259,36156,FALSE
+Croatia,276,31047,FALSE
+Croatia,279,177754.1672,TRUE
+Croatia,298,249533,FALSE
+Croatia,305,20342,FALSE
+Croatia,306,829919,FALSE
+Croatia,11,178064.2799,TRUE
+Croatia,16,74389.59543,TRUE
+Croatia,48,9156,FALSE
+Croatia,60,22383.25858,TRUE
+Croatia,63,142539,FALSE
+Croatia,121,115777.4722,TRUE
+Croatia,128,9353.124815,TRUE
+Croatia,156,19746,FALSE
+Croatia,217,34648,FALSE
+Croatia,248,30722,FALSE
+Croatia,270,35517,FALSE
+Croatia,52,72720.10141,TRUE
+Croatia,74,4541.36112,TRUE
+Croatia,75,47178.96176,TRUE
+Croatia,80,414200,FALSE
+Croatia,301,113987.8459,TRUE
+Croatia,319,89190.44102,TRUE
+Croatia,51,26504.47085,TRUE
+Croatia,53,6581.96824,TRUE
+Croatia,77,5993.147024,TRUE
+Croatia,213,124295.9159,TRUE
+Croatia,228,133880.2683,TRUE
+Croatia,269,15171.62496,TRUE
+Croatia,296,43692.55808,TRUE
+Croatia,175,70802.39066,TRUE
+Croatia,12,36715.19395,TRUE
+Croatia,13,74728.86082,TRUE
+Croatia,108,8050,FALSE
+Croatia,165,14797.07017,TRUE
+Croatia,215,105585.0293,TRUE
+Croatia,261,8946.089355,TRUE
+Croatia,281,92180,FALSE
+Croatia,302,27087.34387,TRUE
+Croatia,310,36133,TRUE
+Croatia,106,3811,FALSE
+Croatia,30,62885.73079,TRUE
+Croatia,91,126485.3041,TRUE
+Croatia,192,3780098.195,TRUE
+Croatia,249,10053,FALSE
+Croatia,308,41220,FALSE
+Croatia,116,98484.54468,TRUE
+Croatia,234,5219,FALSE
+Croatia,88,138218.959,TRUE
+Croatia,227,9358.848173,TRUE
+Croatia,8,21691,FALSE
+Croatia,115,186672.4488,TRUE
+Croatia,146,28645.96233,TRUE
+Croatia,257,14862.84549,TRUE
+Croatia,39,11204,FALSE
+Croatia,61,284807,FALSE
+Croatia,76,100326.9844,TRUE
+Croatia,268,27005.25,TRUE
+Croatia,194,9390.783666,TRUE
+Croatia,198,5299.135169,TRUE
+Croatia,245,11957.75,TRUE
+Croatia,86,25826,FALSE
+Croatia,247,27947.125,TRUE
+Croatia,15,5922.875,TRUE
+Croatia,135,5719.346191,TRUE
+Croatia,65,4252.65625,TRUE
+Croatia,70,8796.273438,TRUE
+Croatia,314,4472.643433,TRUE
+Croatia,133,6124.625,TRUE
+Croatia,240,4373.4375,TRUE
+Croatia,148,23186,TRUE
+Croatia,31,5157,TRUE
+Cuba,4,20977.52128,TRUE
+Cuba,5,7484.490489,TRUE
+Cuba,7,111437.9893,TRUE
+Cuba,8,47030.54376,TRUE
+Cuba,17,33099.94094,TRUE
+Cuba,105,149702.6633,TRUE
+Cuba,120,129006,FALSE
+Cuba,161,8730.264786,TRUE
+Cuba,169,23734,FALSE
+Cuba,179,79475,FALSE
+Cuba,180,7520.279265,TRUE
+Cuba,203,26179.47154,TRUE
+Cuba,205,129748,FALSE
+Cuba,208,55348,FALSE
+Cuba,219,80605.62094,TRUE
+Cuba,221,53059.48552,TRUE
+Cuba,229,16244.65912,TRUE
+Cuba,231,60255.26389,TRUE
+Cuba,235,217268,FALSE
+Cuba,254,36713,FALSE
+Cuba,84,9355.713607,TRUE
+Cuba,267,9372.487582,TRUE
+Cuba,282,423220.8453,TRUE
+Cuba,286,427101,FALSE
+Cuba,289,9979.922823,TRUE
+Cuba,316,72255.87156,TRUE
+Cuba,317,117601,FALSE
+Cuba,318,32261.2753,TRUE
+Cuba,18,11144,FALSE
+Cuba,19,77366.60983,TRUE
+Cuba,33,30270.38924,TRUE
+Cuba,40,201387,FALSE
+Cuba,49,247408.5214,TRUE
+Cuba,54,175365.1249,TRUE
+Cuba,58,74040.89691,TRUE
+Cuba,59,22326.21725,TRUE
+Cuba,63,116112,FALSE
+Cuba,90,112307,FALSE
+Cuba,94,61002.28577,TRUE
+Cuba,101,138512.4356,TRUE
+Cuba,112,87203,FALSE
+Cuba,138,17125.18189,TRUE
+Cuba,152,119704.6269,TRUE
+Cuba,154,75461,FALSE
+Cuba,158,96473.15601,TRUE
+Cuba,200,22918.25267,TRUE
+Cuba,202,85300.04797,TRUE
+Cuba,206,183393.7134,TRUE
+Cuba,218,52990.31222,TRUE
+Cuba,238,91000,FALSE
+Cuba,243,112174.5654,TRUE
+Cuba,259,55616.6005,TRUE
+Cuba,276,10950.60863,TRUE
+Cuba,279,177754.1672,TRUE
+Cuba,298,138145,FALSE
+Cuba,305,16027,FALSE
+Cuba,306,120220,FALSE
+Cuba,11,178064.2799,TRUE
+Cuba,16,121428,FALSE
+Cuba,48,27222.34375,TRUE
+Cuba,60,22383.25858,TRUE
+Cuba,63,116112,FALSE
+Cuba,121,81208,FALSE
+Cuba,128,10501,FALSE
+Cuba,156,10200.29705,TRUE
+Cuba,217,21196.4891,TRUE
+Cuba,248,14225.32829,TRUE
+Cuba,270,19765,FALSE
+Cuba,52,89030,FALSE
+Cuba,74,4933,FALSE
+Cuba,75,45361,FALSE
+Cuba,80,49992.57574,TRUE
+Cuba,301,113987.8459,TRUE
+Cuba,319,57307,FALSE
+Cuba,51,26504.47085,TRUE
+Cuba,53,6581.96824,TRUE
+Cuba,77,3164,FALSE
+Cuba,213,124295.9159,TRUE
+Cuba,228,63643,FALSE
+Cuba,269,2185,FALSE
+Cuba,296,109034,FALSE
+Cuba,175,109690,FALSE
+Cuba,12,36715.19395,TRUE
+Cuba,13,129882,FALSE
+Cuba,108,12577.92841,TRUE
+Cuba,165,14797.07017,TRUE
+Cuba,215,279489,FALSE
+Cuba,261,8946.089355,TRUE
+Cuba,281,136069.2843,TRUE
+Cuba,302,27087.34387,TRUE
+Cuba,310,36133,TRUE
+Cuba,106,13595.99028,TRUE
+Cuba,30,62885.73079,TRUE
+Cuba,91,126485.3041,TRUE
+Cuba,192,3780098.195,TRUE
+Cuba,249,70032.42373,TRUE
+Cuba,308,35296.76443,TRUE
+Cuba,116,98484.54468,TRUE
+Cuba,234,8162.890747,TRUE
+Cuba,88,138218.959,TRUE
+Cuba,227,9358.848173,TRUE
+Cuba,8,21599.0332,TRUE
+Cuba,115,186672.4488,TRUE
+Cuba,146,28645.96233,TRUE
+Cuba,257,14862.84549,TRUE
+Cuba,39,10075.63454,TRUE
+Cuba,61,218943.5096,TRUE
+Cuba,76,152110,FALSE
+Cuba,268,27005.25,TRUE
+Cuba,194,9390.783666,TRUE
+Cuba,198,5299.135169,TRUE
+Cuba,245,11957.75,TRUE
+Cuba,86,15341.61704,TRUE
+Cuba,247,27947.125,TRUE
+Cuba,15,5922.875,TRUE
+Cuba,135,5719.346191,TRUE
+Cuba,65,4252.65625,TRUE
+Cuba,70,8796.273438,TRUE
+Cuba,314,4472.643433,TRUE
+Cuba,133,6124.625,TRUE
+Cuba,240,4373.4375,TRUE
+Cuba,148,23186,TRUE
+Cuba,31,5157,TRUE
+Cyprus,4,1626,FALSE
+Cyprus,5,7484.490489,TRUE
+Cyprus,7,83683,FALSE
+Cyprus,8,37294,FALSE
+Cyprus,17,19993,FALSE
+Cyprus,105,321444,FALSE
+Cyprus,120,33066,FALSE
+Cyprus,161,8730.264786,TRUE
+Cyprus,169,16777.49735,TRUE
+Cyprus,179,830865,FALSE
+Cyprus,180,7520.279265,TRUE
+Cyprus,203,12721,FALSE
+Cyprus,205,407200,FALSE
+Cyprus,208,271710,FALSE
+Cyprus,219,74141,FALSE
+Cyprus,221,105570,FALSE
+Cyprus,229,2045,FALSE
+Cyprus,231,18004,FALSE
+Cyprus,235,214403,FALSE
+Cyprus,254,26952.37295,TRUE
+Cyprus,84,9355.713607,TRUE
+Cyprus,267,10000,FALSE
+Cyprus,282,423220.8453,TRUE
+Cyprus,286,760050.6713,TRUE
+Cyprus,289,9979.922823,TRUE
+Cyprus,316,6919,FALSE
+Cyprus,317,380037,FALSE
+Cyprus,318,25139,FALSE
+Cyprus,18,30250,FALSE
+Cyprus,19,92548,FALSE
+Cyprus,33,30274,FALSE
+Cyprus,40,390924,FALSE
+Cyprus,49,281081,FALSE
+Cyprus,54,407347,FALSE
+Cyprus,58,18915,FALSE
+Cyprus,59,22326.21725,TRUE
+Cyprus,63,277447,FALSE
+Cyprus,90,533571,FALSE
+Cyprus,94,61002.28577,TRUE
+Cyprus,101,990488,FALSE
+Cyprus,112,167488,FALSE
+Cyprus,138,17125.18189,TRUE
+Cyprus,152,59698,FALSE
+Cyprus,154,214758,FALSE
+Cyprus,158,241458,FALSE
+Cyprus,200,19441,FALSE
+Cyprus,202,277576,FALSE
+Cyprus,206,27458,FALSE
+Cyprus,218,136207,FALSE
+Cyprus,238,277519,FALSE
+Cyprus,243,153750,FALSE
+Cyprus,259,55616.6005,TRUE
+Cyprus,276,10950.60863,TRUE
+Cyprus,279,105600,FALSE
+Cyprus,298,738700,FALSE
+Cyprus,305,43195,FALSE
+Cyprus,306,756346,FALSE
+Cyprus,11,188017,FALSE
+Cyprus,16,265254,FALSE
+Cyprus,48,65976,FALSE
+Cyprus,60,13784,FALSE
+Cyprus,63,277447,FALSE
+Cyprus,121,561550,FALSE
+Cyprus,128,34474,FALSE
+Cyprus,156,5000,FALSE
+Cyprus,217,21196.4891,TRUE
+Cyprus,248,14225.32829,TRUE
+Cyprus,270,9151.63574,TRUE
+Cyprus,52,72720.10141,TRUE
+Cyprus,74,4541.36112,TRUE
+Cyprus,75,47178.96176,TRUE
+Cyprus,80,49992.57574,TRUE
+Cyprus,301,262537,FALSE
+Cyprus,319,89190.44102,TRUE
+Cyprus,51,26504.47085,TRUE
+Cyprus,53,6581.96824,TRUE
+Cyprus,77,5993.147024,TRUE
+Cyprus,213,124295.9159,TRUE
+Cyprus,228,133880.2683,TRUE
+Cyprus,269,15171.62496,TRUE
+Cyprus,296,43692.55808,TRUE
+Cyprus,175,70802.39066,TRUE
+Cyprus,12,36715.19395,TRUE
+Cyprus,13,100588,FALSE
+Cyprus,108,12577.92841,TRUE
+Cyprus,165,14797.07017,TRUE
+Cyprus,215,105585.0293,TRUE
+Cyprus,261,8946.089355,TRUE
+Cyprus,281,323448,FALSE
+Cyprus,302,27087.34387,TRUE
+Cyprus,310,36133,TRUE
+Cyprus,106,15484,FALSE
+Cyprus,30,62885.73079,TRUE
+Cyprus,91,126485.3041,TRUE
+Cyprus,192,3780098.195,TRUE
+Cyprus,249,70032.42373,TRUE
+Cyprus,308,35296.76443,TRUE
+Cyprus,116,98484.54468,TRUE
+Cyprus,234,8162.890747,TRUE
+Cyprus,88,138218.959,TRUE
+Cyprus,227,9358.848173,TRUE
+Cyprus,8,37294,FALSE
+Cyprus,115,186672.4488,TRUE
+Cyprus,146,28645.96233,TRUE
+Cyprus,257,14862.84549,TRUE
+Cyprus,39,10075.63454,TRUE
+Cyprus,61,218943.5096,TRUE
+Cyprus,76,100326.9844,TRUE
+Cyprus,268,27005.25,TRUE
+Cyprus,194,9390.783666,TRUE
+Cyprus,198,5299.135169,TRUE
+Cyprus,245,11957.75,TRUE
+Cyprus,86,9673,FALSE
+Cyprus,247,27947.125,TRUE
+Cyprus,15,5922.875,TRUE
+Cyprus,135,5719.346191,TRUE
+Cyprus,65,4252.65625,TRUE
+Cyprus,70,8796.273438,TRUE
+Cyprus,314,4472.643433,TRUE
+Cyprus,133,6124.625,TRUE
+Cyprus,240,4373.4375,TRUE
+Cyprus,148,23186,TRUE
+Cyprus,31,5157,TRUE
+Czechia,4,20977.52128,TRUE
+Czechia,5,7484.490489,TRUE
+Czechia,7,166863,FALSE
+Czechia,8,6794,FALSE
+Czechia,17,56651,FALSE
+Czechia,105,149702.6633,TRUE
+Czechia,120,48050,FALSE
+Czechia,161,15105,FALSE
+Czechia,169,97882,FALSE
+Czechia,179,121608.9919,TRUE
+Czechia,180,13242,FALSE
+Czechia,203,26179.47154,TRUE
+Czechia,205,271961,FALSE
+Czechia,208,84004.18102,TRUE
+Czechia,219,6997,FALSE
+Czechia,221,88154,FALSE
+Czechia,229,16244.65912,TRUE
+Czechia,231,31955,FALSE
+Czechia,235,298798,FALSE
+Czechia,254,26952.37295,TRUE
+Czechia,84,9355.713607,TRUE
+Czechia,267,9372.487582,TRUE
+Czechia,282,678075,FALSE
+Czechia,286,760050.6713,TRUE
+Czechia,289,28524,FALSE
+Czechia,316,5200,FALSE
+Czechia,317,188762.6372,TRUE
+Czechia,318,64959,FALSE
+Czechia,18,11273.75269,TRUE
+Czechia,19,58462,FALSE
+Czechia,33,12433,FALSE
+Czechia,40,413534,FALSE
+Czechia,49,330683,FALSE
+Czechia,54,106169,FALSE
+Czechia,58,27465,FALSE
+Czechia,59,22326.21725,TRUE
+Czechia,63,8248,FALSE
+Czechia,90,460658,FALSE
+Czechia,94,61002.28577,TRUE
+Czechia,101,138512.4356,TRUE
+Czechia,112,35837,FALSE
+Czechia,138,16151,FALSE
+Czechia,152,119704.6269,TRUE
+Czechia,154,96782.90416,TRUE
+Czechia,158,122303,FALSE
+Czechia,200,35197,FALSE
+Czechia,202,85300.04797,TRUE
+Czechia,206,183393.7134,TRUE
+Czechia,218,41078,FALSE
+Czechia,238,116960.1876,TRUE
+Czechia,243,112174.5654,TRUE
+Czechia,259,49808,FALSE
+Czechia,276,26369,FALSE
+Czechia,279,84694,FALSE
+Czechia,298,120463.1286,TRUE
+Czechia,305,15590.0347,TRUE
+Czechia,306,423304,FALSE
+Czechia,11,178064.2799,TRUE
+Czechia,16,74389.59543,TRUE
+Czechia,48,27222.34375,TRUE
+Czechia,60,22383.25858,TRUE
+Czechia,63,8248,FALSE
+Czechia,121,115777.4722,TRUE
+Czechia,128,9353.124815,TRUE
+Czechia,156,10200.29705,TRUE
+Czechia,217,25827,FALSE
+Czechia,248,34584,FALSE
+Czechia,270,9151.63574,TRUE
+Czechia,52,72720.10141,TRUE
+Czechia,74,4541.36112,TRUE
+Czechia,75,47178.96176,TRUE
+Czechia,80,49992.57574,TRUE
+Czechia,301,113987.8459,TRUE
+Czechia,319,89190.44102,TRUE
+Czechia,51,26504.47085,TRUE
+Czechia,53,6581.96824,TRUE
+Czechia,77,5993.147024,TRUE
+Czechia,213,124295.9159,TRUE
+Czechia,228,133880.2683,TRUE
+Czechia,269,15171.62496,TRUE
+Czechia,296,43692.55808,TRUE
+Czechia,175,70802.39066,TRUE
+Czechia,12,63661,FALSE
+Czechia,13,74728.86082,TRUE
+Czechia,108,12577.92841,TRUE
+Czechia,165,14797.07017,TRUE
+Czechia,215,105585.0293,TRUE
+Czechia,261,8946.089355,TRUE
+Czechia,281,48141,FALSE
+Czechia,302,27087.34387,TRUE
+Czechia,310,36133,TRUE
+Czechia,106,13595.99028,TRUE
+Czechia,30,62885.73079,TRUE
+Czechia,91,20908,FALSE
+Czechia,192,3780098.195,TRUE
+Czechia,249,10878,FALSE
+Czechia,308,48794,FALSE
+Czechia,116,41149,FALSE
+Czechia,234,8039,FALSE
+Czechia,88,138218.959,TRUE
+Czechia,227,9358.848173,TRUE
+Czechia,8,6794,FALSE
+Czechia,115,186672.4488,TRUE
+Czechia,146,28645.96233,TRUE
+Czechia,257,14862.84549,TRUE
+Czechia,39,25424,FALSE
+Czechia,61,218943.5096,TRUE
+Czechia,76,100326.9844,TRUE
+Czechia,268,27005.25,TRUE
+Czechia,194,10528,FALSE
+Czechia,198,5299.135169,TRUE
+Czechia,245,11957.75,TRUE
+Czechia,86,15341.61704,TRUE
+Czechia,247,27947.125,TRUE
+Czechia,15,5922.875,TRUE
+Czechia,135,5719.346191,TRUE
+Czechia,65,4252.65625,TRUE
+Czechia,70,8796.273438,TRUE
+Czechia,314,4472.643433,TRUE
+Czechia,133,6124.625,TRUE
+Czechia,240,4373.4375,TRUE
+Czechia,148,23186,TRUE
+Czechia,31,5157,TRUE
+Democratic People's Republic of Korea,4,20977.52128,TRUE
+Democratic People's Republic of Korea,5,7484.490489,TRUE
+Democratic People's Republic of Korea,7,112082,FALSE
+Democratic People's Republic of Korea,8,47030.54376,TRUE
+Democratic People's Republic of Korea,17,16032,FALSE
+Democratic People's Republic of Korea,105,149702.6633,TRUE
+Democratic People's Republic of Korea,120,115713.1489,TRUE
+Democratic People's Republic of Korea,161,8730.264786,TRUE
+Democratic People's Republic of Korea,169,40316,FALSE
+Democratic People's Republic of Korea,179,107795,FALSE
+Democratic People's Republic of Korea,180,10614,FALSE
+Democratic People's Republic of Korea,203,26179.47154,TRUE
+Democratic People's Republic of Korea,205,98832,FALSE
+Democratic People's Republic of Korea,208,84004.18102,TRUE
+Democratic People's Republic of Korea,219,54592,FALSE
+Democratic People's Republic of Korea,221,103168,FALSE
+Democratic People's Republic of Korea,229,16244.65912,TRUE
+Democratic People's Republic of Korea,231,60255.26389,TRUE
+Democratic People's Republic of Korea,235,121177,FALSE
+Democratic People's Republic of Korea,254,54116,FALSE
+Democratic People's Republic of Korea,84,19820,FALSE
+Democratic People's Republic of Korea,267,9372.487582,TRUE
+Democratic People's Republic of Korea,282,423220.8453,TRUE
+Democratic People's Republic of Korea,286,760050.6713,TRUE
+Democratic People's Republic of Korea,289,9979.922823,TRUE
+Democratic People's Republic of Korea,316,72255.87156,TRUE
+Democratic People's Republic of Korea,317,156406,FALSE
+Democratic People's Republic of Korea,318,15351,FALSE
+Democratic People's Republic of Korea,18,8760,FALSE
+Democratic People's Republic of Korea,19,77366.60983,TRUE
+Democratic People's Republic of Korea,33,30270.38924,TRUE
+Democratic People's Republic of Korea,40,228554,FALSE
+Democratic People's Republic of Korea,49,247408.5214,TRUE
+Democratic People's Republic of Korea,54,175365.1249,TRUE
+Democratic People's Republic of Korea,58,74040.89691,TRUE
+Democratic People's Republic of Korea,59,23544,FALSE
+Democratic People's Republic of Korea,63,21204,FALSE
+Democratic People's Republic of Korea,90,109308,FALSE
+Democratic People's Republic of Korea,94,61002.28577,TRUE
+Democratic People's Republic of Korea,101,91423,FALSE
+Democratic People's Republic of Korea,112,107168,FALSE
+Democratic People's Republic of Korea,138,4380,FALSE
+Democratic People's Republic of Korea,152,119704.6269,TRUE
+Democratic People's Republic of Korea,154,96782.90416,TRUE
+Democratic People's Republic of Korea,158,96473.15601,TRUE
+Democratic People's Republic of Korea,200,12963,FALSE
+Democratic People's Republic of Korea,202,85300.04797,TRUE
+Democratic People's Republic of Korea,206,123990,FALSE
+Democratic People's Republic of Korea,218,52990.31222,TRUE
+Democratic People's Republic of Korea,238,94312,FALSE
+Democratic People's Republic of Korea,243,112174.5654,TRUE
+Democratic People's Republic of Korea,259,12366,FALSE
+Democratic People's Republic of Korea,276,11612,FALSE
+Democratic People's Republic of Korea,279,177754.1672,TRUE
+Democratic People's Republic of Korea,298,120463.1286,TRUE
+Democratic People's Republic of Korea,305,14989,FALSE
+Democratic People's Republic of Korea,306,77795,FALSE
+Democratic People's Republic of Korea,11,178064.2799,TRUE
+Democratic People's Republic of Korea,16,74389.59543,TRUE
+Democratic People's Republic of Korea,48,27222.34375,TRUE
+Democratic People's Republic of Korea,60,22383.25858,TRUE
+Democratic People's Republic of Korea,63,21204,FALSE
+Democratic People's Republic of Korea,121,115777.4722,TRUE
+Democratic People's Republic of Korea,128,9353.124815,TRUE
+Democratic People's Republic of Korea,156,10200.29705,TRUE
+Democratic People's Republic of Korea,217,21196.4891,TRUE
+Democratic People's Republic of Korea,248,14225.32829,TRUE
+Democratic People's Republic of Korea,270,9227,FALSE
+Democratic People's Republic of Korea,52,72720.10141,TRUE
+Democratic People's Republic of Korea,74,4541.36112,TRUE
+Democratic People's Republic of Korea,75,47178.96176,TRUE
+Democratic People's Republic of Korea,80,49992.57574,TRUE
+Democratic People's Republic of Korea,301,113987.8459,TRUE
+Democratic People's Republic of Korea,319,89190.44102,TRUE
+Democratic People's Republic of Korea,51,26504.47085,TRUE
+Democratic People's Republic of Korea,53,6581.96824,TRUE
+Democratic People's Republic of Korea,77,5993.147024,TRUE
+Democratic People's Republic of Korea,213,124295.9159,TRUE
+Democratic People's Republic of Korea,228,133880.2683,TRUE
+Democratic People's Republic of Korea,269,15171.62496,TRUE
+Democratic People's Republic of Korea,296,135897,FALSE
+Democratic People's Republic of Korea,175,70802.39066,TRUE
+Democratic People's Republic of Korea,12,36715.19395,TRUE
+Democratic People's Republic of Korea,13,74728.86082,TRUE
+Democratic People's Republic of Korea,108,12577.92841,TRUE
+Democratic People's Republic of Korea,165,14797.07017,TRUE
+Democratic People's Republic of Korea,215,105585.0293,TRUE
+Democratic People's Republic of Korea,261,8946.089355,TRUE
+Democratic People's Republic of Korea,281,136069.2843,TRUE
+Democratic People's Republic of Korea,302,27087.34387,TRUE
+Democratic People's Republic of Korea,310,36133,TRUE
+Democratic People's Republic of Korea,106,13595.99028,TRUE
+Democratic People's Republic of Korea,30,62885.73079,TRUE
+Democratic People's Republic of Korea,91,126485.3041,TRUE
+Democratic People's Republic of Korea,192,3780098.195,TRUE
+Democratic People's Republic of Korea,249,70032.42373,TRUE
+Democratic People's Republic of Korea,308,35296.76443,TRUE
+Democratic People's Republic of Korea,116,98484.54468,TRUE
+Democratic People's Republic of Korea,234,8162.890747,TRUE
+Democratic People's Republic of Korea,88,138218.959,TRUE
+Democratic People's Republic of Korea,227,9358.848173,TRUE
+Democratic People's Republic of Korea,8,21599.0332,TRUE
+Democratic People's Republic of Korea,115,186672.4488,TRUE
+Democratic People's Republic of Korea,146,28645.96233,TRUE
+Democratic People's Republic of Korea,257,14862.84549,TRUE
+Democratic People's Republic of Korea,39,10075.63454,TRUE
+Democratic People's Republic of Korea,61,218943.5096,TRUE
+Democratic People's Republic of Korea,76,100326.9844,TRUE
+Democratic People's Republic of Korea,268,27005.25,TRUE
+Democratic People's Republic of Korea,194,9390.783666,TRUE
+Democratic People's Republic of Korea,198,5299.135169,TRUE
+Democratic People's Republic of Korea,245,11957.75,TRUE
+Democratic People's Republic of Korea,86,15341.61704,TRUE
+Democratic People's Republic of Korea,247,27947.125,TRUE
+Democratic People's Republic of Korea,15,5922.875,TRUE
+Democratic People's Republic of Korea,135,5719.346191,TRUE
+Democratic People's Republic of Korea,65,4252.65625,TRUE
+Democratic People's Republic of Korea,70,8796.273438,TRUE
+Democratic People's Republic of Korea,314,4472.643433,TRUE
+Democratic People's Republic of Korea,133,6124.625,TRUE
+Democratic People's Republic of Korea,240,4373.4375,TRUE
+Democratic People's Republic of Korea,148,23186,TRUE
+Democratic People's Republic of Korea,31,5157,TRUE
+Democratic Republic of the Congo,4,20977.52128,TRUE
+Democratic Republic of the Congo,5,7484.490489,TRUE
+Democratic Republic of the Congo,7,111437.9893,TRUE
+Democratic Republic of the Congo,8,47030.54376,TRUE
+Democratic Republic of the Congo,17,6818,FALSE
+Democratic Republic of the Congo,105,149702.6633,TRUE
+Democratic Republic of the Congo,120,115713.1489,TRUE
+Democratic Republic of the Congo,161,8730.264786,TRUE
+Democratic Republic of the Congo,169,7767,FALSE
+Democratic Republic of the Congo,179,121608.9919,TRUE
+Democratic Republic of the Congo,180,6687,FALSE
+Democratic Republic of the Congo,203,26179.47154,TRUE
+Democratic Republic of the Congo,205,53659,FALSE
+Democratic Republic of the Congo,208,153952,FALSE
+Democratic Republic of the Congo,219,80605.62094,TRUE
+Democratic Republic of the Congo,221,53059.48552,TRUE
+Democratic Republic of the Congo,229,16244.65912,TRUE
+Democratic Republic of the Congo,231,60255.26389,TRUE
+Democratic Republic of the Congo,235,46342,FALSE
+Democratic Republic of the Congo,254,7610,FALSE
+Democratic Republic of the Congo,84,4268,FALSE
+Democratic Republic of the Congo,267,4351,FALSE
+Democratic Republic of the Congo,282,423220.8453,TRUE
+Democratic Republic of the Congo,286,448034,FALSE
+Democratic Republic of the Congo,289,9979.922823,TRUE
+Democratic Republic of the Congo,316,72255.87156,TRUE
+Democratic Republic of the Congo,317,188762.6372,TRUE
+Democratic Republic of the Congo,318,13237,FALSE
+Democratic Republic of the Congo,18,5521,FALSE
+Democratic Republic of the Congo,19,42056,FALSE
+Democratic Republic of the Congo,33,30270.38924,TRUE
+Democratic Republic of the Congo,40,172270,FALSE
+Democratic Republic of the Congo,49,85841,FALSE
+Democratic Republic of the Congo,54,175365.1249,TRUE
+Democratic Republic of the Congo,58,74040.89691,TRUE
+Democratic Republic of the Congo,59,22326.21725,TRUE
+Democratic Republic of the Congo,63,35212,FALSE
+Democratic Republic of the Congo,90,40960,FALSE
+Democratic Republic of the Congo,94,61002.28577,TRUE
+Democratic Republic of the Congo,101,138512.4356,TRUE
+Democratic Republic of the Congo,112,122104.9439,TRUE
+Democratic Republic of the Congo,138,17125.18189,TRUE
+Democratic Republic of the Congo,152,119704.6269,TRUE
+Democratic Republic of the Congo,154,152259,FALSE
+Democratic Republic of the Congo,158,397135,FALSE
+Democratic Republic of the Congo,200,22918.25267,TRUE
+Democratic Republic of the Congo,202,85300.04797,TRUE
+Democratic Republic of the Congo,206,183393.7134,TRUE
+Democratic Republic of the Congo,218,52990.31222,TRUE
+Democratic Republic of the Congo,238,105354,FALSE
+Democratic Republic of the Congo,243,112174.5654,TRUE
+Democratic Republic of the Congo,259,55616.6005,TRUE
+Democratic Republic of the Congo,276,4375,FALSE
+Democratic Republic of the Congo,279,177754.1672,TRUE
+Democratic Republic of the Congo,298,120463.1286,TRUE
+Democratic Republic of the Congo,305,4984,FALSE
+Democratic Republic of the Congo,306,74730,FALSE
+Democratic Republic of the Congo,11,178064.2799,TRUE
+Democratic Republic of the Congo,16,37295,FALSE
+Democratic Republic of the Congo,48,27222.34375,TRUE
+Democratic Republic of the Congo,60,22383.25858,TRUE
+Democratic Republic of the Congo,63,35212,FALSE
+Democratic Republic of the Congo,121,152274,FALSE
+Democratic Republic of the Congo,128,8514,FALSE
+Democratic Republic of the Congo,156,10200.29705,TRUE
+Democratic Republic of the Congo,217,4055,FALSE
+Democratic Republic of the Congo,248,14225.32829,TRUE
+Democratic Republic of the Congo,270,6560,FALSE
+Democratic Republic of the Congo,52,81483,FALSE
+Democratic Republic of the Congo,74,2712,FALSE
+Democratic Republic of the Congo,75,47178.96176,TRUE
+Democratic Republic of the Congo,80,49992.57574,TRUE
+Democratic Republic of the Congo,301,39920,FALSE
+Democratic Republic of the Congo,319,43480,FALSE
+Democratic Republic of the Congo,51,26504.47085,TRUE
+Democratic Republic of the Congo,53,6581.96824,TRUE
+Democratic Republic of the Congo,77,3915,FALSE
+Democratic Republic of the Congo,213,66473,FALSE
+Democratic Republic of the Congo,228,248298,FALSE
+Democratic Republic of the Congo,269,15171.62496,TRUE
+Democratic Republic of the Congo,296,50119,FALSE
+Democratic Republic of the Congo,175,164442,FALSE
+Democratic Republic of the Congo,12,36715.19395,TRUE
+Democratic Republic of the Congo,13,71619,FALSE
+Democratic Republic of the Congo,108,12577.92841,TRUE
+Democratic Republic of the Congo,165,14797.07017,TRUE
+Democratic Republic of the Congo,215,169147,FALSE
+Democratic Republic of the Congo,261,8946.089355,TRUE
+Democratic Republic of the Congo,281,136069.2843,TRUE
+Democratic Republic of the Congo,302,529,FALSE
+Democratic Republic of the Congo,310,36133,TRUE
+Democratic Republic of the Congo,106,13595.99028,TRUE
+Democratic Republic of the Congo,30,62885.73079,TRUE
+Democratic Republic of the Congo,91,126485.3041,TRUE
+Democratic Republic of the Congo,192,3780098.195,TRUE
+Democratic Republic of the Congo,249,70032.42373,TRUE
+Democratic Republic of the Congo,308,35296.76443,TRUE
+Democratic Republic of the Congo,116,98484.54468,TRUE
+Democratic Republic of the Congo,234,8162.890747,TRUE
+Democratic Republic of the Congo,88,138218.959,TRUE
+Democratic Republic of the Congo,227,6131,FALSE
+Democratic Republic of the Congo,8,21599.0332,TRUE
+Democratic Republic of the Congo,115,186672.4488,TRUE
+Democratic Republic of the Congo,146,28645.96233,TRUE
+Democratic Republic of the Congo,257,2325,FALSE
+Democratic Republic of the Congo,39,10075.63454,TRUE
+Democratic Republic of the Congo,61,218943.5096,TRUE
+Democratic Republic of the Congo,76,100326.9844,TRUE
+Democratic Republic of the Congo,268,27005.25,TRUE
+Democratic Republic of the Congo,194,9390.783666,TRUE
+Democratic Republic of the Congo,198,5299.135169,TRUE
+Democratic Republic of the Congo,245,11957.75,TRUE
+Democratic Republic of the Congo,86,4299,FALSE
+Democratic Republic of the Congo,247,27947.125,TRUE
+Democratic Republic of the Congo,15,4258,FALSE
+Democratic Republic of the Congo,135,5719.346191,TRUE
+Democratic Republic of the Congo,65,4252.65625,TRUE
+Democratic Republic of the Congo,70,8796.273438,TRUE
+Democratic Republic of the Congo,314,4472.643433,TRUE
+Democratic Republic of the Congo,133,6124.625,TRUE
+Democratic Republic of the Congo,240,4373.4375,TRUE
+Democratic Republic of the Congo,148,23186,TRUE
+Democratic Republic of the Congo,31,5157,TRUE
+Denmark,4,20977.52128,TRUE
+Denmark,5,5522,FALSE
+Denmark,7,274211,FALSE
+Denmark,8,47030.54376,TRUE
+Denmark,17,55872,FALSE
+Denmark,105,149702.6633,TRUE
+Denmark,120,115713.1489,TRUE
+Denmark,161,3400,FALSE
+Denmark,169,76842,FALSE
+Denmark,179,121608.9919,TRUE
+Denmark,180,7520.279265,TRUE
+Denmark,203,26179.47154,TRUE
+Denmark,205,421429,FALSE
+Denmark,208,84004.18102,TRUE
+Denmark,219,80605.62094,TRUE
+Denmark,221,228571,FALSE
+Denmark,229,16244.65912,TRUE
+Denmark,231,55000,FALSE
+Denmark,235,424786,FALSE
+Denmark,254,26952.37295,TRUE
+Denmark,84,9355.713607,TRUE
+Denmark,267,9372.487582,TRUE
+Denmark,282,490912,FALSE
+Denmark,286,760050.6713,TRUE
+Denmark,289,9979.922823,TRUE
+Denmark,316,72255.87156,TRUE
+Denmark,317,188762.6372,TRUE
+Denmark,318,72067,FALSE
+Denmark,18,11273.75269,TRUE
+Denmark,19,77366.60983,TRUE
+Denmark,33,30270.38924,TRUE
+Denmark,40,328509,FALSE
+Denmark,49,549299,FALSE
+Denmark,54,70556,FALSE
+Denmark,58,34828,FALSE
+Denmark,59,22326.21725,TRUE
+Denmark,63,234336.5313,TRUE
+Denmark,90,2495000,FALSE
+Denmark,94,61002.28577,TRUE
+Denmark,101,138512.4356,TRUE
+Denmark,112,122104.9439,TRUE
+Denmark,138,17125.18189,TRUE
+Denmark,152,161111,FALSE
+Denmark,154,96782.90416,TRUE
+Denmark,158,214583,FALSE
+Denmark,200,50739,FALSE
+Denmark,202,85300.04797,TRUE
+Denmark,206,183393.7134,TRUE
+Denmark,218,45068,FALSE
+Denmark,238,116960.1876,TRUE
+Denmark,243,112174.5654,TRUE
+Denmark,259,57952,FALSE
+Denmark,276,10950.60863,TRUE
+Denmark,279,96250,FALSE
+Denmark,298,120463.1286,TRUE
+Denmark,305,15590.0347,TRUE
+Denmark,306,3526667,FALSE
+Denmark,11,178064.2799,TRUE
+Denmark,16,74389.59543,TRUE
+Denmark,48,27222.34375,TRUE
+Denmark,60,22383.25858,TRUE
+Denmark,63,11715.28525,TRUE
+Denmark,121,115777.4722,TRUE
+Denmark,128,9353.124815,TRUE
+Denmark,156,10200.29705,TRUE
+Denmark,217,36667,FALSE
+Denmark,248,31017,FALSE
+Denmark,270,9151.63574,TRUE
+Denmark,52,72720.10141,TRUE
+Denmark,74,4541.36112,TRUE
+Denmark,75,47178.96176,TRUE
+Denmark,80,49992.57574,TRUE
+Denmark,301,113987.8459,TRUE
+Denmark,319,89190.44102,TRUE
+Denmark,51,26504.47085,TRUE
+Denmark,53,6581.96824,TRUE
+Denmark,77,5993.147024,TRUE
+Denmark,213,124295.9159,TRUE
+Denmark,228,133880.2683,TRUE
+Denmark,269,15171.62496,TRUE
+Denmark,296,43692.55808,TRUE
+Denmark,175,70802.39066,TRUE
+Denmark,12,23077,FALSE
+Denmark,13,74728.86082,TRUE
+Denmark,108,12577.92841,TRUE
+Denmark,165,14797.07017,TRUE
+Denmark,215,105585.0293,TRUE
+Denmark,261,8946.089355,TRUE
+Denmark,281,67265,FALSE
+Denmark,302,27087.34387,TRUE
+Denmark,310,36133,TRUE
+Denmark,106,7840,FALSE
+Denmark,30,6667,FALSE
+Denmark,91,65933,FALSE
+Denmark,192,3780098.195,TRUE
+Denmark,249,50000,FALSE
+Denmark,308,55644,FALSE
+Denmark,116,98484.54468,TRUE
+Denmark,234,8162.890747,TRUE
+Denmark,88,138218.959,TRUE
+Denmark,227,9358.848173,TRUE
+Denmark,8,21599.0332,TRUE
+Denmark,115,186672.4488,TRUE
+Denmark,146,28645.96233,TRUE
+Denmark,257,14862.84549,TRUE
+Denmark,39,10075.63454,TRUE
+Denmark,61,218943.5096,TRUE
+Denmark,76,100326.9844,TRUE
+Denmark,268,27005.25,TRUE
+Denmark,194,9344,FALSE
+Denmark,198,5299.135169,TRUE
+Denmark,245,11957.75,TRUE
+Denmark,86,15341.61704,TRUE
+Denmark,247,27947.125,TRUE
+Denmark,15,5922.875,TRUE
+Denmark,135,5719.346191,TRUE
+Denmark,65,4252.65625,TRUE
+Denmark,70,8796.273438,TRUE
+Denmark,314,4472.643433,TRUE
+Denmark,133,6124.625,TRUE
+Denmark,240,4373.4375,TRUE
+Denmark,148,23186,TRUE
+Denmark,31,5157,TRUE
+Djibouti,4,20977.52128,TRUE
+Djibouti,5,7484.490489,TRUE
+Djibouti,7,111437.9893,TRUE
+Djibouti,8,47030.54376,TRUE
+Djibouti,17,33099.94094,TRUE
+Djibouti,105,149702.6633,TRUE
+Djibouti,120,115713.1489,TRUE
+Djibouti,161,8730.264786,TRUE
+Djibouti,169,19256,FALSE
+Djibouti,179,121608.9919,TRUE
+Djibouti,180,7520.279265,TRUE
+Djibouti,203,26179.47154,TRUE
+Djibouti,205,158255.8483,TRUE
+Djibouti,208,84004.18102,TRUE
+Djibouti,219,80605.62094,TRUE
+Djibouti,221,53059.48552,TRUE
+Djibouti,229,16244.65912,TRUE
+Djibouti,231,60255.26389,TRUE
+Djibouti,235,172280.9273,TRUE
+Djibouti,254,26952.37295,TRUE
+Djibouti,84,9355.713607,TRUE
+Djibouti,267,9372.487582,TRUE
+Djibouti,282,423220.8453,TRUE
+Djibouti,286,760050.6713,TRUE
+Djibouti,289,9979.922823,TRUE
+Djibouti,316,72255.87156,TRUE
+Djibouti,317,188762.6372,TRUE
+Djibouti,318,32261.2753,TRUE
+Djibouti,18,3198,FALSE
+Djibouti,19,77366.60983,TRUE
+Djibouti,33,30270.38924,TRUE
+Djibouti,40,180987.6885,TRUE
+Djibouti,49,247408.5214,TRUE
+Djibouti,54,175365.1249,TRUE
+Djibouti,58,74040.89691,TRUE
+Djibouti,59,22326.21725,TRUE
+Djibouti,63,18281,FALSE
+Djibouti,90,194487.8189,TRUE
+Djibouti,94,61002.28577,TRUE
+Djibouti,101,138512.4356,TRUE
+Djibouti,112,122104.9439,TRUE
+Djibouti,138,17125.18189,TRUE
+Djibouti,152,119704.6269,TRUE
+Djibouti,154,96782.90416,TRUE
+Djibouti,158,96473.15601,TRUE
+Djibouti,200,22918.25267,TRUE
+Djibouti,202,85300.04797,TRUE
+Djibouti,206,183393.7134,TRUE
+Djibouti,218,52990.31222,TRUE
+Djibouti,238,116960.1876,TRUE
+Djibouti,243,112174.5654,TRUE
+Djibouti,259,55616.6005,TRUE
+Djibouti,276,10950.60863,TRUE
+Djibouti,279,177754.1672,TRUE
+Djibouti,298,120463.1286,TRUE
+Djibouti,305,15590.0347,TRUE
+Djibouti,306,131681.4608,TRUE
+Djibouti,11,178064.2799,TRUE
+Djibouti,16,74389.59543,TRUE
+Djibouti,48,27222.34375,TRUE
+Djibouti,60,22383.25858,TRUE
+Djibouti,63,18281,FALSE
+Djibouti,121,115777.4722,TRUE
+Djibouti,128,9353.124815,TRUE
+Djibouti,156,10200.29705,TRUE
+Djibouti,217,21196.4891,TRUE
+Djibouti,248,14225.32829,TRUE
+Djibouti,270,9151.63574,TRUE
+Djibouti,52,72720.10141,TRUE
+Djibouti,74,4541.36112,TRUE
+Djibouti,75,47178.96176,TRUE
+Djibouti,80,49992.57574,TRUE
+Djibouti,301,113987.8459,TRUE
+Djibouti,319,89190.44102,TRUE
+Djibouti,51,26504.47085,TRUE
+Djibouti,53,6581.96824,TRUE
+Djibouti,77,5993.147024,TRUE
+Djibouti,213,124295.9159,TRUE
+Djibouti,228,133880.2683,TRUE
+Djibouti,269,15171.62496,TRUE
+Djibouti,296,43692.55808,TRUE
+Djibouti,175,70802.39066,TRUE
+Djibouti,12,36715.19395,TRUE
+Djibouti,13,74728.86082,TRUE
+Djibouti,108,12577.92841,TRUE
+Djibouti,165,14797.07017,TRUE
+Djibouti,215,105585.0293,TRUE
+Djibouti,261,8946.089355,TRUE
+Djibouti,281,136069.2843,TRUE
+Djibouti,302,27087.34387,TRUE
+Djibouti,310,36133,TRUE
+Djibouti,106,13595.99028,TRUE
+Djibouti,30,62885.73079,TRUE
+Djibouti,91,126485.3041,TRUE
+Djibouti,192,3780098.195,TRUE
+Djibouti,249,70032.42373,TRUE
+Djibouti,308,35296.76443,TRUE
+Djibouti,116,98484.54468,TRUE
+Djibouti,234,8162.890747,TRUE
+Djibouti,88,138218.959,TRUE
+Djibouti,227,9358.848173,TRUE
+Djibouti,8,21599.0332,TRUE
+Djibouti,115,186672.4488,TRUE
+Djibouti,146,28645.96233,TRUE
+Djibouti,257,14862.84549,TRUE
+Djibouti,39,10075.63454,TRUE
+Djibouti,61,218943.5096,TRUE
+Djibouti,76,100326.9844,TRUE
+Djibouti,268,27005.25,TRUE
+Djibouti,194,9390.783666,TRUE
+Djibouti,198,5299.135169,TRUE
+Djibouti,245,11957.75,TRUE
+Djibouti,86,15341.61704,TRUE
+Djibouti,247,27947.125,TRUE
+Djibouti,15,5922.875,TRUE
+Djibouti,135,5719.346191,TRUE
+Djibouti,65,4252.65625,TRUE
+Djibouti,70,8796.273438,TRUE
+Djibouti,314,4472.643433,TRUE
+Djibouti,133,6124.625,TRUE
+Djibouti,240,4373.4375,TRUE
+Djibouti,148,23186,TRUE
+Djibouti,31,5157,TRUE
+Dominica,4,20977.52128,TRUE
+Dominica,5,7484.490489,TRUE
+Dominica,7,111437.9893,TRUE
+Dominica,8,47030.54376,TRUE
+Dominica,17,33099.94094,TRUE
+Dominica,105,149702.6633,TRUE
+Dominica,120,115713.1489,TRUE
+Dominica,161,8730.264786,TRUE
+Dominica,169,16962,FALSE
+Dominica,179,121608.9919,TRUE
+Dominica,180,7520.279265,TRUE
+Dominica,203,26179.47154,TRUE
+Dominica,205,158255.8483,TRUE
+Dominica,208,90426,FALSE
+Dominica,219,80605.62094,TRUE
+Dominica,221,53059.48552,TRUE
+Dominica,229,16244.65912,TRUE
+Dominica,231,60255.26389,TRUE
+Dominica,235,155617,FALSE
+Dominica,254,26952.37295,TRUE
+Dominica,84,9355.713607,TRUE
+Dominica,267,9372.487582,TRUE
+Dominica,282,423220.8453,TRUE
+Dominica,286,199144,FALSE
+Dominica,289,9979.922823,TRUE
+Dominica,316,72255.87156,TRUE
+Dominica,317,188762.6372,TRUE
+Dominica,318,32261.2753,TRUE
+Dominica,18,11273.75269,TRUE
+Dominica,19,77366.60983,TRUE
+Dominica,33,30270.38924,TRUE
+Dominica,40,98259,FALSE
+Dominica,49,93095,FALSE
+Dominica,54,175365.1249,TRUE
+Dominica,58,74040.89691,TRUE
+Dominica,59,22326.21725,TRUE
+Dominica,63,234336.5313,TRUE
+Dominica,90,65038,FALSE
+Dominica,94,61002.28577,TRUE
+Dominica,101,138512.4356,TRUE
+Dominica,112,122104.9439,TRUE
+Dominica,138,17125.18189,TRUE
+Dominica,152,119704.6269,TRUE
+Dominica,154,68974,FALSE
+Dominica,158,135976,FALSE
+Dominica,200,22918.25267,TRUE
+Dominica,202,85300.04797,TRUE
+Dominica,206,183393.7134,TRUE
+Dominica,218,52990.31222,TRUE
+Dominica,238,101161,FALSE
+Dominica,243,112174.5654,TRUE
+Dominica,259,55616.6005,TRUE
+Dominica,276,10950.60863,TRUE
+Dominica,279,177754.1672,TRUE
+Dominica,298,120463.1286,TRUE
+Dominica,305,15590.0347,TRUE
+Dominica,306,114412,FALSE
+Dominica,11,178064.2799,TRUE
+Dominica,16,76686,FALSE
+Dominica,48,27222.34375,TRUE
+Dominica,60,22383.25858,TRUE
+Dominica,63,11715.28525,TRUE
+Dominica,121,95048,FALSE
+Dominica,128,9353.124815,TRUE
+Dominica,156,10200.29705,TRUE
+Dominica,217,21196.4891,TRUE
+Dominica,248,14225.32829,TRUE
+Dominica,270,9151.63574,TRUE
+Dominica,52,78770,FALSE
+Dominica,74,1061,FALSE
+Dominica,75,29813,FALSE
+Dominica,80,49992.57574,TRUE
+Dominica,301,99453,FALSE
+Dominica,319,116497,FALSE
+Dominica,51,26504.47085,TRUE
+Dominica,53,6581.96824,TRUE
+Dominica,77,4140,FALSE
+Dominica,213,124295.9159,TRUE
+Dominica,228,145463,FALSE
+Dominica,269,15171.62496,TRUE
+Dominica,296,57279,FALSE
+Dominica,175,8774,FALSE
+Dominica,12,36715.19395,TRUE
+Dominica,13,24573,FALSE
+Dominica,108,12577.92841,TRUE
+Dominica,165,14797.07017,TRUE
+Dominica,215,164404,FALSE
+Dominica,261,8946.089355,TRUE
+Dominica,281,136069.2843,TRUE
+Dominica,302,27087.34387,TRUE
+Dominica,310,36133,TRUE
+Dominica,106,13595.99028,TRUE
+Dominica,30,62885.73079,TRUE
+Dominica,91,126485.3041,TRUE
+Dominica,192,3780098.195,TRUE
+Dominica,249,70032.42373,TRUE
+Dominica,308,35296.76443,TRUE
+Dominica,116,98484.54468,TRUE
+Dominica,234,8162.890747,TRUE
+Dominica,88,138218.959,TRUE
+Dominica,227,9358.848173,TRUE
+Dominica,8,21599.0332,TRUE
+Dominica,115,29964,FALSE
+Dominica,146,28645.96233,TRUE
+Dominica,257,14862.84549,TRUE
+Dominica,39,10075.63454,TRUE
+Dominica,61,218943.5096,TRUE
+Dominica,76,56399,FALSE
+Dominica,268,27005.25,TRUE
+Dominica,194,9390.783666,TRUE
+Dominica,198,17260,FALSE
+Dominica,245,11957.75,TRUE
+Dominica,86,15341.61704,TRUE
+Dominica,247,27947.125,TRUE
+Dominica,15,5922.875,TRUE
+Dominica,135,5719.346191,TRUE
+Dominica,65,6231,FALSE
+Dominica,70,8796.273438,TRUE
+Dominica,314,4472.643433,TRUE
+Dominica,133,6124.625,TRUE
+Dominica,240,4373.4375,TRUE
+Dominica,148,23186,TRUE
+Dominica,31,5157,TRUE
+Dominican Republic,4,20977.52128,TRUE
+Dominican Republic,5,7484.490489,TRUE
+Dominican Republic,7,111437.9893,TRUE
+Dominican Republic,8,47030.54376,TRUE
+Dominican Republic,17,33099.94094,TRUE
+Dominican Republic,105,149702.6633,TRUE
+Dominican Republic,120,115713.1489,TRUE
+Dominican Republic,161,8730.264786,TRUE
+Dominican Republic,169,16469,FALSE
+Dominican Republic,179,264284,FALSE
+Dominican Republic,180,7520.279265,TRUE
+Dominican Republic,203,26179.47154,TRUE
+Dominican Republic,205,134684,FALSE
+Dominican Republic,208,164378,FALSE
+Dominican Republic,219,80605.62094,TRUE
+Dominican Republic,221,53059.48552,TRUE
+Dominican Republic,229,16244.65912,TRUE
+Dominican Republic,231,60255.26389,TRUE
+Dominican Republic,235,267155,FALSE
+Dominican Republic,254,52563,FALSE
+Dominican Republic,84,9355.713607,TRUE
+Dominican Republic,267,9372.487582,TRUE
+Dominican Republic,282,423220.8453,TRUE
+Dominican Republic,286,441670,FALSE
+Dominican Republic,289,9979.922823,TRUE
+Dominican Republic,316,72255.87156,TRUE
+Dominican Republic,317,188762.6372,TRUE
+Dominican Republic,318,32261.2753,TRUE
+Dominican Republic,18,9297,FALSE
+Dominican Republic,19,77366.60983,TRUE
+Dominican Republic,33,13428,FALSE
+Dominican Republic,40,503824,FALSE
+Dominican Republic,49,230306,FALSE
+Dominican Republic,54,175365.1249,TRUE
+Dominican Republic,58,74040.89691,TRUE
+Dominican Republic,59,22326.21725,TRUE
+Dominican Republic,63,52453,FALSE
+Dominican Republic,90,179682,FALSE
+Dominican Republic,94,61002.28577,TRUE
+Dominican Republic,101,61496,FALSE
+Dominican Republic,112,53941,FALSE
+Dominican Republic,138,17125.18189,TRUE
+Dominican Republic,152,119704.6269,TRUE
+Dominican Republic,154,36272,FALSE
+Dominican Republic,158,47135,FALSE
+Dominican Republic,200,22918.25267,TRUE
+Dominican Republic,202,85300.04797,TRUE
+Dominican Republic,206,183393.7134,TRUE
+Dominican Republic,218,52990.31222,TRUE
+Dominican Republic,238,45728,FALSE
+Dominican Republic,243,112174.5654,TRUE
+Dominican Republic,259,55616.6005,TRUE
+Dominican Republic,276,10950.60863,TRUE
+Dominican Republic,279,177754.1672,TRUE
+Dominican Republic,298,120463.1286,TRUE
+Dominican Republic,305,13920,FALSE
+Dominican Republic,306,355971,FALSE
+Dominican Republic,11,178064.2799,TRUE
+Dominican Republic,16,402393,FALSE
+Dominican Republic,48,27222.34375,TRUE
+Dominican Republic,60,9354,FALSE
+Dominican Republic,63,52453,FALSE
+Dominican Republic,121,173683,FALSE
+Dominican Republic,128,13398,FALSE
+Dominican Republic,156,10200.29705,TRUE
+Dominican Republic,217,10049,FALSE
+Dominican Republic,248,14225.32829,TRUE
+Dominican Republic,270,14817,FALSE
+Dominican Republic,52,72501,FALSE
+Dominican Republic,74,4698,FALSE
+Dominican Republic,75,74778,FALSE
+Dominican Republic,80,49992.57574,TRUE
+Dominican Republic,301,113987.8459,TRUE
+Dominican Republic,319,66636,FALSE
+Dominican Republic,51,1152,FALSE
+Dominican Republic,53,6581.96824,TRUE
+Dominican Republic,77,1457,FALSE
+Dominican Republic,213,139010,FALSE
+Dominican Republic,228,512916,FALSE
+Dominican Republic,269,1647,FALSE
+Dominican Republic,296,78916,FALSE
+Dominican Republic,175,32275,FALSE
+Dominican Republic,12,36715.19395,TRUE
+Dominican Republic,13,449607,FALSE
+Dominican Republic,108,12577.92841,TRUE
+Dominican Republic,165,14797.07017,TRUE
+Dominican Republic,215,2878296,FALSE
+Dominican Republic,261,8946.089355,TRUE
+Dominican Republic,281,136069.2843,TRUE
+Dominican Republic,302,27087.34387,TRUE
+Dominican Republic,310,36133,TRUE
+Dominican Republic,106,13595.99028,TRUE
+Dominican Republic,30,62885.73079,TRUE
+Dominican Republic,91,126485.3041,TRUE
+Dominican Republic,192,3780098.195,TRUE
+Dominican Republic,249,70032.42373,TRUE
+Dominican Republic,308,35296.76443,TRUE
+Dominican Republic,116,98484.54468,TRUE
+Dominican Republic,234,8162.890747,TRUE
+Dominican Republic,88,138218.959,TRUE
+Dominican Republic,227,10293,FALSE
+Dominican Republic,8,21599.0332,TRUE
+Dominican Republic,115,33570,FALSE
+Dominican Republic,146,28645.96233,TRUE
+Dominican Republic,257,9558,FALSE
+Dominican Republic,39,10075.63454,TRUE
+Dominican Republic,61,218943.5096,TRUE
+Dominican Republic,76,68251,FALSE
+Dominican Republic,268,27005.25,TRUE
+Dominican Republic,194,9390.783666,TRUE
+Dominican Republic,198,5299.135169,TRUE
+Dominican Republic,245,11957.75,TRUE
+Dominican Republic,86,15341.61704,TRUE
+Dominican Republic,247,27947.125,TRUE
+Dominican Republic,15,5922.875,TRUE
+Dominican Republic,135,5719.346191,TRUE
+Dominican Republic,65,4252.65625,TRUE
+Dominican Republic,70,8796.273438,TRUE
+Dominican Republic,314,4472.643433,TRUE
+Dominican Republic,133,6124.625,TRUE
+Dominican Republic,240,4373.4375,TRUE
+Dominican Republic,148,23186,TRUE
+Dominican Republic,31,5157,TRUE
+Ecuador,4,20977.52128,TRUE
+Ecuador,5,3935,FALSE
+Ecuador,7,62542,FALSE
+Ecuador,8,49397,FALSE
+Ecuador,17,14673,FALSE
+Ecuador,105,11420,FALSE
+Ecuador,120,66914,FALSE
+Ecuador,161,3514,FALSE
+Ecuador,169,31694,FALSE
+Ecuador,179,94315,FALSE
+Ecuador,180,7520.279265,TRUE
+Ecuador,203,26179.47154,TRUE
+Ecuador,205,158255.8483,TRUE
+Ecuador,208,56769,FALSE
+Ecuador,219,33650,FALSE
+Ecuador,221,28286,FALSE
+Ecuador,229,16244.65912,TRUE
+Ecuador,231,73548,FALSE
+Ecuador,235,142599,FALSE
+Ecuador,254,41905,FALSE
+Ecuador,84,13269,FALSE
+Ecuador,267,7791,FALSE
+Ecuador,282,63104,FALSE
+Ecuador,286,827584,FALSE
+Ecuador,289,17793,FALSE
+Ecuador,316,72255.87156,TRUE
+Ecuador,317,150599,FALSE
+Ecuador,318,15250,FALSE
+Ecuador,18,5687,FALSE
+Ecuador,19,14451,FALSE
+Ecuador,33,5975,FALSE
+Ecuador,40,57679,FALSE
+Ecuador,49,63522,FALSE
+Ecuador,54,77453,FALSE
+Ecuador,58,74040.89691,TRUE
+Ecuador,59,22326.21725,TRUE
+Ecuador,63,18800,FALSE
+Ecuador,90,84526,FALSE
+Ecuador,94,61002.28577,TRUE
+Ecuador,101,138512.4356,TRUE
+Ecuador,112,16480,FALSE
+Ecuador,138,17125.18189,TRUE
+Ecuador,152,119704.6269,TRUE
+Ecuador,154,61798,FALSE
+Ecuador,158,77848,FALSE
+Ecuador,200,7281,FALSE
+Ecuador,202,85300.04797,TRUE
+Ecuador,206,82736,FALSE
+Ecuador,218,17030,FALSE
+Ecuador,238,45858,FALSE
+Ecuador,243,112174.5654,TRUE
+Ecuador,259,6501,FALSE
+Ecuador,276,15901,FALSE
+Ecuador,279,177754.1672,TRUE
+Ecuador,298,40823,FALSE
+Ecuador,305,21089,FALSE
+Ecuador,306,314246,FALSE
+Ecuador,11,178064.2799,TRUE
+Ecuador,16,362082,FALSE
+Ecuador,48,27222.34375,TRUE
+Ecuador,60,22383.25858,TRUE
+Ecuador,63,18800,FALSE
+Ecuador,121,112482,FALSE
+Ecuador,128,12187,FALSE
+Ecuador,156,8423,FALSE
+Ecuador,217,4417,FALSE
+Ecuador,248,14225.32829,TRUE
+Ecuador,270,15428,FALSE
+Ecuador,52,50278,FALSE
+Ecuador,74,3909,FALSE
+Ecuador,75,62031,FALSE
+Ecuador,80,49992.57574,TRUE
+Ecuador,301,113987.8459,TRUE
+Ecuador,319,89190.44102,TRUE
+Ecuador,51,26504.47085,TRUE
+Ecuador,53,15000,FALSE
+Ecuador,77,1307,FALSE
+Ecuador,213,118408,FALSE
+Ecuador,228,362113,FALSE
+Ecuador,269,15171.62496,TRUE
+Ecuador,296,17680,FALSE
+Ecuador,175,48539,FALSE
+Ecuador,12,29357,FALSE
+Ecuador,13,44588,FALSE
+Ecuador,108,12577.92841,TRUE
+Ecuador,165,3611,FALSE
+Ecuador,215,128055,FALSE
+Ecuador,261,8946.089355,TRUE
+Ecuador,281,162794,FALSE
+Ecuador,302,23826,FALSE
+Ecuador,310,36133,TRUE
+Ecuador,106,13595.99028,TRUE
+Ecuador,30,62885.73079,TRUE
+Ecuador,91,126485.3041,TRUE
+Ecuador,192,3780098.195,TRUE
+Ecuador,249,70032.42373,TRUE
+Ecuador,308,35296.76443,TRUE
+Ecuador,116,98484.54468,TRUE
+Ecuador,234,8162.890747,TRUE
+Ecuador,88,138218.959,TRUE
+Ecuador,227,9358.848173,TRUE
+Ecuador,8,49397,FALSE
+Ecuador,115,186672.4488,TRUE
+Ecuador,146,28645.96233,TRUE
+Ecuador,257,14655,FALSE
+Ecuador,39,10075.63454,TRUE
+Ecuador,61,218943.5096,TRUE
+Ecuador,76,100326.9844,TRUE
+Ecuador,268,27005.25,TRUE
+Ecuador,194,9390.783666,TRUE
+Ecuador,198,5299.135169,TRUE
+Ecuador,245,17633,FALSE
+Ecuador,86,15341.61704,TRUE
+Ecuador,247,27947.125,TRUE
+Ecuador,15,5922.875,TRUE
+Ecuador,135,5719.346191,TRUE
+Ecuador,65,4252.65625,TRUE
+Ecuador,70,8796.273438,TRUE
+Ecuador,314,4472.643433,TRUE
+Ecuador,133,12866,FALSE
+Ecuador,240,5131,FALSE
+Ecuador,148,23186,TRUE
+Ecuador,31,5157,TRUE
+Egypt,4,20977.52128,TRUE
+Egypt,5,8711,FALSE
+Egypt,7,250021,FALSE
+Egypt,8,153142,FALSE
+Egypt,17,15483,FALSE
+Egypt,105,60040,FALSE
+Egypt,120,229302,FALSE
+Egypt,161,13333,FALSE
+Egypt,169,73898,FALSE
+Egypt,179,272750,FALSE
+Egypt,180,7520.279265,TRUE
+Egypt,203,103177,FALSE
+Egypt,205,367054,FALSE
+Egypt,208,252769,FALSE
+Egypt,219,129593,FALSE
+Egypt,221,163630,FALSE
+Egypt,229,16244.65912,TRUE
+Egypt,231,130284,FALSE
+Egypt,235,272440,FALSE
+Egypt,254,93669,FALSE
+Egypt,84,31818,FALSE
+Egypt,267,14063,FALSE
+Egypt,282,522503,FALSE
+Egypt,286,1150306,FALSE
+Egypt,289,27500,FALSE
+Egypt,316,52029,FALSE
+Egypt,317,321097,FALSE
+Egypt,318,65753,FALSE
+Egypt,18,33135,FALSE
+Egypt,19,105377,FALSE
+Egypt,33,34710,FALSE
+Egypt,40,307586,FALSE
+Egypt,49,283426,FALSE
+Egypt,54,307677,FALSE
+Egypt,58,74040.89691,TRUE
+Egypt,59,22326.21725,TRUE
+Egypt,63,34255,FALSE
+Egypt,90,225578,FALSE
+Egypt,94,351965,FALSE
+Egypt,101,245967,FALSE
+Egypt,112,235980,FALSE
+Egypt,138,17125.18189,TRUE
+Egypt,152,119704.6269,TRUE
+Egypt,154,227926,FALSE
+Egypt,158,228196,FALSE
+Egypt,200,22918.25267,TRUE
+Egypt,202,114674,FALSE
+Egypt,206,183393.7134,TRUE
+Egypt,218,97073,FALSE
+Egypt,238,182471,FALSE
+Egypt,243,112174.5654,TRUE
+Egypt,259,20016,FALSE
+Egypt,276,35000,FALSE
+Egypt,279,178889,FALSE
+Egypt,298,227668,FALSE
+Egypt,305,15590.0347,TRUE
+Egypt,306,397737,FALSE
+Egypt,11,189285,FALSE
+Egypt,16,485483,FALSE
+Egypt,48,27222.34375,TRUE
+Egypt,60,21532,FALSE
+Egypt,63,34255,FALSE
+Egypt,121,145688,FALSE
+Egypt,128,32908,FALSE
+Egypt,156,20016,FALSE
+Egypt,217,24046,FALSE
+Egypt,248,14225.32829,TRUE
+Egypt,270,45207,FALSE
+Egypt,52,72720.10141,TRUE
+Egypt,74,4541.36112,TRUE
+Egypt,75,47178.96176,TRUE
+Egypt,80,49992.57574,TRUE
+Egypt,301,377860,FALSE
+Egypt,319,89190.44102,TRUE
+Egypt,51,26504.47085,TRUE
+Egypt,53,6581.96824,TRUE
+Egypt,77,5993.147024,TRUE
+Egypt,213,124295.9159,TRUE
+Egypt,228,133880.2683,TRUE
+Egypt,269,15171.62496,TRUE
+Egypt,296,327286,FALSE
+Egypt,175,112954,FALSE
+Egypt,12,36715.19395,TRUE
+Egypt,13,74728.86082,TRUE
+Egypt,108,8764,FALSE
+Egypt,165,20765,FALSE
+Egypt,215,105585.0293,TRUE
+Egypt,261,8946.089355,TRUE
+Egypt,281,465656,FALSE
+Egypt,302,27087.34387,TRUE
+Egypt,310,36133,TRUE
+Egypt,106,13595.99028,TRUE
+Egypt,30,62885.73079,TRUE
+Egypt,91,126485.3041,TRUE
+Egypt,192,3780098.195,TRUE
+Egypt,249,70032.42373,TRUE
+Egypt,308,35296.76443,TRUE
+Egypt,116,98484.54468,TRUE
+Egypt,234,8162.890747,TRUE
+Egypt,88,138218.959,TRUE
+Egypt,227,9358.848173,TRUE
+Egypt,8,153142,FALSE
+Egypt,115,186672.4488,TRUE
+Egypt,146,24499,FALSE
+Egypt,257,14862.84549,TRUE
+Egypt,39,10075.63454,TRUE
+Egypt,61,218943.5096,TRUE
+Egypt,76,100326.9844,TRUE
+Egypt,268,27005.25,TRUE
+Egypt,194,9390.783666,TRUE
+Egypt,198,5299.135169,TRUE
+Egypt,245,11957.75,TRUE
+Egypt,86,36398,FALSE
+Egypt,247,27947.125,TRUE
+Egypt,15,5922.875,TRUE
+Egypt,135,5719.346191,TRUE
+Egypt,65,4252.65625,TRUE
+Egypt,70,8796.273438,TRUE
+Egypt,314,4472.643433,TRUE
+Egypt,133,6124.625,TRUE
+Egypt,240,4373.4375,TRUE
+Egypt,148,23186,TRUE
+Egypt,31,5157,TRUE
+El Salvador,4,20977.52128,TRUE
+El Salvador,5,7484.490489,TRUE
+El Salvador,7,66261,FALSE
+El Salvador,8,47030.54376,TRUE
+El Salvador,17,33099.94094,TRUE
+El Salvador,105,149702.6633,TRUE
+El Salvador,120,115713.1489,TRUE
+El Salvador,161,8730.264786,TRUE
+El Salvador,169,30425,FALSE
+El Salvador,179,112785,FALSE
+El Salvador,180,7520.279265,TRUE
+El Salvador,203,20739,FALSE
+El Salvador,205,116557,FALSE
+El Salvador,208,309518,FALSE
+El Salvador,219,80605.62094,TRUE
+El Salvador,221,53059.48552,TRUE
+El Salvador,229,16244.65912,TRUE
+El Salvador,231,60255.26389,TRUE
+El Salvador,235,255355,FALSE
+El Salvador,254,69302,FALSE
+El Salvador,84,14500,FALSE
+El Salvador,267,7318,FALSE
+El Salvador,282,423220.8453,TRUE
+El Salvador,286,910476,FALSE
+El Salvador,289,9979.922823,TRUE
+El Salvador,316,72255.87156,TRUE
+El Salvador,317,220157,FALSE
+El Salvador,318,32261.2753,TRUE
+El Salvador,18,9710,FALSE
+El Salvador,19,77366.60983,TRUE
+El Salvador,33,30270.38924,TRUE
+El Salvador,40,43626,FALSE
+El Salvador,49,247408.5214,TRUE
+El Salvador,54,175365.1249,TRUE
+El Salvador,58,74040.89691,TRUE
+El Salvador,59,22326.21725,TRUE
+El Salvador,63,223236,FALSE
+El Salvador,90,238402,FALSE
+El Salvador,94,61002.28577,TRUE
+El Salvador,101,138512.4356,TRUE
+El Salvador,112,122104.9439,TRUE
+El Salvador,138,17125.18189,TRUE
+El Salvador,152,119704.6269,TRUE
+El Salvador,154,129871,FALSE
+El Salvador,158,96473.15601,TRUE
+El Salvador,200,22918.25267,TRUE
+El Salvador,202,85300.04797,TRUE
+El Salvador,206,183393.7134,TRUE
+El Salvador,218,52990.31222,TRUE
+El Salvador,238,63407,FALSE
+El Salvador,243,112174.5654,TRUE
+El Salvador,259,55616.6005,TRUE
+El Salvador,276,18733,FALSE
+El Salvador,279,177754.1672,TRUE
+El Salvador,298,150928,FALSE
+El Salvador,305,19843,FALSE
+El Salvador,306,278249,FALSE
+El Salvador,11,178064.2799,TRUE
+El Salvador,16,74389.59543,TRUE
+El Salvador,48,27222.34375,TRUE
+El Salvador,60,22383.25858,TRUE
+El Salvador,63,223236,FALSE
+El Salvador,121,115777.4722,TRUE
+El Salvador,128,9353.124815,TRUE
+El Salvador,156,10200.29705,TRUE
+El Salvador,217,21196.4891,TRUE
+El Salvador,248,14225.32829,TRUE
+El Salvador,270,14631,FALSE
+El Salvador,52,153806,FALSE
+El Salvador,74,3627,FALSE
+El Salvador,75,171693,FALSE
+El Salvador,80,133620,FALSE
+El Salvador,301,113987.8459,TRUE
+El Salvador,319,89190.44102,TRUE
+El Salvador,51,5250,FALSE
+El Salvador,53,6581.96824,TRUE
+El Salvador,77,2760,FALSE
+El Salvador,213,124295.9159,TRUE
+El Salvador,228,185062,FALSE
+El Salvador,269,15171.62496,TRUE
+El Salvador,296,59144,FALSE
+El Salvador,175,106912,FALSE
+El Salvador,12,36715.19395,TRUE
+El Salvador,13,163618,FALSE
+El Salvador,108,12577.92841,TRUE
+El Salvador,165,14797.07017,TRUE
+El Salvador,215,354391,FALSE
+El Salvador,261,8946.089355,TRUE
+El Salvador,281,136069.2843,TRUE
+El Salvador,302,19865,FALSE
+El Salvador,310,36133,TRUE
+El Salvador,106,13595.99028,TRUE
+El Salvador,30,62885.73079,TRUE
+El Salvador,91,126485.3041,TRUE
+El Salvador,192,3780098.195,TRUE
+El Salvador,249,70032.42373,TRUE
+El Salvador,308,35296.76443,TRUE
+El Salvador,116,98484.54468,TRUE
+El Salvador,234,8162.890747,TRUE
+El Salvador,88,138218.959,TRUE
+El Salvador,227,9358.848173,TRUE
+El Salvador,8,21599.0332,TRUE
+El Salvador,115,186672.4488,TRUE
+El Salvador,146,16022,FALSE
+El Salvador,257,14862.84549,TRUE
+El Salvador,39,10075.63454,TRUE
+El Salvador,61,218943.5096,TRUE
+El Salvador,76,73261,FALSE
+El Salvador,268,27005.25,TRUE
+El Salvador,194,9390.783666,TRUE
+El Salvador,198,5299.135169,TRUE
+El Salvador,245,11957.75,TRUE
+El Salvador,86,15341.61704,TRUE
+El Salvador,247,27947.125,TRUE
+El Salvador,15,5922.875,TRUE
+El Salvador,135,5719.346191,TRUE
+El Salvador,65,4252.65625,TRUE
+El Salvador,70,8796.273438,TRUE
+El Salvador,314,4472.643433,TRUE
+El Salvador,133,6124.625,TRUE
+El Salvador,240,4373.4375,TRUE
+El Salvador,148,23186,TRUE
+El Salvador,31,5157,TRUE
+Equatorial Guinea,4,20977.52128,TRUE
+Equatorial Guinea,5,7484.490489,TRUE
+Equatorial Guinea,7,111437.9893,TRUE
+Equatorial Guinea,8,47030.54376,TRUE
+Equatorial Guinea,17,33099.94094,TRUE
+Equatorial Guinea,105,149702.6633,TRUE
+Equatorial Guinea,120,115713.1489,TRUE
+Equatorial Guinea,161,8730.264786,TRUE
+Equatorial Guinea,169,16777.49735,TRUE
+Equatorial Guinea,179,121608.9919,TRUE
+Equatorial Guinea,180,7520.279265,TRUE
+Equatorial Guinea,203,26179.47154,TRUE
+Equatorial Guinea,205,158255.8483,TRUE
+Equatorial Guinea,208,84004.18102,TRUE
+Equatorial Guinea,219,80605.62094,TRUE
+Equatorial Guinea,221,53059.48552,TRUE
+Equatorial Guinea,229,16244.65912,TRUE
+Equatorial Guinea,231,60255.26389,TRUE
+Equatorial Guinea,235,172280.9273,TRUE
+Equatorial Guinea,254,26952.37295,TRUE
+Equatorial Guinea,84,9355.713607,TRUE
+Equatorial Guinea,267,9372.487582,TRUE
+Equatorial Guinea,282,423220.8453,TRUE
+Equatorial Guinea,286,760050.6713,TRUE
+Equatorial Guinea,289,9979.922823,TRUE
+Equatorial Guinea,316,72255.87156,TRUE
+Equatorial Guinea,317,188762.6372,TRUE
+Equatorial Guinea,318,32261.2753,TRUE
+Equatorial Guinea,18,11273.75269,TRUE
+Equatorial Guinea,19,77366.60983,TRUE
+Equatorial Guinea,33,30270.38924,TRUE
+Equatorial Guinea,40,180987.6885,TRUE
+Equatorial Guinea,49,247408.5214,TRUE
+Equatorial Guinea,54,175365.1249,TRUE
+Equatorial Guinea,58,74040.89691,TRUE
+Equatorial Guinea,59,22326.21725,TRUE
+Equatorial Guinea,63,234336.5313,TRUE
+Equatorial Guinea,90,194487.8189,TRUE
+Equatorial Guinea,94,61002.28577,TRUE
+Equatorial Guinea,101,138512.4356,TRUE
+Equatorial Guinea,112,122104.9439,TRUE
+Equatorial Guinea,138,17125.18189,TRUE
+Equatorial Guinea,152,119704.6269,TRUE
+Equatorial Guinea,154,96782.90416,TRUE
+Equatorial Guinea,158,96473.15601,TRUE
+Equatorial Guinea,200,22918.25267,TRUE
+Equatorial Guinea,202,85300.04797,TRUE
+Equatorial Guinea,206,183393.7134,TRUE
+Equatorial Guinea,218,52990.31222,TRUE
+Equatorial Guinea,238,116960.1876,TRUE
+Equatorial Guinea,243,112174.5654,TRUE
+Equatorial Guinea,259,55616.6005,TRUE
+Equatorial Guinea,276,10950.60863,TRUE
+Equatorial Guinea,279,177754.1672,TRUE
+Equatorial Guinea,298,120463.1286,TRUE
+Equatorial Guinea,305,15590.0347,TRUE
+Equatorial Guinea,306,131681.4608,TRUE
+Equatorial Guinea,11,178064.2799,TRUE
+Equatorial Guinea,16,45771,FALSE
+Equatorial Guinea,48,27222.34375,TRUE
+Equatorial Guinea,60,22383.25858,TRUE
+Equatorial Guinea,63,11715.28525,TRUE
+Equatorial Guinea,121,115777.4722,TRUE
+Equatorial Guinea,128,9353.124815,TRUE
+Equatorial Guinea,156,10200.29705,TRUE
+Equatorial Guinea,217,21196.4891,TRUE
+Equatorial Guinea,248,14225.32829,TRUE
+Equatorial Guinea,270,9151.63574,TRUE
+Equatorial Guinea,52,31136,FALSE
+Equatorial Guinea,74,1000,FALSE
+Equatorial Guinea,75,18457,FALSE
+Equatorial Guinea,80,49992.57574,TRUE
+Equatorial Guinea,301,113987.8459,TRUE
+Equatorial Guinea,319,89190.44102,TRUE
+Equatorial Guinea,51,26504.47085,TRUE
+Equatorial Guinea,53,6581.96824,TRUE
+Equatorial Guinea,77,3642,FALSE
+Equatorial Guinea,213,102044,FALSE
+Equatorial Guinea,228,133880.2683,TRUE
+Equatorial Guinea,269,15171.62496,TRUE
+Equatorial Guinea,296,56581,FALSE
+Equatorial Guinea,175,70802.39066,TRUE
+Equatorial Guinea,12,36715.19395,TRUE
+Equatorial Guinea,13,74728.86082,TRUE
+Equatorial Guinea,108,12577.92841,TRUE
+Equatorial Guinea,165,14797.07017,TRUE
+Equatorial Guinea,215,105585.0293,TRUE
+Equatorial Guinea,261,8946.089355,TRUE
+Equatorial Guinea,281,136069.2843,TRUE
+Equatorial Guinea,302,27087.34387,TRUE
+Equatorial Guinea,310,36133,TRUE
+Equatorial Guinea,106,13595.99028,TRUE
+Equatorial Guinea,30,62885.73079,TRUE
+Equatorial Guinea,91,126485.3041,TRUE
+Equatorial Guinea,192,3780098.195,TRUE
+Equatorial Guinea,249,70032.42373,TRUE
+Equatorial Guinea,308,35296.76443,TRUE
+Equatorial Guinea,116,98484.54468,TRUE
+Equatorial Guinea,234,8162.890747,TRUE
+Equatorial Guinea,88,138218.959,TRUE
+Equatorial Guinea,227,9358.848173,TRUE
+Equatorial Guinea,8,21599.0332,TRUE
+Equatorial Guinea,115,186672.4488,TRUE
+Equatorial Guinea,146,28645.96233,TRUE
+Equatorial Guinea,257,14862.84549,TRUE
+Equatorial Guinea,39,10075.63454,TRUE
+Equatorial Guinea,61,218943.5096,TRUE
+Equatorial Guinea,76,100326.9844,TRUE
+Equatorial Guinea,268,27005.25,TRUE
+Equatorial Guinea,194,9390.783666,TRUE
+Equatorial Guinea,198,5299.135169,TRUE
+Equatorial Guinea,245,11957.75,TRUE
+Equatorial Guinea,86,15341.61704,TRUE
+Equatorial Guinea,247,27947.125,TRUE
+Equatorial Guinea,15,5922.875,TRUE
+Equatorial Guinea,135,5719.346191,TRUE
+Equatorial Guinea,65,4252.65625,TRUE
+Equatorial Guinea,70,8796.273438,TRUE
+Equatorial Guinea,314,4472.643433,TRUE
+Equatorial Guinea,133,1376,FALSE
+Equatorial Guinea,240,4373.4375,TRUE
+Equatorial Guinea,148,23186,TRUE
+Equatorial Guinea,31,5157,TRUE
+Eritrea,4,20977.52128,TRUE
+Eritrea,5,7484.490489,TRUE
+Eritrea,7,111437.9893,TRUE
+Eritrea,8,47030.54376,TRUE
+Eritrea,17,14468,FALSE
+Eritrea,105,149702.6633,TRUE
+Eritrea,120,115713.1489,TRUE
+Eritrea,161,2446,FALSE
+Eritrea,169,10016,FALSE
+Eritrea,179,121608.9919,TRUE
+Eritrea,180,3559,FALSE
+Eritrea,203,26179.47154,TRUE
+Eritrea,205,158255.8483,TRUE
+Eritrea,208,84004.18102,TRUE
+Eritrea,219,80605.62094,TRUE
+Eritrea,221,53059.48552,TRUE
+Eritrea,229,16244.65912,TRUE
+Eritrea,231,60255.26389,TRUE
+Eritrea,235,9491,FALSE
+Eritrea,254,26952.37295,TRUE
+Eritrea,84,9355.713607,TRUE
+Eritrea,267,1882,FALSE
+Eritrea,282,423220.8453,TRUE
+Eritrea,286,760050.6713,TRUE
+Eritrea,289,9979.922823,TRUE
+Eritrea,316,72255.87156,TRUE
+Eritrea,317,188762.6372,TRUE
+Eritrea,318,12302,FALSE
+Eritrea,18,1518,FALSE
+Eritrea,19,77366.60983,TRUE
+Eritrea,33,6210,FALSE
+Eritrea,40,180987.6885,TRUE
+Eritrea,49,247408.5214,TRUE
+Eritrea,54,175365.1249,TRUE
+Eritrea,58,74040.89691,TRUE
+Eritrea,59,22326.21725,TRUE
+Eritrea,63,234336.5313,TRUE
+Eritrea,90,194487.8189,TRUE
+Eritrea,94,61002.28577,TRUE
+Eritrea,101,138512.4356,TRUE
+Eritrea,112,122104.9439,TRUE
+Eritrea,138,17125.18189,TRUE
+Eritrea,152,119704.6269,TRUE
+Eritrea,154,96782.90416,TRUE
+Eritrea,158,96473.15601,TRUE
+Eritrea,200,22918.25267,TRUE
+Eritrea,202,85300.04797,TRUE
+Eritrea,206,183393.7134,TRUE
+Eritrea,218,52990.31222,TRUE
+Eritrea,238,116960.1876,TRUE
+Eritrea,243,112174.5654,TRUE
+Eritrea,259,55616.6005,TRUE
+Eritrea,276,10950.60863,TRUE
+Eritrea,279,177754.1672,TRUE
+Eritrea,298,120463.1286,TRUE
+Eritrea,305,15590.0347,TRUE
+Eritrea,306,131681.4608,TRUE
+Eritrea,11,178064.2799,TRUE
+Eritrea,16,74389.59543,TRUE
+Eritrea,48,27222.34375,TRUE
+Eritrea,60,4357,FALSE
+Eritrea,63,11715.28525,TRUE
+Eritrea,121,115777.4722,TRUE
+Eritrea,128,7253,FALSE
+Eritrea,156,2862,FALSE
+Eritrea,217,4108,FALSE
+Eritrea,248,14225.32829,TRUE
+Eritrea,270,1520,FALSE
+Eritrea,52,72720.10141,TRUE
+Eritrea,74,4541.36112,TRUE
+Eritrea,75,47178.96176,TRUE
+Eritrea,80,49992.57574,TRUE
+Eritrea,301,113987.8459,TRUE
+Eritrea,319,89190.44102,TRUE
+Eritrea,51,26504.47085,TRUE
+Eritrea,53,6581.96824,TRUE
+Eritrea,77,5993.147024,TRUE
+Eritrea,213,124295.9159,TRUE
+Eritrea,228,133880.2683,TRUE
+Eritrea,269,15171.62496,TRUE
+Eritrea,296,43692.55808,TRUE
+Eritrea,175,70802.39066,TRUE
+Eritrea,12,36715.19395,TRUE
+Eritrea,13,74728.86082,TRUE
+Eritrea,108,12577.92841,TRUE
+Eritrea,165,14797.07017,TRUE
+Eritrea,215,105585.0293,TRUE
+Eritrea,261,8946.089355,TRUE
+Eritrea,281,136069.2843,TRUE
+Eritrea,302,27087.34387,TRUE
+Eritrea,310,36133,TRUE
+Eritrea,106,13595.99028,TRUE
+Eritrea,30,62885.73079,TRUE
+Eritrea,91,126485.3041,TRUE
+Eritrea,192,3780098.195,TRUE
+Eritrea,249,70032.42373,TRUE
+Eritrea,308,35296.76443,TRUE
+Eritrea,116,98484.54468,TRUE
+Eritrea,234,8162.890747,TRUE
+Eritrea,88,138218.959,TRUE
+Eritrea,227,9358.848173,TRUE
+Eritrea,8,21599.0332,TRUE
+Eritrea,115,186672.4488,TRUE
+Eritrea,146,28645.96233,TRUE
+Eritrea,257,14862.84549,TRUE
+Eritrea,39,10075.63454,TRUE
+Eritrea,61,218943.5096,TRUE
+Eritrea,76,100326.9844,TRUE
+Eritrea,268,27005.25,TRUE
+Eritrea,194,9390.783666,TRUE
+Eritrea,198,5299.135169,TRUE
+Eritrea,245,11957.75,TRUE
+Eritrea,86,15341.61704,TRUE
+Eritrea,247,27947.125,TRUE
+Eritrea,15,5922.875,TRUE
+Eritrea,135,5719.346191,TRUE
+Eritrea,65,4252.65625,TRUE
+Eritrea,70,8796.273438,TRUE
+Eritrea,314,4472.643433,TRUE
+Eritrea,133,6124.625,TRUE
+Eritrea,240,4373.4375,TRUE
+Eritrea,148,23186,TRUE
+Eritrea,31,5157,TRUE
+Estonia,4,20977.52128,TRUE
+Estonia,5,7484.490489,TRUE
+Estonia,7,22147,FALSE
+Estonia,8,47030.54376,TRUE
+Estonia,17,26406,FALSE
+Estonia,105,149702.6633,TRUE
+Estonia,120,115713.1489,TRUE
+Estonia,161,7265,FALSE
+Estonia,169,16777.49735,TRUE
+Estonia,179,121608.9919,TRUE
+Estonia,180,7520.279265,TRUE
+Estonia,203,26179.47154,TRUE
+Estonia,205,24455,FALSE
+Estonia,208,84004.18102,TRUE
+Estonia,219,80605.62094,TRUE
+Estonia,221,53059.48552,TRUE
+Estonia,229,16244.65912,TRUE
+Estonia,231,6462,FALSE
+Estonia,235,159210,FALSE
+Estonia,254,26952.37295,TRUE
+Estonia,84,9355.713607,TRUE
+Estonia,267,9372.487582,TRUE
+Estonia,282,423220.8453,TRUE
+Estonia,286,760050.6713,TRUE
+Estonia,289,9979.922823,TRUE
+Estonia,316,72255.87156,TRUE
+Estonia,317,188762.6372,TRUE
+Estonia,318,27685,FALSE
+Estonia,18,22458,FALSE
+Estonia,19,77366.60983,TRUE
+Estonia,33,30270.38924,TRUE
+Estonia,40,425493,FALSE
+Estonia,49,365065,FALSE
+Estonia,54,154545,FALSE
+Estonia,58,5388,FALSE
+Estonia,59,22326.21725,TRUE
+Estonia,63,234336.5313,TRUE
+Estonia,90,329648,FALSE
+Estonia,94,61002.28577,TRUE
+Estonia,101,138512.4356,TRUE
+Estonia,112,17130,FALSE
+Estonia,138,17125.18189,TRUE
+Estonia,152,119704.6269,TRUE
+Estonia,154,96782.90416,TRUE
+Estonia,158,96473.15601,TRUE
+Estonia,200,22011,FALSE
+Estonia,202,85300.04797,TRUE
+Estonia,206,183393.7134,TRUE
+Estonia,218,17246,FALSE
+Estonia,238,116960.1876,TRUE
+Estonia,243,112174.5654,TRUE
+Estonia,259,26157,FALSE
+Estonia,276,10950.60863,TRUE
+Estonia,279,177754.1672,TRUE
+Estonia,298,120463.1286,TRUE
+Estonia,305,15590.0347,TRUE
+Estonia,306,158356,FALSE
+Estonia,11,178064.2799,TRUE
+Estonia,16,74389.59543,TRUE
+Estonia,48,27222.34375,TRUE
+Estonia,60,22383.25858,TRUE
+Estonia,63,11715.28525,TRUE
+Estonia,121,115777.4722,TRUE
+Estonia,128,9353.124815,TRUE
+Estonia,156,10200.29705,TRUE
+Estonia,217,18587,FALSE
+Estonia,248,14619,FALSE
+Estonia,270,9151.63574,TRUE
+Estonia,52,72720.10141,TRUE
+Estonia,74,4541.36112,TRUE
+Estonia,75,47178.96176,TRUE
+Estonia,80,49992.57574,TRUE
+Estonia,301,113987.8459,TRUE
+Estonia,319,89190.44102,TRUE
+Estonia,51,26504.47085,TRUE
+Estonia,53,6581.96824,TRUE
+Estonia,77,5993.147024,TRUE
+Estonia,213,124295.9159,TRUE
+Estonia,228,133880.2683,TRUE
+Estonia,269,15171.62496,TRUE
+Estonia,296,43692.55808,TRUE
+Estonia,175,70802.39066,TRUE
+Estonia,12,36715.19395,TRUE
+Estonia,13,74728.86082,TRUE
+Estonia,108,12577.92841,TRUE
+Estonia,165,14797.07017,TRUE
+Estonia,215,105585.0293,TRUE
+Estonia,261,8946.089355,TRUE
+Estonia,281,22956,FALSE
+Estonia,302,27087.34387,TRUE
+Estonia,310,36133,TRUE
+Estonia,106,13595.99028,TRUE
+Estonia,30,62885.73079,TRUE
+Estonia,91,7857,FALSE
+Estonia,192,3780098.195,TRUE
+Estonia,249,7040,FALSE
+Estonia,308,33336,FALSE
+Estonia,116,8929,FALSE
+Estonia,234,8162.890747,TRUE
+Estonia,88,138218.959,TRUE
+Estonia,227,9358.848173,TRUE
+Estonia,8,21599.0332,TRUE
+Estonia,115,186672.4488,TRUE
+Estonia,146,28645.96233,TRUE
+Estonia,257,14862.84549,TRUE
+Estonia,39,8979,FALSE
+Estonia,61,218943.5096,TRUE
+Estonia,76,100326.9844,TRUE
+Estonia,268,27005.25,TRUE
+Estonia,194,9390.783666,TRUE
+Estonia,198,5299.135169,TRUE
+Estonia,245,11957.75,TRUE
+Estonia,86,15341.61704,TRUE
+Estonia,247,27947.125,TRUE
+Estonia,15,5922.875,TRUE
+Estonia,135,5719.346191,TRUE
+Estonia,65,4252.65625,TRUE
+Estonia,70,8796.273438,TRUE
+Estonia,314,4472.643433,TRUE
+Estonia,133,6124.625,TRUE
+Estonia,240,4373.4375,TRUE
+Estonia,148,23186,TRUE
+Estonia,31,5157,TRUE
+Ethiopia,4,20977.52128,TRUE
+Ethiopia,5,7568,FALSE
+Ethiopia,7,111437.9893,TRUE
+Ethiopia,8,47030.54376,TRUE
+Ethiopia,17,21109,FALSE
+Ethiopia,105,149702.6633,TRUE
+Ethiopia,120,21530,FALSE
+Ethiopia,161,10941,FALSE
+Ethiopia,169,36745,FALSE
+Ethiopia,179,121608.9919,TRUE
+Ethiopia,180,22296,FALSE
+Ethiopia,203,26179.47154,TRUE
+Ethiopia,205,97454,FALSE
+Ethiopia,208,78840,FALSE
+Ethiopia,219,54648,FALSE
+Ethiopia,221,53059.48552,TRUE
+Ethiopia,229,16244.65912,TRUE
+Ethiopia,231,60255.26389,TRUE
+Ethiopia,235,137681,FALSE
+Ethiopia,254,28089,FALSE
+Ethiopia,84,7590,FALSE
+Ethiopia,267,7927,FALSE
+Ethiopia,282,423220.8453,TRUE
+Ethiopia,286,451488,FALSE
+Ethiopia,289,9979.922823,TRUE
+Ethiopia,316,72255.87156,TRUE
+Ethiopia,317,188762.6372,TRUE
+Ethiopia,318,26755,FALSE
+Ethiopia,18,16675,FALSE
+Ethiopia,19,41083,FALSE
+Ethiopia,33,20529,FALSE
+Ethiopia,40,92618,FALSE
+Ethiopia,49,35043,FALSE
+Ethiopia,54,175365.1249,TRUE
+Ethiopia,58,74040.89691,TRUE
+Ethiopia,59,22326.21725,TRUE
+Ethiopia,63,18251,FALSE
+Ethiopia,90,226224,FALSE
+Ethiopia,94,61002.28577,TRUE
+Ethiopia,101,138512.4356,TRUE
+Ethiopia,112,90153,FALSE
+Ethiopia,138,12776,FALSE
+Ethiopia,152,59821,FALSE
+Ethiopia,154,54565,FALSE
+Ethiopia,158,6496,FALSE
+Ethiopia,200,20457,FALSE
+Ethiopia,202,85300.04797,TRUE
+Ethiopia,206,120962,FALSE
+Ethiopia,218,60072,FALSE
+Ethiopia,238,116960.1876,TRUE
+Ethiopia,243,112174.5654,TRUE
+Ethiopia,259,55616.6005,TRUE
+Ethiopia,276,22174,FALSE
+Ethiopia,279,177754.1672,TRUE
+Ethiopia,298,32510,FALSE
+Ethiopia,305,6725,FALSE
+Ethiopia,306,45031,FALSE
+Ethiopia,11,178064.2799,TRUE
+Ethiopia,16,85157,FALSE
+Ethiopia,48,27222.34375,TRUE
+Ethiopia,60,19687,FALSE
+Ethiopia,63,18251,FALSE
+Ethiopia,121,115777.4722,TRUE
+Ethiopia,128,17317,FALSE
+Ethiopia,156,14626,FALSE
+Ethiopia,217,16381,FALSE
+Ethiopia,248,18339,FALSE
+Ethiopia,270,25251,FALSE
+Ethiopia,52,72720.10141,TRUE
+Ethiopia,74,4541.36112,TRUE
+Ethiopia,75,47178.96176,TRUE
+Ethiopia,80,49992.57574,TRUE
+Ethiopia,301,113987.8459,TRUE
+Ethiopia,319,90958,FALSE
+Ethiopia,51,26504.47085,TRUE
+Ethiopia,53,14910,FALSE
+Ethiopia,77,6697,FALSE
+Ethiopia,213,124295.9159,TRUE
+Ethiopia,228,110734,FALSE
+Ethiopia,269,7251,FALSE
+Ethiopia,296,149212,FALSE
+Ethiopia,175,74171,FALSE
+Ethiopia,12,36715.19395,TRUE
+Ethiopia,13,36435,FALSE
+Ethiopia,108,12577.92841,TRUE
+Ethiopia,165,14797.07017,TRUE
+Ethiopia,215,144443,FALSE
+Ethiopia,261,11805,FALSE
+Ethiopia,281,136069.2843,TRUE
+Ethiopia,302,11110,FALSE
+Ethiopia,310,36133,TRUE
+Ethiopia,106,13595.99028,TRUE
+Ethiopia,30,62885.73079,TRUE
+Ethiopia,91,126485.3041,TRUE
+Ethiopia,192,3780098.195,TRUE
+Ethiopia,249,70032.42373,TRUE
+Ethiopia,308,35296.76443,TRUE
+Ethiopia,116,98484.54468,TRUE
+Ethiopia,234,8162.890747,TRUE
+Ethiopia,88,138218.959,TRUE
+Ethiopia,227,9358.848173,TRUE
+Ethiopia,8,21599.0332,TRUE
+Ethiopia,115,30538,FALSE
+Ethiopia,146,28645.96233,TRUE
+Ethiopia,257,14862.84549,TRUE
+Ethiopia,39,10075.63454,TRUE
+Ethiopia,61,218943.5096,TRUE
+Ethiopia,76,100326.9844,TRUE
+Ethiopia,268,27005.25,TRUE
+Ethiopia,194,6174,FALSE
+Ethiopia,198,3813,FALSE
+Ethiopia,245,11957.75,TRUE
+Ethiopia,86,15341.61704,TRUE
+Ethiopia,247,27947.125,TRUE
+Ethiopia,15,5922.875,TRUE
+Ethiopia,135,5719.346191,TRUE
+Ethiopia,65,4252.65625,TRUE
+Ethiopia,70,8796.273438,TRUE
+Ethiopia,314,4472.643433,TRUE
+Ethiopia,133,6124.625,TRUE
+Ethiopia,240,4373.4375,TRUE
+Ethiopia,148,23186,TRUE
+Ethiopia,31,5157,TRUE
+Faroe Islands,4,20977.52128,TRUE
+Faroe Islands,5,7484.490489,TRUE
+Faroe Islands,7,111437.9893,TRUE
+Faroe Islands,8,47030.54376,TRUE
+Faroe Islands,17,33099.94094,TRUE
+Faroe Islands,105,149702.6633,TRUE
+Faroe Islands,120,115713.1489,TRUE
+Faroe Islands,161,8730.264786,TRUE
+Faroe Islands,169,16777.49735,TRUE
+Faroe Islands,179,121608.9919,TRUE
+Faroe Islands,180,7520.279265,TRUE
+Faroe Islands,203,26179.47154,TRUE
+Faroe Islands,205,158255.8483,TRUE
+Faroe Islands,208,84004.18102,TRUE
+Faroe Islands,219,80605.62094,TRUE
+Faroe Islands,221,53059.48552,TRUE
+Faroe Islands,229,16244.65912,TRUE
+Faroe Islands,231,60255.26389,TRUE
+Faroe Islands,235,142493,FALSE
+Faroe Islands,254,26952.37295,TRUE
+Faroe Islands,84,9355.713607,TRUE
+Faroe Islands,267,9372.487582,TRUE
+Faroe Islands,282,423220.8453,TRUE
+Faroe Islands,286,760050.6713,TRUE
+Faroe Islands,289,9979.922823,TRUE
+Faroe Islands,316,72255.87156,TRUE
+Faroe Islands,317,188762.6372,TRUE
+Faroe Islands,318,32261.2753,TRUE
+Faroe Islands,18,11273.75269,TRUE
+Faroe Islands,19,77366.60983,TRUE
+Faroe Islands,33,30270.38924,TRUE
+Faroe Islands,40,180987.6885,TRUE
+Faroe Islands,49,247408.5214,TRUE
+Faroe Islands,54,175365.1249,TRUE
+Faroe Islands,58,74040.89691,TRUE
+Faroe Islands,59,22326.21725,TRUE
+Faroe Islands,63,234336.5313,TRUE
+Faroe Islands,90,194487.8189,TRUE
+Faroe Islands,94,61002.28577,TRUE
+Faroe Islands,101,138512.4356,TRUE
+Faroe Islands,112,122104.9439,TRUE
+Faroe Islands,138,17125.18189,TRUE
+Faroe Islands,152,119704.6269,TRUE
+Faroe Islands,154,96782.90416,TRUE
+Faroe Islands,158,96473.15601,TRUE
+Faroe Islands,200,22918.25267,TRUE
+Faroe Islands,202,85300.04797,TRUE
+Faroe Islands,206,183393.7134,TRUE
+Faroe Islands,218,52990.31222,TRUE
+Faroe Islands,238,116960.1876,TRUE
+Faroe Islands,243,112174.5654,TRUE
+Faroe Islands,259,55616.6005,TRUE
+Faroe Islands,276,10950.60863,TRUE
+Faroe Islands,279,177754.1672,TRUE
+Faroe Islands,298,120463.1286,TRUE
+Faroe Islands,305,15590.0347,TRUE
+Faroe Islands,306,131681.4608,TRUE
+Faroe Islands,11,178064.2799,TRUE
+Faroe Islands,16,74389.59543,TRUE
+Faroe Islands,48,27222.34375,TRUE
+Faroe Islands,60,22383.25858,TRUE
+Faroe Islands,63,11715.28525,TRUE
+Faroe Islands,121,115777.4722,TRUE
+Faroe Islands,128,9353.124815,TRUE
+Faroe Islands,156,10200.29705,TRUE
+Faroe Islands,217,21196.4891,TRUE
+Faroe Islands,248,14225.32829,TRUE
+Faroe Islands,270,9151.63574,TRUE
+Faroe Islands,52,72720.10141,TRUE
+Faroe Islands,74,4541.36112,TRUE
+Faroe Islands,75,47178.96176,TRUE
+Faroe Islands,80,49992.57574,TRUE
+Faroe Islands,301,113987.8459,TRUE
+Faroe Islands,319,89190.44102,TRUE
+Faroe Islands,51,26504.47085,TRUE
+Faroe Islands,53,6581.96824,TRUE
+Faroe Islands,77,5993.147024,TRUE
+Faroe Islands,213,124295.9159,TRUE
+Faroe Islands,228,133880.2683,TRUE
+Faroe Islands,269,15171.62496,TRUE
+Faroe Islands,296,43692.55808,TRUE
+Faroe Islands,175,70802.39066,TRUE
+Faroe Islands,12,36715.19395,TRUE
+Faroe Islands,13,74728.86082,TRUE
+Faroe Islands,108,12577.92841,TRUE
+Faroe Islands,165,14797.07017,TRUE
+Faroe Islands,215,105585.0293,TRUE
+Faroe Islands,261,8946.089355,TRUE
+Faroe Islands,281,136069.2843,TRUE
+Faroe Islands,302,27087.34387,TRUE
+Faroe Islands,310,36133,TRUE
+Faroe Islands,106,13595.99028,TRUE
+Faroe Islands,30,62885.73079,TRUE
+Faroe Islands,91,126485.3041,TRUE
+Faroe Islands,192,3780098.195,TRUE
+Faroe Islands,249,70032.42373,TRUE
+Faroe Islands,308,35296.76443,TRUE
+Faroe Islands,116,98484.54468,TRUE
+Faroe Islands,234,8162.890747,TRUE
+Faroe Islands,88,138218.959,TRUE
+Faroe Islands,227,9358.848173,TRUE
+Faroe Islands,8,21599.0332,TRUE
+Faroe Islands,115,186672.4488,TRUE
+Faroe Islands,146,28645.96233,TRUE
+Faroe Islands,257,14862.84549,TRUE
+Faroe Islands,39,10075.63454,TRUE
+Faroe Islands,61,218943.5096,TRUE
+Faroe Islands,76,100326.9844,TRUE
+Faroe Islands,268,27005.25,TRUE
+Faroe Islands,194,9390.783666,TRUE
+Faroe Islands,198,5299.135169,TRUE
+Faroe Islands,245,11957.75,TRUE
+Faroe Islands,86,15341.61704,TRUE
+Faroe Islands,247,27947.125,TRUE
+Faroe Islands,15,5922.875,TRUE
+Faroe Islands,135,5719.346191,TRUE
+Faroe Islands,65,4252.65625,TRUE
+Faroe Islands,70,8796.273438,TRUE
+Faroe Islands,314,4472.643433,TRUE
+Faroe Islands,133,6124.625,TRUE
+Faroe Islands,240,4373.4375,TRUE
+Faroe Islands,148,23186,TRUE
+Faroe Islands,31,5157,TRUE
+Fiji,4,20977.52128,TRUE
+Fiji,5,7484.490489,TRUE
+Fiji,7,111437.9893,TRUE
+Fiji,8,47030.54376,TRUE
+Fiji,17,33099.94094,TRUE
+Fiji,105,149702.6633,TRUE
+Fiji,120,115713.1489,TRUE
+Fiji,161,8730.264786,TRUE
+Fiji,169,14652,FALSE
+Fiji,179,194271,FALSE
+Fiji,180,7520.279265,TRUE
+Fiji,203,26179.47154,TRUE
+Fiji,205,158255.8483,TRUE
+Fiji,208,14955,FALSE
+Fiji,219,80605.62094,TRUE
+Fiji,221,53059.48552,TRUE
+Fiji,229,16244.65912,TRUE
+Fiji,231,60255.26389,TRUE
+Fiji,235,68816,FALSE
+Fiji,254,35450,FALSE
+Fiji,84,9355.713607,TRUE
+Fiji,267,9372.487582,TRUE
+Fiji,282,423220.8453,TRUE
+Fiji,286,424113,FALSE
+Fiji,289,9979.922823,TRUE
+Fiji,316,72255.87156,TRUE
+Fiji,317,90227,FALSE
+Fiji,318,32261.2753,TRUE
+Fiji,18,11273.75269,TRUE
+Fiji,19,77366.60983,TRUE
+Fiji,33,30270.38924,TRUE
+Fiji,40,82926,FALSE
+Fiji,49,247408.5214,TRUE
+Fiji,54,175365.1249,TRUE
+Fiji,58,74040.89691,TRUE
+Fiji,59,22326.21725,TRUE
+Fiji,63,68336,FALSE
+Fiji,90,136853,FALSE
+Fiji,94,61002.28577,TRUE
+Fiji,101,49719,FALSE
+Fiji,112,122104.9439,TRUE
+Fiji,138,17125.18189,TRUE
+Fiji,152,119704.6269,TRUE
+Fiji,154,96782.90416,TRUE
+Fiji,158,96473.15601,TRUE
+Fiji,200,22918.25267,TRUE
+Fiji,202,75941,FALSE
+Fiji,206,183393.7134,TRUE
+Fiji,218,52990.31222,TRUE
+Fiji,238,71810,FALSE
+Fiji,243,112174.5654,TRUE
+Fiji,259,55616.6005,TRUE
+Fiji,276,10950.60863,TRUE
+Fiji,279,177754.1672,TRUE
+Fiji,298,120463.1286,TRUE
+Fiji,305,7430,FALSE
+Fiji,306,134016,FALSE
+Fiji,11,178064.2799,TRUE
+Fiji,16,47407,FALSE
+Fiji,48,27222.34375,TRUE
+Fiji,60,22383.25858,TRUE
+Fiji,63,68336,FALSE
+Fiji,121,115777.4722,TRUE
+Fiji,128,8330,FALSE
+Fiji,156,10200.29705,TRUE
+Fiji,217,21196.4891,TRUE
+Fiji,248,14225.32829,TRUE
+Fiji,270,32195,FALSE
+Fiji,52,90994,FALSE
+Fiji,74,949,FALSE
+Fiji,75,34633,FALSE
+Fiji,80,49992.57574,TRUE
+Fiji,301,96742,FALSE
+Fiji,319,5690,FALSE
+Fiji,51,26504.47085,TRUE
+Fiji,53,6581.96824,TRUE
+Fiji,77,5285,FALSE
+Fiji,213,124295.9159,TRUE
+Fiji,228,96596,FALSE
+Fiji,269,15171.62496,TRUE
+Fiji,296,8504,FALSE
+Fiji,175,67279,FALSE
+Fiji,12,36715.19395,TRUE
+Fiji,13,74728.86082,TRUE
+Fiji,108,12577.92841,TRUE
+Fiji,165,14797.07017,TRUE
+Fiji,215,119745,FALSE
+Fiji,261,8946.089355,TRUE
+Fiji,281,136069.2843,TRUE
+Fiji,302,27087.34387,TRUE
+Fiji,310,36133,TRUE
+Fiji,106,13595.99028,TRUE
+Fiji,30,62885.73079,TRUE
+Fiji,91,126485.3041,TRUE
+Fiji,192,3780098.195,TRUE
+Fiji,249,70032.42373,TRUE
+Fiji,308,35296.76443,TRUE
+Fiji,116,98484.54468,TRUE
+Fiji,234,8162.890747,TRUE
+Fiji,88,138218.959,TRUE
+Fiji,227,9358.848173,TRUE
+Fiji,8,21599.0332,TRUE
+Fiji,115,345456,FALSE
+Fiji,146,28645.96233,TRUE
+Fiji,257,14862.84549,TRUE
+Fiji,39,10075.63454,TRUE
+Fiji,61,218943.5096,TRUE
+Fiji,76,100326.9844,TRUE
+Fiji,268,27005.25,TRUE
+Fiji,194,9390.783666,TRUE
+Fiji,198,5299.135169,TRUE
+Fiji,245,11957.75,TRUE
+Fiji,86,15341.61704,TRUE
+Fiji,247,27947.125,TRUE
+Fiji,15,5922.875,TRUE
+Fiji,135,5719.346191,TRUE
+Fiji,65,4252.65625,TRUE
+Fiji,70,8796.273438,TRUE
+Fiji,314,4472.643433,TRUE
+Fiji,133,6124.625,TRUE
+Fiji,240,4373.4375,TRUE
+Fiji,148,23186,TRUE
+Fiji,31,5157,TRUE
+Finland,4,20977.52128,TRUE
+Finland,5,7484.490489,TRUE
+Finland,7,96111,FALSE
+Finland,8,47030.54376,TRUE
+Finland,17,36263,FALSE
+Finland,105,149702.6633,TRUE
+Finland,120,115713.1489,TRUE
+Finland,161,8730.264786,TRUE
+Finland,169,16777.49735,TRUE
+Finland,179,121608.9919,TRUE
+Finland,180,7520.279265,TRUE
+Finland,203,26179.47154,TRUE
+Finland,205,232230,FALSE
+Finland,208,84004.18102,TRUE
+Finland,219,80605.62094,TRUE
+Finland,221,53059.48552,TRUE
+Finland,229,16244.65912,TRUE
+Finland,231,60255.26389,TRUE
+Finland,235,270783,FALSE
+Finland,254,26952.37295,TRUE
+Finland,84,9355.713607,TRUE
+Finland,267,9372.487582,TRUE
+Finland,282,373793,FALSE
+Finland,286,760050.6713,TRUE
+Finland,289,9979.922823,TRUE
+Finland,316,72255.87156,TRUE
+Finland,317,188762.6372,TRUE
+Finland,318,38303,FALSE
+Finland,18,11273.75269,TRUE
+Finland,19,18125,FALSE
+Finland,33,30270.38924,TRUE
+Finland,40,310470,FALSE
+Finland,49,377529,FALSE
+Finland,54,72119,FALSE
+Finland,58,74040.89691,TRUE
+Finland,59,22326.21725,TRUE
+Finland,63,1068333,FALSE
+Finland,90,1962302,FALSE
+Finland,94,61002.28577,TRUE
+Finland,101,138512.4356,TRUE
+Finland,112,52222,FALSE
+Finland,138,17125.18189,TRUE
+Finland,152,199000,FALSE
+Finland,154,96782.90416,TRUE
+Finland,158,236976,FALSE
+Finland,200,33969,FALSE
+Finland,202,85300.04797,TRUE
+Finland,206,183393.7134,TRUE
+Finland,218,19603,FALSE
+Finland,238,240488,FALSE
+Finland,243,112174.5654,TRUE
+Finland,259,33385,FALSE
+Finland,276,10950.60863,TRUE
+Finland,279,144085,FALSE
+Finland,298,120463.1286,TRUE
+Finland,305,15590.0347,TRUE
+Finland,306,3659550,FALSE
+Finland,11,178064.2799,TRUE
+Finland,16,74389.59543,TRUE
+Finland,48,27222.34375,TRUE
+Finland,60,22383.25858,TRUE
+Finland,63,1068333,FALSE
+Finland,121,115777.4722,TRUE
+Finland,128,9353.124815,TRUE
+Finland,156,10200.29705,TRUE
+Finland,217,24608,FALSE
+Finland,248,15381,FALSE
+Finland,270,9151.63574,TRUE
+Finland,52,72720.10141,TRUE
+Finland,74,4541.36112,TRUE
+Finland,75,47178.96176,TRUE
+Finland,80,49992.57574,TRUE
+Finland,301,113987.8459,TRUE
+Finland,319,89190.44102,TRUE
+Finland,51,26504.47085,TRUE
+Finland,53,6581.96824,TRUE
+Finland,77,5993.147024,TRUE
+Finland,213,124295.9159,TRUE
+Finland,228,133880.2683,TRUE
+Finland,269,15171.62496,TRUE
+Finland,296,43692.55808,TRUE
+Finland,175,70802.39066,TRUE
+Finland,12,5000,FALSE
+Finland,13,74728.86082,TRUE
+Finland,108,12577.92841,TRUE
+Finland,165,14797.07017,TRUE
+Finland,215,105585.0293,TRUE
+Finland,261,8946.089355,TRUE
+Finland,281,33473,FALSE
+Finland,302,27087.34387,TRUE
+Finland,310,36133,TRUE
+Finland,106,13595.99028,TRUE
+Finland,30,62885.73079,TRUE
+Finland,91,8213,FALSE
+Finland,192,3780098.195,TRUE
+Finland,249,30161,FALSE
+Finland,308,35296.76443,TRUE
+Finland,116,29200,FALSE
+Finland,234,8162.890747,TRUE
+Finland,88,138218.959,TRUE
+Finland,227,9358.848173,TRUE
+Finland,8,21599.0332,TRUE
+Finland,115,186672.4488,TRUE
+Finland,146,28645.96233,TRUE
+Finland,257,14862.84549,TRUE
+Finland,39,10075.63454,TRUE
+Finland,61,218943.5096,TRUE
+Finland,76,100326.9844,TRUE
+Finland,268,27005.25,TRUE
+Finland,194,9390.783666,TRUE
+Finland,198,5299.135169,TRUE
+Finland,245,11957.75,TRUE
+Finland,86,15341.61704,TRUE
+Finland,247,27947.125,TRUE
+Finland,15,5922.875,TRUE
+Finland,135,5719.346191,TRUE
+Finland,65,4252.65625,TRUE
+Finland,70,8796.273438,TRUE
+Finland,314,4472.643433,TRUE
+Finland,133,6124.625,TRUE
+Finland,240,4373.4375,TRUE
+Finland,148,23186,TRUE
+Finland,31,5157,TRUE
+France,4,5718,FALSE
+France,5,7484.490489,TRUE
+France,7,366754,FALSE
+France,8,93371,FALSE
+France,17,54253,FALSE
+France,105,85812,FALSE
+France,120,82498,FALSE
+France,161,19405,FALSE
+France,169,81580,FALSE
+France,179,179998,FALSE
+France,180,34025,FALSE
+France,203,15617,FALSE
+France,205,357589,FALSE
+France,208,44573,FALSE
+France,219,219874,FALSE
+France,221,244718,FALSE
+France,229,16244.65912,TRUE
+France,231,143321,FALSE
+France,235,390052,FALSE
+France,254,47499,FALSE
+France,84,9355.713607,TRUE
+France,267,9372.487582,TRUE
+France,282,839260,FALSE
+France,286,760050.6713,TRUE
+France,289,21634,FALSE
+France,316,19376,FALSE
+France,317,187653,FALSE
+France,318,53041,FALSE
+France,18,21338,FALSE
+France,19,61343,FALSE
+France,33,25416,FALSE
+France,40,260565,FALSE
+France,49,457485,FALSE
+France,54,158183,FALSE
+France,58,42440,FALSE
+France,59,10797,FALSE
+France,63,461583,FALSE
+France,90,788677,FALSE
+France,94,61002.28577,TRUE
+France,101,412010,FALSE
+France,112,75716,FALSE
+France,138,14554,FALSE
+France,152,306295,FALSE
+France,154,44416,FALSE
+France,158,260557,FALSE
+France,200,40313,FALSE
+France,202,85300.04797,TRUE
+France,206,219147,FALSE
+France,218,65322,FALSE
+France,238,236088,FALSE
+France,243,112174.5654,TRUE
+France,259,39715,FALSE
+France,276,24849,FALSE
+France,279,197384,FALSE
+France,298,181540,FALSE
+France,305,25629,FALSE
+France,306,1861034,FALSE
+France,11,58624,FALSE
+France,16,74389.59543,TRUE
+France,48,27222.34375,TRUE
+France,60,22383.25858,TRUE
+France,63,461583,FALSE
+France,121,173820,FALSE
+France,128,9353.124815,TRUE
+France,156,13229,FALSE
+France,217,24927,FALSE
+France,248,30489,FALSE
+France,270,50843,FALSE
+France,52,72720.10141,TRUE
+France,74,4541.36112,TRUE
+France,75,19408,FALSE
+France,80,191816,FALSE
+France,301,113987.8459,TRUE
+France,319,89190.44102,TRUE
+France,51,26504.47085,TRUE
+France,53,6581.96824,TRUE
+France,77,5993.147024,TRUE
+France,213,124295.9159,TRUE
+France,228,133880.2683,TRUE
+France,269,15171.62496,TRUE
+France,296,43692.55808,TRUE
+France,175,70802.39066,TRUE
+France,12,47382,FALSE
+France,13,83596,FALSE
+France,108,67465,FALSE
+France,165,21448,FALSE
+France,215,105585.0293,TRUE
+France,261,8946.089355,TRUE
+France,281,173214,FALSE
+France,302,27087.34387,TRUE
+France,310,36133,TRUE
+France,106,19562,FALSE
+France,30,37664,FALSE
+France,91,6021,FALSE
+France,192,3780098.195,TRUE
+France,249,59527,FALSE
+France,308,43328,FALSE
+France,116,98484.54468,TRUE
+France,234,5792,FALSE
+France,88,138218.959,TRUE
+France,227,9358.848173,TRUE
+France,8,93371,FALSE
+France,115,186672.4488,TRUE
+France,146,28645.96233,TRUE
+France,257,14862.84549,TRUE
+France,39,37347,FALSE
+France,61,485280,FALSE
+France,76,100326.9844,TRUE
+France,268,27005.25,TRUE
+France,194,23959,FALSE
+France,198,5299.135169,TRUE
+France,245,11957.75,TRUE
+France,86,15341.61704,TRUE
+France,247,27947.125,TRUE
+France,15,5922.875,TRUE
+France,135,61034,FALSE
+France,65,4252.65625,TRUE
+France,70,8796.273438,TRUE
+France,314,4472.643433,TRUE
+France,133,6124.625,TRUE
+France,240,4373.4375,TRUE
+France,148,23186,TRUE
+France,31,5157,TRUE
+French Guiana,4,20977.52128,TRUE
+French Guiana,5,7484.490489,TRUE
+French Guiana,7,111437.9893,TRUE
+French Guiana,8,47030.54376,TRUE
+French Guiana,17,33099.94094,TRUE
+French Guiana,105,149702.6633,TRUE
+French Guiana,120,115713.1489,TRUE
+French Guiana,161,8730.264786,TRUE
+French Guiana,169,99491,FALSE
+French Guiana,179,121608.9919,TRUE
+French Guiana,180,7520.279265,TRUE
+French Guiana,203,26179.47154,TRUE
+French Guiana,205,158255.8483,TRUE
+French Guiana,208,22172,FALSE
+French Guiana,219,80605.62094,TRUE
+French Guiana,221,53059.48552,TRUE
+French Guiana,229,16244.65912,TRUE
+French Guiana,231,60255.26389,TRUE
+French Guiana,235,172280.9273,TRUE
+French Guiana,254,46873,FALSE
+French Guiana,84,9355.713607,TRUE
+French Guiana,267,9372.487582,TRUE
+French Guiana,282,423220.8453,TRUE
+French Guiana,286,584323,FALSE
+French Guiana,289,9979.922823,TRUE
+French Guiana,316,72255.87156,TRUE
+French Guiana,317,169043,FALSE
+French Guiana,318,32261.2753,TRUE
+French Guiana,18,11273.75269,TRUE
+French Guiana,19,110782,FALSE
+French Guiana,33,30270.38924,TRUE
+French Guiana,40,174317,FALSE
+French Guiana,49,247408.5214,TRUE
+French Guiana,54,175365.1249,TRUE
+French Guiana,58,74040.89691,TRUE
+French Guiana,59,22326.21725,TRUE
+French Guiana,63,234336.5313,TRUE
+French Guiana,90,71659,FALSE
+French Guiana,94,61002.28577,TRUE
+French Guiana,101,157067,FALSE
+French Guiana,112,122104.9439,TRUE
+French Guiana,138,17125.18189,TRUE
+French Guiana,152,119704.6269,TRUE
+French Guiana,154,4974,FALSE
+French Guiana,158,132099,FALSE
+French Guiana,200,22918.25267,TRUE
+French Guiana,202,85300.04797,TRUE
+French Guiana,206,183393.7134,TRUE
+French Guiana,218,52990.31222,TRUE
+French Guiana,238,116960.1876,TRUE
+French Guiana,243,112174.5654,TRUE
+French Guiana,259,55616.6005,TRUE
+French Guiana,276,10950.60863,TRUE
+French Guiana,279,177754.1672,TRUE
+French Guiana,298,27223,FALSE
+French Guiana,305,15590.0347,TRUE
+French Guiana,306,317023,FALSE
+French Guiana,11,178064.2799,TRUE
+French Guiana,16,108892,FALSE
+French Guiana,48,27222.34375,TRUE
+French Guiana,60,22383.25858,TRUE
+French Guiana,63,11715.28525,TRUE
+French Guiana,121,223502,FALSE
+French Guiana,128,9353.124815,TRUE
+French Guiana,156,10200.29705,TRUE
+French Guiana,217,21196.4891,TRUE
+French Guiana,248,14225.32829,TRUE
+French Guiana,270,9151.63574,TRUE
+French Guiana,52,50005,FALSE
+French Guiana,74,4541.36112,TRUE
+French Guiana,75,34251,FALSE
+French Guiana,80,49992.57574,TRUE
+French Guiana,301,32587,FALSE
+French Guiana,319,89190.44102,TRUE
+French Guiana,51,26504.47085,TRUE
+French Guiana,53,6581.96824,TRUE
+French Guiana,77,5993.147024,TRUE
+French Guiana,213,124295.9159,TRUE
+French Guiana,228,212843,FALSE
+French Guiana,269,15171.62496,TRUE
+French Guiana,296,43692.55808,TRUE
+French Guiana,175,163918,FALSE
+French Guiana,12,36715.19395,TRUE
+French Guiana,13,365425,FALSE
+French Guiana,108,12577.92841,TRUE
+French Guiana,165,14797.07017,TRUE
+French Guiana,215,91676,FALSE
+French Guiana,261,8946.089355,TRUE
+French Guiana,281,136069.2843,TRUE
+French Guiana,302,27087.34387,TRUE
+French Guiana,310,36133,TRUE
+French Guiana,106,13595.99028,TRUE
+French Guiana,30,62885.73079,TRUE
+French Guiana,91,126485.3041,TRUE
+French Guiana,192,3780098.195,TRUE
+French Guiana,249,70032.42373,TRUE
+French Guiana,308,35296.76443,TRUE
+French Guiana,116,98484.54468,TRUE
+French Guiana,234,8162.890747,TRUE
+French Guiana,88,138218.959,TRUE
+French Guiana,227,9358.848173,TRUE
+French Guiana,8,21599.0332,TRUE
+French Guiana,115,186672.4488,TRUE
+French Guiana,146,28645.96233,TRUE
+French Guiana,257,14862.84549,TRUE
+French Guiana,39,10075.63454,TRUE
+French Guiana,61,218943.5096,TRUE
+French Guiana,76,100326.9844,TRUE
+French Guiana,268,27005.25,TRUE
+French Guiana,194,9390.783666,TRUE
+French Guiana,198,5299.135169,TRUE
+French Guiana,245,11957.75,TRUE
+French Guiana,86,15341.61704,TRUE
+French Guiana,247,27947.125,TRUE
+French Guiana,15,5922.875,TRUE
+French Guiana,135,5719.346191,TRUE
+French Guiana,65,4252.65625,TRUE
+French Guiana,70,8796.273438,TRUE
+French Guiana,314,4472.643433,TRUE
+French Guiana,133,6124.625,TRUE
+French Guiana,240,4373.4375,TRUE
+French Guiana,148,23186,TRUE
+French Guiana,31,5157,TRUE
+French Polynesia,4,20977.52128,TRUE
+French Polynesia,5,7484.490489,TRUE
+French Polynesia,7,111437.9893,TRUE
+French Polynesia,8,47030.54376,TRUE
+French Polynesia,17,33099.94094,TRUE
+French Polynesia,105,149702.6633,TRUE
+French Polynesia,120,115713.1489,TRUE
+French Polynesia,161,8730.264786,TRUE
+French Polynesia,169,16777.49735,TRUE
+French Polynesia,179,120741,FALSE
+French Polynesia,180,7520.279265,TRUE
+French Polynesia,203,26179.47154,TRUE
+French Polynesia,205,158255.8483,TRUE
+French Polynesia,208,116076,FALSE
+French Polynesia,219,80605.62094,TRUE
+French Polynesia,221,53059.48552,TRUE
+French Polynesia,229,16244.65912,TRUE
+French Polynesia,231,60255.26389,TRUE
+French Polynesia,235,94717,FALSE
+French Polynesia,254,26952.37295,TRUE
+French Polynesia,84,9355.713607,TRUE
+French Polynesia,267,9372.487582,TRUE
+French Polynesia,282,423220.8453,TRUE
+French Polynesia,286,856892,FALSE
+French Polynesia,289,9979.922823,TRUE
+French Polynesia,316,72255.87156,TRUE
+French Polynesia,317,120349,FALSE
+French Polynesia,318,32261.2753,TRUE
+French Polynesia,18,11273.75269,TRUE
+French Polynesia,19,77366.60983,TRUE
+French Polynesia,33,30270.38924,TRUE
+French Polynesia,40,147087,FALSE
+French Polynesia,49,161688,FALSE
+French Polynesia,54,175365.1249,TRUE
+French Polynesia,58,74040.89691,TRUE
+French Polynesia,59,22326.21725,TRUE
+French Polynesia,63,95251,FALSE
+French Polynesia,90,102347,FALSE
+French Polynesia,94,61002.28577,TRUE
+French Polynesia,101,138512.4356,TRUE
+French Polynesia,112,122104.9439,TRUE
+French Polynesia,138,17125.18189,TRUE
+French Polynesia,152,119704.6269,TRUE
+French Polynesia,154,96782.90416,TRUE
+French Polynesia,158,115626,FALSE
+French Polynesia,200,22918.25267,TRUE
+French Polynesia,202,85300.04797,TRUE
+French Polynesia,206,78585,FALSE
+French Polynesia,218,52990.31222,TRUE
+French Polynesia,238,62922,FALSE
+French Polynesia,243,112174.5654,TRUE
+French Polynesia,259,55616.6005,TRUE
+French Polynesia,276,10950.60863,TRUE
+French Polynesia,279,177754.1672,TRUE
+French Polynesia,298,217146,FALSE
+French Polynesia,305,15590.0347,TRUE
+French Polynesia,306,170904,FALSE
+French Polynesia,11,178064.2799,TRUE
+French Polynesia,16,69740,FALSE
+French Polynesia,48,27222.34375,TRUE
+French Polynesia,60,22383.25858,TRUE
+French Polynesia,63,95251,FALSE
+French Polynesia,121,196407,FALSE
+French Polynesia,128,9353.124815,TRUE
+French Polynesia,156,10200.29705,TRUE
+French Polynesia,217,21196.4891,TRUE
+French Polynesia,248,14225.32829,TRUE
+French Polynesia,270,9151.63574,TRUE
+French Polynesia,52,183249,FALSE
+French Polynesia,74,4541.36112,TRUE
+French Polynesia,75,37627,FALSE
+French Polynesia,80,49992.57574,TRUE
+French Polynesia,301,113987.8459,TRUE
+French Polynesia,319,89190.44102,TRUE
+French Polynesia,51,26504.47085,TRUE
+French Polynesia,53,6581.96824,TRUE
+French Polynesia,77,2210,FALSE
+French Polynesia,213,124295.9159,TRUE
+French Polynesia,228,185436,FALSE
+French Polynesia,269,15171.62496,TRUE
+French Polynesia,296,43692.55808,TRUE
+French Polynesia,175,70802.39066,TRUE
+French Polynesia,12,36715.19395,TRUE
+French Polynesia,13,145229,FALSE
+French Polynesia,108,12577.92841,TRUE
+French Polynesia,165,14797.07017,TRUE
+French Polynesia,215,105585.0293,TRUE
+French Polynesia,261,8946.089355,TRUE
+French Polynesia,281,136069.2843,TRUE
+French Polynesia,302,27087.34387,TRUE
+French Polynesia,310,36133,TRUE
+French Polynesia,106,13595.99028,TRUE
+French Polynesia,30,62885.73079,TRUE
+French Polynesia,91,126485.3041,TRUE
+French Polynesia,192,3780098.195,TRUE
+French Polynesia,249,70032.42373,TRUE
+French Polynesia,308,35296.76443,TRUE
+French Polynesia,116,98484.54468,TRUE
+French Polynesia,234,8162.890747,TRUE
+French Polynesia,88,138218.959,TRUE
+French Polynesia,227,9358.848173,TRUE
+French Polynesia,8,21599.0332,TRUE
+French Polynesia,115,186672.4488,TRUE
+French Polynesia,146,28645.96233,TRUE
+French Polynesia,257,14862.84549,TRUE
+French Polynesia,39,10075.63454,TRUE
+French Polynesia,61,218943.5096,TRUE
+French Polynesia,76,100326.9844,TRUE
+French Polynesia,268,27005.25,TRUE
+French Polynesia,194,9390.783666,TRUE
+French Polynesia,198,5299.135169,TRUE
+French Polynesia,245,11957.75,TRUE
+French Polynesia,86,15341.61704,TRUE
+French Polynesia,247,27947.125,TRUE
+French Polynesia,15,5922.875,TRUE
+French Polynesia,135,5719.346191,TRUE
+French Polynesia,65,4252.65625,TRUE
+French Polynesia,70,8796.273438,TRUE
+French Polynesia,314,1027,FALSE
+French Polynesia,133,6124.625,TRUE
+French Polynesia,240,4373.4375,TRUE
+French Polynesia,148,23186,TRUE
+French Polynesia,31,5157,TRUE
+Gabon,4,20977.52128,TRUE
+Gabon,5,7484.490489,TRUE
+Gabon,7,111437.9893,TRUE
+Gabon,8,47030.54376,TRUE
+Gabon,17,33099.94094,TRUE
+Gabon,105,149702.6633,TRUE
+Gabon,120,115713.1489,TRUE
+Gabon,161,8730.264786,TRUE
+Gabon,169,15783,FALSE
+Gabon,179,121608.9919,TRUE
+Gabon,180,7520.279265,TRUE
+Gabon,203,26179.47154,TRUE
+Gabon,205,158255.8483,TRUE
+Gabon,208,84004.18102,TRUE
+Gabon,219,80605.62094,TRUE
+Gabon,221,53059.48552,TRUE
+Gabon,229,16244.65912,TRUE
+Gabon,231,60255.26389,TRUE
+Gabon,235,172280.9273,TRUE
+Gabon,254,28453,FALSE
+Gabon,84,9355.713607,TRUE
+Gabon,267,9372.487582,TRUE
+Gabon,282,423220.8453,TRUE
+Gabon,286,616753,FALSE
+Gabon,289,9979.922823,TRUE
+Gabon,316,72255.87156,TRUE
+Gabon,317,188762.6372,TRUE
+Gabon,318,32261.2753,TRUE
+Gabon,18,11273.75269,TRUE
+Gabon,19,77366.60983,TRUE
+Gabon,33,30270.38924,TRUE
+Gabon,40,180987.6885,TRUE
+Gabon,49,247408.5214,TRUE
+Gabon,54,175365.1249,TRUE
+Gabon,58,74040.89691,TRUE
+Gabon,59,22326.21725,TRUE
+Gabon,63,234336.5313,TRUE
+Gabon,90,194487.8189,TRUE
+Gabon,94,61002.28577,TRUE
+Gabon,101,52860,FALSE
+Gabon,112,122104.9439,TRUE
+Gabon,138,17125.18189,TRUE
+Gabon,152,119704.6269,TRUE
+Gabon,154,96782.90416,TRUE
+Gabon,158,96473.15601,TRUE
+Gabon,200,22918.25267,TRUE
+Gabon,202,85300.04797,TRUE
+Gabon,206,183393.7134,TRUE
+Gabon,218,52990.31222,TRUE
+Gabon,238,116960.1876,TRUE
+Gabon,243,112174.5654,TRUE
+Gabon,259,55616.6005,TRUE
+Gabon,276,8777,FALSE
+Gabon,279,177754.1672,TRUE
+Gabon,298,120463.1286,TRUE
+Gabon,305,15590.0347,TRUE
+Gabon,306,85099,FALSE
+Gabon,11,178064.2799,TRUE
+Gabon,16,78892,FALSE
+Gabon,48,27222.34375,TRUE
+Gabon,60,22383.25858,TRUE
+Gabon,63,11715.28525,TRUE
+Gabon,121,115777.4722,TRUE
+Gabon,128,10346,FALSE
+Gabon,156,10200.29705,TRUE
+Gabon,217,21196.4891,TRUE
+Gabon,248,14225.32829,TRUE
+Gabon,270,9151.63574,TRUE
+Gabon,52,53747,FALSE
+Gabon,74,638,FALSE
+Gabon,75,47178.96176,TRUE
+Gabon,80,49992.57574,TRUE
+Gabon,301,60417,FALSE
+Gabon,319,65813,FALSE
+Gabon,51,26504.47085,TRUE
+Gabon,53,6581.96824,TRUE
+Gabon,77,3389,FALSE
+Gabon,213,40608,FALSE
+Gabon,228,68896,FALSE
+Gabon,269,15171.62496,TRUE
+Gabon,296,19386,FALSE
+Gabon,175,70802.39066,TRUE
+Gabon,12,36715.19395,TRUE
+Gabon,13,74728.86082,TRUE
+Gabon,108,12577.92841,TRUE
+Gabon,165,14797.07017,TRUE
+Gabon,215,105585.0293,TRUE
+Gabon,261,8946.089355,TRUE
+Gabon,281,136069.2843,TRUE
+Gabon,302,27087.34387,TRUE
+Gabon,310,36133,TRUE
+Gabon,106,13595.99028,TRUE
+Gabon,30,62885.73079,TRUE
+Gabon,91,126485.3041,TRUE
+Gabon,192,3780098.195,TRUE
+Gabon,249,70032.42373,TRUE
+Gabon,308,35296.76443,TRUE
+Gabon,116,98484.54468,TRUE
+Gabon,234,8162.890747,TRUE
+Gabon,88,138218.959,TRUE
+Gabon,227,9358.848173,TRUE
+Gabon,8,21599.0332,TRUE
+Gabon,115,186672.4488,TRUE
+Gabon,146,28645.96233,TRUE
+Gabon,257,14985,FALSE
+Gabon,39,10075.63454,TRUE
+Gabon,61,218943.5096,TRUE
+Gabon,76,100326.9844,TRUE
+Gabon,268,27005.25,TRUE
+Gabon,194,9390.783666,TRUE
+Gabon,198,5299.135169,TRUE
+Gabon,245,11957.75,TRUE
+Gabon,86,15341.61704,TRUE
+Gabon,247,27947.125,TRUE
+Gabon,15,5922.875,TRUE
+Gabon,135,5719.346191,TRUE
+Gabon,65,4252.65625,TRUE
+Gabon,70,8796.273438,TRUE
+Gabon,314,4472.643433,TRUE
+Gabon,133,6124.625,TRUE
+Gabon,240,4373.4375,TRUE
+Gabon,148,23186,TRUE
+Gabon,31,5157,TRUE
+Gambia,4,20977.52128,TRUE
+Gambia,5,7484.490489,TRUE
+Gambia,7,111437.9893,TRUE
+Gambia,8,47030.54376,TRUE
+Gambia,17,33099.94094,TRUE
+Gambia,105,149702.6633,TRUE
+Gambia,120,115713.1489,TRUE
+Gambia,161,8730.264786,TRUE
+Gambia,169,9251,FALSE
+Gambia,179,121608.9919,TRUE
+Gambia,180,8714,FALSE
+Gambia,203,26179.47154,TRUE
+Gambia,205,158255.8483,TRUE
+Gambia,208,84004.18102,TRUE
+Gambia,219,80605.62094,TRUE
+Gambia,221,53059.48552,TRUE
+Gambia,229,16244.65912,TRUE
+Gambia,231,60255.26389,TRUE
+Gambia,235,172280.9273,TRUE
+Gambia,254,7424,FALSE
+Gambia,84,3448,FALSE
+Gambia,267,3643,FALSE
+Gambia,282,423220.8453,TRUE
+Gambia,286,760050.6713,TRUE
+Gambia,289,9979.922823,TRUE
+Gambia,316,72255.87156,TRUE
+Gambia,317,188762.6372,TRUE
+Gambia,318,32261.2753,TRUE
+Gambia,18,11273.75269,TRUE
+Gambia,19,77366.60983,TRUE
+Gambia,33,30270.38924,TRUE
+Gambia,40,180987.6885,TRUE
+Gambia,49,247408.5214,TRUE
+Gambia,54,175365.1249,TRUE
+Gambia,58,74040.89691,TRUE
+Gambia,59,22326.21725,TRUE
+Gambia,63,234336.5313,TRUE
+Gambia,90,194487.8189,TRUE
+Gambia,94,61002.28577,TRUE
+Gambia,101,138512.4356,TRUE
+Gambia,112,122104.9439,TRUE
+Gambia,138,17125.18189,TRUE
+Gambia,152,119704.6269,TRUE
+Gambia,154,96782.90416,TRUE
+Gambia,158,96473.15601,TRUE
+Gambia,200,22918.25267,TRUE
+Gambia,202,85300.04797,TRUE
+Gambia,206,183393.7134,TRUE
+Gambia,218,52990.31222,TRUE
+Gambia,238,116960.1876,TRUE
+Gambia,243,112174.5654,TRUE
+Gambia,259,55616.6005,TRUE
+Gambia,276,10950.60863,TRUE
+Gambia,279,177754.1672,TRUE
+Gambia,298,120463.1286,TRUE
+Gambia,305,15590.0347,TRUE
+Gambia,306,131681.4608,TRUE
+Gambia,11,178064.2799,TRUE
+Gambia,16,74389.59543,TRUE
+Gambia,48,27222.34375,TRUE
+Gambia,60,22383.25858,TRUE
+Gambia,63,11715.28525,TRUE
+Gambia,121,115777.4722,TRUE
+Gambia,128,9274,FALSE
+Gambia,156,10200.29705,TRUE
+Gambia,217,21196.4891,TRUE
+Gambia,248,14225.32829,TRUE
+Gambia,270,9237,FALSE
+Gambia,52,39445,FALSE
+Gambia,74,4541.36112,TRUE
+Gambia,75,47178.96176,TRUE
+Gambia,80,49992.57574,TRUE
+Gambia,301,113987.8459,TRUE
+Gambia,319,89190.44102,TRUE
+Gambia,51,17292,FALSE
+Gambia,53,6581.96824,TRUE
+Gambia,77,5993.147024,TRUE
+Gambia,213,99959,FALSE
+Gambia,228,133880.2683,TRUE
+Gambia,269,15171.62496,TRUE
+Gambia,296,43692.55808,TRUE
+Gambia,175,56794,FALSE
+Gambia,12,36715.19395,TRUE
+Gambia,13,74728.86082,TRUE
+Gambia,108,12577.92841,TRUE
+Gambia,165,14797.07017,TRUE
+Gambia,215,105585.0293,TRUE
+Gambia,261,8946.089355,TRUE
+Gambia,281,136069.2843,TRUE
+Gambia,302,27087.34387,TRUE
+Gambia,310,36133,TRUE
+Gambia,106,13595.99028,TRUE
+Gambia,30,62885.73079,TRUE
+Gambia,91,126485.3041,TRUE
+Gambia,192,3780098.195,TRUE
+Gambia,249,70032.42373,TRUE
+Gambia,308,35296.76443,TRUE
+Gambia,116,98484.54468,TRUE
+Gambia,234,8162.890747,TRUE
+Gambia,88,138218.959,TRUE
+Gambia,227,9358.848173,TRUE
+Gambia,8,21599.0332,TRUE
+Gambia,115,186672.4488,TRUE
+Gambia,146,28645.96233,TRUE
+Gambia,257,14862.84549,TRUE
+Gambia,39,10075.63454,TRUE
+Gambia,61,218943.5096,TRUE
+Gambia,76,100326.9844,TRUE
+Gambia,268,27005.25,TRUE
+Gambia,194,9390.783666,TRUE
+Gambia,198,5299.135169,TRUE
+Gambia,245,11957.75,TRUE
+Gambia,86,15341.61704,TRUE
+Gambia,247,27947.125,TRUE
+Gambia,15,5922.875,TRUE
+Gambia,135,5719.346191,TRUE
+Gambia,65,4252.65625,TRUE
+Gambia,70,8796.273438,TRUE
+Gambia,314,4472.643433,TRUE
+Gambia,133,6124.625,TRUE
+Gambia,240,4373.4375,TRUE
+Gambia,148,23186,TRUE
+Gambia,31,5157,TRUE
+Georgia,4,10300,FALSE
+Georgia,5,7484.490489,TRUE
+Georgia,7,37676,FALSE
+Georgia,8,11025,FALSE
+Georgia,17,20433,FALSE
+Georgia,105,149702.6633,TRUE
+Georgia,120,37900,FALSE
+Georgia,161,8730.264786,TRUE
+Georgia,169,26204,FALSE
+Georgia,179,121608.9919,TRUE
+Georgia,180,7520.279265,TRUE
+Georgia,203,26179.47154,TRUE
+Georgia,205,88095,FALSE
+Georgia,208,37639,FALSE
+Georgia,219,47231,FALSE
+Georgia,221,76251,FALSE
+Georgia,229,16244.65912,TRUE
+Georgia,231,40287,FALSE
+Georgia,235,124500,FALSE
+Georgia,254,26952.37295,TRUE
+Georgia,84,9355.713607,TRUE
+Georgia,267,9372.487582,TRUE
+Georgia,282,423220.8453,TRUE
+Georgia,286,760050.6713,TRUE
+Georgia,289,8889,FALSE
+Georgia,316,15428,FALSE
+Georgia,317,250000,FALSE
+Georgia,318,25732,FALSE
+Georgia,18,11154,FALSE
+Georgia,19,77366.60983,TRUE
+Georgia,33,30270.38924,TRUE
+Georgia,40,246250,FALSE
+Georgia,49,42053,FALSE
+Georgia,54,175365.1249,TRUE
+Georgia,58,32678,FALSE
+Georgia,59,22326.21725,TRUE
+Georgia,63,67390,FALSE
+Georgia,90,133571,FALSE
+Georgia,94,61002.28577,TRUE
+Georgia,101,38566,FALSE
+Georgia,112,32222,FALSE
+Georgia,138,17125.18189,TRUE
+Georgia,152,119704.6269,TRUE
+Georgia,154,35974,FALSE
+Georgia,158,96473.15601,TRUE
+Georgia,200,16667,FALSE
+Georgia,202,85300.04797,TRUE
+Georgia,206,183393.7134,TRUE
+Georgia,218,52990.31222,TRUE
+Georgia,238,116960.1876,TRUE
+Georgia,243,59560,FALSE
+Georgia,259,15094,FALSE
+Georgia,276,37592,FALSE
+Georgia,279,177754.1672,TRUE
+Georgia,298,32303,FALSE
+Georgia,305,3491,FALSE
+Georgia,306,115106,FALSE
+Georgia,11,178064.2799,TRUE
+Georgia,16,74389.59543,TRUE
+Georgia,48,27222.34375,TRUE
+Georgia,60,22383.25858,TRUE
+Georgia,63,67390,FALSE
+Georgia,121,115777.4722,TRUE
+Georgia,128,9912,FALSE
+Georgia,156,10200.29705,TRUE
+Georgia,217,9871,FALSE
+Georgia,248,14225.32829,TRUE
+Georgia,270,9151.63574,TRUE
+Georgia,52,72720.10141,TRUE
+Georgia,74,4541.36112,TRUE
+Georgia,75,47178.96176,TRUE
+Georgia,80,49992.57574,TRUE
+Georgia,301,113987.8459,TRUE
+Georgia,319,89190.44102,TRUE
+Georgia,51,26504.47085,TRUE
+Georgia,53,6581.96824,TRUE
+Georgia,77,5993.147024,TRUE
+Georgia,213,124295.9159,TRUE
+Georgia,228,133880.2683,TRUE
+Georgia,269,15171.62496,TRUE
+Georgia,296,43692.55808,TRUE
+Georgia,175,70802.39066,TRUE
+Georgia,12,36715.19395,TRUE
+Georgia,13,74728.86082,TRUE
+Georgia,108,12577.92841,TRUE
+Georgia,165,14797.07017,TRUE
+Georgia,215,105585.0293,TRUE
+Georgia,261,8946.089355,TRUE
+Georgia,281,66466,FALSE
+Georgia,302,10525,FALSE
+Georgia,310,36133,TRUE
+Georgia,106,17525,FALSE
+Georgia,30,62885.73079,TRUE
+Georgia,91,126485.3041,TRUE
+Georgia,192,3780098.195,TRUE
+Georgia,249,70032.42373,TRUE
+Georgia,308,35296.76443,TRUE
+Georgia,116,98484.54468,TRUE
+Georgia,234,8162.890747,TRUE
+Georgia,88,138218.959,TRUE
+Georgia,227,9358.848173,TRUE
+Georgia,8,11025,FALSE
+Georgia,115,186672.4488,TRUE
+Georgia,146,28645.96233,TRUE
+Georgia,257,14862.84549,TRUE
+Georgia,39,10668,FALSE
+Georgia,61,218943.5096,TRUE
+Georgia,76,100326.9844,TRUE
+Georgia,268,27005.25,TRUE
+Georgia,194,9390.783666,TRUE
+Georgia,198,5299.135169,TRUE
+Georgia,245,11957.75,TRUE
+Georgia,86,15341.61704,TRUE
+Georgia,247,27947.125,TRUE
+Georgia,15,5922.875,TRUE
+Georgia,135,5719.346191,TRUE
+Georgia,65,4252.65625,TRUE
+Georgia,70,8796.273438,TRUE
+Georgia,314,4472.643433,TRUE
+Georgia,133,6124.625,TRUE
+Georgia,240,4373.4375,TRUE
+Georgia,148,23186,TRUE
+Georgia,31,5157,TRUE
+Germany,4,20977.52128,TRUE
+Germany,5,7484.490489,TRUE
+Germany,7,329646,FALSE
+Germany,8,46779,FALSE
+Germany,17,66857,FALSE
+Germany,105,149702.6633,TRUE
+Germany,120,122509,FALSE
+Germany,161,14286,FALSE
+Germany,169,96512,FALSE
+Germany,179,121608.9919,TRUE
+Germany,180,7520.279265,TRUE
+Germany,203,26179.47154,TRUE
+Germany,205,462792,FALSE
+Germany,208,84004.18102,TRUE
+Germany,219,99935,FALSE
+Germany,221,179870,FALSE
+Germany,229,16244.65912,TRUE
+Germany,231,98010,FALSE
+Germany,235,444210,FALSE
+Germany,254,26952.37295,TRUE
+Germany,84,9355.713607,TRUE
+Germany,267,9372.487582,TRUE
+Germany,282,762248,FALSE
+Germany,286,760050.6713,TRUE
+Germany,289,21377,FALSE
+Germany,316,32803,FALSE
+Germany,317,188762.6372,TRUE
+Germany,318,76409,FALSE
+Germany,18,11273.75269,TRUE
+Germany,19,109750,FALSE
+Germany,33,39613,FALSE
+Germany,40,536479,FALSE
+Germany,49,572422,FALSE
+Germany,54,224111,FALSE
+Germany,58,57302,FALSE
+Germany,59,22326.21725,TRUE
+Germany,63,1143293,FALSE
+Germany,90,954334,FALSE
+Germany,94,61002.28577,TRUE
+Germany,101,138512.4356,TRUE
+Germany,112,122104.9439,TRUE
+Germany,138,18575,FALSE
+Germany,152,403293,FALSE
+Germany,154,96782.90416,TRUE
+Germany,158,233250,FALSE
+Germany,200,46398,FALSE
+Germany,202,85300.04797,TRUE
+Germany,206,413521,FALSE
+Germany,218,55020,FALSE
+Germany,238,255256,FALSE
+Germany,243,112174.5654,TRUE
+Germany,259,55593,FALSE
+Germany,276,27333,FALSE
+Germany,279,190954,FALSE
+Germany,298,120463.1286,TRUE
+Germany,305,26113,FALSE
+Germany,306,2530772,FALSE
+Germany,11,178064.2799,TRUE
+Germany,16,74389.59543,TRUE
+Germany,48,27222.34375,TRUE
+Germany,60,22383.25858,TRUE
+Germany,63,1143293,FALSE
+Germany,121,115777.4722,TRUE
+Germany,128,9353.124815,TRUE
+Germany,156,10200.29705,TRUE
+Germany,217,33166,FALSE
+Germany,248,34545,FALSE
+Germany,270,9151.63574,TRUE
+Germany,52,72720.10141,TRUE
+Germany,74,4541.36112,TRUE
+Germany,75,47178.96176,TRUE
+Germany,80,49992.57574,TRUE
+Germany,301,113987.8459,TRUE
+Germany,319,89190.44102,TRUE
+Germany,51,26504.47085,TRUE
+Germany,53,6581.96824,TRUE
+Germany,77,5993.147024,TRUE
+Germany,213,124295.9159,TRUE
+Germany,228,133880.2683,TRUE
+Germany,269,15171.62496,TRUE
+Germany,296,43692.55808,TRUE
+Germany,175,70802.39066,TRUE
+Germany,12,53881,FALSE
+Germany,13,74728.86082,TRUE
+Germany,108,12577.92841,TRUE
+Germany,165,17483,FALSE
+Germany,215,105585.0293,TRUE
+Germany,261,8946.089355,TRUE
+Germany,281,100162,FALSE
+Germany,302,27087.34387,TRUE
+Germany,310,36133,TRUE
+Germany,106,13595.99028,TRUE
+Germany,30,39462,FALSE
+Germany,91,59974,FALSE
+Germany,192,2380891,FALSE
+Germany,249,55394,FALSE
+Germany,308,60523,FALSE
+Germany,116,66256,FALSE
+Germany,234,5539,FALSE
+Germany,88,138218.959,TRUE
+Germany,227,9358.848173,TRUE
+Germany,8,46779,FALSE
+Germany,115,186672.4488,TRUE
+Germany,146,28645.96233,TRUE
+Germany,257,14862.84549,TRUE
+Germany,39,10075.63454,TRUE
+Germany,61,218943.5096,TRUE
+Germany,76,100326.9844,TRUE
+Germany,268,27005.25,TRUE
+Germany,194,13551,FALSE
+Germany,198,5299.135169,TRUE
+Germany,245,11957.75,TRUE
+Germany,86,15341.61704,TRUE
+Germany,247,27947.125,TRUE
+Germany,15,5922.875,TRUE
+Germany,135,5719.346191,TRUE
+Germany,65,4252.65625,TRUE
+Germany,70,8796.273438,TRUE
+Germany,314,4472.643433,TRUE
+Germany,133,6124.625,TRUE
+Germany,240,4373.4375,TRUE
+Germany,148,23186,TRUE
+Germany,31,5157,TRUE
+Ghana,4,20977.52128,TRUE
+Ghana,5,7484.490489,TRUE
+Ghana,7,111437.9893,TRUE
+Ghana,8,47030.54376,TRUE
+Ghana,17,33099.94094,TRUE
+Ghana,105,149702.6633,TRUE
+Ghana,120,115713.1489,TRUE
+Ghana,161,8730.264786,TRUE
+Ghana,169,19500,FALSE
+Ghana,179,121608.9919,TRUE
+Ghana,180,9800,FALSE
+Ghana,203,26179.47154,TRUE
+Ghana,205,171000,FALSE
+Ghana,208,397999,FALSE
+Ghana,219,80605.62094,TRUE
+Ghana,221,53059.48552,TRUE
+Ghana,229,16244.65912,TRUE
+Ghana,231,60255.26389,TRUE
+Ghana,235,172280.9273,TRUE
+Ghana,254,28200,FALSE
+Ghana,84,9339,FALSE
+Ghana,267,9372.487582,TRUE
+Ghana,282,423220.8453,TRUE
+Ghana,286,248489,FALSE
+Ghana,289,9979.922823,TRUE
+Ghana,316,72255.87156,TRUE
+Ghana,317,188762.6372,TRUE
+Ghana,318,32261.2753,TRUE
+Ghana,18,12933,FALSE
+Ghana,19,97877,FALSE
+Ghana,33,30270.38924,TRUE
+Ghana,40,180987.6885,TRUE
+Ghana,49,247408.5214,TRUE
+Ghana,54,175365.1249,TRUE
+Ghana,58,74040.89691,TRUE
+Ghana,59,22326.21725,TRUE
+Ghana,63,77768,FALSE
+Ghana,90,138182,FALSE
+Ghana,94,61002.28577,TRUE
+Ghana,101,81000,FALSE
+Ghana,112,122104.9439,TRUE
+Ghana,138,17125.18189,TRUE
+Ghana,152,119704.6269,TRUE
+Ghana,154,65325,FALSE
+Ghana,158,96473.15601,TRUE
+Ghana,200,8826,FALSE
+Ghana,202,210000,FALSE
+Ghana,206,183393.7134,TRUE
+Ghana,218,52990.31222,TRUE
+Ghana,238,116960.1876,TRUE
+Ghana,243,112174.5654,TRUE
+Ghana,259,55616.6005,TRUE
+Ghana,276,10950.60863,TRUE
+Ghana,279,177754.1672,TRUE
+Ghana,298,120463.1286,TRUE
+Ghana,305,4646,FALSE
+Ghana,306,78037,FALSE
+Ghana,11,178064.2799,TRUE
+Ghana,16,110000,FALSE
+Ghana,48,27222.34375,TRUE
+Ghana,60,22383.25858,TRUE
+Ghana,63,77768,FALSE
+Ghana,121,115777.4722,TRUE
+Ghana,128,12400,FALSE
+Ghana,156,10200.29705,TRUE
+Ghana,217,21196.4891,TRUE
+Ghana,248,14225.32829,TRUE
+Ghana,270,10000,FALSE
+Ghana,52,189600,FALSE
+Ghana,74,5100,FALSE
+Ghana,75,63397,FALSE
+Ghana,80,49992.57574,TRUE
+Ghana,301,64900,FALSE
+Ghana,319,169800,FALSE
+Ghana,51,5501,FALSE
+Ghana,53,6581.96824,TRUE
+Ghana,77,16000,FALSE
+Ghana,213,69992,FALSE
+Ghana,228,630000,FALSE
+Ghana,269,15171.62496,TRUE
+Ghana,296,18685,FALSE
+Ghana,175,131600,FALSE
+Ghana,12,36715.19395,TRUE
+Ghana,13,45471,FALSE
+Ghana,108,12577.92841,TRUE
+Ghana,165,14797.07017,TRUE
+Ghana,215,35196,FALSE
+Ghana,261,8946.089355,TRUE
+Ghana,281,136069.2843,TRUE
+Ghana,302,27087.34387,TRUE
+Ghana,310,36133,TRUE
+Ghana,106,13595.99028,TRUE
+Ghana,30,62885.73079,TRUE
+Ghana,91,126485.3041,TRUE
+Ghana,192,3780098.195,TRUE
+Ghana,249,70032.42373,TRUE
+Ghana,308,35296.76443,TRUE
+Ghana,116,98484.54468,TRUE
+Ghana,234,8162.890747,TRUE
+Ghana,88,138218.959,TRUE
+Ghana,227,9358.848173,TRUE
+Ghana,8,21599.0332,TRUE
+Ghana,115,11102,FALSE
+Ghana,146,28645.96233,TRUE
+Ghana,257,8200,FALSE
+Ghana,39,10075.63454,TRUE
+Ghana,61,218943.5096,TRUE
+Ghana,76,100326.9844,TRUE
+Ghana,268,7660,FALSE
+Ghana,194,9390.783666,TRUE
+Ghana,198,5299.135169,TRUE
+Ghana,245,11957.75,TRUE
+Ghana,86,15341.61704,TRUE
+Ghana,247,27947.125,TRUE
+Ghana,15,5922.875,TRUE
+Ghana,135,5719.346191,TRUE
+Ghana,65,4252.65625,TRUE
+Ghana,70,8796.273438,TRUE
+Ghana,314,4472.643433,TRUE
+Ghana,133,6124.625,TRUE
+Ghana,240,4373.4375,TRUE
+Ghana,148,23186,TRUE
+Ghana,31,5157,TRUE
+Greece,4,20866,FALSE
+Greece,5,11394,FALSE
+Greece,7,212380,FALSE
+Greece,8,118278,FALSE
+Greece,17,26370,FALSE
+Greece,105,29187,FALSE
+Greece,120,88188,FALSE
+Greece,161,8730.264786,TRUE
+Greece,169,109294,FALSE
+Greece,179,203179,FALSE
+Greece,180,20067,FALSE
+Greece,203,26414,FALSE
+Greece,205,352870,FALSE
+Greece,208,215832,FALSE
+Greece,219,191546,FALSE
+Greece,221,140849,FALSE
+Greece,229,16381,FALSE
+Greece,231,79809,FALSE
+Greece,235,237800,FALSE
+Greece,254,77299,FALSE
+Greece,84,41864,FALSE
+Greece,267,7816,FALSE
+Greece,282,615049,FALSE
+Greece,286,760050.6713,TRUE
+Greece,289,28238,FALSE
+Greece,316,15251,FALSE
+Greece,317,392101,FALSE
+Greece,318,27707,FALSE
+Greece,18,20067,FALSE
+Greece,19,91165,FALSE
+Greece,33,16592,FALSE
+Greece,40,214777,FALSE
+Greece,49,329596,FALSE
+Greece,54,164670,FALSE
+Greece,58,52535,FALSE
+Greece,59,34705,FALSE
+Greece,63,44212,FALSE
+Greece,90,737188,FALSE
+Greece,94,61002.28577,TRUE
+Greece,101,247774,FALSE
+Greece,112,70646,FALSE
+Greece,138,17125.18189,TRUE
+Greece,152,160018,FALSE
+Greece,154,110030,FALSE
+Greece,158,117565,FALSE
+Greece,200,17032,FALSE
+Greece,202,85300.04797,TRUE
+Greece,206,2367512,FALSE
+Greece,218,53005,FALSE
+Greece,238,1157,FALSE
+Greece,243,223997,FALSE
+Greece,259,21630,FALSE
+Greece,276,31112,FALSE
+Greece,279,96484,FALSE
+Greece,298,182091,FALSE
+Greece,305,14718,FALSE
+Greece,306,578840,FALSE
+Greece,11,87029,FALSE
+Greece,16,439841,FALSE
+Greece,48,38576,FALSE
+Greece,60,12236,FALSE
+Greece,63,44212,FALSE
+Greece,121,169482,FALSE
+Greece,128,35597,FALSE
+Greece,156,11590,FALSE
+Greece,217,58980,FALSE
+Greece,248,19136,FALSE
+Greece,270,23321,FALSE
+Greece,52,72720.10141,TRUE
+Greece,74,4541.36112,TRUE
+Greece,75,47178.96176,TRUE
+Greece,80,371746,FALSE
+Greece,301,113987.8459,TRUE
+Greece,319,89190.44102,TRUE
+Greece,51,26504.47085,TRUE
+Greece,53,6581.96824,TRUE
+Greece,77,5993.147024,TRUE
+Greece,213,124295.9159,TRUE
+Greece,228,133880.2683,TRUE
+Greece,269,15171.62496,TRUE
+Greece,296,201398,FALSE
+Greece,175,70802.39066,TRUE
+Greece,12,47897,FALSE
+Greece,13,83424,FALSE
+Greece,108,12577.92841,TRUE
+Greece,165,14447,FALSE
+Greece,215,105585.0293,TRUE
+Greece,261,8946.089355,TRUE
+Greece,281,345345,FALSE
+Greece,302,27087.34387,TRUE
+Greece,310,36133,TRUE
+Greece,106,25843,FALSE
+Greece,30,62885.73079,TRUE
+Greece,91,126485.3041,TRUE
+Greece,192,3428254,FALSE
+Greece,249,70032.42373,TRUE
+Greece,308,24081,FALSE
+Greece,116,98484.54468,TRUE
+Greece,234,8162.890747,TRUE
+Greece,88,138218.959,TRUE
+Greece,227,9358.848173,TRUE
+Greece,8,118278,FALSE
+Greece,115,186672.4488,TRUE
+Greece,146,28645.96233,TRUE
+Greece,257,14862.84549,TRUE
+Greece,39,10075.63454,TRUE
+Greece,61,218943.5096,TRUE
+Greece,76,100326.9844,TRUE
+Greece,268,27005.25,TRUE
+Greece,194,9390.783666,TRUE
+Greece,198,5299.135169,TRUE
+Greece,245,11957.75,TRUE
+Greece,86,15341.61704,TRUE
+Greece,247,27947.125,TRUE
+Greece,15,5922.875,TRUE
+Greece,135,5719.346191,TRUE
+Greece,65,4252.65625,TRUE
+Greece,70,8796.273438,TRUE
+Greece,314,4472.643433,TRUE
+Greece,133,6124.625,TRUE
+Greece,240,4373.4375,TRUE
+Greece,148,23186,TRUE
+Greece,31,5157,TRUE
+Grenada,4,20977.52128,TRUE
+Grenada,5,7484.490489,TRUE
+Grenada,7,43390,FALSE
+Grenada,8,47030.54376,TRUE
+Grenada,17,33099.94094,TRUE
+Grenada,105,149702.6633,TRUE
+Grenada,120,115713.1489,TRUE
+Grenada,161,8730.264786,TRUE
+Grenada,169,10067,FALSE
+Grenada,179,163854,FALSE
+Grenada,180,7520.279265,TRUE
+Grenada,203,26179.47154,TRUE
+Grenada,205,158255.8483,TRUE
+Grenada,208,62208,FALSE
+Grenada,219,80605.62094,TRUE
+Grenada,221,53059.48552,TRUE
+Grenada,229,16244.65912,TRUE
+Grenada,231,35983,FALSE
+Grenada,235,172280.9273,TRUE
+Grenada,254,26952.37295,TRUE
+Grenada,84,3177,FALSE
+Grenada,267,9372.487582,TRUE
+Grenada,282,423220.8453,TRUE
+Grenada,286,448223,FALSE
+Grenada,289,9979.922823,TRUE
+Grenada,316,72255.87156,TRUE
+Grenada,317,120925,FALSE
+Grenada,318,32261.2753,TRUE
+Grenada,18,12589,FALSE
+Grenada,19,77366.60983,TRUE
+Grenada,33,30270.38924,TRUE
+Grenada,40,100399,FALSE
+Grenada,49,62689,FALSE
+Grenada,54,57493,FALSE
+Grenada,58,74040.89691,TRUE
+Grenada,59,22326.21725,TRUE
+Grenada,63,60000,FALSE
+Grenada,90,97251,FALSE
+Grenada,94,61002.28577,TRUE
+Grenada,101,138512.4356,TRUE
+Grenada,112,122104.9439,TRUE
+Grenada,138,17125.18189,TRUE
+Grenada,152,119704.6269,TRUE
+Grenada,154,158445,FALSE
+Grenada,158,76989,FALSE
+Grenada,200,22918.25267,TRUE
+Grenada,202,85300.04797,TRUE
+Grenada,206,183393.7134,TRUE
+Grenada,218,52990.31222,TRUE
+Grenada,238,129309,FALSE
+Grenada,243,112174.5654,TRUE
+Grenada,259,55616.6005,TRUE
+Grenada,276,10950.60863,TRUE
+Grenada,279,177754.1672,TRUE
+Grenada,298,120463.1286,TRUE
+Grenada,305,15590.0347,TRUE
+Grenada,306,74326,FALSE
+Grenada,11,178064.2799,TRUE
+Grenada,16,33718,FALSE
+Grenada,48,27222.34375,TRUE
+Grenada,60,22383.25858,TRUE
+Grenada,63,60000,FALSE
+Grenada,121,115406,FALSE
+Grenada,128,9353.124815,TRUE
+Grenada,156,10200.29705,TRUE
+Grenada,217,21196.4891,TRUE
+Grenada,248,14225.32829,TRUE
+Grenada,270,9151.63574,TRUE
+Grenada,52,83802,FALSE
+Grenada,74,6399,FALSE
+Grenada,75,36677,FALSE
+Grenada,80,49992.57574,TRUE
+Grenada,301,113987.8459,TRUE
+Grenada,319,19424,FALSE
+Grenada,51,26504.47085,TRUE
+Grenada,53,6581.96824,TRUE
+Grenada,77,5993.147024,TRUE
+Grenada,213,124295.9159,TRUE
+Grenada,228,125688,FALSE
+Grenada,269,15171.62496,TRUE
+Grenada,296,27980,FALSE
+Grenada,175,74318,FALSE
+Grenada,12,36715.19395,TRUE
+Grenada,13,58304,FALSE
+Grenada,108,12577.92841,TRUE
+Grenada,165,14797.07017,TRUE
+Grenada,215,105585.0293,TRUE
+Grenada,261,8946.089355,TRUE
+Grenada,281,136069.2843,TRUE
+Grenada,302,27087.34387,TRUE
+Grenada,310,36133,TRUE
+Grenada,106,13595.99028,TRUE
+Grenada,30,62885.73079,TRUE
+Grenada,91,126485.3041,TRUE
+Grenada,192,3780098.195,TRUE
+Grenada,249,70032.42373,TRUE
+Grenada,308,35296.76443,TRUE
+Grenada,116,98484.54468,TRUE
+Grenada,234,8162.890747,TRUE
+Grenada,88,138218.959,TRUE
+Grenada,227,9942,FALSE
+Grenada,8,21599.0332,TRUE
+Grenada,115,186672.4488,TRUE
+Grenada,146,28645.96233,TRUE
+Grenada,257,14862.84549,TRUE
+Grenada,39,10075.63454,TRUE
+Grenada,61,218943.5096,TRUE
+Grenada,76,100326.9844,TRUE
+Grenada,268,27005.25,TRUE
+Grenada,194,9390.783666,TRUE
+Grenada,198,4619,FALSE
+Grenada,245,11957.75,TRUE
+Grenada,86,15341.61704,TRUE
+Grenada,247,27947.125,TRUE
+Grenada,15,5922.875,TRUE
+Grenada,135,5719.346191,TRUE
+Grenada,65,4252.65625,TRUE
+Grenada,70,8796.273438,TRUE
+Grenada,314,4472.643433,TRUE
+Grenada,133,6124.625,TRUE
+Grenada,240,4373.4375,TRUE
+Grenada,148,23186,TRUE
+Grenada,31,5157,TRUE
+Guadeloupe,4,20977.52128,TRUE
+Guadeloupe,5,7484.490489,TRUE
+Guadeloupe,7,111437.9893,TRUE
+Guadeloupe,8,47030.54376,TRUE
+Guadeloupe,17,33099.94094,TRUE
+Guadeloupe,105,149702.6633,TRUE
+Guadeloupe,120,115713.1489,TRUE
+Guadeloupe,161,8730.264786,TRUE
+Guadeloupe,169,16777.49735,TRUE
+Guadeloupe,179,148384,FALSE
+Guadeloupe,180,7520.279265,TRUE
+Guadeloupe,203,26179.47154,TRUE
+Guadeloupe,205,61637,FALSE
+Guadeloupe,208,198246,FALSE
+Guadeloupe,219,80605.62094,TRUE
+Guadeloupe,221,53059.48552,TRUE
+Guadeloupe,229,16244.65912,TRUE
+Guadeloupe,231,60255.26389,TRUE
+Guadeloupe,235,172280.9273,TRUE
+Guadeloupe,254,26952.37295,TRUE
+Guadeloupe,84,9355.713607,TRUE
+Guadeloupe,267,9372.487582,TRUE
+Guadeloupe,282,423220.8453,TRUE
+Guadeloupe,286,638290,FALSE
+Guadeloupe,289,9979.922823,TRUE
+Guadeloupe,316,72255.87156,TRUE
+Guadeloupe,317,151419,FALSE
+Guadeloupe,318,32261.2753,TRUE
+Guadeloupe,18,11273.75269,TRUE
+Guadeloupe,19,122690,FALSE
+Guadeloupe,33,30270.38924,TRUE
+Guadeloupe,40,88458,FALSE
+Guadeloupe,49,131619,FALSE
+Guadeloupe,54,175365.1249,TRUE
+Guadeloupe,58,74040.89691,TRUE
+Guadeloupe,59,22326.21725,TRUE
+Guadeloupe,63,128818,FALSE
+Guadeloupe,90,102654,FALSE
+Guadeloupe,94,61002.28577,TRUE
+Guadeloupe,101,83372,FALSE
+Guadeloupe,112,122104.9439,TRUE
+Guadeloupe,138,17125.18189,TRUE
+Guadeloupe,152,119704.6269,TRUE
+Guadeloupe,154,42719,FALSE
+Guadeloupe,158,105847,FALSE
+Guadeloupe,200,22918.25267,TRUE
+Guadeloupe,202,85300.04797,TRUE
+Guadeloupe,206,183393.7134,TRUE
+Guadeloupe,218,52990.31222,TRUE
+Guadeloupe,238,89760,FALSE
+Guadeloupe,243,112174.5654,TRUE
+Guadeloupe,259,55616.6005,TRUE
+Guadeloupe,276,10950.60863,TRUE
+Guadeloupe,279,177754.1672,TRUE
+Guadeloupe,298,47056,FALSE
+Guadeloupe,305,15590.0347,TRUE
+Guadeloupe,306,141681,FALSE
+Guadeloupe,11,178064.2799,TRUE
+Guadeloupe,16,214459,FALSE
+Guadeloupe,48,27222.34375,TRUE
+Guadeloupe,60,22383.25858,TRUE
+Guadeloupe,63,128818,FALSE
+Guadeloupe,121,115643,FALSE
+Guadeloupe,128,9353.124815,TRUE
+Guadeloupe,156,10200.29705,TRUE
+Guadeloupe,217,21196.4891,TRUE
+Guadeloupe,248,14225.32829,TRUE
+Guadeloupe,270,9151.63574,TRUE
+Guadeloupe,52,155927,FALSE
+Guadeloupe,74,1200,FALSE
+Guadeloupe,75,30496,FALSE
+Guadeloupe,80,49992.57574,TRUE
+Guadeloupe,301,113987.8459,TRUE
+Guadeloupe,319,142886,FALSE
+Guadeloupe,51,26504.47085,TRUE
+Guadeloupe,53,6581.96824,TRUE
+Guadeloupe,77,9635,FALSE
+Guadeloupe,213,124295.9159,TRUE
+Guadeloupe,228,212888,FALSE
+Guadeloupe,269,15171.62496,TRUE
+Guadeloupe,296,133094,FALSE
+Guadeloupe,175,299036,FALSE
+Guadeloupe,12,36715.19395,TRUE
+Guadeloupe,13,105028,FALSE
+Guadeloupe,108,12577.92841,TRUE
+Guadeloupe,165,14797.07017,TRUE
+Guadeloupe,215,105585.0293,TRUE
+Guadeloupe,261,8946.089355,TRUE
+Guadeloupe,281,136069.2843,TRUE
+Guadeloupe,302,27087.34387,TRUE
+Guadeloupe,310,36133,TRUE
+Guadeloupe,106,13595.99028,TRUE
+Guadeloupe,30,62885.73079,TRUE
+Guadeloupe,91,126485.3041,TRUE
+Guadeloupe,192,3780098.195,TRUE
+Guadeloupe,249,70032.42373,TRUE
+Guadeloupe,308,35296.76443,TRUE
+Guadeloupe,116,98484.54468,TRUE
+Guadeloupe,234,8162.890747,TRUE
+Guadeloupe,88,138218.959,TRUE
+Guadeloupe,227,9358.848173,TRUE
+Guadeloupe,8,21599.0332,TRUE
+Guadeloupe,115,186672.4488,TRUE
+Guadeloupe,146,28645.96233,TRUE
+Guadeloupe,257,14862.84549,TRUE
+Guadeloupe,39,10075.63454,TRUE
+Guadeloupe,61,218943.5096,TRUE
+Guadeloupe,76,100326.9844,TRUE
+Guadeloupe,268,27005.25,TRUE
+Guadeloupe,194,9390.783666,TRUE
+Guadeloupe,198,5299.135169,TRUE
+Guadeloupe,245,11957.75,TRUE
+Guadeloupe,86,15341.61704,TRUE
+Guadeloupe,247,27947.125,TRUE
+Guadeloupe,15,5922.875,TRUE
+Guadeloupe,135,5719.346191,TRUE
+Guadeloupe,65,4252.65625,TRUE
+Guadeloupe,70,8796.273438,TRUE
+Guadeloupe,314,2726,FALSE
+Guadeloupe,133,6124.625,TRUE
+Guadeloupe,240,4373.4375,TRUE
+Guadeloupe,148,23186,TRUE
+Guadeloupe,31,5157,TRUE
+Guam,4,20977.52128,TRUE
+Guam,5,7484.490489,TRUE
+Guam,7,111437.9893,TRUE
+Guam,8,47030.54376,TRUE
+Guam,17,33099.94094,TRUE
+Guam,105,149702.6633,TRUE
+Guam,120,115713.1489,TRUE
+Guam,161,8730.264786,TRUE
+Guam,169,26217,FALSE
+Guam,179,121608.9919,TRUE
+Guam,180,7520.279265,TRUE
+Guam,203,26179.47154,TRUE
+Guam,205,20457,FALSE
+Guam,208,84004.18102,TRUE
+Guam,219,80605.62094,TRUE
+Guam,221,53059.48552,TRUE
+Guam,229,16244.65912,TRUE
+Guam,231,60255.26389,TRUE
+Guam,235,172280.9273,TRUE
+Guam,254,26952.37295,TRUE
+Guam,84,9355.713607,TRUE
+Guam,267,9372.487582,TRUE
+Guam,282,423220.8453,TRUE
+Guam,286,760050.6713,TRUE
+Guam,289,9979.922823,TRUE
+Guam,316,72255.87156,TRUE
+Guam,317,188762.6372,TRUE
+Guam,318,32261.2753,TRUE
+Guam,18,11273.75269,TRUE
+Guam,19,77366.60983,TRUE
+Guam,33,30270.38924,TRUE
+Guam,40,180987.6885,TRUE
+Guam,49,247408.5214,TRUE
+Guam,54,175365.1249,TRUE
+Guam,58,74040.89691,TRUE
+Guam,59,22326.21725,TRUE
+Guam,63,234336.5313,TRUE
+Guam,90,261174,FALSE
+Guam,94,61002.28577,TRUE
+Guam,101,138512.4356,TRUE
+Guam,112,122104.9439,TRUE
+Guam,138,17125.18189,TRUE
+Guam,152,119704.6269,TRUE
+Guam,154,96782.90416,TRUE
+Guam,158,96473.15601,TRUE
+Guam,200,22918.25267,TRUE
+Guam,202,85300.04797,TRUE
+Guam,206,183393.7134,TRUE
+Guam,218,52990.31222,TRUE
+Guam,238,116960.1876,TRUE
+Guam,243,112174.5654,TRUE
+Guam,259,55616.6005,TRUE
+Guam,276,10950.60863,TRUE
+Guam,279,177754.1672,TRUE
+Guam,298,120463.1286,TRUE
+Guam,305,15590.0347,TRUE
+Guam,306,129516,FALSE
+Guam,11,178064.2799,TRUE
+Guam,16,232241,FALSE
+Guam,48,27222.34375,TRUE
+Guam,60,22383.25858,TRUE
+Guam,63,11715.28525,TRUE
+Guam,121,115777.4722,TRUE
+Guam,128,9353.124815,TRUE
+Guam,156,10200.29705,TRUE
+Guam,217,21196.4891,TRUE
+Guam,248,14225.32829,TRUE
+Guam,270,9151.63574,TRUE
+Guam,52,72720.10141,TRUE
+Guam,74,4541.36112,TRUE
+Guam,75,46776,FALSE
+Guam,80,49992.57574,TRUE
+Guam,301,113987.8459,TRUE
+Guam,319,89190.44102,TRUE
+Guam,51,26504.47085,TRUE
+Guam,53,6581.96824,TRUE
+Guam,77,5993.147024,TRUE
+Guam,213,124295.9159,TRUE
+Guam,228,133880.2683,TRUE
+Guam,269,15171.62496,TRUE
+Guam,296,62026,FALSE
+Guam,175,70802.39066,TRUE
+Guam,12,36715.19395,TRUE
+Guam,13,74728.86082,TRUE
+Guam,108,12577.92841,TRUE
+Guam,165,14797.07017,TRUE
+Guam,215,105585.0293,TRUE
+Guam,261,8946.089355,TRUE
+Guam,281,136069.2843,TRUE
+Guam,302,27087.34387,TRUE
+Guam,310,36133,TRUE
+Guam,106,13595.99028,TRUE
+Guam,30,62885.73079,TRUE
+Guam,91,126485.3041,TRUE
+Guam,192,3780098.195,TRUE
+Guam,249,70032.42373,TRUE
+Guam,308,35296.76443,TRUE
+Guam,116,98484.54468,TRUE
+Guam,234,8162.890747,TRUE
+Guam,88,138218.959,TRUE
+Guam,227,9358.848173,TRUE
+Guam,8,21599.0332,TRUE
+Guam,115,186672.4488,TRUE
+Guam,146,28645.96233,TRUE
+Guam,257,14862.84549,TRUE
+Guam,39,10075.63454,TRUE
+Guam,61,218943.5096,TRUE
+Guam,76,100326.9844,TRUE
+Guam,268,27005.25,TRUE
+Guam,194,9390.783666,TRUE
+Guam,198,5299.135169,TRUE
+Guam,245,11957.75,TRUE
+Guam,86,15341.61704,TRUE
+Guam,247,27947.125,TRUE
+Guam,15,5922.875,TRUE
+Guam,135,5719.346191,TRUE
+Guam,65,4252.65625,TRUE
+Guam,70,8796.273438,TRUE
+Guam,314,4472.643433,TRUE
+Guam,133,6124.625,TRUE
+Guam,240,4373.4375,TRUE
+Guam,148,23186,TRUE
+Guam,31,5157,TRUE
+Guatemala,4,20977.52128,TRUE
+Guatemala,5,20320,FALSE
+Guatemala,7,45137,FALSE
+Guatemala,8,47030.54376,TRUE
+Guatemala,17,21634,FALSE
+Guatemala,105,149702.6633,TRUE
+Guatemala,120,74510,FALSE
+Guatemala,161,8730.264786,TRUE
+Guatemala,169,21522,FALSE
+Guatemala,179,247901,FALSE
+Guatemala,180,7520.279265,TRUE
+Guatemala,203,26179.47154,TRUE
+Guatemala,205,304765,FALSE
+Guatemala,208,346973,FALSE
+Guatemala,219,154883,FALSE
+Guatemala,221,53059.48552,TRUE
+Guatemala,229,16244.65912,TRUE
+Guatemala,231,60255.26389,TRUE
+Guatemala,235,256849,FALSE
+Guatemala,254,29807,FALSE
+Guatemala,84,27767,FALSE
+Guatemala,267,13495,FALSE
+Guatemala,282,423220.8453,TRUE
+Guatemala,286,1290493,FALSE
+Guatemala,289,9979.922823,TRUE
+Guatemala,316,72255.87156,TRUE
+Guatemala,317,411587,FALSE
+Guatemala,318,21288,FALSE
+Guatemala,18,9790,FALSE
+Guatemala,19,106359,FALSE
+Guatemala,33,12545,FALSE
+Guatemala,40,302512,FALSE
+Guatemala,49,306711,FALSE
+Guatemala,54,163027,FALSE
+Guatemala,58,74040.89691,TRUE
+Guatemala,59,22326.21725,TRUE
+Guatemala,63,246122,FALSE
+Guatemala,90,194487.8189,TRUE
+Guatemala,94,61002.28577,TRUE
+Guatemala,101,138512.4356,TRUE
+Guatemala,112,93052,FALSE
+Guatemala,138,17125.18189,TRUE
+Guatemala,152,119704.6269,TRUE
+Guatemala,154,223380,FALSE
+Guatemala,158,305052,FALSE
+Guatemala,200,22918.25267,TRUE
+Guatemala,202,62323,FALSE
+Guatemala,206,183393.7134,TRUE
+Guatemala,218,81054,FALSE
+Guatemala,238,116960.1876,TRUE
+Guatemala,243,112174.5654,TRUE
+Guatemala,259,55616.6005,TRUE
+Guatemala,276,25333,FALSE
+Guatemala,279,177754.1672,TRUE
+Guatemala,298,120463.1286,TRUE
+Guatemala,305,21278,FALSE
+Guatemala,306,384731,FALSE
+Guatemala,11,178064.2799,TRUE
+Guatemala,16,482716,FALSE
+Guatemala,48,27222.34375,TRUE
+Guatemala,60,22383.25858,TRUE
+Guatemala,63,246122,FALSE
+Guatemala,121,115777.4722,TRUE
+Guatemala,128,49168,FALSE
+Guatemala,156,10200.29705,TRUE
+Guatemala,217,21196.4891,TRUE
+Guatemala,248,14225.32829,TRUE
+Guatemala,270,18287,FALSE
+Guatemala,52,12390,FALSE
+Guatemala,74,26693,FALSE
+Guatemala,75,58948,FALSE
+Guatemala,80,49992.57574,TRUE
+Guatemala,301,113987.8459,TRUE
+Guatemala,319,89190.44102,TRUE
+Guatemala,51,26504.47085,TRUE
+Guatemala,53,6581.96824,TRUE
+Guatemala,77,8613,FALSE
+Guatemala,213,147088,FALSE
+Guatemala,228,273993,FALSE
+Guatemala,269,15171.62496,TRUE
+Guatemala,296,63552,FALSE
+Guatemala,175,128094,FALSE
+Guatemala,12,36715.19395,TRUE
+Guatemala,13,105316,FALSE
+Guatemala,108,12577.92841,TRUE
+Guatemala,165,14797.07017,TRUE
+Guatemala,215,315096,FALSE
+Guatemala,261,8946.089355,TRUE
+Guatemala,281,211189,FALSE
+Guatemala,302,4696,FALSE
+Guatemala,310,36133,TRUE
+Guatemala,106,13595.99028,TRUE
+Guatemala,30,62885.73079,TRUE
+Guatemala,91,126485.3041,TRUE
+Guatemala,192,3780098.195,TRUE
+Guatemala,249,70032.42373,TRUE
+Guatemala,308,35296.76443,TRUE
+Guatemala,116,98484.54468,TRUE
+Guatemala,234,8162.890747,TRUE
+Guatemala,88,138218.959,TRUE
+Guatemala,227,9358.848173,TRUE
+Guatemala,8,21599.0332,TRUE
+Guatemala,115,186672.4488,TRUE
+Guatemala,146,28645.96233,TRUE
+Guatemala,257,33225,FALSE
+Guatemala,39,10075.63454,TRUE
+Guatemala,61,218943.5096,TRUE
+Guatemala,76,100326.9844,TRUE
+Guatemala,268,27005.25,TRUE
+Guatemala,194,9390.783666,TRUE
+Guatemala,198,4816,FALSE
+Guatemala,245,11957.75,TRUE
+Guatemala,86,15341.61704,TRUE
+Guatemala,247,27947.125,TRUE
+Guatemala,15,5922.875,TRUE
+Guatemala,135,5719.346191,TRUE
+Guatemala,65,4252.65625,TRUE
+Guatemala,70,8796.273438,TRUE
+Guatemala,314,4472.643433,TRUE
+Guatemala,133,6124.625,TRUE
+Guatemala,240,4373.4375,TRUE
+Guatemala,148,23186,TRUE
+Guatemala,31,5157,TRUE
+Guinea,4,20977.52128,TRUE
+Guinea,5,7484.490489,TRUE
+Guinea,7,111437.9893,TRUE
+Guinea,8,47030.54376,TRUE
+Guinea,17,33099.94094,TRUE
+Guinea,105,149702.6633,TRUE
+Guinea,120,115713.1489,TRUE
+Guinea,161,8730.264786,TRUE
+Guinea,169,13610,FALSE
+Guinea,179,100930,FALSE
+Guinea,180,10283,FALSE
+Guinea,203,26179.47154,TRUE
+Guinea,205,158255.8483,TRUE
+Guinea,208,84004.18102,TRUE
+Guinea,219,80605.62094,TRUE
+Guinea,221,53059.48552,TRUE
+Guinea,229,16244.65912,TRUE
+Guinea,231,60255.26389,TRUE
+Guinea,235,64617,FALSE
+Guinea,254,11769,FALSE
+Guinea,84,9697,FALSE
+Guinea,267,2066,FALSE
+Guinea,282,423220.8453,TRUE
+Guinea,286,536684,FALSE
+Guinea,289,9979.922823,TRUE
+Guinea,316,72255.87156,TRUE
+Guinea,317,188762.6372,TRUE
+Guinea,318,32261.2753,TRUE
+Guinea,18,11273.75269,TRUE
+Guinea,19,77366.60983,TRUE
+Guinea,33,30270.38924,TRUE
+Guinea,40,180987.6885,TRUE
+Guinea,49,247408.5214,TRUE
+Guinea,54,175365.1249,TRUE
+Guinea,58,74040.89691,TRUE
+Guinea,59,22326.21725,TRUE
+Guinea,63,234336.5313,TRUE
+Guinea,90,194487.8189,TRUE
+Guinea,94,61002.28577,TRUE
+Guinea,101,138512.4356,TRUE
+Guinea,112,122104.9439,TRUE
+Guinea,138,17125.18189,TRUE
+Guinea,152,119704.6269,TRUE
+Guinea,154,96782.90416,TRUE
+Guinea,158,96473.15601,TRUE
+Guinea,200,22918.25267,TRUE
+Guinea,202,85300.04797,TRUE
+Guinea,206,183393.7134,TRUE
+Guinea,218,52990.31222,TRUE
+Guinea,238,116960.1876,TRUE
+Guinea,243,112174.5654,TRUE
+Guinea,259,55616.6005,TRUE
+Guinea,276,10950.60863,TRUE
+Guinea,279,177754.1672,TRUE
+Guinea,298,120463.1286,TRUE
+Guinea,305,11932,FALSE
+Guinea,306,131681.4608,TRUE
+Guinea,11,178064.2799,TRUE
+Guinea,16,46828,FALSE
+Guinea,48,27222.34375,TRUE
+Guinea,60,22383.25858,TRUE
+Guinea,63,11715.28525,TRUE
+Guinea,121,115777.4722,TRUE
+Guinea,128,13853,FALSE
+Guinea,156,10200.29705,TRUE
+Guinea,217,21196.4891,TRUE
+Guinea,248,14225.32829,TRUE
+Guinea,270,9386,FALSE
+Guinea,52,79104,FALSE
+Guinea,74,5555,FALSE
+Guinea,75,38538,FALSE
+Guinea,80,23321,FALSE
+Guinea,301,63304,FALSE
+Guinea,319,104242,FALSE
+Guinea,51,11207,FALSE
+Guinea,53,6581.96824,TRUE
+Guinea,77,4569,FALSE
+Guinea,213,26727,FALSE
+Guinea,228,42048,FALSE
+Guinea,269,981,FALSE
+Guinea,296,34032,FALSE
+Guinea,175,20031,FALSE
+Guinea,12,36715.19395,TRUE
+Guinea,13,74728.86082,TRUE
+Guinea,108,12577.92841,TRUE
+Guinea,165,14797.07017,TRUE
+Guinea,215,105585.0293,TRUE
+Guinea,261,8946.089355,TRUE
+Guinea,281,136069.2843,TRUE
+Guinea,302,27087.34387,TRUE
+Guinea,310,36133,TRUE
+Guinea,106,13595.99028,TRUE
+Guinea,30,62885.73079,TRUE
+Guinea,91,126485.3041,TRUE
+Guinea,192,3780098.195,TRUE
+Guinea,249,70032.42373,TRUE
+Guinea,308,35296.76443,TRUE
+Guinea,116,98484.54468,TRUE
+Guinea,234,8162.890747,TRUE
+Guinea,88,138218.959,TRUE
+Guinea,227,9358.848173,TRUE
+Guinea,8,21599.0332,TRUE
+Guinea,115,186672.4488,TRUE
+Guinea,146,28645.96233,TRUE
+Guinea,257,13248,FALSE
+Guinea,39,10075.63454,TRUE
+Guinea,61,218943.5096,TRUE
+Guinea,76,100326.9844,TRUE
+Guinea,268,27005.25,TRUE
+Guinea,194,9390.783666,TRUE
+Guinea,198,5299.135169,TRUE
+Guinea,245,11957.75,TRUE
+Guinea,86,15341.61704,TRUE
+Guinea,247,27947.125,TRUE
+Guinea,15,5922.875,TRUE
+Guinea,135,5719.346191,TRUE
+Guinea,65,4252.65625,TRUE
+Guinea,70,8796.273438,TRUE
+Guinea,314,4472.643433,TRUE
+Guinea,133,6124.625,TRUE
+Guinea,240,4373.4375,TRUE
+Guinea,148,23186,TRUE
+Guinea,31,5157,TRUE
+Guinea-Bissau,4,20977.52128,TRUE
+Guinea-Bissau,5,7484.490489,TRUE
+Guinea-Bissau,7,111437.9893,TRUE
+Guinea-Bissau,8,47030.54376,TRUE
+Guinea-Bissau,17,33099.94094,TRUE
+Guinea-Bissau,105,149702.6633,TRUE
+Guinea-Bissau,120,115713.1489,TRUE
+Guinea-Bissau,161,8730.264786,TRUE
+Guinea-Bissau,169,5720,FALSE
+Guinea-Bissau,179,121608.9919,TRUE
+Guinea-Bissau,180,13821,FALSE
+Guinea-Bissau,203,26179.47154,TRUE
+Guinea-Bissau,205,158255.8483,TRUE
+Guinea-Bissau,208,50143,FALSE
+Guinea-Bissau,219,80605.62094,TRUE
+Guinea-Bissau,221,53059.48552,TRUE
+Guinea-Bissau,229,16244.65912,TRUE
+Guinea-Bissau,231,60255.26389,TRUE
+Guinea-Bissau,235,172280.9273,TRUE
+Guinea-Bissau,254,16255,FALSE
+Guinea-Bissau,84,11346,FALSE
+Guinea-Bissau,267,9372.487582,TRUE
+Guinea-Bissau,282,423220.8453,TRUE
+Guinea-Bissau,286,264988,FALSE
+Guinea-Bissau,289,9979.922823,TRUE
+Guinea-Bissau,316,72255.87156,TRUE
+Guinea-Bissau,317,188762.6372,TRUE
+Guinea-Bissau,318,32261.2753,TRUE
+Guinea-Bissau,18,11273.75269,TRUE
+Guinea-Bissau,19,77366.60983,TRUE
+Guinea-Bissau,33,30270.38924,TRUE
+Guinea-Bissau,40,180987.6885,TRUE
+Guinea-Bissau,49,247408.5214,TRUE
+Guinea-Bissau,54,175365.1249,TRUE
+Guinea-Bissau,58,74040.89691,TRUE
+Guinea-Bissau,59,22326.21725,TRUE
+Guinea-Bissau,63,234336.5313,TRUE
+Guinea-Bissau,90,194487.8189,TRUE
+Guinea-Bissau,94,61002.28577,TRUE
+Guinea-Bissau,101,138512.4356,TRUE
+Guinea-Bissau,112,122104.9439,TRUE
+Guinea-Bissau,138,17125.18189,TRUE
+Guinea-Bissau,152,119704.6269,TRUE
+Guinea-Bissau,154,61003,FALSE
+Guinea-Bissau,158,96473.15601,TRUE
+Guinea-Bissau,200,22918.25267,TRUE
+Guinea-Bissau,202,85300.04797,TRUE
+Guinea-Bissau,206,183393.7134,TRUE
+Guinea-Bissau,218,52990.31222,TRUE
+Guinea-Bissau,238,116960.1876,TRUE
+Guinea-Bissau,243,112174.5654,TRUE
+Guinea-Bissau,259,55616.6005,TRUE
+Guinea-Bissau,276,10950.60863,TRUE
+Guinea-Bissau,279,177754.1672,TRUE
+Guinea-Bissau,298,120463.1286,TRUE
+Guinea-Bissau,305,15590.0347,TRUE
+Guinea-Bissau,306,131681.4608,TRUE
+Guinea-Bissau,11,178064.2799,TRUE
+Guinea-Bissau,16,111374,FALSE
+Guinea-Bissau,48,27222.34375,TRUE
+Guinea-Bissau,60,22383.25858,TRUE
+Guinea-Bissau,63,11715.28525,TRUE
+Guinea-Bissau,121,115777.4722,TRUE
+Guinea-Bissau,128,11540,FALSE
+Guinea-Bissau,156,10200.29705,TRUE
+Guinea-Bissau,217,21196.4891,TRUE
+Guinea-Bissau,248,14225.32829,TRUE
+Guinea-Bissau,270,9438,FALSE
+Guinea-Bissau,52,89426,FALSE
+Guinea-Bissau,74,4541.36112,TRUE
+Guinea-Bissau,75,37455,FALSE
+Guinea-Bissau,80,49992.57574,TRUE
+Guinea-Bissau,301,113987.8459,TRUE
+Guinea-Bissau,319,89190.44102,TRUE
+Guinea-Bissau,51,5542,FALSE
+Guinea-Bissau,53,6581.96824,TRUE
+Guinea-Bissau,77,5993.147024,TRUE
+Guinea-Bissau,213,84532,FALSE
+Guinea-Bissau,228,36936,FALSE
+Guinea-Bissau,269,15171.62496,TRUE
+Guinea-Bissau,296,43692.55808,TRUE
+Guinea-Bissau,175,91523,FALSE
+Guinea-Bissau,12,36715.19395,TRUE
+Guinea-Bissau,13,74728.86082,TRUE
+Guinea-Bissau,108,12577.92841,TRUE
+Guinea-Bissau,165,14797.07017,TRUE
+Guinea-Bissau,215,96433,FALSE
+Guinea-Bissau,261,8946.089355,TRUE
+Guinea-Bissau,281,136069.2843,TRUE
+Guinea-Bissau,302,27087.34387,TRUE
+Guinea-Bissau,310,36133,TRUE
+Guinea-Bissau,106,13595.99028,TRUE
+Guinea-Bissau,30,62885.73079,TRUE
+Guinea-Bissau,91,126485.3041,TRUE
+Guinea-Bissau,192,3780098.195,TRUE
+Guinea-Bissau,249,70032.42373,TRUE
+Guinea-Bissau,308,35296.76443,TRUE
+Guinea-Bissau,116,98484.54468,TRUE
+Guinea-Bissau,234,8162.890747,TRUE
+Guinea-Bissau,88,138218.959,TRUE
+Guinea-Bissau,227,9358.848173,TRUE
+Guinea-Bissau,8,21599.0332,TRUE
+Guinea-Bissau,115,186672.4488,TRUE
+Guinea-Bissau,146,28645.96233,TRUE
+Guinea-Bissau,257,14862.84549,TRUE
+Guinea-Bissau,39,10075.63454,TRUE
+Guinea-Bissau,61,218943.5096,TRUE
+Guinea-Bissau,76,100326.9844,TRUE
+Guinea-Bissau,268,27005.25,TRUE
+Guinea-Bissau,194,9390.783666,TRUE
+Guinea-Bissau,198,5299.135169,TRUE
+Guinea-Bissau,245,11957.75,TRUE
+Guinea-Bissau,86,1523,FALSE
+Guinea-Bissau,247,27947.125,TRUE
+Guinea-Bissau,15,5922.875,TRUE
+Guinea-Bissau,135,5719.346191,TRUE
+Guinea-Bissau,65,4252.65625,TRUE
+Guinea-Bissau,70,8796.273438,TRUE
+Guinea-Bissau,314,4472.643433,TRUE
+Guinea-Bissau,133,6124.625,TRUE
+Guinea-Bissau,240,4373.4375,TRUE
+Guinea-Bissau,148,23186,TRUE
+Guinea-Bissau,31,5157,TRUE
+Guyana,4,20977.52128,TRUE
+Guyana,5,7484.490489,TRUE
+Guyana,7,111437.9893,TRUE
+Guyana,8,47030.54376,TRUE
+Guyana,17,33099.94094,TRUE
+Guyana,105,149702.6633,TRUE
+Guyana,120,115713.1489,TRUE
+Guyana,161,8730.264786,TRUE
+Guyana,169,13799,FALSE
+Guyana,179,121608.9919,TRUE
+Guyana,180,7520.279265,TRUE
+Guyana,203,26179.47154,TRUE
+Guyana,205,38476,FALSE
+Guyana,208,65012,FALSE
+Guyana,219,80605.62094,TRUE
+Guyana,221,53059.48552,TRUE
+Guyana,229,16244.65912,TRUE
+Guyana,231,60255.26389,TRUE
+Guyana,235,172280.9273,TRUE
+Guyana,254,35572,FALSE
+Guyana,84,9355.713607,TRUE
+Guyana,267,9372.487582,TRUE
+Guyana,282,423220.8453,TRUE
+Guyana,286,540397,FALSE
+Guyana,289,9979.922823,TRUE
+Guyana,316,72255.87156,TRUE
+Guyana,317,88588,FALSE
+Guyana,318,32261.2753,TRUE
+Guyana,18,11273.75269,TRUE
+Guyana,19,66038,FALSE
+Guyana,33,10809,FALSE
+Guyana,40,49613,FALSE
+Guyana,49,247408.5214,TRUE
+Guyana,54,175365.1249,TRUE
+Guyana,58,40182,FALSE
+Guyana,59,22326.21725,TRUE
+Guyana,63,54625,FALSE
+Guyana,90,82633,FALSE
+Guyana,94,61002.28577,TRUE
+Guyana,101,65222,FALSE
+Guyana,112,122104.9439,TRUE
+Guyana,138,17125.18189,TRUE
+Guyana,152,119704.6269,TRUE
+Guyana,154,46909,FALSE
+Guyana,158,96473.15601,TRUE
+Guyana,200,22918.25267,TRUE
+Guyana,202,82546,FALSE
+Guyana,206,183393.7134,TRUE
+Guyana,218,52990.31222,TRUE
+Guyana,238,90786,FALSE
+Guyana,243,112174.5654,TRUE
+Guyana,259,55616.6005,TRUE
+Guyana,276,10950.60863,TRUE
+Guyana,279,177754.1672,TRUE
+Guyana,298,120463.1286,TRUE
+Guyana,305,8336,FALSE
+Guyana,306,58564,FALSE
+Guyana,11,178064.2799,TRUE
+Guyana,16,98191,FALSE
+Guyana,48,27222.34375,TRUE
+Guyana,60,22383.25858,TRUE
+Guyana,63,54625,FALSE
+Guyana,121,37549,FALSE
+Guyana,128,6433,FALSE
+Guyana,156,10200.29705,TRUE
+Guyana,217,5903,FALSE
+Guyana,248,14225.32829,TRUE
+Guyana,270,9151.63574,TRUE
+Guyana,52,106439,FALSE
+Guyana,74,4040,FALSE
+Guyana,75,139929,FALSE
+Guyana,80,49992.57574,TRUE
+Guyana,301,481387,FALSE
+Guyana,319,58640,FALSE
+Guyana,51,26504.47085,TRUE
+Guyana,53,6581.96824,TRUE
+Guyana,77,7692,FALSE
+Guyana,213,124295.9159,TRUE
+Guyana,228,75190,FALSE
+Guyana,269,15171.62496,TRUE
+Guyana,296,38813,FALSE
+Guyana,175,169812,FALSE
+Guyana,12,36715.19395,TRUE
+Guyana,13,32773,FALSE
+Guyana,108,12577.92841,TRUE
+Guyana,165,14797.07017,TRUE
+Guyana,215,271419,FALSE
+Guyana,261,8946.089355,TRUE
+Guyana,281,136069.2843,TRUE
+Guyana,302,27087.34387,TRUE
+Guyana,310,36133,TRUE
+Guyana,106,13595.99028,TRUE
+Guyana,30,62885.73079,TRUE
+Guyana,91,126485.3041,TRUE
+Guyana,192,3780098.195,TRUE
+Guyana,249,70032.42373,TRUE
+Guyana,308,35296.76443,TRUE
+Guyana,116,98484.54468,TRUE
+Guyana,234,8162.890747,TRUE
+Guyana,88,138218.959,TRUE
+Guyana,227,9358.848173,TRUE
+Guyana,8,21599.0332,TRUE
+Guyana,115,117696,FALSE
+Guyana,146,28645.96233,TRUE
+Guyana,257,14862.84549,TRUE
+Guyana,39,10075.63454,TRUE
+Guyana,61,218943.5096,TRUE
+Guyana,76,100326.9844,TRUE
+Guyana,268,27005.25,TRUE
+Guyana,194,9390.783666,TRUE
+Guyana,198,5299.135169,TRUE
+Guyana,245,11957.75,TRUE
+Guyana,86,16666,FALSE
+Guyana,247,27947.125,TRUE
+Guyana,15,5922.875,TRUE
+Guyana,135,5719.346191,TRUE
+Guyana,65,4252.65625,TRUE
+Guyana,70,8796.273438,TRUE
+Guyana,314,4472.643433,TRUE
+Guyana,133,6124.625,TRUE
+Guyana,240,4373.4375,TRUE
+Guyana,148,23186,TRUE
+Guyana,31,5157,TRUE
+Haiti,4,20977.52128,TRUE
+Haiti,5,7484.490489,TRUE
+Haiti,7,111437.9893,TRUE
+Haiti,8,47030.54376,TRUE
+Haiti,17,33099.94094,TRUE
+Haiti,105,149702.6633,TRUE
+Haiti,120,115713.1489,TRUE
+Haiti,161,8730.264786,TRUE
+Haiti,169,8274,FALSE
+Haiti,179,132742,FALSE
+Haiti,180,7520.279265,TRUE
+Haiti,203,26179.47154,TRUE
+Haiti,205,50133,FALSE
+Haiti,208,44625,FALSE
+Haiti,219,80605.62094,TRUE
+Haiti,221,53059.48552,TRUE
+Haiti,229,16244.65912,TRUE
+Haiti,231,60255.26389,TRUE
+Haiti,235,126994,FALSE
+Haiti,254,25240,FALSE
+Haiti,84,4864,FALSE
+Haiti,267,2631,FALSE
+Haiti,282,423220.8453,TRUE
+Haiti,286,635219,FALSE
+Haiti,289,9979.922823,TRUE
+Haiti,316,72255.87156,TRUE
+Haiti,317,188762.6372,TRUE
+Haiti,318,32261.2753,TRUE
+Haiti,18,6607,FALSE
+Haiti,19,77366.60983,TRUE
+Haiti,33,30270.38924,TRUE
+Haiti,40,63428,FALSE
+Haiti,49,247408.5214,TRUE
+Haiti,54,175365.1249,TRUE
+Haiti,58,74040.89691,TRUE
+Haiti,59,22326.21725,TRUE
+Haiti,63,234336.5313,TRUE
+Haiti,90,194487.8189,TRUE
+Haiti,94,61002.28577,TRUE
+Haiti,101,109591,FALSE
+Haiti,112,263547,FALSE
+Haiti,138,17125.18189,TRUE
+Haiti,152,119704.6269,TRUE
+Haiti,154,43040,FALSE
+Haiti,158,27672,FALSE
+Haiti,200,22918.25267,TRUE
+Haiti,202,85300.04797,TRUE
+Haiti,206,183393.7134,TRUE
+Haiti,218,52990.31222,TRUE
+Haiti,238,116963,FALSE
+Haiti,243,112174.5654,TRUE
+Haiti,259,55616.6005,TRUE
+Haiti,276,10950.60863,TRUE
+Haiti,279,130506,FALSE
+Haiti,298,45821,FALSE
+Haiti,305,12626,FALSE
+Haiti,306,153348,FALSE
+Haiti,11,178064.2799,TRUE
+Haiti,16,49304,FALSE
+Haiti,48,27222.34375,TRUE
+Haiti,60,22383.25858,TRUE
+Haiti,63,11715.28525,TRUE
+Haiti,121,75231,FALSE
+Haiti,128,8810,FALSE
+Haiti,156,10200.29705,TRUE
+Haiti,217,21196.4891,TRUE
+Haiti,248,14225.32829,TRUE
+Haiti,270,8910,FALSE
+Haiti,52,44942,FALSE
+Haiti,74,4872,FALSE
+Haiti,75,29444,FALSE
+Haiti,80,49992.57574,TRUE
+Haiti,301,113987.8459,TRUE
+Haiti,319,80126,FALSE
+Haiti,51,26504.47085,TRUE
+Haiti,53,5864,FALSE
+Haiti,77,5164,FALSE
+Haiti,213,124295.9159,TRUE
+Haiti,228,121910,FALSE
+Haiti,269,5550,FALSE
+Haiti,296,55649,FALSE
+Haiti,175,76039,FALSE
+Haiti,12,36715.19395,TRUE
+Haiti,13,59113,FALSE
+Haiti,108,12577.92841,TRUE
+Haiti,165,14797.07017,TRUE
+Haiti,215,98853,FALSE
+Haiti,261,8946.089355,TRUE
+Haiti,281,136069.2843,TRUE
+Haiti,302,27087.34387,TRUE
+Haiti,310,36133,TRUE
+Haiti,106,13595.99028,TRUE
+Haiti,30,62885.73079,TRUE
+Haiti,91,126485.3041,TRUE
+Haiti,192,3780098.195,TRUE
+Haiti,249,70032.42373,TRUE
+Haiti,308,35296.76443,TRUE
+Haiti,116,98484.54468,TRUE
+Haiti,234,8162.890747,TRUE
+Haiti,88,138218.959,TRUE
+Haiti,227,8590,FALSE
+Haiti,8,21599.0332,TRUE
+Haiti,115,186672.4488,TRUE
+Haiti,146,28645.96233,TRUE
+Haiti,257,14862.84549,TRUE
+Haiti,39,10075.63454,TRUE
+Haiti,61,222224,FALSE
+Haiti,76,100326.9844,TRUE
+Haiti,268,27005.25,TRUE
+Haiti,194,9390.783666,TRUE
+Haiti,198,5299.135169,TRUE
+Haiti,245,11957.75,TRUE
+Haiti,86,7167,FALSE
+Haiti,247,27947.125,TRUE
+Haiti,15,5922.875,TRUE
+Haiti,135,5719.346191,TRUE
+Haiti,65,4252.65625,TRUE
+Haiti,70,8796.273438,TRUE
+Haiti,314,4472.643433,TRUE
+Haiti,133,6124.625,TRUE
+Haiti,240,4373.4375,TRUE
+Haiti,148,23186,TRUE
+Haiti,31,5157,TRUE
+Honduras,4,20977.52128,TRUE
+Honduras,5,7484.490489,TRUE
+Honduras,7,16516,FALSE
+Honduras,8,47030.54376,TRUE
+Honduras,17,33099.94094,TRUE
+Honduras,105,149702.6633,TRUE
+Honduras,120,47910,FALSE
+Honduras,161,8730.264786,TRUE
+Honduras,169,16931,FALSE
+Honduras,179,297234,FALSE
+Honduras,180,7520.279265,TRUE
+Honduras,203,26179.47154,TRUE
+Honduras,205,196172,FALSE
+Honduras,208,152329,FALSE
+Honduras,219,80605.62094,TRUE
+Honduras,221,53059.48552,TRUE
+Honduras,229,16244.65912,TRUE
+Honduras,231,60255.26389,TRUE
+Honduras,235,161998,FALSE
+Honduras,254,69716,FALSE
+Honduras,84,17531,FALSE
+Honduras,267,8443,FALSE
+Honduras,282,423220.8453,TRUE
+Honduras,286,828213,FALSE
+Honduras,289,9979.922823,TRUE
+Honduras,316,72255.87156,TRUE
+Honduras,317,289694,FALSE
+Honduras,318,5562,FALSE
+Honduras,18,8359,FALSE
+Honduras,19,77366.60983,TRUE
+Honduras,33,30270.38924,TRUE
+Honduras,40,336129,FALSE
+Honduras,49,116255,FALSE
+Honduras,54,78474,FALSE
+Honduras,58,74040.89691,TRUE
+Honduras,59,22326.21725,TRUE
+Honduras,63,131587,FALSE
+Honduras,90,342846,FALSE
+Honduras,94,61002.28577,TRUE
+Honduras,101,283952,FALSE
+Honduras,112,36090,FALSE
+Honduras,138,17125.18189,TRUE
+Honduras,152,119704.6269,TRUE
+Honduras,154,82010,FALSE
+Honduras,158,141639,FALSE
+Honduras,200,22918.25267,TRUE
+Honduras,202,85300.04797,TRUE
+Honduras,206,183393.7134,TRUE
+Honduras,218,52990.31222,TRUE
+Honduras,238,166876,FALSE
+Honduras,243,112174.5654,TRUE
+Honduras,259,55616.6005,TRUE
+Honduras,276,21148,FALSE
+Honduras,279,177754.1672,TRUE
+Honduras,298,120463.1286,TRUE
+Honduras,305,17034,FALSE
+Honduras,306,316035,FALSE
+Honduras,11,178064.2799,TRUE
+Honduras,16,289487,FALSE
+Honduras,48,27222.34375,TRUE
+Honduras,60,22383.25858,TRUE
+Honduras,63,131587,FALSE
+Honduras,121,193309,FALSE
+Honduras,128,5409,FALSE
+Honduras,156,10200.29705,TRUE
+Honduras,217,21196.4891,TRUE
+Honduras,248,14225.32829,TRUE
+Honduras,270,11777,FALSE
+Honduras,52,95140,FALSE
+Honduras,74,4246,FALSE
+Honduras,75,87000,FALSE
+Honduras,80,49992.57574,TRUE
+Honduras,301,113987.8459,TRUE
+Honduras,319,89190.44102,TRUE
+Honduras,51,14697,FALSE
+Honduras,53,6581.96824,TRUE
+Honduras,77,9470,FALSE
+Honduras,213,127856,FALSE
+Honduras,228,415714,FALSE
+Honduras,269,15171.62496,TRUE
+Honduras,296,63489,FALSE
+Honduras,175,81597,FALSE
+Honduras,12,36715.19395,TRUE
+Honduras,13,52895,FALSE
+Honduras,108,12577.92841,TRUE
+Honduras,165,14797.07017,TRUE
+Honduras,215,234852,FALSE
+Honduras,261,8946.089355,TRUE
+Honduras,281,136069.2843,TRUE
+Honduras,302,27087.34387,TRUE
+Honduras,310,36133,TRUE
+Honduras,106,13595.99028,TRUE
+Honduras,30,62885.73079,TRUE
+Honduras,91,126485.3041,TRUE
+Honduras,192,3780098.195,TRUE
+Honduras,249,70032.42373,TRUE
+Honduras,308,35296.76443,TRUE
+Honduras,116,98484.54468,TRUE
+Honduras,234,8162.890747,TRUE
+Honduras,88,138218.959,TRUE
+Honduras,227,9358.848173,TRUE
+Honduras,8,21599.0332,TRUE
+Honduras,115,186672.4488,TRUE
+Honduras,146,28645.96233,TRUE
+Honduras,257,14862.84549,TRUE
+Honduras,39,10075.63454,TRUE
+Honduras,61,218943.5096,TRUE
+Honduras,76,100326.9844,TRUE
+Honduras,268,27005.25,TRUE
+Honduras,194,9390.783666,TRUE
+Honduras,198,4547,FALSE
+Honduras,245,11957.75,TRUE
+Honduras,86,15341.61704,TRUE
+Honduras,247,27947.125,TRUE
+Honduras,15,5922.875,TRUE
+Honduras,135,5719.346191,TRUE
+Honduras,65,4252.65625,TRUE
+Honduras,70,8796.273438,TRUE
+Honduras,314,4472.643433,TRUE
+Honduras,133,6124.625,TRUE
+Honduras,240,4373.4375,TRUE
+Honduras,148,23186,TRUE
+Honduras,31,5157,TRUE
+Hungary,4,7224,FALSE
+Hungary,5,14631,FALSE
+Hungary,7,167711,FALSE
+Hungary,8,47828,FALSE
+Hungary,17,42627,FALSE
+Hungary,105,149702.6633,TRUE
+Hungary,120,62650,FALSE
+Hungary,161,10995,FALSE
+Hungary,169,61816,FALSE
+Hungary,179,200361,FALSE
+Hungary,180,13533,FALSE
+Hungary,203,26179.47154,TRUE
+Hungary,205,281747,FALSE
+Hungary,208,84004.18102,TRUE
+Hungary,219,72343,FALSE
+Hungary,221,102479,FALSE
+Hungary,229,16244.65912,TRUE
+Hungary,231,67240,FALSE
+Hungary,235,252024,FALSE
+Hungary,254,34518,FALSE
+Hungary,84,9355.713607,TRUE
+Hungary,267,9372.487582,TRUE
+Hungary,282,604311,FALSE
+Hungary,286,760050.6713,TRUE
+Hungary,289,24992,FALSE
+Hungary,316,12771,FALSE
+Hungary,317,350701,FALSE
+Hungary,318,45359,FALSE
+Hungary,18,19902,FALSE
+Hungary,19,115066,FALSE
+Hungary,33,10466,FALSE
+Hungary,40,284226,FALSE
+Hungary,49,334901,FALSE
+Hungary,54,158072,FALSE
+Hungary,58,40019,FALSE
+Hungary,59,4830,FALSE
+Hungary,63,85945,FALSE
+Hungary,90,494320,FALSE
+Hungary,94,61002.28577,TRUE
+Hungary,101,200897,FALSE
+Hungary,112,69253,FALSE
+Hungary,138,52470,FALSE
+Hungary,152,186986,FALSE
+Hungary,154,96782.90416,TRUE
+Hungary,158,320018,FALSE
+Hungary,200,25593,FALSE
+Hungary,202,85300.04797,TRUE
+Hungary,206,167957,FALSE
+Hungary,218,54607,FALSE
+Hungary,238,196412,FALSE
+Hungary,243,72838,FALSE
+Hungary,259,25944,FALSE
+Hungary,276,21872,FALSE
+Hungary,279,179946,FALSE
+Hungary,298,120463.1286,TRUE
+Hungary,305,16735,FALSE
+Hungary,306,929329,FALSE
+Hungary,11,178064.2799,TRUE
+Hungary,16,74389.59543,TRUE
+Hungary,48,27222.34375,TRUE
+Hungary,60,16885,FALSE
+Hungary,63,85945,FALSE
+Hungary,121,115777.4722,TRUE
+Hungary,128,9998,FALSE
+Hungary,156,11909,FALSE
+Hungary,217,23867,FALSE
+Hungary,248,27408,FALSE
+Hungary,270,30523,FALSE
+Hungary,52,72720.10141,TRUE
+Hungary,74,4541.36112,TRUE
+Hungary,75,47178.96176,TRUE
+Hungary,80,156441,FALSE
+Hungary,301,113987.8459,TRUE
+Hungary,319,89190.44102,TRUE
+Hungary,51,26504.47085,TRUE
+Hungary,53,6581.96824,TRUE
+Hungary,77,5993.147024,TRUE
+Hungary,213,124295.9159,TRUE
+Hungary,228,133880.2683,TRUE
+Hungary,269,15171.62496,TRUE
+Hungary,296,43692.55808,TRUE
+Hungary,175,70802.39066,TRUE
+Hungary,12,40032,FALSE
+Hungary,13,74728.86082,TRUE
+Hungary,108,4547,FALSE
+Hungary,165,8312,FALSE
+Hungary,215,105585.0293,TRUE
+Hungary,261,10189,FALSE
+Hungary,281,67895,FALSE
+Hungary,302,27087.34387,TRUE
+Hungary,310,36133,TRUE
+Hungary,106,4323,FALSE
+Hungary,30,62885.73079,TRUE
+Hungary,91,23126,FALSE
+Hungary,192,3780098.195,TRUE
+Hungary,249,27220,FALSE
+Hungary,308,36269,FALSE
+Hungary,116,38202,FALSE
+Hungary,234,10908,FALSE
+Hungary,88,138218.959,TRUE
+Hungary,227,9358.848173,TRUE
+Hungary,8,47828,FALSE
+Hungary,115,186672.4488,TRUE
+Hungary,146,28645.96233,TRUE
+Hungary,257,14862.84549,TRUE
+Hungary,39,9546,FALSE
+Hungary,61,218943.5096,TRUE
+Hungary,76,100326.9844,TRUE
+Hungary,268,27005.25,TRUE
+Hungary,194,7442,FALSE
+Hungary,198,5299.135169,TRUE
+Hungary,245,11957.75,TRUE
+Hungary,86,9518,FALSE
+Hungary,247,27947.125,TRUE
+Hungary,15,5922.875,TRUE
+Hungary,135,2537,FALSE
+Hungary,65,4252.65625,TRUE
+Hungary,70,8796.273438,TRUE
+Hungary,314,4472.643433,TRUE
+Hungary,133,6124.625,TRUE
+Hungary,240,4373.4375,TRUE
+Hungary,148,23186,TRUE
+Hungary,31,5157,TRUE
+Iceland,4,20977.52128,TRUE
+Iceland,5,7484.490489,TRUE
+Iceland,7,111437.9893,TRUE
+Iceland,8,47030.54376,TRUE
+Iceland,17,33099.94094,TRUE
+Iceland,105,149702.6633,TRUE
+Iceland,120,115713.1489,TRUE
+Iceland,161,8730.264786,TRUE
+Iceland,169,16777.49735,TRUE
+Iceland,179,121608.9919,TRUE
+Iceland,180,7520.279265,TRUE
+Iceland,203,26179.47154,TRUE
+Iceland,205,158255.8483,TRUE
+Iceland,208,84004.18102,TRUE
+Iceland,219,80605.62094,TRUE
+Iceland,221,53059.48552,TRUE
+Iceland,229,16244.65912,TRUE
+Iceland,231,60255.26389,TRUE
+Iceland,235,165500,FALSE
+Iceland,254,26952.37295,TRUE
+Iceland,84,9355.713607,TRUE
+Iceland,267,9372.487582,TRUE
+Iceland,282,423220.8453,TRUE
+Iceland,286,760050.6713,TRUE
+Iceland,289,9979.922823,TRUE
+Iceland,316,72255.87156,TRUE
+Iceland,317,188762.6372,TRUE
+Iceland,318,32261.2753,TRUE
+Iceland,18,11273.75269,TRUE
+Iceland,19,77366.60983,TRUE
+Iceland,33,30270.38924,TRUE
+Iceland,40,172927,FALSE
+Iceland,49,1556000,FALSE
+Iceland,54,54545,FALSE
+Iceland,58,74040.89691,TRUE
+Iceland,59,22326.21725,TRUE
+Iceland,63,234336.5313,TRUE
+Iceland,90,6028140,FALSE
+Iceland,94,61002.28577,TRUE
+Iceland,101,138512.4356,TRUE
+Iceland,112,122104.9439,TRUE
+Iceland,138,17125.18189,TRUE
+Iceland,152,119704.6269,TRUE
+Iceland,154,96782.90416,TRUE
+Iceland,158,96473.15601,TRUE
+Iceland,200,22918.25267,TRUE
+Iceland,202,85300.04797,TRUE
+Iceland,206,183393.7134,TRUE
+Iceland,218,52990.31222,TRUE
+Iceland,238,116960.1876,TRUE
+Iceland,243,112174.5654,TRUE
+Iceland,259,55616.6005,TRUE
+Iceland,276,10950.60863,TRUE
+Iceland,279,177754.1672,TRUE
+Iceland,298,120463.1286,TRUE
+Iceland,305,15590.0347,TRUE
+Iceland,306,3590000,FALSE
+Iceland,11,178064.2799,TRUE
+Iceland,16,74389.59543,TRUE
+Iceland,48,27222.34375,TRUE
+Iceland,60,22383.25858,TRUE
+Iceland,63,11715.28525,TRUE
+Iceland,121,115777.4722,TRUE
+Iceland,128,9353.124815,TRUE
+Iceland,156,10200.29705,TRUE
+Iceland,217,21196.4891,TRUE
+Iceland,248,14225.32829,TRUE
+Iceland,270,9151.63574,TRUE
+Iceland,52,72720.10141,TRUE
+Iceland,74,4541.36112,TRUE
+Iceland,75,47178.96176,TRUE
+Iceland,80,49992.57574,TRUE
+Iceland,301,113987.8459,TRUE
+Iceland,319,89190.44102,TRUE
+Iceland,51,26504.47085,TRUE
+Iceland,53,6581.96824,TRUE
+Iceland,77,5993.147024,TRUE
+Iceland,213,124295.9159,TRUE
+Iceland,228,133880.2683,TRUE
+Iceland,269,15171.62496,TRUE
+Iceland,296,43692.55808,TRUE
+Iceland,175,70802.39066,TRUE
+Iceland,12,36715.19395,TRUE
+Iceland,13,74728.86082,TRUE
+Iceland,108,12577.92841,TRUE
+Iceland,165,14797.07017,TRUE
+Iceland,215,105585.0293,TRUE
+Iceland,261,8946.089355,TRUE
+Iceland,281,136069.2843,TRUE
+Iceland,302,27087.34387,TRUE
+Iceland,310,36133,TRUE
+Iceland,106,13595.99028,TRUE
+Iceland,30,62885.73079,TRUE
+Iceland,91,126485.3041,TRUE
+Iceland,192,3780098.195,TRUE
+Iceland,249,70032.42373,TRUE
+Iceland,308,35296.76443,TRUE
+Iceland,116,98484.54468,TRUE
+Iceland,234,8162.890747,TRUE
+Iceland,88,138218.959,TRUE
+Iceland,227,9358.848173,TRUE
+Iceland,8,21599.0332,TRUE
+Iceland,115,186672.4488,TRUE
+Iceland,146,28645.96233,TRUE
+Iceland,257,14862.84549,TRUE
+Iceland,39,10075.63454,TRUE
+Iceland,61,218943.5096,TRUE
+Iceland,76,100326.9844,TRUE
+Iceland,268,27005.25,TRUE
+Iceland,194,9390.783666,TRUE
+Iceland,198,5299.135169,TRUE
+Iceland,245,11957.75,TRUE
+Iceland,86,15341.61704,TRUE
+Iceland,247,27947.125,TRUE
+Iceland,15,5922.875,TRUE
+Iceland,135,5719.346191,TRUE
+Iceland,65,4252.65625,TRUE
+Iceland,70,8796.273438,TRUE
+Iceland,314,4472.643433,TRUE
+Iceland,133,6124.625,TRUE
+Iceland,240,4373.4375,TRUE
+Iceland,148,23186,TRUE
+Iceland,31,5157,TRUE
+India,4,20977.52128,TRUE
+India,5,7149,FALSE
+India,7,91465,FALSE
+India,8,28131,FALSE
+India,17,25508,FALSE
+India,105,25780,FALSE
+India,120,212295,FALSE
+India,161,4266,FALSE
+India,169,25745,FALSE
+India,179,221363,FALSE
+India,180,11629,FALSE
+India,203,26179.47154,TRUE
+India,205,161815,FALSE
+India,208,129810,FALSE
+India,219,70600,FALSE
+India,221,78235,FALSE
+India,229,16244.65912,TRUE
+India,231,83383,FALSE
+India,235,205493,FALSE
+India,254,36950,FALSE
+India,84,13727,FALSE
+India,267,4198,FALSE
+India,282,423220.8453,TRUE
+India,286,703935,FALSE
+India,289,8300,FALSE
+India,316,10645,FALSE
+India,317,141847,FALSE
+India,318,30930,FALSE
+India,18,4117,FALSE
+India,19,28110,FALSE
+India,33,30270.38924,TRUE
+India,40,225644,FALSE
+India,49,154659,FALSE
+India,54,192465,FALSE
+India,58,30776,FALSE
+India,59,22326.21725,TRUE
+India,63,17605,FALSE
+India,90,63129,FALSE
+India,94,61002.28577,TRUE
+India,101,189036,FALSE
+India,112,53640,FALSE
+India,138,17125.18189,TRUE
+India,152,119704.6269,TRUE
+India,154,115426,FALSE
+India,158,63456,FALSE
+India,200,22918.25267,TRUE
+India,202,113546,FALSE
+India,206,183393.7134,TRUE
+India,218,96861,FALSE
+India,238,95956,FALSE
+India,243,112174.5654,TRUE
+India,259,55616.6005,TRUE
+India,276,12181,FALSE
+India,279,177754.1672,TRUE
+India,298,120463.1286,TRUE
+India,305,16946,FALSE
+India,306,242092,FALSE
+India,11,178064.2799,TRUE
+India,16,344255,FALSE
+India,48,27222.34375,TRUE
+India,60,9316,FALSE
+India,63,17605,FALSE
+India,121,231748,FALSE
+India,128,11822,FALSE
+India,156,6818,FALSE
+India,217,9272,FALSE
+India,248,11796,FALSE
+India,270,7805,FALSE
+India,52,223235,FALSE
+India,74,2020,FALSE
+India,75,51620,FALSE
+India,80,49992.57574,TRUE
+India,301,113987.8459,TRUE
+India,319,89190.44102,TRUE
+India,51,6477,FALSE
+India,53,17862,FALSE
+India,77,8766,FALSE
+India,213,124295.9159,TRUE
+India,228,178545,FALSE
+India,269,15171.62496,TRUE
+India,296,113231,FALSE
+India,175,83947,FALSE
+India,12,36715.19395,TRUE
+India,13,74728.86082,TRUE
+India,108,12577.92841,TRUE
+India,165,14797.07017,TRUE
+India,215,428496,FALSE
+India,261,5056,FALSE
+India,281,136069.2843,TRUE
+India,302,21372,FALSE
+India,310,36133,TRUE
+India,106,13595.99028,TRUE
+India,30,62885.73079,TRUE
+India,91,126485.3041,TRUE
+India,192,3780098.195,TRUE
+India,249,70032.42373,TRUE
+India,308,35296.76443,TRUE
+India,116,98484.54468,TRUE
+India,234,8162.890747,TRUE
+India,88,138218.959,TRUE
+India,227,7334,FALSE
+India,8,28131,FALSE
+India,115,67212,FALSE
+India,146,24839,FALSE
+India,257,20985,FALSE
+India,39,10075.63454,TRUE
+India,61,218943.5096,TRUE
+India,76,100326.9844,TRUE
+India,268,27005.25,TRUE
+India,194,9390.783666,TRUE
+India,198,3551,FALSE
+India,245,11957.75,TRUE
+India,86,15341.61704,TRUE
+India,247,27947.125,TRUE
+India,15,5922.875,TRUE
+India,135,5719.346191,TRUE
+India,65,4252.65625,TRUE
+India,70,8796.273438,TRUE
+India,314,4472.643433,TRUE
+India,133,6124.625,TRUE
+India,240,4373.4375,TRUE
+India,148,23186,TRUE
+India,31,5157,TRUE
+Indonesia,4,20977.52128,TRUE
+Indonesia,5,7484.490489,TRUE
+Indonesia,7,111437.9893,TRUE
+Indonesia,8,4134,FALSE
+Indonesia,17,33099.94094,TRUE
+Indonesia,105,149702.6633,TRUE
+Indonesia,120,115713.1489,TRUE
+Indonesia,161,8730.264786,TRUE
+Indonesia,169,53705,FALSE
+Indonesia,179,171080,FALSE
+Indonesia,180,7520.279265,TRUE
+Indonesia,203,26179.47154,TRUE
+Indonesia,205,96693,FALSE
+Indonesia,208,378416,FALSE
+Indonesia,219,80605.62094,TRUE
+Indonesia,221,53059.48552,TRUE
+Indonesia,229,16244.65912,TRUE
+Indonesia,231,60255.26389,TRUE
+Indonesia,235,182549,FALSE
+Indonesia,254,54148,FALSE
+Indonesia,84,1208,FALSE
+Indonesia,267,9372.487582,TRUE
+Indonesia,282,423220.8453,TRUE
+Indonesia,286,574555,FALSE
+Indonesia,289,9979.922823,TRUE
+Indonesia,316,72255.87156,TRUE
+Indonesia,317,138300,FALSE
+Indonesia,318,32261.2753,TRUE
+Indonesia,18,11627,FALSE
+Indonesia,19,74085,FALSE
+Indonesia,33,30270.38924,TRUE
+Indonesia,40,210377,FALSE
+Indonesia,49,168286,FALSE
+Indonesia,54,119142,FALSE
+Indonesia,58,74040.89691,TRUE
+Indonesia,59,22326.21725,TRUE
+Indonesia,63,75382,FALSE
+Indonesia,90,101914,FALSE
+Indonesia,94,61002.28577,TRUE
+Indonesia,101,113710,FALSE
+Indonesia,112,87869,FALSE
+Indonesia,138,17125.18189,TRUE
+Indonesia,152,93537,FALSE
+Indonesia,154,96782.90416,TRUE
+Indonesia,158,96473.15601,TRUE
+Indonesia,200,22918.25267,TRUE
+Indonesia,202,85300.04797,TRUE
+Indonesia,206,183393.7134,TRUE
+Indonesia,218,52990.31222,TRUE
+Indonesia,238,683422,FALSE
+Indonesia,243,112174.5654,TRUE
+Indonesia,259,55616.6005,TRUE
+Indonesia,276,15515,FALSE
+Indonesia,279,36879,FALSE
+Indonesia,298,120463.1286,TRUE
+Indonesia,305,9506,FALSE
+Indonesia,306,153107,FALSE
+Indonesia,11,178064.2799,TRUE
+Indonesia,16,500637,FALSE
+Indonesia,48,27222.34375,TRUE
+Indonesia,60,22383.25858,TRUE
+Indonesia,63,75382,FALSE
+Indonesia,121,115777.4722,TRUE
+Indonesia,128,13786,FALSE
+Indonesia,156,10200.29705,TRUE
+Indonesia,217,21196.4891,TRUE
+Indonesia,248,14225.32829,TRUE
+Indonesia,270,9151.63574,TRUE
+Indonesia,52,239133,FALSE
+Indonesia,74,3861,FALSE
+Indonesia,75,57072,FALSE
+Indonesia,80,53766,FALSE
+Indonesia,301,113987.8459,TRUE
+Indonesia,319,89190.44102,TRUE
+Indonesia,51,2524,FALSE
+Indonesia,53,4307,FALSE
+Indonesia,77,5204,FALSE
+Indonesia,213,171571,FALSE
+Indonesia,228,1321449,FALSE
+Indonesia,269,11762,FALSE
+Indonesia,296,165667,FALSE
+Indonesia,175,130190,FALSE
+Indonesia,12,36715.19395,TRUE
+Indonesia,13,127285,FALSE
+Indonesia,108,12577.92841,TRUE
+Indonesia,165,14797.07017,TRUE
+Indonesia,215,906106,FALSE
+Indonesia,261,8946.089355,TRUE
+Indonesia,281,136069.2843,TRUE
+Indonesia,302,12281,FALSE
+Indonesia,310,36133,TRUE
+Indonesia,106,13595.99028,TRUE
+Indonesia,30,62885.73079,TRUE
+Indonesia,91,126485.3041,TRUE
+Indonesia,192,875931,FALSE
+Indonesia,249,70032.42373,TRUE
+Indonesia,308,35296.76443,TRUE
+Indonesia,116,98484.54468,TRUE
+Indonesia,234,8162.890747,TRUE
+Indonesia,88,138218.959,TRUE
+Indonesia,227,9358.848173,TRUE
+Indonesia,8,4134,FALSE
+Indonesia,115,263177,FALSE
+Indonesia,146,28645.96233,TRUE
+Indonesia,257,8677,FALSE
+Indonesia,39,10075.63454,TRUE
+Indonesia,61,218943.5096,TRUE
+Indonesia,76,100326.9844,TRUE
+Indonesia,268,27005.25,TRUE
+Indonesia,194,9390.783666,TRUE
+Indonesia,198,1876,FALSE
+Indonesia,245,11957.75,TRUE
+Indonesia,86,15341.61704,TRUE
+Indonesia,247,27947.125,TRUE
+Indonesia,15,5922.875,TRUE
+Indonesia,135,5719.346191,TRUE
+Indonesia,65,8259,FALSE
+Indonesia,70,2573,FALSE
+Indonesia,314,1634,FALSE
+Indonesia,133,8196,FALSE
+Indonesia,240,4373.4375,TRUE
+Indonesia,148,10356,FALSE
+Indonesia,31,5157,TRUE
+Iran (Islamic Republic of),4,14120,FALSE
+Iran (Islamic Republic of),5,112673,FALSE
+Iran (Islamic Republic of),7,117299,FALSE
+Iran (Islamic Republic of),8,56279,FALSE
+Iran (Islamic Republic of),17,18044,FALSE
+Iran (Islamic Republic of),105,13216,FALSE
+Iran (Islamic Republic of),120,118171,FALSE
+Iran (Islamic Republic of),161,3631,FALSE
+Iran (Islamic Republic of),169,68932,FALSE
+Iran (Islamic Republic of),179,196983,FALSE
+Iran (Islamic Republic of),180,22205,FALSE
+Iran (Islamic Republic of),203,12710,FALSE
+Iran (Islamic Republic of),205,379519,FALSE
+Iran (Islamic Republic of),208,163049,FALSE
+Iran (Islamic Republic of),219,128558,FALSE
+Iran (Islamic Republic of),221,142468,FALSE
+Iran (Islamic Republic of),229,9108,FALSE
+Iran (Islamic Republic of),231,79430,FALSE
+Iran (Islamic Republic of),235,319272,FALSE
+Iran (Islamic Republic of),254,42862,FALSE
+Iran (Islamic Republic of),84,21092,FALSE
+Iran (Islamic Republic of),267,9010,FALSE
+Iran (Islamic Republic of),282,547067,FALSE
+Iran (Islamic Republic of),286,802591,FALSE
+Iran (Islamic Republic of),289,9693,FALSE
+Iran (Islamic Republic of),316,26378,FALSE
+Iran (Islamic Republic of),317,287917,FALSE
+Iran (Islamic Republic of),318,19532,FALSE
+Iran (Islamic Republic of),18,23123,FALSE
+Iran (Islamic Republic of),19,91439,FALSE
+Iran (Islamic Republic of),33,21608,FALSE
+Iran (Islamic Republic of),40,431578,FALSE
+Iran (Islamic Republic of),49,313791,FALSE
+Iran (Islamic Republic of),54,321195,FALSE
+Iran (Islamic Republic of),58,77610,FALSE
+Iran (Islamic Republic of),59,22326.21725,TRUE
+Iran (Islamic Republic of),63,24968,FALSE
+Iran (Islamic Republic of),90,287123,FALSE
+Iran (Islamic Republic of),94,55113,FALSE
+Iran (Islamic Republic of),101,308384,FALSE
+Iran (Islamic Republic of),112,120166,FALSE
+Iran (Islamic Republic of),138,17125.18189,TRUE
+Iran (Islamic Republic of),152,251563,FALSE
+Iran (Islamic Republic of),154,157597,FALSE
+Iran (Islamic Republic of),158,305626,FALSE
+Iran (Islamic Republic of),200,22918.25267,TRUE
+Iran (Islamic Republic of),202,85300.04797,TRUE
+Iran (Islamic Republic of),206,183393.7134,TRUE
+Iran (Islamic Republic of),218,63191,FALSE
+Iran (Islamic Republic of),238,69470,FALSE
+Iran (Islamic Republic of),243,113976,FALSE
+Iran (Islamic Republic of),259,8647,FALSE
+Iran (Islamic Republic of),276,22678,FALSE
+Iran (Islamic Republic of),279,188258,FALSE
+Iran (Islamic Republic of),298,180016,FALSE
+Iran (Islamic Republic of),305,22106,FALSE
+Iran (Islamic Republic of),306,400484,FALSE
+Iran (Islamic Republic of),11,192612,FALSE
+Iran (Islamic Republic of),16,295559,FALSE
+Iran (Islamic Republic of),48,27222.34375,TRUE
+Iran (Islamic Republic of),60,4096,FALSE
+Iran (Islamic Republic of),63,24968,FALSE
+Iran (Islamic Republic of),121,217065,FALSE
+Iran (Islamic Republic of),128,43881,FALSE
+Iran (Islamic Republic of),156,5691,FALSE
+Iran (Islamic Republic of),217,21196.4891,TRUE
+Iran (Islamic Republic of),248,18360,FALSE
+Iran (Islamic Republic of),270,9151.63574,TRUE
+Iran (Islamic Republic of),52,72720.10141,TRUE
+Iran (Islamic Republic of),74,4541.36112,TRUE
+Iran (Islamic Republic of),75,47178.96176,TRUE
+Iran (Islamic Republic of),80,49992.57574,TRUE
+Iran (Islamic Republic of),301,113987.8459,TRUE
+Iran (Islamic Republic of),319,89190.44102,TRUE
+Iran (Islamic Republic of),51,26504.47085,TRUE
+Iran (Islamic Republic of),53,16815,FALSE
+Iran (Islamic Republic of),77,5993.147024,TRUE
+Iran (Islamic Republic of),213,124295.9159,TRUE
+Iran (Islamic Republic of),228,133880.2683,TRUE
+Iran (Islamic Republic of),269,15171.62496,TRUE
+Iran (Islamic Republic of),296,43692.55808,TRUE
+Iran (Islamic Republic of),175,103458,FALSE
+Iran (Islamic Republic of),12,231683,FALSE
+Iran (Islamic Republic of),13,74728.86082,TRUE
+Iran (Islamic Republic of),108,12577.92841,TRUE
+Iran (Islamic Republic of),165,14797.07017,TRUE
+Iran (Islamic Republic of),215,87417,FALSE
+Iran (Islamic Republic of),261,11050,FALSE
+Iran (Islamic Republic of),281,140711,FALSE
+Iran (Islamic Republic of),302,36759,FALSE
+Iran (Islamic Republic of),310,36133,TRUE
+Iran (Islamic Republic of),106,9122,FALSE
+Iran (Islamic Republic of),30,62885.73079,TRUE
+Iran (Islamic Republic of),91,126485.3041,TRUE
+Iran (Islamic Republic of),192,3780098.195,TRUE
+Iran (Islamic Republic of),249,70032.42373,TRUE
+Iran (Islamic Republic of),308,35296.76443,TRUE
+Iran (Islamic Republic of),116,98484.54468,TRUE
+Iran (Islamic Republic of),234,8162.890747,TRUE
+Iran (Islamic Republic of),88,138218.959,TRUE
+Iran (Islamic Republic of),227,9358.848173,TRUE
+Iran (Islamic Republic of),8,56279,FALSE
+Iran (Islamic Republic of),115,186672.4488,TRUE
+Iran (Islamic Republic of),146,28645.96233,TRUE
+Iran (Islamic Republic of),257,14862.84549,TRUE
+Iran (Islamic Republic of),39,10075.63454,TRUE
+Iran (Islamic Republic of),61,218943.5096,TRUE
+Iran (Islamic Republic of),76,100326.9844,TRUE
+Iran (Islamic Republic of),268,27005.25,TRUE
+Iran (Islamic Republic of),194,7011,FALSE
+Iran (Islamic Republic of),198,5299.135169,TRUE
+Iran (Islamic Republic of),245,11957.75,TRUE
+Iran (Islamic Republic of),86,15341.61704,TRUE
+Iran (Islamic Republic of),247,27947.125,TRUE
+Iran (Islamic Republic of),15,5922.875,TRUE
+Iran (Islamic Republic of),135,10118,FALSE
+Iran (Islamic Republic of),65,4252.65625,TRUE
+Iran (Islamic Republic of),70,8796.273438,TRUE
+Iran (Islamic Republic of),314,4472.643433,TRUE
+Iran (Islamic Republic of),133,6124.625,TRUE
+Iran (Islamic Republic of),240,4373.4375,TRUE
+Iran (Islamic Republic of),148,23186,TRUE
+Iran (Islamic Republic of),31,5157,TRUE
+Iraq,4,13215,FALSE
+Iraq,5,7484.490489,TRUE
+Iraq,7,9302,FALSE
+Iraq,8,46663,FALSE
+Iraq,17,19211,FALSE
+Iraq,105,71285,FALSE
+Iraq,120,208362,FALSE
+Iraq,161,4482,FALSE
+Iraq,169,38890,FALSE
+Iraq,179,109524,FALSE
+Iraq,180,8667,FALSE
+Iraq,203,40681,FALSE
+Iraq,205,72801,FALSE
+Iraq,208,22131,FALSE
+Iraq,219,50998,FALSE
+Iraq,221,66894,FALSE
+Iraq,229,16244.65912,TRUE
+Iraq,231,60012,FALSE
+Iraq,235,245181,FALSE
+Iraq,254,48056,FALSE
+Iraq,84,26273,FALSE
+Iraq,267,8753,FALSE
+Iraq,282,51334,FALSE
+Iraq,286,200000,FALSE
+Iraq,289,17577,FALSE
+Iraq,316,12182,FALSE
+Iraq,317,147953,FALSE
+Iraq,318,33181,FALSE
+Iraq,18,40000,FALSE
+Iraq,19,63866,FALSE
+Iraq,33,20000,FALSE
+Iraq,40,115046,FALSE
+Iraq,49,62397,FALSE
+Iraq,54,112734,FALSE
+Iraq,58,74040.89691,TRUE
+Iraq,59,22326.21725,TRUE
+Iraq,63,61485,FALSE
+Iraq,90,71069,FALSE
+Iraq,94,19830,FALSE
+Iraq,101,122609,FALSE
+Iraq,112,51589,FALSE
+Iraq,138,17125.18189,TRUE
+Iraq,152,119704.6269,TRUE
+Iraq,154,12559,FALSE
+Iraq,158,71152,FALSE
+Iraq,200,21687,FALSE
+Iraq,202,52532,FALSE
+Iraq,206,64706,FALSE
+Iraq,218,52990.31222,TRUE
+Iraq,238,82966,FALSE
+Iraq,243,55010,FALSE
+Iraq,259,55616.6005,TRUE
+Iraq,276,7652,FALSE
+Iraq,279,44603,FALSE
+Iraq,298,54463,FALSE
+Iraq,305,8302,FALSE
+Iraq,306,200712,FALSE
+Iraq,11,178064.2799,TRUE
+Iraq,16,74389.59543,TRUE
+Iraq,48,27222.34375,TRUE
+Iraq,60,8040,FALSE
+Iraq,63,61485,FALSE
+Iraq,121,74246,FALSE
+Iraq,128,33705,FALSE
+Iraq,156,8667,FALSE
+Iraq,217,21196.4891,TRUE
+Iraq,248,14225.32829,TRUE
+Iraq,270,27902,FALSE
+Iraq,52,72720.10141,TRUE
+Iraq,74,4541.36112,TRUE
+Iraq,75,47178.96176,TRUE
+Iraq,80,49992.57574,TRUE
+Iraq,301,113987.8459,TRUE
+Iraq,319,89190.44102,TRUE
+Iraq,51,26504.47085,TRUE
+Iraq,53,6581.96824,TRUE
+Iraq,77,5993.147024,TRUE
+Iraq,213,124295.9159,TRUE
+Iraq,228,133880.2683,TRUE
+Iraq,269,15171.62496,TRUE
+Iraq,296,43692.55808,TRUE
+Iraq,175,70802.39066,TRUE
+Iraq,12,36715.19395,TRUE
+Iraq,13,74728.86082,TRUE
+Iraq,108,12577.92841,TRUE
+Iraq,165,14797.07017,TRUE
+Iraq,215,105585.0293,TRUE
+Iraq,261,8946.089355,TRUE
+Iraq,281,136069.2843,TRUE
+Iraq,302,27087.34387,TRUE
+Iraq,310,36133,TRUE
+Iraq,106,13595.99028,TRUE
+Iraq,30,62885.73079,TRUE
+Iraq,91,126485.3041,TRUE
+Iraq,192,3780098.195,TRUE
+Iraq,249,70032.42373,TRUE
+Iraq,308,35296.76443,TRUE
+Iraq,116,98484.54468,TRUE
+Iraq,234,8162.890747,TRUE
+Iraq,88,138218.959,TRUE
+Iraq,227,9358.848173,TRUE
+Iraq,8,46663,FALSE
+Iraq,115,186672.4488,TRUE
+Iraq,146,28645.96233,TRUE
+Iraq,257,14862.84549,TRUE
+Iraq,39,10075.63454,TRUE
+Iraq,61,218943.5096,TRUE
+Iraq,76,100326.9844,TRUE
+Iraq,268,27005.25,TRUE
+Iraq,194,9390.783666,TRUE
+Iraq,198,5299.135169,TRUE
+Iraq,245,11957.75,TRUE
+Iraq,86,25860,FALSE
+Iraq,247,27947.125,TRUE
+Iraq,15,5922.875,TRUE
+Iraq,135,5719.346191,TRUE
+Iraq,65,4252.65625,TRUE
+Iraq,70,8796.273438,TRUE
+Iraq,314,4472.643433,TRUE
+Iraq,133,6124.625,TRUE
+Iraq,240,4373.4375,TRUE
+Iraq,148,23186,TRUE
+Iraq,31,5157,TRUE
+Ireland,4,20977.52128,TRUE
+Ireland,5,7484.490489,TRUE
+Ireland,7,313669,FALSE
+Ireland,8,47030.54376,TRUE
+Ireland,17,78219,FALSE
+Ireland,105,149702.6633,TRUE
+Ireland,120,115713.1489,TRUE
+Ireland,161,8730.264786,TRUE
+Ireland,169,16777.49735,TRUE
+Ireland,179,121608.9919,TRUE
+Ireland,180,7520.279265,TRUE
+Ireland,203,26179.47154,TRUE
+Ireland,205,280374,FALSE
+Ireland,208,84004.18102,TRUE
+Ireland,219,80605.62094,TRUE
+Ireland,221,53059.48552,TRUE
+Ireland,229,16244.65912,TRUE
+Ireland,231,60255.26389,TRUE
+Ireland,235,391111,FALSE
+Ireland,254,26952.37295,TRUE
+Ireland,84,9355.713607,TRUE
+Ireland,267,9372.487582,TRUE
+Ireland,282,423220.8453,TRUE
+Ireland,286,760050.6713,TRUE
+Ireland,289,9979.922823,TRUE
+Ireland,316,72255.87156,TRUE
+Ireland,317,188762.6372,TRUE
+Ireland,318,95390,FALSE
+Ireland,18,58435,FALSE
+Ireland,19,82202,FALSE
+Ireland,33,30270.38924,TRUE
+Ireland,40,272210,FALSE
+Ireland,49,575321,FALSE
+Ireland,54,114772,FALSE
+Ireland,58,74040.89691,TRUE
+Ireland,59,22326.21725,TRUE
+Ireland,63,234336.5313,TRUE
+Ireland,90,2000000,FALSE
+Ireland,94,61002.28577,TRUE
+Ireland,101,138512.4356,TRUE
+Ireland,112,122104.9439,TRUE
+Ireland,138,10370,FALSE
+Ireland,152,237500,FALSE
+Ireland,154,96782.90416,TRUE
+Ireland,158,248366,FALSE
+Ireland,200,79009,FALSE
+Ireland,202,85300.04797,TRUE
+Ireland,206,183393.7134,TRUE
+Ireland,218,37403,FALSE
+Ireland,238,116960.1876,TRUE
+Ireland,243,112174.5654,TRUE
+Ireland,259,32532,FALSE
+Ireland,276,10950.60863,TRUE
+Ireland,279,177754.1672,TRUE
+Ireland,298,120463.1286,TRUE
+Ireland,305,15590.0347,TRUE
+Ireland,306,3333333,FALSE
+Ireland,11,178064.2799,TRUE
+Ireland,16,74389.59543,TRUE
+Ireland,48,27222.34375,TRUE
+Ireland,60,22383.25858,TRUE
+Ireland,63,11715.28525,TRUE
+Ireland,121,115777.4722,TRUE
+Ireland,128,9353.124815,TRUE
+Ireland,156,10200.29705,TRUE
+Ireland,217,34000,FALSE
+Ireland,248,34444,FALSE
+Ireland,270,9151.63574,TRUE
+Ireland,52,72720.10141,TRUE
+Ireland,74,4541.36112,TRUE
+Ireland,75,47178.96176,TRUE
+Ireland,80,49992.57574,TRUE
+Ireland,301,113987.8459,TRUE
+Ireland,319,89190.44102,TRUE
+Ireland,51,26504.47085,TRUE
+Ireland,53,6581.96824,TRUE
+Ireland,77,5993.147024,TRUE
+Ireland,213,124295.9159,TRUE
+Ireland,228,133880.2683,TRUE
+Ireland,269,15171.62496,TRUE
+Ireland,296,43692.55808,TRUE
+Ireland,175,70802.39066,TRUE
+Ireland,12,36715.19395,TRUE
+Ireland,13,74728.86082,TRUE
+Ireland,108,12577.92841,TRUE
+Ireland,165,14797.07017,TRUE
+Ireland,215,105585.0293,TRUE
+Ireland,261,8946.089355,TRUE
+Ireland,281,338624,FALSE
+Ireland,302,27087.34387,TRUE
+Ireland,310,36133,TRUE
+Ireland,106,13595.99028,TRUE
+Ireland,30,62885.73079,TRUE
+Ireland,91,55000,FALSE
+Ireland,192,3780098.195,TRUE
+Ireland,249,137500,FALSE
+Ireland,308,35296.76443,TRUE
+Ireland,116,98484.54468,TRUE
+Ireland,234,8162.890747,TRUE
+Ireland,88,138218.959,TRUE
+Ireland,227,9358.848173,TRUE
+Ireland,8,21599.0332,TRUE
+Ireland,115,186672.4488,TRUE
+Ireland,146,28645.96233,TRUE
+Ireland,257,14862.84549,TRUE
+Ireland,39,10075.63454,TRUE
+Ireland,61,218943.5096,TRUE
+Ireland,76,100326.9844,TRUE
+Ireland,268,27005.25,TRUE
+Ireland,194,9390.783666,TRUE
+Ireland,198,5299.135169,TRUE
+Ireland,245,11957.75,TRUE
+Ireland,86,15341.61704,TRUE
+Ireland,247,27947.125,TRUE
+Ireland,15,5922.875,TRUE
+Ireland,135,5719.346191,TRUE
+Ireland,65,4252.65625,TRUE
+Ireland,70,8796.273438,TRUE
+Ireland,314,4472.643433,TRUE
+Ireland,133,6124.625,TRUE
+Ireland,240,4373.4375,TRUE
+Ireland,148,23186,TRUE
+Ireland,31,5157,TRUE
+Israel,4,223684,FALSE
+Israel,5,7484.490489,TRUE
+Israel,7,331126,FALSE
+Israel,8,114035,FALSE
+Israel,17,22358,FALSE
+Israel,105,173134,FALSE
+Israel,120,83126,FALSE
+Israel,161,8730.264786,TRUE
+Israel,169,229983,FALSE
+Israel,179,239032,FALSE
+Israel,180,7520.279265,TRUE
+Israel,203,27003,FALSE
+Israel,205,255175,FALSE
+Israel,208,178404,FALSE
+Israel,219,162254,FALSE
+Israel,221,222964,FALSE
+Israel,229,16244.65912,TRUE
+Israel,231,146396,FALSE
+Israel,235,339860,FALSE
+Israel,254,26952.37295,TRUE
+Israel,84,42926,FALSE
+Israel,267,20838,FALSE
+Israel,282,423220.8453,TRUE
+Israel,286,760050.6713,TRUE
+Israel,289,71178,FALSE
+Israel,316,72255.87156,TRUE
+Israel,317,119299,FALSE
+Israel,318,38444,FALSE
+Israel,18,11273.75269,TRUE
+Israel,19,111730,FALSE
+Israel,33,30270.38924,TRUE
+Israel,40,139634,FALSE
+Israel,49,655703,FALSE
+Israel,54,106152,FALSE
+Israel,58,85158,FALSE
+Israel,59,22326.21725,TRUE
+Israel,63,543972,FALSE
+Israel,90,655532,FALSE
+Israel,94,103746,FALSE
+Israel,101,280662,FALSE
+Israel,112,78096,FALSE
+Israel,138,17125.18189,TRUE
+Israel,152,119704.6269,TRUE
+Israel,154,310185,FALSE
+Israel,158,125849,FALSE
+Israel,200,3172,FALSE
+Israel,202,85300.04797,TRUE
+Israel,206,73592,FALSE
+Israel,218,39474,FALSE
+Israel,238,159140,FALSE
+Israel,243,239130,FALSE
+Israel,259,55616.6005,TRUE
+Israel,276,10950.60863,TRUE
+Israel,279,58500,FALSE
+Israel,298,162376,FALSE
+Israel,305,3546,FALSE
+Israel,306,723921,FALSE
+Israel,11,79206,FALSE
+Israel,16,538614,FALSE
+Israel,48,2435,FALSE
+Israel,60,41480,FALSE
+Israel,63,543972,FALSE
+Israel,121,542373,FALSE
+Israel,128,51613,FALSE
+Israel,156,2348,FALSE
+Israel,217,4889,FALSE
+Israel,248,14225.32829,TRUE
+Israel,270,59593,FALSE
+Israel,52,72720.10141,TRUE
+Israel,74,4541.36112,TRUE
+Israel,75,47178.96176,TRUE
+Israel,80,191702,FALSE
+Israel,301,113987.8459,TRUE
+Israel,319,89190.44102,TRUE
+Israel,51,26504.47085,TRUE
+Israel,53,6581.96824,TRUE
+Israel,77,5993.147024,TRUE
+Israel,213,124295.9159,TRUE
+Israel,228,20000,FALSE
+Israel,269,15171.62496,TRUE
+Israel,296,177897,FALSE
+Israel,175,225018,FALSE
+Israel,12,89703,FALSE
+Israel,13,124083,FALSE
+Israel,108,12577.92841,TRUE
+Israel,165,14797.07017,TRUE
+Israel,215,2576,FALSE
+Israel,261,9496,FALSE
+Israel,281,434882,FALSE
+Israel,302,27087.34387,TRUE
+Israel,310,36133,TRUE
+Israel,106,13595.99028,TRUE
+Israel,30,62885.73079,TRUE
+Israel,91,126485.3041,TRUE
+Israel,192,3780098.195,TRUE
+Israel,249,70032.42373,TRUE
+Israel,308,35296.76443,TRUE
+Israel,116,98484.54468,TRUE
+Israel,234,8162.890747,TRUE
+Israel,88,138218.959,TRUE
+Israel,227,9358.848173,TRUE
+Israel,8,114035,FALSE
+Israel,115,186672.4488,TRUE
+Israel,146,28645.96233,TRUE
+Israel,257,14862.84549,TRUE
+Israel,39,10075.63454,TRUE
+Israel,61,218943.5096,TRUE
+Israel,76,100326.9844,TRUE
+Israel,268,27005.25,TRUE
+Israel,194,9390.783666,TRUE
+Israel,198,5299.135169,TRUE
+Israel,245,11957.75,TRUE
+Israel,86,15341.61704,TRUE
+Israel,247,27947.125,TRUE
+Israel,15,5922.875,TRUE
+Israel,135,5719.346191,TRUE
+Israel,65,4252.65625,TRUE
+Israel,70,8796.273438,TRUE
+Israel,314,4472.643433,TRUE
+Israel,133,6124.625,TRUE
+Israel,240,4373.4375,TRUE
+Israel,148,23186,TRUE
+Israel,31,5157,TRUE
+Italy,4,12785,FALSE
+Italy,5,7484.490489,TRUE
+Italy,7,437222,FALSE
+Italy,8,125295,FALSE
+Italy,17,40114,FALSE
+Italy,105,47269,FALSE
+Italy,120,122767,FALSE
+Italy,161,6667,FALSE
+Italy,169,103515,FALSE
+Italy,179,255838,FALSE
+Italy,180,7520.279265,TRUE
+Italy,203,17950,FALSE
+Italy,205,354559,FALSE
+Italy,208,177086,FALSE
+Italy,219,206880,FALSE
+Italy,221,217416,FALSE
+Italy,229,9484,FALSE
+Italy,231,173529,FALSE
+Italy,235,284374,FALSE
+Italy,254,67797,FALSE
+Italy,84,9355.713607,TRUE
+Italy,267,12700,FALSE
+Italy,282,633587,FALSE
+Italy,286,760050.6713,TRUE
+Italy,289,24236,FALSE
+Italy,316,30881,FALSE
+Italy,317,437529,FALSE
+Italy,318,42030,FALSE
+Italy,18,19851,FALSE
+Italy,19,87204,FALSE
+Italy,33,19936,FALSE
+Italy,40,201208,FALSE
+Italy,49,456807,FALSE
+Italy,54,238810,FALSE
+Italy,58,31661,FALSE
+Italy,59,22786,FALSE
+Italy,63,245763,FALSE
+Italy,90,287758,FALSE
+Italy,94,61002.28577,TRUE
+Italy,101,316619,FALSE
+Italy,112,89519,FALSE
+Italy,138,17125.18189,TRUE
+Italy,152,246887,FALSE
+Italy,154,149849,FALSE
+Italy,158,214297,FALSE
+Italy,200,24360,FALSE
+Italy,202,85300.04797,TRUE
+Italy,206,183393.7134,TRUE
+Italy,218,60953,FALSE
+Italy,238,313850,FALSE
+Italy,243,199310,FALSE
+Italy,259,31567,FALSE
+Italy,276,37539,FALSE
+Italy,279,141321,FALSE
+Italy,298,183359,FALSE
+Italy,305,30839,FALSE
+Italy,306,619353,FALSE
+Italy,11,83487,FALSE
+Italy,16,238190,FALSE
+Italy,48,51865,FALSE
+Italy,60,16017,FALSE
+Italy,63,245763,FALSE
+Italy,121,179262,FALSE
+Italy,128,9353.124815,TRUE
+Italy,156,8946,FALSE
+Italy,217,27996,FALSE
+Italy,248,25692,FALSE
+Italy,270,71576,FALSE
+Italy,52,72720.10141,TRUE
+Italy,74,4541.36112,TRUE
+Italy,75,47178.96176,TRUE
+Italy,80,49992.57574,TRUE
+Italy,301,113987.8459,TRUE
+Italy,319,89190.44102,TRUE
+Italy,51,26504.47085,TRUE
+Italy,53,6581.96824,TRUE
+Italy,77,5993.147024,TRUE
+Italy,213,124295.9159,TRUE
+Italy,228,133880.2683,TRUE
+Italy,269,15171.62496,TRUE
+Italy,296,199607,FALSE
+Italy,175,70802.39066,TRUE
+Italy,12,67506,FALSE
+Italy,13,74728.86082,TRUE
+Italy,108,33242,FALSE
+Italy,165,13987,FALSE
+Italy,215,105585.0293,TRUE
+Italy,261,8946.089355,TRUE
+Italy,281,269263,FALSE
+Italy,302,27087.34387,TRUE
+Italy,310,36133,TRUE
+Italy,106,16066,FALSE
+Italy,30,96914,FALSE
+Italy,91,55109,FALSE
+Italy,192,3780098.195,TRUE
+Italy,249,66408,FALSE
+Italy,308,52287,FALSE
+Italy,116,98484.54468,TRUE
+Italy,234,8162.890747,TRUE
+Italy,88,138218.959,TRUE
+Italy,227,9358.848173,TRUE
+Italy,8,125295,FALSE
+Italy,115,186672.4488,TRUE
+Italy,146,28645.96233,TRUE
+Italy,257,14862.84549,TRUE
+Italy,39,10075.63454,TRUE
+Italy,61,218943.5096,TRUE
+Italy,76,100326.9844,TRUE
+Italy,268,27005.25,TRUE
+Italy,194,9390.783666,TRUE
+Italy,198,5299.135169,TRUE
+Italy,245,11957.75,TRUE
+Italy,86,15341.61704,TRUE
+Italy,247,27947.125,TRUE
+Italy,15,5922.875,TRUE
+Italy,135,5719.346191,TRUE
+Italy,65,4252.65625,TRUE
+Italy,70,8796.273438,TRUE
+Italy,314,4472.643433,TRUE
+Italy,133,6124.625,TRUE
+Italy,240,4373.4375,TRUE
+Italy,148,23186,TRUE
+Italy,31,5157,TRUE
+Jamaica,4,20977.52128,TRUE
+Jamaica,5,7484.490489,TRUE
+Jamaica,7,111437.9893,TRUE
+Jamaica,8,47030.54376,TRUE
+Jamaica,17,33099.94094,TRUE
+Jamaica,105,149702.6633,TRUE
+Jamaica,120,115713.1489,TRUE
+Jamaica,161,8730.264786,TRUE
+Jamaica,169,10853,FALSE
+Jamaica,179,170859,FALSE
+Jamaica,180,7520.279265,TRUE
+Jamaica,203,26179.47154,TRUE
+Jamaica,205,140000,FALSE
+Jamaica,208,97422,FALSE
+Jamaica,219,80605.62094,TRUE
+Jamaica,221,53059.48552,TRUE
+Jamaica,229,16244.65912,TRUE
+Jamaica,231,60255.26389,TRUE
+Jamaica,235,167226,FALSE
+Jamaica,254,45333,FALSE
+Jamaica,84,9355.713607,TRUE
+Jamaica,267,9372.487582,TRUE
+Jamaica,282,423220.8453,TRUE
+Jamaica,286,541782,FALSE
+Jamaica,289,9979.922823,TRUE
+Jamaica,316,72255.87156,TRUE
+Jamaica,317,219201,FALSE
+Jamaica,318,32261.2753,TRUE
+Jamaica,18,10517,FALSE
+Jamaica,19,77366.60983,TRUE
+Jamaica,33,10680,FALSE
+Jamaica,40,176036,FALSE
+Jamaica,49,163188,FALSE
+Jamaica,54,107807,FALSE
+Jamaica,58,74040.89691,TRUE
+Jamaica,59,22326.21725,TRUE
+Jamaica,63,143328,FALSE
+Jamaica,90,160115,FALSE
+Jamaica,94,61002.28577,TRUE
+Jamaica,101,115300,FALSE
+Jamaica,112,122104.9439,TRUE
+Jamaica,138,17125.18189,TRUE
+Jamaica,152,119704.6269,TRUE
+Jamaica,154,166667,FALSE
+Jamaica,158,142978,FALSE
+Jamaica,200,22918.25267,TRUE
+Jamaica,202,100605,FALSE
+Jamaica,206,150861,FALSE
+Jamaica,218,52990.31222,TRUE
+Jamaica,238,192295,FALSE
+Jamaica,243,112174.5654,TRUE
+Jamaica,259,55616.6005,TRUE
+Jamaica,276,10950.60863,TRUE
+Jamaica,279,165068,FALSE
+Jamaica,298,78573,FALSE
+Jamaica,305,20752,FALSE
+Jamaica,306,192213,FALSE
+Jamaica,11,178064.2799,TRUE
+Jamaica,16,75041,FALSE
+Jamaica,48,27222.34375,TRUE
+Jamaica,60,22383.25858,TRUE
+Jamaica,63,143328,FALSE
+Jamaica,121,254578,FALSE
+Jamaica,128,12453,FALSE
+Jamaica,156,10200.29705,TRUE
+Jamaica,217,11092,FALSE
+Jamaica,248,14225.32829,TRUE
+Jamaica,270,9151.63574,TRUE
+Jamaica,52,184896,FALSE
+Jamaica,74,3106,FALSE
+Jamaica,75,60815,FALSE
+Jamaica,80,7504,FALSE
+Jamaica,301,113987.8459,TRUE
+Jamaica,319,170549,FALSE
+Jamaica,51,26504.47085,TRUE
+Jamaica,53,6581.96824,TRUE
+Jamaica,77,9214,FALSE
+Jamaica,213,124295.9159,TRUE
+Jamaica,228,181856,FALSE
+Jamaica,269,7350,FALSE
+Jamaica,296,174442,FALSE
+Jamaica,175,54000,FALSE
+Jamaica,12,36715.19395,TRUE
+Jamaica,13,63874,FALSE
+Jamaica,108,12577.92841,TRUE
+Jamaica,165,14797.07017,TRUE
+Jamaica,215,209317,FALSE
+Jamaica,261,8946.089355,TRUE
+Jamaica,281,136069.2843,TRUE
+Jamaica,302,27087.34387,TRUE
+Jamaica,310,36133,TRUE
+Jamaica,106,13595.99028,TRUE
+Jamaica,30,62885.73079,TRUE
+Jamaica,91,126485.3041,TRUE
+Jamaica,192,3780098.195,TRUE
+Jamaica,249,70032.42373,TRUE
+Jamaica,308,35296.76443,TRUE
+Jamaica,116,98484.54468,TRUE
+Jamaica,234,8162.890747,TRUE
+Jamaica,88,138218.959,TRUE
+Jamaica,227,11448,FALSE
+Jamaica,8,21599.0332,TRUE
+Jamaica,115,38925,FALSE
+Jamaica,146,28645.96233,TRUE
+Jamaica,257,14862.84549,TRUE
+Jamaica,39,10075.63454,TRUE
+Jamaica,61,218943.5096,TRUE
+Jamaica,76,100326.9844,TRUE
+Jamaica,268,27005.25,TRUE
+Jamaica,194,9390.783666,TRUE
+Jamaica,198,5299.135169,TRUE
+Jamaica,245,11957.75,TRUE
+Jamaica,86,10759,FALSE
+Jamaica,247,27947.125,TRUE
+Jamaica,15,5922.875,TRUE
+Jamaica,135,5719.346191,TRUE
+Jamaica,65,4252.65625,TRUE
+Jamaica,70,8796.273438,TRUE
+Jamaica,314,4472.643433,TRUE
+Jamaica,133,6124.625,TRUE
+Jamaica,240,4373.4375,TRUE
+Jamaica,148,23186,TRUE
+Jamaica,31,5157,TRUE
+Japan,4,20977.52128,TRUE
+Japan,5,7484.490489,TRUE
+Japan,7,207880,FALSE
+Japan,8,59423,FALSE
+Japan,17,27757,FALSE
+Japan,105,138606,FALSE
+Japan,120,105412,FALSE
+Japan,161,8730.264786,TRUE
+Japan,169,26340,FALSE
+Japan,179,225111,FALSE
+Japan,180,8352,FALSE
+Japan,203,26179.47154,TRUE
+Japan,205,481783,FALSE
+Japan,208,103959,FALSE
+Japan,219,131102,FALSE
+Japan,221,204335,FALSE
+Japan,229,16244.65912,TRUE
+Japan,231,80986,FALSE
+Japan,235,311951,FALSE
+Japan,254,54388,FALSE
+Japan,84,9355.713607,TRUE
+Japan,267,5207,FALSE
+Japan,282,534171,FALSE
+Japan,286,544616,FALSE
+Japan,289,9979.922823,TRUE
+Japan,316,72255.87156,TRUE
+Japan,317,324231,FALSE
+Japan,318,36884,FALSE
+Japan,18,11779,FALSE
+Japan,19,77366.60983,TRUE
+Japan,33,10058,FALSE
+Japan,40,429628,FALSE
+Japan,49,346748,FALSE
+Japan,54,107273,FALSE
+Japan,58,44796,FALSE
+Japan,59,8549,FALSE
+Japan,63,442813,FALSE
+Japan,90,504862,FALSE
+Japan,94,61002.28577,TRUE
+Japan,101,329741,FALSE
+Japan,112,86192,FALSE
+Japan,138,20790,FALSE
+Japan,152,119704.6269,TRUE
+Japan,154,158101,FALSE
+Japan,158,268763,FALSE
+Japan,200,19164,FALSE
+Japan,202,85300.04797,TRUE
+Japan,206,215407,FALSE
+Japan,218,66495,FALSE
+Japan,238,121230,FALSE
+Japan,243,56898,FALSE
+Japan,259,55616.6005,TRUE
+Japan,276,15867,FALSE
+Japan,279,118617,FALSE
+Japan,298,194000,FALSE
+Japan,305,22375,FALSE
+Japan,306,614215,FALSE
+Japan,11,178064.2799,TRUE
+Japan,16,32895,FALSE
+Japan,48,27222.34375,TRUE
+Japan,60,22383.25858,TRUE
+Japan,63,442813,FALSE
+Japan,121,115777.4722,TRUE
+Japan,128,23664,FALSE
+Japan,156,10200.29705,TRUE
+Japan,217,25540,FALSE
+Japan,248,18434,FALSE
+Japan,270,9151.63574,TRUE
+Japan,52,72720.10141,TRUE
+Japan,74,4541.36112,TRUE
+Japan,75,47178.96176,TRUE
+Japan,80,97882,FALSE
+Japan,301,124946,FALSE
+Japan,319,225917,FALSE
+Japan,51,26504.47085,TRUE
+Japan,53,6581.96824,TRUE
+Japan,77,5993.147024,TRUE
+Japan,213,124295.9159,TRUE
+Japan,228,238030,FALSE
+Japan,269,15171.62496,TRUE
+Japan,296,239083,FALSE
+Japan,175,72075,FALSE
+Japan,12,53136,FALSE
+Japan,13,74728.86082,TRUE
+Japan,108,12577.92841,TRUE
+Japan,165,14797.07017,TRUE
+Japan,215,105585.0293,TRUE
+Japan,261,8946.089355,TRUE
+Japan,281,294323,FALSE
+Japan,302,18195,FALSE
+Japan,310,36133,TRUE
+Japan,106,13595.99028,TRUE
+Japan,30,62885.73079,TRUE
+Japan,91,14777,FALSE
+Japan,192,3780098.195,TRUE
+Japan,249,70032.42373,TRUE
+Japan,308,35296.76443,TRUE
+Japan,116,98484.54468,TRUE
+Japan,234,8162.890747,TRUE
+Japan,88,138218.959,TRUE
+Japan,227,9358.848173,TRUE
+Japan,8,59423,FALSE
+Japan,115,306743,FALSE
+Japan,146,28645.96233,TRUE
+Japan,257,14862.84549,TRUE
+Japan,39,4752,FALSE
+Japan,61,218943.5096,TRUE
+Japan,76,100326.9844,TRUE
+Japan,268,27005.25,TRUE
+Japan,194,9390.783666,TRUE
+Japan,198,5299.135169,TRUE
+Japan,245,11957.75,TRUE
+Japan,86,10352,FALSE
+Japan,247,27947.125,TRUE
+Japan,15,5922.875,TRUE
+Japan,135,5719.346191,TRUE
+Japan,65,4252.65625,TRUE
+Japan,70,8796.273438,TRUE
+Japan,314,4472.643433,TRUE
+Japan,133,6124.625,TRUE
+Japan,240,4373.4375,TRUE
+Japan,148,23186,TRUE
+Japan,31,5157,TRUE
+Jordan,4,113204,FALSE
+Jordan,5,7484.490489,TRUE
+Jordan,7,231046,FALSE
+Jordan,8,116585,FALSE
+Jordan,17,9682,FALSE
+Jordan,105,53057,FALSE
+Jordan,120,160309,FALSE
+Jordan,161,8730.264786,TRUE
+Jordan,169,404127,FALSE
+Jordan,179,391720,FALSE
+Jordan,180,18966,FALSE
+Jordan,203,18106,FALSE
+Jordan,205,248640,FALSE
+Jordan,208,191602,FALSE
+Jordan,219,213585,FALSE
+Jordan,221,121164,FALSE
+Jordan,229,32126,FALSE
+Jordan,231,126362,FALSE
+Jordan,235,400507,FALSE
+Jordan,254,26952.37295,TRUE
+Jordan,84,9355.713607,TRUE
+Jordan,267,1667,FALSE
+Jordan,282,423220.8453,TRUE
+Jordan,286,760050.6713,TRUE
+Jordan,289,9979.922823,TRUE
+Jordan,316,72255.87156,TRUE
+Jordan,317,437743,FALSE
+Jordan,318,11221,FALSE
+Jordan,18,11273.75269,TRUE
+Jordan,19,304902,FALSE
+Jordan,33,30270.38924,TRUE
+Jordan,40,476629,FALSE
+Jordan,49,423468,FALSE
+Jordan,54,318596,FALSE
+Jordan,58,69571,FALSE
+Jordan,59,22326.21725,TRUE
+Jordan,63,436823,FALSE
+Jordan,90,1064022,FALSE
+Jordan,94,49414,FALSE
+Jordan,101,375506,FALSE
+Jordan,112,173053,FALSE
+Jordan,138,17125.18189,TRUE
+Jordan,152,119704.6269,TRUE
+Jordan,154,198249,FALSE
+Jordan,158,398408,FALSE
+Jordan,200,22918.25267,TRUE
+Jordan,202,86406,FALSE
+Jordan,206,124228,FALSE
+Jordan,218,117655,FALSE
+Jordan,238,292272,FALSE
+Jordan,243,112174.5654,TRUE
+Jordan,259,55616.6005,TRUE
+Jordan,276,10950.60863,TRUE
+Jordan,279,316989,FALSE
+Jordan,298,199943,FALSE
+Jordan,305,15590.0347,TRUE
+Jordan,306,678779,FALSE
+Jordan,11,178064.2799,TRUE
+Jordan,16,445551,FALSE
+Jordan,48,27222.34375,TRUE
+Jordan,60,29533,FALSE
+Jordan,63,436823,FALSE
+Jordan,121,203596,FALSE
+Jordan,128,20000,FALSE
+Jordan,156,10769,FALSE
+Jordan,217,21196.4891,TRUE
+Jordan,248,14225.32829,TRUE
+Jordan,270,244296,FALSE
+Jordan,52,72720.10141,TRUE
+Jordan,74,4541.36112,TRUE
+Jordan,75,47178.96176,TRUE
+Jordan,80,49992.57574,TRUE
+Jordan,301,113987.8459,TRUE
+Jordan,319,89190.44102,TRUE
+Jordan,51,26504.47085,TRUE
+Jordan,53,6581.96824,TRUE
+Jordan,77,5993.147024,TRUE
+Jordan,213,124295.9159,TRUE
+Jordan,228,133880.2683,TRUE
+Jordan,269,15171.62496,TRUE
+Jordan,296,43692.55808,TRUE
+Jordan,175,70802.39066,TRUE
+Jordan,12,36715.19395,TRUE
+Jordan,13,74728.86082,TRUE
+Jordan,108,12577.92841,TRUE
+Jordan,165,14797.07017,TRUE
+Jordan,215,105585.0293,TRUE
+Jordan,261,8946.089355,TRUE
+Jordan,281,237371,FALSE
+Jordan,302,27087.34387,TRUE
+Jordan,310,36133,TRUE
+Jordan,106,13595.99028,TRUE
+Jordan,30,62885.73079,TRUE
+Jordan,91,126485.3041,TRUE
+Jordan,192,3780098.195,TRUE
+Jordan,249,70032.42373,TRUE
+Jordan,308,35296.76443,TRUE
+Jordan,116,98484.54468,TRUE
+Jordan,234,8162.890747,TRUE
+Jordan,88,138218.959,TRUE
+Jordan,227,9358.848173,TRUE
+Jordan,8,116585,FALSE
+Jordan,115,186672.4488,TRUE
+Jordan,146,28645.96233,TRUE
+Jordan,257,14862.84549,TRUE
+Jordan,39,10075.63454,TRUE
+Jordan,61,218943.5096,TRUE
+Jordan,76,100326.9844,TRUE
+Jordan,268,27005.25,TRUE
+Jordan,194,9390.783666,TRUE
+Jordan,198,5299.135169,TRUE
+Jordan,245,11957.75,TRUE
+Jordan,86,15341.61704,TRUE
+Jordan,247,27947.125,TRUE
+Jordan,15,5922.875,TRUE
+Jordan,135,5719.346191,TRUE
+Jordan,65,4252.65625,TRUE
+Jordan,70,8796.273438,TRUE
+Jordan,314,4472.643433,TRUE
+Jordan,133,6124.625,TRUE
+Jordan,240,4373.4375,TRUE
+Jordan,148,23186,TRUE
+Jordan,31,5157,TRUE
+Kazakhstan,4,11188,FALSE
+Kazakhstan,5,7484.490489,TRUE
+Kazakhstan,7,57943,FALSE
+Kazakhstan,8,55446,FALSE
+Kazakhstan,17,17060,FALSE
+Kazakhstan,105,149702.6633,TRUE
+Kazakhstan,120,51575,FALSE
+Kazakhstan,161,8866,FALSE
+Kazakhstan,169,56423,FALSE
+Kazakhstan,179,206928,FALSE
+Kazakhstan,180,10957,FALSE
+Kazakhstan,203,26179.47154,TRUE
+Kazakhstan,205,278303,FALSE
+Kazakhstan,208,84004.18102,TRUE
+Kazakhstan,219,32078,FALSE
+Kazakhstan,221,74512,FALSE
+Kazakhstan,229,16244.65912,TRUE
+Kazakhstan,231,40769,FALSE
+Kazakhstan,235,190381,FALSE
+Kazakhstan,254,47480,FALSE
+Kazakhstan,84,26159,FALSE
+Kazakhstan,267,9372.487582,TRUE
+Kazakhstan,282,285494,FALSE
+Kazakhstan,286,760050.6713,TRUE
+Kazakhstan,289,9348,FALSE
+Kazakhstan,316,25325,FALSE
+Kazakhstan,317,233983,FALSE
+Kazakhstan,318,12111,FALSE
+Kazakhstan,18,12980,FALSE
+Kazakhstan,19,23557,FALSE
+Kazakhstan,33,30270.38924,TRUE
+Kazakhstan,40,263794,FALSE
+Kazakhstan,49,274659,FALSE
+Kazakhstan,54,212822,FALSE
+Kazakhstan,58,76605,FALSE
+Kazakhstan,59,22326.21725,TRUE
+Kazakhstan,63,21307,FALSE
+Kazakhstan,90,227468,FALSE
+Kazakhstan,94,61002.28577,TRUE
+Kazakhstan,101,220145,FALSE
+Kazakhstan,112,194657,FALSE
+Kazakhstan,138,17125.18189,TRUE
+Kazakhstan,152,246398,FALSE
+Kazakhstan,154,96782.90416,TRUE
+Kazakhstan,158,96473.15601,TRUE
+Kazakhstan,200,15978,FALSE
+Kazakhstan,202,85300.04797,TRUE
+Kazakhstan,206,182493,FALSE
+Kazakhstan,218,41040,FALSE
+Kazakhstan,238,116960.1876,TRUE
+Kazakhstan,243,50873,FALSE
+Kazakhstan,259,11456,FALSE
+Kazakhstan,276,21788,FALSE
+Kazakhstan,279,177754.1672,TRUE
+Kazakhstan,298,120463.1286,TRUE
+Kazakhstan,305,28291,FALSE
+Kazakhstan,306,243385,FALSE
+Kazakhstan,11,153763,FALSE
+Kazakhstan,16,74389.59543,TRUE
+Kazakhstan,48,27222.34375,TRUE
+Kazakhstan,60,8482,FALSE
+Kazakhstan,63,21307,FALSE
+Kazakhstan,121,115777.4722,TRUE
+Kazakhstan,128,14341,FALSE
+Kazakhstan,156,13439,FALSE
+Kazakhstan,217,12670,FALSE
+Kazakhstan,248,10537,FALSE
+Kazakhstan,270,11570,FALSE
+Kazakhstan,52,72720.10141,TRUE
+Kazakhstan,74,4541.36112,TRUE
+Kazakhstan,75,47178.96176,TRUE
+Kazakhstan,80,254794,FALSE
+Kazakhstan,301,113987.8459,TRUE
+Kazakhstan,319,89190.44102,TRUE
+Kazakhstan,51,26504.47085,TRUE
+Kazakhstan,53,6581.96824,TRUE
+Kazakhstan,77,5993.147024,TRUE
+Kazakhstan,213,124295.9159,TRUE
+Kazakhstan,228,133880.2683,TRUE
+Kazakhstan,269,15171.62496,TRUE
+Kazakhstan,296,43692.55808,TRUE
+Kazakhstan,175,70802.39066,TRUE
+Kazakhstan,12,36715.19395,TRUE
+Kazakhstan,13,74728.86082,TRUE
+Kazakhstan,108,12577.92841,TRUE
+Kazakhstan,165,14797.07017,TRUE
+Kazakhstan,215,105585.0293,TRUE
+Kazakhstan,261,7490,FALSE
+Kazakhstan,281,75969,FALSE
+Kazakhstan,302,27087.34387,TRUE
+Kazakhstan,310,36133,TRUE
+Kazakhstan,106,13595.99028,TRUE
+Kazakhstan,30,62885.73079,TRUE
+Kazakhstan,91,126485.3041,TRUE
+Kazakhstan,192,3780098.195,TRUE
+Kazakhstan,249,70032.42373,TRUE
+Kazakhstan,308,35296.76443,TRUE
+Kazakhstan,116,98484.54468,TRUE
+Kazakhstan,234,8162.890747,TRUE
+Kazakhstan,88,138218.959,TRUE
+Kazakhstan,227,9358.848173,TRUE
+Kazakhstan,8,55446,FALSE
+Kazakhstan,115,186672.4488,TRUE
+Kazakhstan,146,28645.96233,TRUE
+Kazakhstan,257,14862.84549,TRUE
+Kazakhstan,39,9106,FALSE
+Kazakhstan,61,250618,FALSE
+Kazakhstan,76,100326.9844,TRUE
+Kazakhstan,268,27005.25,TRUE
+Kazakhstan,194,4154,FALSE
+Kazakhstan,198,5299.135169,TRUE
+Kazakhstan,245,11957.75,TRUE
+Kazakhstan,86,15341.61704,TRUE
+Kazakhstan,247,27947.125,TRUE
+Kazakhstan,15,5922.875,TRUE
+Kazakhstan,135,5719.346191,TRUE
+Kazakhstan,65,4252.65625,TRUE
+Kazakhstan,70,8796.273438,TRUE
+Kazakhstan,314,4472.643433,TRUE
+Kazakhstan,133,6124.625,TRUE
+Kazakhstan,240,4373.4375,TRUE
+Kazakhstan,148,23186,TRUE
+Kazakhstan,31,5157,TRUE
+Kenya,4,20977.52128,TRUE
+Kenya,5,4016,FALSE
+Kenya,7,75976,FALSE
+Kenya,8,47666,FALSE
+Kenya,17,37812,FALSE
+Kenya,105,149702.6633,TRUE
+Kenya,120,115713.1489,TRUE
+Kenya,161,9882,FALSE
+Kenya,169,14284,FALSE
+Kenya,179,121608.9919,TRUE
+Kenya,180,6111,FALSE
+Kenya,203,26179.47154,TRUE
+Kenya,205,143192,FALSE
+Kenya,208,117272,FALSE
+Kenya,219,101163,FALSE
+Kenya,221,168189,FALSE
+Kenya,229,16244.65912,TRUE
+Kenya,231,92512,FALSE
+Kenya,235,91520,FALSE
+Kenya,254,40273,FALSE
+Kenya,84,5505,FALSE
+Kenya,267,4193,FALSE
+Kenya,282,423220.8453,TRUE
+Kenya,286,816637,FALSE
+Kenya,289,10100,FALSE
+Kenya,316,72255.87156,TRUE
+Kenya,317,218322,FALSE
+Kenya,318,14525,FALSE
+Kenya,18,6215,FALSE
+Kenya,19,108399,FALSE
+Kenya,33,30270.38924,TRUE
+Kenya,40,288142,FALSE
+Kenya,49,161564,FALSE
+Kenya,54,142576,FALSE
+Kenya,58,74040.89691,TRUE
+Kenya,59,22326.21725,TRUE
+Kenya,63,12077,FALSE
+Kenya,90,67978,FALSE
+Kenya,94,23201,FALSE
+Kenya,101,138512.4356,TRUE
+Kenya,112,119556,FALSE
+Kenya,138,17125.18189,TRUE
+Kenya,152,47974,FALSE
+Kenya,154,111052,FALSE
+Kenya,158,80424,FALSE
+Kenya,200,9510,FALSE
+Kenya,202,76376,FALSE
+Kenya,206,183393.7134,TRUE
+Kenya,218,48869,FALSE
+Kenya,238,116960.1876,TRUE
+Kenya,243,112174.5654,TRUE
+Kenya,259,55616.6005,TRUE
+Kenya,276,9061,FALSE
+Kenya,279,134573,FALSE
+Kenya,298,90660,FALSE
+Kenya,305,7814,FALSE
+Kenya,306,187050,FALSE
+Kenya,11,46282,FALSE
+Kenya,16,203572,FALSE
+Kenya,48,27222.34375,TRUE
+Kenya,60,3544,FALSE
+Kenya,63,12077,FALSE
+Kenya,121,146527,FALSE
+Kenya,128,24516,FALSE
+Kenya,156,7551,FALSE
+Kenya,217,21196.4891,TRUE
+Kenya,248,14225.32829,TRUE
+Kenya,270,6336,FALSE
+Kenya,52,122886,FALSE
+Kenya,74,4541.36112,TRUE
+Kenya,75,19330,FALSE
+Kenya,80,49992.57574,TRUE
+Kenya,301,113987.8459,TRUE
+Kenya,319,97697,FALSE
+Kenya,51,8365,FALSE
+Kenya,53,2308,FALSE
+Kenya,77,4044,FALSE
+Kenya,213,124295.9159,TRUE
+Kenya,228,198060,FALSE
+Kenya,269,8873,FALSE
+Kenya,296,147797,FALSE
+Kenya,175,135216,FALSE
+Kenya,12,55833,FALSE
+Kenya,13,170835,FALSE
+Kenya,108,12577.92841,TRUE
+Kenya,165,14797.07017,TRUE
+Kenya,215,144474,FALSE
+Kenya,261,8946.089355,TRUE
+Kenya,281,124110,FALSE
+Kenya,302,21648,FALSE
+Kenya,310,36133,TRUE
+Kenya,106,13595.99028,TRUE
+Kenya,30,62885.73079,TRUE
+Kenya,91,126485.3041,TRUE
+Kenya,192,3780098.195,TRUE
+Kenya,249,70032.42373,TRUE
+Kenya,308,35296.76443,TRUE
+Kenya,116,98484.54468,TRUE
+Kenya,234,8162.890747,TRUE
+Kenya,88,138218.959,TRUE
+Kenya,227,16123,FALSE
+Kenya,8,47666,FALSE
+Kenya,115,105712,FALSE
+Kenya,146,28645.96233,TRUE
+Kenya,257,14862.84549,TRUE
+Kenya,39,10075.63454,TRUE
+Kenya,61,218943.5096,TRUE
+Kenya,76,100326.9844,TRUE
+Kenya,268,27005.25,TRUE
+Kenya,194,9390.783666,TRUE
+Kenya,198,5611,FALSE
+Kenya,245,11957.75,TRUE
+Kenya,86,6444,FALSE
+Kenya,247,27947.125,TRUE
+Kenya,15,5922.875,TRUE
+Kenya,135,5719.346191,TRUE
+Kenya,65,4252.65625,TRUE
+Kenya,70,9882,FALSE
+Kenya,314,6838,FALSE
+Kenya,133,6124.625,TRUE
+Kenya,240,1790,FALSE
+Kenya,148,23186,TRUE
+Kenya,31,5157,TRUE
+Kiribati,4,20977.52128,TRUE
+Kiribati,5,7484.490489,TRUE
+Kiribati,7,111437.9893,TRUE
+Kiribati,8,47030.54376,TRUE
+Kiribati,17,33099.94094,TRUE
+Kiribati,105,149702.6633,TRUE
+Kiribati,120,115713.1489,TRUE
+Kiribati,161,8730.264786,TRUE
+Kiribati,169,16777.49735,TRUE
+Kiribati,179,121608.9919,TRUE
+Kiribati,180,7520.279265,TRUE
+Kiribati,203,26179.47154,TRUE
+Kiribati,205,158255.8483,TRUE
+Kiribati,208,84004.18102,TRUE
+Kiribati,219,80605.62094,TRUE
+Kiribati,221,53059.48552,TRUE
+Kiribati,229,16244.65912,TRUE
+Kiribati,231,60255.26389,TRUE
+Kiribati,235,172280.9273,TRUE
+Kiribati,254,26952.37295,TRUE
+Kiribati,84,9355.713607,TRUE
+Kiribati,267,9372.487582,TRUE
+Kiribati,282,423220.8453,TRUE
+Kiribati,286,760050.6713,TRUE
+Kiribati,289,9979.922823,TRUE
+Kiribati,316,72255.87156,TRUE
+Kiribati,317,188762.6372,TRUE
+Kiribati,318,32261.2753,TRUE
+Kiribati,18,11273.75269,TRUE
+Kiribati,19,77366.60983,TRUE
+Kiribati,33,30270.38924,TRUE
+Kiribati,40,180987.6885,TRUE
+Kiribati,49,247408.5214,TRUE
+Kiribati,54,175365.1249,TRUE
+Kiribati,58,74040.89691,TRUE
+Kiribati,59,22326.21725,TRUE
+Kiribati,63,234336.5313,TRUE
+Kiribati,90,194487.8189,TRUE
+Kiribati,94,61002.28577,TRUE
+Kiribati,101,138512.4356,TRUE
+Kiribati,112,122104.9439,TRUE
+Kiribati,138,17125.18189,TRUE
+Kiribati,152,119704.6269,TRUE
+Kiribati,154,96782.90416,TRUE
+Kiribati,158,96473.15601,TRUE
+Kiribati,200,22918.25267,TRUE
+Kiribati,202,85300.04797,TRUE
+Kiribati,206,183393.7134,TRUE
+Kiribati,218,52990.31222,TRUE
+Kiribati,238,116960.1876,TRUE
+Kiribati,243,112174.5654,TRUE
+Kiribati,259,55616.6005,TRUE
+Kiribati,276,10950.60863,TRUE
+Kiribati,279,177754.1672,TRUE
+Kiribati,298,120463.1286,TRUE
+Kiribati,305,15590.0347,TRUE
+Kiribati,306,131681.4608,TRUE
+Kiribati,11,178064.2799,TRUE
+Kiribati,16,51719,FALSE
+Kiribati,48,27222.34375,TRUE
+Kiribati,60,22383.25858,TRUE
+Kiribati,63,11715.28525,TRUE
+Kiribati,121,115777.4722,TRUE
+Kiribati,128,9353.124815,TRUE
+Kiribati,156,10200.29705,TRUE
+Kiribati,217,21196.4891,TRUE
+Kiribati,248,14225.32829,TRUE
+Kiribati,270,9151.63574,TRUE
+Kiribati,52,72720.10141,TRUE
+Kiribati,74,4541.36112,TRUE
+Kiribati,75,22397,FALSE
+Kiribati,80,49992.57574,TRUE
+Kiribati,301,59849,FALSE
+Kiribati,319,89190.44102,TRUE
+Kiribati,51,26504.47085,TRUE
+Kiribati,53,6581.96824,TRUE
+Kiribati,77,5993.147024,TRUE
+Kiribati,213,124295.9159,TRUE
+Kiribati,228,133880.2683,TRUE
+Kiribati,269,15171.62496,TRUE
+Kiribati,296,43692.55808,TRUE
+Kiribati,175,70802.39066,TRUE
+Kiribati,12,36715.19395,TRUE
+Kiribati,13,74728.86082,TRUE
+Kiribati,108,12577.92841,TRUE
+Kiribati,165,14797.07017,TRUE
+Kiribati,215,105585.0293,TRUE
+Kiribati,261,8946.089355,TRUE
+Kiribati,281,136069.2843,TRUE
+Kiribati,302,27087.34387,TRUE
+Kiribati,310,36133,TRUE
+Kiribati,106,13595.99028,TRUE
+Kiribati,30,62885.73079,TRUE
+Kiribati,91,126485.3041,TRUE
+Kiribati,192,3780098.195,TRUE
+Kiribati,249,70032.42373,TRUE
+Kiribati,308,35296.76443,TRUE
+Kiribati,116,98484.54468,TRUE
+Kiribati,234,8162.890747,TRUE
+Kiribati,88,138218.959,TRUE
+Kiribati,227,9358.848173,TRUE
+Kiribati,8,21599.0332,TRUE
+Kiribati,115,186672.4488,TRUE
+Kiribati,146,28645.96233,TRUE
+Kiribati,257,14862.84549,TRUE
+Kiribati,39,10075.63454,TRUE
+Kiribati,61,218943.5096,TRUE
+Kiribati,76,100326.9844,TRUE
+Kiribati,268,27005.25,TRUE
+Kiribati,194,9390.783666,TRUE
+Kiribati,198,5299.135169,TRUE
+Kiribati,245,11957.75,TRUE
+Kiribati,86,15341.61704,TRUE
+Kiribati,247,27947.125,TRUE
+Kiribati,15,5922.875,TRUE
+Kiribati,135,5719.346191,TRUE
+Kiribati,65,4252.65625,TRUE
+Kiribati,70,8796.273438,TRUE
+Kiribati,314,4472.643433,TRUE
+Kiribati,133,6124.625,TRUE
+Kiribati,240,4373.4375,TRUE
+Kiribati,148,23186,TRUE
+Kiribati,31,5157,TRUE
+Kuwait,4,20977.52128,TRUE
+Kuwait,5,7484.490489,TRUE
+Kuwait,7,111437.9893,TRUE
+Kuwait,8,47030.54376,TRUE
+Kuwait,17,38613,FALSE
+Kuwait,105,149702.6633,TRUE
+Kuwait,120,83547,FALSE
+Kuwait,161,8730.264786,TRUE
+Kuwait,169,167860,FALSE
+Kuwait,179,425409,FALSE
+Kuwait,180,7520.279265,TRUE
+Kuwait,203,17020,FALSE
+Kuwait,205,377751,FALSE
+Kuwait,208,216710,FALSE
+Kuwait,219,80605.62094,TRUE
+Kuwait,221,53059.48552,TRUE
+Kuwait,229,16244.65912,TRUE
+Kuwait,231,60255.26389,TRUE
+Kuwait,235,282143,FALSE
+Kuwait,254,26952.37295,TRUE
+Kuwait,84,9355.713607,TRUE
+Kuwait,267,9372.487582,TRUE
+Kuwait,282,423220.8453,TRUE
+Kuwait,286,760050.6713,TRUE
+Kuwait,289,9979.922823,TRUE
+Kuwait,316,72255.87156,TRUE
+Kuwait,317,463396,FALSE
+Kuwait,318,48882,FALSE
+Kuwait,18,11273.75269,TRUE
+Kuwait,19,140000,FALSE
+Kuwait,33,30270.38924,TRUE
+Kuwait,40,543091,FALSE
+Kuwait,49,456588,FALSE
+Kuwait,54,457877,FALSE
+Kuwait,58,74040.89691,TRUE
+Kuwait,59,22326.21725,TRUE
+Kuwait,63,815179,FALSE
+Kuwait,90,1071634,FALSE
+Kuwait,94,325660,FALSE
+Kuwait,101,822930,FALSE
+Kuwait,112,177515,FALSE
+Kuwait,138,17125.18189,TRUE
+Kuwait,152,119704.6269,TRUE
+Kuwait,154,203330,FALSE
+Kuwait,158,614863,FALSE
+Kuwait,200,22918.25267,TRUE
+Kuwait,202,232835,FALSE
+Kuwait,206,183393.7134,TRUE
+Kuwait,218,52990.31222,TRUE
+Kuwait,238,361994,FALSE
+Kuwait,243,112174.5654,TRUE
+Kuwait,259,55616.6005,TRUE
+Kuwait,276,10950.60863,TRUE
+Kuwait,279,281250,FALSE
+Kuwait,298,120463.1286,TRUE
+Kuwait,305,15590.0347,TRUE
+Kuwait,306,1230783,FALSE
+Kuwait,11,178064.2799,TRUE
+Kuwait,16,74389.59543,TRUE
+Kuwait,48,27222.34375,TRUE
+Kuwait,60,22383.25858,TRUE
+Kuwait,63,815179,FALSE
+Kuwait,121,115777.4722,TRUE
+Kuwait,128,9353.124815,TRUE
+Kuwait,156,10200.29705,TRUE
+Kuwait,217,21196.4891,TRUE
+Kuwait,248,14225.32829,TRUE
+Kuwait,270,9151.63574,TRUE
+Kuwait,52,72720.10141,TRUE
+Kuwait,74,4541.36112,TRUE
+Kuwait,75,47178.96176,TRUE
+Kuwait,80,49992.57574,TRUE
+Kuwait,301,113987.8459,TRUE
+Kuwait,319,89190.44102,TRUE
+Kuwait,51,26504.47085,TRUE
+Kuwait,53,6581.96824,TRUE
+Kuwait,77,5993.147024,TRUE
+Kuwait,213,124295.9159,TRUE
+Kuwait,228,133880.2683,TRUE
+Kuwait,269,15171.62496,TRUE
+Kuwait,296,43692.55808,TRUE
+Kuwait,175,70802.39066,TRUE
+Kuwait,12,36715.19395,TRUE
+Kuwait,13,74728.86082,TRUE
+Kuwait,108,12577.92841,TRUE
+Kuwait,165,14797.07017,TRUE
+Kuwait,215,105585.0293,TRUE
+Kuwait,261,8946.089355,TRUE
+Kuwait,281,398032,FALSE
+Kuwait,302,27087.34387,TRUE
+Kuwait,310,36133,TRUE
+Kuwait,106,13595.99028,TRUE
+Kuwait,30,62885.73079,TRUE
+Kuwait,91,126485.3041,TRUE
+Kuwait,192,3780098.195,TRUE
+Kuwait,249,70032.42373,TRUE
+Kuwait,308,35296.76443,TRUE
+Kuwait,116,98484.54468,TRUE
+Kuwait,234,8162.890747,TRUE
+Kuwait,88,138218.959,TRUE
+Kuwait,227,9358.848173,TRUE
+Kuwait,8,21599.0332,TRUE
+Kuwait,115,186672.4488,TRUE
+Kuwait,146,28645.96233,TRUE
+Kuwait,257,14862.84549,TRUE
+Kuwait,39,10075.63454,TRUE
+Kuwait,61,218943.5096,TRUE
+Kuwait,76,100326.9844,TRUE
+Kuwait,268,27005.25,TRUE
+Kuwait,194,9390.783666,TRUE
+Kuwait,198,5299.135169,TRUE
+Kuwait,245,11957.75,TRUE
+Kuwait,86,15341.61704,TRUE
+Kuwait,247,27947.125,TRUE
+Kuwait,15,5922.875,TRUE
+Kuwait,135,5719.346191,TRUE
+Kuwait,65,4252.65625,TRUE
+Kuwait,70,8796.273438,TRUE
+Kuwait,314,4472.643433,TRUE
+Kuwait,133,6124.625,TRUE
+Kuwait,240,4373.4375,TRUE
+Kuwait,148,23186,TRUE
+Kuwait,31,5157,TRUE
+Kyrgyzstan,4,33134,FALSE
+Kyrgyzstan,5,7484.490489,TRUE
+Kyrgyzstan,7,47168,FALSE
+Kyrgyzstan,8,28615,FALSE
+Kyrgyzstan,17,22494,FALSE
+Kyrgyzstan,105,149702.6633,TRUE
+Kyrgyzstan,120,15332,FALSE
+Kyrgyzstan,161,22579,FALSE
+Kyrgyzstan,169,63779,FALSE
+Kyrgyzstan,179,121608.9919,TRUE
+Kyrgyzstan,180,22556,FALSE
+Kyrgyzstan,203,26179.47154,TRUE
+Kyrgyzstan,205,216220,FALSE
+Kyrgyzstan,208,84004.18102,TRUE
+Kyrgyzstan,219,42070,FALSE
+Kyrgyzstan,221,18017,FALSE
+Kyrgyzstan,229,15089,FALSE
+Kyrgyzstan,231,61580,FALSE
+Kyrgyzstan,235,168994,FALSE
+Kyrgyzstan,254,35185,FALSE
+Kyrgyzstan,84,31415,FALSE
+Kyrgyzstan,267,9372.487582,TRUE
+Kyrgyzstan,282,623228,FALSE
+Kyrgyzstan,286,760050.6713,TRUE
+Kyrgyzstan,289,12605,FALSE
+Kyrgyzstan,316,47537,FALSE
+Kyrgyzstan,317,218674,FALSE
+Kyrgyzstan,318,24461,FALSE
+Kyrgyzstan,18,19299,FALSE
+Kyrgyzstan,19,39577,FALSE
+Kyrgyzstan,33,30270.38924,TRUE
+Kyrgyzstan,40,219362,FALSE
+Kyrgyzstan,49,229104,FALSE
+Kyrgyzstan,54,45614,FALSE
+Kyrgyzstan,58,55924,FALSE
+Kyrgyzstan,59,22326.21725,TRUE
+Kyrgyzstan,63,24204,FALSE
+Kyrgyzstan,90,199242,FALSE
+Kyrgyzstan,94,61002.28577,TRUE
+Kyrgyzstan,101,16458,FALSE
+Kyrgyzstan,112,138705,FALSE
+Kyrgyzstan,138,17125.18189,TRUE
+Kyrgyzstan,152,128535,FALSE
+Kyrgyzstan,154,4854,FALSE
+Kyrgyzstan,158,117429,FALSE
+Kyrgyzstan,200,21822,FALSE
+Kyrgyzstan,202,85300.04797,TRUE
+Kyrgyzstan,206,183393.7134,TRUE
+Kyrgyzstan,218,141132,FALSE
+Kyrgyzstan,238,172602,FALSE
+Kyrgyzstan,243,68130,FALSE
+Kyrgyzstan,259,30028,FALSE
+Kyrgyzstan,276,12003,FALSE
+Kyrgyzstan,279,177754.1672,TRUE
+Kyrgyzstan,298,120463.1286,TRUE
+Kyrgyzstan,305,24453,FALSE
+Kyrgyzstan,306,201391,FALSE
+Kyrgyzstan,11,178064.2799,TRUE
+Kyrgyzstan,16,74389.59543,TRUE
+Kyrgyzstan,48,27222.34375,TRUE
+Kyrgyzstan,60,22383.25858,TRUE
+Kyrgyzstan,63,24204,FALSE
+Kyrgyzstan,121,115777.4722,TRUE
+Kyrgyzstan,128,12089,FALSE
+Kyrgyzstan,156,10200.29705,TRUE
+Kyrgyzstan,217,13592,FALSE
+Kyrgyzstan,248,14225.32829,TRUE
+Kyrgyzstan,270,11030,FALSE
+Kyrgyzstan,52,72720.10141,TRUE
+Kyrgyzstan,74,4541.36112,TRUE
+Kyrgyzstan,75,47178.96176,TRUE
+Kyrgyzstan,80,49992.57574,TRUE
+Kyrgyzstan,301,113987.8459,TRUE
+Kyrgyzstan,319,89190.44102,TRUE
+Kyrgyzstan,51,26504.47085,TRUE
+Kyrgyzstan,53,6581.96824,TRUE
+Kyrgyzstan,77,5993.147024,TRUE
+Kyrgyzstan,213,124295.9159,TRUE
+Kyrgyzstan,228,133880.2683,TRUE
+Kyrgyzstan,269,15171.62496,TRUE
+Kyrgyzstan,296,43692.55808,TRUE
+Kyrgyzstan,175,70802.39066,TRUE
+Kyrgyzstan,12,36715.19395,TRUE
+Kyrgyzstan,13,74728.86082,TRUE
+Kyrgyzstan,108,12577.92841,TRUE
+Kyrgyzstan,165,14797.07017,TRUE
+Kyrgyzstan,215,105585.0293,TRUE
+Kyrgyzstan,261,7791,FALSE
+Kyrgyzstan,281,48351,FALSE
+Kyrgyzstan,302,27087.34387,TRUE
+Kyrgyzstan,310,36133,TRUE
+Kyrgyzstan,106,6423,FALSE
+Kyrgyzstan,30,62885.73079,TRUE
+Kyrgyzstan,91,31928,FALSE
+Kyrgyzstan,192,3780098.195,TRUE
+Kyrgyzstan,249,39045,FALSE
+Kyrgyzstan,308,19833,FALSE
+Kyrgyzstan,116,50582,FALSE
+Kyrgyzstan,234,8162.890747,TRUE
+Kyrgyzstan,88,138218.959,TRUE
+Kyrgyzstan,227,9358.848173,TRUE
+Kyrgyzstan,8,28615,FALSE
+Kyrgyzstan,115,186672.4488,TRUE
+Kyrgyzstan,146,28645.96233,TRUE
+Kyrgyzstan,257,14862.84549,TRUE
+Kyrgyzstan,39,28150,FALSE
+Kyrgyzstan,61,218943.5096,TRUE
+Kyrgyzstan,76,100326.9844,TRUE
+Kyrgyzstan,268,27005.25,TRUE
+Kyrgyzstan,194,3158,FALSE
+Kyrgyzstan,198,5299.135169,TRUE
+Kyrgyzstan,245,11957.75,TRUE
+Kyrgyzstan,86,15341.61704,TRUE
+Kyrgyzstan,247,27947.125,TRUE
+Kyrgyzstan,15,5922.875,TRUE
+Kyrgyzstan,135,5719.346191,TRUE
+Kyrgyzstan,65,4252.65625,TRUE
+Kyrgyzstan,70,8796.273438,TRUE
+Kyrgyzstan,314,4472.643433,TRUE
+Kyrgyzstan,133,6124.625,TRUE
+Kyrgyzstan,240,4373.4375,TRUE
+Kyrgyzstan,148,23186,TRUE
+Kyrgyzstan,31,5157,TRUE
+Lao People's Democratic Republic,4,20977.52128,TRUE
+Lao People's Democratic Republic,5,7484.490489,TRUE
+Lao People's Democratic Republic,7,111437.9893,TRUE
+Lao People's Democratic Republic,8,47030.54376,TRUE
+Lao People's Democratic Republic,17,33099.94094,TRUE
+Lao People's Democratic Republic,105,149702.6633,TRUE
+Lao People's Democratic Republic,120,115713.1489,TRUE
+Lao People's Democratic Republic,161,8730.264786,TRUE
+Lao People's Democratic Republic,169,59958,FALSE
+Lao People's Democratic Republic,179,149921,FALSE
+Lao People's Democratic Republic,180,7520.279265,TRUE
+Lao People's Democratic Republic,203,26179.47154,TRUE
+Lao People's Democratic Republic,205,158255.8483,TRUE
+Lao People's Democratic Republic,208,82749,FALSE
+Lao People's Democratic Republic,219,80605.62094,TRUE
+Lao People's Democratic Republic,221,53059.48552,TRUE
+Lao People's Democratic Republic,229,16244.65912,TRUE
+Lao People's Democratic Republic,231,60255.26389,TRUE
+Lao People's Democratic Republic,235,322254,FALSE
+Lao People's Democratic Republic,254,42625,FALSE
+Lao People's Democratic Republic,84,11448,FALSE
+Lao People's Democratic Republic,267,12537,FALSE
+Lao People's Democratic Republic,282,423220.8453,TRUE
+Lao People's Democratic Republic,286,558043,FALSE
+Lao People's Democratic Republic,289,9979.922823,TRUE
+Lao People's Democratic Republic,316,72255.87156,TRUE
+Lao People's Democratic Republic,317,188575,FALSE
+Lao People's Democratic Republic,318,32261.2753,TRUE
+Lao People's Democratic Republic,18,15885,FALSE
+Lao People's Democratic Republic,19,77366.60983,TRUE
+Lao People's Democratic Republic,33,30270.38924,TRUE
+Lao People's Democratic Republic,40,180987.6885,TRUE
+Lao People's Democratic Republic,49,247408.5214,TRUE
+Lao People's Democratic Republic,54,175365.1249,TRUE
+Lao People's Democratic Republic,58,74040.89691,TRUE
+Lao People's Democratic Republic,59,22326.21725,TRUE
+Lao People's Democratic Republic,63,38614,FALSE
+Lao People's Democratic Republic,90,194487.8189,TRUE
+Lao People's Democratic Republic,94,61002.28577,TRUE
+Lao People's Democratic Republic,101,138512.4356,TRUE
+Lao People's Democratic Republic,112,122104.9439,TRUE
+Lao People's Democratic Republic,138,17125.18189,TRUE
+Lao People's Democratic Republic,152,119704.6269,TRUE
+Lao People's Democratic Republic,154,81752,FALSE
+Lao People's Democratic Republic,158,96473.15601,TRUE
+Lao People's Democratic Republic,200,22918.25267,TRUE
+Lao People's Democratic Republic,202,85300.04797,TRUE
+Lao People's Democratic Republic,206,183393.7134,TRUE
+Lao People's Democratic Republic,218,52990.31222,TRUE
+Lao People's Democratic Republic,238,116960.1876,TRUE
+Lao People's Democratic Republic,243,112174.5654,TRUE
+Lao People's Democratic Republic,259,55616.6005,TRUE
+Lao People's Democratic Republic,276,15849,FALSE
+Lao People's Democratic Republic,279,177754.1672,TRUE
+Lao People's Democratic Republic,298,85847,FALSE
+Lao People's Democratic Republic,305,97093,FALSE
+Lao People's Democratic Republic,306,131681.4608,TRUE
+Lao People's Democratic Republic,11,178064.2799,TRUE
+Lao People's Democratic Republic,16,278392,FALSE
+Lao People's Democratic Republic,48,27222.34375,TRUE
+Lao People's Democratic Republic,60,22383.25858,TRUE
+Lao People's Democratic Republic,63,38614,FALSE
+Lao People's Democratic Republic,121,56272,FALSE
+Lao People's Democratic Republic,128,23688,FALSE
+Lao People's Democratic Republic,156,10200.29705,TRUE
+Lao People's Democratic Republic,217,21196.4891,TRUE
+Lao People's Democratic Republic,248,14225.32829,TRUE
+Lao People's Democratic Republic,270,9151.63574,TRUE
+Lao People's Democratic Republic,52,326822,FALSE
+Lao People's Democratic Republic,74,4541.36112,TRUE
+Lao People's Democratic Republic,75,47178.96176,TRUE
+Lao People's Democratic Republic,80,49992.57574,TRUE
+Lao People's Democratic Republic,301,113987.8459,TRUE
+Lao People's Democratic Republic,319,89190.44102,TRUE
+Lao People's Democratic Republic,51,26504.47085,TRUE
+Lao People's Democratic Republic,53,6581.96824,TRUE
+Lao People's Democratic Republic,77,17535,FALSE
+Lao People's Democratic Republic,213,124295.9159,TRUE
+Lao People's Democratic Republic,228,167816,FALSE
+Lao People's Democratic Republic,269,15171.62496,TRUE
+Lao People's Democratic Republic,296,200000,FALSE
+Lao People's Democratic Republic,175,82851,FALSE
+Lao People's Democratic Republic,12,36715.19395,TRUE
+Lao People's Democratic Republic,13,74728.86082,TRUE
+Lao People's Democratic Republic,108,12577.92841,TRUE
+Lao People's Democratic Republic,165,14797.07017,TRUE
+Lao People's Democratic Republic,215,105585.0293,TRUE
+Lao People's Democratic Republic,261,8946.089355,TRUE
+Lao People's Democratic Republic,281,136069.2843,TRUE
+Lao People's Democratic Republic,302,17381,FALSE
+Lao People's Democratic Republic,310,36133,TRUE
+Lao People's Democratic Republic,106,13595.99028,TRUE
+Lao People's Democratic Republic,30,62885.73079,TRUE
+Lao People's Democratic Republic,91,126485.3041,TRUE
+Lao People's Democratic Republic,192,3780098.195,TRUE
+Lao People's Democratic Republic,249,70032.42373,TRUE
+Lao People's Democratic Republic,308,35296.76443,TRUE
+Lao People's Democratic Republic,116,98484.54468,TRUE
+Lao People's Democratic Republic,234,8162.890747,TRUE
+Lao People's Democratic Republic,88,138218.959,TRUE
+Lao People's Democratic Republic,227,9358.848173,TRUE
+Lao People's Democratic Republic,8,21599.0332,TRUE
+Lao People's Democratic Republic,115,186672.4488,TRUE
+Lao People's Democratic Republic,146,28645.96233,TRUE
+Lao People's Democratic Republic,257,14862.84549,TRUE
+Lao People's Democratic Republic,39,10075.63454,TRUE
+Lao People's Democratic Republic,61,218943.5096,TRUE
+Lao People's Democratic Republic,76,100326.9844,TRUE
+Lao People's Democratic Republic,268,27005.25,TRUE
+Lao People's Democratic Republic,194,9390.783666,TRUE
+Lao People's Democratic Republic,198,3510,FALSE
+Lao People's Democratic Republic,245,11957.75,TRUE
+Lao People's Democratic Republic,86,15341.61704,TRUE
+Lao People's Democratic Republic,247,36812,FALSE
+Lao People's Democratic Republic,15,5922.875,TRUE
+Lao People's Democratic Republic,135,5719.346191,TRUE
+Lao People's Democratic Republic,65,4252.65625,TRUE
+Lao People's Democratic Republic,70,8796.273438,TRUE
+Lao People's Democratic Republic,314,4472.643433,TRUE
+Lao People's Democratic Republic,133,6124.625,TRUE
+Lao People's Democratic Republic,240,4373.4375,TRUE
+Lao People's Democratic Republic,148,23186,TRUE
+Lao People's Democratic Republic,31,5157,TRUE
+Latvia,4,20977.52128,TRUE
+Latvia,5,7484.490489,TRUE
+Latvia,7,40090,FALSE
+Latvia,8,47030.54376,TRUE
+Latvia,17,30000,FALSE
+Latvia,105,149702.6633,TRUE
+Latvia,120,115713.1489,TRUE
+Latvia,161,20000,FALSE
+Latvia,169,16777.49735,TRUE
+Latvia,179,121608.9919,TRUE
+Latvia,180,7520.279265,TRUE
+Latvia,203,26179.47154,TRUE
+Latvia,205,183685,FALSE
+Latvia,208,84004.18102,TRUE
+Latvia,219,80605.62094,TRUE
+Latvia,221,23101,FALSE
+Latvia,229,16244.65912,TRUE
+Latvia,231,11954,FALSE
+Latvia,235,212814,FALSE
+Latvia,254,26952.37295,TRUE
+Latvia,84,9355.713607,TRUE
+Latvia,267,9372.487582,TRUE
+Latvia,282,423220.8453,TRUE
+Latvia,286,760050.6713,TRUE
+Latvia,289,9979.922823,TRUE
+Latvia,316,72255.87156,TRUE
+Latvia,317,188762.6372,TRUE
+Latvia,318,43045,FALSE
+Latvia,18,32671,FALSE
+Latvia,19,77366.60983,TRUE
+Latvia,33,30270.38924,TRUE
+Latvia,40,345017,FALSE
+Latvia,49,315204,FALSE
+Latvia,54,70376,FALSE
+Latvia,58,7179,FALSE
+Latvia,59,22326.21725,TRUE
+Latvia,63,234336.5313,TRUE
+Latvia,90,613841,FALSE
+Latvia,94,61002.28577,TRUE
+Latvia,101,138512.4356,TRUE
+Latvia,112,34270,FALSE
+Latvia,138,17125.18189,TRUE
+Latvia,152,118966,FALSE
+Latvia,154,96782.90416,TRUE
+Latvia,158,410000,FALSE
+Latvia,200,23527,FALSE
+Latvia,202,85300.04797,TRUE
+Latvia,206,183393.7134,TRUE
+Latvia,218,27500,FALSE
+Latvia,238,86496,FALSE
+Latvia,243,23596,FALSE
+Latvia,259,39358,FALSE
+Latvia,276,10950.60863,TRUE
+Latvia,279,177754.1672,TRUE
+Latvia,298,120463.1286,TRUE
+Latvia,305,15590.0347,TRUE
+Latvia,306,86857,FALSE
+Latvia,11,178064.2799,TRUE
+Latvia,16,74389.59543,TRUE
+Latvia,48,27222.34375,TRUE
+Latvia,60,22383.25858,TRUE
+Latvia,63,11715.28525,TRUE
+Latvia,121,115777.4722,TRUE
+Latvia,128,9353.124815,TRUE
+Latvia,156,10200.29705,TRUE
+Latvia,217,26860,FALSE
+Latvia,248,28300,FALSE
+Latvia,270,9151.63574,TRUE
+Latvia,52,72720.10141,TRUE
+Latvia,74,4541.36112,TRUE
+Latvia,75,47178.96176,TRUE
+Latvia,80,49992.57574,TRUE
+Latvia,301,113987.8459,TRUE
+Latvia,319,89190.44102,TRUE
+Latvia,51,26504.47085,TRUE
+Latvia,53,6581.96824,TRUE
+Latvia,77,5993.147024,TRUE
+Latvia,213,124295.9159,TRUE
+Latvia,228,133880.2683,TRUE
+Latvia,269,15171.62496,TRUE
+Latvia,296,43692.55808,TRUE
+Latvia,175,70802.39066,TRUE
+Latvia,12,36715.19395,TRUE
+Latvia,13,74728.86082,TRUE
+Latvia,108,43333,FALSE
+Latvia,165,15000,FALSE
+Latvia,215,105585.0293,TRUE
+Latvia,261,8946.089355,TRUE
+Latvia,281,25111,FALSE
+Latvia,302,27087.34387,TRUE
+Latvia,310,36133,TRUE
+Latvia,106,13595.99028,TRUE
+Latvia,30,14432,FALSE
+Latvia,91,8938,FALSE
+Latvia,192,3780098.195,TRUE
+Latvia,249,8148,FALSE
+Latvia,308,34312,FALSE
+Latvia,116,11750,FALSE
+Latvia,234,8162.890747,TRUE
+Latvia,88,24918,FALSE
+Latvia,227,9358.848173,TRUE
+Latvia,8,21599.0332,TRUE
+Latvia,115,186672.4488,TRUE
+Latvia,146,28645.96233,TRUE
+Latvia,257,14862.84549,TRUE
+Latvia,39,11302,FALSE
+Latvia,61,218943.5096,TRUE
+Latvia,76,100326.9844,TRUE
+Latvia,268,27005.25,TRUE
+Latvia,194,9390.783666,TRUE
+Latvia,198,5299.135169,TRUE
+Latvia,245,11957.75,TRUE
+Latvia,86,15341.61704,TRUE
+Latvia,247,27947.125,TRUE
+Latvia,15,5922.875,TRUE
+Latvia,135,5719.346191,TRUE
+Latvia,65,4252.65625,TRUE
+Latvia,70,8796.273438,TRUE
+Latvia,314,4472.643433,TRUE
+Latvia,133,6124.625,TRUE
+Latvia,240,4373.4375,TRUE
+Latvia,148,23186,TRUE
+Latvia,31,5157,TRUE
+Lebanon,4,53271,FALSE
+Lebanon,5,17913,FALSE
+Lebanon,7,123185,FALSE
+Lebanon,8,45420,FALSE
+Lebanon,17,21564,FALSE
+Lebanon,105,50283,FALSE
+Lebanon,120,87466,FALSE
+Lebanon,161,8730.264786,TRUE
+Lebanon,169,37984,FALSE
+Lebanon,179,85838,FALSE
+Lebanon,180,7520.279265,TRUE
+Lebanon,203,18965,FALSE
+Lebanon,205,227684,FALSE
+Lebanon,208,238971,FALSE
+Lebanon,219,112931,FALSE
+Lebanon,221,121694,FALSE
+Lebanon,229,16244.65912,TRUE
+Lebanon,231,119058,FALSE
+Lebanon,235,251667,FALSE
+Lebanon,254,26952.37295,TRUE
+Lebanon,84,9355.713607,TRUE
+Lebanon,267,36290,FALSE
+Lebanon,282,332409,FALSE
+Lebanon,286,283864,FALSE
+Lebanon,289,23491,FALSE
+Lebanon,316,14895,FALSE
+Lebanon,317,347443,FALSE
+Lebanon,318,32954,FALSE
+Lebanon,18,18924,FALSE
+Lebanon,19,89109,FALSE
+Lebanon,33,6798,FALSE
+Lebanon,40,454731,FALSE
+Lebanon,49,67104,FALSE
+Lebanon,54,236237,FALSE
+Lebanon,58,33407,FALSE
+Lebanon,59,22326.21725,TRUE
+Lebanon,63,401227,FALSE
+Lebanon,90,419911,FALSE
+Lebanon,94,61002.28577,TRUE
+Lebanon,101,266357,FALSE
+Lebanon,112,72799,FALSE
+Lebanon,138,17125.18189,TRUE
+Lebanon,152,119704.6269,TRUE
+Lebanon,154,271051,FALSE
+Lebanon,158,267805,FALSE
+Lebanon,200,11139,FALSE
+Lebanon,202,12417,FALSE
+Lebanon,206,183393.7134,TRUE
+Lebanon,218,35901,FALSE
+Lebanon,238,203800,FALSE
+Lebanon,243,271645,FALSE
+Lebanon,259,55616.6005,TRUE
+Lebanon,276,10950.60863,TRUE
+Lebanon,279,12080,FALSE
+Lebanon,298,194478,FALSE
+Lebanon,305,11831,FALSE
+Lebanon,306,816698,FALSE
+Lebanon,11,98392,FALSE
+Lebanon,16,312098,FALSE
+Lebanon,48,90635,FALSE
+Lebanon,60,9094,FALSE
+Lebanon,63,401227,FALSE
+Lebanon,121,240647,FALSE
+Lebanon,128,33065,FALSE
+Lebanon,156,14944,FALSE
+Lebanon,217,35822,FALSE
+Lebanon,248,14225.32829,TRUE
+Lebanon,270,20900,FALSE
+Lebanon,52,72720.10141,TRUE
+Lebanon,74,4541.36112,TRUE
+Lebanon,75,47178.96176,TRUE
+Lebanon,80,49992.57574,TRUE
+Lebanon,301,170740,FALSE
+Lebanon,319,89190.44102,TRUE
+Lebanon,51,26504.47085,TRUE
+Lebanon,53,6581.96824,TRUE
+Lebanon,77,5993.147024,TRUE
+Lebanon,213,124295.9159,TRUE
+Lebanon,228,133880.2683,TRUE
+Lebanon,269,15171.62496,TRUE
+Lebanon,296,43692.55808,TRUE
+Lebanon,175,70802.39066,TRUE
+Lebanon,12,36715.19395,TRUE
+Lebanon,13,125609,FALSE
+Lebanon,108,12577.92841,TRUE
+Lebanon,165,22075,FALSE
+Lebanon,215,105585.0293,TRUE
+Lebanon,261,8946.089355,TRUE
+Lebanon,281,71528,FALSE
+Lebanon,302,27087.34387,TRUE
+Lebanon,310,36133,TRUE
+Lebanon,106,13595.99028,TRUE
+Lebanon,30,62885.73079,TRUE
+Lebanon,91,126485.3041,TRUE
+Lebanon,192,3780098.195,TRUE
+Lebanon,249,70032.42373,TRUE
+Lebanon,308,35296.76443,TRUE
+Lebanon,116,98484.54468,TRUE
+Lebanon,234,8162.890747,TRUE
+Lebanon,88,138218.959,TRUE
+Lebanon,227,9358.848173,TRUE
+Lebanon,8,45420,FALSE
+Lebanon,115,186672.4488,TRUE
+Lebanon,146,28645.96233,TRUE
+Lebanon,257,14862.84549,TRUE
+Lebanon,39,10075.63454,TRUE
+Lebanon,61,218943.5096,TRUE
+Lebanon,76,100326.9844,TRUE
+Lebanon,268,27005.25,TRUE
+Lebanon,194,9390.783666,TRUE
+Lebanon,198,5299.135169,TRUE
+Lebanon,245,11957.75,TRUE
+Lebanon,86,15341.61704,TRUE
+Lebanon,247,27947.125,TRUE
+Lebanon,15,5922.875,TRUE
+Lebanon,135,5719.346191,TRUE
+Lebanon,65,4252.65625,TRUE
+Lebanon,70,8796.273438,TRUE
+Lebanon,314,4472.643433,TRUE
+Lebanon,133,6124.625,TRUE
+Lebanon,240,4373.4375,TRUE
+Lebanon,148,23186,TRUE
+Lebanon,31,5157,TRUE
+Lesotho,4,20977.52128,TRUE
+Lesotho,5,7484.490489,TRUE
+Lesotho,7,111437.9893,TRUE
+Lesotho,8,47030.54376,TRUE
+Lesotho,17,2759,FALSE
+Lesotho,105,149702.6633,TRUE
+Lesotho,120,115713.1489,TRUE
+Lesotho,161,8730.264786,TRUE
+Lesotho,169,6324,FALSE
+Lesotho,179,121608.9919,TRUE
+Lesotho,180,7520.279265,TRUE
+Lesotho,203,26179.47154,TRUE
+Lesotho,205,158255.8483,TRUE
+Lesotho,208,84004.18102,TRUE
+Lesotho,219,80605.62094,TRUE
+Lesotho,221,53059.48552,TRUE
+Lesotho,229,16244.65912,TRUE
+Lesotho,231,60255.26389,TRUE
+Lesotho,235,167295,FALSE
+Lesotho,254,26952.37295,TRUE
+Lesotho,84,9355.713607,TRUE
+Lesotho,267,9372.487582,TRUE
+Lesotho,282,423220.8453,TRUE
+Lesotho,286,760050.6713,TRUE
+Lesotho,289,9979.922823,TRUE
+Lesotho,316,72255.87156,TRUE
+Lesotho,317,188762.6372,TRUE
+Lesotho,318,8728,FALSE
+Lesotho,18,2072,FALSE
+Lesotho,19,77366.60983,TRUE
+Lesotho,33,30270.38924,TRUE
+Lesotho,40,180987.6885,TRUE
+Lesotho,49,247408.5214,TRUE
+Lesotho,54,175365.1249,TRUE
+Lesotho,58,74040.89691,TRUE
+Lesotho,59,22326.21725,TRUE
+Lesotho,63,234336.5313,TRUE
+Lesotho,90,194487.8189,TRUE
+Lesotho,94,61002.28577,TRUE
+Lesotho,101,138512.4356,TRUE
+Lesotho,112,122104.9439,TRUE
+Lesotho,138,17125.18189,TRUE
+Lesotho,152,119704.6269,TRUE
+Lesotho,154,96782.90416,TRUE
+Lesotho,158,96473.15601,TRUE
+Lesotho,200,15324,FALSE
+Lesotho,202,85300.04797,TRUE
+Lesotho,206,183393.7134,TRUE
+Lesotho,218,52990.31222,TRUE
+Lesotho,238,116960.1876,TRUE
+Lesotho,243,112174.5654,TRUE
+Lesotho,259,55616.6005,TRUE
+Lesotho,276,10950.60863,TRUE
+Lesotho,279,177754.1672,TRUE
+Lesotho,298,120463.1286,TRUE
+Lesotho,305,15590.0347,TRUE
+Lesotho,306,131681.4608,TRUE
+Lesotho,11,178064.2799,TRUE
+Lesotho,16,74389.59543,TRUE
+Lesotho,48,27222.34375,TRUE
+Lesotho,60,22383.25858,TRUE
+Lesotho,63,11715.28525,TRUE
+Lesotho,121,115777.4722,TRUE
+Lesotho,128,9353.124815,TRUE
+Lesotho,156,10200.29705,TRUE
+Lesotho,217,5713,FALSE
+Lesotho,248,14225.32829,TRUE
+Lesotho,270,2244,FALSE
+Lesotho,52,72720.10141,TRUE
+Lesotho,74,4541.36112,TRUE
+Lesotho,75,47178.96176,TRUE
+Lesotho,80,49992.57574,TRUE
+Lesotho,301,113987.8459,TRUE
+Lesotho,319,89190.44102,TRUE
+Lesotho,51,26504.47085,TRUE
+Lesotho,53,6581.96824,TRUE
+Lesotho,77,5993.147024,TRUE
+Lesotho,213,124295.9159,TRUE
+Lesotho,228,133880.2683,TRUE
+Lesotho,269,15171.62496,TRUE
+Lesotho,296,43692.55808,TRUE
+Lesotho,175,70802.39066,TRUE
+Lesotho,12,36715.19395,TRUE
+Lesotho,13,74728.86082,TRUE
+Lesotho,108,12577.92841,TRUE
+Lesotho,165,14797.07017,TRUE
+Lesotho,215,105585.0293,TRUE
+Lesotho,261,8946.089355,TRUE
+Lesotho,281,136069.2843,TRUE
+Lesotho,302,27087.34387,TRUE
+Lesotho,310,36133,TRUE
+Lesotho,106,13595.99028,TRUE
+Lesotho,30,62885.73079,TRUE
+Lesotho,91,126485.3041,TRUE
+Lesotho,192,3780098.195,TRUE
+Lesotho,249,70032.42373,TRUE
+Lesotho,308,35296.76443,TRUE
+Lesotho,116,98484.54468,TRUE
+Lesotho,234,8162.890747,TRUE
+Lesotho,88,138218.959,TRUE
+Lesotho,227,9358.848173,TRUE
+Lesotho,8,21599.0332,TRUE
+Lesotho,115,186672.4488,TRUE
+Lesotho,146,28645.96233,TRUE
+Lesotho,257,14862.84549,TRUE
+Lesotho,39,10075.63454,TRUE
+Lesotho,61,218943.5096,TRUE
+Lesotho,76,100326.9844,TRUE
+Lesotho,268,27005.25,TRUE
+Lesotho,194,9390.783666,TRUE
+Lesotho,198,5299.135169,TRUE
+Lesotho,245,11957.75,TRUE
+Lesotho,86,15341.61704,TRUE
+Lesotho,247,27947.125,TRUE
+Lesotho,15,5922.875,TRUE
+Lesotho,135,5719.346191,TRUE
+Lesotho,65,4252.65625,TRUE
+Lesotho,70,8796.273438,TRUE
+Lesotho,314,4472.643433,TRUE
+Lesotho,133,6124.625,TRUE
+Lesotho,240,4373.4375,TRUE
+Lesotho,148,23186,TRUE
+Lesotho,31,5157,TRUE
+Liberia,4,20977.52128,TRUE
+Liberia,5,7484.490489,TRUE
+Liberia,7,111437.9893,TRUE
+Liberia,8,47030.54376,TRUE
+Liberia,17,33099.94094,TRUE
+Liberia,105,149702.6633,TRUE
+Liberia,120,115713.1489,TRUE
+Liberia,161,8730.264786,TRUE
+Liberia,169,16777.49735,TRUE
+Liberia,179,121608.9919,TRUE
+Liberia,180,7520.279265,TRUE
+Liberia,203,26179.47154,TRUE
+Liberia,205,158255.8483,TRUE
+Liberia,208,36254,FALSE
+Liberia,219,80605.62094,TRUE
+Liberia,221,53059.48552,TRUE
+Liberia,229,16244.65912,TRUE
+Liberia,231,60255.26389,TRUE
+Liberia,235,172280.9273,TRUE
+Liberia,254,13223,FALSE
+Liberia,84,9355.713607,TRUE
+Liberia,267,9372.487582,TRUE
+Liberia,282,423220.8453,TRUE
+Liberia,286,101864,FALSE
+Liberia,289,9979.922823,TRUE
+Liberia,316,72255.87156,TRUE
+Liberia,317,188762.6372,TRUE
+Liberia,318,32261.2753,TRUE
+Liberia,18,11273.75269,TRUE
+Liberia,19,77366.60983,TRUE
+Liberia,33,30270.38924,TRUE
+Liberia,40,180987.6885,TRUE
+Liberia,49,247408.5214,TRUE
+Liberia,54,175365.1249,TRUE
+Liberia,58,74040.89691,TRUE
+Liberia,59,22326.21725,TRUE
+Liberia,63,234336.5313,TRUE
+Liberia,90,194487.8189,TRUE
+Liberia,94,61002.28577,TRUE
+Liberia,101,138512.4356,TRUE
+Liberia,112,122104.9439,TRUE
+Liberia,138,17125.18189,TRUE
+Liberia,152,119704.6269,TRUE
+Liberia,154,96782.90416,TRUE
+Liberia,158,96473.15601,TRUE
+Liberia,200,22918.25267,TRUE
+Liberia,202,85300.04797,TRUE
+Liberia,206,183393.7134,TRUE
+Liberia,218,52990.31222,TRUE
+Liberia,238,116960.1876,TRUE
+Liberia,243,112174.5654,TRUE
+Liberia,259,55616.6005,TRUE
+Liberia,276,4280,FALSE
+Liberia,279,177754.1672,TRUE
+Liberia,298,120463.1286,TRUE
+Liberia,305,15590.0347,TRUE
+Liberia,306,130462,FALSE
+Liberia,11,178064.2799,TRUE
+Liberia,16,107797,FALSE
+Liberia,48,27222.34375,TRUE
+Liberia,60,22383.25858,TRUE
+Liberia,63,11715.28525,TRUE
+Liberia,121,115777.4722,TRUE
+Liberia,128,7764,FALSE
+Liberia,156,10200.29705,TRUE
+Liberia,217,21196.4891,TRUE
+Liberia,248,14225.32829,TRUE
+Liberia,270,9151.63574,TRUE
+Liberia,52,79577,FALSE
+Liberia,74,1569,FALSE
+Liberia,75,27151,FALSE
+Liberia,80,33823,FALSE
+Liberia,301,89694,FALSE
+Liberia,319,87055,FALSE
+Liberia,51,26504.47085,TRUE
+Liberia,53,6581.96824,TRUE
+Liberia,77,2301,FALSE
+Liberia,213,99617,FALSE
+Liberia,228,54274,FALSE
+Liberia,269,15171.62496,TRUE
+Liberia,296,110266,FALSE
+Liberia,175,70802.39066,TRUE
+Liberia,12,36715.19395,TRUE
+Liberia,13,74728.86082,TRUE
+Liberia,108,12577.92841,TRUE
+Liberia,165,14797.07017,TRUE
+Liberia,215,105585.0293,TRUE
+Liberia,261,8946.089355,TRUE
+Liberia,281,136069.2843,TRUE
+Liberia,302,27087.34387,TRUE
+Liberia,310,36133,TRUE
+Liberia,106,13595.99028,TRUE
+Liberia,30,62885.73079,TRUE
+Liberia,91,126485.3041,TRUE
+Liberia,192,3780098.195,TRUE
+Liberia,249,70032.42373,TRUE
+Liberia,308,35296.76443,TRUE
+Liberia,116,98484.54468,TRUE
+Liberia,234,8162.890747,TRUE
+Liberia,88,138218.959,TRUE
+Liberia,227,9358.848173,TRUE
+Liberia,8,21599.0332,TRUE
+Liberia,115,186672.4488,TRUE
+Liberia,146,28645.96233,TRUE
+Liberia,257,7598,FALSE
+Liberia,39,10075.63454,TRUE
+Liberia,61,218943.5096,TRUE
+Liberia,76,100326.9844,TRUE
+Liberia,268,27005.25,TRUE
+Liberia,194,9390.783666,TRUE
+Liberia,198,5299.135169,TRUE
+Liberia,245,11957.75,TRUE
+Liberia,86,15341.61704,TRUE
+Liberia,247,27947.125,TRUE
+Liberia,15,5922.875,TRUE
+Liberia,135,5719.346191,TRUE
+Liberia,65,4252.65625,TRUE
+Liberia,70,8796.273438,TRUE
+Liberia,314,4472.643433,TRUE
+Liberia,133,6124.625,TRUE
+Liberia,240,4373.4375,TRUE
+Liberia,148,23186,TRUE
+Liberia,31,5157,TRUE
+Libya,4,5858,FALSE
+Libya,5,7484.490489,TRUE
+Libya,7,568977,FALSE
+Libya,8,54626,FALSE
+Libya,17,5126,FALSE
+Libya,105,36704,FALSE
+Libya,120,39524,FALSE
+Libya,161,8730.264786,TRUE
+Libya,169,22869,FALSE
+Libya,179,151360,FALSE
+Libya,180,12969,FALSE
+Libya,203,5282,FALSE
+Libya,205,203758,FALSE
+Libya,208,100465,FALSE
+Libya,219,78793,FALSE
+Libya,221,46604,FALSE
+Libya,229,16244.65912,TRUE
+Libya,231,53700,FALSE
+Libya,235,195797,FALSE
+Libya,254,26952.37295,TRUE
+Libya,84,9355.713607,TRUE
+Libya,267,9372.487582,TRUE
+Libya,282,423220.8453,TRUE
+Libya,286,760050.6713,TRUE
+Libya,289,9979.922823,TRUE
+Libya,316,72255.87156,TRUE
+Libya,317,116978,FALSE
+Libya,318,7946,FALSE
+Libya,18,32930,FALSE
+Libya,19,77366.60983,TRUE
+Libya,33,16776,FALSE
+Libya,40,144830,FALSE
+Libya,49,41168,FALSE
+Libya,54,82426,FALSE
+Libya,58,74040.89691,TRUE
+Libya,59,22326.21725,TRUE
+Libya,63,146257,FALSE
+Libya,90,196721,FALSE
+Libya,94,53635,FALSE
+Libya,101,189710,FALSE
+Libya,112,57785,FALSE
+Libya,138,17125.18189,TRUE
+Libya,152,119704.6269,TRUE
+Libya,154,102658,FALSE
+Libya,158,96473.15601,TRUE
+Libya,200,22918.25267,TRUE
+Libya,202,85300.04797,TRUE
+Libya,206,273443,FALSE
+Libya,218,52585,FALSE
+Libya,238,181936,FALSE
+Libya,243,112174.5654,TRUE
+Libya,259,55616.6005,TRUE
+Libya,276,10950.60863,TRUE
+Libya,279,177754.1672,TRUE
+Libya,298,103999,FALSE
+Libya,305,20731,FALSE
+Libya,306,207354,FALSE
+Libya,11,178064.2799,TRUE
+Libya,16,74389.59543,TRUE
+Libya,48,27222.34375,TRUE
+Libya,60,2093,FALSE
+Libya,63,146257,FALSE
+Libya,121,115777.4722,TRUE
+Libya,128,18018,FALSE
+Libya,156,10200.29705,TRUE
+Libya,217,16043,FALSE
+Libya,248,14225.32829,TRUE
+Libya,270,9151.63574,TRUE
+Libya,52,72720.10141,TRUE
+Libya,74,4541.36112,TRUE
+Libya,75,47178.96176,TRUE
+Libya,80,49992.57574,TRUE
+Libya,301,113987.8459,TRUE
+Libya,319,89190.44102,TRUE
+Libya,51,26504.47085,TRUE
+Libya,53,6581.96824,TRUE
+Libya,77,5993.147024,TRUE
+Libya,213,124295.9159,TRUE
+Libya,228,133880.2683,TRUE
+Libya,269,15171.62496,TRUE
+Libya,296,43692.55808,TRUE
+Libya,175,70802.39066,TRUE
+Libya,12,36715.19395,TRUE
+Libya,13,74728.86082,TRUE
+Libya,108,12577.92841,TRUE
+Libya,165,14797.07017,TRUE
+Libya,215,105585.0293,TRUE
+Libya,261,8946.089355,TRUE
+Libya,281,136069.2843,TRUE
+Libya,302,27087.34387,TRUE
+Libya,310,36133,TRUE
+Libya,106,13595.99028,TRUE
+Libya,30,62885.73079,TRUE
+Libya,91,126485.3041,TRUE
+Libya,192,3780098.195,TRUE
+Libya,249,70032.42373,TRUE
+Libya,308,35296.76443,TRUE
+Libya,116,98484.54468,TRUE
+Libya,234,8162.890747,TRUE
+Libya,88,138218.959,TRUE
+Libya,227,9358.848173,TRUE
+Libya,8,54626,FALSE
+Libya,115,186672.4488,TRUE
+Libya,146,28645.96233,TRUE
+Libya,257,14862.84549,TRUE
+Libya,39,10075.63454,TRUE
+Libya,61,218943.5096,TRUE
+Libya,76,100326.9844,TRUE
+Libya,268,27005.25,TRUE
+Libya,194,9390.783666,TRUE
+Libya,198,5299.135169,TRUE
+Libya,245,11957.75,TRUE
+Libya,86,15341.61704,TRUE
+Libya,247,27947.125,TRUE
+Libya,15,5922.875,TRUE
+Libya,135,5719.346191,TRUE
+Libya,65,4252.65625,TRUE
+Libya,70,8796.273438,TRUE
+Libya,314,4472.643433,TRUE
+Libya,133,6124.625,TRUE
+Libya,240,4373.4375,TRUE
+Libya,148,23186,TRUE
+Libya,31,5157,TRUE
+Lithuania,4,20977.52128,TRUE
+Lithuania,5,11069,FALSE
+Lithuania,7,53277,FALSE
+Lithuania,8,47030.54376,TRUE
+Lithuania,17,31614,FALSE
+Lithuania,105,149702.6633,TRUE
+Lithuania,120,115713.1489,TRUE
+Lithuania,161,9399,FALSE
+Lithuania,169,69055,FALSE
+Lithuania,179,121608.9919,TRUE
+Lithuania,180,7520.279265,TRUE
+Lithuania,203,26179.47154,TRUE
+Lithuania,205,156098,FALSE
+Lithuania,208,84004.18102,TRUE
+Lithuania,219,80605.62094,TRUE
+Lithuania,221,23074,FALSE
+Lithuania,229,16244.65912,TRUE
+Lithuania,231,8089,FALSE
+Lithuania,235,159860,FALSE
+Lithuania,254,26952.37295,TRUE
+Lithuania,84,9355.713607,TRUE
+Lithuania,267,9372.487582,TRUE
+Lithuania,282,612541,FALSE
+Lithuania,286,760050.6713,TRUE
+Lithuania,289,9979.922823,TRUE
+Lithuania,316,72255.87156,TRUE
+Lithuania,317,188762.6372,TRUE
+Lithuania,318,43615,FALSE
+Lithuania,18,31021,FALSE
+Lithuania,19,30789,FALSE
+Lithuania,33,17148,FALSE
+Lithuania,40,288607,FALSE
+Lithuania,49,230769,FALSE
+Lithuania,54,67083,FALSE
+Lithuania,58,13002,FALSE
+Lithuania,59,22326.21725,TRUE
+Lithuania,63,234336.5313,TRUE
+Lithuania,90,153891,FALSE
+Lithuania,94,61002.28577,TRUE
+Lithuania,101,21000,FALSE
+Lithuania,112,31802,FALSE
+Lithuania,138,17125.18189,TRUE
+Lithuania,152,64259,FALSE
+Lithuania,154,96782.90416,TRUE
+Lithuania,158,96473.15601,TRUE
+Lithuania,200,21887,FALSE
+Lithuania,202,85300.04797,TRUE
+Lithuania,206,183393.7134,TRUE
+Lithuania,218,24905,FALSE
+Lithuania,238,130541,FALSE
+Lithuania,243,15235,FALSE
+Lithuania,259,23835,FALSE
+Lithuania,276,10950.60863,TRUE
+Lithuania,279,32308,FALSE
+Lithuania,298,120463.1286,TRUE
+Lithuania,305,15590.0347,TRUE
+Lithuania,306,210096,FALSE
+Lithuania,11,100000,FALSE
+Lithuania,16,74389.59543,TRUE
+Lithuania,48,27222.34375,TRUE
+Lithuania,60,22383.25858,TRUE
+Lithuania,63,11715.28525,TRUE
+Lithuania,121,115777.4722,TRUE
+Lithuania,128,9353.124815,TRUE
+Lithuania,156,10200.29705,TRUE
+Lithuania,217,26758,FALSE
+Lithuania,248,25985,FALSE
+Lithuania,270,9151.63574,TRUE
+Lithuania,52,72720.10141,TRUE
+Lithuania,74,4541.36112,TRUE
+Lithuania,75,47178.96176,TRUE
+Lithuania,80,49992.57574,TRUE
+Lithuania,301,113987.8459,TRUE
+Lithuania,319,89190.44102,TRUE
+Lithuania,51,26504.47085,TRUE
+Lithuania,53,6581.96824,TRUE
+Lithuania,77,5993.147024,TRUE
+Lithuania,213,124295.9159,TRUE
+Lithuania,228,133880.2683,TRUE
+Lithuania,269,15171.62496,TRUE
+Lithuania,296,43692.55808,TRUE
+Lithuania,175,70802.39066,TRUE
+Lithuania,12,69762,FALSE
+Lithuania,13,74728.86082,TRUE
+Lithuania,108,6900,FALSE
+Lithuania,165,12096,FALSE
+Lithuania,215,105585.0293,TRUE
+Lithuania,261,8946.089355,TRUE
+Lithuania,281,34542,FALSE
+Lithuania,302,27087.34387,TRUE
+Lithuania,310,36133,TRUE
+Lithuania,106,13595.99028,TRUE
+Lithuania,30,11842,FALSE
+Lithuania,91,126485.3041,TRUE
+Lithuania,192,2076974,FALSE
+Lithuania,249,14880,FALSE
+Lithuania,308,32825,FALSE
+Lithuania,116,5068,FALSE
+Lithuania,234,8162.890747,TRUE
+Lithuania,88,138218.959,TRUE
+Lithuania,227,9358.848173,TRUE
+Lithuania,8,21599.0332,TRUE
+Lithuania,115,186672.4488,TRUE
+Lithuania,146,28645.96233,TRUE
+Lithuania,257,14862.84549,TRUE
+Lithuania,39,11459,FALSE
+Lithuania,61,218943.5096,TRUE
+Lithuania,76,100326.9844,TRUE
+Lithuania,268,27005.25,TRUE
+Lithuania,194,3948,FALSE
+Lithuania,198,5299.135169,TRUE
+Lithuania,245,11957.75,TRUE
+Lithuania,86,15341.61704,TRUE
+Lithuania,247,27947.125,TRUE
+Lithuania,15,5922.875,TRUE
+Lithuania,135,5719.346191,TRUE
+Lithuania,65,4252.65625,TRUE
+Lithuania,70,8796.273438,TRUE
+Lithuania,314,4472.643433,TRUE
+Lithuania,133,6124.625,TRUE
+Lithuania,240,4373.4375,TRUE
+Lithuania,148,23186,TRUE
+Lithuania,31,5157,TRUE
+Luxembourg,4,20977.52128,TRUE
+Luxembourg,5,7484.490489,TRUE
+Luxembourg,7,99959,FALSE
+Luxembourg,8,47030.54376,TRUE
+Luxembourg,17,49275,FALSE
+Luxembourg,105,149702.6633,TRUE
+Luxembourg,120,87834,FALSE
+Luxembourg,161,8730.264786,TRUE
+Luxembourg,169,66970,FALSE
+Luxembourg,179,121608.9919,TRUE
+Luxembourg,180,7520.279265,TRUE
+Luxembourg,203,26179.47154,TRUE
+Luxembourg,205,297030,FALSE
+Luxembourg,208,84004.18102,TRUE
+Luxembourg,219,80605.62094,TRUE
+Luxembourg,221,156667,FALSE
+Luxembourg,229,16244.65912,TRUE
+Luxembourg,231,37568,FALSE
+Luxembourg,235,304471,FALSE
+Luxembourg,254,26952.37295,TRUE
+Luxembourg,84,9355.713607,TRUE
+Luxembourg,267,9372.487582,TRUE
+Luxembourg,282,423220.8453,TRUE
+Luxembourg,286,760050.6713,TRUE
+Luxembourg,289,9979.922823,TRUE
+Luxembourg,316,21667,FALSE
+Luxembourg,317,188762.6372,TRUE
+Luxembourg,318,50744,FALSE
+Luxembourg,18,11273.75269,TRUE
+Luxembourg,19,402516,FALSE
+Luxembourg,33,15266,FALSE
+Luxembourg,40,500000,FALSE
+Luxembourg,49,453926,FALSE
+Luxembourg,54,195122,FALSE
+Luxembourg,58,27500,FALSE
+Luxembourg,59,22326.21725,TRUE
+Luxembourg,63,234336.5313,TRUE
+Luxembourg,90,571429,FALSE
+Luxembourg,94,61002.28577,TRUE
+Luxembourg,101,138512.4356,TRUE
+Luxembourg,112,122104.9439,TRUE
+Luxembourg,138,17125.18189,TRUE
+Luxembourg,152,351852,FALSE
+Luxembourg,154,96782.90416,TRUE
+Luxembourg,158,325209,FALSE
+Luxembourg,200,48339,FALSE
+Luxembourg,202,85300.04797,TRUE
+Luxembourg,206,183393.7134,TRUE
+Luxembourg,218,153846,FALSE
+Luxembourg,238,116960.1876,TRUE
+Luxembourg,243,112174.5654,TRUE
+Luxembourg,259,46173,FALSE
+Luxembourg,276,10950.60863,TRUE
+Luxembourg,279,177754.1672,TRUE
+Luxembourg,298,120463.1286,TRUE
+Luxembourg,305,15590.0347,TRUE
+Luxembourg,306,1464286,FALSE
+Luxembourg,11,178064.2799,TRUE
+Luxembourg,16,74389.59543,TRUE
+Luxembourg,48,27222.34375,TRUE
+Luxembourg,60,22383.25858,TRUE
+Luxembourg,63,11715.28525,TRUE
+Luxembourg,121,115777.4722,TRUE
+Luxembourg,128,9353.124815,TRUE
+Luxembourg,156,10200.29705,TRUE
+Luxembourg,217,17974,FALSE
+Luxembourg,248,31117,FALSE
+Luxembourg,270,9151.63574,TRUE
+Luxembourg,52,72720.10141,TRUE
+Luxembourg,74,4541.36112,TRUE
+Luxembourg,75,47178.96176,TRUE
+Luxembourg,80,49992.57574,TRUE
+Luxembourg,301,113987.8459,TRUE
+Luxembourg,319,89190.44102,TRUE
+Luxembourg,51,26504.47085,TRUE
+Luxembourg,53,6581.96824,TRUE
+Luxembourg,77,5993.147024,TRUE
+Luxembourg,213,124295.9159,TRUE
+Luxembourg,228,133880.2683,TRUE
+Luxembourg,269,15171.62496,TRUE
+Luxembourg,296,43692.55808,TRUE
+Luxembourg,175,70802.39066,TRUE
+Luxembourg,12,36715.19395,TRUE
+Luxembourg,13,74728.86082,TRUE
+Luxembourg,108,12577.92841,TRUE
+Luxembourg,165,14797.07017,TRUE
+Luxembourg,215,105585.0293,TRUE
+Luxembourg,261,8946.089355,TRUE
+Luxembourg,281,95000,FALSE
+Luxembourg,302,27087.34387,TRUE
+Luxembourg,310,36133,TRUE
+Luxembourg,106,13595.99028,TRUE
+Luxembourg,30,62885.73079,TRUE
+Luxembourg,91,126485.3041,TRUE
+Luxembourg,192,500000,FALSE
+Luxembourg,249,10000,FALSE
+Luxembourg,308,49560,FALSE
+Luxembourg,116,98484.54468,TRUE
+Luxembourg,234,8162.890747,TRUE
+Luxembourg,88,138218.959,TRUE
+Luxembourg,227,9358.848173,TRUE
+Luxembourg,8,21599.0332,TRUE
+Luxembourg,115,186672.4488,TRUE
+Luxembourg,146,28645.96233,TRUE
+Luxembourg,257,14862.84549,TRUE
+Luxembourg,39,10075.63454,TRUE
+Luxembourg,61,218943.5096,TRUE
+Luxembourg,76,100326.9844,TRUE
+Luxembourg,268,27005.25,TRUE
+Luxembourg,194,9390.783666,TRUE
+Luxembourg,198,5299.135169,TRUE
+Luxembourg,245,11957.75,TRUE
+Luxembourg,86,15341.61704,TRUE
+Luxembourg,247,27947.125,TRUE
+Luxembourg,15,5922.875,TRUE
+Luxembourg,135,5719.346191,TRUE
+Luxembourg,65,4252.65625,TRUE
+Luxembourg,70,8796.273438,TRUE
+Luxembourg,314,4472.643433,TRUE
+Luxembourg,133,6124.625,TRUE
+Luxembourg,240,4373.4375,TRUE
+Luxembourg,148,23186,TRUE
+Luxembourg,31,5157,TRUE
+Madagascar,4,20977.52128,TRUE
+Madagascar,5,15860,FALSE
+Madagascar,7,15362,FALSE
+Madagascar,8,82352,FALSE
+Madagascar,17,33099.94094,TRUE
+Madagascar,105,149702.6633,TRUE
+Madagascar,120,50552,FALSE
+Madagascar,161,8730.264786,TRUE
+Madagascar,169,16681,FALSE
+Madagascar,179,121608.9919,TRUE
+Madagascar,180,7520.279265,TRUE
+Madagascar,203,26179.47154,TRUE
+Madagascar,205,59400,FALSE
+Madagascar,208,63334,FALSE
+Madagascar,219,29243,FALSE
+Madagascar,221,15489,FALSE
+Madagascar,229,4013,FALSE
+Madagascar,231,48478,FALSE
+Madagascar,235,59696,FALSE
+Madagascar,254,44287,FALSE
+Madagascar,84,9202,FALSE
+Madagascar,267,9372.487582,TRUE
+Madagascar,282,423220.8453,TRUE
+Madagascar,286,319216,FALSE
+Madagascar,289,9979.922823,TRUE
+Madagascar,316,72255.87156,TRUE
+Madagascar,317,188762.6372,TRUE
+Madagascar,318,24353,FALSE
+Madagascar,18,11493,FALSE
+Madagascar,19,23715,FALSE
+Madagascar,33,30270.38924,TRUE
+Madagascar,40,216517,FALSE
+Madagascar,49,35122,FALSE
+Madagascar,54,84363,FALSE
+Madagascar,58,74040.89691,TRUE
+Madagascar,59,22326.21725,TRUE
+Madagascar,63,10621,FALSE
+Madagascar,90,8804,FALSE
+Madagascar,94,61002.28577,TRUE
+Madagascar,101,41060,FALSE
+Madagascar,112,65737,FALSE
+Madagascar,138,17125.18189,TRUE
+Madagascar,152,119704.6269,TRUE
+Madagascar,154,36103,FALSE
+Madagascar,158,6878,FALSE
+Madagascar,200,22918.25267,TRUE
+Madagascar,202,85300.04797,TRUE
+Madagascar,206,21483,FALSE
+Madagascar,218,10458,FALSE
+Madagascar,238,116960.1876,TRUE
+Madagascar,243,112174.5654,TRUE
+Madagascar,259,55616.6005,TRUE
+Madagascar,276,5727,FALSE
+Madagascar,279,177754.1672,TRUE
+Madagascar,298,120463.1286,TRUE
+Madagascar,305,8838,FALSE
+Madagascar,306,85201,FALSE
+Madagascar,11,178064.2799,TRUE
+Madagascar,16,53488,FALSE
+Madagascar,48,27222.34375,TRUE
+Madagascar,60,22383.25858,TRUE
+Madagascar,63,10621,FALSE
+Madagascar,121,79660,FALSE
+Madagascar,128,7050,FALSE
+Madagascar,156,6779,FALSE
+Madagascar,217,12555,FALSE
+Madagascar,248,14225.32829,TRUE
+Madagascar,270,5251,FALSE
+Madagascar,52,80358,FALSE
+Madagascar,74,8616,FALSE
+Madagascar,75,22391,FALSE
+Madagascar,80,49992.57574,TRUE
+Madagascar,301,63183,FALSE
+Madagascar,319,89190.44102,TRUE
+Madagascar,51,4633,FALSE
+Madagascar,53,3561,FALSE
+Madagascar,77,5611,FALSE
+Madagascar,213,116506,FALSE
+Madagascar,228,56655,FALSE
+Madagascar,269,12645,FALSE
+Madagascar,296,80950,FALSE
+Madagascar,175,64970,FALSE
+Madagascar,12,36715.19395,TRUE
+Madagascar,13,80923,FALSE
+Madagascar,108,12577.92841,TRUE
+Madagascar,165,14797.07017,TRUE
+Madagascar,215,105585.0293,TRUE
+Madagascar,261,8946.089355,TRUE
+Madagascar,281,136069.2843,TRUE
+Madagascar,302,3001,FALSE
+Madagascar,310,5952,FALSE
+Madagascar,106,13595.99028,TRUE
+Madagascar,30,62885.73079,TRUE
+Madagascar,91,126485.3041,TRUE
+Madagascar,192,3780098.195,TRUE
+Madagascar,249,70032.42373,TRUE
+Madagascar,308,35296.76443,TRUE
+Madagascar,116,98484.54468,TRUE
+Madagascar,234,8162.890747,TRUE
+Madagascar,88,138218.959,TRUE
+Madagascar,227,9358.848173,TRUE
+Madagascar,8,82352,FALSE
+Madagascar,115,32887,FALSE
+Madagascar,146,28645.96233,TRUE
+Madagascar,257,14862.84549,TRUE
+Madagascar,39,10075.63454,TRUE
+Madagascar,61,218943.5096,TRUE
+Madagascar,76,100326.9844,TRUE
+Madagascar,268,27005.25,TRUE
+Madagascar,194,9390.783666,TRUE
+Madagascar,198,8450,FALSE
+Madagascar,245,11957.75,TRUE
+Madagascar,86,8485,FALSE
+Madagascar,247,27947.125,TRUE
+Madagascar,15,5922.875,TRUE
+Madagascar,135,5719.346191,TRUE
+Madagascar,65,17517,FALSE
+Madagascar,70,3162,FALSE
+Madagascar,314,431,FALSE
+Madagascar,133,6124.625,TRUE
+Madagascar,240,4373.4375,TRUE
+Madagascar,148,23186,TRUE
+Madagascar,31,5157,TRUE
+Malawi,4,20977.52128,TRUE
+Malawi,5,5728,FALSE
+Malawi,7,111437.9893,TRUE
+Malawi,8,47030.54376,TRUE
+Malawi,17,33099.94094,TRUE
+Malawi,105,149702.6633,TRUE
+Malawi,120,115713.1489,TRUE
+Malawi,161,8730.264786,TRUE
+Malawi,169,14154,FALSE
+Malawi,179,121608.9919,TRUE
+Malawi,180,3775,FALSE
+Malawi,203,26179.47154,TRUE
+Malawi,205,225359,FALSE
+Malawi,208,84004.18102,TRUE
+Malawi,219,80605.62094,TRUE
+Malawi,221,53059.48552,TRUE
+Malawi,229,16244.65912,TRUE
+Malawi,231,60255.26389,TRUE
+Malawi,235,165504,FALSE
+Malawi,254,15604,FALSE
+Malawi,84,4006,FALSE
+Malawi,267,9372.487582,TRUE
+Malawi,282,423220.8453,TRUE
+Malawi,286,1076295,FALSE
+Malawi,289,9740,FALSE
+Malawi,316,72255.87156,TRUE
+Malawi,317,188762.6372,TRUE
+Malawi,318,11116,FALSE
+Malawi,18,4805,FALSE
+Malawi,19,77366.60983,TRUE
+Malawi,33,30270.38924,TRUE
+Malawi,40,216971,FALSE
+Malawi,49,247408.5214,TRUE
+Malawi,54,175365.1249,TRUE
+Malawi,58,74040.89691,TRUE
+Malawi,59,22326.21725,TRUE
+Malawi,63,30704,FALSE
+Malawi,90,194487.8189,TRUE
+Malawi,94,61002.28577,TRUE
+Malawi,101,138512.4356,TRUE
+Malawi,112,122104.9439,TRUE
+Malawi,138,17125.18189,TRUE
+Malawi,152,119704.6269,TRUE
+Malawi,154,96782.90416,TRUE
+Malawi,158,96473.15601,TRUE
+Malawi,200,22918.25267,TRUE
+Malawi,202,85300.04797,TRUE
+Malawi,206,183393.7134,TRUE
+Malawi,218,52990.31222,TRUE
+Malawi,238,116960.1876,TRUE
+Malawi,243,112174.5654,TRUE
+Malawi,259,55616.6005,TRUE
+Malawi,276,8846,FALSE
+Malawi,279,177754.1672,TRUE
+Malawi,298,120463.1286,TRUE
+Malawi,305,7536,FALSE
+Malawi,306,88571,FALSE
+Malawi,11,178064.2799,TRUE
+Malawi,16,244778,FALSE
+Malawi,48,27222.34375,TRUE
+Malawi,60,5833,FALSE
+Malawi,63,30704,FALSE
+Malawi,121,115777.4722,TRUE
+Malawi,128,7435,FALSE
+Malawi,156,5094,FALSE
+Malawi,217,7785,FALSE
+Malawi,248,14225.32829,TRUE
+Malawi,270,5887,FALSE
+Malawi,52,220230,FALSE
+Malawi,74,4541.36112,TRUE
+Malawi,75,47178.96176,TRUE
+Malawi,80,49992.57574,TRUE
+Malawi,301,113987.8459,TRUE
+Malawi,319,89190.44102,TRUE
+Malawi,51,26504.47085,TRUE
+Malawi,53,6581.96824,TRUE
+Malawi,77,16827,FALSE
+Malawi,213,124295.9159,TRUE
+Malawi,228,133880.2683,TRUE
+Malawi,269,2252,FALSE
+Malawi,296,43692.55808,TRUE
+Malawi,175,184245,FALSE
+Malawi,12,36715.19395,TRUE
+Malawi,13,74728.86082,TRUE
+Malawi,108,12577.92841,TRUE
+Malawi,165,14797.07017,TRUE
+Malawi,215,105585.0293,TRUE
+Malawi,261,8946.089355,TRUE
+Malawi,281,136069.2843,TRUE
+Malawi,302,27137,FALSE
+Malawi,310,11561,FALSE
+Malawi,106,13595.99028,TRUE
+Malawi,30,62885.73079,TRUE
+Malawi,91,126485.3041,TRUE
+Malawi,192,3780098.195,TRUE
+Malawi,249,70032.42373,TRUE
+Malawi,308,35296.76443,TRUE
+Malawi,116,98484.54468,TRUE
+Malawi,234,8162.890747,TRUE
+Malawi,88,138218.959,TRUE
+Malawi,227,15064,FALSE
+Malawi,8,21599.0332,TRUE
+Malawi,115,186672.4488,TRUE
+Malawi,146,28645.96233,TRUE
+Malawi,257,14862.84549,TRUE
+Malawi,39,10075.63454,TRUE
+Malawi,61,218943.5096,TRUE
+Malawi,76,100326.9844,TRUE
+Malawi,268,27005.25,TRUE
+Malawi,194,9390.783666,TRUE
+Malawi,198,5523,FALSE
+Malawi,245,11957.75,TRUE
+Malawi,86,3411,FALSE
+Malawi,247,27947.125,TRUE
+Malawi,15,5922.875,TRUE
+Malawi,135,5719.346191,TRUE
+Malawi,65,4252.65625,TRUE
+Malawi,70,8796.273438,TRUE
+Malawi,314,2604,FALSE
+Malawi,133,6124.625,TRUE
+Malawi,240,4373.4375,TRUE
+Malawi,148,23186,TRUE
+Malawi,31,5157,TRUE
+Malaysia,4,20977.52128,TRUE
+Malaysia,5,7484.490489,TRUE
+Malaysia,7,111437.9893,TRUE
+Malaysia,8,32260,FALSE
+Malaysia,17,33099.94094,TRUE
+Malaysia,105,149702.6633,TRUE
+Malaysia,120,115713.1489,TRUE
+Malaysia,161,8730.264786,TRUE
+Malaysia,169,64596,FALSE
+Malaysia,179,121608.9919,TRUE
+Malaysia,180,7520.279265,TRUE
+Malaysia,203,26179.47154,TRUE
+Malaysia,205,158255.8483,TRUE
+Malaysia,208,48725,FALSE
+Malaysia,219,80605.62094,TRUE
+Malaysia,221,53059.48552,TRUE
+Malaysia,229,16244.65912,TRUE
+Malaysia,231,60255.26389,TRUE
+Malaysia,235,172280.9273,TRUE
+Malaysia,254,31807,FALSE
+Malaysia,84,9355.713607,TRUE
+Malaysia,267,9372.487582,TRUE
+Malaysia,282,423220.8453,TRUE
+Malaysia,286,652238,FALSE
+Malaysia,289,9979.922823,TRUE
+Malaysia,316,72255.87156,TRUE
+Malaysia,317,160933,FALSE
+Malaysia,318,32261.2753,TRUE
+Malaysia,18,11273.75269,TRUE
+Malaysia,19,77366.60983,TRUE
+Malaysia,33,30270.38924,TRUE
+Malaysia,40,268334,FALSE
+Malaysia,49,247408.5214,TRUE
+Malaysia,54,175365.1249,TRUE
+Malaysia,58,74040.89691,TRUE
+Malaysia,59,22326.21725,TRUE
+Malaysia,63,7852,FALSE
+Malaysia,90,223963,FALSE
+Malaysia,94,61002.28577,TRUE
+Malaysia,101,138512.4356,TRUE
+Malaysia,112,122104.9439,TRUE
+Malaysia,138,17125.18189,TRUE
+Malaysia,152,119704.6269,TRUE
+Malaysia,154,70389,FALSE
+Malaysia,158,210732,FALSE
+Malaysia,200,22918.25267,TRUE
+Malaysia,202,151289,FALSE
+Malaysia,206,183393.7134,TRUE
+Malaysia,218,52990.31222,TRUE
+Malaysia,238,146279,FALSE
+Malaysia,243,112174.5654,TRUE
+Malaysia,259,55616.6005,TRUE
+Malaysia,276,10950.60863,TRUE
+Malaysia,279,128209,FALSE
+Malaysia,298,120463.1286,TRUE
+Malaysia,305,7777,FALSE
+Malaysia,306,869405,FALSE
+Malaysia,11,178064.2799,TRUE
+Malaysia,16,110397,FALSE
+Malaysia,48,27222.34375,TRUE
+Malaysia,60,22383.25858,TRUE
+Malaysia,63,7852,FALSE
+Malaysia,121,109616,FALSE
+Malaysia,128,29401,FALSE
+Malaysia,156,10200.29705,TRUE
+Malaysia,217,21196.4891,TRUE
+Malaysia,248,14225.32829,TRUE
+Malaysia,270,9151.63574,TRUE
+Malaysia,52,179228,FALSE
+Malaysia,74,1012,FALSE
+Malaysia,75,59659,FALSE
+Malaysia,80,49992.57574,TRUE
+Malaysia,301,113987.8459,TRUE
+Malaysia,319,89190.44102,TRUE
+Malaysia,51,21217,FALSE
+Malaysia,53,6581.96824,TRUE
+Malaysia,77,27356,FALSE
+Malaysia,213,172601,FALSE
+Malaysia,228,297904,FALSE
+Malaysia,269,15171.62496,TRUE
+Malaysia,296,166713,FALSE
+Malaysia,175,79798,FALSE
+Malaysia,12,36715.19395,TRUE
+Malaysia,13,74728.86082,TRUE
+Malaysia,108,12577.92841,TRUE
+Malaysia,165,14797.07017,TRUE
+Malaysia,215,152208,FALSE
+Malaysia,261,8946.089355,TRUE
+Malaysia,281,136069.2843,TRUE
+Malaysia,302,38885,FALSE
+Malaysia,310,36133,TRUE
+Malaysia,106,13595.99028,TRUE
+Malaysia,30,62885.73079,TRUE
+Malaysia,91,126485.3041,TRUE
+Malaysia,192,3780098.195,TRUE
+Malaysia,249,70032.42373,TRUE
+Malaysia,308,35296.76443,TRUE
+Malaysia,116,98484.54468,TRUE
+Malaysia,234,8162.890747,TRUE
+Malaysia,88,138218.959,TRUE
+Malaysia,227,9358.848173,TRUE
+Malaysia,8,32260,FALSE
+Malaysia,115,123654,FALSE
+Malaysia,146,28645.96233,TRUE
+Malaysia,257,6277,FALSE
+Malaysia,39,10075.63454,TRUE
+Malaysia,61,218943.5096,TRUE
+Malaysia,76,100326.9844,TRUE
+Malaysia,268,27005.25,TRUE
+Malaysia,194,9390.783666,TRUE
+Malaysia,198,24682,FALSE
+Malaysia,245,11957.75,TRUE
+Malaysia,86,15341.61704,TRUE
+Malaysia,247,27947.125,TRUE
+Malaysia,15,5922.875,TRUE
+Malaysia,135,5719.346191,TRUE
+Malaysia,65,4252.65625,TRUE
+Malaysia,70,2351,FALSE
+Malaysia,314,4472.643433,TRUE
+Malaysia,133,6124.625,TRUE
+Malaysia,240,4373.4375,TRUE
+Malaysia,148,23186,TRUE
+Malaysia,31,5157,TRUE
+Maldives,4,20977.52128,TRUE
+Maldives,5,7484.490489,TRUE
+Maldives,7,111437.9893,TRUE
+Maldives,8,11597,FALSE
+Maldives,17,33099.94094,TRUE
+Maldives,105,149702.6633,TRUE
+Maldives,120,115713.1489,TRUE
+Maldives,161,8730.264786,TRUE
+Maldives,169,45403,FALSE
+Maldives,179,121608.9919,TRUE
+Maldives,180,10311,FALSE
+Maldives,203,26179.47154,TRUE
+Maldives,205,43966,FALSE
+Maldives,208,84004.18102,TRUE
+Maldives,219,80605.62094,TRUE
+Maldives,221,53059.48552,TRUE
+Maldives,229,16244.65912,TRUE
+Maldives,231,60255.26389,TRUE
+Maldives,235,172280.9273,TRUE
+Maldives,254,26952.37295,TRUE
+Maldives,84,9355.713607,TRUE
+Maldives,267,9372.487582,TRUE
+Maldives,282,423220.8453,TRUE
+Maldives,286,760050.6713,TRUE
+Maldives,289,9979.922823,TRUE
+Maldives,316,72255.87156,TRUE
+Maldives,317,188762.6372,TRUE
+Maldives,318,32261.2753,TRUE
+Maldives,18,11273.75269,TRUE
+Maldives,19,77366.60983,TRUE
+Maldives,33,30270.38924,TRUE
+Maldives,40,180987.6885,TRUE
+Maldives,49,247408.5214,TRUE
+Maldives,54,175365.1249,TRUE
+Maldives,58,74040.89691,TRUE
+Maldives,59,22326.21725,TRUE
+Maldives,63,9271,FALSE
+Maldives,90,194487.8189,TRUE
+Maldives,94,61002.28577,TRUE
+Maldives,101,138512.4356,TRUE
+Maldives,112,122104.9439,TRUE
+Maldives,138,17125.18189,TRUE
+Maldives,152,119704.6269,TRUE
+Maldives,154,86310,FALSE
+Maldives,158,96473.15601,TRUE
+Maldives,200,22918.25267,TRUE
+Maldives,202,85300.04797,TRUE
+Maldives,206,183393.7134,TRUE
+Maldives,218,52990.31222,TRUE
+Maldives,238,116960.1876,TRUE
+Maldives,243,112174.5654,TRUE
+Maldives,259,55616.6005,TRUE
+Maldives,276,10950.60863,TRUE
+Maldives,279,177754.1672,TRUE
+Maldives,298,120463.1286,TRUE
+Maldives,305,15590.0347,TRUE
+Maldives,306,163358,FALSE
+Maldives,11,178064.2799,TRUE
+Maldives,16,278940,FALSE
+Maldives,48,27222.34375,TRUE
+Maldives,60,22383.25858,TRUE
+Maldives,63,9271,FALSE
+Maldives,121,115777.4722,TRUE
+Maldives,128,9353.124815,TRUE
+Maldives,156,10200.29705,TRUE
+Maldives,217,21196.4891,TRUE
+Maldives,248,14225.32829,TRUE
+Maldives,270,11497,FALSE
+Maldives,52,11313,FALSE
+Maldives,74,4541.36112,TRUE
+Maldives,75,42210,FALSE
+Maldives,80,49992.57574,TRUE
+Maldives,301,58523,FALSE
+Maldives,319,89190.44102,TRUE
+Maldives,51,26504.47085,TRUE
+Maldives,53,6581.96824,TRUE
+Maldives,77,5993.147024,TRUE
+Maldives,213,124295.9159,TRUE
+Maldives,228,133880.2683,TRUE
+Maldives,269,15171.62496,TRUE
+Maldives,296,9152,FALSE
+Maldives,175,51900,FALSE
+Maldives,12,36715.19395,TRUE
+Maldives,13,74728.86082,TRUE
+Maldives,108,12577.92841,TRUE
+Maldives,165,14797.07017,TRUE
+Maldives,215,55628,FALSE
+Maldives,261,8946.089355,TRUE
+Maldives,281,136069.2843,TRUE
+Maldives,302,27087.34387,TRUE
+Maldives,310,36133,TRUE
+Maldives,106,13595.99028,TRUE
+Maldives,30,62885.73079,TRUE
+Maldives,91,126485.3041,TRUE
+Maldives,192,3780098.195,TRUE
+Maldives,249,70032.42373,TRUE
+Maldives,308,35296.76443,TRUE
+Maldives,116,98484.54468,TRUE
+Maldives,234,8162.890747,TRUE
+Maldives,88,138218.959,TRUE
+Maldives,227,9358.848173,TRUE
+Maldives,8,11597,FALSE
+Maldives,115,186672.4488,TRUE
+Maldives,146,28645.96233,TRUE
+Maldives,257,14862.84549,TRUE
+Maldives,39,10075.63454,TRUE
+Maldives,61,218943.5096,TRUE
+Maldives,76,100326.9844,TRUE
+Maldives,268,27005.25,TRUE
+Maldives,194,9390.783666,TRUE
+Maldives,198,5299.135169,TRUE
+Maldives,245,11957.75,TRUE
+Maldives,86,15341.61704,TRUE
+Maldives,247,27947.125,TRUE
+Maldives,15,5922.875,TRUE
+Maldives,135,5719.346191,TRUE
+Maldives,65,4252.65625,TRUE
+Maldives,70,8796.273438,TRUE
+Maldives,314,4472.643433,TRUE
+Maldives,133,6124.625,TRUE
+Maldives,240,4373.4375,TRUE
+Maldives,148,23186,TRUE
+Maldives,31,5157,TRUE
+Mali,4,20977.52128,TRUE
+Mali,5,7484.490489,TRUE
+Mali,7,111437.9893,TRUE
+Mali,8,47030.54376,TRUE
+Mali,17,33099.94094,TRUE
+Mali,105,149702.6633,TRUE
+Mali,120,115713.1489,TRUE
+Mali,161,8730.264786,TRUE
+Mali,169,27255,FALSE
+Mali,179,121608.9919,TRUE
+Mali,180,8855,FALSE
+Mali,203,26179.47154,TRUE
+Mali,205,202280,FALSE
+Mali,208,169617,FALSE
+Mali,219,80605.62094,TRUE
+Mali,221,53059.48552,TRUE
+Mali,229,16244.65912,TRUE
+Mali,231,60255.26389,TRUE
+Mali,235,199724,FALSE
+Mali,254,33318,FALSE
+Mali,84,9118,FALSE
+Mali,267,4697,FALSE
+Mali,282,136457,FALSE
+Mali,286,725211,FALSE
+Mali,289,9979.922823,TRUE
+Mali,316,72255.87156,TRUE
+Mali,317,207028,FALSE
+Mali,318,89273,FALSE
+Mali,18,11273.75269,TRUE
+Mali,19,97217,FALSE
+Mali,33,30270.38924,TRUE
+Mali,40,179416,FALSE
+Mali,49,156174,FALSE
+Mali,54,175365.1249,TRUE
+Mali,58,74040.89691,TRUE
+Mali,59,22326.21725,TRUE
+Mali,63,7889,FALSE
+Mali,90,157514,FALSE
+Mali,94,122456,FALSE
+Mali,101,163366,FALSE
+Mali,112,136933,FALSE
+Mali,138,17125.18189,TRUE
+Mali,152,119704.6269,TRUE
+Mali,154,54846,FALSE
+Mali,158,103465,FALSE
+Mali,200,22918.25267,TRUE
+Mali,202,112171,FALSE
+Mali,206,234420,FALSE
+Mali,218,52990.31222,TRUE
+Mali,238,158619,FALSE
+Mali,243,112174.5654,TRUE
+Mali,259,55616.6005,TRUE
+Mali,276,6434,FALSE
+Mali,279,177754.1672,TRUE
+Mali,298,122203,FALSE
+Mali,305,25992,FALSE
+Mali,306,177204,FALSE
+Mali,11,178064.2799,TRUE
+Mali,16,281619,FALSE
+Mali,48,27222.34375,TRUE
+Mali,60,22383.25858,TRUE
+Mali,63,7889,FALSE
+Mali,121,89026,FALSE
+Mali,128,8658,FALSE
+Mali,156,10200.29705,TRUE
+Mali,217,21196.4891,TRUE
+Mali,248,14225.32829,TRUE
+Mali,270,8934,FALSE
+Mali,52,153016,FALSE
+Mali,74,4541.36112,TRUE
+Mali,75,47178.96176,TRUE
+Mali,80,49992.57574,TRUE
+Mali,301,113987.8459,TRUE
+Mali,319,244423,FALSE
+Mali,51,26050,FALSE
+Mali,53,6581.96824,TRUE
+Mali,77,5993.147024,TRUE
+Mali,213,124295.9159,TRUE
+Mali,228,133880.2683,TRUE
+Mali,269,15171.62496,TRUE
+Mali,296,169555,FALSE
+Mali,175,233200,FALSE
+Mali,12,36715.19395,TRUE
+Mali,13,74728.86082,TRUE
+Mali,108,12577.92841,TRUE
+Mali,165,14797.07017,TRUE
+Mali,215,52061,FALSE
+Mali,261,8946.089355,TRUE
+Mali,281,136069.2843,TRUE
+Mali,302,10382,FALSE
+Mali,310,36133,TRUE
+Mali,106,13595.99028,TRUE
+Mali,30,62885.73079,TRUE
+Mali,91,126485.3041,TRUE
+Mali,192,3780098.195,TRUE
+Mali,249,70032.42373,TRUE
+Mali,308,35296.76443,TRUE
+Mali,116,98484.54468,TRUE
+Mali,234,8162.890747,TRUE
+Mali,88,138218.959,TRUE
+Mali,227,9358.848173,TRUE
+Mali,8,21599.0332,TRUE
+Mali,115,155601,FALSE
+Mali,146,28645.96233,TRUE
+Mali,257,14862.84549,TRUE
+Mali,39,10075.63454,TRUE
+Mali,61,218943.5096,TRUE
+Mali,76,100326.9844,TRUE
+Mali,268,25469,FALSE
+Mali,194,9390.783666,TRUE
+Mali,198,5299.135169,TRUE
+Mali,245,11957.75,TRUE
+Mali,86,5084,FALSE
+Mali,247,27947.125,TRUE
+Mali,15,6831,FALSE
+Mali,135,5719.346191,TRUE
+Mali,65,4252.65625,TRUE
+Mali,70,8796.273438,TRUE
+Mali,314,4472.643433,TRUE
+Mali,133,6124.625,TRUE
+Mali,240,4373.4375,TRUE
+Mali,148,23186,TRUE
+Mali,31,5157,TRUE
+Malta,4,20977.52128,TRUE
+Malta,5,7484.490489,TRUE
+Malta,7,36816,FALSE
+Malta,8,73899,FALSE
+Malta,17,41549,FALSE
+Malta,105,23209,FALSE
+Malta,120,22949,FALSE
+Malta,161,8730.264786,TRUE
+Malta,169,16777.49735,TRUE
+Malta,179,210586,FALSE
+Malta,180,7520.279265,TRUE
+Malta,203,10636,FALSE
+Malta,205,188060,FALSE
+Malta,208,154289,FALSE
+Malta,219,125130,FALSE
+Malta,221,176416,FALSE
+Malta,229,16244.65912,TRUE
+Malta,231,60255.26389,TRUE
+Malta,235,97500,FALSE
+Malta,254,26952.37295,TRUE
+Malta,84,9355.713607,TRUE
+Malta,267,9372.487582,TRUE
+Malta,282,423220.8453,TRUE
+Malta,286,760050.6713,TRUE
+Malta,289,9979.922823,TRUE
+Malta,316,72255.87156,TRUE
+Malta,317,378479,FALSE
+Malta,318,48368,FALSE
+Malta,18,25896,FALSE
+Malta,19,77366.60983,TRUE
+Malta,33,28754,FALSE
+Malta,40,152131,FALSE
+Malta,49,255465,FALSE
+Malta,54,189278,FALSE
+Malta,58,74040.89691,TRUE
+Malta,59,22326.21725,TRUE
+Malta,63,234336.5313,TRUE
+Malta,90,267244,FALSE
+Malta,94,61002.28577,TRUE
+Malta,101,283572,FALSE
+Malta,112,79834,FALSE
+Malta,138,17125.18189,TRUE
+Malta,152,205786,FALSE
+Malta,154,145091,FALSE
+Malta,158,192070,FALSE
+Malta,200,22918.25267,TRUE
+Malta,202,85300.04797,TRUE
+Malta,206,183393.7134,TRUE
+Malta,218,43253,FALSE
+Malta,238,216817,FALSE
+Malta,243,112174.5654,TRUE
+Malta,259,55616.6005,TRUE
+Malta,276,10950.60863,TRUE
+Malta,279,111550,FALSE
+Malta,298,169389,FALSE
+Malta,305,15590.0347,TRUE
+Malta,306,388198,FALSE
+Malta,11,86401,FALSE
+Malta,16,74389.59543,TRUE
+Malta,48,27222.34375,TRUE
+Malta,60,22383.25858,TRUE
+Malta,63,11715.28525,TRUE
+Malta,121,68370,FALSE
+Malta,128,9353.124815,TRUE
+Malta,156,10200.29705,TRUE
+Malta,217,21196.4891,TRUE
+Malta,248,14225.32829,TRUE
+Malta,270,9151.63574,TRUE
+Malta,52,72720.10141,TRUE
+Malta,74,4541.36112,TRUE
+Malta,75,47178.96176,TRUE
+Malta,80,49992.57574,TRUE
+Malta,301,113987.8459,TRUE
+Malta,319,89190.44102,TRUE
+Malta,51,26504.47085,TRUE
+Malta,53,6581.96824,TRUE
+Malta,77,5993.147024,TRUE
+Malta,213,124295.9159,TRUE
+Malta,228,133880.2683,TRUE
+Malta,269,15171.62496,TRUE
+Malta,296,43692.55808,TRUE
+Malta,175,70802.39066,TRUE
+Malta,12,36715.19395,TRUE
+Malta,13,74728.86082,TRUE
+Malta,108,12577.92841,TRUE
+Malta,165,14797.07017,TRUE
+Malta,215,105585.0293,TRUE
+Malta,261,8946.089355,TRUE
+Malta,281,187499,FALSE
+Malta,302,27087.34387,TRUE
+Malta,310,36133,TRUE
+Malta,106,13595.99028,TRUE
+Malta,30,62885.73079,TRUE
+Malta,91,126485.3041,TRUE
+Malta,192,3780098.195,TRUE
+Malta,249,70032.42373,TRUE
+Malta,308,35296.76443,TRUE
+Malta,116,98484.54468,TRUE
+Malta,234,8162.890747,TRUE
+Malta,88,138218.959,TRUE
+Malta,227,9358.848173,TRUE
+Malta,8,73899,FALSE
+Malta,115,186672.4488,TRUE
+Malta,146,28645.96233,TRUE
+Malta,257,14862.84549,TRUE
+Malta,39,10075.63454,TRUE
+Malta,61,218943.5096,TRUE
+Malta,76,100326.9844,TRUE
+Malta,268,27005.25,TRUE
+Malta,194,9390.783666,TRUE
+Malta,198,5299.135169,TRUE
+Malta,245,11957.75,TRUE
+Malta,86,15341.61704,TRUE
+Malta,247,27947.125,TRUE
+Malta,15,5922.875,TRUE
+Malta,135,5719.346191,TRUE
+Malta,65,4252.65625,TRUE
+Malta,70,8796.273438,TRUE
+Malta,314,4472.643433,TRUE
+Malta,133,6124.625,TRUE
+Malta,240,4373.4375,TRUE
+Malta,148,23186,TRUE
+Malta,31,5157,TRUE
+Marshall Islands,4,20977.52128,TRUE
+Marshall Islands,5,7484.490489,TRUE
+Marshall Islands,7,111437.9893,TRUE
+Marshall Islands,8,47030.54376,TRUE
+Marshall Islands,17,33099.94094,TRUE
+Marshall Islands,105,149702.6633,TRUE
+Marshall Islands,120,115713.1489,TRUE
+Marshall Islands,161,8730.264786,TRUE
+Marshall Islands,169,16777.49735,TRUE
+Marshall Islands,179,121608.9919,TRUE
+Marshall Islands,180,7520.279265,TRUE
+Marshall Islands,203,26179.47154,TRUE
+Marshall Islands,205,158255.8483,TRUE
+Marshall Islands,208,84004.18102,TRUE
+Marshall Islands,219,80605.62094,TRUE
+Marshall Islands,221,53059.48552,TRUE
+Marshall Islands,229,16244.65912,TRUE
+Marshall Islands,231,60255.26389,TRUE
+Marshall Islands,235,172280.9273,TRUE
+Marshall Islands,254,26952.37295,TRUE
+Marshall Islands,84,9355.713607,TRUE
+Marshall Islands,267,9372.487582,TRUE
+Marshall Islands,282,423220.8453,TRUE
+Marshall Islands,286,760050.6713,TRUE
+Marshall Islands,289,9979.922823,TRUE
+Marshall Islands,316,72255.87156,TRUE
+Marshall Islands,317,188762.6372,TRUE
+Marshall Islands,318,32261.2753,TRUE
+Marshall Islands,18,11273.75269,TRUE
+Marshall Islands,19,77366.60983,TRUE
+Marshall Islands,33,30270.38924,TRUE
+Marshall Islands,40,180987.6885,TRUE
+Marshall Islands,49,247408.5214,TRUE
+Marshall Islands,54,175365.1249,TRUE
+Marshall Islands,58,74040.89691,TRUE
+Marshall Islands,59,22326.21725,TRUE
+Marshall Islands,63,234336.5313,TRUE
+Marshall Islands,90,194487.8189,TRUE
+Marshall Islands,94,61002.28577,TRUE
+Marshall Islands,101,138512.4356,TRUE
+Marshall Islands,112,122104.9439,TRUE
+Marshall Islands,138,17125.18189,TRUE
+Marshall Islands,152,119704.6269,TRUE
+Marshall Islands,154,96782.90416,TRUE
+Marshall Islands,158,96473.15601,TRUE
+Marshall Islands,200,22918.25267,TRUE
+Marshall Islands,202,85300.04797,TRUE
+Marshall Islands,206,183393.7134,TRUE
+Marshall Islands,218,52990.31222,TRUE
+Marshall Islands,238,116960.1876,TRUE
+Marshall Islands,243,112174.5654,TRUE
+Marshall Islands,259,55616.6005,TRUE
+Marshall Islands,276,10950.60863,TRUE
+Marshall Islands,279,177754.1672,TRUE
+Marshall Islands,298,120463.1286,TRUE
+Marshall Islands,305,15590.0347,TRUE
+Marshall Islands,306,131681.4608,TRUE
+Marshall Islands,11,178064.2799,TRUE
+Marshall Islands,16,74389.59543,TRUE
+Marshall Islands,48,27222.34375,TRUE
+Marshall Islands,60,22383.25858,TRUE
+Marshall Islands,63,11715.28525,TRUE
+Marshall Islands,121,115777.4722,TRUE
+Marshall Islands,128,9353.124815,TRUE
+Marshall Islands,156,10200.29705,TRUE
+Marshall Islands,217,21196.4891,TRUE
+Marshall Islands,248,14225.32829,TRUE
+Marshall Islands,270,9151.63574,TRUE
+Marshall Islands,52,72720.10141,TRUE
+Marshall Islands,74,4541.36112,TRUE
+Marshall Islands,75,36041,FALSE
+Marshall Islands,80,49992.57574,TRUE
+Marshall Islands,301,113987.8459,TRUE
+Marshall Islands,319,89190.44102,TRUE
+Marshall Islands,51,26504.47085,TRUE
+Marshall Islands,53,6581.96824,TRUE
+Marshall Islands,77,5993.147024,TRUE
+Marshall Islands,213,124295.9159,TRUE
+Marshall Islands,228,133880.2683,TRUE
+Marshall Islands,269,15171.62496,TRUE
+Marshall Islands,296,43692.55808,TRUE
+Marshall Islands,175,70802.39066,TRUE
+Marshall Islands,12,36715.19395,TRUE
+Marshall Islands,13,74728.86082,TRUE
+Marshall Islands,108,12577.92841,TRUE
+Marshall Islands,165,14797.07017,TRUE
+Marshall Islands,215,105585.0293,TRUE
+Marshall Islands,261,8946.089355,TRUE
+Marshall Islands,281,136069.2843,TRUE
+Marshall Islands,302,27087.34387,TRUE
+Marshall Islands,310,36133,TRUE
+Marshall Islands,106,13595.99028,TRUE
+Marshall Islands,30,62885.73079,TRUE
+Marshall Islands,91,126485.3041,TRUE
+Marshall Islands,192,3780098.195,TRUE
+Marshall Islands,249,70032.42373,TRUE
+Marshall Islands,308,35296.76443,TRUE
+Marshall Islands,116,98484.54468,TRUE
+Marshall Islands,234,8162.890747,TRUE
+Marshall Islands,88,138218.959,TRUE
+Marshall Islands,227,9358.848173,TRUE
+Marshall Islands,8,21599.0332,TRUE
+Marshall Islands,115,186672.4488,TRUE
+Marshall Islands,146,28645.96233,TRUE
+Marshall Islands,257,14862.84549,TRUE
+Marshall Islands,39,10075.63454,TRUE
+Marshall Islands,61,218943.5096,TRUE
+Marshall Islands,76,100326.9844,TRUE
+Marshall Islands,268,27005.25,TRUE
+Marshall Islands,194,9390.783666,TRUE
+Marshall Islands,198,5299.135169,TRUE
+Marshall Islands,245,11957.75,TRUE
+Marshall Islands,86,15341.61704,TRUE
+Marshall Islands,247,27947.125,TRUE
+Marshall Islands,15,5922.875,TRUE
+Marshall Islands,135,5719.346191,TRUE
+Marshall Islands,65,4252.65625,TRUE
+Marshall Islands,70,8796.273438,TRUE
+Marshall Islands,314,4472.643433,TRUE
+Marshall Islands,133,6124.625,TRUE
+Marshall Islands,240,4373.4375,TRUE
+Marshall Islands,148,23186,TRUE
+Marshall Islands,31,5157,TRUE
+Martinique,4,20977.52128,TRUE
+Martinique,5,7484.490489,TRUE
+Martinique,7,111437.9893,TRUE
+Martinique,8,47030.54376,TRUE
+Martinique,17,33099.94094,TRUE
+Martinique,105,149702.6633,TRUE
+Martinique,120,115713.1489,TRUE
+Martinique,161,8730.264786,TRUE
+Martinique,169,16777.49735,TRUE
+Martinique,179,103522,FALSE
+Martinique,180,7520.279265,TRUE
+Martinique,203,26179.47154,TRUE
+Martinique,205,158255.8483,TRUE
+Martinique,208,60841,FALSE
+Martinique,219,80605.62094,TRUE
+Martinique,221,53059.48552,TRUE
+Martinique,229,16244.65912,TRUE
+Martinique,231,60255.26389,TRUE
+Martinique,235,172280.9273,TRUE
+Martinique,254,26952.37295,TRUE
+Martinique,84,9355.713607,TRUE
+Martinique,267,9372.487582,TRUE
+Martinique,282,423220.8453,TRUE
+Martinique,286,485712,FALSE
+Martinique,289,9979.922823,TRUE
+Martinique,316,72255.87156,TRUE
+Martinique,317,188762.6372,TRUE
+Martinique,318,32261.2753,TRUE
+Martinique,18,11273.75269,TRUE
+Martinique,19,42954,FALSE
+Martinique,33,30270.38924,TRUE
+Martinique,40,141058,FALSE
+Martinique,49,28606,FALSE
+Martinique,54,175365.1249,TRUE
+Martinique,58,74040.89691,TRUE
+Martinique,59,22326.21725,TRUE
+Martinique,63,30350,FALSE
+Martinique,90,221616,FALSE
+Martinique,94,61002.28577,TRUE
+Martinique,101,192119,FALSE
+Martinique,112,122104.9439,TRUE
+Martinique,138,17125.18189,TRUE
+Martinique,152,119704.6269,TRUE
+Martinique,154,43602,FALSE
+Martinique,158,117931,FALSE
+Martinique,200,22918.25267,TRUE
+Martinique,202,85300.04797,TRUE
+Martinique,206,183393.7134,TRUE
+Martinique,218,52990.31222,TRUE
+Martinique,238,116960.1876,TRUE
+Martinique,243,112174.5654,TRUE
+Martinique,259,55616.6005,TRUE
+Martinique,276,10950.60863,TRUE
+Martinique,279,177754.1672,TRUE
+Martinique,298,120463.1286,TRUE
+Martinique,305,15590.0347,TRUE
+Martinique,306,182256,FALSE
+Martinique,11,178064.2799,TRUE
+Martinique,16,331153,FALSE
+Martinique,48,27222.34375,TRUE
+Martinique,60,22383.25858,TRUE
+Martinique,63,30350,FALSE
+Martinique,121,43240,FALSE
+Martinique,128,9353.124815,TRUE
+Martinique,156,8068,FALSE
+Martinique,217,21196.4891,TRUE
+Martinique,248,14225.32829,TRUE
+Martinique,270,9151.63574,TRUE
+Martinique,52,24699,FALSE
+Martinique,74,4541.36112,TRUE
+Martinique,75,24657,FALSE
+Martinique,80,49992.57574,TRUE
+Martinique,301,113987.8459,TRUE
+Martinique,319,11568,FALSE
+Martinique,51,26504.47085,TRUE
+Martinique,53,6581.96824,TRUE
+Martinique,77,10637,FALSE
+Martinique,213,124295.9159,TRUE
+Martinique,228,197898,FALSE
+Martinique,269,15171.62496,TRUE
+Martinique,296,90164,FALSE
+Martinique,175,46280,FALSE
+Martinique,12,36715.19395,TRUE
+Martinique,13,57372,FALSE
+Martinique,108,12577.92841,TRUE
+Martinique,165,14797.07017,TRUE
+Martinique,215,105585.0293,TRUE
+Martinique,261,8946.089355,TRUE
+Martinique,281,136069.2843,TRUE
+Martinique,302,27087.34387,TRUE
+Martinique,310,36133,TRUE
+Martinique,106,13595.99028,TRUE
+Martinique,30,62885.73079,TRUE
+Martinique,91,126485.3041,TRUE
+Martinique,192,3780098.195,TRUE
+Martinique,249,70032.42373,TRUE
+Martinique,308,35296.76443,TRUE
+Martinique,116,98484.54468,TRUE
+Martinique,234,8162.890747,TRUE
+Martinique,88,138218.959,TRUE
+Martinique,227,9358.848173,TRUE
+Martinique,8,21599.0332,TRUE
+Martinique,115,186672.4488,TRUE
+Martinique,146,28645.96233,TRUE
+Martinique,257,14862.84549,TRUE
+Martinique,39,10075.63454,TRUE
+Martinique,61,218943.5096,TRUE
+Martinique,76,100326.9844,TRUE
+Martinique,268,27005.25,TRUE
+Martinique,194,9390.783666,TRUE
+Martinique,198,5299.135169,TRUE
+Martinique,245,11957.75,TRUE
+Martinique,86,15341.61704,TRUE
+Martinique,247,27947.125,TRUE
+Martinique,15,5922.875,TRUE
+Martinique,135,5719.346191,TRUE
+Martinique,65,4252.65625,TRUE
+Martinique,70,8796.273438,TRUE
+Martinique,314,4472.643433,TRUE
+Martinique,133,6124.625,TRUE
+Martinique,240,4373.4375,TRUE
+Martinique,148,23186,TRUE
+Martinique,31,5157,TRUE
+Mauritania,4,20977.52128,TRUE
+Mauritania,5,7484.490489,TRUE
+Mauritania,7,111437.9893,TRUE
+Mauritania,8,47030.54376,TRUE
+Mauritania,17,29385,FALSE
+Mauritania,105,149702.6633,TRUE
+Mauritania,120,115713.1489,TRUE
+Mauritania,161,8730.264786,TRUE
+Mauritania,169,6701,FALSE
+Mauritania,179,121608.9919,TRUE
+Mauritania,180,2712,FALSE
+Mauritania,203,26179.47154,TRUE
+Mauritania,205,158255.8483,TRUE
+Mauritania,208,84004.18102,TRUE
+Mauritania,219,80605.62094,TRUE
+Mauritania,221,53059.48552,TRUE
+Mauritania,229,16244.65912,TRUE
+Mauritania,231,60255.26389,TRUE
+Mauritania,235,59665,FALSE
+Mauritania,254,52528,FALSE
+Mauritania,84,9355.713607,TRUE
+Mauritania,267,9372.487582,TRUE
+Mauritania,282,423220.8453,TRUE
+Mauritania,286,760050.6713,TRUE
+Mauritania,289,9979.922823,TRUE
+Mauritania,316,72255.87156,TRUE
+Mauritania,317,4086,FALSE
+Mauritania,318,21481,FALSE
+Mauritania,18,11963,FALSE
+Mauritania,19,77366.60983,TRUE
+Mauritania,33,30270.38924,TRUE
+Mauritania,40,180987.6885,TRUE
+Mauritania,49,247408.5214,TRUE
+Mauritania,54,175365.1249,TRUE
+Mauritania,58,74040.89691,TRUE
+Mauritania,59,22326.21725,TRUE
+Mauritania,63,234336.5313,TRUE
+Mauritania,90,194487.8189,TRUE
+Mauritania,94,24359,FALSE
+Mauritania,101,138512.4356,TRUE
+Mauritania,112,122104.9439,TRUE
+Mauritania,138,17125.18189,TRUE
+Mauritania,152,119704.6269,TRUE
+Mauritania,154,96782.90416,TRUE
+Mauritania,158,96473.15601,TRUE
+Mauritania,200,22918.25267,TRUE
+Mauritania,202,85300.04797,TRUE
+Mauritania,206,183393.7134,TRUE
+Mauritania,218,52990.31222,TRUE
+Mauritania,238,116960.1876,TRUE
+Mauritania,243,112174.5654,TRUE
+Mauritania,259,55616.6005,TRUE
+Mauritania,276,10950.60863,TRUE
+Mauritania,279,177754.1672,TRUE
+Mauritania,298,120463.1286,TRUE
+Mauritania,305,15590.0347,TRUE
+Mauritania,306,131681.4608,TRUE
+Mauritania,11,178064.2799,TRUE
+Mauritania,16,74389.59543,TRUE
+Mauritania,48,27222.34375,TRUE
+Mauritania,60,22383.25858,TRUE
+Mauritania,63,11715.28525,TRUE
+Mauritania,121,115777.4722,TRUE
+Mauritania,128,8040,FALSE
+Mauritania,156,10200.29705,TRUE
+Mauritania,217,3034,FALSE
+Mauritania,248,14225.32829,TRUE
+Mauritania,270,4339,FALSE
+Mauritania,52,72720.10141,TRUE
+Mauritania,74,4541.36112,TRUE
+Mauritania,75,47178.96176,TRUE
+Mauritania,80,49992.57574,TRUE
+Mauritania,301,113987.8459,TRUE
+Mauritania,319,62868,FALSE
+Mauritania,51,26504.47085,TRUE
+Mauritania,53,6581.96824,TRUE
+Mauritania,77,5993.147024,TRUE
+Mauritania,213,124295.9159,TRUE
+Mauritania,228,133880.2683,TRUE
+Mauritania,269,15171.62496,TRUE
+Mauritania,296,10001,FALSE
+Mauritania,175,70802.39066,TRUE
+Mauritania,12,36715.19395,TRUE
+Mauritania,13,74728.86082,TRUE
+Mauritania,108,12577.92841,TRUE
+Mauritania,165,14797.07017,TRUE
+Mauritania,215,105585.0293,TRUE
+Mauritania,261,8946.089355,TRUE
+Mauritania,281,136069.2843,TRUE
+Mauritania,302,27087.34387,TRUE
+Mauritania,310,36133,TRUE
+Mauritania,106,13595.99028,TRUE
+Mauritania,30,62885.73079,TRUE
+Mauritania,91,126485.3041,TRUE
+Mauritania,192,3780098.195,TRUE
+Mauritania,249,70032.42373,TRUE
+Mauritania,308,35296.76443,TRUE
+Mauritania,116,98484.54468,TRUE
+Mauritania,234,8162.890747,TRUE
+Mauritania,88,138218.959,TRUE
+Mauritania,227,9358.848173,TRUE
+Mauritania,8,21599.0332,TRUE
+Mauritania,115,186672.4488,TRUE
+Mauritania,146,28645.96233,TRUE
+Mauritania,257,14862.84549,TRUE
+Mauritania,39,10075.63454,TRUE
+Mauritania,61,218943.5096,TRUE
+Mauritania,76,100326.9844,TRUE
+Mauritania,268,27005.25,TRUE
+Mauritania,194,9390.783666,TRUE
+Mauritania,198,5299.135169,TRUE
+Mauritania,245,11957.75,TRUE
+Mauritania,86,3560,FALSE
+Mauritania,247,27947.125,TRUE
+Mauritania,15,5922.875,TRUE
+Mauritania,135,5719.346191,TRUE
+Mauritania,65,4252.65625,TRUE
+Mauritania,70,8796.273438,TRUE
+Mauritania,314,4472.643433,TRUE
+Mauritania,133,6124.625,TRUE
+Mauritania,240,4373.4375,TRUE
+Mauritania,148,23186,TRUE
+Mauritania,31,5157,TRUE
+Mauritius,4,20977.52128,TRUE
+Mauritius,5,7484.490489,TRUE
+Mauritius,7,111437.9893,TRUE
+Mauritius,8,47030.54376,TRUE
+Mauritius,17,33099.94094,TRUE
+Mauritius,105,149702.6633,TRUE
+Mauritius,120,115713.1489,TRUE
+Mauritius,161,8730.264786,TRUE
+Mauritius,169,68033,FALSE
+Mauritius,179,121608.9919,TRUE
+Mauritius,180,7520.279265,TRUE
+Mauritius,203,26179.47154,TRUE
+Mauritius,205,185049,FALSE
+Mauritius,208,84004.18102,TRUE
+Mauritius,219,80605.62094,TRUE
+Mauritius,221,53059.48552,TRUE
+Mauritius,229,16244.65912,TRUE
+Mauritius,231,60255.26389,TRUE
+Mauritius,235,213612,FALSE
+Mauritius,254,21863,FALSE
+Mauritius,84,9355.713607,TRUE
+Mauritius,267,9372.487582,TRUE
+Mauritius,282,423220.8453,TRUE
+Mauritius,286,737892,FALSE
+Mauritius,289,9979.922823,TRUE
+Mauritius,316,72255.87156,TRUE
+Mauritius,317,188762.6372,TRUE
+Mauritius,318,32261.2753,TRUE
+Mauritius,18,11273.75269,TRUE
+Mauritius,19,57308,FALSE
+Mauritius,33,30270.38924,TRUE
+Mauritius,40,184150,FALSE
+Mauritius,49,172102,FALSE
+Mauritius,54,184025,FALSE
+Mauritius,58,74040.89691,TRUE
+Mauritius,59,22326.21725,TRUE
+Mauritius,63,62121,FALSE
+Mauritius,90,119742,FALSE
+Mauritius,94,61002.28577,TRUE
+Mauritius,101,95099,FALSE
+Mauritius,112,65699,FALSE
+Mauritius,138,17125.18189,TRUE
+Mauritius,152,99677,FALSE
+Mauritius,154,96782.90416,TRUE
+Mauritius,158,125581,FALSE
+Mauritius,200,22918.25267,TRUE
+Mauritius,202,69953,FALSE
+Mauritius,206,183393.7134,TRUE
+Mauritius,218,19600,FALSE
+Mauritius,238,110838,FALSE
+Mauritius,243,112174.5654,TRUE
+Mauritius,259,55616.6005,TRUE
+Mauritius,276,10950.60863,TRUE
+Mauritius,279,177754.1672,TRUE
+Mauritius,298,120463.1286,TRUE
+Mauritius,305,11801,FALSE
+Mauritius,306,138849,FALSE
+Mauritius,11,178064.2799,TRUE
+Mauritius,16,168348,FALSE
+Mauritius,48,27222.34375,TRUE
+Mauritius,60,22383.25858,TRUE
+Mauritius,63,62121,FALSE
+Mauritius,121,115777.4722,TRUE
+Mauritius,128,26607,FALSE
+Mauritius,156,10200.29705,TRUE
+Mauritius,217,21196.4891,TRUE
+Mauritius,248,14225.32829,TRUE
+Mauritius,270,9151.63574,TRUE
+Mauritius,52,130441,FALSE
+Mauritius,74,4541.36112,TRUE
+Mauritius,75,29443,FALSE
+Mauritius,80,67734,FALSE
+Mauritius,301,133837,FALSE
+Mauritius,319,89190.44102,TRUE
+Mauritius,51,26504.47085,TRUE
+Mauritius,53,6581.96824,TRUE
+Mauritius,77,5993.147024,TRUE
+Mauritius,213,124295.9159,TRUE
+Mauritius,228,232814,FALSE
+Mauritius,269,15171.62496,TRUE
+Mauritius,296,128304,FALSE
+Mauritius,175,70802.39066,TRUE
+Mauritius,12,36715.19395,TRUE
+Mauritius,13,74728.86082,TRUE
+Mauritius,108,12577.92841,TRUE
+Mauritius,165,14797.07017,TRUE
+Mauritius,215,105585.0293,TRUE
+Mauritius,261,8946.089355,TRUE
+Mauritius,281,136069.2843,TRUE
+Mauritius,302,21752,FALSE
+Mauritius,310,36133,TRUE
+Mauritius,106,13595.99028,TRUE
+Mauritius,30,62885.73079,TRUE
+Mauritius,91,126485.3041,TRUE
+Mauritius,192,3780098.195,TRUE
+Mauritius,249,70032.42373,TRUE
+Mauritius,308,35296.76443,TRUE
+Mauritius,116,98484.54468,TRUE
+Mauritius,234,8162.890747,TRUE
+Mauritius,88,138218.959,TRUE
+Mauritius,227,9358.848173,TRUE
+Mauritius,8,21599.0332,TRUE
+Mauritius,115,139590,FALSE
+Mauritius,146,28645.96233,TRUE
+Mauritius,257,14862.84549,TRUE
+Mauritius,39,10075.63454,TRUE
+Mauritius,61,218943.5096,TRUE
+Mauritius,76,100326.9844,TRUE
+Mauritius,268,27005.25,TRUE
+Mauritius,194,9390.783666,TRUE
+Mauritius,198,5299.135169,TRUE
+Mauritius,245,11957.75,TRUE
+Mauritius,86,15341.61704,TRUE
+Mauritius,247,27947.125,TRUE
+Mauritius,15,5922.875,TRUE
+Mauritius,135,5719.346191,TRUE
+Mauritius,65,4252.65625,TRUE
+Mauritius,70,8796.273438,TRUE
+Mauritius,314,4472.643433,TRUE
+Mauritius,133,6124.625,TRUE
+Mauritius,240,4373.4375,TRUE
+Mauritius,148,23186,TRUE
+Mauritius,31,5157,TRUE
+Mexico,4,15484,FALSE
+Mexico,5,111382,FALSE
+Mexico,7,132157,FALSE
+Mexico,8,50917,FALSE
+Mexico,17,29670,FALSE
+Mexico,105,52908,FALSE
+Mexico,120,118812,FALSE
+Mexico,161,5087,FALSE
+Mexico,169,37181,FALSE
+Mexico,179,296162,FALSE
+Mexico,180,9957,FALSE
+Mexico,203,42503,FALSE
+Mexico,205,317458,FALSE
+Mexico,208,146326,FALSE
+Mexico,219,61329,FALSE
+Mexico,221,64034,FALSE
+Mexico,229,4141,FALSE
+Mexico,231,53349,FALSE
+Mexico,235,279260,FALSE
+Mexico,254,61346,FALSE
+Mexico,84,46747,FALSE
+Mexico,267,6598,FALSE
+Mexico,282,195914,FALSE
+Mexico,286,722700,FALSE
+Mexico,289,10513,FALSE
+Mexico,316,16982,FALSE
+Mexico,317,310214,FALSE
+Mexico,318,53388,FALSE
+Mexico,18,6908,FALSE
+Mexico,19,90733,FALSE
+Mexico,33,15546,FALSE
+Mexico,40,327887,FALSE
+Mexico,49,281387,FALSE
+Mexico,54,163968,FALSE
+Mexico,58,37655,FALSE
+Mexico,59,22326.21725,TRUE
+Mexico,63,18443,FALSE
+Mexico,90,476410,FALSE
+Mexico,94,68348,FALSE
+Mexico,101,674455,FALSE
+Mexico,112,118052,FALSE
+Mexico,138,17125.18189,TRUE
+Mexico,152,165496,FALSE
+Mexico,154,148645,FALSE
+Mexico,158,219195,FALSE
+Mexico,200,18536,FALSE
+Mexico,202,86316,FALSE
+Mexico,206,115823,FALSE
+Mexico,218,50472,FALSE
+Mexico,238,184377,FALSE
+Mexico,243,82551,FALSE
+Mexico,259,12765,FALSE
+Mexico,276,18327,FALSE
+Mexico,279,137475,FALSE
+Mexico,298,139102,FALSE
+Mexico,305,22534,FALSE
+Mexico,306,433429,FALSE
+Mexico,11,143848,FALSE
+Mexico,16,304484,FALSE
+Mexico,48,27222.34375,TRUE
+Mexico,60,18332,FALSE
+Mexico,63,18443,FALSE
+Mexico,121,265088,FALSE
+Mexico,128,17057,FALSE
+Mexico,156,7484,FALSE
+Mexico,217,12824,FALSE
+Mexico,248,13333,FALSE
+Mexico,270,33085,FALSE
+Mexico,52,122464,FALSE
+Mexico,74,4574,FALSE
+Mexico,75,63031,FALSE
+Mexico,80,127882,FALSE
+Mexico,301,113987.8459,TRUE
+Mexico,319,89190.44102,TRUE
+Mexico,51,24971,FALSE
+Mexico,53,14077,FALSE
+Mexico,77,2350,FALSE
+Mexico,213,128858,FALSE
+Mexico,228,449393,FALSE
+Mexico,269,17038,FALSE
+Mexico,296,197203,FALSE
+Mexico,175,106447,FALSE
+Mexico,12,87478,FALSE
+Mexico,13,104652,FALSE
+Mexico,108,12577.92841,TRUE
+Mexico,165,14797.07017,TRUE
+Mexico,215,565954,FALSE
+Mexico,261,18518,FALSE
+Mexico,281,422190,FALSE
+Mexico,302,27087.34387,TRUE
+Mexico,310,36133,TRUE
+Mexico,106,13595.99028,TRUE
+Mexico,30,98654,FALSE
+Mexico,91,126485.3041,TRUE
+Mexico,192,3780098.195,TRUE
+Mexico,249,181472,FALSE
+Mexico,308,31293,FALSE
+Mexico,116,98484.54468,TRUE
+Mexico,234,8162.890747,TRUE
+Mexico,88,138218.959,TRUE
+Mexico,227,9358.848173,TRUE
+Mexico,8,50917,FALSE
+Mexico,115,88137,FALSE
+Mexico,146,28645.96233,TRUE
+Mexico,257,26993,FALSE
+Mexico,39,10075.63454,TRUE
+Mexico,61,218943.5096,TRUE
+Mexico,76,594265,FALSE
+Mexico,268,27005.25,TRUE
+Mexico,194,6667,FALSE
+Mexico,198,5299.135169,TRUE
+Mexico,245,11957.75,TRUE
+Mexico,86,15341.61704,TRUE
+Mexico,247,27947.125,TRUE
+Mexico,15,5922.875,TRUE
+Mexico,135,5719.346191,TRUE
+Mexico,65,4252.65625,TRUE
+Mexico,70,8796.273438,TRUE
+Mexico,314,5240,FALSE
+Mexico,133,6124.625,TRUE
+Mexico,240,4373.4375,TRUE
+Mexico,148,23186,TRUE
+Mexico,31,5157,TRUE
+Micronesia (Federated States of),4,20977.52128,TRUE
+Micronesia (Federated States of),5,7484.490489,TRUE
+Micronesia (Federated States of),7,111437.9893,TRUE
+Micronesia (Federated States of),8,47030.54376,TRUE
+Micronesia (Federated States of),17,33099.94094,TRUE
+Micronesia (Federated States of),105,149702.6633,TRUE
+Micronesia (Federated States of),120,115713.1489,TRUE
+Micronesia (Federated States of),161,8730.264786,TRUE
+Micronesia (Federated States of),169,14302,FALSE
+Micronesia (Federated States of),179,121608.9919,TRUE
+Micronesia (Federated States of),180,7520.279265,TRUE
+Micronesia (Federated States of),203,26179.47154,TRUE
+Micronesia (Federated States of),205,158255.8483,TRUE
+Micronesia (Federated States of),208,84004.18102,TRUE
+Micronesia (Federated States of),219,80605.62094,TRUE
+Micronesia (Federated States of),221,53059.48552,TRUE
+Micronesia (Federated States of),229,16244.65912,TRUE
+Micronesia (Federated States of),231,60255.26389,TRUE
+Micronesia (Federated States of),235,172280.9273,TRUE
+Micronesia (Federated States of),254,17478,FALSE
+Micronesia (Federated States of),84,9355.713607,TRUE
+Micronesia (Federated States of),267,9372.487582,TRUE
+Micronesia (Federated States of),282,423220.8453,TRUE
+Micronesia (Federated States of),286,760050.6713,TRUE
+Micronesia (Federated States of),289,9979.922823,TRUE
+Micronesia (Federated States of),316,72255.87156,TRUE
+Micronesia (Federated States of),317,188762.6372,TRUE
+Micronesia (Federated States of),318,32261.2753,TRUE
+Micronesia (Federated States of),18,11273.75269,TRUE
+Micronesia (Federated States of),19,77366.60983,TRUE
+Micronesia (Federated States of),33,30270.38924,TRUE
+Micronesia (Federated States of),40,180987.6885,TRUE
+Micronesia (Federated States of),49,247408.5214,TRUE
+Micronesia (Federated States of),54,175365.1249,TRUE
+Micronesia (Federated States of),58,74040.89691,TRUE
+Micronesia (Federated States of),59,22326.21725,TRUE
+Micronesia (Federated States of),63,234336.5313,TRUE
+Micronesia (Federated States of),90,194487.8189,TRUE
+Micronesia (Federated States of),94,61002.28577,TRUE
+Micronesia (Federated States of),101,138512.4356,TRUE
+Micronesia (Federated States of),112,122104.9439,TRUE
+Micronesia (Federated States of),138,17125.18189,TRUE
+Micronesia (Federated States of),152,119704.6269,TRUE
+Micronesia (Federated States of),154,96782.90416,TRUE
+Micronesia (Federated States of),158,96473.15601,TRUE
+Micronesia (Federated States of),200,22918.25267,TRUE
+Micronesia (Federated States of),202,85300.04797,TRUE
+Micronesia (Federated States of),206,183393.7134,TRUE
+Micronesia (Federated States of),218,52990.31222,TRUE
+Micronesia (Federated States of),238,116960.1876,TRUE
+Micronesia (Federated States of),243,112174.5654,TRUE
+Micronesia (Federated States of),259,55616.6005,TRUE
+Micronesia (Federated States of),276,10950.60863,TRUE
+Micronesia (Federated States of),279,177754.1672,TRUE
+Micronesia (Federated States of),298,120463.1286,TRUE
+Micronesia (Federated States of),305,15590.0347,TRUE
+Micronesia (Federated States of),306,131681.4608,TRUE
+Micronesia (Federated States of),11,178064.2799,TRUE
+Micronesia (Federated States of),16,52933,FALSE
+Micronesia (Federated States of),48,27222.34375,TRUE
+Micronesia (Federated States of),60,22383.25858,TRUE
+Micronesia (Federated States of),63,11715.28525,TRUE
+Micronesia (Federated States of),121,115777.4722,TRUE
+Micronesia (Federated States of),128,9353.124815,TRUE
+Micronesia (Federated States of),156,10200.29705,TRUE
+Micronesia (Federated States of),217,21196.4891,TRUE
+Micronesia (Federated States of),248,14225.32829,TRUE
+Micronesia (Federated States of),270,21867,FALSE
+Micronesia (Federated States of),52,106333,FALSE
+Micronesia (Federated States of),74,3945,FALSE
+Micronesia (Federated States of),75,22300,FALSE
+Micronesia (Federated States of),80,49992.57574,TRUE
+Micronesia (Federated States of),301,113987.8459,TRUE
+Micronesia (Federated States of),319,89190.44102,TRUE
+Micronesia (Federated States of),51,26504.47085,TRUE
+Micronesia (Federated States of),53,6581.96824,TRUE
+Micronesia (Federated States of),77,5993.147024,TRUE
+Micronesia (Federated States of),213,124295.9159,TRUE
+Micronesia (Federated States of),228,133880.2683,TRUE
+Micronesia (Federated States of),269,15171.62496,TRUE
+Micronesia (Federated States of),296,56379,FALSE
+Micronesia (Federated States of),175,70802.39066,TRUE
+Micronesia (Federated States of),12,36715.19395,TRUE
+Micronesia (Federated States of),13,74728.86082,TRUE
+Micronesia (Federated States of),108,12577.92841,TRUE
+Micronesia (Federated States of),165,14797.07017,TRUE
+Micronesia (Federated States of),215,105585.0293,TRUE
+Micronesia (Federated States of),261,8946.089355,TRUE
+Micronesia (Federated States of),281,136069.2843,TRUE
+Micronesia (Federated States of),302,27087.34387,TRUE
+Micronesia (Federated States of),310,36133,TRUE
+Micronesia (Federated States of),106,13595.99028,TRUE
+Micronesia (Federated States of),30,62885.73079,TRUE
+Micronesia (Federated States of),91,126485.3041,TRUE
+Micronesia (Federated States of),192,3780098.195,TRUE
+Micronesia (Federated States of),249,70032.42373,TRUE
+Micronesia (Federated States of),308,35296.76443,TRUE
+Micronesia (Federated States of),116,98484.54468,TRUE
+Micronesia (Federated States of),234,8162.890747,TRUE
+Micronesia (Federated States of),88,138218.959,TRUE
+Micronesia (Federated States of),227,9358.848173,TRUE
+Micronesia (Federated States of),8,21599.0332,TRUE
+Micronesia (Federated States of),115,186672.4488,TRUE
+Micronesia (Federated States of),146,28645.96233,TRUE
+Micronesia (Federated States of),257,14862.84549,TRUE
+Micronesia (Federated States of),39,10075.63454,TRUE
+Micronesia (Federated States of),61,218943.5096,TRUE
+Micronesia (Federated States of),76,100326.9844,TRUE
+Micronesia (Federated States of),268,27005.25,TRUE
+Micronesia (Federated States of),194,9390.783666,TRUE
+Micronesia (Federated States of),198,5299.135169,TRUE
+Micronesia (Federated States of),245,11957.75,TRUE
+Micronesia (Federated States of),86,15341.61704,TRUE
+Micronesia (Federated States of),247,27947.125,TRUE
+Micronesia (Federated States of),15,5922.875,TRUE
+Micronesia (Federated States of),135,5719.346191,TRUE
+Micronesia (Federated States of),65,4252.65625,TRUE
+Micronesia (Federated States of),70,8796.273438,TRUE
+Micronesia (Federated States of),314,4472.643433,TRUE
+Micronesia (Federated States of),133,6124.625,TRUE
+Micronesia (Federated States of),240,4373.4375,TRUE
+Micronesia (Federated States of),148,23186,TRUE
+Micronesia (Federated States of),31,5157,TRUE
+Mongolia,4,20977.52128,TRUE
+Mongolia,5,7484.490489,TRUE
+Mongolia,7,111437.9893,TRUE
+Mongolia,8,47030.54376,TRUE
+Mongolia,17,9357,FALSE
+Mongolia,105,149702.6633,TRUE
+Mongolia,120,115713.1489,TRUE
+Mongolia,161,8730.264786,TRUE
+Mongolia,169,16777.49735,TRUE
+Mongolia,179,121608.9919,TRUE
+Mongolia,180,7520.279265,TRUE
+Mongolia,203,26179.47154,TRUE
+Mongolia,205,106348,FALSE
+Mongolia,208,84004.18102,TRUE
+Mongolia,219,80605.62094,TRUE
+Mongolia,221,53059.48552,TRUE
+Mongolia,229,16244.65912,TRUE
+Mongolia,231,60255.26389,TRUE
+Mongolia,235,110041,FALSE
+Mongolia,254,26952.37295,TRUE
+Mongolia,84,9355.713607,TRUE
+Mongolia,267,9372.487582,TRUE
+Mongolia,282,423220.8453,TRUE
+Mongolia,286,760050.6713,TRUE
+Mongolia,289,9979.922823,TRUE
+Mongolia,316,72255.87156,TRUE
+Mongolia,317,188762.6372,TRUE
+Mongolia,318,13154,FALSE
+Mongolia,18,11273.75269,TRUE
+Mongolia,19,77366.60983,TRUE
+Mongolia,33,30270.38924,TRUE
+Mongolia,40,161898,FALSE
+Mongolia,49,91017,FALSE
+Mongolia,54,175365.1249,TRUE
+Mongolia,58,74040.89691,TRUE
+Mongolia,59,22326.21725,TRUE
+Mongolia,63,234336.5313,TRUE
+Mongolia,90,108089,FALSE
+Mongolia,94,61002.28577,TRUE
+Mongolia,101,138512.4356,TRUE
+Mongolia,112,122104.9439,TRUE
+Mongolia,138,17125.18189,TRUE
+Mongolia,152,119704.6269,TRUE
+Mongolia,154,96782.90416,TRUE
+Mongolia,158,96473.15601,TRUE
+Mongolia,200,10572,FALSE
+Mongolia,202,85300.04797,TRUE
+Mongolia,206,183393.7134,TRUE
+Mongolia,218,52990.31222,TRUE
+Mongolia,238,116960.1876,TRUE
+Mongolia,243,112174.5654,TRUE
+Mongolia,259,55616.6005,TRUE
+Mongolia,276,10950.60863,TRUE
+Mongolia,279,177754.1672,TRUE
+Mongolia,298,120463.1286,TRUE
+Mongolia,305,15590.0347,TRUE
+Mongolia,306,131681.4608,TRUE
+Mongolia,11,178064.2799,TRUE
+Mongolia,16,74389.59543,TRUE
+Mongolia,48,27222.34375,TRUE
+Mongolia,60,22383.25858,TRUE
+Mongolia,63,11715.28525,TRUE
+Mongolia,121,115777.4722,TRUE
+Mongolia,128,9353.124815,TRUE
+Mongolia,156,10200.29705,TRUE
+Mongolia,217,21196.4891,TRUE
+Mongolia,248,26780,FALSE
+Mongolia,270,9151.63574,TRUE
+Mongolia,52,72720.10141,TRUE
+Mongolia,74,4541.36112,TRUE
+Mongolia,75,47178.96176,TRUE
+Mongolia,80,49992.57574,TRUE
+Mongolia,301,113987.8459,TRUE
+Mongolia,319,89190.44102,TRUE
+Mongolia,51,26504.47085,TRUE
+Mongolia,53,6581.96824,TRUE
+Mongolia,77,5993.147024,TRUE
+Mongolia,213,124295.9159,TRUE
+Mongolia,228,133880.2683,TRUE
+Mongolia,269,15171.62496,TRUE
+Mongolia,296,43692.55808,TRUE
+Mongolia,175,70802.39066,TRUE
+Mongolia,12,36715.19395,TRUE
+Mongolia,13,74728.86082,TRUE
+Mongolia,108,12577.92841,TRUE
+Mongolia,165,14797.07017,TRUE
+Mongolia,215,105585.0293,TRUE
+Mongolia,261,8946.089355,TRUE
+Mongolia,281,136069.2843,TRUE
+Mongolia,302,27087.34387,TRUE
+Mongolia,310,36133,TRUE
+Mongolia,106,9048,FALSE
+Mongolia,30,62885.73079,TRUE
+Mongolia,91,126485.3041,TRUE
+Mongolia,192,3780098.195,TRUE
+Mongolia,249,70032.42373,TRUE
+Mongolia,308,35296.76443,TRUE
+Mongolia,116,98484.54468,TRUE
+Mongolia,234,8162.890747,TRUE
+Mongolia,88,138218.959,TRUE
+Mongolia,227,9358.848173,TRUE
+Mongolia,8,21599.0332,TRUE
+Mongolia,115,186672.4488,TRUE
+Mongolia,146,28645.96233,TRUE
+Mongolia,257,14862.84549,TRUE
+Mongolia,39,10075.63454,TRUE
+Mongolia,61,218943.5096,TRUE
+Mongolia,76,100326.9844,TRUE
+Mongolia,268,27005.25,TRUE
+Mongolia,194,9390.783666,TRUE
+Mongolia,198,5299.135169,TRUE
+Mongolia,245,11957.75,TRUE
+Mongolia,86,15341.61704,TRUE
+Mongolia,247,27947.125,TRUE
+Mongolia,15,5922.875,TRUE
+Mongolia,135,5719.346191,TRUE
+Mongolia,65,4252.65625,TRUE
+Mongolia,70,8796.273438,TRUE
+Mongolia,314,4472.643433,TRUE
+Mongolia,133,6124.625,TRUE
+Mongolia,240,4373.4375,TRUE
+Mongolia,148,23186,TRUE
+Mongolia,31,5157,TRUE
+Montenegro,4,20977.52128,TRUE
+Montenegro,5,7484.490489,TRUE
+Montenegro,7,316767,FALSE
+Montenegro,8,47030.54376,TRUE
+Montenegro,17,27670,FALSE
+Montenegro,105,31791,FALSE
+Montenegro,120,106950,FALSE
+Montenegro,161,8730.264786,TRUE
+Montenegro,169,42189,FALSE
+Montenegro,179,280176,FALSE
+Montenegro,180,7520.279265,TRUE
+Montenegro,203,27778,FALSE
+Montenegro,205,182603,FALSE
+Montenegro,208,97761,FALSE
+Montenegro,219,213742,FALSE
+Montenegro,221,1061099,FALSE
+Montenegro,229,16244.65912,TRUE
+Montenegro,231,506772,FALSE
+Montenegro,235,185509,FALSE
+Montenegro,254,26952.37295,TRUE
+Montenegro,84,9355.713607,TRUE
+Montenegro,267,9372.487582,TRUE
+Montenegro,282,423220.8453,TRUE
+Montenegro,286,760050.6713,TRUE
+Montenegro,289,9979.922823,TRUE
+Montenegro,316,16795,FALSE
+Montenegro,317,414694,FALSE
+Montenegro,318,31506,FALSE
+Montenegro,18,32053,FALSE
+Montenegro,19,20800,FALSE
+Montenegro,33,30270.38924,TRUE
+Montenegro,40,323004,FALSE
+Montenegro,49,247408.5214,TRUE
+Montenegro,54,175365.1249,TRUE
+Montenegro,58,28486,FALSE
+Montenegro,59,22326.21725,TRUE
+Montenegro,63,260143,FALSE
+Montenegro,90,194487.8189,TRUE
+Montenegro,94,61002.28577,TRUE
+Montenegro,101,138512.4356,TRUE
+Montenegro,112,40784,FALSE
+Montenegro,138,17125.18189,TRUE
+Montenegro,152,119704.6269,TRUE
+Montenegro,154,96782.90416,TRUE
+Montenegro,158,96473.15601,TRUE
+Montenegro,200,26895,FALSE
+Montenegro,202,85300.04797,TRUE
+Montenegro,206,183393.7134,TRUE
+Montenegro,218,20685,FALSE
+Montenegro,238,116960.1876,TRUE
+Montenegro,243,112174.5654,TRUE
+Montenegro,259,21267,FALSE
+Montenegro,276,10950.60863,TRUE
+Montenegro,279,177754.1672,TRUE
+Montenegro,298,237022,FALSE
+Montenegro,305,20232,FALSE
+Montenegro,306,319778,FALSE
+Montenegro,11,178064.2799,TRUE
+Montenegro,16,74389.59543,TRUE
+Montenegro,48,27222.34375,TRUE
+Montenegro,60,22383.25858,TRUE
+Montenegro,63,260143,FALSE
+Montenegro,121,115777.4722,TRUE
+Montenegro,128,9353.124815,TRUE
+Montenegro,156,10200.29705,TRUE
+Montenegro,217,28926,FALSE
+Montenegro,248,14225.32829,TRUE
+Montenegro,270,9151.63574,TRUE
+Montenegro,52,72720.10141,TRUE
+Montenegro,74,4541.36112,TRUE
+Montenegro,75,47178.96176,TRUE
+Montenegro,80,49992.57574,TRUE
+Montenegro,301,113987.8459,TRUE
+Montenegro,319,89190.44102,TRUE
+Montenegro,51,26504.47085,TRUE
+Montenegro,53,6581.96824,TRUE
+Montenegro,77,5993.147024,TRUE
+Montenegro,213,124295.9159,TRUE
+Montenegro,228,133880.2683,TRUE
+Montenegro,269,15171.62496,TRUE
+Montenegro,296,43692.55808,TRUE
+Montenegro,175,70802.39066,TRUE
+Montenegro,12,36715.19395,TRUE
+Montenegro,13,74728.86082,TRUE
+Montenegro,108,12577.92841,TRUE
+Montenegro,165,14797.07017,TRUE
+Montenegro,215,105585.0293,TRUE
+Montenegro,261,8946.089355,TRUE
+Montenegro,281,136069.2843,TRUE
+Montenegro,302,8095,FALSE
+Montenegro,310,36133,TRUE
+Montenegro,106,13595.99028,TRUE
+Montenegro,30,62885.73079,TRUE
+Montenegro,91,126485.3041,TRUE
+Montenegro,192,3780098.195,TRUE
+Montenegro,249,31328,FALSE
+Montenegro,308,35296.76443,TRUE
+Montenegro,116,98484.54468,TRUE
+Montenegro,234,8162.890747,TRUE
+Montenegro,88,138218.959,TRUE
+Montenegro,227,9358.848173,TRUE
+Montenegro,8,21599.0332,TRUE
+Montenegro,115,186672.4488,TRUE
+Montenegro,146,28645.96233,TRUE
+Montenegro,257,14862.84549,TRUE
+Montenegro,39,10075.63454,TRUE
+Montenegro,61,218943.5096,TRUE
+Montenegro,76,100326.9844,TRUE
+Montenegro,268,27005.25,TRUE
+Montenegro,194,9390.783666,TRUE
+Montenegro,198,5299.135169,TRUE
+Montenegro,245,11957.75,TRUE
+Montenegro,86,15341.61704,TRUE
+Montenegro,247,27947.125,TRUE
+Montenegro,15,5922.875,TRUE
+Montenegro,135,5719.346191,TRUE
+Montenegro,65,4252.65625,TRUE
+Montenegro,70,8796.273438,TRUE
+Montenegro,314,4472.643433,TRUE
+Montenegro,133,6124.625,TRUE
+Montenegro,240,4373.4375,TRUE
+Montenegro,148,23186,TRUE
+Montenegro,31,5157,TRUE
+Montserrat,4,20977.52128,TRUE
+Montserrat,5,7484.490489,TRUE
+Montserrat,7,111437.9893,TRUE
+Montserrat,8,47030.54376,TRUE
+Montserrat,17,33099.94094,TRUE
+Montserrat,105,149702.6633,TRUE
+Montserrat,120,115713.1489,TRUE
+Montserrat,161,8730.264786,TRUE
+Montserrat,169,69589,FALSE
+Montserrat,179,121608.9919,TRUE
+Montserrat,180,7520.279265,TRUE
+Montserrat,203,26179.47154,TRUE
+Montserrat,205,26561,FALSE
+Montserrat,208,84004.18102,TRUE
+Montserrat,219,80605.62094,TRUE
+Montserrat,221,53059.48552,TRUE
+Montserrat,229,16244.65912,TRUE
+Montserrat,231,60255.26389,TRUE
+Montserrat,235,52714,FALSE
+Montserrat,254,26952.37295,TRUE
+Montserrat,84,9488,FALSE
+Montserrat,267,9372.487582,TRUE
+Montserrat,282,423220.8453,TRUE
+Montserrat,286,760050.6713,TRUE
+Montserrat,289,9979.922823,TRUE
+Montserrat,316,72255.87156,TRUE
+Montserrat,317,188762.6372,TRUE
+Montserrat,318,32261.2753,TRUE
+Montserrat,18,11273.75269,TRUE
+Montserrat,19,77366.60983,TRUE
+Montserrat,33,30270.38924,TRUE
+Montserrat,40,180987.6885,TRUE
+Montserrat,49,58234,FALSE
+Montserrat,54,175365.1249,TRUE
+Montserrat,58,74040.89691,TRUE
+Montserrat,59,22326.21725,TRUE
+Montserrat,63,11463,FALSE
+Montserrat,90,11841,FALSE
+Montserrat,94,61002.28577,TRUE
+Montserrat,101,138512.4356,TRUE
+Montserrat,112,122104.9439,TRUE
+Montserrat,138,17125.18189,TRUE
+Montserrat,152,119704.6269,TRUE
+Montserrat,154,96782.90416,TRUE
+Montserrat,158,96473.15601,TRUE
+Montserrat,200,22918.25267,TRUE
+Montserrat,202,85300.04797,TRUE
+Montserrat,206,183393.7134,TRUE
+Montserrat,218,52990.31222,TRUE
+Montserrat,238,116960.1876,TRUE
+Montserrat,243,112174.5654,TRUE
+Montserrat,259,55616.6005,TRUE
+Montserrat,276,10950.60863,TRUE
+Montserrat,279,177754.1672,TRUE
+Montserrat,298,120463.1286,TRUE
+Montserrat,305,15590.0347,TRUE
+Montserrat,306,44543,FALSE
+Montserrat,11,178064.2799,TRUE
+Montserrat,16,32719,FALSE
+Montserrat,48,27222.34375,TRUE
+Montserrat,60,22383.25858,TRUE
+Montserrat,63,11463,FALSE
+Montserrat,121,115777.4722,TRUE
+Montserrat,128,9353.124815,TRUE
+Montserrat,156,10200.29705,TRUE
+Montserrat,217,21196.4891,TRUE
+Montserrat,248,14225.32829,TRUE
+Montserrat,270,9151.63574,TRUE
+Montserrat,52,72720.10141,TRUE
+Montserrat,74,4541.36112,TRUE
+Montserrat,75,47178.96176,TRUE
+Montserrat,80,49992.57574,TRUE
+Montserrat,301,113987.8459,TRUE
+Montserrat,319,89190.44102,TRUE
+Montserrat,51,26504.47085,TRUE
+Montserrat,53,6581.96824,TRUE
+Montserrat,77,5993.147024,TRUE
+Montserrat,213,124295.9159,TRUE
+Montserrat,228,133880.2683,TRUE
+Montserrat,269,15171.62496,TRUE
+Montserrat,296,62860,FALSE
+Montserrat,175,48291,FALSE
+Montserrat,12,36715.19395,TRUE
+Montserrat,13,74728.86082,TRUE
+Montserrat,108,12577.92841,TRUE
+Montserrat,165,14797.07017,TRUE
+Montserrat,215,105585.0293,TRUE
+Montserrat,261,8946.089355,TRUE
+Montserrat,281,136069.2843,TRUE
+Montserrat,302,27087.34387,TRUE
+Montserrat,310,36133,TRUE
+Montserrat,106,13595.99028,TRUE
+Montserrat,30,62885.73079,TRUE
+Montserrat,91,126485.3041,TRUE
+Montserrat,192,3780098.195,TRUE
+Montserrat,249,70032.42373,TRUE
+Montserrat,308,35296.76443,TRUE
+Montserrat,116,98484.54468,TRUE
+Montserrat,234,8162.890747,TRUE
+Montserrat,88,138218.959,TRUE
+Montserrat,227,9358.848173,TRUE
+Montserrat,8,21599.0332,TRUE
+Montserrat,115,186672.4488,TRUE
+Montserrat,146,28645.96233,TRUE
+Montserrat,257,14862.84549,TRUE
+Montserrat,39,10075.63454,TRUE
+Montserrat,61,218943.5096,TRUE
+Montserrat,76,100326.9844,TRUE
+Montserrat,268,27005.25,TRUE
+Montserrat,194,9390.783666,TRUE
+Montserrat,198,5299.135169,TRUE
+Montserrat,245,11957.75,TRUE
+Montserrat,86,15341.61704,TRUE
+Montserrat,247,27947.125,TRUE
+Montserrat,15,5922.875,TRUE
+Montserrat,135,5719.346191,TRUE
+Montserrat,65,4252.65625,TRUE
+Montserrat,70,8796.273438,TRUE
+Montserrat,314,4472.643433,TRUE
+Montserrat,133,6124.625,TRUE
+Montserrat,240,4373.4375,TRUE
+Montserrat,148,23186,TRUE
+Montserrat,31,5157,TRUE
+Morocco,4,6795,FALSE
+Morocco,5,10647,FALSE
+Morocco,7,83495,FALSE
+Morocco,8,54889,FALSE
+Morocco,17,5133,FALSE
+Morocco,105,10270,FALSE
+Morocco,120,79311,FALSE
+Morocco,161,8730.264786,TRUE
+Morocco,169,9275,FALSE
+Morocco,179,286242,FALSE
+Morocco,180,21127,FALSE
+Morocco,203,14044,FALSE
+Morocco,205,273286,FALSE
+Morocco,208,162934,FALSE
+Morocco,219,103440,FALSE
+Morocco,221,78813,FALSE
+Morocco,229,16244.65912,TRUE
+Morocco,231,82795,FALSE
+Morocco,235,293368,FALSE
+Morocco,254,70881,FALSE
+Morocco,84,21076,FALSE
+Morocco,267,7861,FALSE
+Morocco,282,691882,FALSE
+Morocco,286,408763,FALSE
+Morocco,289,7948,FALSE
+Morocco,316,14038,FALSE
+Morocco,317,357339,FALSE
+Morocco,318,11315,FALSE
+Morocco,18,11273.75269,TRUE
+Morocco,19,231983,FALSE
+Morocco,33,3209,FALSE
+Morocco,40,223498,FALSE
+Morocco,49,302082,FALSE
+Morocco,54,227978,FALSE
+Morocco,58,26869,FALSE
+Morocco,59,22326.21725,TRUE
+Morocco,63,163232,FALSE
+Morocco,90,413493,FALSE
+Morocco,94,21563,FALSE
+Morocco,101,147920,FALSE
+Morocco,112,106548,FALSE
+Morocco,138,17125.18189,TRUE
+Morocco,152,360167,FALSE
+Morocco,154,123235,FALSE
+Morocco,158,200000,FALSE
+Morocco,200,6098,FALSE
+Morocco,202,85300.04797,TRUE
+Morocco,206,197382,FALSE
+Morocco,218,71572,FALSE
+Morocco,238,268191,FALSE
+Morocco,243,68987,FALSE
+Morocco,259,6750,FALSE
+Morocco,276,10000,FALSE
+Morocco,279,177754.1672,TRUE
+Morocco,298,173271,FALSE
+Morocco,305,29258,FALSE
+Morocco,306,807943,FALSE
+Morocco,11,148085,FALSE
+Morocco,16,393210,FALSE
+Morocco,48,21143,FALSE
+Morocco,60,5005,FALSE
+Morocco,63,163232,FALSE
+Morocco,121,92694,FALSE
+Morocco,128,23729,FALSE
+Morocco,156,2091,FALSE
+Morocco,217,4212,FALSE
+Morocco,248,10000,FALSE
+Morocco,270,9182,FALSE
+Morocco,52,72720.10141,TRUE
+Morocco,74,4541.36112,TRUE
+Morocco,75,47178.96176,TRUE
+Morocco,80,49992.57574,TRUE
+Morocco,301,113987.8459,TRUE
+Morocco,319,89190.44102,TRUE
+Morocco,51,26504.47085,TRUE
+Morocco,53,5922,FALSE
+Morocco,77,5993.147024,TRUE
+Morocco,213,124295.9159,TRUE
+Morocco,228,133880.2683,TRUE
+Morocco,269,3838,FALSE
+Morocco,296,184291,FALSE
+Morocco,175,61722,FALSE
+Morocco,12,56923,FALSE
+Morocco,13,111013,FALSE
+Morocco,108,12577.92841,TRUE
+Morocco,165,6709,FALSE
+Morocco,215,87086,FALSE
+Morocco,261,8946.089355,TRUE
+Morocco,281,430500,FALSE
+Morocco,302,27087.34387,TRUE
+Morocco,310,36133,TRUE
+Morocco,106,13595.99028,TRUE
+Morocco,30,45495,FALSE
+Morocco,91,126485.3041,TRUE
+Morocco,192,3780098.195,TRUE
+Morocco,249,147989,FALSE
+Morocco,308,35296.76443,TRUE
+Morocco,116,98484.54468,TRUE
+Morocco,234,8162.890747,TRUE
+Morocco,88,138218.959,TRUE
+Morocco,227,9358.848173,TRUE
+Morocco,8,54889,FALSE
+Morocco,115,186672.4488,TRUE
+Morocco,146,28645.96233,TRUE
+Morocco,257,14862.84549,TRUE
+Morocco,39,10075.63454,TRUE
+Morocco,61,218943.5096,TRUE
+Morocco,76,100326.9844,TRUE
+Morocco,268,27005.25,TRUE
+Morocco,194,9390.783666,TRUE
+Morocco,198,5299.135169,TRUE
+Morocco,245,11957.75,TRUE
+Morocco,86,15341.61704,TRUE
+Morocco,247,27947.125,TRUE
+Morocco,15,5922.875,TRUE
+Morocco,135,5719.346191,TRUE
+Morocco,65,4252.65625,TRUE
+Morocco,70,8796.273438,TRUE
+Morocco,314,4472.643433,TRUE
+Morocco,133,6124.625,TRUE
+Morocco,240,4373.4375,TRUE
+Morocco,148,23186,TRUE
+Morocco,31,5157,TRUE
+Mozambique,4,20977.52128,TRUE
+Mozambique,5,7484.490489,TRUE
+Mozambique,7,111437.9893,TRUE
+Mozambique,8,47030.54376,TRUE
+Mozambique,17,33099.94094,TRUE
+Mozambique,105,149702.6633,TRUE
+Mozambique,120,115713.1489,TRUE
+Mozambique,161,8730.264786,TRUE
+Mozambique,169,9135,FALSE
+Mozambique,179,121608.9919,TRUE
+Mozambique,180,4412,FALSE
+Mozambique,203,26179.47154,TRUE
+Mozambique,205,200000,FALSE
+Mozambique,208,151007,FALSE
+Mozambique,219,80605.62094,TRUE
+Mozambique,221,53059.48552,TRUE
+Mozambique,229,16244.65912,TRUE
+Mozambique,231,60255.26389,TRUE
+Mozambique,235,170000,FALSE
+Mozambique,254,6037,FALSE
+Mozambique,84,4323,FALSE
+Mozambique,267,5128,FALSE
+Mozambique,282,423220.8453,TRUE
+Mozambique,286,652668,FALSE
+Mozambique,289,7042,FALSE
+Mozambique,316,72255.87156,TRUE
+Mozambique,317,188762.6372,TRUE
+Mozambique,318,10938,FALSE
+Mozambique,18,5053,FALSE
+Mozambique,19,77366.60983,TRUE
+Mozambique,33,30270.38924,TRUE
+Mozambique,40,180987.6885,TRUE
+Mozambique,49,247408.5214,TRUE
+Mozambique,54,175365.1249,TRUE
+Mozambique,58,74040.89691,TRUE
+Mozambique,59,22326.21725,TRUE
+Mozambique,63,234336.5313,TRUE
+Mozambique,90,194487.8189,TRUE
+Mozambique,94,61002.28577,TRUE
+Mozambique,101,138512.4356,TRUE
+Mozambique,112,122104.9439,TRUE
+Mozambique,138,17125.18189,TRUE
+Mozambique,152,119704.6269,TRUE
+Mozambique,154,34594,FALSE
+Mozambique,158,96473.15601,TRUE
+Mozambique,200,22918.25267,TRUE
+Mozambique,202,85300.04797,TRUE
+Mozambique,206,183393.7134,TRUE
+Mozambique,218,52990.31222,TRUE
+Mozambique,238,17906,FALSE
+Mozambique,243,112174.5654,TRUE
+Mozambique,259,55616.6005,TRUE
+Mozambique,276,10950.60863,TRUE
+Mozambique,279,177754.1672,TRUE
+Mozambique,298,39154,FALSE
+Mozambique,305,11559,FALSE
+Mozambique,306,220000,FALSE
+Mozambique,11,178064.2799,TRUE
+Mozambique,16,76768,FALSE
+Mozambique,48,27222.34375,TRUE
+Mozambique,60,22383.25858,TRUE
+Mozambique,63,11715.28525,TRUE
+Mozambique,121,36117,FALSE
+Mozambique,128,2853,FALSE
+Mozambique,156,10200.29705,TRUE
+Mozambique,217,21196.4891,TRUE
+Mozambique,248,14225.32829,TRUE
+Mozambique,270,4540,FALSE
+Mozambique,52,90791,FALSE
+Mozambique,74,4541.36112,TRUE
+Mozambique,75,27610,FALSE
+Mozambique,80,49992.57574,TRUE
+Mozambique,301,113987.8459,TRUE
+Mozambique,319,89190.44102,TRUE
+Mozambique,51,8438,FALSE
+Mozambique,53,3800,FALSE
+Mozambique,77,9356,FALSE
+Mozambique,213,124295.9159,TRUE
+Mozambique,228,67092,FALSE
+Mozambique,269,3099,FALSE
+Mozambique,296,138082,FALSE
+Mozambique,175,58612,FALSE
+Mozambique,12,36715.19395,TRUE
+Mozambique,13,74728.86082,TRUE
+Mozambique,108,12577.92841,TRUE
+Mozambique,165,14797.07017,TRUE
+Mozambique,215,99932,FALSE
+Mozambique,261,8946.089355,TRUE
+Mozambique,281,136069.2843,TRUE
+Mozambique,302,10499,FALSE
+Mozambique,310,36133,TRUE
+Mozambique,106,13595.99028,TRUE
+Mozambique,30,62885.73079,TRUE
+Mozambique,91,126485.3041,TRUE
+Mozambique,192,3780098.195,TRUE
+Mozambique,249,70032.42373,TRUE
+Mozambique,308,35296.76443,TRUE
+Mozambique,116,98484.54468,TRUE
+Mozambique,234,8162.890747,TRUE
+Mozambique,88,138218.959,TRUE
+Mozambique,227,9358.848173,TRUE
+Mozambique,8,21599.0332,TRUE
+Mozambique,115,186672.4488,TRUE
+Mozambique,146,28645.96233,TRUE
+Mozambique,257,14862.84549,TRUE
+Mozambique,39,10075.63454,TRUE
+Mozambique,61,218943.5096,TRUE
+Mozambique,76,100326.9844,TRUE
+Mozambique,268,27005.25,TRUE
+Mozambique,194,9390.783666,TRUE
+Mozambique,198,5299.135169,TRUE
+Mozambique,245,11957.75,TRUE
+Mozambique,86,2474,FALSE
+Mozambique,247,27947.125,TRUE
+Mozambique,15,5922.875,TRUE
+Mozambique,135,5719.346191,TRUE
+Mozambique,65,4252.65625,TRUE
+Mozambique,70,8796.273438,TRUE
+Mozambique,314,4472.643433,TRUE
+Mozambique,133,6124.625,TRUE
+Mozambique,240,4373.4375,TRUE
+Mozambique,148,23186,TRUE
+Mozambique,31,5157,TRUE
+Myanmar,4,20977.52128,TRUE
+Myanmar,5,7484.490489,TRUE
+Myanmar,7,111437.9893,TRUE
+Myanmar,8,23289,FALSE
+Myanmar,17,33099.94094,TRUE
+Myanmar,105,149702.6633,TRUE
+Myanmar,120,115713.1489,TRUE
+Myanmar,161,8730.264786,TRUE
+Myanmar,169,37505,FALSE
+Myanmar,179,121608.9919,TRUE
+Myanmar,180,10234,FALSE
+Myanmar,203,26179.47154,TRUE
+Myanmar,205,160528,FALSE
+Myanmar,208,84004.18102,TRUE
+Myanmar,219,80605.62094,TRUE
+Myanmar,221,53059.48552,TRUE
+Myanmar,229,16244.65912,TRUE
+Myanmar,231,60255.26389,TRUE
+Myanmar,235,151724,FALSE
+Myanmar,254,38181,FALSE
+Myanmar,84,21690,FALSE
+Myanmar,267,5437,FALSE
+Myanmar,282,423220.8453,TRUE
+Myanmar,286,637767,FALSE
+Myanmar,289,9501,FALSE
+Myanmar,316,72255.87156,TRUE
+Myanmar,317,188762.6372,TRUE
+Myanmar,318,11859,FALSE
+Myanmar,18,16846,FALSE
+Myanmar,19,77366.60983,TRUE
+Myanmar,33,30270.38924,TRUE
+Myanmar,40,180987.6885,TRUE
+Myanmar,49,247408.5214,TRUE
+Myanmar,54,175365.1249,TRUE
+Myanmar,58,74040.89691,TRUE
+Myanmar,59,22326.21725,TRUE
+Myanmar,63,11755,FALSE
+Myanmar,90,194487.8189,TRUE
+Myanmar,94,61002.28577,TRUE
+Myanmar,101,138512.4356,TRUE
+Myanmar,112,74231,FALSE
+Myanmar,138,17125.18189,TRUE
+Myanmar,152,119704.6269,TRUE
+Myanmar,154,96782.90416,TRUE
+Myanmar,158,96473.15601,TRUE
+Myanmar,200,22918.25267,TRUE
+Myanmar,202,85300.04797,TRUE
+Myanmar,206,183393.7134,TRUE
+Myanmar,218,52990.31222,TRUE
+Myanmar,238,116960.1876,TRUE
+Myanmar,243,112174.5654,TRUE
+Myanmar,259,55616.6005,TRUE
+Myanmar,276,10432,FALSE
+Myanmar,279,177754.1672,TRUE
+Myanmar,298,120463.1286,TRUE
+Myanmar,305,18337,FALSE
+Myanmar,306,131681.4608,TRUE
+Myanmar,11,178064.2799,TRUE
+Myanmar,16,74389.59543,TRUE
+Myanmar,48,27222.34375,TRUE
+Myanmar,60,15373,FALSE
+Myanmar,63,11755,FALSE
+Myanmar,121,115777.4722,TRUE
+Myanmar,128,15896,FALSE
+Myanmar,156,6646,FALSE
+Myanmar,217,13274,FALSE
+Myanmar,248,14225.32829,TRUE
+Myanmar,270,10398,FALSE
+Myanmar,52,116436,FALSE
+Myanmar,74,4541.36112,TRUE
+Myanmar,75,109631,FALSE
+Myanmar,80,49992.57574,TRUE
+Myanmar,301,113987.8459,TRUE
+Myanmar,319,89190.44102,TRUE
+Myanmar,51,8790,FALSE
+Myanmar,53,8218,FALSE
+Myanmar,77,6924,FALSE
+Myanmar,213,124295.9159,TRUE
+Myanmar,228,133880.2683,TRUE
+Myanmar,269,15171.62496,TRUE
+Myanmar,296,92433,FALSE
+Myanmar,175,61159,FALSE
+Myanmar,12,36715.19395,TRUE
+Myanmar,13,74728.86082,TRUE
+Myanmar,108,12577.92841,TRUE
+Myanmar,165,14797.07017,TRUE
+Myanmar,215,105585.0293,TRUE
+Myanmar,261,8946.089355,TRUE
+Myanmar,281,136069.2843,TRUE
+Myanmar,302,11877,FALSE
+Myanmar,310,36133,TRUE
+Myanmar,106,13595.99028,TRUE
+Myanmar,30,62885.73079,TRUE
+Myanmar,91,126485.3041,TRUE
+Myanmar,192,3780098.195,TRUE
+Myanmar,249,70032.42373,TRUE
+Myanmar,308,35296.76443,TRUE
+Myanmar,116,98484.54468,TRUE
+Myanmar,234,8162.890747,TRUE
+Myanmar,88,138218.959,TRUE
+Myanmar,227,9392,FALSE
+Myanmar,8,23289,FALSE
+Myanmar,115,186672.4488,TRUE
+Myanmar,146,3864,FALSE
+Myanmar,257,7566,FALSE
+Myanmar,39,10075.63454,TRUE
+Myanmar,61,218943.5096,TRUE
+Myanmar,76,100326.9844,TRUE
+Myanmar,268,27005.25,TRUE
+Myanmar,194,8533,FALSE
+Myanmar,198,5299.135169,TRUE
+Myanmar,245,11957.75,TRUE
+Myanmar,86,8596,FALSE
+Myanmar,247,27947.125,TRUE
+Myanmar,15,5922.875,TRUE
+Myanmar,135,5719.346191,TRUE
+Myanmar,65,4252.65625,TRUE
+Myanmar,70,8796.273438,TRUE
+Myanmar,314,4472.643433,TRUE
+Myanmar,133,6124.625,TRUE
+Myanmar,240,4373.4375,TRUE
+Myanmar,148,23186,TRUE
+Myanmar,31,5157,TRUE
+Namibia,4,20977.52128,TRUE
+Namibia,5,7484.490489,TRUE
+Namibia,7,111437.9893,TRUE
+Namibia,8,47030.54376,TRUE
+Namibia,17,33099.94094,TRUE
+Namibia,105,149702.6633,TRUE
+Namibia,120,39474,FALSE
+Namibia,161,8730.264786,TRUE
+Namibia,169,20591,FALSE
+Namibia,179,100105,FALSE
+Namibia,180,1951,FALSE
+Namibia,203,26179.47154,TRUE
+Namibia,205,188632,FALSE
+Namibia,208,87898,FALSE
+Namibia,219,80605.62094,TRUE
+Namibia,221,53059.48552,TRUE
+Namibia,229,16244.65912,TRUE
+Namibia,231,60255.26389,TRUE
+Namibia,235,120493,FALSE
+Namibia,254,26952.37295,TRUE
+Namibia,84,9355.713607,TRUE
+Namibia,267,9372.487582,TRUE
+Namibia,282,423220.8453,TRUE
+Namibia,286,760050.6713,TRUE
+Namibia,289,9267,FALSE
+Namibia,316,72255.87156,TRUE
+Namibia,317,112364,FALSE
+Namibia,318,63274,FALSE
+Namibia,18,15226,FALSE
+Namibia,19,77366.60983,TRUE
+Namibia,33,30270.38924,TRUE
+Namibia,40,330817,FALSE
+Namibia,49,283175,FALSE
+Namibia,54,175365.1249,TRUE
+Namibia,58,74040.89691,TRUE
+Namibia,59,22326.21725,TRUE
+Namibia,63,102122,FALSE
+Namibia,90,194487.8189,TRUE
+Namibia,94,25265,FALSE
+Namibia,101,138512.4356,TRUE
+Namibia,112,122104.9439,TRUE
+Namibia,138,17125.18189,TRUE
+Namibia,152,119704.6269,TRUE
+Namibia,154,96782.90416,TRUE
+Namibia,158,96473.15601,TRUE
+Namibia,200,22918.25267,TRUE
+Namibia,202,85300.04797,TRUE
+Namibia,206,183393.7134,TRUE
+Namibia,218,52990.31222,TRUE
+Namibia,238,116960.1876,TRUE
+Namibia,243,112174.5654,TRUE
+Namibia,259,55616.6005,TRUE
+Namibia,276,10950.60863,TRUE
+Namibia,279,177754.1672,TRUE
+Namibia,298,120463.1286,TRUE
+Namibia,305,15590.0347,TRUE
+Namibia,306,61226,FALSE
+Namibia,11,178064.2799,TRUE
+Namibia,16,74389.59543,TRUE
+Namibia,48,27222.34375,TRUE
+Namibia,60,22383.25858,TRUE
+Namibia,63,102122,FALSE
+Namibia,121,115777.4722,TRUE
+Namibia,128,3212,FALSE
+Namibia,156,10200.29705,TRUE
+Namibia,217,21196.4891,TRUE
+Namibia,248,14225.32829,TRUE
+Namibia,270,2857,FALSE
+Namibia,52,72720.10141,TRUE
+Namibia,74,4541.36112,TRUE
+Namibia,75,47178.96176,TRUE
+Namibia,80,49992.57574,TRUE
+Namibia,301,113987.8459,TRUE
+Namibia,319,89190.44102,TRUE
+Namibia,51,26504.47085,TRUE
+Namibia,53,6581.96824,TRUE
+Namibia,77,5993.147024,TRUE
+Namibia,213,124295.9159,TRUE
+Namibia,228,133880.2683,TRUE
+Namibia,269,15171.62496,TRUE
+Namibia,296,43692.55808,TRUE
+Namibia,175,84332,FALSE
+Namibia,12,36715.19395,TRUE
+Namibia,13,74728.86082,TRUE
+Namibia,108,12577.92841,TRUE
+Namibia,165,14797.07017,TRUE
+Namibia,215,105585.0293,TRUE
+Namibia,261,8946.089355,TRUE
+Namibia,281,136069.2843,TRUE
+Namibia,302,27087.34387,TRUE
+Namibia,310,36133,TRUE
+Namibia,106,13595.99028,TRUE
+Namibia,30,62885.73079,TRUE
+Namibia,91,126485.3041,TRUE
+Namibia,192,3780098.195,TRUE
+Namibia,249,70032.42373,TRUE
+Namibia,308,35296.76443,TRUE
+Namibia,116,98484.54468,TRUE
+Namibia,234,8162.890747,TRUE
+Namibia,88,138218.959,TRUE
+Namibia,227,9358.848173,TRUE
+Namibia,8,21599.0332,TRUE
+Namibia,115,186672.4488,TRUE
+Namibia,146,28645.96233,TRUE
+Namibia,257,14862.84549,TRUE
+Namibia,39,10075.63454,TRUE
+Namibia,61,218943.5096,TRUE
+Namibia,76,100326.9844,TRUE
+Namibia,268,27005.25,TRUE
+Namibia,194,9390.783666,TRUE
+Namibia,198,5299.135169,TRUE
+Namibia,245,11957.75,TRUE
+Namibia,86,15341.61704,TRUE
+Namibia,247,27947.125,TRUE
+Namibia,15,5922.875,TRUE
+Namibia,135,5719.346191,TRUE
+Namibia,65,4252.65625,TRUE
+Namibia,70,8796.273438,TRUE
+Namibia,314,4472.643433,TRUE
+Namibia,133,6124.625,TRUE
+Namibia,240,4373.4375,TRUE
+Namibia,148,23186,TRUE
+Namibia,31,5157,TRUE
+Nauru,4,20977.52128,TRUE
+Nauru,5,7484.490489,TRUE
+Nauru,7,111437.9893,TRUE
+Nauru,8,47030.54376,TRUE
+Nauru,17,33099.94094,TRUE
+Nauru,105,149702.6633,TRUE
+Nauru,120,115713.1489,TRUE
+Nauru,161,8730.264786,TRUE
+Nauru,169,16777.49735,TRUE
+Nauru,179,121608.9919,TRUE
+Nauru,180,7520.279265,TRUE
+Nauru,203,26179.47154,TRUE
+Nauru,205,158255.8483,TRUE
+Nauru,208,84004.18102,TRUE
+Nauru,219,80605.62094,TRUE
+Nauru,221,53059.48552,TRUE
+Nauru,229,16244.65912,TRUE
+Nauru,231,60255.26389,TRUE
+Nauru,235,172280.9273,TRUE
+Nauru,254,26952.37295,TRUE
+Nauru,84,9355.713607,TRUE
+Nauru,267,9372.487582,TRUE
+Nauru,282,423220.8453,TRUE
+Nauru,286,760050.6713,TRUE
+Nauru,289,9979.922823,TRUE
+Nauru,316,72255.87156,TRUE
+Nauru,317,188762.6372,TRUE
+Nauru,318,32261.2753,TRUE
+Nauru,18,11273.75269,TRUE
+Nauru,19,77366.60983,TRUE
+Nauru,33,30270.38924,TRUE
+Nauru,40,180987.6885,TRUE
+Nauru,49,247408.5214,TRUE
+Nauru,54,175365.1249,TRUE
+Nauru,58,74040.89691,TRUE
+Nauru,59,22326.21725,TRUE
+Nauru,63,234336.5313,TRUE
+Nauru,90,194487.8189,TRUE
+Nauru,94,61002.28577,TRUE
+Nauru,101,138512.4356,TRUE
+Nauru,112,122104.9439,TRUE
+Nauru,138,17125.18189,TRUE
+Nauru,152,119704.6269,TRUE
+Nauru,154,96782.90416,TRUE
+Nauru,158,96473.15601,TRUE
+Nauru,200,22918.25267,TRUE
+Nauru,202,85300.04797,TRUE
+Nauru,206,183393.7134,TRUE
+Nauru,218,52990.31222,TRUE
+Nauru,238,116960.1876,TRUE
+Nauru,243,112174.5654,TRUE
+Nauru,259,55616.6005,TRUE
+Nauru,276,10950.60863,TRUE
+Nauru,279,177754.1672,TRUE
+Nauru,298,120463.1286,TRUE
+Nauru,305,15590.0347,TRUE
+Nauru,306,131681.4608,TRUE
+Nauru,11,178064.2799,TRUE
+Nauru,16,74389.59543,TRUE
+Nauru,48,27222.34375,TRUE
+Nauru,60,22383.25858,TRUE
+Nauru,63,11715.28525,TRUE
+Nauru,121,115777.4722,TRUE
+Nauru,128,9353.124815,TRUE
+Nauru,156,10200.29705,TRUE
+Nauru,217,21196.4891,TRUE
+Nauru,248,14225.32829,TRUE
+Nauru,270,9151.63574,TRUE
+Nauru,52,72720.10141,TRUE
+Nauru,74,4541.36112,TRUE
+Nauru,75,95108,FALSE
+Nauru,80,49992.57574,TRUE
+Nauru,301,113987.8459,TRUE
+Nauru,319,89190.44102,TRUE
+Nauru,51,26504.47085,TRUE
+Nauru,53,6581.96824,TRUE
+Nauru,77,5993.147024,TRUE
+Nauru,213,124295.9159,TRUE
+Nauru,228,133880.2683,TRUE
+Nauru,269,15171.62496,TRUE
+Nauru,296,43692.55808,TRUE
+Nauru,175,70802.39066,TRUE
+Nauru,12,36715.19395,TRUE
+Nauru,13,74728.86082,TRUE
+Nauru,108,12577.92841,TRUE
+Nauru,165,14797.07017,TRUE
+Nauru,215,105585.0293,TRUE
+Nauru,261,8946.089355,TRUE
+Nauru,281,136069.2843,TRUE
+Nauru,302,27087.34387,TRUE
+Nauru,310,36133,TRUE
+Nauru,106,13595.99028,TRUE
+Nauru,30,62885.73079,TRUE
+Nauru,91,126485.3041,TRUE
+Nauru,192,3780098.195,TRUE
+Nauru,249,70032.42373,TRUE
+Nauru,308,35296.76443,TRUE
+Nauru,116,98484.54468,TRUE
+Nauru,234,8162.890747,TRUE
+Nauru,88,138218.959,TRUE
+Nauru,227,9358.848173,TRUE
+Nauru,8,21599.0332,TRUE
+Nauru,115,186672.4488,TRUE
+Nauru,146,28645.96233,TRUE
+Nauru,257,14862.84549,TRUE
+Nauru,39,10075.63454,TRUE
+Nauru,61,218943.5096,TRUE
+Nauru,76,100326.9844,TRUE
+Nauru,268,27005.25,TRUE
+Nauru,194,9390.783666,TRUE
+Nauru,198,5299.135169,TRUE
+Nauru,245,11957.75,TRUE
+Nauru,86,15341.61704,TRUE
+Nauru,247,27947.125,TRUE
+Nauru,15,5922.875,TRUE
+Nauru,135,5719.346191,TRUE
+Nauru,65,4252.65625,TRUE
+Nauru,70,8796.273438,TRUE
+Nauru,314,4472.643433,TRUE
+Nauru,133,6124.625,TRUE
+Nauru,240,4373.4375,TRUE
+Nauru,148,23186,TRUE
+Nauru,31,5157,TRUE
+Nepal,4,6124,FALSE
+Nepal,5,7484.490489,TRUE
+Nepal,7,72912,FALSE
+Nepal,8,92762,FALSE
+Nepal,17,11565,FALSE
+Nepal,105,149702.6633,TRUE
+Nepal,120,115713.1489,TRUE
+Nepal,161,5343,FALSE
+Nepal,169,25029,FALSE
+Nepal,179,121608.9919,TRUE
+Nepal,180,11334,FALSE
+Nepal,203,26179.47154,TRUE
+Nepal,205,158255.8483,TRUE
+Nepal,208,97463,FALSE
+Nepal,219,68195,FALSE
+Nepal,221,97650,FALSE
+Nepal,229,16244.65912,TRUE
+Nepal,231,72496,FALSE
+Nepal,235,140299,FALSE
+Nepal,254,31543,FALSE
+Nepal,84,10320,FALSE
+Nepal,267,9372.487582,TRUE
+Nepal,282,423220.8453,TRUE
+Nepal,286,537094,FALSE
+Nepal,289,9979.922823,TRUE
+Nepal,316,42124,FALSE
+Nepal,317,188762.6372,TRUE
+Nepal,318,23288,FALSE
+Nepal,18,8703,FALSE
+Nepal,19,28393,FALSE
+Nepal,33,8742,FALSE
+Nepal,40,250061,FALSE
+Nepal,49,247408.5214,TRUE
+Nepal,54,193427,FALSE
+Nepal,58,74040.89691,TRUE
+Nepal,59,22326.21725,TRUE
+Nepal,63,53261,FALSE
+Nepal,90,194487.8189,TRUE
+Nepal,94,61002.28577,TRUE
+Nepal,101,138512.4356,TRUE
+Nepal,112,66785,FALSE
+Nepal,138,17125.18189,TRUE
+Nepal,152,119704.6269,TRUE
+Nepal,154,71767,FALSE
+Nepal,158,64508,FALSE
+Nepal,200,22918.25267,TRUE
+Nepal,202,85300.04797,TRUE
+Nepal,206,183393.7134,TRUE
+Nepal,218,52990.31222,TRUE
+Nepal,238,116960.1876,TRUE
+Nepal,243,112174.5654,TRUE
+Nepal,259,55616.6005,TRUE
+Nepal,276,12333,FALSE
+Nepal,279,177754.1672,TRUE
+Nepal,298,90283,FALSE
+Nepal,305,9671,FALSE
+Nepal,306,131681.4608,TRUE
+Nepal,11,178064.2799,TRUE
+Nepal,16,165042,FALSE
+Nepal,48,27222.34375,TRUE
+Nepal,60,11043,FALSE
+Nepal,63,53261,FALSE
+Nepal,121,115777.4722,TRUE
+Nepal,128,9353.124815,TRUE
+Nepal,156,12287,FALSE
+Nepal,217,21196.4891,TRUE
+Nepal,248,14225.32829,TRUE
+Nepal,270,9151.63574,TRUE
+Nepal,52,72720.10141,TRUE
+Nepal,74,4541.36112,TRUE
+Nepal,75,19779,FALSE
+Nepal,80,49992.57574,TRUE
+Nepal,301,113987.8459,TRUE
+Nepal,319,89190.44102,TRUE
+Nepal,51,26504.47085,TRUE
+Nepal,53,6581.96824,TRUE
+Nepal,77,2032,FALSE
+Nepal,213,124295.9159,TRUE
+Nepal,228,136736,FALSE
+Nepal,269,15171.62496,TRUE
+Nepal,296,43692.55808,TRUE
+Nepal,175,70324,FALSE
+Nepal,12,36715.19395,TRUE
+Nepal,13,74728.86082,TRUE
+Nepal,108,12577.92841,TRUE
+Nepal,165,14797.07017,TRUE
+Nepal,215,130486,FALSE
+Nepal,261,8946.089355,TRUE
+Nepal,281,136069.2843,TRUE
+Nepal,302,11482,FALSE
+Nepal,310,36133,TRUE
+Nepal,106,13595.99028,TRUE
+Nepal,30,62885.73079,TRUE
+Nepal,91,126485.3041,TRUE
+Nepal,192,3780098.195,TRUE
+Nepal,249,70032.42373,TRUE
+Nepal,308,35296.76443,TRUE
+Nepal,116,98484.54468,TRUE
+Nepal,234,8162.890747,TRUE
+Nepal,88,138218.959,TRUE
+Nepal,227,9652,FALSE
+Nepal,8,92762,FALSE
+Nepal,115,124314,FALSE
+Nepal,146,14521,FALSE
+Nepal,257,14862.84549,TRUE
+Nepal,39,10736,FALSE
+Nepal,61,218943.5096,TRUE
+Nepal,76,100326.9844,TRUE
+Nepal,268,27005.25,TRUE
+Nepal,194,10102,FALSE
+Nepal,198,5312,FALSE
+Nepal,245,11957.75,TRUE
+Nepal,86,15341.61704,TRUE
+Nepal,247,27947.125,TRUE
+Nepal,15,5922.875,TRUE
+Nepal,135,5719.346191,TRUE
+Nepal,65,4252.65625,TRUE
+Nepal,70,8796.273438,TRUE
+Nepal,314,4472.643433,TRUE
+Nepal,133,6124.625,TRUE
+Nepal,240,4373.4375,TRUE
+Nepal,148,23186,TRUE
+Nepal,31,5157,TRUE
+Netherlands,4,20977.52128,TRUE
+Netherlands,5,14598,FALSE
+Netherlands,7,432175,FALSE
+Netherlands,8,47030.54376,TRUE
+Netherlands,17,68616,FALSE
+Netherlands,105,149702.6633,TRUE
+Netherlands,120,3967,FALSE
+Netherlands,161,7400,FALSE
+Netherlands,169,100476,FALSE
+Netherlands,179,281724,FALSE
+Netherlands,180,7520.279265,TRUE
+Netherlands,203,26179.47154,TRUE
+Netherlands,205,442930,FALSE
+Netherlands,208,84004.18102,TRUE
+Netherlands,219,80605.62094,TRUE
+Netherlands,221,396438,FALSE
+Netherlands,229,16244.65912,TRUE
+Netherlands,231,220285,FALSE
+Netherlands,235,419961,FALSE
+Netherlands,254,26952.37295,TRUE
+Netherlands,84,9355.713607,TRUE
+Netherlands,267,9372.487582,TRUE
+Netherlands,282,778004,FALSE
+Netherlands,286,760050.6713,TRUE
+Netherlands,289,9979.922823,TRUE
+Netherlands,316,72255.87156,TRUE
+Netherlands,317,188762.6372,TRUE
+Netherlands,318,79832,FALSE
+Netherlands,18,31995,FALSE
+Netherlands,19,108126,FALSE
+Netherlands,33,52512,FALSE
+Netherlands,40,413718,FALSE
+Netherlands,49,575702,FALSE
+Netherlands,54,145221,FALSE
+Netherlands,58,4807,FALSE
+Netherlands,59,22326.21725,TRUE
+Netherlands,63,2775665,FALSE
+Netherlands,90,6851852,FALSE
+Netherlands,94,61002.28577,TRUE
+Netherlands,101,4864865,FALSE
+Netherlands,112,122104.9439,TRUE
+Netherlands,138,17125.18189,TRUE
+Netherlands,152,353093,FALSE
+Netherlands,154,96782.90416,TRUE
+Netherlands,158,335414,FALSE
+Netherlands,200,47986,FALSE
+Netherlands,202,85300.04797,TRUE
+Netherlands,206,209331,FALSE
+Netherlands,218,46931,FALSE
+Netherlands,238,510574,FALSE
+Netherlands,243,112174.5654,TRUE
+Netherlands,259,34546,FALSE
+Netherlands,276,10950.60863,TRUE
+Netherlands,279,200000,FALSE
+Netherlands,298,120463.1286,TRUE
+Netherlands,305,15590.0347,TRUE
+Netherlands,306,5070423,FALSE
+Netherlands,11,178064.2799,TRUE
+Netherlands,16,74389.59543,TRUE
+Netherlands,48,27222.34375,TRUE
+Netherlands,60,22383.25858,TRUE
+Netherlands,63,2775665,FALSE
+Netherlands,121,115777.4722,TRUE
+Netherlands,128,9353.124815,TRUE
+Netherlands,156,10200.29705,TRUE
+Netherlands,217,47922,FALSE
+Netherlands,248,33035,FALSE
+Netherlands,270,9151.63574,TRUE
+Netherlands,52,72720.10141,TRUE
+Netherlands,74,4541.36112,TRUE
+Netherlands,75,47178.96176,TRUE
+Netherlands,80,49992.57574,TRUE
+Netherlands,301,113987.8459,TRUE
+Netherlands,319,89190.44102,TRUE
+Netherlands,51,26504.47085,TRUE
+Netherlands,53,6581.96824,TRUE
+Netherlands,77,5993.147024,TRUE
+Netherlands,213,124295.9159,TRUE
+Netherlands,228,133880.2683,TRUE
+Netherlands,269,15171.62496,TRUE
+Netherlands,296,43692.55808,TRUE
+Netherlands,175,70802.39066,TRUE
+Netherlands,12,62124,FALSE
+Netherlands,13,74728.86082,TRUE
+Netherlands,108,56994,FALSE
+Netherlands,165,14797.07017,TRUE
+Netherlands,215,105585.0293,TRUE
+Netherlands,261,8946.089355,TRUE
+Netherlands,281,333527,FALSE
+Netherlands,302,27087.34387,TRUE
+Netherlands,310,36133,TRUE
+Netherlands,106,13595.99028,TRUE
+Netherlands,30,102185,FALSE
+Netherlands,91,34583,FALSE
+Netherlands,192,50847458,FALSE
+Netherlands,249,90087,FALSE
+Netherlands,308,51600,FALSE
+Netherlands,116,98484.54468,TRUE
+Netherlands,234,6720,FALSE
+Netherlands,88,138218.959,TRUE
+Netherlands,227,9358.848173,TRUE
+Netherlands,8,21599.0332,TRUE
+Netherlands,115,186672.4488,TRUE
+Netherlands,146,28645.96233,TRUE
+Netherlands,257,14862.84549,TRUE
+Netherlands,39,10075.63454,TRUE
+Netherlands,61,169779,FALSE
+Netherlands,76,100326.9844,TRUE
+Netherlands,268,27005.25,TRUE
+Netherlands,194,9390.783666,TRUE
+Netherlands,198,5299.135169,TRUE
+Netherlands,245,11957.75,TRUE
+Netherlands,86,15341.61704,TRUE
+Netherlands,247,27947.125,TRUE
+Netherlands,15,5922.875,TRUE
+Netherlands,135,5719.346191,TRUE
+Netherlands,65,4252.65625,TRUE
+Netherlands,70,8796.273438,TRUE
+Netherlands,314,4472.643433,TRUE
+Netherlands,133,6124.625,TRUE
+Netherlands,240,4373.4375,TRUE
+Netherlands,148,23186,TRUE
+Netherlands,31,5157,TRUE
+New Caledonia,4,20977.52128,TRUE
+New Caledonia,5,7484.490489,TRUE
+New Caledonia,7,111437.9893,TRUE
+New Caledonia,8,47030.54376,TRUE
+New Caledonia,17,33099.94094,TRUE
+New Caledonia,105,149702.6633,TRUE
+New Caledonia,120,115713.1489,TRUE
+New Caledonia,161,8730.264786,TRUE
+New Caledonia,169,39934,FALSE
+New Caledonia,179,121608.9919,TRUE
+New Caledonia,180,7520.279265,TRUE
+New Caledonia,203,26179.47154,TRUE
+New Caledonia,205,158255.8483,TRUE
+New Caledonia,208,130325,FALSE
+New Caledonia,219,80605.62094,TRUE
+New Caledonia,221,53059.48552,TRUE
+New Caledonia,229,16244.65912,TRUE
+New Caledonia,231,60255.26389,TRUE
+New Caledonia,235,58302,FALSE
+New Caledonia,254,26952.37295,TRUE
+New Caledonia,84,9355.713607,TRUE
+New Caledonia,267,9372.487582,TRUE
+New Caledonia,282,423220.8453,TRUE
+New Caledonia,286,760050.6713,TRUE
+New Caledonia,289,9979.922823,TRUE
+New Caledonia,316,72255.87156,TRUE
+New Caledonia,317,119636,FALSE
+New Caledonia,318,32906,FALSE
+New Caledonia,18,11273.75269,TRUE
+New Caledonia,19,77366.60983,TRUE
+New Caledonia,33,30270.38924,TRUE
+New Caledonia,40,180987.6885,TRUE
+New Caledonia,49,247408.5214,TRUE
+New Caledonia,54,175365.1249,TRUE
+New Caledonia,58,74040.89691,TRUE
+New Caledonia,59,22326.21725,TRUE
+New Caledonia,63,234336.5313,TRUE
+New Caledonia,90,194487.8189,TRUE
+New Caledonia,94,61002.28577,TRUE
+New Caledonia,101,138512.4356,TRUE
+New Caledonia,112,122104.9439,TRUE
+New Caledonia,138,17125.18189,TRUE
+New Caledonia,152,119704.6269,TRUE
+New Caledonia,154,26915,FALSE
+New Caledonia,158,96473.15601,TRUE
+New Caledonia,200,22918.25267,TRUE
+New Caledonia,202,85300.04797,TRUE
+New Caledonia,206,183393.7134,TRUE
+New Caledonia,218,52990.31222,TRUE
+New Caledonia,238,116960.1876,TRUE
+New Caledonia,243,112174.5654,TRUE
+New Caledonia,259,55616.6005,TRUE
+New Caledonia,276,10950.60863,TRUE
+New Caledonia,279,177754.1672,TRUE
+New Caledonia,298,120463.1286,TRUE
+New Caledonia,305,15590.0347,TRUE
+New Caledonia,306,131681.4608,TRUE
+New Caledonia,11,178064.2799,TRUE
+New Caledonia,16,44576,FALSE
+New Caledonia,48,27222.34375,TRUE
+New Caledonia,60,22383.25858,TRUE
+New Caledonia,63,11715.28525,TRUE
+New Caledonia,121,115777.4722,TRUE
+New Caledonia,128,9353.124815,TRUE
+New Caledonia,156,10200.29705,TRUE
+New Caledonia,217,21196.4891,TRUE
+New Caledonia,248,14225.32829,TRUE
+New Caledonia,270,20712,FALSE
+New Caledonia,52,21894,FALSE
+New Caledonia,74,4541.36112,TRUE
+New Caledonia,75,61429,FALSE
+New Caledonia,80,49992.57574,TRUE
+New Caledonia,301,53228,FALSE
+New Caledonia,319,8563,FALSE
+New Caledonia,51,26504.47085,TRUE
+New Caledonia,53,6581.96824,TRUE
+New Caledonia,77,1377,FALSE
+New Caledonia,213,124295.9159,TRUE
+New Caledonia,228,133880.2683,TRUE
+New Caledonia,269,15171.62496,TRUE
+New Caledonia,296,10096,FALSE
+New Caledonia,175,49781,FALSE
+New Caledonia,12,36715.19395,TRUE
+New Caledonia,13,74728.86082,TRUE
+New Caledonia,108,12577.92841,TRUE
+New Caledonia,165,14797.07017,TRUE
+New Caledonia,215,105585.0293,TRUE
+New Caledonia,261,8946.089355,TRUE
+New Caledonia,281,136069.2843,TRUE
+New Caledonia,302,27087.34387,TRUE
+New Caledonia,310,36133,TRUE
+New Caledonia,106,13595.99028,TRUE
+New Caledonia,30,62885.73079,TRUE
+New Caledonia,91,126485.3041,TRUE
+New Caledonia,192,3780098.195,TRUE
+New Caledonia,249,70032.42373,TRUE
+New Caledonia,308,35296.76443,TRUE
+New Caledonia,116,98484.54468,TRUE
+New Caledonia,234,8162.890747,TRUE
+New Caledonia,88,138218.959,TRUE
+New Caledonia,227,9358.848173,TRUE
+New Caledonia,8,21599.0332,TRUE
+New Caledonia,115,186672.4488,TRUE
+New Caledonia,146,28645.96233,TRUE
+New Caledonia,257,14862.84549,TRUE
+New Caledonia,39,10075.63454,TRUE
+New Caledonia,61,218943.5096,TRUE
+New Caledonia,76,100326.9844,TRUE
+New Caledonia,268,27005.25,TRUE
+New Caledonia,194,9390.783666,TRUE
+New Caledonia,198,5299.135169,TRUE
+New Caledonia,245,11957.75,TRUE
+New Caledonia,86,15341.61704,TRUE
+New Caledonia,247,27947.125,TRUE
+New Caledonia,15,5922.875,TRUE
+New Caledonia,135,5719.346191,TRUE
+New Caledonia,65,4252.65625,TRUE
+New Caledonia,70,8796.273438,TRUE
+New Caledonia,314,4472.643433,TRUE
+New Caledonia,133,6124.625,TRUE
+New Caledonia,240,4373.4375,TRUE
+New Caledonia,148,23186,TRUE
+New Caledonia,31,5157,TRUE
+New Zealand,4,20977.52128,TRUE
+New Zealand,5,7484.490489,TRUE
+New Zealand,7,520194,FALSE
+New Zealand,8,69341,FALSE
+New Zealand,17,70182,FALSE
+New Zealand,105,149702.6633,TRUE
+New Zealand,120,101819,FALSE
+New Zealand,161,13069,FALSE
+New Zealand,169,116893,FALSE
+New Zealand,179,136994,FALSE
+New Zealand,180,7520.279265,TRUE
+New Zealand,203,26179.47154,TRUE
+New Zealand,205,158255.8483,TRUE
+New Zealand,208,131465,FALSE
+New Zealand,219,36137,FALSE
+New Zealand,221,507082,FALSE
+New Zealand,229,16244.65912,TRUE
+New Zealand,231,59579,FALSE
+New Zealand,235,489883,FALSE
+New Zealand,254,26952.37295,TRUE
+New Zealand,84,9355.713607,TRUE
+New Zealand,267,9372.487582,TRUE
+New Zealand,282,423220.8453,TRUE
+New Zealand,286,760050.6713,TRUE
+New Zealand,289,9979.922823,TRUE
+New Zealand,316,72255.87156,TRUE
+New Zealand,317,106198,FALSE
+New Zealand,318,91971,FALSE
+New Zealand,18,11273.75269,TRUE
+New Zealand,19,59503,FALSE
+New Zealand,33,30270.38924,TRUE
+New Zealand,40,671520,FALSE
+New Zealand,49,496337,FALSE
+New Zealand,54,150815,FALSE
+New Zealand,58,36571,FALSE
+New Zealand,59,22326.21725,TRUE
+New Zealand,63,363280,FALSE
+New Zealand,90,270741,FALSE
+New Zealand,94,61002.28577,TRUE
+New Zealand,101,138512.4356,TRUE
+New Zealand,112,59876,FALSE
+New Zealand,138,25561,FALSE
+New Zealand,152,350190,FALSE
+New Zealand,154,176560,FALSE
+New Zealand,158,260018,FALSE
+New Zealand,200,55345,FALSE
+New Zealand,202,85300.04797,TRUE
+New Zealand,206,412934,FALSE
+New Zealand,218,67078,FALSE
+New Zealand,238,176375,FALSE
+New Zealand,243,121745,FALSE
+New Zealand,259,55616.6005,TRUE
+New Zealand,276,10950.60863,TRUE
+New Zealand,279,41822,FALSE
+New Zealand,298,98467,FALSE
+New Zealand,305,15590.0347,TRUE
+New Zealand,306,1153699,FALSE
+New Zealand,11,178064.2799,TRUE
+New Zealand,16,74389.59543,TRUE
+New Zealand,48,27222.34375,TRUE
+New Zealand,60,22383.25858,TRUE
+New Zealand,63,363280,FALSE
+New Zealand,121,248886,FALSE
+New Zealand,128,9353.124815,TRUE
+New Zealand,156,25896,FALSE
+New Zealand,217,32525,FALSE
+New Zealand,248,20698,FALSE
+New Zealand,270,9151.63574,TRUE
+New Zealand,52,72720.10141,TRUE
+New Zealand,74,4541.36112,TRUE
+New Zealand,75,47178.96176,TRUE
+New Zealand,80,82507,FALSE
+New Zealand,301,113987.8459,TRUE
+New Zealand,319,89190.44102,TRUE
+New Zealand,51,26504.47085,TRUE
+New Zealand,53,6581.96824,TRUE
+New Zealand,77,5993.147024,TRUE
+New Zealand,213,124295.9159,TRUE
+New Zealand,228,133880.2683,TRUE
+New Zealand,269,15171.62496,TRUE
+New Zealand,296,106330,FALSE
+New Zealand,175,70802.39066,TRUE
+New Zealand,12,34727,FALSE
+New Zealand,13,58992,FALSE
+New Zealand,108,12577.92841,TRUE
+New Zealand,165,14797.07017,TRUE
+New Zealand,215,105585.0293,TRUE
+New Zealand,261,8946.089355,TRUE
+New Zealand,281,170538,FALSE
+New Zealand,302,27087.34387,TRUE
+New Zealand,310,36133,TRUE
+New Zealand,106,13595.99028,TRUE
+New Zealand,30,48985,FALSE
+New Zealand,91,81952,FALSE
+New Zealand,192,2023256,FALSE
+New Zealand,249,9024,FALSE
+New Zealand,308,35296.76443,TRUE
+New Zealand,116,66704,FALSE
+New Zealand,234,8162.890747,TRUE
+New Zealand,88,138218.959,TRUE
+New Zealand,227,9358.848173,TRUE
+New Zealand,8,69341,FALSE
+New Zealand,115,186672.4488,TRUE
+New Zealand,146,28645.96233,TRUE
+New Zealand,257,14862.84549,TRUE
+New Zealand,39,10075.63454,TRUE
+New Zealand,61,218943.5096,TRUE
+New Zealand,76,100326.9844,TRUE
+New Zealand,268,27005.25,TRUE
+New Zealand,194,9390.783666,TRUE
+New Zealand,198,5299.135169,TRUE
+New Zealand,245,11957.75,TRUE
+New Zealand,86,15341.61704,TRUE
+New Zealand,247,27947.125,TRUE
+New Zealand,15,5922.875,TRUE
+New Zealand,135,5719.346191,TRUE
+New Zealand,65,4252.65625,TRUE
+New Zealand,70,8796.273438,TRUE
+New Zealand,314,4472.643433,TRUE
+New Zealand,133,6124.625,TRUE
+New Zealand,240,4373.4375,TRUE
+New Zealand,148,23186,TRUE
+New Zealand,31,5157,TRUE
+Nicaragua,4,20977.52128,TRUE
+Nicaragua,5,7484.490489,TRUE
+Nicaragua,7,111437.9893,TRUE
+Nicaragua,8,47030.54376,TRUE
+Nicaragua,17,33099.94094,TRUE
+Nicaragua,105,149702.6633,TRUE
+Nicaragua,120,115713.1489,TRUE
+Nicaragua,161,8730.264786,TRUE
+Nicaragua,169,11709,FALSE
+Nicaragua,179,121608.9919,TRUE
+Nicaragua,180,7520.279265,TRUE
+Nicaragua,203,26179.47154,TRUE
+Nicaragua,205,183349,FALSE
+Nicaragua,208,46485,FALSE
+Nicaragua,219,80605.62094,TRUE
+Nicaragua,221,53059.48552,TRUE
+Nicaragua,229,16244.65912,TRUE
+Nicaragua,231,60255.26389,TRUE
+Nicaragua,235,167735,FALSE
+Nicaragua,254,50217,FALSE
+Nicaragua,84,18731,FALSE
+Nicaragua,267,4920,FALSE
+Nicaragua,282,423220.8453,TRUE
+Nicaragua,286,919351,FALSE
+Nicaragua,289,9979.922823,TRUE
+Nicaragua,316,72255.87156,TRUE
+Nicaragua,317,188762.6372,TRUE
+Nicaragua,318,32261.2753,TRUE
+Nicaragua,18,7413,FALSE
+Nicaragua,19,77366.60983,TRUE
+Nicaragua,33,30270.38924,TRUE
+Nicaragua,40,583901,FALSE
+Nicaragua,49,256800,FALSE
+Nicaragua,54,175365.1249,TRUE
+Nicaragua,58,74040.89691,TRUE
+Nicaragua,59,22326.21725,TRUE
+Nicaragua,63,303268,FALSE
+Nicaragua,90,194487.8189,TRUE
+Nicaragua,94,61002.28577,TRUE
+Nicaragua,101,138512.4356,TRUE
+Nicaragua,112,122104.9439,TRUE
+Nicaragua,138,17125.18189,TRUE
+Nicaragua,152,119704.6269,TRUE
+Nicaragua,154,96782.90416,TRUE
+Nicaragua,158,96473.15601,TRUE
+Nicaragua,200,22918.25267,TRUE
+Nicaragua,202,85300.04797,TRUE
+Nicaragua,206,183393.7134,TRUE
+Nicaragua,218,52990.31222,TRUE
+Nicaragua,238,116960.1876,TRUE
+Nicaragua,243,112174.5654,TRUE
+Nicaragua,259,55616.6005,TRUE
+Nicaragua,276,23333,FALSE
+Nicaragua,279,177754.1672,TRUE
+Nicaragua,298,120463.1286,TRUE
+Nicaragua,305,16200,FALSE
+Nicaragua,306,461317,FALSE
+Nicaragua,11,178064.2799,TRUE
+Nicaragua,16,633554,FALSE
+Nicaragua,48,27222.34375,TRUE
+Nicaragua,60,22383.25858,TRUE
+Nicaragua,63,303268,FALSE
+Nicaragua,121,115777.4722,TRUE
+Nicaragua,128,44081,FALSE
+Nicaragua,156,10200.29705,TRUE
+Nicaragua,217,21196.4891,TRUE
+Nicaragua,248,14225.32829,TRUE
+Nicaragua,270,16469,FALSE
+Nicaragua,52,80801,FALSE
+Nicaragua,74,5569,FALSE
+Nicaragua,75,44878,FALSE
+Nicaragua,80,49992.57574,TRUE
+Nicaragua,301,97784,FALSE
+Nicaragua,319,133452,FALSE
+Nicaragua,51,26504.47085,TRUE
+Nicaragua,53,6581.96824,TRUE
+Nicaragua,77,9522,FALSE
+Nicaragua,213,84167,FALSE
+Nicaragua,228,151893,FALSE
+Nicaragua,269,15171.62496,TRUE
+Nicaragua,296,43692.55808,TRUE
+Nicaragua,175,70802.39066,TRUE
+Nicaragua,12,36715.19395,TRUE
+Nicaragua,13,74728.86082,TRUE
+Nicaragua,108,12577.92841,TRUE
+Nicaragua,165,14797.07017,TRUE
+Nicaragua,215,105585.0293,TRUE
+Nicaragua,261,8946.089355,TRUE
+Nicaragua,281,136069.2843,TRUE
+Nicaragua,302,27087.34387,TRUE
+Nicaragua,310,36133,TRUE
+Nicaragua,106,13595.99028,TRUE
+Nicaragua,30,62885.73079,TRUE
+Nicaragua,91,126485.3041,TRUE
+Nicaragua,192,3780098.195,TRUE
+Nicaragua,249,70032.42373,TRUE
+Nicaragua,308,35296.76443,TRUE
+Nicaragua,116,98484.54468,TRUE
+Nicaragua,234,8162.890747,TRUE
+Nicaragua,88,138218.959,TRUE
+Nicaragua,227,9358.848173,TRUE
+Nicaragua,8,21599.0332,TRUE
+Nicaragua,115,186672.4488,TRUE
+Nicaragua,146,28645.96233,TRUE
+Nicaragua,257,14862.84549,TRUE
+Nicaragua,39,10075.63454,TRUE
+Nicaragua,61,218943.5096,TRUE
+Nicaragua,76,128346,FALSE
+Nicaragua,268,27005.25,TRUE
+Nicaragua,194,9390.783666,TRUE
+Nicaragua,198,5299.135169,TRUE
+Nicaragua,245,11957.75,TRUE
+Nicaragua,86,15341.61704,TRUE
+Nicaragua,247,27947.125,TRUE
+Nicaragua,15,5922.875,TRUE
+Nicaragua,135,5719.346191,TRUE
+Nicaragua,65,4252.65625,TRUE
+Nicaragua,70,8796.273438,TRUE
+Nicaragua,314,4472.643433,TRUE
+Nicaragua,133,6124.625,TRUE
+Nicaragua,240,4373.4375,TRUE
+Nicaragua,148,23186,TRUE
+Nicaragua,31,5157,TRUE
+Niger,4,20977.52128,TRUE
+Niger,5,7484.490489,TRUE
+Niger,7,111437.9893,TRUE
+Niger,8,47030.54376,TRUE
+Niger,17,33099.94094,TRUE
+Niger,105,149702.6633,TRUE
+Niger,120,115713.1489,TRUE
+Niger,161,8730.264786,TRUE
+Niger,169,12177,FALSE
+Niger,179,176106,FALSE
+Niger,180,5375,FALSE
+Niger,203,26179.47154,TRUE
+Niger,205,303885,FALSE
+Niger,208,84004.18102,TRUE
+Niger,219,80605.62094,TRUE
+Niger,221,53059.48552,TRUE
+Niger,229,16244.65912,TRUE
+Niger,231,60255.26389,TRUE
+Niger,235,288323,FALSE
+Niger,254,26372,FALSE
+Niger,84,10098,FALSE
+Niger,267,5136,FALSE
+Niger,282,423220.8453,TRUE
+Niger,286,369897,FALSE
+Niger,289,9979.922823,TRUE
+Niger,316,72255.87156,TRUE
+Niger,317,207052,FALSE
+Niger,318,20085,FALSE
+Niger,18,5327,FALSE
+Niger,19,33762,FALSE
+Niger,33,30270.38924,TRUE
+Niger,40,254704,FALSE
+Niger,49,213353,FALSE
+Niger,54,175365.1249,TRUE
+Niger,58,74040.89691,TRUE
+Niger,59,22326.21725,TRUE
+Niger,63,86965,FALSE
+Niger,90,77117,FALSE
+Niger,94,28501,FALSE
+Niger,101,182113,FALSE
+Niger,112,118621,FALSE
+Niger,138,17125.18189,TRUE
+Niger,152,63631,FALSE
+Niger,154,96782.90416,TRUE
+Niger,158,200769,FALSE
+Niger,200,22918.25267,TRUE
+Niger,202,85300.04797,TRUE
+Niger,206,280472,FALSE
+Niger,218,19293,FALSE
+Niger,238,294677,FALSE
+Niger,243,112174.5654,TRUE
+Niger,259,55616.6005,TRUE
+Niger,276,10950.60863,TRUE
+Niger,279,177754.1672,TRUE
+Niger,298,120463.1286,TRUE
+Niger,305,23077,FALSE
+Niger,306,238188,FALSE
+Niger,11,178064.2799,TRUE
+Niger,16,74389.59543,TRUE
+Niger,48,27222.34375,TRUE
+Niger,60,5702,FALSE
+Niger,63,86965,FALSE
+Niger,121,115777.4722,TRUE
+Niger,128,5882,FALSE
+Niger,156,10200.29705,TRUE
+Niger,217,4258,FALSE
+Niger,248,14225.32829,TRUE
+Niger,270,5016,FALSE
+Niger,52,233678,FALSE
+Niger,74,4541.36112,TRUE
+Niger,75,47178.96176,TRUE
+Niger,80,49992.57574,TRUE
+Niger,301,113987.8459,TRUE
+Niger,319,89190.44102,TRUE
+Niger,51,26504.47085,TRUE
+Niger,53,6581.96824,TRUE
+Niger,77,5993.147024,TRUE
+Niger,213,124295.9159,TRUE
+Niger,228,133880.2683,TRUE
+Niger,269,15171.62496,TRUE
+Niger,296,245960,FALSE
+Niger,175,44820,FALSE
+Niger,12,36715.19395,TRUE
+Niger,13,74728.86082,TRUE
+Niger,108,12577.92841,TRUE
+Niger,165,14797.07017,TRUE
+Niger,215,105585.0293,TRUE
+Niger,261,8946.089355,TRUE
+Niger,281,136069.2843,TRUE
+Niger,302,27087.34387,TRUE
+Niger,310,36133,TRUE
+Niger,106,13595.99028,TRUE
+Niger,30,62885.73079,TRUE
+Niger,91,126485.3041,TRUE
+Niger,192,3780098.195,TRUE
+Niger,249,70032.42373,TRUE
+Niger,308,35296.76443,TRUE
+Niger,116,98484.54468,TRUE
+Niger,234,8162.890747,TRUE
+Niger,88,138218.959,TRUE
+Niger,227,9358.848173,TRUE
+Niger,8,21599.0332,TRUE
+Niger,115,186672.4488,TRUE
+Niger,146,28645.96233,TRUE
+Niger,257,14862.84549,TRUE
+Niger,39,10075.63454,TRUE
+Niger,61,218943.5096,TRUE
+Niger,76,100326.9844,TRUE
+Niger,268,27005.25,TRUE
+Niger,194,9390.783666,TRUE
+Niger,198,5299.135169,TRUE
+Niger,245,11957.75,TRUE
+Niger,86,3827,FALSE
+Niger,247,27947.125,TRUE
+Niger,15,4960,FALSE
+Niger,135,5719.346191,TRUE
+Niger,65,4252.65625,TRUE
+Niger,70,8796.273438,TRUE
+Niger,314,4472.643433,TRUE
+Niger,133,6124.625,TRUE
+Niger,240,4373.4375,TRUE
+Niger,148,23186,TRUE
+Niger,31,5157,TRUE
+Nigeria,4,20977.52128,TRUE
+Nigeria,5,7484.490489,TRUE
+Nigeria,7,111437.9893,TRUE
+Nigeria,8,47030.54376,TRUE
+Nigeria,17,33099.94094,TRUE
+Nigeria,105,149702.6633,TRUE
+Nigeria,120,115713.1489,TRUE
+Nigeria,161,8730.264786,TRUE
+Nigeria,169,15913,FALSE
+Nigeria,179,121608.9919,TRUE
+Nigeria,180,8460,FALSE
+Nigeria,203,26179.47154,TRUE
+Nigeria,205,21536,FALSE
+Nigeria,208,84004.18102,TRUE
+Nigeria,219,80605.62094,TRUE
+Nigeria,221,53059.48552,TRUE
+Nigeria,229,16244.65912,TRUE
+Nigeria,231,60255.26389,TRUE
+Nigeria,235,37418,FALSE
+Nigeria,254,20265,FALSE
+Nigeria,84,7907,FALSE
+Nigeria,267,10569,FALSE
+Nigeria,282,423220.8453,TRUE
+Nigeria,286,161961,FALSE
+Nigeria,289,9979.922823,TRUE
+Nigeria,316,72255.87156,TRUE
+Nigeria,317,188762.6372,TRUE
+Nigeria,318,10000,FALSE
+Nigeria,18,11273.75269,TRUE
+Nigeria,19,77366.60983,TRUE
+Nigeria,33,30270.38924,TRUE
+Nigeria,40,180987.6885,TRUE
+Nigeria,49,88136,FALSE
+Nigeria,54,175365.1249,TRUE
+Nigeria,58,74040.89691,TRUE
+Nigeria,59,22326.21725,TRUE
+Nigeria,63,17275,FALSE
+Nigeria,90,194487.8189,TRUE
+Nigeria,94,61002.28577,TRUE
+Nigeria,101,138512.4356,TRUE
+Nigeria,112,122104.9439,TRUE
+Nigeria,138,17125.18189,TRUE
+Nigeria,152,119704.6269,TRUE
+Nigeria,154,96782.90416,TRUE
+Nigeria,158,96473.15601,TRUE
+Nigeria,200,22918.25267,TRUE
+Nigeria,202,13518,FALSE
+Nigeria,206,161335,FALSE
+Nigeria,218,52990.31222,TRUE
+Nigeria,238,116960.1876,TRUE
+Nigeria,243,112174.5654,TRUE
+Nigeria,259,55616.6005,TRUE
+Nigeria,276,9600,FALSE
+Nigeria,279,177754.1672,TRUE
+Nigeria,298,120463.1286,TRUE
+Nigeria,305,5900,FALSE
+Nigeria,306,39051,FALSE
+Nigeria,11,178064.2799,TRUE
+Nigeria,16,74389.59543,TRUE
+Nigeria,48,27222.34375,TRUE
+Nigeria,60,22383.25858,TRUE
+Nigeria,63,17275,FALSE
+Nigeria,121,115777.4722,TRUE
+Nigeria,128,11301,FALSE
+Nigeria,156,10200.29705,TRUE
+Nigeria,217,21196.4891,TRUE
+Nigeria,248,14225.32829,TRUE
+Nigeria,270,11931,FALSE
+Nigeria,52,91254,FALSE
+Nigeria,74,2822,FALSE
+Nigeria,75,72774,FALSE
+Nigeria,80,37810,FALSE
+Nigeria,301,40639,FALSE
+Nigeria,319,85487,FALSE
+Nigeria,51,23922,FALSE
+Nigeria,53,6581.96824,TRUE
+Nigeria,77,13081,FALSE
+Nigeria,213,25597,FALSE
+Nigeria,228,81238,FALSE
+Nigeria,269,15171.62496,TRUE
+Nigeria,296,25325,FALSE
+Nigeria,175,68698,FALSE
+Nigeria,12,36715.19395,TRUE
+Nigeria,13,74728.86082,TRUE
+Nigeria,108,12577.92841,TRUE
+Nigeria,165,14797.07017,TRUE
+Nigeria,215,85519,FALSE
+Nigeria,261,8946.089355,TRUE
+Nigeria,281,136069.2843,TRUE
+Nigeria,302,27087.34387,TRUE
+Nigeria,310,36133,TRUE
+Nigeria,106,13595.99028,TRUE
+Nigeria,30,62885.73079,TRUE
+Nigeria,91,126485.3041,TRUE
+Nigeria,192,3780098.195,TRUE
+Nigeria,249,70032.42373,TRUE
+Nigeria,308,35296.76443,TRUE
+Nigeria,116,98484.54468,TRUE
+Nigeria,234,8162.890747,TRUE
+Nigeria,88,138218.959,TRUE
+Nigeria,227,9358.848173,TRUE
+Nigeria,8,21599.0332,TRUE
+Nigeria,115,47031,FALSE
+Nigeria,146,28645.96233,TRUE
+Nigeria,257,4139,FALSE
+Nigeria,39,10075.63454,TRUE
+Nigeria,61,218943.5096,TRUE
+Nigeria,76,100326.9844,TRUE
+Nigeria,268,8725,FALSE
+Nigeria,194,9390.783666,TRUE
+Nigeria,198,5299.135169,TRUE
+Nigeria,245,11957.75,TRUE
+Nigeria,86,8515,FALSE
+Nigeria,247,27947.125,TRUE
+Nigeria,15,5922.875,TRUE
+Nigeria,135,5719.346191,TRUE
+Nigeria,65,4252.65625,TRUE
+Nigeria,70,8796.273438,TRUE
+Nigeria,314,4472.643433,TRUE
+Nigeria,133,6124.625,TRUE
+Nigeria,240,4373.4375,TRUE
+Nigeria,148,23186,TRUE
+Nigeria,31,5157,TRUE
+Niue,4,20977.52128,TRUE
+Niue,5,7484.490489,TRUE
+Niue,7,111437.9893,TRUE
+Niue,8,47030.54376,TRUE
+Niue,17,33099.94094,TRUE
+Niue,105,149702.6633,TRUE
+Niue,120,115713.1489,TRUE
+Niue,161,8730.264786,TRUE
+Niue,169,16777.49735,TRUE
+Niue,179,121608.9919,TRUE
+Niue,180,7520.279265,TRUE
+Niue,203,26179.47154,TRUE
+Niue,205,158255.8483,TRUE
+Niue,208,84004.18102,TRUE
+Niue,219,80605.62094,TRUE
+Niue,221,53059.48552,TRUE
+Niue,229,16244.65912,TRUE
+Niue,231,60255.26389,TRUE
+Niue,235,172280.9273,TRUE
+Niue,254,26952.37295,TRUE
+Niue,84,9355.713607,TRUE
+Niue,267,9372.487582,TRUE
+Niue,282,423220.8453,TRUE
+Niue,286,760050.6713,TRUE
+Niue,289,9979.922823,TRUE
+Niue,316,72255.87156,TRUE
+Niue,317,188762.6372,TRUE
+Niue,318,32261.2753,TRUE
+Niue,18,11273.75269,TRUE
+Niue,19,77366.60983,TRUE
+Niue,33,30270.38924,TRUE
+Niue,40,180987.6885,TRUE
+Niue,49,247408.5214,TRUE
+Niue,54,175365.1249,TRUE
+Niue,58,74040.89691,TRUE
+Niue,59,22326.21725,TRUE
+Niue,63,234336.5313,TRUE
+Niue,90,194487.8189,TRUE
+Niue,94,61002.28577,TRUE
+Niue,101,138512.4356,TRUE
+Niue,112,122104.9439,TRUE
+Niue,138,17125.18189,TRUE
+Niue,152,119704.6269,TRUE
+Niue,154,42484,FALSE
+Niue,158,96473.15601,TRUE
+Niue,200,22918.25267,TRUE
+Niue,202,85300.04797,TRUE
+Niue,206,183393.7134,TRUE
+Niue,218,52990.31222,TRUE
+Niue,238,116960.1876,TRUE
+Niue,243,112174.5654,TRUE
+Niue,259,55616.6005,TRUE
+Niue,276,10950.60863,TRUE
+Niue,279,177754.1672,TRUE
+Niue,298,120463.1286,TRUE
+Niue,305,15590.0347,TRUE
+Niue,306,131681.4608,TRUE
+Niue,11,178064.2799,TRUE
+Niue,16,20004,FALSE
+Niue,48,27222.34375,TRUE
+Niue,60,22383.25858,TRUE
+Niue,63,11715.28525,TRUE
+Niue,121,115777.4722,TRUE
+Niue,128,9353.124815,TRUE
+Niue,156,10200.29705,TRUE
+Niue,217,21196.4891,TRUE
+Niue,248,14225.32829,TRUE
+Niue,270,9151.63574,TRUE
+Niue,52,60365,FALSE
+Niue,74,4541.36112,TRUE
+Niue,75,7674,FALSE
+Niue,80,49992.57574,TRUE
+Niue,301,67977,FALSE
+Niue,319,11291,FALSE
+Niue,51,26504.47085,TRUE
+Niue,53,6581.96824,TRUE
+Niue,77,5993.147024,TRUE
+Niue,213,124295.9159,TRUE
+Niue,228,133880.2683,TRUE
+Niue,269,15171.62496,TRUE
+Niue,296,162457,FALSE
+Niue,175,70802.39066,TRUE
+Niue,12,36715.19395,TRUE
+Niue,13,74728.86082,TRUE
+Niue,108,12577.92841,TRUE
+Niue,165,14797.07017,TRUE
+Niue,215,105585.0293,TRUE
+Niue,261,8946.089355,TRUE
+Niue,281,136069.2843,TRUE
+Niue,302,27087.34387,TRUE
+Niue,310,36133,TRUE
+Niue,106,13595.99028,TRUE
+Niue,30,62885.73079,TRUE
+Niue,91,126485.3041,TRUE
+Niue,192,3780098.195,TRUE
+Niue,249,70032.42373,TRUE
+Niue,308,35296.76443,TRUE
+Niue,116,98484.54468,TRUE
+Niue,234,8162.890747,TRUE
+Niue,88,138218.959,TRUE
+Niue,227,9358.848173,TRUE
+Niue,8,21599.0332,TRUE
+Niue,115,186672.4488,TRUE
+Niue,146,28645.96233,TRUE
+Niue,257,14862.84549,TRUE
+Niue,39,10075.63454,TRUE
+Niue,61,218943.5096,TRUE
+Niue,76,100326.9844,TRUE
+Niue,268,27005.25,TRUE
+Niue,194,9390.783666,TRUE
+Niue,198,5299.135169,TRUE
+Niue,245,11957.75,TRUE
+Niue,86,15341.61704,TRUE
+Niue,247,27947.125,TRUE
+Niue,15,5922.875,TRUE
+Niue,135,5719.346191,TRUE
+Niue,65,4252.65625,TRUE
+Niue,70,8796.273438,TRUE
+Niue,314,4472.643433,TRUE
+Niue,133,6124.625,TRUE
+Niue,240,4373.4375,TRUE
+Niue,148,23186,TRUE
+Niue,31,5157,TRUE
+Norway,4,20977.52128,TRUE
+Norway,5,7484.490489,TRUE
+Norway,7,91458,FALSE
+Norway,8,47030.54376,TRUE
+Norway,17,45697,FALSE
+Norway,105,149702.6633,TRUE
+Norway,120,115713.1489,TRUE
+Norway,161,8730.264786,TRUE
+Norway,169,16777.49735,TRUE
+Norway,179,121608.9919,TRUE
+Norway,180,7520.279265,TRUE
+Norway,203,26179.47154,TRUE
+Norway,205,158255.8483,TRUE
+Norway,208,84004.18102,TRUE
+Norway,219,80605.62094,TRUE
+Norway,221,37188,FALSE
+Norway,229,16244.65912,TRUE
+Norway,231,41864,FALSE
+Norway,235,303375,FALSE
+Norway,254,26952.37295,TRUE
+Norway,84,9355.713607,TRUE
+Norway,267,9372.487582,TRUE
+Norway,282,423220.8453,TRUE
+Norway,286,760050.6713,TRUE
+Norway,289,9979.922823,TRUE
+Norway,316,72255.87156,TRUE
+Norway,317,188762.6372,TRUE
+Norway,318,46234,FALSE
+Norway,18,11273.75269,TRUE
+Norway,19,77725,FALSE
+Norway,33,30270.38924,TRUE
+Norway,40,345427,FALSE
+Norway,49,315660,FALSE
+Norway,54,132810,FALSE
+Norway,58,35729,FALSE
+Norway,59,22326.21725,TRUE
+Norway,63,234336.5313,TRUE
+Norway,90,2295921,FALSE
+Norway,94,61002.28577,TRUE
+Norway,101,138512.4356,TRUE
+Norway,112,122104.9439,TRUE
+Norway,138,17125.18189,TRUE
+Norway,152,201227,FALSE
+Norway,154,96782.90416,TRUE
+Norway,158,240051,FALSE
+Norway,200,46636,FALSE
+Norway,202,85300.04797,TRUE
+Norway,206,285893,FALSE
+Norway,218,57826,FALSE
+Norway,238,116960.1876,TRUE
+Norway,243,112174.5654,TRUE
+Norway,259,47074,FALSE
+Norway,276,10950.60863,TRUE
+Norway,279,177754.1672,TRUE
+Norway,298,120463.1286,TRUE
+Norway,305,15590.0347,TRUE
+Norway,306,3183143,FALSE
+Norway,11,178064.2799,TRUE
+Norway,16,74389.59543,TRUE
+Norway,48,27222.34375,TRUE
+Norway,60,22383.25858,TRUE
+Norway,63,11715.28525,TRUE
+Norway,121,115777.4722,TRUE
+Norway,128,9353.124815,TRUE
+Norway,156,10200.29705,TRUE
+Norway,217,21545,FALSE
+Norway,248,27496,FALSE
+Norway,270,9151.63574,TRUE
+Norway,52,72720.10141,TRUE
+Norway,74,4541.36112,TRUE
+Norway,75,47178.96176,TRUE
+Norway,80,44789,FALSE
+Norway,301,113987.8459,TRUE
+Norway,319,89190.44102,TRUE
+Norway,51,26504.47085,TRUE
+Norway,53,6581.96824,TRUE
+Norway,77,5993.147024,TRUE
+Norway,213,124295.9159,TRUE
+Norway,228,133880.2683,TRUE
+Norway,269,15171.62496,TRUE
+Norway,296,43692.55808,TRUE
+Norway,175,70802.39066,TRUE
+Norway,12,36715.19395,TRUE
+Norway,13,74728.86082,TRUE
+Norway,108,12577.92841,TRUE
+Norway,165,14797.07017,TRUE
+Norway,215,105585.0293,TRUE
+Norway,261,8946.089355,TRUE
+Norway,281,56854,FALSE
+Norway,302,27087.34387,TRUE
+Norway,310,36133,TRUE
+Norway,106,13595.99028,TRUE
+Norway,30,4500,FALSE
+Norway,91,26866,FALSE
+Norway,192,3780098.195,TRUE
+Norway,249,72481,FALSE
+Norway,308,33085,FALSE
+Norway,116,98484.54468,TRUE
+Norway,234,8162.890747,TRUE
+Norway,88,138218.959,TRUE
+Norway,227,9358.848173,TRUE
+Norway,8,21599.0332,TRUE
+Norway,115,186672.4488,TRUE
+Norway,146,28645.96233,TRUE
+Norway,257,14862.84549,TRUE
+Norway,39,10075.63454,TRUE
+Norway,61,218943.5096,TRUE
+Norway,76,100326.9844,TRUE
+Norway,268,27005.25,TRUE
+Norway,194,9390.783666,TRUE
+Norway,198,5299.135169,TRUE
+Norway,245,11957.75,TRUE
+Norway,86,15341.61704,TRUE
+Norway,247,27947.125,TRUE
+Norway,15,5922.875,TRUE
+Norway,135,5719.346191,TRUE
+Norway,65,4252.65625,TRUE
+Norway,70,8796.273438,TRUE
+Norway,314,4472.643433,TRUE
+Norway,133,6124.625,TRUE
+Norway,240,4373.4375,TRUE
+Norway,148,23186,TRUE
+Norway,31,5157,TRUE
+Occupied Palestinian Territory,4,16481,FALSE
+Occupied Palestinian Territory,5,7277,FALSE
+Occupied Palestinian Territory,7,45756,FALSE
+Occupied Palestinian Territory,8,24659,FALSE
+Occupied Palestinian Territory,17,15488,FALSE
+Occupied Palestinian Territory,105,48065,FALSE
+Occupied Palestinian Territory,120,77843,FALSE
+Occupied Palestinian Territory,161,8730.264786,TRUE
+Occupied Palestinian Territory,169,16777.49735,TRUE
+Occupied Palestinian Territory,179,276439,FALSE
+Occupied Palestinian Territory,180,7520.279265,TRUE
+Occupied Palestinian Territory,203,14261,FALSE
+Occupied Palestinian Territory,205,280293,FALSE
+Occupied Palestinian Territory,208,239412,FALSE
+Occupied Palestinian Territory,219,57885,FALSE
+Occupied Palestinian Territory,221,29823,FALSE
+Occupied Palestinian Territory,229,16244.65912,TRUE
+Occupied Palestinian Territory,231,35073,FALSE
+Occupied Palestinian Territory,235,357619,FALSE
+Occupied Palestinian Territory,254,26952.37295,TRUE
+Occupied Palestinian Territory,84,9355.713607,TRUE
+Occupied Palestinian Territory,267,7485,FALSE
+Occupied Palestinian Territory,282,423220.8453,TRUE
+Occupied Palestinian Territory,286,760050.6713,TRUE
+Occupied Palestinian Territory,289,8316,FALSE
+Occupied Palestinian Territory,316,46173,FALSE
+Occupied Palestinian Territory,317,678983,FALSE
+Occupied Palestinian Territory,318,18994,FALSE
+Occupied Palestinian Territory,18,11273.75269,TRUE
+Occupied Palestinian Territory,19,175903,FALSE
+Occupied Palestinian Territory,33,9290,FALSE
+Occupied Palestinian Territory,40,340771,FALSE
+Occupied Palestinian Territory,49,258657,FALSE
+Occupied Palestinian Territory,54,289935,FALSE
+Occupied Palestinian Territory,58,58872,FALSE
+Occupied Palestinian Territory,59,22326.21725,TRUE
+Occupied Palestinian Territory,63,371945,FALSE
+Occupied Palestinian Territory,90,590677,FALSE
+Occupied Palestinian Territory,94,14389,FALSE
+Occupied Palestinian Territory,101,492733,FALSE
+Occupied Palestinian Territory,112,104992,FALSE
+Occupied Palestinian Territory,138,17125.18189,TRUE
+Occupied Palestinian Territory,152,119704.6269,TRUE
+Occupied Palestinian Territory,154,160339,FALSE
+Occupied Palestinian Territory,158,140136,FALSE
+Occupied Palestinian Territory,200,22918.25267,TRUE
+Occupied Palestinian Territory,202,50394,FALSE
+Occupied Palestinian Territory,206,69696,FALSE
+Occupied Palestinian Territory,218,57489,FALSE
+Occupied Palestinian Territory,238,187428,FALSE
+Occupied Palestinian Territory,243,37140,FALSE
+Occupied Palestinian Territory,259,55616.6005,TRUE
+Occupied Palestinian Territory,276,10950.60863,TRUE
+Occupied Palestinian Territory,279,178162,FALSE
+Occupied Palestinian Territory,298,251552,FALSE
+Occupied Palestinian Territory,305,7063,FALSE
+Occupied Palestinian Territory,306,1254519,FALSE
+Occupied Palestinian Territory,11,8143,FALSE
+Occupied Palestinian Territory,16,292898,FALSE
+Occupied Palestinian Territory,48,27222.34375,TRUE
+Occupied Palestinian Territory,60,12831,FALSE
+Occupied Palestinian Territory,63,371945,FALSE
+Occupied Palestinian Territory,121,296976,FALSE
+Occupied Palestinian Territory,128,53552,FALSE
+Occupied Palestinian Territory,156,5479,FALSE
+Occupied Palestinian Territory,217,25640,FALSE
+Occupied Palestinian Territory,248,14225.32829,TRUE
+Occupied Palestinian Territory,270,11204,FALSE
+Occupied Palestinian Territory,52,72720.10141,TRUE
+Occupied Palestinian Territory,74,4541.36112,TRUE
+Occupied Palestinian Territory,75,47178.96176,TRUE
+Occupied Palestinian Territory,80,130844,FALSE
+Occupied Palestinian Territory,301,388475,FALSE
+Occupied Palestinian Territory,319,89190.44102,TRUE
+Occupied Palestinian Territory,51,26504.47085,TRUE
+Occupied Palestinian Territory,53,6581.96824,TRUE
+Occupied Palestinian Territory,77,5993.147024,TRUE
+Occupied Palestinian Territory,213,124295.9159,TRUE
+Occupied Palestinian Territory,228,133880.2683,TRUE
+Occupied Palestinian Territory,269,15171.62496,TRUE
+Occupied Palestinian Territory,296,271949,FALSE
+Occupied Palestinian Territory,175,101198,FALSE
+Occupied Palestinian Territory,12,36715.19395,TRUE
+Occupied Palestinian Territory,13,244662,FALSE
+Occupied Palestinian Territory,108,12577.92841,TRUE
+Occupied Palestinian Territory,165,14797.07017,TRUE
+Occupied Palestinian Territory,215,105585.0293,TRUE
+Occupied Palestinian Territory,261,931,FALSE
+Occupied Palestinian Territory,281,275087,FALSE
+Occupied Palestinian Territory,302,27087.34387,TRUE
+Occupied Palestinian Territory,310,36133,TRUE
+Occupied Palestinian Territory,106,13595.99028,TRUE
+Occupied Palestinian Territory,30,62885.73079,TRUE
+Occupied Palestinian Territory,91,126485.3041,TRUE
+Occupied Palestinian Territory,192,3780098.195,TRUE
+Occupied Palestinian Territory,249,70032.42373,TRUE
+Occupied Palestinian Territory,308,35296.76443,TRUE
+Occupied Palestinian Territory,116,98484.54468,TRUE
+Occupied Palestinian Territory,234,74301,FALSE
+Occupied Palestinian Territory,88,138218.959,TRUE
+Occupied Palestinian Territory,227,9358.848173,TRUE
+Occupied Palestinian Territory,8,24659,FALSE
+Occupied Palestinian Territory,115,186672.4488,TRUE
+Occupied Palestinian Territory,146,28645.96233,TRUE
+Occupied Palestinian Territory,257,14862.84549,TRUE
+Occupied Palestinian Territory,39,10075.63454,TRUE
+Occupied Palestinian Territory,61,218943.5096,TRUE
+Occupied Palestinian Territory,76,100326.9844,TRUE
+Occupied Palestinian Territory,268,27005.25,TRUE
+Occupied Palestinian Territory,194,9390.783666,TRUE
+Occupied Palestinian Territory,198,5299.135169,TRUE
+Occupied Palestinian Territory,245,11957.75,TRUE
+Occupied Palestinian Territory,86,39573,FALSE
+Occupied Palestinian Territory,247,27947.125,TRUE
+Occupied Palestinian Territory,15,5922.875,TRUE
+Occupied Palestinian Territory,135,5719.346191,TRUE
+Occupied Palestinian Territory,65,4252.65625,TRUE
+Occupied Palestinian Territory,70,8796.273438,TRUE
+Occupied Palestinian Territory,314,4472.643433,TRUE
+Occupied Palestinian Territory,133,6124.625,TRUE
+Occupied Palestinian Territory,240,4373.4375,TRUE
+Occupied Palestinian Territory,148,23186,TRUE
+Occupied Palestinian Territory,31,5157,TRUE
+Oman,4,20977.52128,TRUE
+Oman,5,7484.490489,TRUE
+Oman,7,111437.9893,TRUE
+Oman,8,47030.54376,TRUE
+Oman,17,26211,FALSE
+Oman,105,149702.6633,TRUE
+Oman,120,115713.1489,TRUE
+Oman,161,8730.264786,TRUE
+Oman,169,119543,FALSE
+Oman,179,199810,FALSE
+Oman,180,7520.279265,TRUE
+Oman,203,26179.47154,TRUE
+Oman,205,151071,FALSE
+Oman,208,84004.18102,TRUE
+Oman,219,80605.62094,TRUE
+Oman,221,53059.48552,TRUE
+Oman,229,16244.65912,TRUE
+Oman,231,60255.26389,TRUE
+Oman,235,264660,FALSE
+Oman,254,26952.37295,TRUE
+Oman,84,9355.713607,TRUE
+Oman,267,9372.487582,TRUE
+Oman,282,423220.8453,TRUE
+Oman,286,234322,FALSE
+Oman,289,9979.922823,TRUE
+Oman,316,72255.87156,TRUE
+Oman,317,230851,FALSE
+Oman,318,29892,FALSE
+Oman,18,11273.75269,TRUE
+Oman,19,77366.60983,TRUE
+Oman,33,30270.38924,TRUE
+Oman,40,225835,FALSE
+Oman,49,120627,FALSE
+Oman,54,189580,FALSE
+Oman,58,74040.89691,TRUE
+Oman,59,22326.21725,TRUE
+Oman,63,144149,FALSE
+Oman,90,1409697,FALSE
+Oman,94,144545,FALSE
+Oman,101,207292,FALSE
+Oman,112,87432,FALSE
+Oman,138,17125.18189,TRUE
+Oman,152,119704.6269,TRUE
+Oman,154,51316,FALSE
+Oman,158,96473.15601,TRUE
+Oman,200,22918.25267,TRUE
+Oman,202,92345,FALSE
+Oman,206,183393.7134,TRUE
+Oman,218,52990.31222,TRUE
+Oman,238,100982,FALSE
+Oman,243,112174.5654,TRUE
+Oman,259,55616.6005,TRUE
+Oman,276,10950.60863,TRUE
+Oman,279,177754.1672,TRUE
+Oman,298,120463.1286,TRUE
+Oman,305,43653,FALSE
+Oman,306,647650,FALSE
+Oman,11,178064.2799,TRUE
+Oman,16,116664,FALSE
+Oman,48,27222.34375,TRUE
+Oman,60,22383.25858,TRUE
+Oman,63,144149,FALSE
+Oman,121,115777.4722,TRUE
+Oman,128,9353.124815,TRUE
+Oman,156,10200.29705,TRUE
+Oman,217,21196.4891,TRUE
+Oman,248,14225.32829,TRUE
+Oman,270,9151.63574,TRUE
+Oman,52,72720.10141,TRUE
+Oman,74,4541.36112,TRUE
+Oman,75,47178.96176,TRUE
+Oman,80,49992.57574,TRUE
+Oman,301,113987.8459,TRUE
+Oman,319,89190.44102,TRUE
+Oman,51,26504.47085,TRUE
+Oman,53,6581.96824,TRUE
+Oman,77,5993.147024,TRUE
+Oman,213,124295.9159,TRUE
+Oman,228,133880.2683,TRUE
+Oman,269,15171.62496,TRUE
+Oman,296,43692.55808,TRUE
+Oman,175,104696,FALSE
+Oman,12,36715.19395,TRUE
+Oman,13,74728.86082,TRUE
+Oman,108,12577.92841,TRUE
+Oman,165,14797.07017,TRUE
+Oman,215,198351,FALSE
+Oman,261,8946.089355,TRUE
+Oman,281,136069.2843,TRUE
+Oman,302,27087.34387,TRUE
+Oman,310,36133,TRUE
+Oman,106,13595.99028,TRUE
+Oman,30,62885.73079,TRUE
+Oman,91,126485.3041,TRUE
+Oman,192,3780098.195,TRUE
+Oman,249,70032.42373,TRUE
+Oman,308,35296.76443,TRUE
+Oman,116,98484.54468,TRUE
+Oman,234,8162.890747,TRUE
+Oman,88,138218.959,TRUE
+Oman,227,9358.848173,TRUE
+Oman,8,21599.0332,TRUE
+Oman,115,186672.4488,TRUE
+Oman,146,28645.96233,TRUE
+Oman,257,14862.84549,TRUE
+Oman,39,10075.63454,TRUE
+Oman,61,218943.5096,TRUE
+Oman,76,100326.9844,TRUE
+Oman,268,27005.25,TRUE
+Oman,194,9390.783666,TRUE
+Oman,198,5299.135169,TRUE
+Oman,245,11957.75,TRUE
+Oman,86,15341.61704,TRUE
+Oman,247,27947.125,TRUE
+Oman,15,5922.875,TRUE
+Oman,135,5719.346191,TRUE
+Oman,65,4252.65625,TRUE
+Oman,70,8796.273438,TRUE
+Oman,314,4472.643433,TRUE
+Oman,133,6124.625,TRUE
+Oman,240,4373.4375,TRUE
+Oman,148,23186,TRUE
+Oman,31,5157,TRUE
+Pakistan,4,20201,FALSE
+Pakistan,5,7484.490489,TRUE
+Pakistan,7,64185,FALSE
+Pakistan,8,67140,FALSE
+Pakistan,17,9242,FALSE
+Pakistan,105,37818,FALSE
+Pakistan,120,39845,FALSE
+Pakistan,161,7030,FALSE
+Pakistan,169,45952,FALSE
+Pakistan,179,123000,FALSE
+Pakistan,180,6470,FALSE
+Pakistan,203,26179.47154,TRUE
+Pakistan,205,127955,FALSE
+Pakistan,208,114867,FALSE
+Pakistan,219,49431,FALSE
+Pakistan,221,88275,FALSE
+Pakistan,229,34305,FALSE
+Pakistan,231,78131,FALSE
+Pakistan,235,224459,FALSE
+Pakistan,254,37649,FALSE
+Pakistan,84,19858,FALSE
+Pakistan,267,4103,FALSE
+Pakistan,282,406829,FALSE
+Pakistan,286,578790,FALSE
+Pakistan,289,12747,FALSE
+Pakistan,316,83050,FALSE
+Pakistan,317,142496,FALSE
+Pakistan,318,28442,FALSE
+Pakistan,18,6631,FALSE
+Pakistan,19,44030,FALSE
+Pakistan,33,30270.38924,TRUE
+Pakistan,40,154821,FALSE
+Pakistan,49,175307,FALSE
+Pakistan,54,174308,FALSE
+Pakistan,58,18417,FALSE
+Pakistan,59,22326.21725,TRUE
+Pakistan,63,23195,FALSE
+Pakistan,90,161428,FALSE
+Pakistan,94,51628,FALSE
+Pakistan,101,99851,FALSE
+Pakistan,112,87214,FALSE
+Pakistan,138,17125.18189,TRUE
+Pakistan,152,119704.6269,TRUE
+Pakistan,154,109345,FALSE
+Pakistan,158,10769,FALSE
+Pakistan,200,22918.25267,TRUE
+Pakistan,202,75695,FALSE
+Pakistan,206,183393.7134,TRUE
+Pakistan,218,63173,FALSE
+Pakistan,238,97824,FALSE
+Pakistan,243,112174.5654,TRUE
+Pakistan,259,55616.6005,TRUE
+Pakistan,276,4283,FALSE
+Pakistan,279,124051,FALSE
+Pakistan,298,115081,FALSE
+Pakistan,305,22957,FALSE
+Pakistan,306,95499,FALSE
+Pakistan,11,178064.2799,TRUE
+Pakistan,16,43447,FALSE
+Pakistan,48,27222.34375,TRUE
+Pakistan,60,5147,FALSE
+Pakistan,63,23195,FALSE
+Pakistan,121,115777.4722,TRUE
+Pakistan,128,9755,FALSE
+Pakistan,156,4932,FALSE
+Pakistan,217,6721,FALSE
+Pakistan,248,9144,FALSE
+Pakistan,270,5798,FALSE
+Pakistan,52,72720.10141,TRUE
+Pakistan,74,4541.36112,TRUE
+Pakistan,75,67151,FALSE
+Pakistan,80,49992.57574,TRUE
+Pakistan,301,113987.8459,TRUE
+Pakistan,319,89190.44102,TRUE
+Pakistan,51,26504.47085,TRUE
+Pakistan,53,10270,FALSE
+Pakistan,77,5993.147024,TRUE
+Pakistan,213,124295.9159,TRUE
+Pakistan,228,133880.2683,TRUE
+Pakistan,269,15171.62496,TRUE
+Pakistan,296,73377,FALSE
+Pakistan,175,95747,FALSE
+Pakistan,12,36715.19395,TRUE
+Pakistan,13,74728.86082,TRUE
+Pakistan,108,12577.92841,TRUE
+Pakistan,165,14797.07017,TRUE
+Pakistan,215,46994,FALSE
+Pakistan,261,10509,FALSE
+Pakistan,281,136069.2843,TRUE
+Pakistan,302,27087.34387,TRUE
+Pakistan,310,36133,TRUE
+Pakistan,106,13595.99028,TRUE
+Pakistan,30,62885.73079,TRUE
+Pakistan,91,126485.3041,TRUE
+Pakistan,192,3780098.195,TRUE
+Pakistan,249,70032.42373,TRUE
+Pakistan,308,35296.76443,TRUE
+Pakistan,116,98484.54468,TRUE
+Pakistan,234,8162.890747,TRUE
+Pakistan,88,138218.959,TRUE
+Pakistan,227,6667,FALSE
+Pakistan,8,67140,FALSE
+Pakistan,115,4442,FALSE
+Pakistan,146,11341,FALSE
+Pakistan,257,14862.84549,TRUE
+Pakistan,39,10075.63454,TRUE
+Pakistan,61,218943.5096,TRUE
+Pakistan,76,100326.9844,TRUE
+Pakistan,268,27005.25,TRUE
+Pakistan,194,9390.783666,TRUE
+Pakistan,198,5299.135169,TRUE
+Pakistan,245,11957.75,TRUE
+Pakistan,86,15341.61704,TRUE
+Pakistan,247,27947.125,TRUE
+Pakistan,15,5922.875,TRUE
+Pakistan,135,4669,FALSE
+Pakistan,65,4252.65625,TRUE
+Pakistan,70,8796.273438,TRUE
+Pakistan,314,4472.643433,TRUE
+Pakistan,133,6124.625,TRUE
+Pakistan,240,4373.4375,TRUE
+Pakistan,148,23186,TRUE
+Pakistan,31,5157,TRUE
+Panama,4,20977.52128,TRUE
+Panama,5,7484.490489,TRUE
+Panama,7,111437.9893,TRUE
+Panama,8,47030.54376,TRUE
+Panama,17,33099.94094,TRUE
+Panama,105,149702.6633,TRUE
+Panama,120,115713.1489,TRUE
+Panama,161,8730.264786,TRUE
+Panama,169,18867,FALSE
+Panama,179,29951,FALSE
+Panama,180,7520.279265,TRUE
+Panama,203,26179.47154,TRUE
+Panama,205,218643,FALSE
+Panama,208,84014,FALSE
+Panama,219,80605.62094,TRUE
+Panama,221,53059.48552,TRUE
+Panama,229,16244.65912,TRUE
+Panama,231,60255.26389,TRUE
+Panama,235,240735,FALSE
+Panama,254,30417,FALSE
+Panama,84,9355.713607,TRUE
+Panama,267,5825,FALSE
+Panama,282,423220.8453,TRUE
+Panama,286,636831,FALSE
+Panama,289,9979.922823,TRUE
+Panama,316,72255.87156,TRUE
+Panama,317,166729,FALSE
+Panama,318,32261.2753,TRUE
+Panama,18,4126,FALSE
+Panama,19,77366.60983,TRUE
+Panama,33,30270.38924,TRUE
+Panama,40,158635,FALSE
+Panama,49,102646,FALSE
+Panama,54,175365.1249,TRUE
+Panama,58,74040.89691,TRUE
+Panama,59,22326.21725,TRUE
+Panama,63,180937,FALSE
+Panama,90,92708,FALSE
+Panama,94,61002.28577,TRUE
+Panama,101,138512.4356,TRUE
+Panama,112,122104.9439,TRUE
+Panama,138,17125.18189,TRUE
+Panama,152,119704.6269,TRUE
+Panama,154,96782.90416,TRUE
+Panama,158,187363,FALSE
+Panama,200,22918.25267,TRUE
+Panama,202,85300.04797,TRUE
+Panama,206,183393.7134,TRUE
+Panama,218,52990.31222,TRUE
+Panama,238,116960.1876,TRUE
+Panama,243,112174.5654,TRUE
+Panama,259,55616.6005,TRUE
+Panama,276,3951,FALSE
+Panama,279,177754.1672,TRUE
+Panama,298,120463.1286,TRUE
+Panama,305,18901,FALSE
+Panama,306,306726,FALSE
+Panama,11,178064.2799,TRUE
+Panama,16,401095,FALSE
+Panama,48,27222.34375,TRUE
+Panama,60,22383.25858,TRUE
+Panama,63,180937,FALSE
+Panama,121,115777.4722,TRUE
+Panama,128,9353.124815,TRUE
+Panama,156,10200.29705,TRUE
+Panama,217,21196.4891,TRUE
+Panama,248,14225.32829,TRUE
+Panama,270,43735,FALSE
+Panama,52,162479,FALSE
+Panama,74,1264,FALSE
+Panama,75,35562,FALSE
+Panama,80,49992.57574,TRUE
+Panama,301,113987.8459,TRUE
+Panama,319,47906,FALSE
+Panama,51,26504.47085,TRUE
+Panama,53,6581.96824,TRUE
+Panama,77,4478,FALSE
+Panama,213,101762,FALSE
+Panama,228,455006,FALSE
+Panama,269,15171.62496,TRUE
+Panama,296,43692.55808,TRUE
+Panama,175,66393,FALSE
+Panama,12,36715.19395,TRUE
+Panama,13,47131,FALSE
+Panama,108,12577.92841,TRUE
+Panama,165,14797.07017,TRUE
+Panama,215,346391,FALSE
+Panama,261,8946.089355,TRUE
+Panama,281,136069.2843,TRUE
+Panama,302,27087.34387,TRUE
+Panama,310,36133,TRUE
+Panama,106,13595.99028,TRUE
+Panama,30,62885.73079,TRUE
+Panama,91,126485.3041,TRUE
+Panama,192,3780098.195,TRUE
+Panama,249,70032.42373,TRUE
+Panama,308,35296.76443,TRUE
+Panama,116,98484.54468,TRUE
+Panama,234,8162.890747,TRUE
+Panama,88,138218.959,TRUE
+Panama,227,4872,FALSE
+Panama,8,21599.0332,TRUE
+Panama,115,186672.4488,TRUE
+Panama,146,28645.96233,TRUE
+Panama,257,14862.84549,TRUE
+Panama,39,10075.63454,TRUE
+Panama,61,218943.5096,TRUE
+Panama,76,55110,FALSE
+Panama,268,27005.25,TRUE
+Panama,194,9390.783666,TRUE
+Panama,198,5299.135169,TRUE
+Panama,245,11957.75,TRUE
+Panama,86,15341.61704,TRUE
+Panama,247,27947.125,TRUE
+Panama,15,5922.875,TRUE
+Panama,135,5719.346191,TRUE
+Panama,65,4252.65625,TRUE
+Panama,70,8796.273438,TRUE
+Panama,314,4472.643433,TRUE
+Panama,133,6124.625,TRUE
+Panama,240,4373.4375,TRUE
+Panama,148,23186,TRUE
+Panama,31,5157,TRUE
+Papua New Guinea,4,20977.52128,TRUE
+Papua New Guinea,5,7484.490489,TRUE
+Papua New Guinea,7,111437.9893,TRUE
+Papua New Guinea,8,47030.54376,TRUE
+Papua New Guinea,17,33099.94094,TRUE
+Papua New Guinea,105,149702.6633,TRUE
+Papua New Guinea,120,115713.1489,TRUE
+Papua New Guinea,161,8730.264786,TRUE
+Papua New Guinea,169,54979,FALSE
+Papua New Guinea,179,121608.9919,TRUE
+Papua New Guinea,180,7520.279265,TRUE
+Papua New Guinea,203,26179.47154,TRUE
+Papua New Guinea,205,158255.8483,TRUE
+Papua New Guinea,208,84004.18102,TRUE
+Papua New Guinea,219,80605.62094,TRUE
+Papua New Guinea,221,53059.48552,TRUE
+Papua New Guinea,229,16244.65912,TRUE
+Papua New Guinea,231,60255.26389,TRUE
+Papua New Guinea,235,54717,FALSE
+Papua New Guinea,254,20977,FALSE
+Papua New Guinea,84,9355.713607,TRUE
+Papua New Guinea,267,9372.487582,TRUE
+Papua New Guinea,282,423220.8453,TRUE
+Papua New Guinea,286,311289,FALSE
+Papua New Guinea,289,9979.922823,TRUE
+Papua New Guinea,316,72255.87156,TRUE
+Papua New Guinea,317,188762.6372,TRUE
+Papua New Guinea,318,32261.2753,TRUE
+Papua New Guinea,18,11273.75269,TRUE
+Papua New Guinea,19,24908,FALSE
+Papua New Guinea,33,30270.38924,TRUE
+Papua New Guinea,40,180987.6885,TRUE
+Papua New Guinea,49,247408.5214,TRUE
+Papua New Guinea,54,175365.1249,TRUE
+Papua New Guinea,58,74040.89691,TRUE
+Papua New Guinea,59,22326.21725,TRUE
+Papua New Guinea,63,19610,FALSE
+Papua New Guinea,90,194487.8189,TRUE
+Papua New Guinea,94,61002.28577,TRUE
+Papua New Guinea,101,138512.4356,TRUE
+Papua New Guinea,112,122104.9439,TRUE
+Papua New Guinea,138,17125.18189,TRUE
+Papua New Guinea,152,119704.6269,TRUE
+Papua New Guinea,154,96782.90416,TRUE
+Papua New Guinea,158,96473.15601,TRUE
+Papua New Guinea,200,22918.25267,TRUE
+Papua New Guinea,202,85300.04797,TRUE
+Papua New Guinea,206,183393.7134,TRUE
+Papua New Guinea,218,52990.31222,TRUE
+Papua New Guinea,238,18849,FALSE
+Papua New Guinea,243,112174.5654,TRUE
+Papua New Guinea,259,55616.6005,TRUE
+Papua New Guinea,276,10950.60863,TRUE
+Papua New Guinea,279,177754.1672,TRUE
+Papua New Guinea,298,120463.1286,TRUE
+Papua New Guinea,305,15590.0347,TRUE
+Papua New Guinea,306,42442,FALSE
+Papua New Guinea,11,178064.2799,TRUE
+Papua New Guinea,16,157524,FALSE
+Papua New Guinea,48,27222.34375,TRUE
+Papua New Guinea,60,22383.25858,TRUE
+Papua New Guinea,63,19610,FALSE
+Papua New Guinea,121,115777.4722,TRUE
+Papua New Guinea,128,10409,FALSE
+Papua New Guinea,156,10200.29705,TRUE
+Papua New Guinea,217,21196.4891,TRUE
+Papua New Guinea,248,14225.32829,TRUE
+Papua New Guinea,270,41067,FALSE
+Papua New Guinea,52,97871,FALSE
+Papua New Guinea,74,4053,FALSE
+Papua New Guinea,75,57369,FALSE
+Papua New Guinea,80,100111,FALSE
+Papua New Guinea,301,73977,FALSE
+Papua New Guinea,319,175404,FALSE
+Papua New Guinea,51,26504.47085,TRUE
+Papua New Guinea,53,6581.96824,TRUE
+Papua New Guinea,77,10828,FALSE
+Papua New Guinea,213,138065,FALSE
+Papua New Guinea,228,197219,FALSE
+Papua New Guinea,269,15171.62496,TRUE
+Papua New Guinea,296,51505,FALSE
+Papua New Guinea,175,70802.39066,TRUE
+Papua New Guinea,12,36715.19395,TRUE
+Papua New Guinea,13,74728.86082,TRUE
+Papua New Guinea,108,12577.92841,TRUE
+Papua New Guinea,165,14797.07017,TRUE
+Papua New Guinea,215,105585.0293,TRUE
+Papua New Guinea,261,8946.089355,TRUE
+Papua New Guinea,281,136069.2843,TRUE
+Papua New Guinea,302,14866,FALSE
+Papua New Guinea,310,36133,TRUE
+Papua New Guinea,106,13595.99028,TRUE
+Papua New Guinea,30,62885.73079,TRUE
+Papua New Guinea,91,126485.3041,TRUE
+Papua New Guinea,192,3780098.195,TRUE
+Papua New Guinea,249,70032.42373,TRUE
+Papua New Guinea,308,35296.76443,TRUE
+Papua New Guinea,116,98484.54468,TRUE
+Papua New Guinea,234,8162.890747,TRUE
+Papua New Guinea,88,138218.959,TRUE
+Papua New Guinea,227,9358.848173,TRUE
+Papua New Guinea,8,21599.0332,TRUE
+Papua New Guinea,115,186672.4488,TRUE
+Papua New Guinea,146,28645.96233,TRUE
+Papua New Guinea,257,5833,FALSE
+Papua New Guinea,39,10075.63454,TRUE
+Papua New Guinea,61,218943.5096,TRUE
+Papua New Guinea,76,100326.9844,TRUE
+Papua New Guinea,268,27005.25,TRUE
+Papua New Guinea,194,9390.783666,TRUE
+Papua New Guinea,198,4241,FALSE
+Papua New Guinea,245,11957.75,TRUE
+Papua New Guinea,86,15341.61704,TRUE
+Papua New Guinea,247,27947.125,TRUE
+Papua New Guinea,15,5922.875,TRUE
+Papua New Guinea,135,5719.346191,TRUE
+Papua New Guinea,65,4252.65625,TRUE
+Papua New Guinea,70,8796.273438,TRUE
+Papua New Guinea,314,2696,FALSE
+Papua New Guinea,133,6124.625,TRUE
+Papua New Guinea,240,6267,FALSE
+Papua New Guinea,148,23186,TRUE
+Papua New Guinea,31,5157,TRUE
+Paraguay,4,20977.52128,TRUE
+Paraguay,5,7484.490489,TRUE
+Paraguay,7,80076,FALSE
+Paraguay,8,47030.54376,TRUE
+Paraguay,17,33099.94094,TRUE
+Paraguay,105,149702.6633,TRUE
+Paraguay,120,55491,FALSE
+Paraguay,161,8730.264786,TRUE
+Paraguay,169,53670,FALSE
+Paraguay,179,38381,FALSE
+Paraguay,180,7520.279265,TRUE
+Paraguay,203,26179.47154,TRUE
+Paraguay,205,58996,FALSE
+Paraguay,208,289599,FALSE
+Paraguay,219,67267,FALSE
+Paraguay,221,65172,FALSE
+Paraguay,229,16244.65912,TRUE
+Paraguay,231,61778,FALSE
+Paraguay,235,145000,FALSE
+Paraguay,254,66000,FALSE
+Paraguay,84,11800,FALSE
+Paraguay,267,3900,FALSE
+Paraguay,282,423220.8453,TRUE
+Paraguay,286,559000,FALSE
+Paraguay,289,16000,FALSE
+Paraguay,316,72255.87156,TRUE
+Paraguay,317,50416,FALSE
+Paraguay,318,22000,FALSE
+Paraguay,18,8200,FALSE
+Paraguay,19,77366.60983,TRUE
+Paraguay,33,6030,FALSE
+Paraguay,40,180987.6885,TRUE
+Paraguay,49,115000,FALSE
+Paraguay,54,175365.1249,TRUE
+Paraguay,58,74040.89691,TRUE
+Paraguay,59,22326.21725,TRUE
+Paraguay,63,100000,FALSE
+Paraguay,90,194487.8189,TRUE
+Paraguay,94,61002.28577,TRUE
+Paraguay,101,138512.4356,TRUE
+Paraguay,112,13473,FALSE
+Paraguay,138,17125.18189,TRUE
+Paraguay,152,119704.6269,TRUE
+Paraguay,154,200624,FALSE
+Paraguay,158,96473.15601,TRUE
+Paraguay,200,22918.25267,TRUE
+Paraguay,202,85300.04797,TRUE
+Paraguay,206,82648,FALSE
+Paraguay,218,52990.31222,TRUE
+Paraguay,238,42908,FALSE
+Paraguay,243,112174.5654,TRUE
+Paraguay,259,55616.6005,TRUE
+Paraguay,276,27190,FALSE
+Paraguay,279,177754.1672,TRUE
+Paraguay,298,250494,FALSE
+Paraguay,305,19261,FALSE
+Paraguay,306,365000,FALSE
+Paraguay,11,178064.2799,TRUE
+Paraguay,16,91999,FALSE
+Paraguay,48,27222.34375,TRUE
+Paraguay,60,22383.25858,TRUE
+Paraguay,63,100000,FALSE
+Paraguay,121,475005,FALSE
+Paraguay,128,10300,FALSE
+Paraguay,156,10200.29705,TRUE
+Paraguay,217,8880,FALSE
+Paraguay,248,15753,FALSE
+Paraguay,270,34800,FALSE
+Paraguay,52,174000,FALSE
+Paraguay,74,4541.36112,TRUE
+Paraguay,75,47178.96176,TRUE
+Paraguay,80,49992.57574,TRUE
+Paraguay,301,113987.8459,TRUE
+Paraguay,319,89190.44102,TRUE
+Paraguay,51,26504.47085,TRUE
+Paraguay,53,12728,FALSE
+Paraguay,77,13222,FALSE
+Paraguay,213,94696,FALSE
+Paraguay,228,120500,FALSE
+Paraguay,269,15171.62496,TRUE
+Paraguay,296,99500,FALSE
+Paraguay,175,76244,FALSE
+Paraguay,12,36715.19395,TRUE
+Paraguay,13,59281,FALSE
+Paraguay,108,12577.92841,TRUE
+Paraguay,165,14797.07017,TRUE
+Paraguay,215,104853,FALSE
+Paraguay,261,8946.089355,TRUE
+Paraguay,281,95114,FALSE
+Paraguay,302,27087.34387,TRUE
+Paraguay,310,58150,FALSE
+Paraguay,106,13595.99028,TRUE
+Paraguay,30,62885.73079,TRUE
+Paraguay,91,126485.3041,TRUE
+Paraguay,192,3780098.195,TRUE
+Paraguay,249,70032.42373,TRUE
+Paraguay,308,35296.76443,TRUE
+Paraguay,116,98484.54468,TRUE
+Paraguay,234,8162.890747,TRUE
+Paraguay,88,138218.959,TRUE
+Paraguay,227,9358.848173,TRUE
+Paraguay,8,21599.0332,TRUE
+Paraguay,115,186672.4488,TRUE
+Paraguay,146,28645.96233,TRUE
+Paraguay,257,14862.84549,TRUE
+Paraguay,39,10075.63454,TRUE
+Paraguay,61,218943.5096,TRUE
+Paraguay,76,100326.9844,TRUE
+Paraguay,268,27005.25,TRUE
+Paraguay,194,9390.783666,TRUE
+Paraguay,198,5299.135169,TRUE
+Paraguay,245,11957.75,TRUE
+Paraguay,86,15341.61704,TRUE
+Paraguay,247,27947.125,TRUE
+Paraguay,15,5922.875,TRUE
+Paraguay,135,5719.346191,TRUE
+Paraguay,65,4252.65625,TRUE
+Paraguay,70,8796.273438,TRUE
+Paraguay,314,4472.643433,TRUE
+Paraguay,133,6124.625,TRUE
+Paraguay,240,4373.4375,TRUE
+Paraguay,148,23186,TRUE
+Paraguay,31,5157,TRUE
+Peru,4,20977.52128,TRUE
+Peru,5,7794,FALSE
+Peru,7,162008,FALSE
+Peru,8,22907,FALSE
+Peru,17,15065,FALSE
+Peru,105,51013,FALSE
+Peru,120,246891,FALSE
+Peru,161,8299,FALSE
+Peru,169,32477,FALSE
+Peru,179,170978,FALSE
+Peru,180,7520.279265,TRUE
+Peru,203,32805,FALSE
+Peru,205,390012,FALSE
+Peru,208,159063,FALSE
+Peru,219,91222,FALSE
+Peru,221,78126,FALSE
+Peru,229,16244.65912,TRUE
+Peru,231,51635,FALSE
+Peru,235,141626,FALSE
+Peru,254,75453,FALSE
+Peru,84,25061,FALSE
+Peru,267,7640,FALSE
+Peru,282,423220.8453,TRUE
+Peru,286,1121202,FALSE
+Peru,289,9979.922823,TRUE
+Peru,316,43631,FALSE
+Peru,317,242721,FALSE
+Peru,318,15027,FALSE
+Peru,18,11401,FALSE
+Peru,19,30398,FALSE
+Peru,33,13340,FALSE
+Peru,40,148441,FALSE
+Peru,49,226133,FALSE
+Peru,54,120020,FALSE
+Peru,58,65693,FALSE
+Peru,59,50704,FALSE
+Peru,63,57427,FALSE
+Peru,90,230324,FALSE
+Peru,94,25578,FALSE
+Peru,101,120333,FALSE
+Peru,112,101582,FALSE
+Peru,138,17125.18189,TRUE
+Peru,152,182496,FALSE
+Peru,154,110085,FALSE
+Peru,158,109121,FALSE
+Peru,200,13199,FALSE
+Peru,202,85300.04797,TRUE
+Peru,206,183393.7134,TRUE
+Peru,218,35382,FALSE
+Peru,238,244573,FALSE
+Peru,243,86305,FALSE
+Peru,259,10309,FALSE
+Peru,276,17340,FALSE
+Peru,279,176358,FALSE
+Peru,298,275370,FALSE
+Peru,305,31441,FALSE
+Peru,306,383677,FALSE
+Peru,11,178582,FALSE
+Peru,16,348392,FALSE
+Peru,48,27222.34375,TRUE
+Peru,60,11389,FALSE
+Peru,63,57427,FALSE
+Peru,121,81939,FALSE
+Peru,128,17065,FALSE
+Peru,156,8830,FALSE
+Peru,217,10416,FALSE
+Peru,248,14225.32829,TRUE
+Peru,270,38082,FALSE
+Peru,52,119284,FALSE
+Peru,74,8594,FALSE
+Peru,75,137966,FALSE
+Peru,80,89825,FALSE
+Peru,301,113987.8459,TRUE
+Peru,319,89190.44102,TRUE
+Peru,51,47756,FALSE
+Peru,53,6581.96824,TRUE
+Peru,77,7234,FALSE
+Peru,213,144220,FALSE
+Peru,228,309939,FALSE
+Peru,269,15171.62496,TRUE
+Peru,296,178104,FALSE
+Peru,175,163567,FALSE
+Peru,12,118343,FALSE
+Peru,13,120248,FALSE
+Peru,108,12577.92841,TRUE
+Peru,165,12613,FALSE
+Peru,215,137436,FALSE
+Peru,261,8946.089355,TRUE
+Peru,281,200701,FALSE
+Peru,302,15901,FALSE
+Peru,310,36133,TRUE
+Peru,106,13595.99028,TRUE
+Peru,30,25575,FALSE
+Peru,91,126485.3041,TRUE
+Peru,192,3780098.195,TRUE
+Peru,249,70032.42373,TRUE
+Peru,308,35296.76443,TRUE
+Peru,116,98484.54468,TRUE
+Peru,234,8162.890747,TRUE
+Peru,88,138218.959,TRUE
+Peru,227,9358.848173,TRUE
+Peru,8,22907,FALSE
+Peru,115,72971,FALSE
+Peru,146,15321,FALSE
+Peru,257,14862.84549,TRUE
+Peru,39,10075.63454,TRUE
+Peru,61,218943.5096,TRUE
+Peru,76,80712,FALSE
+Peru,268,27005.25,TRUE
+Peru,194,9390.783666,TRUE
+Peru,198,5299.135169,TRUE
+Peru,245,12343,FALSE
+Peru,86,13979,FALSE
+Peru,247,27947.125,TRUE
+Peru,15,5922.875,TRUE
+Peru,135,5719.346191,TRUE
+Peru,65,4252.65625,TRUE
+Peru,70,8796.273438,TRUE
+Peru,314,4472.643433,TRUE
+Peru,133,6124.625,TRUE
+Peru,240,4373.4375,TRUE
+Peru,148,23186,TRUE
+Peru,31,5157,FALSE
+Philippines,4,20977.52128,TRUE
+Philippines,5,7484.490489,TRUE
+Philippines,7,111437.9893,TRUE
+Philippines,8,47030.54376,TRUE
+Philippines,17,33099.94094,TRUE
+Philippines,105,149702.6633,TRUE
+Philippines,120,4466,FALSE
+Philippines,161,8730.264786,TRUE
+Philippines,169,29056,FALSE
+Philippines,179,79481,FALSE
+Philippines,180,7520.279265,TRUE
+Philippines,203,26179.47154,TRUE
+Philippines,205,94392,FALSE
+Philippines,208,20645,FALSE
+Philippines,219,80605.62094,TRUE
+Philippines,221,53059.48552,TRUE
+Philippines,229,16244.65912,TRUE
+Philippines,231,60255.26389,TRUE
+Philippines,235,150812,FALSE
+Philippines,254,38690,FALSE
+Philippines,84,11765,FALSE
+Philippines,267,9372.487582,TRUE
+Philippines,282,423220.8453,TRUE
+Philippines,286,545485,FALSE
+Philippines,289,9979.922823,TRUE
+Philippines,316,72255.87156,TRUE
+Philippines,317,203163,FALSE
+Philippines,318,32261.2753,TRUE
+Philippines,18,8232,FALSE
+Philippines,19,45960,FALSE
+Philippines,33,30270.38924,TRUE
+Philippines,40,153507,FALSE
+Philippines,49,134722,FALSE
+Philippines,54,107272,FALSE
+Philippines,58,74040.89691,TRUE
+Philippines,59,22326.21725,TRUE
+Philippines,63,44257,FALSE
+Philippines,90,69529,FALSE
+Philippines,94,61002.28577,TRUE
+Philippines,101,111999,FALSE
+Philippines,112,28215,FALSE
+Philippines,138,17125.18189,TRUE
+Philippines,152,59577,FALSE
+Philippines,154,18672,FALSE
+Philippines,158,79236,FALSE
+Philippines,200,22918.25267,TRUE
+Philippines,202,82775,FALSE
+Philippines,206,49345,FALSE
+Philippines,218,31360,FALSE
+Philippines,238,145582,FALSE
+Philippines,243,112174.5654,TRUE
+Philippines,259,55616.6005,TRUE
+Philippines,276,11002,FALSE
+Philippines,279,22042,FALSE
+Philippines,298,15141,FALSE
+Philippines,305,16806,FALSE
+Philippines,306,130094,FALSE
+Philippines,11,178064.2799,TRUE
+Philippines,16,127653,FALSE
+Philippines,48,27222.34375,TRUE
+Philippines,60,22383.25858,TRUE
+Philippines,63,44257,FALSE
+Philippines,121,57058,FALSE
+Philippines,128,11870,FALSE
+Philippines,156,10200.29705,TRUE
+Philippines,217,12377,FALSE
+Philippines,248,14225.32829,TRUE
+Philippines,270,50423,FALSE
+Philippines,52,125130,FALSE
+Philippines,74,4227,FALSE
+Philippines,75,38779,FALSE
+Philippines,80,49992.57574,TRUE
+Philippines,301,71035,FALSE
+Philippines,319,57204,FALSE
+Philippines,51,75521,FALSE
+Philippines,53,5910,FALSE
+Philippines,77,5993,FALSE
+Philippines,213,73171,FALSE
+Philippines,228,400536,FALSE
+Philippines,269,15171.62496,TRUE
+Philippines,296,62473,FALSE
+Philippines,175,42207,FALSE
+Philippines,12,94865,FALSE
+Philippines,13,37732,FALSE
+Philippines,108,12577.92841,TRUE
+Philippines,165,14797.07017,TRUE
+Philippines,215,207385,FALSE
+Philippines,261,8946.089355,TRUE
+Philippines,281,63262,FALSE
+Philippines,302,27087.34387,TRUE
+Philippines,310,36133,TRUE
+Philippines,106,13595.99028,TRUE
+Philippines,30,62885.73079,TRUE
+Philippines,91,126485.3041,TRUE
+Philippines,192,3780098.195,TRUE
+Philippines,249,70032.42373,TRUE
+Philippines,308,35296.76443,TRUE
+Philippines,116,98484.54468,TRUE
+Philippines,234,8162.890747,TRUE
+Philippines,88,138218.959,TRUE
+Philippines,227,16838,FALSE
+Philippines,8,21599.0332,TRUE
+Philippines,115,69913,FALSE
+Philippines,146,28645.96233,TRUE
+Philippines,257,16816,FALSE
+Philippines,39,10075.63454,TRUE
+Philippines,61,90300,FALSE
+Philippines,76,100326.9844,TRUE
+Philippines,268,27005.25,TRUE
+Philippines,194,9390.783666,TRUE
+Philippines,198,5299.135169,TRUE
+Philippines,245,11957.75,TRUE
+Philippines,86,18444,FALSE
+Philippines,247,27947.125,TRUE
+Philippines,15,5922.875,TRUE
+Philippines,135,5719.346191,TRUE
+Philippines,65,4252.65625,TRUE
+Philippines,70,8796.273438,TRUE
+Philippines,314,4472.643433,TRUE
+Philippines,133,4820,FALSE
+Philippines,240,4373.4375,TRUE
+Philippines,148,23186,TRUE
+Philippines,31,5157,TRUE
+Poland,4,20977.52128,TRUE
+Poland,5,7484.490489,TRUE
+Poland,7,203398,FALSE
+Poland,8,28506,FALSE
+Poland,17,37155,FALSE
+Poland,105,149702.6633,TRUE
+Poland,120,115713.1489,TRUE
+Poland,161,11113,FALSE
+Poland,169,72940,FALSE
+Poland,179,121608.9919,TRUE
+Poland,180,16818,FALSE
+Poland,203,26179.47154,TRUE
+Poland,205,245348,FALSE
+Poland,208,84004.18102,TRUE
+Poland,219,45281,FALSE
+Poland,221,104207,FALSE
+Poland,229,16244.65912,TRUE
+Poland,231,75488,FALSE
+Poland,235,284720,FALSE
+Poland,254,26952.37295,TRUE
+Poland,84,9355.713607,TRUE
+Poland,267,9372.487582,TRUE
+Poland,282,657861,FALSE
+Poland,286,760050.6713,TRUE
+Poland,289,17193,FALSE
+Poland,316,25749,FALSE
+Poland,317,188762.6372,TRUE
+Poland,318,45418,FALSE
+Poland,18,26753,FALSE
+Poland,19,257410,FALSE
+Poland,33,14070,FALSE
+Poland,40,453137,FALSE
+Poland,49,368479,FALSE
+Poland,54,223377,FALSE
+Poland,58,55827,FALSE
+Poland,59,22326.21725,TRUE
+Poland,63,234336.5313,TRUE
+Poland,90,363749,FALSE
+Poland,94,61002.28577,TRUE
+Poland,101,138512.4356,TRUE
+Poland,112,122104.9439,TRUE
+Poland,138,15897,FALSE
+Poland,152,180699,FALSE
+Poland,154,96782.90416,TRUE
+Poland,158,197758,FALSE
+Poland,200,28420,FALSE
+Poland,202,85300.04797,TRUE
+Poland,206,183393.7134,TRUE
+Poland,218,51871,FALSE
+Poland,238,355986,FALSE
+Poland,243,112174.5654,TRUE
+Poland,259,28905,FALSE
+Poland,276,19622,FALSE
+Poland,279,177754.1672,TRUE
+Poland,298,120463.1286,TRUE
+Poland,305,25295,FALSE
+Poland,306,771403,FALSE
+Poland,11,178064.2799,TRUE
+Poland,16,74389.59543,TRUE
+Poland,48,27222.34375,TRUE
+Poland,60,22383.25858,TRUE
+Poland,63,11715.28525,TRUE
+Poland,121,115777.4722,TRUE
+Poland,128,9353.124815,TRUE
+Poland,156,10200.29705,TRUE
+Poland,217,25453,FALSE
+Poland,248,26837,FALSE
+Poland,270,9151.63574,TRUE
+Poland,52,72720.10141,TRUE
+Poland,74,4541.36112,TRUE
+Poland,75,47178.96176,TRUE
+Poland,80,113555,FALSE
+Poland,301,113987.8459,TRUE
+Poland,319,89190.44102,TRUE
+Poland,51,26504.47085,TRUE
+Poland,53,6581.96824,TRUE
+Poland,77,5993.147024,TRUE
+Poland,213,124295.9159,TRUE
+Poland,228,133880.2683,TRUE
+Poland,269,15171.62496,TRUE
+Poland,296,43692.55808,TRUE
+Poland,175,70802.39066,TRUE
+Poland,12,124120,FALSE
+Poland,13,74728.86082,TRUE
+Poland,108,3086,FALSE
+Poland,165,15857,FALSE
+Poland,215,105585.0293,TRUE
+Poland,261,8946.089355,TRUE
+Poland,281,38927,FALSE
+Poland,302,27087.34387,TRUE
+Poland,310,36133,TRUE
+Poland,106,14847,FALSE
+Poland,30,29214,FALSE
+Poland,91,37598,FALSE
+Poland,192,3780098.195,TRUE
+Poland,249,44076,FALSE
+Poland,308,36355,FALSE
+Poland,116,52361,FALSE
+Poland,234,8162.890747,TRUE
+Poland,88,138218.959,TRUE
+Poland,227,9358.848173,TRUE
+Poland,8,28506,FALSE
+Poland,115,186672.4488,TRUE
+Poland,146,28645.96233,TRUE
+Poland,257,14862.84549,TRUE
+Poland,39,14439,FALSE
+Poland,61,236703,FALSE
+Poland,76,100326.9844,TRUE
+Poland,268,27005.25,TRUE
+Poland,194,9390.783666,TRUE
+Poland,198,5299.135169,TRUE
+Poland,245,11957.75,TRUE
+Poland,86,15341.61704,TRUE
+Poland,247,27947.125,TRUE
+Poland,15,5922.875,TRUE
+Poland,135,4722,FALSE
+Poland,65,4252.65625,TRUE
+Poland,70,8796.273438,TRUE
+Poland,314,4472.643433,TRUE
+Poland,133,6124.625,TRUE
+Poland,240,4373.4375,TRUE
+Poland,148,23186,TRUE
+Poland,31,5157,TRUE
+Portugal,4,2769,FALSE
+Portugal,5,7484.490489,TRUE
+Portugal,7,167797,FALSE
+Portugal,8,54186,FALSE
+Portugal,17,22605,FALSE
+Portugal,105,7704,FALSE
+Portugal,120,44229,FALSE
+Portugal,161,8730.264786,TRUE
+Portugal,169,80194,FALSE
+Portugal,179,274674,FALSE
+Portugal,180,7520.279265,TRUE
+Portugal,203,17394,FALSE
+Portugal,205,244980,FALSE
+Portugal,208,177857,FALSE
+Portugal,219,83541,FALSE
+Portugal,221,113794,FALSE
+Portugal,229,16244.65912,TRUE
+Portugal,231,144897,FALSE
+Portugal,235,191404,FALSE
+Portugal,254,58077,FALSE
+Portugal,84,9355.713607,TRUE
+Portugal,267,9372.487582,TRUE
+Portugal,282,616132,FALSE
+Portugal,286,882744,FALSE
+Portugal,289,14406,FALSE
+Portugal,316,13017,FALSE
+Portugal,317,286087,FALSE
+Portugal,318,23565,FALSE
+Portugal,18,5683,FALSE
+Portugal,19,182437,FALSE
+Portugal,33,92297,FALSE
+Portugal,40,285037,FALSE
+Portugal,49,421303,FALSE
+Portugal,54,142266,FALSE
+Portugal,58,11594,FALSE
+Portugal,59,7498,FALSE
+Portugal,63,138128,FALSE
+Portugal,90,504465,FALSE
+Portugal,94,61002.28577,TRUE
+Portugal,101,443355,FALSE
+Portugal,112,172500,FALSE
+Portugal,138,16553,FALSE
+Portugal,152,119704.6269,TRUE
+Portugal,154,157070,FALSE
+Portugal,158,238368,FALSE
+Portugal,200,15509,FALSE
+Portugal,202,85300.04797,TRUE
+Portugal,206,359532,FALSE
+Portugal,218,145531,FALSE
+Portugal,238,186014,FALSE
+Portugal,243,76103,FALSE
+Portugal,259,9027,FALSE
+Portugal,276,10950.60863,TRUE
+Portugal,279,93437,FALSE
+Portugal,298,155608,FALSE
+Portugal,305,24277,FALSE
+Portugal,306,812247,FALSE
+Portugal,11,178064.2799,TRUE
+Portugal,16,251912,FALSE
+Portugal,48,30281,FALSE
+Portugal,60,7436,FALSE
+Portugal,63,138128,FALSE
+Portugal,121,109048,FALSE
+Portugal,128,9353.124815,TRUE
+Portugal,156,10200.29705,TRUE
+Portugal,217,21196.4891,TRUE
+Portugal,248,14225.32829,TRUE
+Portugal,270,9151.63574,TRUE
+Portugal,52,72720.10141,TRUE
+Portugal,74,4541.36112,TRUE
+Portugal,75,47178.96176,TRUE
+Portugal,80,49992.57574,TRUE
+Portugal,301,113987.8459,TRUE
+Portugal,319,176307,FALSE
+Portugal,51,26504.47085,TRUE
+Portugal,53,6581.96824,TRUE
+Portugal,77,5993.147024,TRUE
+Portugal,213,124295.9159,TRUE
+Portugal,228,169153,FALSE
+Portugal,269,15171.62496,TRUE
+Portugal,296,217984,FALSE
+Portugal,175,70802.39066,TRUE
+Portugal,12,36715.19395,TRUE
+Portugal,13,74728.86082,TRUE
+Portugal,108,12577.92841,TRUE
+Portugal,165,10134,FALSE
+Portugal,215,105585.0293,TRUE
+Portugal,261,8946.089355,TRUE
+Portugal,281,329256,FALSE
+Portugal,302,42887,FALSE
+Portugal,310,36133,TRUE
+Portugal,106,8316,FALSE
+Portugal,30,62885.73079,TRUE
+Portugal,91,126485.3041,TRUE
+Portugal,192,3780098.195,TRUE
+Portugal,249,70032.42373,TRUE
+Portugal,308,19051,FALSE
+Portugal,116,98484.54468,TRUE
+Portugal,234,8162.890747,TRUE
+Portugal,88,138218.959,TRUE
+Portugal,227,9358.848173,TRUE
+Portugal,8,54186,FALSE
+Portugal,115,186672.4488,TRUE
+Portugal,146,28645.96233,TRUE
+Portugal,257,14862.84549,TRUE
+Portugal,39,10075.63454,TRUE
+Portugal,61,218943.5096,TRUE
+Portugal,76,100326.9844,TRUE
+Portugal,268,27005.25,TRUE
+Portugal,194,9390.783666,TRUE
+Portugal,198,5299.135169,TRUE
+Portugal,245,11957.75,TRUE
+Portugal,86,15341.61704,TRUE
+Portugal,247,27947.125,TRUE
+Portugal,15,5922.875,TRUE
+Portugal,135,5719.346191,TRUE
+Portugal,65,4252.65625,TRUE
+Portugal,70,8796.273438,TRUE
+Portugal,314,4472.643433,TRUE
+Portugal,133,6124.625,TRUE
+Portugal,240,4373.4375,TRUE
+Portugal,148,23186,TRUE
+Portugal,31,5157,TRUE
+Puerto Rico,4,20977.52128,TRUE
+Puerto Rico,5,7484.490489,TRUE
+Puerto Rico,7,111437.9893,TRUE
+Puerto Rico,8,47030.54376,TRUE
+Puerto Rico,17,33099.94094,TRUE
+Puerto Rico,105,149702.6633,TRUE
+Puerto Rico,120,115713.1489,TRUE
+Puerto Rico,161,8730.264786,TRUE
+Puerto Rico,169,31008,FALSE
+Puerto Rico,179,99157,FALSE
+Puerto Rico,180,7520.279265,TRUE
+Puerto Rico,203,26179.47154,TRUE
+Puerto Rico,205,158255.8483,TRUE
+Puerto Rico,208,78559,FALSE
+Puerto Rico,219,80605.62094,TRUE
+Puerto Rico,221,53059.48552,TRUE
+Puerto Rico,229,16244.65912,TRUE
+Puerto Rico,231,60255.26389,TRUE
+Puerto Rico,235,172280.9273,TRUE
+Puerto Rico,254,33724,FALSE
+Puerto Rico,84,9355.713607,TRUE
+Puerto Rico,267,9372.487582,TRUE
+Puerto Rico,282,423220.8453,TRUE
+Puerto Rico,286,760050.6713,TRUE
+Puerto Rico,289,9979.922823,TRUE
+Puerto Rico,316,72255.87156,TRUE
+Puerto Rico,317,276906,FALSE
+Puerto Rico,318,32261.2753,TRUE
+Puerto Rico,18,11691,FALSE
+Puerto Rico,19,21937,FALSE
+Puerto Rico,33,30270.38924,TRUE
+Puerto Rico,40,249160,FALSE
+Puerto Rico,49,247408.5214,TRUE
+Puerto Rico,54,175365.1249,TRUE
+Puerto Rico,58,74040.89691,TRUE
+Puerto Rico,59,22326.21725,TRUE
+Puerto Rico,63,137183,FALSE
+Puerto Rico,90,200407,FALSE
+Puerto Rico,94,61002.28577,TRUE
+Puerto Rico,101,162210,FALSE
+Puerto Rico,112,122104.9439,TRUE
+Puerto Rico,138,17125.18189,TRUE
+Puerto Rico,152,119704.6269,TRUE
+Puerto Rico,154,24187,FALSE
+Puerto Rico,158,784847,FALSE
+Puerto Rico,200,22918.25267,TRUE
+Puerto Rico,202,78047,FALSE
+Puerto Rico,206,299782,FALSE
+Puerto Rico,218,52990.31222,TRUE
+Puerto Rico,238,166836,FALSE
+Puerto Rico,243,112174.5654,TRUE
+Puerto Rico,259,55616.6005,TRUE
+Puerto Rico,276,10950.60863,TRUE
+Puerto Rico,279,177754.1672,TRUE
+Puerto Rico,298,120463.1286,TRUE
+Puerto Rico,305,10260,FALSE
+Puerto Rico,306,556508,FALSE
+Puerto Rico,11,178064.2799,TRUE
+Puerto Rico,16,486913,FALSE
+Puerto Rico,48,27222.34375,TRUE
+Puerto Rico,60,22383.25858,TRUE
+Puerto Rico,63,137183,FALSE
+Puerto Rico,121,308255,FALSE
+Puerto Rico,128,9353.124815,TRUE
+Puerto Rico,156,10200.29705,TRUE
+Puerto Rico,217,21196.4891,TRUE
+Puerto Rico,248,14225.32829,TRUE
+Puerto Rico,270,9151.63574,TRUE
+Puerto Rico,52,62760,FALSE
+Puerto Rico,74,4541.36112,TRUE
+Puerto Rico,75,53826,FALSE
+Puerto Rico,80,8949,FALSE
+Puerto Rico,301,113987.8459,TRUE
+Puerto Rico,319,90276,FALSE
+Puerto Rico,51,26504.47085,TRUE
+Puerto Rico,53,6581.96824,TRUE
+Puerto Rico,77,5317,FALSE
+Puerto Rico,213,124295.9159,TRUE
+Puerto Rico,228,328559,FALSE
+Puerto Rico,269,15171.62496,TRUE
+Puerto Rico,296,91153,FALSE
+Puerto Rico,175,163307,FALSE
+Puerto Rico,12,36715.19395,TRUE
+Puerto Rico,13,26335,FALSE
+Puerto Rico,108,12577.92841,TRUE
+Puerto Rico,165,14797.07017,TRUE
+Puerto Rico,215,323387,FALSE
+Puerto Rico,261,8946.089355,TRUE
+Puerto Rico,281,136069.2843,TRUE
+Puerto Rico,302,27087.34387,TRUE
+Puerto Rico,310,36133,TRUE
+Puerto Rico,106,13595.99028,TRUE
+Puerto Rico,30,62885.73079,TRUE
+Puerto Rico,91,126485.3041,TRUE
+Puerto Rico,192,3780098.195,TRUE
+Puerto Rico,249,70032.42373,TRUE
+Puerto Rico,308,35296.76443,TRUE
+Puerto Rico,116,98484.54468,TRUE
+Puerto Rico,234,8162.890747,TRUE
+Puerto Rico,88,138218.959,TRUE
+Puerto Rico,227,19617,FALSE
+Puerto Rico,8,21599.0332,TRUE
+Puerto Rico,115,78137,FALSE
+Puerto Rico,146,28645.96233,TRUE
+Puerto Rico,257,14862.84549,TRUE
+Puerto Rico,39,10075.63454,TRUE
+Puerto Rico,61,196186,FALSE
+Puerto Rico,76,48353,FALSE
+Puerto Rico,268,27005.25,TRUE
+Puerto Rico,194,9390.783666,TRUE
+Puerto Rico,198,5299.135169,TRUE
+Puerto Rico,245,11957.75,TRUE
+Puerto Rico,86,15341.61704,TRUE
+Puerto Rico,247,27947.125,TRUE
+Puerto Rico,15,5922.875,TRUE
+Puerto Rico,135,5719.346191,TRUE
+Puerto Rico,65,4252.65625,TRUE
+Puerto Rico,70,8796.273438,TRUE
+Puerto Rico,314,4472.643433,TRUE
+Puerto Rico,133,6124.625,TRUE
+Puerto Rico,240,4373.4375,TRUE
+Puerto Rico,148,23186,TRUE
+Puerto Rico,31,5157,TRUE
+Qatar,4,20977.52128,TRUE
+Qatar,5,7484.490489,TRUE
+Qatar,7,111437.9893,TRUE
+Qatar,8,47030.54376,TRUE
+Qatar,17,29996,FALSE
+Qatar,105,30000,FALSE
+Qatar,120,32857,FALSE
+Qatar,161,8730.264786,TRUE
+Qatar,169,125011,FALSE
+Qatar,179,80011,FALSE
+Qatar,180,7520.279265,TRUE
+Qatar,203,26179.47154,TRUE
+Qatar,205,217714,FALSE
+Qatar,208,84004.18102,TRUE
+Qatar,219,80605.62094,TRUE
+Qatar,221,53059.48552,TRUE
+Qatar,229,16244.65912,TRUE
+Qatar,231,60255.26389,TRUE
+Qatar,235,100580,FALSE
+Qatar,254,26952.37295,TRUE
+Qatar,84,9355.713607,TRUE
+Qatar,267,9372.487582,TRUE
+Qatar,282,423220.8453,TRUE
+Qatar,286,760050.6713,TRUE
+Qatar,289,9979.922823,TRUE
+Qatar,316,72255.87156,TRUE
+Qatar,317,94833,FALSE
+Qatar,318,22963,FALSE
+Qatar,18,11273.75269,TRUE
+Qatar,19,134730,FALSE
+Qatar,33,30270.38924,TRUE
+Qatar,40,149940,FALSE
+Qatar,49,119857,FALSE
+Qatar,54,120005,FALSE
+Qatar,58,74040.89691,TRUE
+Qatar,59,22326.21725,TRUE
+Qatar,63,50040,FALSE
+Qatar,90,149767,FALSE
+Qatar,94,119998,FALSE
+Qatar,101,250090,FALSE
+Qatar,112,122104.9439,TRUE
+Qatar,138,17125.18189,TRUE
+Qatar,152,119704.6269,TRUE
+Qatar,154,96782.90416,TRUE
+Qatar,158,130210,FALSE
+Qatar,200,22918.25267,TRUE
+Qatar,202,47115,FALSE
+Qatar,206,183393.7134,TRUE
+Qatar,218,52990.31222,TRUE
+Qatar,238,220059,FALSE
+Qatar,243,112174.5654,TRUE
+Qatar,259,55616.6005,TRUE
+Qatar,276,10950.60863,TRUE
+Qatar,279,100370,FALSE
+Qatar,298,120463.1286,TRUE
+Qatar,305,15590.0347,TRUE
+Qatar,306,454970,FALSE
+Qatar,11,178064.2799,TRUE
+Qatar,16,74389.59543,TRUE
+Qatar,48,27222.34375,TRUE
+Qatar,60,22383.25858,TRUE
+Qatar,63,50040,FALSE
+Qatar,121,115777.4722,TRUE
+Qatar,128,9353.124815,TRUE
+Qatar,156,10200.29705,TRUE
+Qatar,217,21196.4891,TRUE
+Qatar,248,14225.32829,TRUE
+Qatar,270,9151.63574,TRUE
+Qatar,52,72720.10141,TRUE
+Qatar,74,4541.36112,TRUE
+Qatar,75,47178.96176,TRUE
+Qatar,80,122961,FALSE
+Qatar,301,113987.8459,TRUE
+Qatar,319,89190.44102,TRUE
+Qatar,51,26504.47085,TRUE
+Qatar,53,6581.96824,TRUE
+Qatar,77,5993.147024,TRUE
+Qatar,213,124295.9159,TRUE
+Qatar,228,133880.2683,TRUE
+Qatar,269,15171.62496,TRUE
+Qatar,296,43692.55808,TRUE
+Qatar,175,70802.39066,TRUE
+Qatar,12,36715.19395,TRUE
+Qatar,13,74728.86082,TRUE
+Qatar,108,12577.92841,TRUE
+Qatar,165,14797.07017,TRUE
+Qatar,215,105585.0293,TRUE
+Qatar,261,8946.089355,TRUE
+Qatar,281,136069.2843,TRUE
+Qatar,302,27087.34387,TRUE
+Qatar,310,36133,TRUE
+Qatar,106,13595.99028,TRUE
+Qatar,30,62885.73079,TRUE
+Qatar,91,126485.3041,TRUE
+Qatar,192,3780098.195,TRUE
+Qatar,249,70032.42373,TRUE
+Qatar,308,35296.76443,TRUE
+Qatar,116,98484.54468,TRUE
+Qatar,234,8162.890747,TRUE
+Qatar,88,138218.959,TRUE
+Qatar,227,9358.848173,TRUE
+Qatar,8,21599.0332,TRUE
+Qatar,115,186672.4488,TRUE
+Qatar,146,28645.96233,TRUE
+Qatar,257,14862.84549,TRUE
+Qatar,39,10075.63454,TRUE
+Qatar,61,95431,FALSE
+Qatar,76,100326.9844,TRUE
+Qatar,268,27005.25,TRUE
+Qatar,194,9390.783666,TRUE
+Qatar,198,5299.135169,TRUE
+Qatar,245,11957.75,TRUE
+Qatar,86,15341.61704,TRUE
+Qatar,247,27947.125,TRUE
+Qatar,15,5922.875,TRUE
+Qatar,135,5719.346191,TRUE
+Qatar,65,4252.65625,TRUE
+Qatar,70,8796.273438,TRUE
+Qatar,314,4472.643433,TRUE
+Qatar,133,6124.625,TRUE
+Qatar,240,4373.4375,TRUE
+Qatar,148,23186,TRUE
+Qatar,31,5157,TRUE
+Republic of Korea,4,20977.52128,TRUE
+Republic of Korea,5,7484.490489,TRUE
+Republic of Korea,7,173084,FALSE
+Republic of Korea,8,47030.54376,TRUE
+Republic of Korea,17,20172,FALSE
+Republic of Korea,105,149702.6633,TRUE
+Republic of Korea,120,170772,FALSE
+Republic of Korea,161,8730.264786,TRUE
+Republic of Korea,169,50539,FALSE
+Republic of Korea,179,306664,FALSE
+Republic of Korea,180,12211,FALSE
+Republic of Korea,203,26179.47154,TRUE
+Republic of Korea,205,652769,FALSE
+Republic of Korea,208,84004.18102,TRUE
+Republic of Korea,219,142922,FALSE
+Republic of Korea,221,213198,FALSE
+Republic of Korea,229,16244.65912,TRUE
+Republic of Korea,231,116577,FALSE
+Republic of Korea,235,262718,FALSE
+Republic of Korea,254,72228,FALSE
+Republic of Korea,84,9911,FALSE
+Republic of Korea,267,4996,FALSE
+Republic of Korea,282,423220.8453,TRUE
+Republic of Korea,286,760050.6713,TRUE
+Republic of Korea,289,9979.922823,TRUE
+Republic of Korea,316,19916,FALSE
+Republic of Korea,317,427817,FALSE
+Republic of Korea,318,30671,FALSE
+Republic of Korea,18,10860,FALSE
+Republic of Korea,19,77366.60983,TRUE
+Republic of Korea,33,30270.38924,TRUE
+Republic of Korea,40,730141,FALSE
+Republic of Korea,49,394037,FALSE
+Republic of Korea,54,99620,FALSE
+Republic of Korea,58,74040.89691,TRUE
+Republic of Korea,59,17231,FALSE
+Republic of Korea,63,70890,FALSE
+Republic of Korea,90,661990,FALSE
+Republic of Korea,94,61002.28577,TRUE
+Republic of Korea,101,170885,FALSE
+Republic of Korea,112,132737,FALSE
+Republic of Korea,138,67562,FALSE
+Republic of Korea,152,477468,FALSE
+Republic of Korea,154,96782.90416,TRUE
+Republic of Korea,158,249049,FALSE
+Republic of Korea,200,22918.25267,TRUE
+Republic of Korea,202,85300.04797,TRUE
+Republic of Korea,206,262674,FALSE
+Republic of Korea,218,52990.31222,TRUE
+Republic of Korea,238,340268,FALSE
+Republic of Korea,243,112174.5654,TRUE
+Republic of Korea,259,19808,FALSE
+Republic of Korea,276,15393,FALSE
+Republic of Korea,279,147504,FALSE
+Republic of Korea,298,322486,FALSE
+Republic of Korea,305,24693,FALSE
+Republic of Korea,306,654762,FALSE
+Republic of Korea,11,178064.2799,TRUE
+Republic of Korea,16,74389.59543,TRUE
+Republic of Korea,48,27222.34375,TRUE
+Republic of Korea,60,22383.25858,TRUE
+Republic of Korea,63,70890,FALSE
+Republic of Korea,121,115777.4722,TRUE
+Republic of Korea,128,26293,FALSE
+Republic of Korea,156,10200.29705,TRUE
+Republic of Korea,217,13992,FALSE
+Republic of Korea,248,9822,FALSE
+Republic of Korea,270,16294,FALSE
+Republic of Korea,52,72720.10141,TRUE
+Republic of Korea,74,4541.36112,TRUE
+Republic of Korea,75,47178.96176,TRUE
+Republic of Korea,80,49992.57574,TRUE
+Republic of Korea,301,113987.8459,TRUE
+Republic of Korea,319,89190.44102,TRUE
+Republic of Korea,51,26504.47085,TRUE
+Republic of Korea,53,10000,FALSE
+Republic of Korea,77,5993.147024,TRUE
+Republic of Korea,213,124295.9159,TRUE
+Republic of Korea,228,313484,FALSE
+Republic of Korea,269,15171.62496,TRUE
+Republic of Korea,296,145126,FALSE
+Republic of Korea,175,70802.39066,TRUE
+Republic of Korea,12,36715.19395,TRUE
+Republic of Korea,13,74728.86082,TRUE
+Republic of Korea,108,12577.92841,TRUE
+Republic of Korea,165,14797.07017,TRUE
+Republic of Korea,215,105585.0293,TRUE
+Republic of Korea,261,8946.089355,TRUE
+Republic of Korea,281,309060,FALSE
+Republic of Korea,302,11211,FALSE
+Republic of Korea,310,36133,TRUE
+Republic of Korea,106,13595.99028,TRUE
+Republic of Korea,30,62885.73079,TRUE
+Republic of Korea,91,126485.3041,TRUE
+Republic of Korea,192,1309865,FALSE
+Republic of Korea,249,70032.42373,TRUE
+Republic of Korea,308,35296.76443,TRUE
+Republic of Korea,116,98484.54468,TRUE
+Republic of Korea,234,8162.890747,TRUE
+Republic of Korea,88,138218.959,TRUE
+Republic of Korea,227,9358.848173,TRUE
+Republic of Korea,8,21599.0332,TRUE
+Republic of Korea,115,27809,FALSE
+Republic of Korea,146,28645.96233,TRUE
+Republic of Korea,257,14862.84549,TRUE
+Republic of Korea,39,9398,FALSE
+Republic of Korea,61,218943.5096,TRUE
+Republic of Korea,76,100326.9844,TRUE
+Republic of Korea,268,27005.25,TRUE
+Republic of Korea,194,9390.783666,TRUE
+Republic of Korea,198,5299.135169,TRUE
+Republic of Korea,245,11957.75,TRUE
+Republic of Korea,86,15341.61704,TRUE
+Republic of Korea,247,27947.125,TRUE
+Republic of Korea,15,5922.875,TRUE
+Republic of Korea,135,5719.346191,TRUE
+Republic of Korea,65,4252.65625,TRUE
+Republic of Korea,70,8796.273438,TRUE
+Republic of Korea,314,4472.643433,TRUE
+Republic of Korea,133,6124.625,TRUE
+Republic of Korea,240,4373.4375,TRUE
+Republic of Korea,148,23186,TRUE
+Republic of Korea,31,5157,TRUE
+Republic of Moldova,4,18576,FALSE
+Republic of Moldova,5,7484.490489,TRUE
+Republic of Moldova,7,78501,FALSE
+Republic of Moldova,8,67418,FALSE
+Republic of Moldova,17,30903,FALSE
+Republic of Moldova,105,149702.6633,TRUE
+Republic of Moldova,120,47683,FALSE
+Republic of Moldova,161,8730.264786,TRUE
+Republic of Moldova,169,29881,FALSE
+Republic of Moldova,179,44686,FALSE
+Republic of Moldova,180,9286,FALSE
+Republic of Moldova,203,26179.47154,TRUE
+Republic of Moldova,205,107488,FALSE
+Republic of Moldova,208,84004.18102,TRUE
+Republic of Moldova,219,28076,FALSE
+Republic of Moldova,221,20427,FALSE
+Republic of Moldova,229,16244.65912,TRUE
+Republic of Moldova,231,52535,FALSE
+Republic of Moldova,235,104215,FALSE
+Republic of Moldova,254,26952.37295,TRUE
+Republic of Moldova,84,9355.713607,TRUE
+Republic of Moldova,267,9372.487582,TRUE
+Republic of Moldova,282,325497,FALSE
+Republic of Moldova,286,760050.6713,TRUE
+Republic of Moldova,289,18748,FALSE
+Republic of Moldova,316,8771,FALSE
+Republic of Moldova,317,91523,FALSE
+Republic of Moldova,318,34869,FALSE
+Republic of Moldova,18,8401,FALSE
+Republic of Moldova,19,56803,FALSE
+Republic of Moldova,33,30270.38924,TRUE
+Republic of Moldova,40,135867,FALSE
+Republic of Moldova,49,100386,FALSE
+Republic of Moldova,54,117363,FALSE
+Republic of Moldova,58,23723,FALSE
+Republic of Moldova,59,22326.21725,TRUE
+Republic of Moldova,63,66230,FALSE
+Republic of Moldova,90,87859,FALSE
+Republic of Moldova,94,61002.28577,TRUE
+Republic of Moldova,101,84577,FALSE
+Republic of Moldova,112,42607,FALSE
+Republic of Moldova,138,17125.18189,TRUE
+Republic of Moldova,152,21513,FALSE
+Republic of Moldova,154,96782.90416,TRUE
+Republic of Moldova,158,96473.15601,TRUE
+Republic of Moldova,200,21146,FALSE
+Republic of Moldova,202,85300.04797,TRUE
+Republic of Moldova,206,183393.7134,TRUE
+Republic of Moldova,218,41306,FALSE
+Republic of Moldova,238,124988,FALSE
+Republic of Moldova,243,25344,FALSE
+Republic of Moldova,259,18056,FALSE
+Republic of Moldova,276,11720,FALSE
+Republic of Moldova,279,177754.1672,TRUE
+Republic of Moldova,298,120463.1286,TRUE
+Republic of Moldova,305,13622,FALSE
+Republic of Moldova,306,128476,FALSE
+Republic of Moldova,11,178064.2799,TRUE
+Republic of Moldova,16,74389.59543,TRUE
+Republic of Moldova,48,27222.34375,TRUE
+Republic of Moldova,60,39452,FALSE
+Republic of Moldova,63,66230,FALSE
+Republic of Moldova,121,115777.4722,TRUE
+Republic of Moldova,128,9353.124815,TRUE
+Republic of Moldova,156,10200.29705,TRUE
+Republic of Moldova,217,28659,FALSE
+Republic of Moldova,248,23984,FALSE
+Republic of Moldova,270,36594,FALSE
+Republic of Moldova,52,72720.10141,TRUE
+Republic of Moldova,74,4541.36112,TRUE
+Republic of Moldova,75,47178.96176,TRUE
+Republic of Moldova,80,120594,FALSE
+Republic of Moldova,301,113987.8459,TRUE
+Republic of Moldova,319,89190.44102,TRUE
+Republic of Moldova,51,26504.47085,TRUE
+Republic of Moldova,53,6581.96824,TRUE
+Republic of Moldova,77,5993.147024,TRUE
+Republic of Moldova,213,124295.9159,TRUE
+Republic of Moldova,228,133880.2683,TRUE
+Republic of Moldova,269,15171.62496,TRUE
+Republic of Moldova,296,43692.55808,TRUE
+Republic of Moldova,175,70802.39066,TRUE
+Republic of Moldova,12,36715.19395,TRUE
+Republic of Moldova,13,74728.86082,TRUE
+Republic of Moldova,108,12577.92841,TRUE
+Republic of Moldova,165,14797.07017,TRUE
+Republic of Moldova,215,105585.0293,TRUE
+Republic of Moldova,261,8946.089355,TRUE
+Republic of Moldova,281,51350,FALSE
+Republic of Moldova,302,27087.34387,TRUE
+Republic of Moldova,310,36133,TRUE
+Republic of Moldova,106,5779,FALSE
+Republic of Moldova,30,62885.73079,TRUE
+Republic of Moldova,91,3561,FALSE
+Republic of Moldova,192,3780098.195,TRUE
+Republic of Moldova,249,19275,FALSE
+Republic of Moldova,308,35296.76443,TRUE
+Republic of Moldova,116,847,FALSE
+Republic of Moldova,234,8162.890747,TRUE
+Republic of Moldova,88,138218.959,TRUE
+Republic of Moldova,227,9358.848173,TRUE
+Republic of Moldova,8,67418,FALSE
+Republic of Moldova,115,186672.4488,TRUE
+Republic of Moldova,146,28645.96233,TRUE
+Republic of Moldova,257,14862.84549,TRUE
+Republic of Moldova,39,8031,FALSE
+Republic of Moldova,61,218943.5096,TRUE
+Republic of Moldova,76,100326.9844,TRUE
+Republic of Moldova,268,27005.25,TRUE
+Republic of Moldova,194,9390.783666,TRUE
+Republic of Moldova,198,5299.135169,TRUE
+Republic of Moldova,245,11957.75,TRUE
+Republic of Moldova,86,15341.61704,TRUE
+Republic of Moldova,247,27947.125,TRUE
+Republic of Moldova,15,5922.875,TRUE
+Republic of Moldova,135,5719.346191,TRUE
+Republic of Moldova,65,4252.65625,TRUE
+Republic of Moldova,70,8796.273438,TRUE
+Republic of Moldova,314,4472.643433,TRUE
+Republic of Moldova,133,6124.625,TRUE
+Republic of Moldova,240,4373.4375,TRUE
+Republic of Moldova,148,23186,TRUE
+Republic of Moldova,31,5157,TRUE
+Romania,4,20977.52128,TRUE
+Romania,5,13410,FALSE
+Romania,7,84148,FALSE
+Romania,8,139918,FALSE
+Romania,17,37786,FALSE
+Romania,105,149702.6633,TRUE
+Romania,120,42094,FALSE
+Romania,161,16591,FALSE
+Romania,169,41677,FALSE
+Romania,179,124946,FALSE
+Romania,180,19209,FALSE
+Romania,203,26179.47154,TRUE
+Romania,205,107381,FALSE
+Romania,208,84004.18102,TRUE
+Romania,219,131008,FALSE
+Romania,221,167623,FALSE
+Romania,229,16244.65912,TRUE
+Romania,231,78781,FALSE
+Romania,235,144428,FALSE
+Romania,254,46248,FALSE
+Romania,84,9544,FALSE
+Romania,267,9372.487582,TRUE
+Romania,282,411174,FALSE
+Romania,286,760050.6713,TRUE
+Romania,289,19572,FALSE
+Romania,316,203796,FALSE
+Romania,317,210254,FALSE
+Romania,318,39484,FALSE
+Romania,18,12039,FALSE
+Romania,19,53133,FALSE
+Romania,33,30270.38924,TRUE
+Romania,40,214376,FALSE
+Romania,49,128939,FALSE
+Romania,54,128657,FALSE
+Romania,58,120506,FALSE
+Romania,59,110000,FALSE
+Romania,63,9248,FALSE
+Romania,90,144160,FALSE
+Romania,94,61002.28577,TRUE
+Romania,101,132269,FALSE
+Romania,112,53265,FALSE
+Romania,138,8093,FALSE
+Romania,152,176804,FALSE
+Romania,154,96782.90416,TRUE
+Romania,158,126940,FALSE
+Romania,200,22489,FALSE
+Romania,202,85300.04797,TRUE
+Romania,206,183393.7134,TRUE
+Romania,218,43255,FALSE
+Romania,238,125921,FALSE
+Romania,243,76708,FALSE
+Romania,259,24805,FALSE
+Romania,276,21045,FALSE
+Romania,279,102048,FALSE
+Romania,298,120463.1286,TRUE
+Romania,305,17883,FALSE
+Romania,306,153093,FALSE
+Romania,11,123030,FALSE
+Romania,16,74389.59543,TRUE
+Romania,48,27222.34375,TRUE
+Romania,60,12648,FALSE
+Romania,63,9248,FALSE
+Romania,121,115777.4722,TRUE
+Romania,128,9353.124815,TRUE
+Romania,156,10200.29705,TRUE
+Romania,217,18378,FALSE
+Romania,248,28410,FALSE
+Romania,270,26991,FALSE
+Romania,52,72720.10141,TRUE
+Romania,74,4541.36112,TRUE
+Romania,75,47178.96176,TRUE
+Romania,80,37224,FALSE
+Romania,301,113987.8459,TRUE
+Romania,319,89190.44102,TRUE
+Romania,51,26504.47085,TRUE
+Romania,53,8876,FALSE
+Romania,77,5993.147024,TRUE
+Romania,213,124295.9159,TRUE
+Romania,228,133880.2683,TRUE
+Romania,269,15171.62496,TRUE
+Romania,296,43692.55808,TRUE
+Romania,175,70802.39066,TRUE
+Romania,12,36715.19395,TRUE
+Romania,13,74728.86082,TRUE
+Romania,108,22571,FALSE
+Romania,165,14797.07017,TRUE
+Romania,215,105585.0293,TRUE
+Romania,261,8946.089355,TRUE
+Romania,281,84435,FALSE
+Romania,302,27087.34387,TRUE
+Romania,310,36133,TRUE
+Romania,106,9066,FALSE
+Romania,30,67126,FALSE
+Romania,91,8169,FALSE
+Romania,192,8066111,FALSE
+Romania,249,29667,FALSE
+Romania,308,34800,FALSE
+Romania,116,98484.54468,TRUE
+Romania,234,5728,FALSE
+Romania,88,69286,FALSE
+Romania,227,9358.848173,TRUE
+Romania,8,139918,FALSE
+Romania,115,186672.4488,TRUE
+Romania,146,28645.96233,TRUE
+Romania,257,14862.84549,TRUE
+Romania,39,10075.63454,TRUE
+Romania,61,218943.5096,TRUE
+Romania,76,100326.9844,TRUE
+Romania,268,27005.25,TRUE
+Romania,194,11657,FALSE
+Romania,198,5299.135169,TRUE
+Romania,245,11957.75,TRUE
+Romania,86,15341.61704,TRUE
+Romania,247,27947.125,TRUE
+Romania,15,5922.875,TRUE
+Romania,135,1043,FALSE
+Romania,65,4252.65625,TRUE
+Romania,70,8796.273438,TRUE
+Romania,314,4472.643433,TRUE
+Romania,133,6124.625,TRUE
+Romania,240,4373.4375,TRUE
+Romania,148,23186,TRUE
+Romania,31,5157,TRUE
+Russian Federation,4,20977.52128,TRUE
+Russian Federation,5,8278,FALSE
+Russian Federation,7,86038,FALSE
+Russian Federation,8,54767,FALSE
+Russian Federation,17,22121,FALSE
+Russian Federation,105,149702.6633,TRUE
+Russian Federation,120,84535,FALSE
+Russian Federation,161,9471,FALSE
+Russian Federation,169,55130,FALSE
+Russian Federation,179,121608.9919,TRUE
+Russian Federation,180,15383,FALSE
+Russian Federation,203,26179.47154,TRUE
+Russian Federation,205,228456,FALSE
+Russian Federation,208,25280,FALSE
+Russian Federation,219,58873,FALSE
+Russian Federation,221,76277,FALSE
+Russian Federation,229,16244.65912,TRUE
+Russian Federation,231,39186,FALSE
+Russian Federation,235,153176,FALSE
+Russian Federation,254,53031,FALSE
+Russian Federation,84,9355.713607,TRUE
+Russian Federation,267,9372.487582,TRUE
+Russian Federation,282,470382,FALSE
+Russian Federation,286,760050.6713,TRUE
+Russian Federation,289,15096,FALSE
+Russian Federation,316,72255.87156,TRUE
+Russian Federation,317,118566,FALSE
+Russian Federation,318,26835,FALSE
+Russian Federation,18,20849,FALSE
+Russian Federation,19,77366.60983,TRUE
+Russian Federation,33,11442,FALSE
+Russian Federation,40,321132,FALSE
+Russian Federation,49,265597,FALSE
+Russian Federation,54,96756,FALSE
+Russian Federation,58,25387,FALSE
+Russian Federation,59,22326.21725,TRUE
+Russian Federation,63,234336.5313,TRUE
+Russian Federation,90,290055,FALSE
+Russian Federation,94,61002.28577,TRUE
+Russian Federation,101,138512.4356,TRUE
+Russian Federation,112,92680,FALSE
+Russian Federation,138,13440,FALSE
+Russian Federation,152,119704.6269,TRUE
+Russian Federation,154,96782.90416,TRUE
+Russian Federation,158,96473.15601,TRUE
+Russian Federation,200,17343,FALSE
+Russian Federation,202,85300.04797,TRUE
+Russian Federation,206,183393.7134,TRUE
+Russian Federation,218,46949,FALSE
+Russian Federation,238,214816,FALSE
+Russian Federation,243,105331,FALSE
+Russian Federation,259,20333,FALSE
+Russian Federation,276,14788,FALSE
+Russian Federation,279,177754.1672,TRUE
+Russian Federation,298,120463.1286,TRUE
+Russian Federation,305,15590.0347,TRUE
+Russian Federation,306,252105,FALSE
+Russian Federation,11,178064.2799,TRUE
+Russian Federation,16,74389.59543,TRUE
+Russian Federation,48,27222.34375,TRUE
+Russian Federation,60,8937,FALSE
+Russian Federation,63,11715.28525,TRUE
+Russian Federation,121,115777.4722,TRUE
+Russian Federation,128,9353.124815,TRUE
+Russian Federation,156,10698,FALSE
+Russian Federation,217,21150,FALSE
+Russian Federation,248,10955,FALSE
+Russian Federation,270,14864,FALSE
+Russian Federation,52,72720.10141,TRUE
+Russian Federation,74,4541.36112,TRUE
+Russian Federation,75,47178.96176,TRUE
+Russian Federation,80,49992.57574,TRUE
+Russian Federation,301,113987.8459,TRUE
+Russian Federation,319,89190.44102,TRUE
+Russian Federation,51,26504.47085,TRUE
+Russian Federation,53,6581.96824,TRUE
+Russian Federation,77,5993.147024,TRUE
+Russian Federation,213,124295.9159,TRUE
+Russian Federation,228,133880.2683,TRUE
+Russian Federation,269,15171.62496,TRUE
+Russian Federation,296,43692.55808,TRUE
+Russian Federation,175,70802.39066,TRUE
+Russian Federation,12,36715.19395,TRUE
+Russian Federation,13,74728.86082,TRUE
+Russian Federation,108,9377,FALSE
+Russian Federation,165,15731,FALSE
+Russian Federation,215,105585.0293,TRUE
+Russian Federation,261,6664,FALSE
+Russian Federation,281,66913,FALSE
+Russian Federation,302,8391,FALSE
+Russian Federation,310,36133,TRUE
+Russian Federation,106,13595.99028,TRUE
+Russian Federation,30,49368,FALSE
+Russian Federation,91,74408,FALSE
+Russian Federation,192,3780098.195,TRUE
+Russian Federation,249,78290,FALSE
+Russian Federation,308,27757,FALSE
+Russian Federation,116,46365,FALSE
+Russian Federation,234,8162.890747,TRUE
+Russian Federation,88,138218.959,TRUE
+Russian Federation,227,9358.848173,TRUE
+Russian Federation,8,54767,FALSE
+Russian Federation,115,186672.4488,TRUE
+Russian Federation,146,28645.96233,TRUE
+Russian Federation,257,14862.84549,TRUE
+Russian Federation,39,10576,FALSE
+Russian Federation,61,218943.5096,TRUE
+Russian Federation,76,100326.9844,TRUE
+Russian Federation,268,27005.25,TRUE
+Russian Federation,194,5517,FALSE
+Russian Federation,198,5299.135169,TRUE
+Russian Federation,245,11957.75,TRUE
+Russian Federation,86,15341.61704,TRUE
+Russian Federation,247,27947.125,TRUE
+Russian Federation,15,5922.875,TRUE
+Russian Federation,135,2523,FALSE
+Russian Federation,65,4252.65625,TRUE
+Russian Federation,70,8796.273438,TRUE
+Russian Federation,314,4472.643433,TRUE
+Russian Federation,133,6124.625,TRUE
+Russian Federation,240,4373.4375,TRUE
+Russian Federation,148,23186,TRUE
+Russian Federation,31,5157,TRUE
+Rwanda,4,20977.52128,TRUE
+Rwanda,5,7484.490489,TRUE
+Rwanda,7,111437.9893,TRUE
+Rwanda,8,47030.54376,TRUE
+Rwanda,17,33099.94094,TRUE
+Rwanda,105,149702.6633,TRUE
+Rwanda,120,115713.1489,TRUE
+Rwanda,161,8730.264786,TRUE
+Rwanda,169,15748,FALSE
+Rwanda,179,121608.9919,TRUE
+Rwanda,180,4179,FALSE
+Rwanda,203,26179.47154,TRUE
+Rwanda,205,50468,FALSE
+Rwanda,208,21815,FALSE
+Rwanda,219,80605.62094,TRUE
+Rwanda,221,53059.48552,TRUE
+Rwanda,229,16244.65912,TRUE
+Rwanda,231,60255.26389,TRUE
+Rwanda,235,70718,FALSE
+Rwanda,254,33067,FALSE
+Rwanda,84,9355.713607,TRUE
+Rwanda,267,9372.487582,TRUE
+Rwanda,282,423220.8453,TRUE
+Rwanda,286,85063,FALSE
+Rwanda,289,9979.922823,TRUE
+Rwanda,316,72255.87156,TRUE
+Rwanda,317,188762.6372,TRUE
+Rwanda,318,23039,FALSE
+Rwanda,18,8529,FALSE
+Rwanda,19,88503,FALSE
+Rwanda,33,30270.38924,TRUE
+Rwanda,40,105963,FALSE
+Rwanda,49,78940,FALSE
+Rwanda,54,175365.1249,TRUE
+Rwanda,58,74040.89691,TRUE
+Rwanda,59,22326.21725,TRUE
+Rwanda,63,99825,FALSE
+Rwanda,90,194487.8189,TRUE
+Rwanda,94,61002.28577,TRUE
+Rwanda,101,37155,FALSE
+Rwanda,112,122104.9439,TRUE
+Rwanda,138,17125.18189,TRUE
+Rwanda,152,1763,FALSE
+Rwanda,154,78914,FALSE
+Rwanda,158,96473.15601,TRUE
+Rwanda,200,22918.25267,TRUE
+Rwanda,202,85300.04797,TRUE
+Rwanda,206,183393.7134,TRUE
+Rwanda,218,52990.31222,TRUE
+Rwanda,238,50653,FALSE
+Rwanda,243,112174.5654,TRUE
+Rwanda,259,55616.6005,TRUE
+Rwanda,276,4724,FALSE
+Rwanda,279,177754.1672,TRUE
+Rwanda,298,120463.1286,TRUE
+Rwanda,305,12670,FALSE
+Rwanda,306,113782,FALSE
+Rwanda,11,178064.2799,TRUE
+Rwanda,16,94344,FALSE
+Rwanda,48,27222.34375,TRUE
+Rwanda,60,22383.25858,TRUE
+Rwanda,63,99825,FALSE
+Rwanda,121,115777.4722,TRUE
+Rwanda,128,4320,FALSE
+Rwanda,156,10200.29705,TRUE
+Rwanda,217,6430,FALSE
+Rwanda,248,14225.32829,TRUE
+Rwanda,270,9881,FALSE
+Rwanda,52,172009,FALSE
+Rwanda,74,4541.36112,TRUE
+Rwanda,75,47178.96176,TRUE
+Rwanda,80,49992.57574,TRUE
+Rwanda,301,41398,FALSE
+Rwanda,319,99290,FALSE
+Rwanda,51,26504.47085,TRUE
+Rwanda,53,6581.96824,TRUE
+Rwanda,77,5679,FALSE
+Rwanda,213,124295.9159,TRUE
+Rwanda,228,36896,FALSE
+Rwanda,269,15171.62496,TRUE
+Rwanda,296,67795,FALSE
+Rwanda,175,14985,FALSE
+Rwanda,12,36715.19395,TRUE
+Rwanda,13,146675,FALSE
+Rwanda,108,12577.92841,TRUE
+Rwanda,165,14797.07017,TRUE
+Rwanda,215,169500,FALSE
+Rwanda,261,8946.089355,TRUE
+Rwanda,281,136069.2843,TRUE
+Rwanda,302,14882,FALSE
+Rwanda,310,36133,TRUE
+Rwanda,106,13595.99028,TRUE
+Rwanda,30,62885.73079,TRUE
+Rwanda,91,126485.3041,TRUE
+Rwanda,192,3780098.195,TRUE
+Rwanda,249,70032.42373,TRUE
+Rwanda,308,35296.76443,TRUE
+Rwanda,116,98484.54468,TRUE
+Rwanda,234,8162.890747,TRUE
+Rwanda,88,138218.959,TRUE
+Rwanda,227,9358.848173,TRUE
+Rwanda,8,21599.0332,TRUE
+Rwanda,115,186672.4488,TRUE
+Rwanda,146,28645.96233,TRUE
+Rwanda,257,14862.84549,TRUE
+Rwanda,39,10075.63454,TRUE
+Rwanda,61,218943.5096,TRUE
+Rwanda,76,100326.9844,TRUE
+Rwanda,268,27005.25,TRUE
+Rwanda,194,9390.783666,TRUE
+Rwanda,198,5299.135169,TRUE
+Rwanda,245,11957.75,TRUE
+Rwanda,86,15341.61704,TRUE
+Rwanda,247,27947.125,TRUE
+Rwanda,15,5922.875,TRUE
+Rwanda,135,5719.346191,TRUE
+Rwanda,65,4252.65625,TRUE
+Rwanda,70,8796.273438,TRUE
+Rwanda,314,4472.643433,TRUE
+Rwanda,133,6124.625,TRUE
+Rwanda,240,2880,FALSE
+Rwanda,148,23186,TRUE
+Rwanda,31,5157,TRUE
+Saint Kitts and Nevis,4,20977.52128,TRUE
+Saint Kitts and Nevis,5,7484.490489,TRUE
+Saint Kitts and Nevis,7,111437.9893,TRUE
+Saint Kitts and Nevis,8,47030.54376,TRUE
+Saint Kitts and Nevis,17,33099.94094,TRUE
+Saint Kitts and Nevis,105,149702.6633,TRUE
+Saint Kitts and Nevis,120,115713.1489,TRUE
+Saint Kitts and Nevis,161,8730.264786,TRUE
+Saint Kitts and Nevis,169,16777.49735,TRUE
+Saint Kitts and Nevis,179,121608.9919,TRUE
+Saint Kitts and Nevis,180,7520.279265,TRUE
+Saint Kitts and Nevis,203,26179.47154,TRUE
+Saint Kitts and Nevis,205,114680,FALSE
+Saint Kitts and Nevis,208,84004.18102,TRUE
+Saint Kitts and Nevis,219,80605.62094,TRUE
+Saint Kitts and Nevis,221,53059.48552,TRUE
+Saint Kitts and Nevis,229,16244.65912,TRUE
+Saint Kitts and Nevis,231,60255.26389,TRUE
+Saint Kitts and Nevis,235,264929,FALSE
+Saint Kitts and Nevis,254,26952.37295,TRUE
+Saint Kitts and Nevis,84,2959,FALSE
+Saint Kitts and Nevis,267,9372.487582,TRUE
+Saint Kitts and Nevis,282,423220.8453,TRUE
+Saint Kitts and Nevis,286,760050.6713,TRUE
+Saint Kitts and Nevis,289,9979.922823,TRUE
+Saint Kitts and Nevis,316,72255.87156,TRUE
+Saint Kitts and Nevis,317,141587,FALSE
+Saint Kitts and Nevis,318,32261.2753,TRUE
+Saint Kitts and Nevis,18,11273.75269,TRUE
+Saint Kitts and Nevis,19,77366.60983,TRUE
+Saint Kitts and Nevis,33,30270.38924,TRUE
+Saint Kitts and Nevis,40,73080,FALSE
+Saint Kitts and Nevis,49,82009,FALSE
+Saint Kitts and Nevis,54,175365.1249,TRUE
+Saint Kitts and Nevis,58,74040.89691,TRUE
+Saint Kitts and Nevis,59,22326.21725,TRUE
+Saint Kitts and Nevis,63,78594,FALSE
+Saint Kitts and Nevis,90,100368,FALSE
+Saint Kitts and Nevis,94,61002.28577,TRUE
+Saint Kitts and Nevis,101,138512.4356,TRUE
+Saint Kitts and Nevis,112,122104.9439,TRUE
+Saint Kitts and Nevis,138,17125.18189,TRUE
+Saint Kitts and Nevis,152,119704.6269,TRUE
+Saint Kitts and Nevis,154,96782.90416,TRUE
+Saint Kitts and Nevis,158,96473.15601,TRUE
+Saint Kitts and Nevis,200,22918.25267,TRUE
+Saint Kitts and Nevis,202,85300.04797,TRUE
+Saint Kitts and Nevis,206,183393.7134,TRUE
+Saint Kitts and Nevis,218,52990.31222,TRUE
+Saint Kitts and Nevis,238,116960.1876,TRUE
+Saint Kitts and Nevis,243,112174.5654,TRUE
+Saint Kitts and Nevis,259,55616.6005,TRUE
+Saint Kitts and Nevis,276,10950.60863,TRUE
+Saint Kitts and Nevis,279,177754.1672,TRUE
+Saint Kitts and Nevis,298,120463.1286,TRUE
+Saint Kitts and Nevis,305,15590.0347,TRUE
+Saint Kitts and Nevis,306,127317,FALSE
+Saint Kitts and Nevis,11,178064.2799,TRUE
+Saint Kitts and Nevis,16,74389.59543,TRUE
+Saint Kitts and Nevis,48,27222.34375,TRUE
+Saint Kitts and Nevis,60,22383.25858,TRUE
+Saint Kitts and Nevis,63,78594,FALSE
+Saint Kitts and Nevis,121,115777.4722,TRUE
+Saint Kitts and Nevis,128,15501,FALSE
+Saint Kitts and Nevis,156,10200.29705,TRUE
+Saint Kitts and Nevis,217,21196.4891,TRUE
+Saint Kitts and Nevis,248,14225.32829,TRUE
+Saint Kitts and Nevis,270,9151.63574,TRUE
+Saint Kitts and Nevis,52,72720.10141,TRUE
+Saint Kitts and Nevis,74,4541.36112,TRUE
+Saint Kitts and Nevis,75,48686,FALSE
+Saint Kitts and Nevis,80,49992.57574,TRUE
+Saint Kitts and Nevis,301,113987.8459,TRUE
+Saint Kitts and Nevis,319,66126,FALSE
+Saint Kitts and Nevis,51,26504.47085,TRUE
+Saint Kitts and Nevis,53,6581.96824,TRUE
+Saint Kitts and Nevis,77,5993.147024,TRUE
+Saint Kitts and Nevis,213,124295.9159,TRUE
+Saint Kitts and Nevis,228,100000,FALSE
+Saint Kitts and Nevis,269,15171.62496,TRUE
+Saint Kitts and Nevis,296,70352,FALSE
+Saint Kitts and Nevis,175,70802.39066,TRUE
+Saint Kitts and Nevis,12,36715.19395,TRUE
+Saint Kitts and Nevis,13,74728.86082,TRUE
+Saint Kitts and Nevis,108,12577.92841,TRUE
+Saint Kitts and Nevis,165,14797.07017,TRUE
+Saint Kitts and Nevis,215,105585.0293,TRUE
+Saint Kitts and Nevis,261,8946.089355,TRUE
+Saint Kitts and Nevis,281,136069.2843,TRUE
+Saint Kitts and Nevis,302,27087.34387,TRUE
+Saint Kitts and Nevis,310,36133,TRUE
+Saint Kitts and Nevis,106,13595.99028,TRUE
+Saint Kitts and Nevis,30,62885.73079,TRUE
+Saint Kitts and Nevis,91,126485.3041,TRUE
+Saint Kitts and Nevis,192,3780098.195,TRUE
+Saint Kitts and Nevis,249,70032.42373,TRUE
+Saint Kitts and Nevis,308,35296.76443,TRUE
+Saint Kitts and Nevis,116,98484.54468,TRUE
+Saint Kitts and Nevis,234,8162.890747,TRUE
+Saint Kitts and Nevis,88,138218.959,TRUE
+Saint Kitts and Nevis,227,9358.848173,TRUE
+Saint Kitts and Nevis,8,21599.0332,TRUE
+Saint Kitts and Nevis,115,186672.4488,TRUE
+Saint Kitts and Nevis,146,28645.96233,TRUE
+Saint Kitts and Nevis,257,14862.84549,TRUE
+Saint Kitts and Nevis,39,10075.63454,TRUE
+Saint Kitts and Nevis,61,218943.5096,TRUE
+Saint Kitts and Nevis,76,100326.9844,TRUE
+Saint Kitts and Nevis,268,27005.25,TRUE
+Saint Kitts and Nevis,194,9390.783666,TRUE
+Saint Kitts and Nevis,198,5299.135169,TRUE
+Saint Kitts and Nevis,245,11957.75,TRUE
+Saint Kitts and Nevis,86,15341.61704,TRUE
+Saint Kitts and Nevis,247,27947.125,TRUE
+Saint Kitts and Nevis,15,5922.875,TRUE
+Saint Kitts and Nevis,135,5719.346191,TRUE
+Saint Kitts and Nevis,65,4252.65625,TRUE
+Saint Kitts and Nevis,70,8796.273438,TRUE
+Saint Kitts and Nevis,314,4472.643433,TRUE
+Saint Kitts and Nevis,133,6124.625,TRUE
+Saint Kitts and Nevis,240,4373.4375,TRUE
+Saint Kitts and Nevis,148,23186,TRUE
+Saint Kitts and Nevis,31,5157,TRUE
+Saint Lucia,4,20977.52128,TRUE
+Saint Lucia,5,7484.490489,TRUE
+Saint Lucia,7,111437.9893,TRUE
+Saint Lucia,8,47030.54376,TRUE
+Saint Lucia,17,33099.94094,TRUE
+Saint Lucia,105,149702.6633,TRUE
+Saint Lucia,120,115713.1489,TRUE
+Saint Lucia,161,8730.264786,TRUE
+Saint Lucia,169,16777.49735,TRUE
+Saint Lucia,179,121608.9919,TRUE
+Saint Lucia,180,7520.279265,TRUE
+Saint Lucia,203,26179.47154,TRUE
+Saint Lucia,205,158255.8483,TRUE
+Saint Lucia,208,109252,FALSE
+Saint Lucia,219,80605.62094,TRUE
+Saint Lucia,221,53059.48552,TRUE
+Saint Lucia,229,16244.65912,TRUE
+Saint Lucia,231,60255.26389,TRUE
+Saint Lucia,235,172280.9273,TRUE
+Saint Lucia,254,26952.37295,TRUE
+Saint Lucia,84,9355.713607,TRUE
+Saint Lucia,267,9372.487582,TRUE
+Saint Lucia,282,423220.8453,TRUE
+Saint Lucia,286,760050.6713,TRUE
+Saint Lucia,289,9979.922823,TRUE
+Saint Lucia,316,72255.87156,TRUE
+Saint Lucia,317,195908,FALSE
+Saint Lucia,318,32261.2753,TRUE
+Saint Lucia,18,11273.75269,TRUE
+Saint Lucia,19,77366.60983,TRUE
+Saint Lucia,33,30270.38924,TRUE
+Saint Lucia,40,84837,FALSE
+Saint Lucia,49,168916,FALSE
+Saint Lucia,54,175365.1249,TRUE
+Saint Lucia,58,74040.89691,TRUE
+Saint Lucia,59,22326.21725,TRUE
+Saint Lucia,63,234336.5313,TRUE
+Saint Lucia,90,185388,FALSE
+Saint Lucia,94,61002.28577,TRUE
+Saint Lucia,101,138512.4356,TRUE
+Saint Lucia,112,122104.9439,TRUE
+Saint Lucia,138,17125.18189,TRUE
+Saint Lucia,152,119704.6269,TRUE
+Saint Lucia,154,61382,FALSE
+Saint Lucia,158,113863,FALSE
+Saint Lucia,200,22918.25267,TRUE
+Saint Lucia,202,85300.04797,TRUE
+Saint Lucia,206,183393.7134,TRUE
+Saint Lucia,218,52990.31222,TRUE
+Saint Lucia,238,254983,FALSE
+Saint Lucia,243,112174.5654,TRUE
+Saint Lucia,259,55616.6005,TRUE
+Saint Lucia,276,10950.60863,TRUE
+Saint Lucia,279,177754.1672,TRUE
+Saint Lucia,298,120463.1286,TRUE
+Saint Lucia,305,15590.0347,TRUE
+Saint Lucia,306,250640,FALSE
+Saint Lucia,11,178064.2799,TRUE
+Saint Lucia,16,99765,FALSE
+Saint Lucia,48,27222.34375,TRUE
+Saint Lucia,60,22383.25858,TRUE
+Saint Lucia,63,11715.28525,TRUE
+Saint Lucia,121,80058,FALSE
+Saint Lucia,128,9353.124815,TRUE
+Saint Lucia,156,10200.29705,TRUE
+Saint Lucia,217,21196.4891,TRUE
+Saint Lucia,248,14225.32829,TRUE
+Saint Lucia,270,9151.63574,TRUE
+Saint Lucia,52,21321,FALSE
+Saint Lucia,74,16462,FALSE
+Saint Lucia,75,50935,FALSE
+Saint Lucia,80,49992.57574,TRUE
+Saint Lucia,301,48451,FALSE
+Saint Lucia,319,36409,FALSE
+Saint Lucia,51,26504.47085,TRUE
+Saint Lucia,53,6581.96824,TRUE
+Saint Lucia,77,5993.147024,TRUE
+Saint Lucia,213,124295.9159,TRUE
+Saint Lucia,228,120002,FALSE
+Saint Lucia,269,15171.62496,TRUE
+Saint Lucia,296,92267,FALSE
+Saint Lucia,175,86614,FALSE
+Saint Lucia,12,36715.19395,TRUE
+Saint Lucia,13,65139,FALSE
+Saint Lucia,108,12577.92841,TRUE
+Saint Lucia,165,14797.07017,TRUE
+Saint Lucia,215,105585.0293,TRUE
+Saint Lucia,261,8946.089355,TRUE
+Saint Lucia,281,136069.2843,TRUE
+Saint Lucia,302,27087.34387,TRUE
+Saint Lucia,310,36133,TRUE
+Saint Lucia,106,13595.99028,TRUE
+Saint Lucia,30,62885.73079,TRUE
+Saint Lucia,91,126485.3041,TRUE
+Saint Lucia,192,3780098.195,TRUE
+Saint Lucia,249,70032.42373,TRUE
+Saint Lucia,308,35296.76443,TRUE
+Saint Lucia,116,98484.54468,TRUE
+Saint Lucia,234,8162.890747,TRUE
+Saint Lucia,88,138218.959,TRUE
+Saint Lucia,227,9358.848173,TRUE
+Saint Lucia,8,21599.0332,TRUE
+Saint Lucia,115,14970,FALSE
+Saint Lucia,146,28645.96233,TRUE
+Saint Lucia,257,14862.84549,TRUE
+Saint Lucia,39,10075.63454,TRUE
+Saint Lucia,61,218943.5096,TRUE
+Saint Lucia,76,66593,FALSE
+Saint Lucia,268,27005.25,TRUE
+Saint Lucia,194,9390.783666,TRUE
+Saint Lucia,198,3651,FALSE
+Saint Lucia,245,11957.75,TRUE
+Saint Lucia,86,15341.61704,TRUE
+Saint Lucia,247,27947.125,TRUE
+Saint Lucia,15,5922.875,TRUE
+Saint Lucia,135,5719.346191,TRUE
+Saint Lucia,65,4252.65625,TRUE
+Saint Lucia,70,8796.273438,TRUE
+Saint Lucia,314,4472.643433,TRUE
+Saint Lucia,133,6124.625,TRUE
+Saint Lucia,240,4373.4375,TRUE
+Saint Lucia,148,23186,TRUE
+Saint Lucia,31,5157,TRUE
+Saint Pierre and Miquelon,4,20977.52128,TRUE
+Saint Pierre and Miquelon,5,7484.490489,TRUE
+Saint Pierre and Miquelon,7,111437.9893,TRUE
+Saint Pierre and Miquelon,8,47030.54376,TRUE
+Saint Pierre and Miquelon,17,33099.94094,TRUE
+Saint Pierre and Miquelon,105,149702.6633,TRUE
+Saint Pierre and Miquelon,120,115713.1489,TRUE
+Saint Pierre and Miquelon,161,8730.264786,TRUE
+Saint Pierre and Miquelon,169,16777.49735,TRUE
+Saint Pierre and Miquelon,179,121608.9919,TRUE
+Saint Pierre and Miquelon,180,7520.279265,TRUE
+Saint Pierre and Miquelon,203,26179.47154,TRUE
+Saint Pierre and Miquelon,205,158255.8483,TRUE
+Saint Pierre and Miquelon,208,84004.18102,TRUE
+Saint Pierre and Miquelon,219,80605.62094,TRUE
+Saint Pierre and Miquelon,221,53059.48552,TRUE
+Saint Pierre and Miquelon,229,16244.65912,TRUE
+Saint Pierre and Miquelon,231,60255.26389,TRUE
+Saint Pierre and Miquelon,235,172280.9273,TRUE
+Saint Pierre and Miquelon,254,26952.37295,TRUE
+Saint Pierre and Miquelon,84,9355.713607,TRUE
+Saint Pierre and Miquelon,267,9372.487582,TRUE
+Saint Pierre and Miquelon,282,423220.8453,TRUE
+Saint Pierre and Miquelon,286,760050.6713,TRUE
+Saint Pierre and Miquelon,289,9979.922823,TRUE
+Saint Pierre and Miquelon,316,72255.87156,TRUE
+Saint Pierre and Miquelon,317,188762.6372,TRUE
+Saint Pierre and Miquelon,318,32261.2753,TRUE
+Saint Pierre and Miquelon,18,11273.75269,TRUE
+Saint Pierre and Miquelon,19,77366.60983,TRUE
+Saint Pierre and Miquelon,33,30270.38924,TRUE
+Saint Pierre and Miquelon,40,180987.6885,TRUE
+Saint Pierre and Miquelon,49,247408.5214,TRUE
+Saint Pierre and Miquelon,54,175365.1249,TRUE
+Saint Pierre and Miquelon,58,74040.89691,TRUE
+Saint Pierre and Miquelon,59,22326.21725,TRUE
+Saint Pierre and Miquelon,63,234336.5313,TRUE
+Saint Pierre and Miquelon,90,194487.8189,TRUE
+Saint Pierre and Miquelon,94,61002.28577,TRUE
+Saint Pierre and Miquelon,101,138512.4356,TRUE
+Saint Pierre and Miquelon,112,122104.9439,TRUE
+Saint Pierre and Miquelon,138,17125.18189,TRUE
+Saint Pierre and Miquelon,152,119704.6269,TRUE
+Saint Pierre and Miquelon,154,96782.90416,TRUE
+Saint Pierre and Miquelon,158,96473.15601,TRUE
+Saint Pierre and Miquelon,200,22918.25267,TRUE
+Saint Pierre and Miquelon,202,85300.04797,TRUE
+Saint Pierre and Miquelon,206,183393.7134,TRUE
+Saint Pierre and Miquelon,218,52990.31222,TRUE
+Saint Pierre and Miquelon,238,116960.1876,TRUE
+Saint Pierre and Miquelon,243,112174.5654,TRUE
+Saint Pierre and Miquelon,259,55616.6005,TRUE
+Saint Pierre and Miquelon,276,10950.60863,TRUE
+Saint Pierre and Miquelon,279,177754.1672,TRUE
+Saint Pierre and Miquelon,298,120463.1286,TRUE
+Saint Pierre and Miquelon,305,15590.0347,TRUE
+Saint Pierre and Miquelon,306,131681.4608,TRUE
+Saint Pierre and Miquelon,11,178064.2799,TRUE
+Saint Pierre and Miquelon,16,74389.59543,TRUE
+Saint Pierre and Miquelon,48,27222.34375,TRUE
+Saint Pierre and Miquelon,60,22383.25858,TRUE
+Saint Pierre and Miquelon,63,11715.28525,TRUE
+Saint Pierre and Miquelon,121,115777.4722,TRUE
+Saint Pierre and Miquelon,128,9353.124815,TRUE
+Saint Pierre and Miquelon,156,10200.29705,TRUE
+Saint Pierre and Miquelon,217,21196.4891,TRUE
+Saint Pierre and Miquelon,248,14225.32829,TRUE
+Saint Pierre and Miquelon,270,9151.63574,TRUE
+Saint Pierre and Miquelon,52,72720.10141,TRUE
+Saint Pierre and Miquelon,74,4541.36112,TRUE
+Saint Pierre and Miquelon,75,47178.96176,TRUE
+Saint Pierre and Miquelon,80,49992.57574,TRUE
+Saint Pierre and Miquelon,301,113987.8459,TRUE
+Saint Pierre and Miquelon,319,89190.44102,TRUE
+Saint Pierre and Miquelon,51,26504.47085,TRUE
+Saint Pierre and Miquelon,53,6581.96824,TRUE
+Saint Pierre and Miquelon,77,5993.147024,TRUE
+Saint Pierre and Miquelon,213,124295.9159,TRUE
+Saint Pierre and Miquelon,228,133880.2683,TRUE
+Saint Pierre and Miquelon,269,15171.62496,TRUE
+Saint Pierre and Miquelon,296,43692.55808,TRUE
+Saint Pierre and Miquelon,175,70802.39066,TRUE
+Saint Pierre and Miquelon,12,36715.19395,TRUE
+Saint Pierre and Miquelon,13,74728.86082,TRUE
+Saint Pierre and Miquelon,108,12577.92841,TRUE
+Saint Pierre and Miquelon,165,14797.07017,TRUE
+Saint Pierre and Miquelon,215,105585.0293,TRUE
+Saint Pierre and Miquelon,261,8946.089355,TRUE
+Saint Pierre and Miquelon,281,136069.2843,TRUE
+Saint Pierre and Miquelon,302,27087.34387,TRUE
+Saint Pierre and Miquelon,310,36133,TRUE
+Saint Pierre and Miquelon,106,13595.99028,TRUE
+Saint Pierre and Miquelon,30,62885.73079,TRUE
+Saint Pierre and Miquelon,91,126485.3041,TRUE
+Saint Pierre and Miquelon,192,3780098.195,TRUE
+Saint Pierre and Miquelon,249,70032.42373,TRUE
+Saint Pierre and Miquelon,308,35296.76443,TRUE
+Saint Pierre and Miquelon,116,98484.54468,TRUE
+Saint Pierre and Miquelon,234,8162.890747,TRUE
+Saint Pierre and Miquelon,88,138218.959,TRUE
+Saint Pierre and Miquelon,227,9358.848173,TRUE
+Saint Pierre and Miquelon,8,21599.0332,TRUE
+Saint Pierre and Miquelon,115,186672.4488,TRUE
+Saint Pierre and Miquelon,146,28645.96233,TRUE
+Saint Pierre and Miquelon,257,14862.84549,TRUE
+Saint Pierre and Miquelon,39,10075.63454,TRUE
+Saint Pierre and Miquelon,61,218943.5096,TRUE
+Saint Pierre and Miquelon,76,100326.9844,TRUE
+Saint Pierre and Miquelon,268,27005.25,TRUE
+Saint Pierre and Miquelon,194,9390.783666,TRUE
+Saint Pierre and Miquelon,198,5299.135169,TRUE
+Saint Pierre and Miquelon,245,11957.75,TRUE
+Saint Pierre and Miquelon,86,15341.61704,TRUE
+Saint Pierre and Miquelon,247,27947.125,TRUE
+Saint Pierre and Miquelon,15,5922.875,TRUE
+Saint Pierre and Miquelon,135,5719.346191,TRUE
+Saint Pierre and Miquelon,65,4252.65625,TRUE
+Saint Pierre and Miquelon,70,8796.273438,TRUE
+Saint Pierre and Miquelon,314,4472.643433,TRUE
+Saint Pierre and Miquelon,133,6124.625,TRUE
+Saint Pierre and Miquelon,240,4373.4375,TRUE
+Saint Pierre and Miquelon,148,23186,TRUE
+Saint Pierre and Miquelon,31,5157,TRUE
+Saint Vincent and the Grenadines,4,20977.52128,TRUE
+Saint Vincent and the Grenadines,5,7484.490489,TRUE
+Saint Vincent and the Grenadines,7,52796,FALSE
+Saint Vincent and the Grenadines,8,47030.54376,TRUE
+Saint Vincent and the Grenadines,17,33099.94094,TRUE
+Saint Vincent and the Grenadines,105,149702.6633,TRUE
+Saint Vincent and the Grenadines,120,115713.1489,TRUE
+Saint Vincent and the Grenadines,161,8730.264786,TRUE
+Saint Vincent and the Grenadines,169,247429,FALSE
+Saint Vincent and the Grenadines,179,121608.9919,TRUE
+Saint Vincent and the Grenadines,180,7520.279265,TRUE
+Saint Vincent and the Grenadines,203,26179.47154,TRUE
+Saint Vincent and the Grenadines,205,158255.8483,TRUE
+Saint Vincent and the Grenadines,208,50009,FALSE
+Saint Vincent and the Grenadines,219,80605.62094,TRUE
+Saint Vincent and the Grenadines,221,111176,FALSE
+Saint Vincent and the Grenadines,229,16244.65912,TRUE
+Saint Vincent and the Grenadines,231,60255.26389,TRUE
+Saint Vincent and the Grenadines,235,172280.9273,TRUE
+Saint Vincent and the Grenadines,254,26952.37295,TRUE
+Saint Vincent and the Grenadines,84,9355.713607,TRUE
+Saint Vincent and the Grenadines,267,9372.487582,TRUE
+Saint Vincent and the Grenadines,282,423220.8453,TRUE
+Saint Vincent and the Grenadines,286,244289,FALSE
+Saint Vincent and the Grenadines,289,9979.922823,TRUE
+Saint Vincent and the Grenadines,316,72255.87156,TRUE
+Saint Vincent and the Grenadines,317,188762.6372,TRUE
+Saint Vincent and the Grenadines,318,32261.2753,TRUE
+Saint Vincent and the Grenadines,18,11273.75269,TRUE
+Saint Vincent and the Grenadines,19,77366.60983,TRUE
+Saint Vincent and the Grenadines,33,30270.38924,TRUE
+Saint Vincent and the Grenadines,40,180987.6885,TRUE
+Saint Vincent and the Grenadines,49,86964,FALSE
+Saint Vincent and the Grenadines,54,175365.1249,TRUE
+Saint Vincent and the Grenadines,58,74040.89691,TRUE
+Saint Vincent and the Grenadines,59,22326.21725,TRUE
+Saint Vincent and the Grenadines,63,70455,FALSE
+Saint Vincent and the Grenadines,90,194487.8189,TRUE
+Saint Vincent and the Grenadines,94,61002.28577,TRUE
+Saint Vincent and the Grenadines,101,138512.4356,TRUE
+Saint Vincent and the Grenadines,112,122104.9439,TRUE
+Saint Vincent and the Grenadines,138,17125.18189,TRUE
+Saint Vincent and the Grenadines,152,119704.6269,TRUE
+Saint Vincent and the Grenadines,154,53122,FALSE
+Saint Vincent and the Grenadines,158,96473.15601,TRUE
+Saint Vincent and the Grenadines,200,22918.25267,TRUE
+Saint Vincent and the Grenadines,202,85300.04797,TRUE
+Saint Vincent and the Grenadines,206,183393.7134,TRUE
+Saint Vincent and the Grenadines,218,52990.31222,TRUE
+Saint Vincent and the Grenadines,238,104359,FALSE
+Saint Vincent and the Grenadines,243,112174.5654,TRUE
+Saint Vincent and the Grenadines,259,55616.6005,TRUE
+Saint Vincent and the Grenadines,276,10950.60863,TRUE
+Saint Vincent and the Grenadines,279,177754.1672,TRUE
+Saint Vincent and the Grenadines,298,120463.1286,TRUE
+Saint Vincent and the Grenadines,305,13394,FALSE
+Saint Vincent and the Grenadines,306,131681.4608,TRUE
+Saint Vincent and the Grenadines,11,178064.2799,TRUE
+Saint Vincent and the Grenadines,16,98310,FALSE
+Saint Vincent and the Grenadines,48,27222.34375,TRUE
+Saint Vincent and the Grenadines,60,22383.25858,TRUE
+Saint Vincent and the Grenadines,63,70455,FALSE
+Saint Vincent and the Grenadines,121,176000,FALSE
+Saint Vincent and the Grenadines,128,34405,FALSE
+Saint Vincent and the Grenadines,156,10200.29705,TRUE
+Saint Vincent and the Grenadines,217,21196.4891,TRUE
+Saint Vincent and the Grenadines,248,14225.32829,TRUE
+Saint Vincent and the Grenadines,270,9151.63574,TRUE
+Saint Vincent and the Grenadines,52,67845,FALSE
+Saint Vincent and the Grenadines,74,2792,FALSE
+Saint Vincent and the Grenadines,75,37461,FALSE
+Saint Vincent and the Grenadines,80,49992.57574,TRUE
+Saint Vincent and the Grenadines,301,113987.8459,TRUE
+Saint Vincent and the Grenadines,319,127892,FALSE
+Saint Vincent and the Grenadines,51,26504.47085,TRUE
+Saint Vincent and the Grenadines,53,6581.96824,TRUE
+Saint Vincent and the Grenadines,77,3535,FALSE
+Saint Vincent and the Grenadines,213,124295.9159,TRUE
+Saint Vincent and the Grenadines,228,133880.2683,TRUE
+Saint Vincent and the Grenadines,269,15171.62496,TRUE
+Saint Vincent and the Grenadines,296,11564,FALSE
+Saint Vincent and the Grenadines,175,62396,FALSE
+Saint Vincent and the Grenadines,12,36715.19395,TRUE
+Saint Vincent and the Grenadines,13,74728.86082,TRUE
+Saint Vincent and the Grenadines,108,12577.92841,TRUE
+Saint Vincent and the Grenadines,165,14797.07017,TRUE
+Saint Vincent and the Grenadines,215,105585.0293,TRUE
+Saint Vincent and the Grenadines,261,8946.089355,TRUE
+Saint Vincent and the Grenadines,281,136069.2843,TRUE
+Saint Vincent and the Grenadines,302,27087.34387,TRUE
+Saint Vincent and the Grenadines,310,36133,TRUE
+Saint Vincent and the Grenadines,106,13595.99028,TRUE
+Saint Vincent and the Grenadines,30,62885.73079,TRUE
+Saint Vincent and the Grenadines,91,126485.3041,TRUE
+Saint Vincent and the Grenadines,192,3780098.195,TRUE
+Saint Vincent and the Grenadines,249,70032.42373,TRUE
+Saint Vincent and the Grenadines,308,35296.76443,TRUE
+Saint Vincent and the Grenadines,116,98484.54468,TRUE
+Saint Vincent and the Grenadines,234,8162.890747,TRUE
+Saint Vincent and the Grenadines,88,138218.959,TRUE
+Saint Vincent and the Grenadines,227,78462,FALSE
+Saint Vincent and the Grenadines,8,21599.0332,TRUE
+Saint Vincent and the Grenadines,115,186672.4488,TRUE
+Saint Vincent and the Grenadines,146,28645.96233,TRUE
+Saint Vincent and the Grenadines,257,14862.84549,TRUE
+Saint Vincent and the Grenadines,39,10075.63454,TRUE
+Saint Vincent and the Grenadines,61,218943.5096,TRUE
+Saint Vincent and the Grenadines,76,100326.9844,TRUE
+Saint Vincent and the Grenadines,268,27005.25,TRUE
+Saint Vincent and the Grenadines,194,9390.783666,TRUE
+Saint Vincent and the Grenadines,198,4988,FALSE
+Saint Vincent and the Grenadines,245,11957.75,TRUE
+Saint Vincent and the Grenadines,86,15341.61704,TRUE
+Saint Vincent and the Grenadines,247,27947.125,TRUE
+Saint Vincent and the Grenadines,15,5922.875,TRUE
+Saint Vincent and the Grenadines,135,5719.346191,TRUE
+Saint Vincent and the Grenadines,65,4252.65625,TRUE
+Saint Vincent and the Grenadines,70,8796.273438,TRUE
+Saint Vincent and the Grenadines,314,4472.643433,TRUE
+Saint Vincent and the Grenadines,133,6124.625,TRUE
+Saint Vincent and the Grenadines,240,4373.4375,TRUE
+Saint Vincent and the Grenadines,148,23186,TRUE
+Saint Vincent and the Grenadines,31,5157,TRUE
+Samoa,4,20977.52128,TRUE
+Samoa,5,7484.490489,TRUE
+Samoa,7,111437.9893,TRUE
+Samoa,8,47030.54376,TRUE
+Samoa,17,33099.94094,TRUE
+Samoa,105,149702.6633,TRUE
+Samoa,120,115713.1489,TRUE
+Samoa,161,8730.264786,TRUE
+Samoa,169,16777.49735,TRUE
+Samoa,179,121608.9919,TRUE
+Samoa,180,7520.279265,TRUE
+Samoa,203,26179.47154,TRUE
+Samoa,205,158255.8483,TRUE
+Samoa,208,84004.18102,TRUE
+Samoa,219,80605.62094,TRUE
+Samoa,221,53059.48552,TRUE
+Samoa,229,16244.65912,TRUE
+Samoa,231,60255.26389,TRUE
+Samoa,235,172280.9273,TRUE
+Samoa,254,26952.37295,TRUE
+Samoa,84,9355.713607,TRUE
+Samoa,267,9372.487582,TRUE
+Samoa,282,423220.8453,TRUE
+Samoa,286,119498,FALSE
+Samoa,289,9979.922823,TRUE
+Samoa,316,72255.87156,TRUE
+Samoa,317,188762.6372,TRUE
+Samoa,318,32261.2753,TRUE
+Samoa,18,11273.75269,TRUE
+Samoa,19,77366.60983,TRUE
+Samoa,33,30270.38924,TRUE
+Samoa,40,180987.6885,TRUE
+Samoa,49,247408.5214,TRUE
+Samoa,54,175365.1249,TRUE
+Samoa,58,74040.89691,TRUE
+Samoa,59,22326.21725,TRUE
+Samoa,63,234336.5313,TRUE
+Samoa,90,194487.8189,TRUE
+Samoa,94,61002.28577,TRUE
+Samoa,101,138512.4356,TRUE
+Samoa,112,122104.9439,TRUE
+Samoa,138,17125.18189,TRUE
+Samoa,152,119704.6269,TRUE
+Samoa,154,96782.90416,TRUE
+Samoa,158,96473.15601,TRUE
+Samoa,200,22918.25267,TRUE
+Samoa,202,85300.04797,TRUE
+Samoa,206,183393.7134,TRUE
+Samoa,218,52990.31222,TRUE
+Samoa,238,116960.1876,TRUE
+Samoa,243,112174.5654,TRUE
+Samoa,259,55616.6005,TRUE
+Samoa,276,10950.60863,TRUE
+Samoa,279,177754.1672,TRUE
+Samoa,298,120463.1286,TRUE
+Samoa,305,46510,FALSE
+Samoa,306,131681.4608,TRUE
+Samoa,11,178064.2799,TRUE
+Samoa,16,50110,FALSE
+Samoa,48,27222.34375,TRUE
+Samoa,60,22383.25858,TRUE
+Samoa,63,11715.28525,TRUE
+Samoa,121,115777.4722,TRUE
+Samoa,128,9353.124815,TRUE
+Samoa,156,10200.29705,TRUE
+Samoa,217,21196.4891,TRUE
+Samoa,248,14225.32829,TRUE
+Samoa,270,9151.63574,TRUE
+Samoa,52,123408,FALSE
+Samoa,74,1832,FALSE
+Samoa,75,65490,FALSE
+Samoa,80,5171,FALSE
+Samoa,301,52195,FALSE
+Samoa,319,46846,FALSE
+Samoa,51,26504.47085,TRUE
+Samoa,53,6581.96824,TRUE
+Samoa,77,2886,FALSE
+Samoa,213,124295.9159,TRUE
+Samoa,228,285782,FALSE
+Samoa,269,15171.62496,TRUE
+Samoa,296,43692.55808,TRUE
+Samoa,175,369751,FALSE
+Samoa,12,36715.19395,TRUE
+Samoa,13,303239,FALSE
+Samoa,108,12577.92841,TRUE
+Samoa,165,14797.07017,TRUE
+Samoa,215,142156,FALSE
+Samoa,261,8946.089355,TRUE
+Samoa,281,136069.2843,TRUE
+Samoa,302,27087.34387,TRUE
+Samoa,310,36133,TRUE
+Samoa,106,13595.99028,TRUE
+Samoa,30,62885.73079,TRUE
+Samoa,91,126485.3041,TRUE
+Samoa,192,3780098.195,TRUE
+Samoa,249,70032.42373,TRUE
+Samoa,308,35296.76443,TRUE
+Samoa,116,98484.54468,TRUE
+Samoa,234,8162.890747,TRUE
+Samoa,88,138218.959,TRUE
+Samoa,227,9358.848173,TRUE
+Samoa,8,21599.0332,TRUE
+Samoa,115,186672.4488,TRUE
+Samoa,146,28645.96233,TRUE
+Samoa,257,14862.84549,TRUE
+Samoa,39,10075.63454,TRUE
+Samoa,61,218943.5096,TRUE
+Samoa,76,100326.9844,TRUE
+Samoa,268,27005.25,TRUE
+Samoa,194,9390.783666,TRUE
+Samoa,198,5299.135169,TRUE
+Samoa,245,11957.75,TRUE
+Samoa,86,15341.61704,TRUE
+Samoa,247,27947.125,TRUE
+Samoa,15,5922.875,TRUE
+Samoa,135,5719.346191,TRUE
+Samoa,65,4252.65625,TRUE
+Samoa,70,8796.273438,TRUE
+Samoa,314,4472.643433,TRUE
+Samoa,133,6124.625,TRUE
+Samoa,240,4373.4375,TRUE
+Samoa,148,23186,TRUE
+Samoa,31,5157,TRUE
+Sao Tome and Principe,4,20977.52128,TRUE
+Sao Tome and Principe,5,7484.490489,TRUE
+Sao Tome and Principe,7,111437.9893,TRUE
+Sao Tome and Principe,8,47030.54376,TRUE
+Sao Tome and Principe,17,33099.94094,TRUE
+Sao Tome and Principe,105,149702.6633,TRUE
+Sao Tome and Principe,120,115713.1489,TRUE
+Sao Tome and Principe,161,8730.264786,TRUE
+Sao Tome and Principe,169,20984,FALSE
+Sao Tome and Principe,179,121608.9919,TRUE
+Sao Tome and Principe,180,7520.279265,TRUE
+Sao Tome and Principe,203,26179.47154,TRUE
+Sao Tome and Principe,205,158255.8483,TRUE
+Sao Tome and Principe,208,84004.18102,TRUE
+Sao Tome and Principe,219,80605.62094,TRUE
+Sao Tome and Principe,221,53059.48552,TRUE
+Sao Tome and Principe,229,16244.65912,TRUE
+Sao Tome and Principe,231,60255.26389,TRUE
+Sao Tome and Principe,235,172280.9273,TRUE
+Sao Tome and Principe,254,26952.37295,TRUE
+Sao Tome and Principe,84,9355.713607,TRUE
+Sao Tome and Principe,267,9372.487582,TRUE
+Sao Tome and Principe,282,423220.8453,TRUE
+Sao Tome and Principe,286,760050.6713,TRUE
+Sao Tome and Principe,289,9979.922823,TRUE
+Sao Tome and Principe,316,72255.87156,TRUE
+Sao Tome and Principe,317,188762.6372,TRUE
+Sao Tome and Principe,318,32261.2753,TRUE
+Sao Tome and Principe,18,11273.75269,TRUE
+Sao Tome and Principe,19,77366.60983,TRUE
+Sao Tome and Principe,33,30270.38924,TRUE
+Sao Tome and Principe,40,180987.6885,TRUE
+Sao Tome and Principe,49,247408.5214,TRUE
+Sao Tome and Principe,54,175365.1249,TRUE
+Sao Tome and Principe,58,74040.89691,TRUE
+Sao Tome and Principe,59,22326.21725,TRUE
+Sao Tome and Principe,63,234336.5313,TRUE
+Sao Tome and Principe,90,194487.8189,TRUE
+Sao Tome and Principe,94,61002.28577,TRUE
+Sao Tome and Principe,101,138512.4356,TRUE
+Sao Tome and Principe,112,122104.9439,TRUE
+Sao Tome and Principe,138,17125.18189,TRUE
+Sao Tome and Principe,152,119704.6269,TRUE
+Sao Tome and Principe,154,96782.90416,TRUE
+Sao Tome and Principe,158,96473.15601,TRUE
+Sao Tome and Principe,200,22918.25267,TRUE
+Sao Tome and Principe,202,85300.04797,TRUE
+Sao Tome and Principe,206,183393.7134,TRUE
+Sao Tome and Principe,218,52990.31222,TRUE
+Sao Tome and Principe,238,116960.1876,TRUE
+Sao Tome and Principe,243,112174.5654,TRUE
+Sao Tome and Principe,259,55616.6005,TRUE
+Sao Tome and Principe,276,10950.60863,TRUE
+Sao Tome and Principe,279,177754.1672,TRUE
+Sao Tome and Principe,298,120463.1286,TRUE
+Sao Tome and Principe,305,15590.0347,TRUE
+Sao Tome and Principe,306,131681.4608,TRUE
+Sao Tome and Principe,11,178064.2799,TRUE
+Sao Tome and Principe,16,186608,FALSE
+Sao Tome and Principe,48,27222.34375,TRUE
+Sao Tome and Principe,60,22383.25858,TRUE
+Sao Tome and Principe,63,11715.28525,TRUE
+Sao Tome and Principe,121,115777.4722,TRUE
+Sao Tome and Principe,128,9353.124815,TRUE
+Sao Tome and Principe,156,10200.29705,TRUE
+Sao Tome and Principe,217,21196.4891,TRUE
+Sao Tome and Principe,248,14225.32829,TRUE
+Sao Tome and Principe,270,9151.63574,TRUE
+Sao Tome and Principe,52,36327,FALSE
+Sao Tome and Principe,74,1081,FALSE
+Sao Tome and Principe,75,40763,FALSE
+Sao Tome and Principe,80,49992.57574,TRUE
+Sao Tome and Principe,301,50951,FALSE
+Sao Tome and Principe,319,58442,FALSE
+Sao Tome and Principe,51,26504.47085,TRUE
+Sao Tome and Principe,53,6581.96824,TRUE
+Sao Tome and Principe,77,625,FALSE
+Sao Tome and Principe,213,95263,FALSE
+Sao Tome and Principe,228,133880.2683,TRUE
+Sao Tome and Principe,269,15171.62496,TRUE
+Sao Tome and Principe,296,43692.55808,TRUE
+Sao Tome and Principe,175,70802.39066,TRUE
+Sao Tome and Principe,12,36715.19395,TRUE
+Sao Tome and Principe,13,74728.86082,TRUE
+Sao Tome and Principe,108,12577.92841,TRUE
+Sao Tome and Principe,165,14797.07017,TRUE
+Sao Tome and Principe,215,105585.0293,TRUE
+Sao Tome and Principe,261,8946.089355,TRUE
+Sao Tome and Principe,281,136069.2843,TRUE
+Sao Tome and Principe,302,27087.34387,TRUE
+Sao Tome and Principe,310,36133,TRUE
+Sao Tome and Principe,106,13595.99028,TRUE
+Sao Tome and Principe,30,62885.73079,TRUE
+Sao Tome and Principe,91,126485.3041,TRUE
+Sao Tome and Principe,192,3780098.195,TRUE
+Sao Tome and Principe,249,70032.42373,TRUE
+Sao Tome and Principe,308,35296.76443,TRUE
+Sao Tome and Principe,116,98484.54468,TRUE
+Sao Tome and Principe,234,8162.890747,TRUE
+Sao Tome and Principe,88,138218.959,TRUE
+Sao Tome and Principe,227,9358.848173,TRUE
+Sao Tome and Principe,8,21599.0332,TRUE
+Sao Tome and Principe,115,186672.4488,TRUE
+Sao Tome and Principe,146,28645.96233,TRUE
+Sao Tome and Principe,257,14862.84549,TRUE
+Sao Tome and Principe,39,10075.63454,TRUE
+Sao Tome and Principe,61,218943.5096,TRUE
+Sao Tome and Principe,76,100326.9844,TRUE
+Sao Tome and Principe,268,27005.25,TRUE
+Sao Tome and Principe,194,9390.783666,TRUE
+Sao Tome and Principe,198,5299.135169,TRUE
+Sao Tome and Principe,245,11957.75,TRUE
+Sao Tome and Principe,86,15341.61704,TRUE
+Sao Tome and Principe,247,27947.125,TRUE
+Sao Tome and Principe,15,5922.875,TRUE
+Sao Tome and Principe,135,5719.346191,TRUE
+Sao Tome and Principe,65,2521,FALSE
+Sao Tome and Principe,70,8796.273438,TRUE
+Sao Tome and Principe,314,4472.643433,TRUE
+Sao Tome and Principe,133,6124.625,TRUE
+Sao Tome and Principe,240,4373.4375,TRUE
+Sao Tome and Principe,148,23186,TRUE
+Sao Tome and Principe,31,5157,TRUE
+Saudi Arabia,4,20977.52128,TRUE
+Saudi Arabia,5,7484.490489,TRUE
+Saudi Arabia,7,111437.9893,TRUE
+Saudi Arabia,8,47030.54376,TRUE
+Saudi Arabia,17,67553,FALSE
+Saudi Arabia,105,149702.6633,TRUE
+Saudi Arabia,120,108669,FALSE
+Saudi Arabia,161,8730.264786,TRUE
+Saudi Arabia,169,67057,FALSE
+Saudi Arabia,179,193115,FALSE
+Saudi Arabia,180,17757,FALSE
+Saudi Arabia,203,26179.47154,TRUE
+Saudi Arabia,205,274300,FALSE
+Saudi Arabia,208,84004.18102,TRUE
+Saudi Arabia,219,80605.62094,TRUE
+Saudi Arabia,221,53059.48552,TRUE
+Saudi Arabia,229,16244.65912,TRUE
+Saudi Arabia,231,60255.26389,TRUE
+Saudi Arabia,235,261036,FALSE
+Saudi Arabia,254,26952.37295,TRUE
+Saudi Arabia,84,9355.713607,TRUE
+Saudi Arabia,267,20844,FALSE
+Saudi Arabia,282,423220.8453,TRUE
+Saudi Arabia,286,760050.6713,TRUE
+Saudi Arabia,289,9979.922823,TRUE
+Saudi Arabia,316,72255.87156,TRUE
+Saudi Arabia,317,213993,FALSE
+Saudi Arabia,318,62669,FALSE
+Saudi Arabia,18,11273.75269,TRUE
+Saudi Arabia,19,77366.60983,TRUE
+Saudi Arabia,33,30270.38924,TRUE
+Saudi Arabia,40,11420,FALSE
+Saudi Arabia,49,176418,FALSE
+Saudi Arabia,54,175365.1249,TRUE
+Saudi Arabia,58,74040.89691,TRUE
+Saudi Arabia,59,22326.21725,TRUE
+Saudi Arabia,63,234336.5313,TRUE
+Saudi Arabia,90,797757,FALSE
+Saudi Arabia,94,66284,FALSE
+Saudi Arabia,101,154917,FALSE
+Saudi Arabia,112,122104.9439,TRUE
+Saudi Arabia,138,17125.18189,TRUE
+Saudi Arabia,152,119704.6269,TRUE
+Saudi Arabia,154,96782.90416,TRUE
+Saudi Arabia,158,96473.15601,TRUE
+Saudi Arabia,200,22918.25267,TRUE
+Saudi Arabia,202,143714,FALSE
+Saudi Arabia,206,183393.7134,TRUE
+Saudi Arabia,218,52990.31222,TRUE
+Saudi Arabia,238,208632,FALSE
+Saudi Arabia,243,112174.5654,TRUE
+Saudi Arabia,259,55616.6005,TRUE
+Saudi Arabia,276,10950.60863,TRUE
+Saudi Arabia,279,177754.1672,TRUE
+Saudi Arabia,298,120463.1286,TRUE
+Saudi Arabia,305,15590.0347,TRUE
+Saudi Arabia,306,337675,FALSE
+Saudi Arabia,11,178064.2799,TRUE
+Saudi Arabia,16,74389.59543,TRUE
+Saudi Arabia,48,27222.34375,TRUE
+Saudi Arabia,60,22383.25858,TRUE
+Saudi Arabia,63,11715.28525,TRUE
+Saudi Arabia,121,115777.4722,TRUE
+Saudi Arabia,128,40476,FALSE
+Saudi Arabia,156,10200.29705,TRUE
+Saudi Arabia,217,21196.4891,TRUE
+Saudi Arabia,248,14225.32829,TRUE
+Saudi Arabia,270,27781,FALSE
+Saudi Arabia,52,72720.10141,TRUE
+Saudi Arabia,74,4541.36112,TRUE
+Saudi Arabia,75,47178.96176,TRUE
+Saudi Arabia,80,49992.57574,TRUE
+Saudi Arabia,301,113987.8459,TRUE
+Saudi Arabia,319,89190.44102,TRUE
+Saudi Arabia,51,26504.47085,TRUE
+Saudi Arabia,53,6581.96824,TRUE
+Saudi Arabia,77,5993.147024,TRUE
+Saudi Arabia,213,124295.9159,TRUE
+Saudi Arabia,228,133880.2683,TRUE
+Saudi Arabia,269,15171.62496,TRUE
+Saudi Arabia,296,43692.55808,TRUE
+Saudi Arabia,175,70802.39066,TRUE
+Saudi Arabia,12,36715.19395,TRUE
+Saudi Arabia,13,74728.86082,TRUE
+Saudi Arabia,108,12577.92841,TRUE
+Saudi Arabia,165,14797.07017,TRUE
+Saudi Arabia,215,105585.0293,TRUE
+Saudi Arabia,261,8946.089355,TRUE
+Saudi Arabia,281,136069.2843,TRUE
+Saudi Arabia,302,27087.34387,TRUE
+Saudi Arabia,310,36133,TRUE
+Saudi Arabia,106,13595.99028,TRUE
+Saudi Arabia,30,62885.73079,TRUE
+Saudi Arabia,91,126485.3041,TRUE
+Saudi Arabia,192,3780098.195,TRUE
+Saudi Arabia,249,70032.42373,TRUE
+Saudi Arabia,308,35296.76443,TRUE
+Saudi Arabia,116,98484.54468,TRUE
+Saudi Arabia,234,8162.890747,TRUE
+Saudi Arabia,88,138218.959,TRUE
+Saudi Arabia,227,9358.848173,TRUE
+Saudi Arabia,8,21599.0332,TRUE
+Saudi Arabia,115,186672.4488,TRUE
+Saudi Arabia,146,28645.96233,TRUE
+Saudi Arabia,257,14862.84549,TRUE
+Saudi Arabia,39,10075.63454,TRUE
+Saudi Arabia,61,218943.5096,TRUE
+Saudi Arabia,76,100326.9844,TRUE
+Saudi Arabia,268,27005.25,TRUE
+Saudi Arabia,194,9390.783666,TRUE
+Saudi Arabia,198,5299.135169,TRUE
+Saudi Arabia,245,11957.75,TRUE
+Saudi Arabia,86,15341.61704,TRUE
+Saudi Arabia,247,27947.125,TRUE
+Saudi Arabia,15,5922.875,TRUE
+Saudi Arabia,135,5719.346191,TRUE
+Saudi Arabia,65,4252.65625,TRUE
+Saudi Arabia,70,8796.273438,TRUE
+Saudi Arabia,314,4472.643433,TRUE
+Saudi Arabia,133,6124.625,TRUE
+Saudi Arabia,240,4373.4375,TRUE
+Saudi Arabia,148,23186,TRUE
+Saudi Arabia,31,5157,TRUE
+Senegal,4,20977.52128,TRUE
+Senegal,5,7484.490489,TRUE
+Senegal,7,111437.9893,TRUE
+Senegal,8,47030.54376,TRUE
+Senegal,17,33099.94094,TRUE
+Senegal,105,149702.6633,TRUE
+Senegal,120,115713.1489,TRUE
+Senegal,161,8730.264786,TRUE
+Senegal,169,16566,FALSE
+Senegal,179,121608.9919,TRUE
+Senegal,180,7140,FALSE
+Senegal,203,26179.47154,TRUE
+Senegal,205,296964,FALSE
+Senegal,208,71307,FALSE
+Senegal,219,80605.62094,TRUE
+Senegal,221,53059.48552,TRUE
+Senegal,229,16244.65912,TRUE
+Senegal,231,60255.26389,TRUE
+Senegal,235,220141,FALSE
+Senegal,254,39289,FALSE
+Senegal,84,9847,FALSE
+Senegal,267,5714,FALSE
+Senegal,282,423220.8453,TRUE
+Senegal,286,1180853,FALSE
+Senegal,289,9979.922823,TRUE
+Senegal,316,72255.87156,TRUE
+Senegal,317,122910,FALSE
+Senegal,318,32261.2753,TRUE
+Senegal,18,11273.75269,TRUE
+Senegal,19,127792,FALSE
+Senegal,33,30270.38924,TRUE
+Senegal,40,171602,FALSE
+Senegal,49,91651,FALSE
+Senegal,54,175365.1249,TRUE
+Senegal,58,74040.89691,TRUE
+Senegal,59,22326.21725,TRUE
+Senegal,63,71626,FALSE
+Senegal,90,194487.8189,TRUE
+Senegal,94,61002.28577,TRUE
+Senegal,101,99380,FALSE
+Senegal,112,122104.9439,TRUE
+Senegal,138,17125.18189,TRUE
+Senegal,152,119704.6269,TRUE
+Senegal,154,96782.90416,TRUE
+Senegal,158,96473.15601,TRUE
+Senegal,200,22918.25267,TRUE
+Senegal,202,293139,FALSE
+Senegal,206,183393.7134,TRUE
+Senegal,218,52990.31222,TRUE
+Senegal,238,234989,FALSE
+Senegal,243,112174.5654,TRUE
+Senegal,259,55616.6005,TRUE
+Senegal,276,10950.60863,TRUE
+Senegal,279,177754.1672,TRUE
+Senegal,298,120463.1286,TRUE
+Senegal,305,15590.0347,TRUE
+Senegal,306,258950,FALSE
+Senegal,11,178064.2799,TRUE
+Senegal,16,255269,FALSE
+Senegal,48,27222.34375,TRUE
+Senegal,60,22383.25858,TRUE
+Senegal,63,71626,FALSE
+Senegal,121,115777.4722,TRUE
+Senegal,128,8170,FALSE
+Senegal,156,10200.29705,TRUE
+Senegal,217,21196.4891,TRUE
+Senegal,248,14225.32829,TRUE
+Senegal,270,8581,FALSE
+Senegal,52,107132,FALSE
+Senegal,74,4541.36112,TRUE
+Senegal,75,30976,FALSE
+Senegal,80,49992.57574,TRUE
+Senegal,301,113987.8459,TRUE
+Senegal,319,89190.44102,TRUE
+Senegal,51,3888,FALSE
+Senegal,53,6581.96824,TRUE
+Senegal,77,5993.147024,TRUE
+Senegal,213,112534,FALSE
+Senegal,228,133880.2683,TRUE
+Senegal,269,15171.62496,TRUE
+Senegal,296,354370,FALSE
+Senegal,175,64387,FALSE
+Senegal,12,36715.19395,TRUE
+Senegal,13,74728.86082,TRUE
+Senegal,108,12577.92841,TRUE
+Senegal,165,14797.07017,TRUE
+Senegal,215,105585.0293,TRUE
+Senegal,261,8946.089355,TRUE
+Senegal,281,136069.2843,TRUE
+Senegal,302,27087.34387,TRUE
+Senegal,310,36133,TRUE
+Senegal,106,13595.99028,TRUE
+Senegal,30,62885.73079,TRUE
+Senegal,91,126485.3041,TRUE
+Senegal,192,3780098.195,TRUE
+Senegal,249,70032.42373,TRUE
+Senegal,308,35296.76443,TRUE
+Senegal,116,98484.54468,TRUE
+Senegal,234,8162.890747,TRUE
+Senegal,88,138218.959,TRUE
+Senegal,227,9358.848173,TRUE
+Senegal,8,21599.0332,TRUE
+Senegal,115,186672.4488,TRUE
+Senegal,146,28645.96233,TRUE
+Senegal,257,14862.84549,TRUE
+Senegal,39,10075.63454,TRUE
+Senegal,61,218943.5096,TRUE
+Senegal,76,100326.9844,TRUE
+Senegal,268,27005.25,TRUE
+Senegal,194,9390.783666,TRUE
+Senegal,198,5299.135169,TRUE
+Senegal,245,11957.75,TRUE
+Senegal,86,3689,FALSE
+Senegal,247,27947.125,TRUE
+Senegal,15,5922.875,TRUE
+Senegal,135,5719.346191,TRUE
+Senegal,65,4252.65625,TRUE
+Senegal,70,8796.273438,TRUE
+Senegal,314,4472.643433,TRUE
+Senegal,133,6124.625,TRUE
+Senegal,240,4373.4375,TRUE
+Senegal,148,23186,TRUE
+Senegal,31,5157,TRUE
+Serbia,4,20977.52128,TRUE
+Serbia,5,13078,FALSE
+Serbia,7,138336,FALSE
+Serbia,8,45183,FALSE
+Serbia,17,43210,FALSE
+Serbia,105,149702.6633,TRUE
+Serbia,120,68784,FALSE
+Serbia,161,8730.264786,TRUE
+Serbia,169,73030,FALSE
+Serbia,179,121608.9919,TRUE
+Serbia,180,9116,FALSE
+Serbia,203,26179.47154,TRUE
+Serbia,205,121291,FALSE
+Serbia,208,84004.18102,TRUE
+Serbia,219,108534,FALSE
+Serbia,221,86944,FALSE
+Serbia,229,16244.65912,TRUE
+Serbia,231,59413,FALSE
+Serbia,235,178120,FALSE
+Serbia,254,26952.37295,TRUE
+Serbia,84,9355.713607,TRUE
+Serbia,267,9372.487582,TRUE
+Serbia,282,545090,FALSE
+Serbia,286,760050.6713,TRUE
+Serbia,289,31010,FALSE
+Serbia,316,32609,FALSE
+Serbia,317,329400,FALSE
+Serbia,318,48470,FALSE
+Serbia,18,10670,FALSE
+Serbia,19,17589,FALSE
+Serbia,33,30270.38924,TRUE
+Serbia,40,268420,FALSE
+Serbia,49,196791,FALSE
+Serbia,54,175365.1249,TRUE
+Serbia,58,46923,FALSE
+Serbia,59,22326.21725,TRUE
+Serbia,63,23581,FALSE
+Serbia,90,143271,FALSE
+Serbia,94,61002.28577,TRUE
+Serbia,101,205182,FALSE
+Serbia,112,30380,FALSE
+Serbia,138,13569,FALSE
+Serbia,152,119704.6269,TRUE
+Serbia,154,96782.90416,TRUE
+Serbia,158,96473.15601,TRUE
+Serbia,200,29541,FALSE
+Serbia,202,85300.04797,TRUE
+Serbia,206,183393.7134,TRUE
+Serbia,218,54849,FALSE
+Serbia,238,116960.1876,TRUE
+Serbia,243,66006,FALSE
+Serbia,259,29033,FALSE
+Serbia,276,31610,FALSE
+Serbia,279,177754.1672,TRUE
+Serbia,298,120463.1286,TRUE
+Serbia,305,14859,FALSE
+Serbia,306,159420,FALSE
+Serbia,11,178064.2799,TRUE
+Serbia,16,74389.59543,TRUE
+Serbia,48,27222.34375,TRUE
+Serbia,60,22383.25858,TRUE
+Serbia,63,23581,FALSE
+Serbia,121,115777.4722,TRUE
+Serbia,128,9353.124815,TRUE
+Serbia,156,10200.29705,TRUE
+Serbia,217,21196.4891,TRUE
+Serbia,248,29240,FALSE
+Serbia,270,30297,FALSE
+Serbia,52,72720.10141,TRUE
+Serbia,74,4541.36112,TRUE
+Serbia,75,47178.96176,TRUE
+Serbia,80,204877,FALSE
+Serbia,301,113987.8459,TRUE
+Serbia,319,89190.44102,TRUE
+Serbia,51,26504.47085,TRUE
+Serbia,53,6581.96824,TRUE
+Serbia,77,5993.147024,TRUE
+Serbia,213,124295.9159,TRUE
+Serbia,228,133880.2683,TRUE
+Serbia,269,15171.62496,TRUE
+Serbia,296,43692.55808,TRUE
+Serbia,175,70802.39066,TRUE
+Serbia,12,36715.19395,TRUE
+Serbia,13,74728.86082,TRUE
+Serbia,108,12577.92841,TRUE
+Serbia,165,14797.07017,TRUE
+Serbia,215,105585.0293,TRUE
+Serbia,261,8946.089355,TRUE
+Serbia,281,39507,FALSE
+Serbia,302,27087.34387,TRUE
+Serbia,310,36133,TRUE
+Serbia,106,13595.99028,TRUE
+Serbia,30,62885.73079,TRUE
+Serbia,91,126485.3041,TRUE
+Serbia,192,3780098.195,TRUE
+Serbia,249,56041,FALSE
+Serbia,308,43250,FALSE
+Serbia,116,98484.54468,TRUE
+Serbia,234,11230,FALSE
+Serbia,88,138218.959,TRUE
+Serbia,227,9358.848173,TRUE
+Serbia,8,45183,FALSE
+Serbia,115,186672.4488,TRUE
+Serbia,146,28645.96233,TRUE
+Serbia,257,14862.84549,TRUE
+Serbia,39,10075.63454,TRUE
+Serbia,61,377805,FALSE
+Serbia,76,100326.9844,TRUE
+Serbia,268,27005.25,TRUE
+Serbia,194,8148,FALSE
+Serbia,198,5299.135169,TRUE
+Serbia,245,11957.75,TRUE
+Serbia,86,33703,FALSE
+Serbia,247,27947.125,TRUE
+Serbia,15,5922.875,TRUE
+Serbia,135,5719.346191,TRUE
+Serbia,65,4252.65625,TRUE
+Serbia,70,8796.273438,TRUE
+Serbia,314,4472.643433,TRUE
+Serbia,133,6124.625,TRUE
+Serbia,240,4373.4375,TRUE
+Serbia,148,23186,TRUE
+Serbia,31,5157,TRUE
+Seychelles,4,20977.52128,TRUE
+Seychelles,5,7484.490489,TRUE
+Seychelles,7,111437.9893,TRUE
+Seychelles,8,47030.54376,TRUE
+Seychelles,17,33099.94094,TRUE
+Seychelles,105,149702.6633,TRUE
+Seychelles,120,115713.1489,TRUE
+Seychelles,161,8730.264786,TRUE
+Seychelles,169,16777.49735,TRUE
+Seychelles,179,121608.9919,TRUE
+Seychelles,180,7520.279265,TRUE
+Seychelles,203,26179.47154,TRUE
+Seychelles,205,158255.8483,TRUE
+Seychelles,208,114939,FALSE
+Seychelles,219,80605.62094,TRUE
+Seychelles,221,53059.48552,TRUE
+Seychelles,229,16244.65912,TRUE
+Seychelles,231,60255.26389,TRUE
+Seychelles,235,172280.9273,TRUE
+Seychelles,254,26952.37295,TRUE
+Seychelles,84,9355.713607,TRUE
+Seychelles,267,9372.487582,TRUE
+Seychelles,282,423220.8453,TRUE
+Seychelles,286,760050.6713,TRUE
+Seychelles,289,9979.922823,TRUE
+Seychelles,316,72255.87156,TRUE
+Seychelles,317,188762.6372,TRUE
+Seychelles,318,32261.2753,TRUE
+Seychelles,18,11273.75269,TRUE
+Seychelles,19,77366.60983,TRUE
+Seychelles,33,30270.38924,TRUE
+Seychelles,40,180987.6885,TRUE
+Seychelles,49,247408.5214,TRUE
+Seychelles,54,175365.1249,TRUE
+Seychelles,58,74040.89691,TRUE
+Seychelles,59,22326.21725,TRUE
+Seychelles,63,234336.5313,TRUE
+Seychelles,90,194487.8189,TRUE
+Seychelles,94,61002.28577,TRUE
+Seychelles,101,138512.4356,TRUE
+Seychelles,112,122104.9439,TRUE
+Seychelles,138,17125.18189,TRUE
+Seychelles,152,119704.6269,TRUE
+Seychelles,154,195494,FALSE
+Seychelles,158,96473.15601,TRUE
+Seychelles,200,22918.25267,TRUE
+Seychelles,202,85300.04797,TRUE
+Seychelles,206,183393.7134,TRUE
+Seychelles,218,52990.31222,TRUE
+Seychelles,238,116960.1876,TRUE
+Seychelles,243,112174.5654,TRUE
+Seychelles,259,55616.6005,TRUE
+Seychelles,276,10950.60863,TRUE
+Seychelles,279,177754.1672,TRUE
+Seychelles,298,120463.1286,TRUE
+Seychelles,305,15590.0347,TRUE
+Seychelles,306,65555,FALSE
+Seychelles,11,178064.2799,TRUE
+Seychelles,16,201298,FALSE
+Seychelles,48,27222.34375,TRUE
+Seychelles,60,22383.25858,TRUE
+Seychelles,63,11715.28525,TRUE
+Seychelles,121,115777.4722,TRUE
+Seychelles,128,9353.124815,TRUE
+Seychelles,156,10200.29705,TRUE
+Seychelles,217,21196.4891,TRUE
+Seychelles,248,14225.32829,TRUE
+Seychelles,270,9151.63574,TRUE
+Seychelles,52,122395,FALSE
+Seychelles,74,4541.36112,TRUE
+Seychelles,75,45996,FALSE
+Seychelles,80,49992.57574,TRUE
+Seychelles,301,113987.8459,TRUE
+Seychelles,319,89190.44102,TRUE
+Seychelles,51,26504.47085,TRUE
+Seychelles,53,6581.96824,TRUE
+Seychelles,77,5993.147024,TRUE
+Seychelles,213,124295.9159,TRUE
+Seychelles,228,154057,FALSE
+Seychelles,269,15171.62496,TRUE
+Seychelles,296,43692.55808,TRUE
+Seychelles,175,81552,FALSE
+Seychelles,12,36715.19395,TRUE
+Seychelles,13,112956,FALSE
+Seychelles,108,12577.92841,TRUE
+Seychelles,165,14797.07017,TRUE
+Seychelles,215,105585.0293,TRUE
+Seychelles,261,8946.089355,TRUE
+Seychelles,281,136069.2843,TRUE
+Seychelles,302,4674,FALSE
+Seychelles,310,36133,TRUE
+Seychelles,106,13595.99028,TRUE
+Seychelles,30,62885.73079,TRUE
+Seychelles,91,126485.3041,TRUE
+Seychelles,192,3780098.195,TRUE
+Seychelles,249,70032.42373,TRUE
+Seychelles,308,35296.76443,TRUE
+Seychelles,116,98484.54468,TRUE
+Seychelles,234,8162.890747,TRUE
+Seychelles,88,138218.959,TRUE
+Seychelles,227,9358.848173,TRUE
+Seychelles,8,21599.0332,TRUE
+Seychelles,115,186672.4488,TRUE
+Seychelles,146,28645.96233,TRUE
+Seychelles,257,14862.84549,TRUE
+Seychelles,39,10075.63454,TRUE
+Seychelles,61,218943.5096,TRUE
+Seychelles,76,100326.9844,TRUE
+Seychelles,268,27005.25,TRUE
+Seychelles,194,9390.783666,TRUE
+Seychelles,198,5299.135169,TRUE
+Seychelles,245,11957.75,TRUE
+Seychelles,86,15341.61704,TRUE
+Seychelles,247,27947.125,TRUE
+Seychelles,15,5922.875,TRUE
+Seychelles,135,5719.346191,TRUE
+Seychelles,65,466,FALSE
+Seychelles,70,8796.273438,TRUE
+Seychelles,314,4472.643433,TRUE
+Seychelles,133,6124.625,TRUE
+Seychelles,240,4373.4375,TRUE
+Seychelles,148,23186,TRUE
+Seychelles,31,5157,TRUE
+Sierra Leone,4,20977.52128,TRUE
+Sierra Leone,5,7484.490489,TRUE
+Sierra Leone,7,111437.9893,TRUE
+Sierra Leone,8,47030.54376,TRUE
+Sierra Leone,17,33099.94094,TRUE
+Sierra Leone,105,149702.6633,TRUE
+Sierra Leone,120,115713.1489,TRUE
+Sierra Leone,161,8730.264786,TRUE
+Sierra Leone,169,3332,FALSE
+Sierra Leone,179,121608.9919,TRUE
+Sierra Leone,180,10659,FALSE
+Sierra Leone,203,26179.47154,TRUE
+Sierra Leone,205,158255.8483,TRUE
+Sierra Leone,208,84004.18102,TRUE
+Sierra Leone,219,80605.62094,TRUE
+Sierra Leone,221,53059.48552,TRUE
+Sierra Leone,229,16244.65912,TRUE
+Sierra Leone,231,60255.26389,TRUE
+Sierra Leone,235,172280.9273,TRUE
+Sierra Leone,254,20691,FALSE
+Sierra Leone,84,9355.713607,TRUE
+Sierra Leone,267,5331,FALSE
+Sierra Leone,282,423220.8453,TRUE
+Sierra Leone,286,698113,FALSE
+Sierra Leone,289,9979.922823,TRUE
+Sierra Leone,316,72255.87156,TRUE
+Sierra Leone,317,188762.6372,TRUE
+Sierra Leone,318,32261.2753,TRUE
+Sierra Leone,18,11273.75269,TRUE
+Sierra Leone,19,77366.60983,TRUE
+Sierra Leone,33,9964,FALSE
+Sierra Leone,40,180987.6885,TRUE
+Sierra Leone,49,247408.5214,TRUE
+Sierra Leone,54,175365.1249,TRUE
+Sierra Leone,58,74040.89691,TRUE
+Sierra Leone,59,22326.21725,TRUE
+Sierra Leone,63,33446,FALSE
+Sierra Leone,90,194487.8189,TRUE
+Sierra Leone,94,61002.28577,TRUE
+Sierra Leone,101,138512.4356,TRUE
+Sierra Leone,112,122104.9439,TRUE
+Sierra Leone,138,17125.18189,TRUE
+Sierra Leone,152,119704.6269,TRUE
+Sierra Leone,154,96782.90416,TRUE
+Sierra Leone,158,96473.15601,TRUE
+Sierra Leone,200,22918.25267,TRUE
+Sierra Leone,202,85300.04797,TRUE
+Sierra Leone,206,183393.7134,TRUE
+Sierra Leone,218,52990.31222,TRUE
+Sierra Leone,238,116960.1876,TRUE
+Sierra Leone,243,112174.5654,TRUE
+Sierra Leone,259,55616.6005,TRUE
+Sierra Leone,276,10950.60863,TRUE
+Sierra Leone,279,177754.1672,TRUE
+Sierra Leone,298,120463.1286,TRUE
+Sierra Leone,305,4865,FALSE
+Sierra Leone,306,90767,FALSE
+Sierra Leone,11,178064.2799,TRUE
+Sierra Leone,16,74389.59543,TRUE
+Sierra Leone,48,27222.34375,TRUE
+Sierra Leone,60,22383.25858,TRUE
+Sierra Leone,63,33446,FALSE
+Sierra Leone,121,115777.4722,TRUE
+Sierra Leone,128,8316,FALSE
+Sierra Leone,156,10200.29705,TRUE
+Sierra Leone,217,8627,FALSE
+Sierra Leone,248,14225.32829,TRUE
+Sierra Leone,270,8738,FALSE
+Sierra Leone,52,120851,FALSE
+Sierra Leone,74,3621,FALSE
+Sierra Leone,75,9701,FALSE
+Sierra Leone,80,49992.57574,TRUE
+Sierra Leone,301,25219,FALSE
+Sierra Leone,319,89190.44102,TRUE
+Sierra Leone,51,26504.47085,TRUE
+Sierra Leone,53,6581.96824,TRUE
+Sierra Leone,77,25557,FALSE
+Sierra Leone,213,77185,FALSE
+Sierra Leone,228,133880.2683,TRUE
+Sierra Leone,269,15171.62496,TRUE
+Sierra Leone,296,60313,FALSE
+Sierra Leone,175,32572,FALSE
+Sierra Leone,12,36715.19395,TRUE
+Sierra Leone,13,74728.86082,TRUE
+Sierra Leone,108,12577.92841,TRUE
+Sierra Leone,165,14797.07017,TRUE
+Sierra Leone,215,105585.0293,TRUE
+Sierra Leone,261,8946.089355,TRUE
+Sierra Leone,281,136069.2843,TRUE
+Sierra Leone,302,27087.34387,TRUE
+Sierra Leone,310,36133,TRUE
+Sierra Leone,106,13595.99028,TRUE
+Sierra Leone,30,62885.73079,TRUE
+Sierra Leone,91,126485.3041,TRUE
+Sierra Leone,192,3780098.195,TRUE
+Sierra Leone,249,70032.42373,TRUE
+Sierra Leone,308,35296.76443,TRUE
+Sierra Leone,116,98484.54468,TRUE
+Sierra Leone,234,8162.890747,TRUE
+Sierra Leone,88,138218.959,TRUE
+Sierra Leone,227,9358.848173,TRUE
+Sierra Leone,8,21599.0332,TRUE
+Sierra Leone,115,186672.4488,TRUE
+Sierra Leone,146,28645.96233,TRUE
+Sierra Leone,257,14862.84549,TRUE
+Sierra Leone,39,10075.63454,TRUE
+Sierra Leone,61,218943.5096,TRUE
+Sierra Leone,76,100326.9844,TRUE
+Sierra Leone,268,27005.25,TRUE
+Sierra Leone,194,9390.783666,TRUE
+Sierra Leone,198,5299.135169,TRUE
+Sierra Leone,245,11957.75,TRUE
+Sierra Leone,86,15341.61704,TRUE
+Sierra Leone,247,27947.125,TRUE
+Sierra Leone,15,5922.875,TRUE
+Sierra Leone,135,5719.346191,TRUE
+Sierra Leone,65,4252.65625,TRUE
+Sierra Leone,70,8796.273438,TRUE
+Sierra Leone,314,4472.643433,TRUE
+Sierra Leone,133,6124.625,TRUE
+Sierra Leone,240,4373.4375,TRUE
+Sierra Leone,148,23186,TRUE
+Sierra Leone,31,5157,TRUE
+Singapore,4,20977.52128,TRUE
+Singapore,5,7484.490489,TRUE
+Singapore,7,111437.9893,TRUE
+Singapore,8,47030.54376,TRUE
+Singapore,17,33099.94094,TRUE
+Singapore,105,149702.6633,TRUE
+Singapore,120,115713.1489,TRUE
+Singapore,161,8730.264786,TRUE
+Singapore,169,16777.49735,TRUE
+Singapore,179,121608.9919,TRUE
+Singapore,180,7520.279265,TRUE
+Singapore,203,26179.47154,TRUE
+Singapore,205,158255.8483,TRUE
+Singapore,208,84004.18102,TRUE
+Singapore,219,80605.62094,TRUE
+Singapore,221,53059.48552,TRUE
+Singapore,229,16244.65912,TRUE
+Singapore,231,60255.26389,TRUE
+Singapore,235,172280.9273,TRUE
+Singapore,254,26952.37295,TRUE
+Singapore,84,9355.713607,TRUE
+Singapore,267,9372.487582,TRUE
+Singapore,282,423220.8453,TRUE
+Singapore,286,760050.6713,TRUE
+Singapore,289,9979.922823,TRUE
+Singapore,316,72255.87156,TRUE
+Singapore,317,188762.6372,TRUE
+Singapore,318,32261.2753,TRUE
+Singapore,18,11273.75269,TRUE
+Singapore,19,77366.60983,TRUE
+Singapore,33,30270.38924,TRUE
+Singapore,40,198064,FALSE
+Singapore,49,247408.5214,TRUE
+Singapore,54,175365.1249,TRUE
+Singapore,58,74040.89691,TRUE
+Singapore,59,22326.21725,TRUE
+Singapore,63,234336.5313,TRUE
+Singapore,90,194487.8189,TRUE
+Singapore,94,61002.28577,TRUE
+Singapore,101,138512.4356,TRUE
+Singapore,112,122104.9439,TRUE
+Singapore,138,17125.18189,TRUE
+Singapore,152,119704.6269,TRUE
+Singapore,154,96782.90416,TRUE
+Singapore,158,254397,FALSE
+Singapore,200,22918.25267,TRUE
+Singapore,202,85300.04797,TRUE
+Singapore,206,183393.7134,TRUE
+Singapore,218,52990.31222,TRUE
+Singapore,238,116960.1876,TRUE
+Singapore,243,112174.5654,TRUE
+Singapore,259,55616.6005,TRUE
+Singapore,276,10950.60863,TRUE
+Singapore,279,204833,FALSE
+Singapore,298,120463.1286,TRUE
+Singapore,305,19571,FALSE
+Singapore,306,110844,FALSE
+Singapore,11,178064.2799,TRUE
+Singapore,16,74389.59543,TRUE
+Singapore,48,27222.34375,TRUE
+Singapore,60,22383.25858,TRUE
+Singapore,63,11715.28525,TRUE
+Singapore,121,115777.4722,TRUE
+Singapore,128,9353.124815,TRUE
+Singapore,156,10200.29705,TRUE
+Singapore,217,21196.4891,TRUE
+Singapore,248,14225.32829,TRUE
+Singapore,270,9151.63574,TRUE
+Singapore,52,44368,FALSE
+Singapore,74,4541.36112,TRUE
+Singapore,75,79322,FALSE
+Singapore,80,49992.57574,TRUE
+Singapore,301,113987.8459,TRUE
+Singapore,319,89190.44102,TRUE
+Singapore,51,26504.47085,TRUE
+Singapore,53,6581.96824,TRUE
+Singapore,77,5993.147024,TRUE
+Singapore,213,124295.9159,TRUE
+Singapore,228,133880.2683,TRUE
+Singapore,269,15171.62496,TRUE
+Singapore,296,43692.55808,TRUE
+Singapore,175,70802.39066,TRUE
+Singapore,12,36715.19395,TRUE
+Singapore,13,74728.86082,TRUE
+Singapore,108,12577.92841,TRUE
+Singapore,165,14797.07017,TRUE
+Singapore,215,105585.0293,TRUE
+Singapore,261,8946.089355,TRUE
+Singapore,281,136069.2843,TRUE
+Singapore,302,27087.34387,TRUE
+Singapore,310,36133,TRUE
+Singapore,106,13595.99028,TRUE
+Singapore,30,62885.73079,TRUE
+Singapore,91,126485.3041,TRUE
+Singapore,192,191387,FALSE
+Singapore,249,70032.42373,TRUE
+Singapore,308,35296.76443,TRUE
+Singapore,116,98484.54468,TRUE
+Singapore,234,8162.890747,TRUE
+Singapore,88,138218.959,TRUE
+Singapore,227,9358.848173,TRUE
+Singapore,8,21599.0332,TRUE
+Singapore,115,186672.4488,TRUE
+Singapore,146,28645.96233,TRUE
+Singapore,257,14862.84549,TRUE
+Singapore,39,10075.63454,TRUE
+Singapore,61,218943.5096,TRUE
+Singapore,76,100326.9844,TRUE
+Singapore,268,27005.25,TRUE
+Singapore,194,9390.783666,TRUE
+Singapore,198,5299.135169,TRUE
+Singapore,245,11957.75,TRUE
+Singapore,86,15341.61704,TRUE
+Singapore,247,27947.125,TRUE
+Singapore,15,5922.875,TRUE
+Singapore,135,5719.346191,TRUE
+Singapore,65,4252.65625,TRUE
+Singapore,70,8796.273438,TRUE
+Singapore,314,4472.643433,TRUE
+Singapore,133,6124.625,TRUE
+Singapore,240,4373.4375,TRUE
+Singapore,148,23186,TRUE
+Singapore,31,5157,TRUE
+Slovakia,4,20977.52128,TRUE
+Slovakia,5,12649,FALSE
+Slovakia,7,89667,FALSE
+Slovakia,8,14968,FALSE
+Slovakia,17,50848,FALSE
+Slovakia,105,149702.6633,TRUE
+Slovakia,120,43425,FALSE
+Slovakia,161,12509,FALSE
+Slovakia,169,92537,FALSE
+Slovakia,179,95897,FALSE
+Slovakia,180,15439,FALSE
+Slovakia,203,26179.47154,TRUE
+Slovakia,205,366733,FALSE
+Slovakia,208,84004.18102,TRUE
+Slovakia,219,30899,FALSE
+Slovakia,221,39714,FALSE
+Slovakia,229,16244.65912,TRUE
+Slovakia,231,8547,FALSE
+Slovakia,235,214565,FALSE
+Slovakia,254,26952.37295,TRUE
+Slovakia,84,9355.713607,TRUE
+Slovakia,267,9372.487582,TRUE
+Slovakia,282,701522,FALSE
+Slovakia,286,760050.6713,TRUE
+Slovakia,289,29419,FALSE
+Slovakia,316,464,FALSE
+Slovakia,317,184926,FALSE
+Slovakia,318,58434,FALSE
+Slovakia,18,15211,FALSE
+Slovakia,19,5000,FALSE
+Slovakia,33,13252,FALSE
+Slovakia,40,367374,FALSE
+Slovakia,49,293761,FALSE
+Slovakia,54,114324,FALSE
+Slovakia,58,38654,FALSE
+Slovakia,59,2500,FALSE
+Slovakia,63,187453,FALSE
+Slovakia,90,443950,FALSE
+Slovakia,94,61002.28577,TRUE
+Slovakia,101,138512.4356,TRUE
+Slovakia,112,48154,FALSE
+Slovakia,138,13404,FALSE
+Slovakia,152,31239,FALSE
+Slovakia,154,96782.90416,TRUE
+Slovakia,158,135263,FALSE
+Slovakia,200,26185,FALSE
+Slovakia,202,85300.04797,TRUE
+Slovakia,206,183393.7134,TRUE
+Slovakia,218,37413,FALSE
+Slovakia,238,21481,FALSE
+Slovakia,243,112174.5654,TRUE
+Slovakia,259,35056,FALSE
+Slovakia,276,26521,FALSE
+Slovakia,279,125360,FALSE
+Slovakia,298,120463.1286,TRUE
+Slovakia,305,8333,FALSE
+Slovakia,306,279498,FALSE
+Slovakia,11,178064.2799,TRUE
+Slovakia,16,74389.59543,TRUE
+Slovakia,48,27222.34375,TRUE
+Slovakia,60,6538,FALSE
+Slovakia,63,187453,FALSE
+Slovakia,121,115777.4722,TRUE
+Slovakia,128,9353.124815,TRUE
+Slovakia,156,6264,FALSE
+Slovakia,217,25790,FALSE
+Slovakia,248,34585,FALSE
+Slovakia,270,22572,FALSE
+Slovakia,52,72720.10141,TRUE
+Slovakia,74,4541.36112,TRUE
+Slovakia,75,47178.96176,TRUE
+Slovakia,80,104231,FALSE
+Slovakia,301,113987.8459,TRUE
+Slovakia,319,89190.44102,TRUE
+Slovakia,51,26504.47085,TRUE
+Slovakia,53,6581.96824,TRUE
+Slovakia,77,5993.147024,TRUE
+Slovakia,213,124295.9159,TRUE
+Slovakia,228,133880.2683,TRUE
+Slovakia,269,15171.62496,TRUE
+Slovakia,296,43692.55808,TRUE
+Slovakia,175,70802.39066,TRUE
+Slovakia,12,31907,FALSE
+Slovakia,13,74728.86082,TRUE
+Slovakia,108,11789,FALSE
+Slovakia,165,16442,FALSE
+Slovakia,215,105585.0293,TRUE
+Slovakia,261,8946.089355,TRUE
+Slovakia,281,47574,FALSE
+Slovakia,302,27087.34387,TRUE
+Slovakia,310,36133,TRUE
+Slovakia,106,0,FALSE
+Slovakia,30,62885.73079,TRUE
+Slovakia,91,2489,FALSE
+Slovakia,192,3780098.195,TRUE
+Slovakia,249,31667,FALSE
+Slovakia,308,38973,FALSE
+Slovakia,116,98484.54468,TRUE
+Slovakia,234,9361,FALSE
+Slovakia,88,138218.959,TRUE
+Slovakia,227,9358.848173,TRUE
+Slovakia,8,14968,FALSE
+Slovakia,115,186672.4488,TRUE
+Slovakia,146,28645.96233,TRUE
+Slovakia,257,14862.84549,TRUE
+Slovakia,39,10609,FALSE
+Slovakia,61,57729,FALSE
+Slovakia,76,100326.9844,TRUE
+Slovakia,268,27005.25,TRUE
+Slovakia,194,7177,FALSE
+Slovakia,198,5299.135169,TRUE
+Slovakia,245,11957.75,TRUE
+Slovakia,86,15341.61704,TRUE
+Slovakia,247,27947.125,TRUE
+Slovakia,15,5922.875,TRUE
+Slovakia,135,5719.346191,TRUE
+Slovakia,65,4252.65625,TRUE
+Slovakia,70,8796.273438,TRUE
+Slovakia,314,4472.643433,TRUE
+Slovakia,133,6124.625,TRUE
+Slovakia,240,4373.4375,TRUE
+Slovakia,148,23186,TRUE
+Slovakia,31,5157,TRUE
+Slovenia,4,7252,FALSE
+Slovenia,5,7484.490489,TRUE
+Slovenia,7,246577,FALSE
+Slovenia,8,141324,FALSE
+Slovenia,17,47776,FALSE
+Slovenia,105,53636,FALSE
+Slovenia,120,59896,FALSE
+Slovenia,161,8730.264786,TRUE
+Slovenia,169,95144,FALSE
+Slovenia,179,121608.9919,TRUE
+Slovenia,180,13333,FALSE
+Slovenia,203,14169,FALSE
+Slovenia,205,234875,FALSE
+Slovenia,208,84004.18102,TRUE
+Slovenia,219,185233,FALSE
+Slovenia,221,418283,FALSE
+Slovenia,229,16244.65912,TRUE
+Slovenia,231,816750,FALSE
+Slovenia,235,268407,FALSE
+Slovenia,254,26952.37295,TRUE
+Slovenia,84,9355.713607,TRUE
+Slovenia,267,9372.487582,TRUE
+Slovenia,282,423220.8453,TRUE
+Slovenia,286,760050.6713,TRUE
+Slovenia,289,24896,FALSE
+Slovenia,316,204029,FALSE
+Slovenia,317,188762.6372,TRUE
+Slovenia,318,51863,FALSE
+Slovenia,18,19227,FALSE
+Slovenia,19,59551,FALSE
+Slovenia,33,30270.38924,TRUE
+Slovenia,40,350533,FALSE
+Slovenia,49,216705,FALSE
+Slovenia,54,153297,FALSE
+Slovenia,58,231761,FALSE
+Slovenia,59,42222,FALSE
+Slovenia,63,40432,FALSE
+Slovenia,90,232921,FALSE
+Slovenia,94,61002.28577,TRUE
+Slovenia,101,138512.4356,TRUE
+Slovenia,112,59508,FALSE
+Slovenia,138,16687,FALSE
+Slovenia,152,188776,FALSE
+Slovenia,154,96782.90416,TRUE
+Slovenia,158,146625,FALSE
+Slovenia,200,32440,FALSE
+Slovenia,202,85300.04797,TRUE
+Slovenia,206,183393.7134,TRUE
+Slovenia,218,38088,FALSE
+Slovenia,238,116960.1876,TRUE
+Slovenia,243,44966,FALSE
+Slovenia,259,41010,FALSE
+Slovenia,276,29955,FALSE
+Slovenia,279,101935,FALSE
+Slovenia,298,120463.1286,TRUE
+Slovenia,305,15590.0347,TRUE
+Slovenia,306,424118,FALSE
+Slovenia,11,178064.2799,TRUE
+Slovenia,16,74389.59543,TRUE
+Slovenia,48,27222.34375,TRUE
+Slovenia,60,22383.25858,TRUE
+Slovenia,63,40432,FALSE
+Slovenia,121,115777.4722,TRUE
+Slovenia,128,9353.124815,TRUE
+Slovenia,156,10200.29705,TRUE
+Slovenia,217,26727,FALSE
+Slovenia,248,27218,FALSE
+Slovenia,270,9151.63574,TRUE
+Slovenia,52,72720.10141,TRUE
+Slovenia,74,4541.36112,TRUE
+Slovenia,75,47178.96176,TRUE
+Slovenia,80,49992.57574,TRUE
+Slovenia,301,113987.8459,TRUE
+Slovenia,319,89190.44102,TRUE
+Slovenia,51,26504.47085,TRUE
+Slovenia,53,6581.96824,TRUE
+Slovenia,77,5993.147024,TRUE
+Slovenia,213,124295.9159,TRUE
+Slovenia,228,133880.2683,TRUE
+Slovenia,269,15171.62496,TRUE
+Slovenia,296,43692.55808,TRUE
+Slovenia,175,70802.39066,TRUE
+Slovenia,12,43148,FALSE
+Slovenia,13,74728.86082,TRUE
+Slovenia,108,12577.92841,TRUE
+Slovenia,165,14797.07017,TRUE
+Slovenia,215,105585.0293,TRUE
+Slovenia,261,8946.089355,TRUE
+Slovenia,281,166216,FALSE
+Slovenia,302,27087.34387,TRUE
+Slovenia,310,36133,TRUE
+Slovenia,106,19022,FALSE
+Slovenia,30,62885.73079,TRUE
+Slovenia,91,44747,FALSE
+Slovenia,192,3780098.195,TRUE
+Slovenia,249,126436,FALSE
+Slovenia,308,46745,FALSE
+Slovenia,116,98484.54468,TRUE
+Slovenia,234,8162.890747,TRUE
+Slovenia,88,138218.959,TRUE
+Slovenia,227,9358.848173,TRUE
+Slovenia,8,141324,FALSE
+Slovenia,115,186672.4488,TRUE
+Slovenia,146,28645.96233,TRUE
+Slovenia,257,14862.84549,TRUE
+Slovenia,39,9271,FALSE
+Slovenia,61,218943.5096,TRUE
+Slovenia,76,100326.9844,TRUE
+Slovenia,268,27005.25,TRUE
+Slovenia,194,9390.783666,TRUE
+Slovenia,198,5299.135169,TRUE
+Slovenia,245,11957.75,TRUE
+Slovenia,86,15341.61704,TRUE
+Slovenia,247,27947.125,TRUE
+Slovenia,15,5922.875,TRUE
+Slovenia,135,5719.346191,TRUE
+Slovenia,65,4252.65625,TRUE
+Slovenia,70,8796.273438,TRUE
+Slovenia,314,4472.643433,TRUE
+Slovenia,133,6124.625,TRUE
+Slovenia,240,4373.4375,TRUE
+Slovenia,148,23186,TRUE
+Slovenia,31,5157,TRUE
+Solomon Islands,4,20977.52128,TRUE
+Solomon Islands,5,7484.490489,TRUE
+Solomon Islands,7,111437.9893,TRUE
+Solomon Islands,8,47030.54376,TRUE
+Solomon Islands,17,33099.94094,TRUE
+Solomon Islands,105,149702.6633,TRUE
+Solomon Islands,120,115713.1489,TRUE
+Solomon Islands,161,8730.264786,TRUE
+Solomon Islands,169,16777.49735,TRUE
+Solomon Islands,179,162401,FALSE
+Solomon Islands,180,7520.279265,TRUE
+Solomon Islands,203,26179.47154,TRUE
+Solomon Islands,205,158255.8483,TRUE
+Solomon Islands,208,84004.18102,TRUE
+Solomon Islands,219,80605.62094,TRUE
+Solomon Islands,221,53059.48552,TRUE
+Solomon Islands,229,16244.65912,TRUE
+Solomon Islands,231,60255.26389,TRUE
+Solomon Islands,235,172280.9273,TRUE
+Solomon Islands,254,16570,FALSE
+Solomon Islands,84,9355.713607,TRUE
+Solomon Islands,267,9372.487582,TRUE
+Solomon Islands,282,423220.8453,TRUE
+Solomon Islands,286,760050.6713,TRUE
+Solomon Islands,289,9979.922823,TRUE
+Solomon Islands,316,72255.87156,TRUE
+Solomon Islands,317,153128,FALSE
+Solomon Islands,318,32261.2753,TRUE
+Solomon Islands,18,11273.75269,TRUE
+Solomon Islands,19,77366.60983,TRUE
+Solomon Islands,33,30270.38924,TRUE
+Solomon Islands,40,180987.6885,TRUE
+Solomon Islands,49,247408.5214,TRUE
+Solomon Islands,54,175365.1249,TRUE
+Solomon Islands,58,74040.89691,TRUE
+Solomon Islands,59,22326.21725,TRUE
+Solomon Islands,63,234336.5313,TRUE
+Solomon Islands,90,194487.8189,TRUE
+Solomon Islands,94,61002.28577,TRUE
+Solomon Islands,101,138512.4356,TRUE
+Solomon Islands,112,122104.9439,TRUE
+Solomon Islands,138,17125.18189,TRUE
+Solomon Islands,152,119704.6269,TRUE
+Solomon Islands,154,96782.90416,TRUE
+Solomon Islands,158,96473.15601,TRUE
+Solomon Islands,200,22918.25267,TRUE
+Solomon Islands,202,85300.04797,TRUE
+Solomon Islands,206,183393.7134,TRUE
+Solomon Islands,218,52990.31222,TRUE
+Solomon Islands,238,116960.1876,TRUE
+Solomon Islands,243,112174.5654,TRUE
+Solomon Islands,259,55616.6005,TRUE
+Solomon Islands,276,10950.60863,TRUE
+Solomon Islands,279,177754.1672,TRUE
+Solomon Islands,298,120463.1286,TRUE
+Solomon Islands,305,8725,FALSE
+Solomon Islands,306,131681.4608,TRUE
+Solomon Islands,11,178064.2799,TRUE
+Solomon Islands,16,23723,FALSE
+Solomon Islands,48,27222.34375,TRUE
+Solomon Islands,60,22383.25858,TRUE
+Solomon Islands,63,11715.28525,TRUE
+Solomon Islands,121,115777.4722,TRUE
+Solomon Islands,128,9353.124815,TRUE
+Solomon Islands,156,10200.29705,TRUE
+Solomon Islands,217,21196.4891,TRUE
+Solomon Islands,248,14225.32829,TRUE
+Solomon Islands,270,9151.63574,TRUE
+Solomon Islands,52,167327,FALSE
+Solomon Islands,74,3980,FALSE
+Solomon Islands,75,65745,FALSE
+Solomon Islands,80,49992.57574,TRUE
+Solomon Islands,301,175375,FALSE
+Solomon Islands,319,103073,FALSE
+Solomon Islands,51,26504.47085,TRUE
+Solomon Islands,53,6581.96824,TRUE
+Solomon Islands,77,5993.147024,TRUE
+Solomon Islands,213,145519,FALSE
+Solomon Islands,228,133880.2683,TRUE
+Solomon Islands,269,15171.62496,TRUE
+Solomon Islands,296,141337,FALSE
+Solomon Islands,175,70802.39066,TRUE
+Solomon Islands,12,36715.19395,TRUE
+Solomon Islands,13,74728.86082,TRUE
+Solomon Islands,108,12577.92841,TRUE
+Solomon Islands,165,14797.07017,TRUE
+Solomon Islands,215,105585.0293,TRUE
+Solomon Islands,261,8946.089355,TRUE
+Solomon Islands,281,136069.2843,TRUE
+Solomon Islands,302,27087.34387,TRUE
+Solomon Islands,310,36133,TRUE
+Solomon Islands,106,13595.99028,TRUE
+Solomon Islands,30,62885.73079,TRUE
+Solomon Islands,91,126485.3041,TRUE
+Solomon Islands,192,3780098.195,TRUE
+Solomon Islands,249,70032.42373,TRUE
+Solomon Islands,308,35296.76443,TRUE
+Solomon Islands,116,98484.54468,TRUE
+Solomon Islands,234,8162.890747,TRUE
+Solomon Islands,88,138218.959,TRUE
+Solomon Islands,227,9358.848173,TRUE
+Solomon Islands,8,21599.0332,TRUE
+Solomon Islands,115,186672.4488,TRUE
+Solomon Islands,146,28645.96233,TRUE
+Solomon Islands,257,14862.84549,TRUE
+Solomon Islands,39,10075.63454,TRUE
+Solomon Islands,61,218943.5096,TRUE
+Solomon Islands,76,100326.9844,TRUE
+Solomon Islands,268,27005.25,TRUE
+Solomon Islands,194,9390.783666,TRUE
+Solomon Islands,198,5299.135169,TRUE
+Solomon Islands,245,11957.75,TRUE
+Solomon Islands,86,15341.61704,TRUE
+Solomon Islands,247,27947.125,TRUE
+Solomon Islands,15,5922.875,TRUE
+Solomon Islands,135,5719.346191,TRUE
+Solomon Islands,65,4252.65625,TRUE
+Solomon Islands,70,8796.273438,TRUE
+Solomon Islands,314,4472.643433,TRUE
+Solomon Islands,133,6124.625,TRUE
+Solomon Islands,240,4373.4375,TRUE
+Solomon Islands,148,23186,TRUE
+Solomon Islands,31,5157,TRUE
+Somalia,4,20977.52128,TRUE
+Somalia,5,7484.490489,TRUE
+Somalia,7,111437.9893,TRUE
+Somalia,8,47030.54376,TRUE
+Somalia,17,33099.94094,TRUE
+Somalia,105,149702.6633,TRUE
+Somalia,120,115713.1489,TRUE
+Somalia,161,8730.264786,TRUE
+Somalia,169,5852,FALSE
+Somalia,179,121608.9919,TRUE
+Somalia,180,7520.279265,TRUE
+Somalia,203,26179.47154,TRUE
+Somalia,205,17797,FALSE
+Somalia,208,72505,FALSE
+Somalia,219,80605.62094,TRUE
+Somalia,221,53059.48552,TRUE
+Somalia,229,16244.65912,TRUE
+Somalia,231,60255.26389,TRUE
+Somalia,235,172280.9273,TRUE
+Somalia,254,18333,FALSE
+Somalia,84,4046,FALSE
+Somalia,267,4849,FALSE
+Somalia,282,423220.8453,TRUE
+Somalia,286,367492,FALSE
+Somalia,289,9979.922823,TRUE
+Somalia,316,72255.87156,TRUE
+Somalia,317,94752,FALSE
+Somalia,318,3980,FALSE
+Somalia,18,3100,FALSE
+Somalia,19,77366.60983,TRUE
+Somalia,33,30270.38924,TRUE
+Somalia,40,180987.6885,TRUE
+Somalia,49,247408.5214,TRUE
+Somalia,54,175365.1249,TRUE
+Somalia,58,74040.89691,TRUE
+Somalia,59,22326.21725,TRUE
+Somalia,63,234336.5313,TRUE
+Somalia,90,194487.8189,TRUE
+Somalia,94,50206,FALSE
+Somalia,101,138512.4356,TRUE
+Somalia,112,122104.9439,TRUE
+Somalia,138,17125.18189,TRUE
+Somalia,152,119704.6269,TRUE
+Somalia,154,64103,FALSE
+Somalia,158,96473.15601,TRUE
+Somalia,200,22918.25267,TRUE
+Somalia,202,85300.04797,TRUE
+Somalia,206,183393.7134,TRUE
+Somalia,218,52990.31222,TRUE
+Somalia,238,116960.1876,TRUE
+Somalia,243,112174.5654,TRUE
+Somalia,259,55616.6005,TRUE
+Somalia,276,10950.60863,TRUE
+Somalia,279,177754.1672,TRUE
+Somalia,298,120463.1286,TRUE
+Somalia,305,4050,FALSE
+Somalia,306,14418,FALSE
+Somalia,11,178064.2799,TRUE
+Somalia,16,169507,FALSE
+Somalia,48,27222.34375,TRUE
+Somalia,60,22383.25858,TRUE
+Somalia,63,11715.28525,TRUE
+Somalia,121,47631,FALSE
+Somalia,128,10507,FALSE
+Somalia,156,10200.29705,TRUE
+Somalia,217,21196.4891,TRUE
+Somalia,248,14225.32829,TRUE
+Somalia,270,4533,FALSE
+Somalia,52,96025,FALSE
+Somalia,74,4541.36112,TRUE
+Somalia,75,31479,FALSE
+Somalia,80,49992.57574,TRUE
+Somalia,301,113987.8459,TRUE
+Somalia,319,89190.44102,TRUE
+Somalia,51,26504.47085,TRUE
+Somalia,53,6581.96824,TRUE
+Somalia,77,5993.147024,TRUE
+Somalia,213,124295.9159,TRUE
+Somalia,228,133880.2683,TRUE
+Somalia,269,15171.62496,TRUE
+Somalia,296,99057,FALSE
+Somalia,175,28837,FALSE
+Somalia,12,36715.19395,TRUE
+Somalia,13,74728.86082,TRUE
+Somalia,108,12577.92841,TRUE
+Somalia,165,14797.07017,TRUE
+Somalia,215,105585.0293,TRUE
+Somalia,261,8946.089355,TRUE
+Somalia,281,136069.2843,TRUE
+Somalia,302,27087.34387,TRUE
+Somalia,310,36133,TRUE
+Somalia,106,13595.99028,TRUE
+Somalia,30,62885.73079,TRUE
+Somalia,91,126485.3041,TRUE
+Somalia,192,3780098.195,TRUE
+Somalia,249,70032.42373,TRUE
+Somalia,308,35296.76443,TRUE
+Somalia,116,98484.54468,TRUE
+Somalia,234,8162.890747,TRUE
+Somalia,88,138218.959,TRUE
+Somalia,227,9358.848173,TRUE
+Somalia,8,21599.0332,TRUE
+Somalia,115,186672.4488,TRUE
+Somalia,146,28645.96233,TRUE
+Somalia,257,14862.84549,TRUE
+Somalia,39,10075.63454,TRUE
+Somalia,61,218943.5096,TRUE
+Somalia,76,100326.9844,TRUE
+Somalia,268,27005.25,TRUE
+Somalia,194,9390.783666,TRUE
+Somalia,198,5299.135169,TRUE
+Somalia,245,11957.75,TRUE
+Somalia,86,15341.61704,TRUE
+Somalia,247,27947.125,TRUE
+Somalia,15,5922.875,TRUE
+Somalia,135,5719.346191,TRUE
+Somalia,65,4252.65625,TRUE
+Somalia,70,8796.273438,TRUE
+Somalia,314,4472.643433,TRUE
+Somalia,133,6124.625,TRUE
+Somalia,240,4373.4375,TRUE
+Somalia,148,23186,TRUE
+Somalia,31,5157,TRUE
+South Africa,4,20977.52128,TRUE
+South Africa,5,7484.490489,TRUE
+South Africa,7,381961,FALSE
+South Africa,8,90590,FALSE
+South Africa,17,38236,FALSE
+South Africa,105,30940,FALSE
+South Africa,120,166739,FALSE
+South Africa,161,8730.264786,TRUE
+South Africa,169,39956,FALSE
+South Africa,179,99759,FALSE
+South Africa,180,4950,FALSE
+South Africa,203,26179.47154,TRUE
+South Africa,205,248061,FALSE
+South Africa,208,409643,FALSE
+South Africa,219,174838,FALSE
+South Africa,221,334883,FALSE
+South Africa,229,16244.65912,TRUE
+South Africa,231,92112,FALSE
+South Africa,235,360988,FALSE
+South Africa,254,27212,FALSE
+South Africa,84,34680,FALSE
+South Africa,267,9372.487582,TRUE
+South Africa,282,423220.8453,TRUE
+South Africa,286,610463,FALSE
+South Africa,289,10508,FALSE
+South Africa,316,72255.87156,TRUE
+South Africa,317,157405,FALSE
+South Africa,318,37562,FALSE
+South Africa,18,10013,FALSE
+South Africa,19,62021,FALSE
+South Africa,33,30270.38924,TRUE
+South Africa,40,568205,FALSE
+South Africa,49,292510,FALSE
+South Africa,54,140604,FALSE
+South Africa,58,20868,FALSE
+South Africa,59,22326.21725,TRUE
+South Africa,63,18398,FALSE
+South Africa,90,177045,FALSE
+South Africa,94,61002.28577,TRUE
+South Africa,101,138512.4356,TRUE
+South Africa,112,122104.9439,TRUE
+South Africa,138,10669,FALSE
+South Africa,152,119704.6269,TRUE
+South Africa,154,202233,FALSE
+South Africa,158,158301,FALSE
+South Africa,200,16218,FALSE
+South Africa,202,85300.04797,TRUE
+South Africa,206,183393.7134,TRUE
+South Africa,218,24847,FALSE
+South Africa,238,103063,FALSE
+South Africa,243,45386,FALSE
+South Africa,259,11866,FALSE
+South Africa,276,14757,FALSE
+South Africa,279,177754.1672,TRUE
+South Africa,298,312945,FALSE
+South Africa,305,30000,FALSE
+South Africa,306,768867,FALSE
+South Africa,11,178064.2799,TRUE
+South Africa,16,590482,FALSE
+South Africa,48,27222.34375,TRUE
+South Africa,60,22383.25858,TRUE
+South Africa,63,18398,FALSE
+South Africa,121,310573,FALSE
+South Africa,128,7823,FALSE
+South Africa,156,10200.29705,TRUE
+South Africa,217,10054,FALSE
+South Africa,248,15588,FALSE
+South Africa,270,14536,FALSE
+South Africa,52,72720.10141,TRUE
+South Africa,74,4541.36112,TRUE
+South Africa,75,47178.96176,TRUE
+South Africa,80,103140,FALSE
+South Africa,301,113987.8459,TRUE
+South Africa,319,89190.44102,TRUE
+South Africa,51,26504.47085,TRUE
+South Africa,53,7407,FALSE
+South Africa,77,5993.147024,TRUE
+South Africa,213,124295.9159,TRUE
+South Africa,228,121484,FALSE
+South Africa,269,6260,FALSE
+South Africa,296,28658,FALSE
+South Africa,175,182962,FALSE
+South Africa,12,36715.19395,TRUE
+South Africa,13,52138,FALSE
+South Africa,108,12577.92841,TRUE
+South Africa,165,9392,FALSE
+South Africa,215,91273,FALSE
+South Africa,261,8946.089355,TRUE
+South Africa,281,112306,FALSE
+South Africa,302,21047,FALSE
+South Africa,310,36133,TRUE
+South Africa,106,13595.99028,TRUE
+South Africa,30,62885.73079,TRUE
+South Africa,91,126485.3041,TRUE
+South Africa,192,3780098.195,TRUE
+South Africa,249,70032.42373,TRUE
+South Africa,308,35296.76443,TRUE
+South Africa,116,98484.54468,TRUE
+South Africa,234,8162.890747,TRUE
+South Africa,88,138218.959,TRUE
+South Africa,227,9358.848173,TRUE
+South Africa,8,90590,FALSE
+South Africa,115,186672.4488,TRUE
+South Africa,146,28645.96233,TRUE
+South Africa,257,14862.84549,TRUE
+South Africa,39,3910,FALSE
+South Africa,61,51765,FALSE
+South Africa,76,100326.9844,TRUE
+South Africa,268,27005.25,TRUE
+South Africa,194,9390.783666,TRUE
+South Africa,198,5299.135169,TRUE
+South Africa,245,11957.75,TRUE
+South Africa,86,4400,FALSE
+South Africa,247,27947.125,TRUE
+South Africa,15,5922.875,TRUE
+South Africa,135,5719.346191,TRUE
+South Africa,65,4252.65625,TRUE
+South Africa,70,8796.273438,TRUE
+South Africa,314,4472.643433,TRUE
+South Africa,133,6124.625,TRUE
+South Africa,240,4373.4375,TRUE
+South Africa,148,23186,TRUE
+South Africa,31,5157,TRUE
+South Sudan,4,20977.52128,TRUE
+South Sudan,5,7484.490489,TRUE
+South Sudan,7,111437.9893,TRUE
+South Sudan,8,47030.54376,TRUE
+South Sudan,17,33099.94094,TRUE
+South Sudan,105,149702.6633,TRUE
+South Sudan,120,115713.1489,TRUE
+South Sudan,161,8730.264786,TRUE
+South Sudan,169,11346,FALSE
+South Sudan,179,222978,FALSE
+South Sudan,180,12252,FALSE
+South Sudan,203,26179.47154,TRUE
+South Sudan,205,158255.8483,TRUE
+South Sudan,208,84004.18102,TRUE
+South Sudan,219,80605.62094,TRUE
+South Sudan,221,53059.48552,TRUE
+South Sudan,229,16244.65912,TRUE
+South Sudan,231,60255.26389,TRUE
+South Sudan,235,172280.9273,TRUE
+South Sudan,254,26952.37295,TRUE
+South Sudan,84,9355.713607,TRUE
+South Sudan,267,3303,FALSE
+South Sudan,282,423220.8453,TRUE
+South Sudan,286,760050.6713,TRUE
+South Sudan,289,17607,FALSE
+South Sudan,316,72255.87156,TRUE
+South Sudan,317,188762.6372,TRUE
+South Sudan,318,32261.2753,TRUE
+South Sudan,18,30658,FALSE
+South Sudan,19,44713,FALSE
+South Sudan,33,30270.38924,TRUE
+South Sudan,40,180987.6885,TRUE
+South Sudan,49,247408.5214,TRUE
+South Sudan,54,175365.1249,TRUE
+South Sudan,58,74040.89691,TRUE
+South Sudan,59,22326.21725,TRUE
+South Sudan,63,18676,FALSE
+South Sudan,90,194487.8189,TRUE
+South Sudan,94,61002.28577,TRUE
+South Sudan,101,138512.4356,TRUE
+South Sudan,112,122104.9439,TRUE
+South Sudan,138,17125.18189,TRUE
+South Sudan,152,119704.6269,TRUE
+South Sudan,154,96782.90416,TRUE
+South Sudan,158,96473.15601,TRUE
+South Sudan,200,22918.25267,TRUE
+South Sudan,202,85300.04797,TRUE
+South Sudan,206,183393.7134,TRUE
+South Sudan,218,52990.31222,TRUE
+South Sudan,238,157082,FALSE
+South Sudan,243,112174.5654,TRUE
+South Sudan,259,55616.6005,TRUE
+South Sudan,276,10950.60863,TRUE
+South Sudan,279,177754.1672,TRUE
+South Sudan,298,97724,FALSE
+South Sudan,305,15590.0347,TRUE
+South Sudan,306,131681.4608,TRUE
+South Sudan,11,178064.2799,TRUE
+South Sudan,16,74389.59543,TRUE
+South Sudan,48,27222.34375,TRUE
+South Sudan,60,22383.25858,TRUE
+South Sudan,63,18676,FALSE
+South Sudan,121,115777.4722,TRUE
+South Sudan,128,5748,FALSE
+South Sudan,156,10200.29705,TRUE
+South Sudan,217,21196.4891,TRUE
+South Sudan,248,14225.32829,TRUE
+South Sudan,270,15946,FALSE
+South Sudan,52,15437,FALSE
+South Sudan,74,4541.36112,TRUE
+South Sudan,75,47178.96176,TRUE
+South Sudan,80,49992.57574,TRUE
+South Sudan,301,113987.8459,TRUE
+South Sudan,319,24936,FALSE
+South Sudan,51,26504.47085,TRUE
+South Sudan,53,6581.96824,TRUE
+South Sudan,77,5993.147024,TRUE
+South Sudan,213,124295.9159,TRUE
+South Sudan,228,38722,FALSE
+South Sudan,269,15171.62496,TRUE
+South Sudan,296,43692.55808,TRUE
+South Sudan,175,70802.39066,TRUE
+South Sudan,12,36715.19395,TRUE
+South Sudan,13,74728.86082,TRUE
+South Sudan,108,12577.92841,TRUE
+South Sudan,165,14797.07017,TRUE
+South Sudan,215,105585.0293,TRUE
+South Sudan,261,8946.089355,TRUE
+South Sudan,281,136069.2843,TRUE
+South Sudan,302,27087.34387,TRUE
+South Sudan,310,36133,TRUE
+South Sudan,106,13595.99028,TRUE
+South Sudan,30,62885.73079,TRUE
+South Sudan,91,126485.3041,TRUE
+South Sudan,192,3780098.195,TRUE
+South Sudan,249,70032.42373,TRUE
+South Sudan,308,35296.76443,TRUE
+South Sudan,116,98484.54468,TRUE
+South Sudan,234,8162.890747,TRUE
+South Sudan,88,138218.959,TRUE
+South Sudan,227,9358.848173,TRUE
+South Sudan,8,21599.0332,TRUE
+South Sudan,115,186672.4488,TRUE
+South Sudan,146,28645.96233,TRUE
+South Sudan,257,14862.84549,TRUE
+South Sudan,39,10075.63454,TRUE
+South Sudan,61,218943.5096,TRUE
+South Sudan,76,100326.9844,TRUE
+South Sudan,268,27005.25,TRUE
+South Sudan,194,9390.783666,TRUE
+South Sudan,198,5299.135169,TRUE
+South Sudan,245,11957.75,TRUE
+South Sudan,86,15341.61704,TRUE
+South Sudan,247,27947.125,TRUE
+South Sudan,15,5922.875,TRUE
+South Sudan,135,5719.346191,TRUE
+South Sudan,65,4252.65625,TRUE
+South Sudan,70,8796.273438,TRUE
+South Sudan,314,4472.643433,TRUE
+South Sudan,133,6124.625,TRUE
+South Sudan,240,4373.4375,TRUE
+South Sudan,148,23186,TRUE
+South Sudan,31,5157,TRUE
+Spain,4,3716,FALSE
+Spain,5,4774,FALSE
+Spain,7,194879,FALSE
+Spain,8,68293,FALSE
+Spain,17,28492,FALSE
+Spain,105,20562,FALSE
+Spain,120,64495,FALSE
+Spain,161,6988,FALSE
+Spain,169,115592,FALSE
+Spain,179,317451,FALSE
+Spain,180,15464,FALSE
+Spain,203,25490,FALSE
+Spain,205,541427,FALSE
+Spain,208,207116,FALSE
+Spain,219,176063,FALSE
+Spain,221,175797,FALSE
+Spain,229,3497,FALSE
+Spain,231,135838,FALSE
+Spain,235,327229,FALSE
+Spain,254,78277,FALSE
+Spain,84,28410,FALSE
+Spain,267,9372.487582,TRUE
+Spain,282,976879,FALSE
+Spain,286,435965,FALSE
+Spain,289,10946,FALSE
+Spain,316,15685,FALSE
+Spain,317,558352,FALSE
+Spain,318,30960,FALSE
+Spain,18,19997,FALSE
+Spain,19,192864,FALSE
+Spain,33,14154,FALSE
+Spain,40,338809,FALSE
+Spain,49,619625,FALSE
+Spain,54,183509,FALSE
+Spain,58,37280,FALSE
+Spain,59,3786,FALSE
+Spain,63,29525,FALSE
+Spain,90,906242,FALSE
+Spain,94,57273,FALSE
+Spain,101,649186,FALSE
+Spain,112,91990,FALSE
+Spain,138,18234,FALSE
+Spain,152,333075,FALSE
+Spain,154,198133,FALSE
+Spain,158,266788,FALSE
+Spain,200,18894,FALSE
+Spain,202,85300.04797,TRUE
+Spain,206,272585,FALSE
+Spain,218,64291,FALSE
+Spain,238,483312,FALSE
+Spain,243,76445,FALSE
+Spain,259,20113,FALSE
+Spain,276,29815,FALSE
+Spain,279,182566,FALSE
+Spain,298,179345,FALSE
+Spain,305,32466,FALSE
+Spain,306,861917,FALSE
+Spain,11,132471,FALSE
+Spain,16,408897,FALSE
+Spain,48,9911,FALSE
+Spain,60,8008,FALSE
+Spain,63,29525,FALSE
+Spain,121,317621,FALSE
+Spain,128,29804,FALSE
+Spain,156,5815,FALSE
+Spain,217,11562,FALSE
+Spain,248,20441,FALSE
+Spain,270,53286,FALSE
+Spain,52,72720.10141,TRUE
+Spain,74,4541.36112,TRUE
+Spain,75,47178.96176,TRUE
+Spain,80,49992.57574,TRUE
+Spain,301,113987.8459,TRUE
+Spain,319,89190.44102,TRUE
+Spain,51,26504.47085,TRUE
+Spain,53,6581.96824,TRUE
+Spain,77,5993.147024,TRUE
+Spain,213,124295.9159,TRUE
+Spain,228,133880.2683,TRUE
+Spain,269,15171.62496,TRUE
+Spain,296,170413,FALSE
+Spain,175,70802.39066,TRUE
+Spain,12,51563,FALSE
+Spain,13,78871,FALSE
+Spain,108,11176,FALSE
+Spain,165,6312,FALSE
+Spain,215,105585.0293,TRUE
+Spain,261,8113,FALSE
+Spain,281,476475,FALSE
+Spain,302,27087.34387,TRUE
+Spain,310,36133,TRUE
+Spain,106,10781,FALSE
+Spain,30,62885.73079,TRUE
+Spain,91,126485.3041,TRUE
+Spain,192,3529118,FALSE
+Spain,249,98862,FALSE
+Spain,308,22022,FALSE
+Spain,116,7000,FALSE
+Spain,234,10503,FALSE
+Spain,88,138218.959,TRUE
+Spain,227,9358.848173,TRUE
+Spain,8,68293,FALSE
+Spain,115,186672.4488,TRUE
+Spain,146,28645.96233,TRUE
+Spain,257,14862.84549,TRUE
+Spain,39,10075.63454,TRUE
+Spain,61,279302,FALSE
+Spain,76,100326.9844,TRUE
+Spain,268,27005.25,TRUE
+Spain,194,9390.783666,TRUE
+Spain,198,5299.135169,TRUE
+Spain,245,11957.75,TRUE
+Spain,86,15341.61704,TRUE
+Spain,247,27947.125,TRUE
+Spain,15,5922.875,TRUE
+Spain,135,9372,FALSE
+Spain,65,4252.65625,TRUE
+Spain,70,8796.273438,TRUE
+Spain,314,4472.643433,TRUE
+Spain,133,6124.625,TRUE
+Spain,240,4373.4375,TRUE
+Spain,148,23186,TRUE
+Spain,31,5157,TRUE
+Sri Lanka,4,20977.52128,TRUE
+Sri Lanka,5,7484.490489,TRUE
+Sri Lanka,7,111437.9893,TRUE
+Sri Lanka,8,24217,FALSE
+Sri Lanka,17,33099.94094,TRUE
+Sri Lanka,105,149702.6633,TRUE
+Sri Lanka,120,115713.1489,TRUE
+Sri Lanka,161,8730.264786,TRUE
+Sri Lanka,169,38652,FALSE
+Sri Lanka,179,121608.9919,TRUE
+Sri Lanka,180,9595,FALSE
+Sri Lanka,203,26179.47154,TRUE
+Sri Lanka,205,142348,FALSE
+Sri Lanka,208,10366,FALSE
+Sri Lanka,219,80605.62094,TRUE
+Sri Lanka,221,53059.48552,TRUE
+Sri Lanka,229,16244.65912,TRUE
+Sri Lanka,231,60255.26389,TRUE
+Sri Lanka,235,156975,FALSE
+Sri Lanka,254,39160,FALSE
+Sri Lanka,84,20000,FALSE
+Sri Lanka,267,9160,FALSE
+Sri Lanka,282,423220.8453,TRUE
+Sri Lanka,286,446478,FALSE
+Sri Lanka,289,9979.922823,TRUE
+Sri Lanka,316,72255.87156,TRUE
+Sri Lanka,317,188762.6372,TRUE
+Sri Lanka,318,32261.2753,TRUE
+Sri Lanka,18,11393,FALSE
+Sri Lanka,19,91691,FALSE
+Sri Lanka,33,30270.38924,TRUE
+Sri Lanka,40,229995,FALSE
+Sri Lanka,49,162105,FALSE
+Sri Lanka,54,175365.1249,TRUE
+Sri Lanka,58,74040.89691,TRUE
+Sri Lanka,59,22326.21725,TRUE
+Sri Lanka,63,43136,FALSE
+Sri Lanka,90,109937,FALSE
+Sri Lanka,94,61002.28577,TRUE
+Sri Lanka,101,113044,FALSE
+Sri Lanka,112,122104.9439,TRUE
+Sri Lanka,138,17125.18189,TRUE
+Sri Lanka,152,194720,FALSE
+Sri Lanka,154,3198,FALSE
+Sri Lanka,158,96473.15601,TRUE
+Sri Lanka,200,22918.25267,TRUE
+Sri Lanka,202,85300.04797,TRUE
+Sri Lanka,206,183393.7134,TRUE
+Sri Lanka,218,52990.31222,TRUE
+Sri Lanka,238,128155,FALSE
+Sri Lanka,243,112174.5654,TRUE
+Sri Lanka,259,55616.6005,TRUE
+Sri Lanka,276,13497,FALSE
+Sri Lanka,279,177754.1672,TRUE
+Sri Lanka,298,120463.1286,TRUE
+Sri Lanka,305,20446,FALSE
+Sri Lanka,306,119676,FALSE
+Sri Lanka,11,178064.2799,TRUE
+Sri Lanka,16,74389.59543,TRUE
+Sri Lanka,48,27222.34375,TRUE
+Sri Lanka,60,22383.25858,TRUE
+Sri Lanka,63,43136,FALSE
+Sri Lanka,121,115777.4722,TRUE
+Sri Lanka,128,20655,FALSE
+Sri Lanka,156,10200.29705,TRUE
+Sri Lanka,217,21196.4891,TRUE
+Sri Lanka,248,14225.32829,TRUE
+Sri Lanka,270,14848,FALSE
+Sri Lanka,52,136650,FALSE
+Sri Lanka,74,7091,FALSE
+Sri Lanka,75,61628,FALSE
+Sri Lanka,80,49992.57574,TRUE
+Sri Lanka,301,113987.8459,TRUE
+Sri Lanka,319,89190.44102,TRUE
+Sri Lanka,51,2868,FALSE
+Sri Lanka,53,6581.96824,TRUE
+Sri Lanka,77,6590,FALSE
+Sri Lanka,213,124295.9159,TRUE
+Sri Lanka,228,85719,FALSE
+Sri Lanka,269,15171.62496,TRUE
+Sri Lanka,296,94956,FALSE
+Sri Lanka,175,26750,FALSE
+Sri Lanka,12,36715.19395,TRUE
+Sri Lanka,13,88528,FALSE
+Sri Lanka,108,12577.92841,TRUE
+Sri Lanka,165,14797.07017,TRUE
+Sri Lanka,215,105585.0293,TRUE
+Sri Lanka,261,8946.089355,TRUE
+Sri Lanka,281,136069.2843,TRUE
+Sri Lanka,302,15081,FALSE
+Sri Lanka,310,36133,TRUE
+Sri Lanka,106,13595.99028,TRUE
+Sri Lanka,30,62885.73079,TRUE
+Sri Lanka,91,126485.3041,TRUE
+Sri Lanka,192,3780098.195,TRUE
+Sri Lanka,249,70032.42373,TRUE
+Sri Lanka,308,35296.76443,TRUE
+Sri Lanka,116,98484.54468,TRUE
+Sri Lanka,234,8162.890747,TRUE
+Sri Lanka,88,138218.959,TRUE
+Sri Lanka,227,9358.848173,TRUE
+Sri Lanka,8,24217,FALSE
+Sri Lanka,115,68199,FALSE
+Sri Lanka,146,28645.96233,TRUE
+Sri Lanka,257,11350,FALSE
+Sri Lanka,39,10075.63454,TRUE
+Sri Lanka,61,218943.5096,TRUE
+Sri Lanka,76,100326.9844,TRUE
+Sri Lanka,268,27005.25,TRUE
+Sri Lanka,194,7599,FALSE
+Sri Lanka,198,3439,FALSE
+Sri Lanka,245,11957.75,TRUE
+Sri Lanka,86,13714,FALSE
+Sri Lanka,247,27947.125,TRUE
+Sri Lanka,15,5922.875,TRUE
+Sri Lanka,135,5719.346191,TRUE
+Sri Lanka,65,5435,FALSE
+Sri Lanka,70,6574,FALSE
+Sri Lanka,314,4472.643433,TRUE
+Sri Lanka,133,6124.625,TRUE
+Sri Lanka,240,4373.4375,TRUE
+Sri Lanka,148,23186,TRUE
+Sri Lanka,31,5157,TRUE
+Sudan,4,20977.52128,TRUE
+Sudan,5,7484.490489,TRUE
+Sudan,7,111437.9893,TRUE
+Sudan,8,47030.54376,TRUE
+Sudan,17,33099.94094,TRUE
+Sudan,105,149702.6633,TRUE
+Sudan,120,115713.1489,TRUE
+Sudan,161,8730.264786,TRUE
+Sudan,169,13843,FALSE
+Sudan,179,246782,FALSE
+Sudan,180,4818,FALSE
+Sudan,203,26179.47154,TRUE
+Sudan,205,180613,FALSE
+Sudan,208,81139,FALSE
+Sudan,219,80605.62094,TRUE
+Sudan,221,53059.48552,TRUE
+Sudan,229,16244.65912,TRUE
+Sudan,231,60255.26389,TRUE
+Sudan,235,132371,FALSE
+Sudan,254,39216,FALSE
+Sudan,84,16395,FALSE
+Sudan,267,2459,FALSE
+Sudan,282,423220.8453,TRUE
+Sudan,286,794245,FALSE
+Sudan,289,7118,FALSE
+Sudan,316,72255.87156,TRUE
+Sudan,317,45763,FALSE
+Sudan,318,23810,FALSE
+Sudan,18,38807,FALSE
+Sudan,19,66400,FALSE
+Sudan,33,17121,FALSE
+Sudan,40,70041,FALSE
+Sudan,49,58297,FALSE
+Sudan,54,207105,FALSE
+Sudan,58,74040.89691,TRUE
+Sudan,59,22326.21725,TRUE
+Sudan,63,35236,FALSE
+Sudan,90,87890,FALSE
+Sudan,94,118005,FALSE
+Sudan,101,68150,FALSE
+Sudan,112,54816,FALSE
+Sudan,138,17125.18189,TRUE
+Sudan,152,119704.6269,TRUE
+Sudan,154,87483,FALSE
+Sudan,158,96473.15601,TRUE
+Sudan,200,22918.25267,TRUE
+Sudan,202,107386,FALSE
+Sudan,206,183393.7134,TRUE
+Sudan,218,52990.31222,TRUE
+Sudan,238,155057,FALSE
+Sudan,243,112174.5654,TRUE
+Sudan,259,55616.6005,TRUE
+Sudan,276,10950.60863,TRUE
+Sudan,279,177754.1672,TRUE
+Sudan,298,120463.1286,TRUE
+Sudan,305,15590.0347,TRUE
+Sudan,306,132075,FALSE
+Sudan,11,178064.2799,TRUE
+Sudan,16,201762,FALSE
+Sudan,48,27222.34375,TRUE
+Sudan,60,17385,FALSE
+Sudan,63,35236,FALSE
+Sudan,121,100420,FALSE
+Sudan,128,7888,FALSE
+Sudan,156,10200.29705,TRUE
+Sudan,217,21196.4891,TRUE
+Sudan,248,14225.32829,TRUE
+Sudan,270,7061,FALSE
+Sudan,52,72720.10141,TRUE
+Sudan,74,4541.36112,TRUE
+Sudan,75,47178.96176,TRUE
+Sudan,80,49992.57574,TRUE
+Sudan,301,113987.8459,TRUE
+Sudan,319,21272,FALSE
+Sudan,51,26504.47085,TRUE
+Sudan,53,5000,FALSE
+Sudan,77,5993.147024,TRUE
+Sudan,213,124295.9159,TRUE
+Sudan,228,44315,FALSE
+Sudan,269,15171.62496,TRUE
+Sudan,296,99692,FALSE
+Sudan,175,172628,FALSE
+Sudan,12,36715.19395,TRUE
+Sudan,13,74728.86082,TRUE
+Sudan,108,12577.92841,TRUE
+Sudan,165,14797.07017,TRUE
+Sudan,215,105585.0293,TRUE
+Sudan,261,8946.089355,TRUE
+Sudan,281,136069.2843,TRUE
+Sudan,302,27087.34387,TRUE
+Sudan,310,36133,TRUE
+Sudan,106,13595.99028,TRUE
+Sudan,30,62885.73079,TRUE
+Sudan,91,126485.3041,TRUE
+Sudan,192,3780098.195,TRUE
+Sudan,249,70032.42373,TRUE
+Sudan,308,35296.76443,TRUE
+Sudan,116,98484.54468,TRUE
+Sudan,234,8162.890747,TRUE
+Sudan,88,138218.959,TRUE
+Sudan,227,9358.848173,TRUE
+Sudan,8,21599.0332,TRUE
+Sudan,115,186672.4488,TRUE
+Sudan,146,28645.96233,TRUE
+Sudan,257,14862.84549,TRUE
+Sudan,39,10075.63454,TRUE
+Sudan,61,218943.5096,TRUE
+Sudan,76,100326.9844,TRUE
+Sudan,268,27005.25,TRUE
+Sudan,194,9390.783666,TRUE
+Sudan,198,5299.135169,TRUE
+Sudan,245,11957.75,TRUE
+Sudan,86,5360,FALSE
+Sudan,247,27947.125,TRUE
+Sudan,15,5922.875,TRUE
+Sudan,135,5719.346191,TRUE
+Sudan,65,4252.65625,TRUE
+Sudan,70,8796.273438,TRUE
+Sudan,314,4472.643433,TRUE
+Sudan,133,6124.625,TRUE
+Sudan,240,4373.4375,TRUE
+Sudan,148,23186,TRUE
+Sudan,31,5157,TRUE
+Suriname,4,20977.52128,TRUE
+Suriname,5,7484.490489,TRUE
+Suriname,7,111437.9893,TRUE
+Suriname,8,47030.54376,TRUE
+Suriname,17,33099.94094,TRUE
+Suriname,105,149702.6633,TRUE
+Suriname,120,115713.1489,TRUE
+Suriname,161,8730.264786,TRUE
+Suriname,169,24722,FALSE
+Suriname,179,121608.9919,TRUE
+Suriname,180,7520.279265,TRUE
+Suriname,203,26179.47154,TRUE
+Suriname,205,158255.8483,TRUE
+Suriname,208,123242,FALSE
+Suriname,219,80605.62094,TRUE
+Suriname,221,53059.48552,TRUE
+Suriname,229,16244.65912,TRUE
+Suriname,231,60255.26389,TRUE
+Suriname,235,172280.9273,TRUE
+Suriname,254,44341,FALSE
+Suriname,84,9355.713607,TRUE
+Suriname,267,9372.487582,TRUE
+Suriname,282,423220.8453,TRUE
+Suriname,286,400224,FALSE
+Suriname,289,9979.922823,TRUE
+Suriname,316,72255.87156,TRUE
+Suriname,317,198617,FALSE
+Suriname,318,32261.2753,TRUE
+Suriname,18,11273.75269,TRUE
+Suriname,19,138780,FALSE
+Suriname,33,30270.38924,TRUE
+Suriname,40,229841,FALSE
+Suriname,49,247408.5214,TRUE
+Suriname,54,175365.1249,TRUE
+Suriname,58,205000,FALSE
+Suriname,59,22326.21725,TRUE
+Suriname,63,234336.5313,TRUE
+Suriname,90,224933,FALSE
+Suriname,94,61002.28577,TRUE
+Suriname,101,138512.4356,TRUE
+Suriname,112,122104.9439,TRUE
+Suriname,138,17125.18189,TRUE
+Suriname,152,119704.6269,TRUE
+Suriname,154,164667,FALSE
+Suriname,158,96473.15601,TRUE
+Suriname,200,22918.25267,TRUE
+Suriname,202,85300.04797,TRUE
+Suriname,206,183393.7134,TRUE
+Suriname,218,52990.31222,TRUE
+Suriname,238,116960.1876,TRUE
+Suriname,243,112174.5654,TRUE
+Suriname,259,55616.6005,TRUE
+Suriname,276,10000,FALSE
+Suriname,279,177754.1672,TRUE
+Suriname,298,120463.1286,TRUE
+Suriname,305,15590.0347,TRUE
+Suriname,306,119048,FALSE
+Suriname,11,178064.2799,TRUE
+Suriname,16,306438,FALSE
+Suriname,48,27222.34375,TRUE
+Suriname,60,22383.25858,TRUE
+Suriname,63,11715.28525,TRUE
+Suriname,121,162147,FALSE
+Suriname,128,13750,FALSE
+Suriname,156,10200.29705,TRUE
+Suriname,217,21196.4891,TRUE
+Suriname,248,14225.32829,TRUE
+Suriname,270,9151.63574,TRUE
+Suriname,52,271076,FALSE
+Suriname,74,373,FALSE
+Suriname,75,133991,FALSE
+Suriname,80,49992.57574,TRUE
+Suriname,301,113987.8459,TRUE
+Suriname,319,89190.44102,TRUE
+Suriname,51,26504.47085,TRUE
+Suriname,53,6581.96824,TRUE
+Suriname,77,277,FALSE
+Suriname,213,19994,FALSE
+Suriname,228,200678,FALSE
+Suriname,269,15171.62496,TRUE
+Suriname,296,145484,FALSE
+Suriname,175,150000,FALSE
+Suriname,12,36715.19395,TRUE
+Suriname,13,74728.86082,TRUE
+Suriname,108,12577.92841,TRUE
+Suriname,165,14797.07017,TRUE
+Suriname,215,209706,FALSE
+Suriname,261,8946.089355,TRUE
+Suriname,281,136069.2843,TRUE
+Suriname,302,27087.34387,TRUE
+Suriname,310,36133,TRUE
+Suriname,106,13595.99028,TRUE
+Suriname,30,62885.73079,TRUE
+Suriname,91,126485.3041,TRUE
+Suriname,192,3780098.195,TRUE
+Suriname,249,70032.42373,TRUE
+Suriname,308,35296.76443,TRUE
+Suriname,116,98484.54468,TRUE
+Suriname,234,8162.890747,TRUE
+Suriname,88,138218.959,TRUE
+Suriname,227,9358.848173,TRUE
+Suriname,8,21599.0332,TRUE
+Suriname,115,186672.4488,TRUE
+Suriname,146,28645.96233,TRUE
+Suriname,257,14862.84549,TRUE
+Suriname,39,10075.63454,TRUE
+Suriname,61,218943.5096,TRUE
+Suriname,76,100326.9844,TRUE
+Suriname,268,27005.25,TRUE
+Suriname,194,9390.783666,TRUE
+Suriname,198,5299.135169,TRUE
+Suriname,245,11957.75,TRUE
+Suriname,86,15341.61704,TRUE
+Suriname,247,27947.125,TRUE
+Suriname,15,5922.875,TRUE
+Suriname,135,5719.346191,TRUE
+Suriname,65,4252.65625,TRUE
+Suriname,70,8796.273438,TRUE
+Suriname,314,4472.643433,TRUE
+Suriname,133,6124.625,TRUE
+Suriname,240,4373.4375,TRUE
+Suriname,148,23186,TRUE
+Suriname,31,5157,TRUE
+Eswatini,4,12900,FALSE
+Eswatini,5,7484.490489,TRUE
+Eswatini,7,111437.9893,TRUE
+Eswatini,8,47030.54376,TRUE
+Eswatini,17,33099.94094,TRUE
+Eswatini,105,149702.6633,TRUE
+Eswatini,120,115713.1489,TRUE
+Eswatini,161,8730.264786,TRUE
+Eswatini,169,11434,FALSE
+Eswatini,179,121608.9919,TRUE
+Eswatini,180,7520.279265,TRUE
+Eswatini,203,26179.47154,TRUE
+Eswatini,205,158255.8483,TRUE
+Eswatini,208,61181,FALSE
+Eswatini,219,80605.62094,TRUE
+Eswatini,221,53059.48552,TRUE
+Eswatini,229,16244.65912,TRUE
+Eswatini,231,54279,FALSE
+Eswatini,235,20860,FALSE
+Eswatini,254,34837,FALSE
+Eswatini,84,6653,FALSE
+Eswatini,267,9372.487582,TRUE
+Eswatini,282,423220.8453,TRUE
+Eswatini,286,965114,FALSE
+Eswatini,289,9979.922823,TRUE
+Eswatini,316,72255.87156,TRUE
+Eswatini,317,188762.6372,TRUE
+Eswatini,318,17443,FALSE
+Eswatini,18,1180,FALSE
+Eswatini,19,77366.60983,TRUE
+Eswatini,33,30270.38924,TRUE
+Eswatini,40,180987.6885,TRUE
+Eswatini,49,247408.5214,TRUE
+Eswatini,54,175365.1249,TRUE
+Eswatini,58,74040.89691,TRUE
+Eswatini,59,22326.21725,TRUE
+Eswatini,63,234336.5313,TRUE
+Eswatini,90,194487.8189,TRUE
+Eswatini,94,31879,FALSE
+Eswatini,101,138512.4356,TRUE
+Eswatini,112,122104.9439,TRUE
+Eswatini,138,17125.18189,TRUE
+Eswatini,152,119704.6269,TRUE
+Eswatini,154,96782.90416,TRUE
+Eswatini,158,96473.15601,TRUE
+Eswatini,200,22918.25267,TRUE
+Eswatini,202,85300.04797,TRUE
+Eswatini,206,183393.7134,TRUE
+Eswatini,218,52990.31222,TRUE
+Eswatini,238,116960.1876,TRUE
+Eswatini,243,112174.5654,TRUE
+Eswatini,259,55616.6005,TRUE
+Eswatini,276,10950.60863,TRUE
+Eswatini,279,177754.1672,TRUE
+Eswatini,298,42728,FALSE
+Eswatini,305,5031,FALSE
+Eswatini,306,127061,FALSE
+Eswatini,11,178064.2799,TRUE
+Eswatini,16,59824,FALSE
+Eswatini,48,27222.34375,TRUE
+Eswatini,60,22383.25858,TRUE
+Eswatini,63,11715.28525,TRUE
+Eswatini,121,108537,FALSE
+Eswatini,128,3951,FALSE
+Eswatini,156,10200.29705,TRUE
+Eswatini,217,21196.4891,TRUE
+Eswatini,248,14225.32829,TRUE
+Eswatini,270,5903,FALSE
+Eswatini,52,72720.10141,TRUE
+Eswatini,74,4541.36112,TRUE
+Eswatini,75,47178.96176,TRUE
+Eswatini,80,49992.57574,TRUE
+Eswatini,301,113987.8459,TRUE
+Eswatini,319,89190.44102,TRUE
+Eswatini,51,26504.47085,TRUE
+Eswatini,53,6581.96824,TRUE
+Eswatini,77,5993.147024,TRUE
+Eswatini,213,124295.9159,TRUE
+Eswatini,228,325216,FALSE
+Eswatini,269,15171.62496,TRUE
+Eswatini,296,18573,FALSE
+Eswatini,175,28720,FALSE
+Eswatini,12,36715.19395,TRUE
+Eswatini,13,60498,FALSE
+Eswatini,108,12577.92841,TRUE
+Eswatini,165,14797.07017,TRUE
+Eswatini,215,105585.0293,TRUE
+Eswatini,261,8946.089355,TRUE
+Eswatini,281,136069.2843,TRUE
+Eswatini,302,27087.34387,TRUE
+Eswatini,310,36133,TRUE
+Eswatini,106,13595.99028,TRUE
+Eswatini,30,62885.73079,TRUE
+Eswatini,91,126485.3041,TRUE
+Eswatini,192,3780098.195,TRUE
+Eswatini,249,70032.42373,TRUE
+Eswatini,308,35296.76443,TRUE
+Eswatini,116,98484.54468,TRUE
+Eswatini,234,8162.890747,TRUE
+Eswatini,88,138218.959,TRUE
+Eswatini,227,9358.848173,TRUE
+Eswatini,8,21599.0332,TRUE
+Eswatini,115,186672.4488,TRUE
+Eswatini,146,28645.96233,TRUE
+Eswatini,257,14862.84549,TRUE
+Eswatini,39,10075.63454,TRUE
+Eswatini,61,218943.5096,TRUE
+Eswatini,76,100326.9844,TRUE
+Eswatini,268,27005.25,TRUE
+Eswatini,194,9390.783666,TRUE
+Eswatini,198,5299.135169,TRUE
+Eswatini,245,11957.75,TRUE
+Eswatini,86,3529,FALSE
+Eswatini,247,27947.125,TRUE
+Eswatini,15,5922.875,TRUE
+Eswatini,135,5719.346191,TRUE
+Eswatini,65,4252.65625,TRUE
+Eswatini,70,8796.273438,TRUE
+Eswatini,314,4472.643433,TRUE
+Eswatini,133,6124.625,TRUE
+Eswatini,240,4373.4375,TRUE
+Eswatini,148,23186,TRUE
+Eswatini,31,5157,TRUE
+Sweden,4,20977.52128,TRUE
+Sweden,5,7484.490489,TRUE
+Sweden,7,170649,FALSE
+Sweden,8,47030.54376,TRUE
+Sweden,17,48032,FALSE
+Sweden,105,149702.6633,TRUE
+Sweden,120,115713.1489,TRUE
+Sweden,161,20072,FALSE
+Sweden,169,16777.49735,TRUE
+Sweden,179,121608.9919,TRUE
+Sweden,180,7520.279265,TRUE
+Sweden,203,26179.47154,TRUE
+Sweden,205,446316,FALSE
+Sweden,208,84004.18102,TRUE
+Sweden,219,80605.62094,TRUE
+Sweden,221,117500,FALSE
+Sweden,229,16244.65912,TRUE
+Sweden,231,50000,FALSE
+Sweden,235,357291,FALSE
+Sweden,254,26952.37295,TRUE
+Sweden,84,9355.713607,TRUE
+Sweden,267,9372.487582,TRUE
+Sweden,282,649804,FALSE
+Sweden,286,760050.6713,TRUE
+Sweden,289,9979.922823,TRUE
+Sweden,316,72255.87156,TRUE
+Sweden,317,188762.6372,TRUE
+Sweden,318,63204,FALSE
+Sweden,18,35069,FALSE
+Sweden,19,77366.60983,TRUE
+Sweden,33,30270.38924,TRUE
+Sweden,40,389250,FALSE
+Sweden,49,558250,FALSE
+Sweden,54,111159,FALSE
+Sweden,58,25000,FALSE
+Sweden,59,22326.21725,TRUE
+Sweden,63,234336.5313,TRUE
+Sweden,90,1561111,FALSE
+Sweden,94,61002.28577,TRUE
+Sweden,101,138512.4356,TRUE
+Sweden,112,122104.9439,TRUE
+Sweden,138,17125.18189,TRUE
+Sweden,152,293000,FALSE
+Sweden,154,96782.90416,TRUE
+Sweden,158,200736,FALSE
+Sweden,200,44421,FALSE
+Sweden,202,85300.04797,TRUE
+Sweden,206,183393.7134,TRUE
+Sweden,218,47255,FALSE
+Sweden,238,116960.1876,TRUE
+Sweden,243,112174.5654,TRUE
+Sweden,259,61171,FALSE
+Sweden,276,10950.60863,TRUE
+Sweden,279,177754.1672,TRUE
+Sweden,298,120463.1286,TRUE
+Sweden,305,15590.0347,TRUE
+Sweden,306,3655000,FALSE
+Sweden,11,178064.2799,TRUE
+Sweden,16,74389.59543,TRUE
+Sweden,48,27222.34375,TRUE
+Sweden,60,22383.25858,TRUE
+Sweden,63,11715.28525,TRUE
+Sweden,121,115777.4722,TRUE
+Sweden,128,9353.124815,TRUE
+Sweden,156,10200.29705,TRUE
+Sweden,217,36867,FALSE
+Sweden,248,28921,FALSE
+Sweden,270,9151.63574,TRUE
+Sweden,52,72720.10141,TRUE
+Sweden,74,4541.36112,TRUE
+Sweden,75,47178.96176,TRUE
+Sweden,80,49992.57574,TRUE
+Sweden,301,113987.8459,TRUE
+Sweden,319,89190.44102,TRUE
+Sweden,51,26504.47085,TRUE
+Sweden,53,6581.96824,TRUE
+Sweden,77,5993.147024,TRUE
+Sweden,213,124295.9159,TRUE
+Sweden,228,133880.2683,TRUE
+Sweden,269,15171.62496,TRUE
+Sweden,296,43692.55808,TRUE
+Sweden,175,70802.39066,TRUE
+Sweden,12,36715.19395,TRUE
+Sweden,13,74728.86082,TRUE
+Sweden,108,12577.92841,TRUE
+Sweden,165,14797.07017,TRUE
+Sweden,215,105585.0293,TRUE
+Sweden,261,8946.089355,TRUE
+Sweden,281,76020,FALSE
+Sweden,302,27087.34387,TRUE
+Sweden,310,36133,TRUE
+Sweden,106,13595.99028,TRUE
+Sweden,30,30000,FALSE
+Sweden,91,10000,FALSE
+Sweden,192,3780098.195,TRUE
+Sweden,249,48462,FALSE
+Sweden,308,52316,FALSE
+Sweden,116,98484.54468,TRUE
+Sweden,234,8162.890747,TRUE
+Sweden,88,138218.959,TRUE
+Sweden,227,9358.848173,TRUE
+Sweden,8,21599.0332,TRUE
+Sweden,115,186672.4488,TRUE
+Sweden,146,28645.96233,TRUE
+Sweden,257,14862.84549,TRUE
+Sweden,39,10075.63454,TRUE
+Sweden,61,218943.5096,TRUE
+Sweden,76,100326.9844,TRUE
+Sweden,268,27005.25,TRUE
+Sweden,194,9390.783666,TRUE
+Sweden,198,5299.135169,TRUE
+Sweden,245,11957.75,TRUE
+Sweden,86,15341.61704,TRUE
+Sweden,247,27947.125,TRUE
+Sweden,15,5922.875,TRUE
+Sweden,135,5719.346191,TRUE
+Sweden,65,4252.65625,TRUE
+Sweden,70,8796.273438,TRUE
+Sweden,314,4472.643433,TRUE
+Sweden,133,6124.625,TRUE
+Sweden,240,4373.4375,TRUE
+Sweden,148,23186,TRUE
+Sweden,31,5157,TRUE
+Switzerland,4,20977.52128,TRUE
+Switzerland,5,7484.490489,TRUE
+Switzerland,7,587666,FALSE
+Switzerland,8,123605,FALSE
+Switzerland,17,55523,FALSE
+Switzerland,105,149702.6633,TRUE
+Switzerland,120,92254,FALSE
+Switzerland,161,21185,FALSE
+Switzerland,169,96839,FALSE
+Switzerland,179,0,FALSE
+Switzerland,180,21111,FALSE
+Switzerland,203,26179.47154,TRUE
+Switzerland,205,438956,FALSE
+Switzerland,208,84004.18102,TRUE
+Switzerland,219,213402,FALSE
+Switzerland,221,578681,FALSE
+Switzerland,229,16244.65912,TRUE
+Switzerland,231,208027,FALSE
+Switzerland,235,340427,FALSE
+Switzerland,254,26952.37295,TRUE
+Switzerland,84,9355.713607,TRUE
+Switzerland,267,9372.487582,TRUE
+Switzerland,282,668975,FALSE
+Switzerland,286,760050.6713,TRUE
+Switzerland,289,26612,FALSE
+Switzerland,316,14626,FALSE
+Switzerland,317,188762.6372,TRUE
+Switzerland,318,43705,FALSE
+Switzerland,18,11273.75269,TRUE
+Switzerland,19,72400,FALSE
+Switzerland,33,26176,FALSE
+Switzerland,40,327939,FALSE
+Switzerland,49,345234,FALSE
+Switzerland,54,100953,FALSE
+Switzerland,58,139479,FALSE
+Switzerland,59,22326.21725,TRUE
+Switzerland,63,382105,FALSE
+Switzerland,90,1698977,FALSE
+Switzerland,94,61002.28577,TRUE
+Switzerland,101,138512.4356,TRUE
+Switzerland,112,12593,FALSE
+Switzerland,138,18235,FALSE
+Switzerland,152,306197,FALSE
+Switzerland,154,96782.90416,TRUE
+Switzerland,158,200538,FALSE
+Switzerland,200,42197,FALSE
+Switzerland,202,85300.04797,TRUE
+Switzerland,206,154277,FALSE
+Switzerland,218,55536,FALSE
+Switzerland,238,225257,FALSE
+Switzerland,243,885393,FALSE
+Switzerland,259,42373,FALSE
+Switzerland,276,25496,FALSE
+Switzerland,279,159189,FALSE
+Switzerland,298,120463.1286,TRUE
+Switzerland,305,21462,FALSE
+Switzerland,306,2280707,FALSE
+Switzerland,11,7500,FALSE
+Switzerland,16,74389.59543,TRUE
+Switzerland,48,27222.34375,TRUE
+Switzerland,60,22383.25858,TRUE
+Switzerland,63,382105,FALSE
+Switzerland,121,115777.4722,TRUE
+Switzerland,128,9353.124815,TRUE
+Switzerland,156,10200.29705,TRUE
+Switzerland,217,19813,FALSE
+Switzerland,248,34272,FALSE
+Switzerland,270,9151.63574,TRUE
+Switzerland,52,72720.10141,TRUE
+Switzerland,74,4541.36112,TRUE
+Switzerland,75,47178.96176,TRUE
+Switzerland,80,33646,FALSE
+Switzerland,301,113987.8459,TRUE
+Switzerland,319,89190.44102,TRUE
+Switzerland,51,26504.47085,TRUE
+Switzerland,53,6581.96824,TRUE
+Switzerland,77,5993.147024,TRUE
+Switzerland,213,124295.9159,TRUE
+Switzerland,228,133880.2683,TRUE
+Switzerland,269,15171.62496,TRUE
+Switzerland,296,43692.55808,TRUE
+Switzerland,175,70802.39066,TRUE
+Switzerland,12,14783,FALSE
+Switzerland,13,74728.86082,TRUE
+Switzerland,108,12577.92841,TRUE
+Switzerland,165,19478,FALSE
+Switzerland,215,105585.0293,TRUE
+Switzerland,261,8946.089355,TRUE
+Switzerland,281,183881,FALSE
+Switzerland,302,27087.34387,TRUE
+Switzerland,310,36133,TRUE
+Switzerland,106,13595.99028,TRUE
+Switzerland,30,49339,FALSE
+Switzerland,91,143160,FALSE
+Switzerland,192,3780098.195,TRUE
+Switzerland,249,148662,FALSE
+Switzerland,308,41484,FALSE
+Switzerland,116,172825,FALSE
+Switzerland,234,8162.890747,TRUE
+Switzerland,88,138218.959,TRUE
+Switzerland,227,9358.848173,TRUE
+Switzerland,8,123605,FALSE
+Switzerland,115,186672.4488,TRUE
+Switzerland,146,28645.96233,TRUE
+Switzerland,257,14862.84549,TRUE
+Switzerland,39,10075.63454,TRUE
+Switzerland,61,218943.5096,TRUE
+Switzerland,76,100326.9844,TRUE
+Switzerland,268,27005.25,TRUE
+Switzerland,194,9390.783666,TRUE
+Switzerland,198,5299.135169,TRUE
+Switzerland,245,11957.75,TRUE
+Switzerland,86,15341.61704,TRUE
+Switzerland,247,27947.125,TRUE
+Switzerland,15,5922.875,TRUE
+Switzerland,135,5719.346191,TRUE
+Switzerland,65,4252.65625,TRUE
+Switzerland,70,8796.273438,TRUE
+Switzerland,314,4472.643433,TRUE
+Switzerland,133,6124.625,TRUE
+Switzerland,240,4373.4375,TRUE
+Switzerland,148,23186,TRUE
+Switzerland,31,5157,TRUE
+Syrian Arab Republic,4,6380,FALSE
+Syrian Arab Republic,5,5922,FALSE
+Syrian Arab Republic,7,66158,FALSE
+Syrian Arab Republic,8,46549,FALSE
+Syrian Arab Republic,17,5688,FALSE
+Syrian Arab Republic,105,46018,FALSE
+Syrian Arab Republic,120,62094,FALSE
+Syrian Arab Republic,161,8730.264786,TRUE
+Syrian Arab Republic,169,38170,FALSE
+Syrian Arab Republic,179,151050,FALSE
+Syrian Arab Republic,180,17787,FALSE
+Syrian Arab Republic,203,11748,FALSE
+Syrian Arab Republic,205,160679,FALSE
+Syrian Arab Republic,208,285003,FALSE
+Syrian Arab Republic,219,78282,FALSE
+Syrian Arab Republic,221,52639,FALSE
+Syrian Arab Republic,229,10258,FALSE
+Syrian Arab Republic,231,69739,FALSE
+Syrian Arab Republic,235,198694,FALSE
+Syrian Arab Republic,254,26952.37295,TRUE
+Syrian Arab Republic,84,37364,FALSE
+Syrian Arab Republic,267,8223,FALSE
+Syrian Arab Republic,282,486773,FALSE
+Syrian Arab Republic,286,830342,FALSE
+Syrian Arab Republic,289,14286,FALSE
+Syrian Arab Republic,316,72255.87156,TRUE
+Syrian Arab Republic,317,204524,FALSE
+Syrian Arab Republic,318,22331,FALSE
+Syrian Arab Republic,18,29599,FALSE
+Syrian Arab Republic,19,90150,FALSE
+Syrian Arab Republic,33,20336,FALSE
+Syrian Arab Republic,40,183520,FALSE
+Syrian Arab Republic,49,259460,FALSE
+Syrian Arab Republic,54,172969,FALSE
+Syrian Arab Republic,58,19756,FALSE
+Syrian Arab Republic,59,22326.21725,TRUE
+Syrian Arab Republic,63,11508,FALSE
+Syrian Arab Republic,90,136939,FALSE
+Syrian Arab Republic,94,103187,FALSE
+Syrian Arab Republic,101,203928,FALSE
+Syrian Arab Republic,112,98915,FALSE
+Syrian Arab Republic,138,17125.18189,TRUE
+Syrian Arab Republic,152,119704.6269,TRUE
+Syrian Arab Republic,154,221942,FALSE
+Syrian Arab Republic,158,192876,FALSE
+Syrian Arab Republic,200,17226,FALSE
+Syrian Arab Republic,202,35137,FALSE
+Syrian Arab Republic,206,125104,FALSE
+Syrian Arab Republic,218,68859,FALSE
+Syrian Arab Republic,238,146030,FALSE
+Syrian Arab Republic,243,54799,FALSE
+Syrian Arab Republic,259,55616.6005,TRUE
+Syrian Arab Republic,276,20494,FALSE
+Syrian Arab Republic,279,177754.1672,TRUE
+Syrian Arab Republic,298,187871,FALSE
+Syrian Arab Republic,305,13901,FALSE
+Syrian Arab Republic,306,583040,FALSE
+Syrian Arab Republic,11,139715,FALSE
+Syrian Arab Republic,16,677030,FALSE
+Syrian Arab Republic,48,27222.34375,TRUE
+Syrian Arab Republic,60,6610,FALSE
+Syrian Arab Republic,63,11508,FALSE
+Syrian Arab Republic,121,266638,FALSE
+Syrian Arab Republic,128,26865,FALSE
+Syrian Arab Republic,156,8611,FALSE
+Syrian Arab Republic,217,14130,FALSE
+Syrian Arab Republic,248,14225.32829,TRUE
+Syrian Arab Republic,270,24244,FALSE
+Syrian Arab Republic,52,72720.10141,TRUE
+Syrian Arab Republic,74,4541.36112,TRUE
+Syrian Arab Republic,75,47178.96176,TRUE
+Syrian Arab Republic,80,49992.57574,TRUE
+Syrian Arab Republic,301,113987.8459,TRUE
+Syrian Arab Republic,319,89190.44102,TRUE
+Syrian Arab Republic,51,26504.47085,TRUE
+Syrian Arab Republic,53,24159,FALSE
+Syrian Arab Republic,77,5993.147024,TRUE
+Syrian Arab Republic,213,124295.9159,TRUE
+Syrian Arab Republic,228,133880.2683,TRUE
+Syrian Arab Republic,269,15171.62496,TRUE
+Syrian Arab Republic,296,43692.55808,TRUE
+Syrian Arab Republic,175,70802.39066,TRUE
+Syrian Arab Republic,12,36715.19395,TRUE
+Syrian Arab Republic,13,74728.86082,TRUE
+Syrian Arab Republic,108,12577.92841,TRUE
+Syrian Arab Republic,165,11424,FALSE
+Syrian Arab Republic,215,105585.0293,TRUE
+Syrian Arab Republic,261,8946.089355,TRUE
+Syrian Arab Republic,281,136069.2843,TRUE
+Syrian Arab Republic,302,27087.34387,TRUE
+Syrian Arab Republic,310,36133,TRUE
+Syrian Arab Republic,106,13595.99028,TRUE
+Syrian Arab Republic,30,62885.73079,TRUE
+Syrian Arab Republic,91,126485.3041,TRUE
+Syrian Arab Republic,192,3780098.195,TRUE
+Syrian Arab Republic,249,70032.42373,TRUE
+Syrian Arab Republic,308,35296.76443,TRUE
+Syrian Arab Republic,116,98484.54468,TRUE
+Syrian Arab Republic,234,8162.890747,TRUE
+Syrian Arab Republic,88,138218.959,TRUE
+Syrian Arab Republic,227,9358.848173,TRUE
+Syrian Arab Republic,8,46549,FALSE
+Syrian Arab Republic,115,186672.4488,TRUE
+Syrian Arab Republic,146,28645.96233,TRUE
+Syrian Arab Republic,257,14862.84549,TRUE
+Syrian Arab Republic,39,10075.63454,TRUE
+Syrian Arab Republic,61,218943.5096,TRUE
+Syrian Arab Republic,76,100326.9844,TRUE
+Syrian Arab Republic,268,27005.25,TRUE
+Syrian Arab Republic,194,9390.783666,TRUE
+Syrian Arab Republic,198,5299.135169,TRUE
+Syrian Arab Republic,245,11957.75,TRUE
+Syrian Arab Republic,86,15341.61704,TRUE
+Syrian Arab Republic,247,27947.125,TRUE
+Syrian Arab Republic,15,5922.875,TRUE
+Syrian Arab Republic,135,5719.346191,TRUE
+Syrian Arab Republic,65,4252.65625,TRUE
+Syrian Arab Republic,70,8796.273438,TRUE
+Syrian Arab Republic,314,4472.643433,TRUE
+Syrian Arab Republic,133,6124.625,TRUE
+Syrian Arab Republic,240,4373.4375,TRUE
+Syrian Arab Republic,148,23186,TRUE
+Syrian Arab Republic,31,5157,TRUE
+Tajikistan,4,7341,FALSE
+Tajikistan,5,7484.490489,TRUE
+Tajikistan,7,52867,FALSE
+Tajikistan,8,27009,FALSE
+Tajikistan,17,18292,FALSE
+Tajikistan,105,41229,FALSE
+Tajikistan,120,67359,FALSE
+Tajikistan,161,8730.264786,TRUE
+Tajikistan,169,123634,FALSE
+Tajikistan,179,121608.9919,TRUE
+Tajikistan,180,13949,FALSE
+Tajikistan,203,26179.47154,TRUE
+Tajikistan,205,280865,FALSE
+Tajikistan,208,144387,FALSE
+Tajikistan,219,23888,FALSE
+Tajikistan,221,53059.48552,TRUE
+Tajikistan,229,16244.65912,TRUE
+Tajikistan,231,3113,FALSE
+Tajikistan,235,216013,FALSE
+Tajikistan,254,70534,FALSE
+Tajikistan,84,17514,FALSE
+Tajikistan,267,11364,FALSE
+Tajikistan,282,423220.8453,TRUE
+Tajikistan,286,760050.6713,TRUE
+Tajikistan,289,24145,FALSE
+Tajikistan,316,72255.87156,TRUE
+Tajikistan,317,297531,FALSE
+Tajikistan,318,30828,FALSE
+Tajikistan,18,50242,FALSE
+Tajikistan,19,50242,FALSE
+Tajikistan,33,30270.38924,TRUE
+Tajikistan,40,391263,FALSE
+Tajikistan,49,401199,FALSE
+Tajikistan,54,175365.1249,TRUE
+Tajikistan,58,74040.89691,TRUE
+Tajikistan,59,22326.21725,TRUE
+Tajikistan,63,234336.5313,TRUE
+Tajikistan,90,296726,FALSE
+Tajikistan,94,61002.28577,TRUE
+Tajikistan,101,138512.4356,TRUE
+Tajikistan,112,146935,FALSE
+Tajikistan,138,17125.18189,TRUE
+Tajikistan,152,119704.6269,TRUE
+Tajikistan,154,136635,FALSE
+Tajikistan,158,96473.15601,TRUE
+Tajikistan,200,12873,FALSE
+Tajikistan,202,85300.04797,TRUE
+Tajikistan,206,183393.7134,TRUE
+Tajikistan,218,52990.31222,TRUE
+Tajikistan,238,116960.1876,TRUE
+Tajikistan,243,112174.5654,TRUE
+Tajikistan,259,22100,FALSE
+Tajikistan,276,3225,FALSE
+Tajikistan,279,177754.1672,TRUE
+Tajikistan,298,120463.1286,TRUE
+Tajikistan,305,14760,FALSE
+Tajikistan,306,266527,FALSE
+Tajikistan,11,178064.2799,TRUE
+Tajikistan,16,74389.59543,TRUE
+Tajikistan,48,27222.34375,TRUE
+Tajikistan,60,22383.25858,TRUE
+Tajikistan,63,11715.28525,TRUE
+Tajikistan,121,115777.4722,TRUE
+Tajikistan,128,30001,FALSE
+Tajikistan,156,15603,FALSE
+Tajikistan,217,11278,FALSE
+Tajikistan,248,6254,FALSE
+Tajikistan,270,17667,FALSE
+Tajikistan,52,72720.10141,TRUE
+Tajikistan,74,4541.36112,TRUE
+Tajikistan,75,47178.96176,TRUE
+Tajikistan,80,49992.57574,TRUE
+Tajikistan,301,113987.8459,TRUE
+Tajikistan,319,89190.44102,TRUE
+Tajikistan,51,26504.47085,TRUE
+Tajikistan,53,6581.96824,TRUE
+Tajikistan,77,5993.147024,TRUE
+Tajikistan,213,124295.9159,TRUE
+Tajikistan,228,133880.2683,TRUE
+Tajikistan,269,15171.62496,TRUE
+Tajikistan,296,43692.55808,TRUE
+Tajikistan,175,70802.39066,TRUE
+Tajikistan,12,36715.19395,TRUE
+Tajikistan,13,74728.86082,TRUE
+Tajikistan,108,12577.92841,TRUE
+Tajikistan,165,14797.07017,TRUE
+Tajikistan,215,105585.0293,TRUE
+Tajikistan,261,9476,FALSE
+Tajikistan,281,136069.2843,TRUE
+Tajikistan,302,27087.34387,TRUE
+Tajikistan,310,36133,TRUE
+Tajikistan,106,12266,FALSE
+Tajikistan,30,62885.73079,TRUE
+Tajikistan,91,126485.3041,TRUE
+Tajikistan,192,3780098.195,TRUE
+Tajikistan,249,70032.42373,TRUE
+Tajikistan,308,35296.76443,TRUE
+Tajikistan,116,98484.54468,TRUE
+Tajikistan,234,8162.890747,TRUE
+Tajikistan,88,138218.959,TRUE
+Tajikistan,227,9358.848173,TRUE
+Tajikistan,8,27009,FALSE
+Tajikistan,115,186672.4488,TRUE
+Tajikistan,146,28645.96233,TRUE
+Tajikistan,257,14862.84549,TRUE
+Tajikistan,39,10075.63454,TRUE
+Tajikistan,61,218943.5096,TRUE
+Tajikistan,76,100326.9844,TRUE
+Tajikistan,268,27005.25,TRUE
+Tajikistan,194,9390.783666,TRUE
+Tajikistan,198,5299.135169,TRUE
+Tajikistan,245,11957.75,TRUE
+Tajikistan,86,15341.61704,TRUE
+Tajikistan,247,27947.125,TRUE
+Tajikistan,15,5922.875,TRUE
+Tajikistan,135,5719.346191,TRUE
+Tajikistan,65,4252.65625,TRUE
+Tajikistan,70,8796.273438,TRUE
+Tajikistan,314,4472.643433,TRUE
+Tajikistan,133,6124.625,TRUE
+Tajikistan,240,4373.4375,TRUE
+Tajikistan,148,23186,TRUE
+Tajikistan,31,5157,TRUE
+Thailand,4,20977.52128,TRUE
+Thailand,5,7484.490489,TRUE
+Thailand,7,111437.9893,TRUE
+Thailand,8,17001,FALSE
+Thailand,17,17300,FALSE
+Thailand,105,149702.6633,TRUE
+Thailand,120,170545,FALSE
+Thailand,161,8730.264786,TRUE
+Thailand,169,42287,FALSE
+Thailand,179,121608.9919,TRUE
+Thailand,180,7520.279265,TRUE
+Thailand,203,26179.47154,TRUE
+Thailand,205,268429,FALSE
+Thailand,208,209411,FALSE
+Thailand,219,80605.62094,TRUE
+Thailand,221,53059.48552,TRUE
+Thailand,229,16244.65912,TRUE
+Thailand,231,60255.26389,TRUE
+Thailand,235,163823,FALSE
+Thailand,254,29118,FALSE
+Thailand,84,2172,FALSE
+Thailand,267,6955,FALSE
+Thailand,282,423220.8453,TRUE
+Thailand,286,654422,FALSE
+Thailand,289,22814,FALSE
+Thailand,316,72255.87156,TRUE
+Thailand,317,198386,FALSE
+Thailand,318,9972,FALSE
+Thailand,18,7813,FALSE
+Thailand,19,19048,FALSE
+Thailand,33,30270.38924,TRUE
+Thailand,40,229200,FALSE
+Thailand,49,247408.5214,TRUE
+Thailand,54,122593,FALSE
+Thailand,58,74040.89691,TRUE
+Thailand,59,22326.21725,TRUE
+Thailand,63,41177,FALSE
+Thailand,90,94236,FALSE
+Thailand,94,61002.28577,TRUE
+Thailand,101,227304,FALSE
+Thailand,112,64806,FALSE
+Thailand,138,17125.18189,TRUE
+Thailand,152,119704.6269,TRUE
+Thailand,154,86340,FALSE
+Thailand,158,85947,FALSE
+Thailand,200,22918.25267,TRUE
+Thailand,202,85300.04797,TRUE
+Thailand,206,128548,FALSE
+Thailand,218,150639,FALSE
+Thailand,238,225920,FALSE
+Thailand,243,112174.5654,TRUE
+Thailand,259,55616.6005,TRUE
+Thailand,276,16171,FALSE
+Thailand,279,177754.1672,TRUE
+Thailand,298,136468,FALSE
+Thailand,305,36115,FALSE
+Thailand,306,211059,FALSE
+Thailand,11,178064.2799,TRUE
+Thailand,16,220615,FALSE
+Thailand,48,27222.34375,TRUE
+Thailand,60,22383.25858,TRUE
+Thailand,63,41177,FALSE
+Thailand,121,88610,FALSE
+Thailand,128,16574,FALSE
+Thailand,156,10200.29705,TRUE
+Thailand,217,21196.4891,TRUE
+Thailand,248,14225.32829,TRUE
+Thailand,270,19222,FALSE
+Thailand,52,213165,FALSE
+Thailand,74,29951,FALSE
+Thailand,75,46052,FALSE
+Thailand,80,96672,FALSE
+Thailand,301,97006,FALSE
+Thailand,319,89190.44102,TRUE
+Thailand,51,13971,FALSE
+Thailand,53,9381,FALSE
+Thailand,77,7353,FALSE
+Thailand,213,185696,FALSE
+Thailand,228,242889,FALSE
+Thailand,269,3774,FALSE
+Thailand,296,43692.55808,TRUE
+Thailand,175,83569,FALSE
+Thailand,12,138039,FALSE
+Thailand,13,74728.86082,TRUE
+Thailand,108,12577.92841,TRUE
+Thailand,165,14797.07017,TRUE
+Thailand,215,387126,FALSE
+Thailand,261,8946.089355,TRUE
+Thailand,281,136069.2843,TRUE
+Thailand,302,64120,FALSE
+Thailand,310,36133,TRUE
+Thailand,106,13595.99028,TRUE
+Thailand,30,62885.73079,TRUE
+Thailand,91,126485.3041,TRUE
+Thailand,192,3780098.195,TRUE
+Thailand,249,70032.42373,TRUE
+Thailand,308,35296.76443,TRUE
+Thailand,116,98484.54468,TRUE
+Thailand,234,8162.890747,TRUE
+Thailand,88,138218.959,TRUE
+Thailand,227,9358.848173,TRUE
+Thailand,8,17001,FALSE
+Thailand,115,167476,FALSE
+Thailand,146,30520,FALSE
+Thailand,257,14469,FALSE
+Thailand,39,10075.63454,TRUE
+Thailand,61,218943.5096,TRUE
+Thailand,76,100326.9844,TRUE
+Thailand,268,27005.25,TRUE
+Thailand,194,9390.783666,TRUE
+Thailand,198,5299.135169,TRUE
+Thailand,245,11957.75,TRUE
+Thailand,86,15341.61704,TRUE
+Thailand,247,27947.125,TRUE
+Thailand,15,5922.875,TRUE
+Thailand,135,5719.346191,TRUE
+Thailand,65,4252.65625,TRUE
+Thailand,70,8796.273438,TRUE
+Thailand,314,4472.643433,TRUE
+Thailand,133,6124.625,TRUE
+Thailand,240,4373.4375,TRUE
+Thailand,148,36016,FALSE
+Thailand,31,5157,TRUE
+The former Yugoslav Republic of Macedonia,4,14234,FALSE
+The former Yugoslav Republic of Macedonia,5,7484.490489,TRUE
+The former Yugoslav Republic of Macedonia,7,97354,FALSE
+The former Yugoslav Republic of Macedonia,8,92459,FALSE
+The former Yugoslav Republic of Macedonia,17,35071,FALSE
+The former Yugoslav Republic of Macedonia,105,167109,FALSE
+The former Yugoslav Republic of Macedonia,120,143722,FALSE
+The former Yugoslav Republic of Macedonia,161,8730.264786,TRUE
+The former Yugoslav Republic of Macedonia,169,46266,FALSE
+The former Yugoslav Republic of Macedonia,179,200000,FALSE
+The former Yugoslav Republic of Macedonia,180,15197,FALSE
+The former Yugoslav Republic of Macedonia,203,21136,FALSE
+The former Yugoslav Republic of Macedonia,205,170226,FALSE
+The former Yugoslav Republic of Macedonia,208,84004.18102,TRUE
+The former Yugoslav Republic of Macedonia,219,79229,FALSE
+The former Yugoslav Republic of Macedonia,221,27326,FALSE
+The former Yugoslav Republic of Macedonia,229,16244.65912,TRUE
+The former Yugoslav Republic of Macedonia,231,44259,FALSE
+The former Yugoslav Republic of Macedonia,235,146473,FALSE
+The former Yugoslav Republic of Macedonia,254,49190,FALSE
+The former Yugoslav Republic of Macedonia,84,22318,FALSE
+The former Yugoslav Republic of Macedonia,267,12894,FALSE
+The former Yugoslav Republic of Macedonia,282,297342,FALSE
+The former Yugoslav Republic of Macedonia,286,760050.6713,TRUE
+The former Yugoslav Republic of Macedonia,289,16083,FALSE
+The former Yugoslav Republic of Macedonia,316,7646,FALSE
+The former Yugoslav Republic of Macedonia,317,256527,FALSE
+The former Yugoslav Republic of Macedonia,318,38385,FALSE
+The former Yugoslav Republic of Macedonia,18,10928,FALSE
+The former Yugoslav Republic of Macedonia,19,9521,FALSE
+The former Yugoslav Republic of Macedonia,33,30270.38924,TRUE
+The former Yugoslav Republic of Macedonia,40,319798,FALSE
+The former Yugoslav Republic of Macedonia,49,103590,FALSE
+The former Yugoslav Republic of Macedonia,54,121592,FALSE
+The former Yugoslav Republic of Macedonia,58,11914,FALSE
+The former Yugoslav Republic of Macedonia,59,17981,FALSE
+The former Yugoslav Republic of Macedonia,63,45366,FALSE
+The former Yugoslav Republic of Macedonia,90,508254,FALSE
+The former Yugoslav Republic of Macedonia,94,61002.28577,TRUE
+The former Yugoslav Republic of Macedonia,101,185045,FALSE
+The former Yugoslav Republic of Macedonia,112,43160,FALSE
+The former Yugoslav Republic of Macedonia,138,17125.18189,TRUE
+The former Yugoslav Republic of Macedonia,152,267871,FALSE
+The former Yugoslav Republic of Macedonia,154,96782.90416,TRUE
+The former Yugoslav Republic of Macedonia,158,181991,FALSE
+The former Yugoslav Republic of Macedonia,200,21103,FALSE
+The former Yugoslav Republic of Macedonia,202,85300.04797,TRUE
+The former Yugoslav Republic of Macedonia,206,237170,FALSE
+The former Yugoslav Republic of Macedonia,218,22093,FALSE
+The former Yugoslav Republic of Macedonia,238,116960.1876,TRUE
+The former Yugoslav Republic of Macedonia,243,109726,FALSE
+The former Yugoslav Republic of Macedonia,259,22775,FALSE
+The former Yugoslav Republic of Macedonia,276,10000,FALSE
+The former Yugoslav Republic of Macedonia,279,137004,FALSE
+The former Yugoslav Republic of Macedonia,298,120463.1286,TRUE
+The former Yugoslav Republic of Macedonia,305,15537,FALSE
+The former Yugoslav Republic of Macedonia,306,288992,FALSE
+The former Yugoslav Republic of Macedonia,11,178064.2799,TRUE
+The former Yugoslav Republic of Macedonia,16,74389.59543,TRUE
+The former Yugoslav Republic of Macedonia,48,27222.34375,TRUE
+The former Yugoslav Republic of Macedonia,60,13078,FALSE
+The former Yugoslav Republic of Macedonia,63,45366,FALSE
+The former Yugoslav Republic of Macedonia,121,115777.4722,TRUE
+The former Yugoslav Republic of Macedonia,128,9353.124815,TRUE
+The former Yugoslav Republic of Macedonia,156,13095,FALSE
+The former Yugoslav Republic of Macedonia,217,21633,FALSE
+The former Yugoslav Republic of Macedonia,248,20971,FALSE
+The former Yugoslav Republic of Macedonia,270,11862,FALSE
+The former Yugoslav Republic of Macedonia,52,72720.10141,TRUE
+The former Yugoslav Republic of Macedonia,74,4541.36112,TRUE
+The former Yugoslav Republic of Macedonia,75,47178.96176,TRUE
+The former Yugoslav Republic of Macedonia,80,100178,FALSE
+The former Yugoslav Republic of Macedonia,301,113987.8459,TRUE
+The former Yugoslav Republic of Macedonia,319,89190.44102,TRUE
+The former Yugoslav Republic of Macedonia,51,26504.47085,TRUE
+The former Yugoslav Republic of Macedonia,53,6581.96824,TRUE
+The former Yugoslav Republic of Macedonia,77,5993.147024,TRUE
+The former Yugoslav Republic of Macedonia,213,124295.9159,TRUE
+The former Yugoslav Republic of Macedonia,228,133880.2683,TRUE
+The former Yugoslav Republic of Macedonia,269,15171.62496,TRUE
+The former Yugoslav Republic of Macedonia,296,43692.55808,TRUE
+The former Yugoslav Republic of Macedonia,175,70802.39066,TRUE
+The former Yugoslav Republic of Macedonia,12,24581,FALSE
+The former Yugoslav Republic of Macedonia,13,74728.86082,TRUE
+The former Yugoslav Republic of Macedonia,108,12577.92841,TRUE
+The former Yugoslav Republic of Macedonia,165,14797.07017,TRUE
+The former Yugoslav Republic of Macedonia,215,105585.0293,TRUE
+The former Yugoslav Republic of Macedonia,261,8946.089355,TRUE
+The former Yugoslav Republic of Macedonia,281,54530,FALSE
+The former Yugoslav Republic of Macedonia,302,27087.34387,TRUE
+The former Yugoslav Republic of Macedonia,310,36133,TRUE
+The former Yugoslav Republic of Macedonia,106,13595.99028,TRUE
+The former Yugoslav Republic of Macedonia,30,62885.73079,TRUE
+The former Yugoslav Republic of Macedonia,91,73297,FALSE
+The former Yugoslav Republic of Macedonia,192,3780098.195,TRUE
+The former Yugoslav Republic of Macedonia,249,43810,FALSE
+The former Yugoslav Republic of Macedonia,308,35296.76443,TRUE
+The former Yugoslav Republic of Macedonia,116,98484.54468,TRUE
+The former Yugoslav Republic of Macedonia,234,8571,FALSE
+The former Yugoslav Republic of Macedonia,88,60379,FALSE
+The former Yugoslav Republic of Macedonia,227,9358.848173,TRUE
+The former Yugoslav Republic of Macedonia,8,92459,FALSE
+The former Yugoslav Republic of Macedonia,115,186672.4488,TRUE
+The former Yugoslav Republic of Macedonia,146,28645.96233,TRUE
+The former Yugoslav Republic of Macedonia,257,14862.84549,TRUE
+The former Yugoslav Republic of Macedonia,39,10075.63454,TRUE
+The former Yugoslav Republic of Macedonia,61,218943.5096,TRUE
+The former Yugoslav Republic of Macedonia,76,100326.9844,TRUE
+The former Yugoslav Republic of Macedonia,268,27005.25,TRUE
+The former Yugoslav Republic of Macedonia,194,9390.783666,TRUE
+The former Yugoslav Republic of Macedonia,198,5299.135169,TRUE
+The former Yugoslav Republic of Macedonia,245,11957.75,TRUE
+The former Yugoslav Republic of Macedonia,86,35588,FALSE
+The former Yugoslav Republic of Macedonia,247,27947.125,TRUE
+The former Yugoslav Republic of Macedonia,15,5922.875,TRUE
+The former Yugoslav Republic of Macedonia,135,5719.346191,TRUE
+The former Yugoslav Republic of Macedonia,65,4252.65625,TRUE
+The former Yugoslav Republic of Macedonia,70,8796.273438,TRUE
+The former Yugoslav Republic of Macedonia,314,4472.643433,TRUE
+The former Yugoslav Republic of Macedonia,133,6124.625,TRUE
+The former Yugoslav Republic of Macedonia,240,4373.4375,TRUE
+The former Yugoslav Republic of Macedonia,148,23186,TRUE
+The former Yugoslav Republic of Macedonia,31,5157,TRUE
+Timor-Leste,4,20977.52128,TRUE
+Timor-Leste,5,7484.490489,TRUE
+Timor-Leste,7,111437.9893,TRUE
+Timor-Leste,8,47030.54376,TRUE
+Timor-Leste,17,33099.94094,TRUE
+Timor-Leste,105,149702.6633,TRUE
+Timor-Leste,120,115713.1489,TRUE
+Timor-Leste,161,8730.264786,TRUE
+Timor-Leste,169,21572,FALSE
+Timor-Leste,179,121608.9919,TRUE
+Timor-Leste,180,7520.279265,TRUE
+Timor-Leste,203,26179.47154,TRUE
+Timor-Leste,205,158255.8483,TRUE
+Timor-Leste,208,87381,FALSE
+Timor-Leste,219,80605.62094,TRUE
+Timor-Leste,221,53059.48552,TRUE
+Timor-Leste,229,16244.65912,TRUE
+Timor-Leste,231,60255.26389,TRUE
+Timor-Leste,235,13063,FALSE
+Timor-Leste,254,30340,FALSE
+Timor-Leste,84,9355.713607,TRUE
+Timor-Leste,267,9372.487582,TRUE
+Timor-Leste,282,423220.8453,TRUE
+Timor-Leste,286,760050.6713,TRUE
+Timor-Leste,289,9979.922823,TRUE
+Timor-Leste,316,72255.87156,TRUE
+Timor-Leste,317,188762.6372,TRUE
+Timor-Leste,318,32261.2753,TRUE
+Timor-Leste,18,12250,FALSE
+Timor-Leste,19,8733,FALSE
+Timor-Leste,33,30270.38924,TRUE
+Timor-Leste,40,106928,FALSE
+Timor-Leste,49,247408.5214,TRUE
+Timor-Leste,54,175365.1249,TRUE
+Timor-Leste,58,74040.89691,TRUE
+Timor-Leste,59,22326.21725,TRUE
+Timor-Leste,63,234336.5313,TRUE
+Timor-Leste,90,83895,FALSE
+Timor-Leste,94,61002.28577,TRUE
+Timor-Leste,101,138512.4356,TRUE
+Timor-Leste,112,22875,FALSE
+Timor-Leste,138,17125.18189,TRUE
+Timor-Leste,152,119704.6269,TRUE
+Timor-Leste,154,96782.90416,TRUE
+Timor-Leste,158,96473.15601,TRUE
+Timor-Leste,200,22918.25267,TRUE
+Timor-Leste,202,85300.04797,TRUE
+Timor-Leste,206,183393.7134,TRUE
+Timor-Leste,218,52990.31222,TRUE
+Timor-Leste,238,116960.1876,TRUE
+Timor-Leste,243,112174.5654,TRUE
+Timor-Leste,259,55616.6005,TRUE
+Timor-Leste,276,13012,FALSE
+Timor-Leste,279,177754.1672,TRUE
+Timor-Leste,298,120463.1286,TRUE
+Timor-Leste,305,15590.0347,TRUE
+Timor-Leste,306,49608,FALSE
+Timor-Leste,11,178064.2799,TRUE
+Timor-Leste,16,15953,FALSE
+Timor-Leste,48,27222.34375,TRUE
+Timor-Leste,60,22383.25858,TRUE
+Timor-Leste,63,11715.28525,TRUE
+Timor-Leste,121,115777.4722,TRUE
+Timor-Leste,128,13573,FALSE
+Timor-Leste,156,10200.29705,TRUE
+Timor-Leste,217,21196.4891,TRUE
+Timor-Leste,248,14225.32829,TRUE
+Timor-Leste,270,9151.63574,TRUE
+Timor-Leste,52,39793,FALSE
+Timor-Leste,74,995,FALSE
+Timor-Leste,75,6426,FALSE
+Timor-Leste,80,49992.57574,TRUE
+Timor-Leste,301,113987.8459,TRUE
+Timor-Leste,319,89190.44102,TRUE
+Timor-Leste,51,26504.47085,TRUE
+Timor-Leste,53,6581.96824,TRUE
+Timor-Leste,77,1996,FALSE
+Timor-Leste,213,124295.9159,TRUE
+Timor-Leste,228,128188,FALSE
+Timor-Leste,269,15171.62496,TRUE
+Timor-Leste,296,22156,FALSE
+Timor-Leste,175,77959,FALSE
+Timor-Leste,12,36715.19395,TRUE
+Timor-Leste,13,129404,FALSE
+Timor-Leste,108,12577.92841,TRUE
+Timor-Leste,165,14797.07017,TRUE
+Timor-Leste,215,231169,FALSE
+Timor-Leste,261,8946.089355,TRUE
+Timor-Leste,281,136069.2843,TRUE
+Timor-Leste,302,27087.34387,TRUE
+Timor-Leste,310,36133,TRUE
+Timor-Leste,106,13595.99028,TRUE
+Timor-Leste,30,62885.73079,TRUE
+Timor-Leste,91,126485.3041,TRUE
+Timor-Leste,192,3780098.195,TRUE
+Timor-Leste,249,70032.42373,TRUE
+Timor-Leste,308,35296.76443,TRUE
+Timor-Leste,116,98484.54468,TRUE
+Timor-Leste,234,8162.890747,TRUE
+Timor-Leste,88,138218.959,TRUE
+Timor-Leste,227,9358.848173,TRUE
+Timor-Leste,8,21599.0332,TRUE
+Timor-Leste,115,186672.4488,TRUE
+Timor-Leste,146,28645.96233,TRUE
+Timor-Leste,257,14862.84549,TRUE
+Timor-Leste,39,10075.63454,TRUE
+Timor-Leste,61,218943.5096,TRUE
+Timor-Leste,76,100326.9844,TRUE
+Timor-Leste,268,27005.25,TRUE
+Timor-Leste,194,9390.783666,TRUE
+Timor-Leste,198,5299.135169,TRUE
+Timor-Leste,245,11957.75,TRUE
+Timor-Leste,86,15341.61704,TRUE
+Timor-Leste,247,27947.125,TRUE
+Timor-Leste,15,5922.875,TRUE
+Timor-Leste,135,5719.346191,TRUE
+Timor-Leste,65,4252.65625,TRUE
+Timor-Leste,70,8796.273438,TRUE
+Timor-Leste,314,4472.643433,TRUE
+Timor-Leste,133,6124.625,TRUE
+Timor-Leste,240,4373.4375,TRUE
+Timor-Leste,148,23186,TRUE
+Timor-Leste,31,5157,TRUE
+Togo,4,20977.52128,TRUE
+Togo,5,7484.490489,TRUE
+Togo,7,111437.9893,TRUE
+Togo,8,47030.54376,TRUE
+Togo,17,33099.94094,TRUE
+Togo,105,149702.6633,TRUE
+Togo,120,115713.1489,TRUE
+Togo,161,8730.264786,TRUE
+Togo,169,12235,FALSE
+Togo,179,121608.9919,TRUE
+Togo,180,6289,FALSE
+Togo,203,26179.47154,TRUE
+Togo,205,158255.8483,TRUE
+Togo,208,46428,FALSE
+Togo,219,80605.62094,TRUE
+Togo,221,53059.48552,TRUE
+Togo,229,16244.65912,TRUE
+Togo,231,60255.26389,TRUE
+Togo,235,172280.9273,TRUE
+Togo,254,16536,FALSE
+Togo,84,6688,FALSE
+Togo,267,3165,FALSE
+Togo,282,423220.8453,TRUE
+Togo,286,760050.6713,TRUE
+Togo,289,9979.922823,TRUE
+Togo,316,72255.87156,TRUE
+Togo,317,188762.6372,TRUE
+Togo,318,32261.2753,TRUE
+Togo,18,4642,FALSE
+Togo,19,77366.60983,TRUE
+Togo,33,30270.38924,TRUE
+Togo,40,111459,FALSE
+Togo,49,247408.5214,TRUE
+Togo,54,175365.1249,TRUE
+Togo,58,74040.89691,TRUE
+Togo,59,22326.21725,TRUE
+Togo,63,4211,FALSE
+Togo,90,194487.8189,TRUE
+Togo,94,61002.28577,TRUE
+Togo,101,138512.4356,TRUE
+Togo,112,122104.9439,TRUE
+Togo,138,17125.18189,TRUE
+Togo,152,119704.6269,TRUE
+Togo,154,96782.90416,TRUE
+Togo,158,96473.15601,TRUE
+Togo,200,22918.25267,TRUE
+Togo,202,85300.04797,TRUE
+Togo,206,183393.7134,TRUE
+Togo,218,52990.31222,TRUE
+Togo,238,116960.1876,TRUE
+Togo,243,112174.5654,TRUE
+Togo,259,55616.6005,TRUE
+Togo,276,4403,FALSE
+Togo,279,177754.1672,TRUE
+Togo,298,120463.1286,TRUE
+Togo,305,4133,FALSE
+Togo,306,43001,FALSE
+Togo,11,178064.2799,TRUE
+Togo,16,120415,FALSE
+Togo,48,27222.34375,TRUE
+Togo,60,7509,FALSE
+Togo,63,4211,FALSE
+Togo,121,115777.4722,TRUE
+Togo,128,7001,FALSE
+Togo,156,10200.29705,TRUE
+Togo,217,21196.4891,TRUE
+Togo,248,14225.32829,TRUE
+Togo,270,8600,FALSE
+Togo,52,37995,FALSE
+Togo,74,9535,FALSE
+Togo,75,32263,FALSE
+Togo,80,49992.57574,TRUE
+Togo,301,21273,FALSE
+Togo,319,89385,FALSE
+Togo,51,15004,FALSE
+Togo,53,808,FALSE
+Togo,77,3249,FALSE
+Togo,213,85400,FALSE
+Togo,228,80450,FALSE
+Togo,269,15171.62496,TRUE
+Togo,296,33516,FALSE
+Togo,175,70802.39066,TRUE
+Togo,12,36715.19395,TRUE
+Togo,13,74728.86082,TRUE
+Togo,108,12577.92841,TRUE
+Togo,165,14797.07017,TRUE
+Togo,215,105585.0293,TRUE
+Togo,261,8946.089355,TRUE
+Togo,281,136069.2843,TRUE
+Togo,302,27087.34387,TRUE
+Togo,310,36133,TRUE
+Togo,106,13595.99028,TRUE
+Togo,30,62885.73079,TRUE
+Togo,91,126485.3041,TRUE
+Togo,192,3780098.195,TRUE
+Togo,249,70032.42373,TRUE
+Togo,308,35296.76443,TRUE
+Togo,116,98484.54468,TRUE
+Togo,234,8162.890747,TRUE
+Togo,88,138218.959,TRUE
+Togo,227,9358.848173,TRUE
+Togo,8,21599.0332,TRUE
+Togo,115,186672.4488,TRUE
+Togo,146,28645.96233,TRUE
+Togo,257,14862.84549,TRUE
+Togo,39,10075.63454,TRUE
+Togo,61,218943.5096,TRUE
+Togo,76,100326.9844,TRUE
+Togo,268,40527,FALSE
+Togo,194,9390.783666,TRUE
+Togo,198,9250,FALSE
+Togo,245,11957.75,TRUE
+Togo,86,15341.61704,TRUE
+Togo,247,27947.125,TRUE
+Togo,15,5922.875,TRUE
+Togo,135,5719.346191,TRUE
+Togo,65,4252.65625,TRUE
+Togo,70,8796.273438,TRUE
+Togo,314,4472.643433,TRUE
+Togo,133,6124.625,TRUE
+Togo,240,4373.4375,TRUE
+Togo,148,23186,TRUE
+Togo,31,5157,TRUE
+Tokelau,4,20977.52128,TRUE
+Tokelau,5,7484.490489,TRUE
+Tokelau,7,111437.9893,TRUE
+Tokelau,8,47030.54376,TRUE
+Tokelau,17,33099.94094,TRUE
+Tokelau,105,149702.6633,TRUE
+Tokelau,120,115713.1489,TRUE
+Tokelau,161,8730.264786,TRUE
+Tokelau,169,16777.49735,TRUE
+Tokelau,179,121608.9919,TRUE
+Tokelau,180,7520.279265,TRUE
+Tokelau,203,26179.47154,TRUE
+Tokelau,205,158255.8483,TRUE
+Tokelau,208,84004.18102,TRUE
+Tokelau,219,80605.62094,TRUE
+Tokelau,221,53059.48552,TRUE
+Tokelau,229,16244.65912,TRUE
+Tokelau,231,60255.26389,TRUE
+Tokelau,235,172280.9273,TRUE
+Tokelau,254,26952.37295,TRUE
+Tokelau,84,9355.713607,TRUE
+Tokelau,267,9372.487582,TRUE
+Tokelau,282,423220.8453,TRUE
+Tokelau,286,760050.6713,TRUE
+Tokelau,289,9979.922823,TRUE
+Tokelau,316,72255.87156,TRUE
+Tokelau,317,188762.6372,TRUE
+Tokelau,318,32261.2753,TRUE
+Tokelau,18,11273.75269,TRUE
+Tokelau,19,77366.60983,TRUE
+Tokelau,33,30270.38924,TRUE
+Tokelau,40,180987.6885,TRUE
+Tokelau,49,247408.5214,TRUE
+Tokelau,54,175365.1249,TRUE
+Tokelau,58,74040.89691,TRUE
+Tokelau,59,22326.21725,TRUE
+Tokelau,63,234336.5313,TRUE
+Tokelau,90,194487.8189,TRUE
+Tokelau,94,61002.28577,TRUE
+Tokelau,101,138512.4356,TRUE
+Tokelau,112,122104.9439,TRUE
+Tokelau,138,17125.18189,TRUE
+Tokelau,152,119704.6269,TRUE
+Tokelau,154,96782.90416,TRUE
+Tokelau,158,96473.15601,TRUE
+Tokelau,200,22918.25267,TRUE
+Tokelau,202,85300.04797,TRUE
+Tokelau,206,183393.7134,TRUE
+Tokelau,218,52990.31222,TRUE
+Tokelau,238,116960.1876,TRUE
+Tokelau,243,112174.5654,TRUE
+Tokelau,259,55616.6005,TRUE
+Tokelau,276,10950.60863,TRUE
+Tokelau,279,177754.1672,TRUE
+Tokelau,298,120463.1286,TRUE
+Tokelau,305,15590.0347,TRUE
+Tokelau,306,131681.4608,TRUE
+Tokelau,11,178064.2799,TRUE
+Tokelau,16,30354,FALSE
+Tokelau,48,27222.34375,TRUE
+Tokelau,60,22383.25858,TRUE
+Tokelau,63,11715.28525,TRUE
+Tokelau,121,115777.4722,TRUE
+Tokelau,128,9353.124815,TRUE
+Tokelau,156,10200.29705,TRUE
+Tokelau,217,21196.4891,TRUE
+Tokelau,248,14225.32829,TRUE
+Tokelau,270,9151.63574,TRUE
+Tokelau,52,72720.10141,TRUE
+Tokelau,74,4541.36112,TRUE
+Tokelau,75,75202,FALSE
+Tokelau,80,49992.57574,TRUE
+Tokelau,301,113987.8459,TRUE
+Tokelau,319,89190.44102,TRUE
+Tokelau,51,26504.47085,TRUE
+Tokelau,53,6581.96824,TRUE
+Tokelau,77,5993.147024,TRUE
+Tokelau,213,124295.9159,TRUE
+Tokelau,228,133880.2683,TRUE
+Tokelau,269,15171.62496,TRUE
+Tokelau,296,43692.55808,TRUE
+Tokelau,175,70802.39066,TRUE
+Tokelau,12,36715.19395,TRUE
+Tokelau,13,74728.86082,TRUE
+Tokelau,108,12577.92841,TRUE
+Tokelau,165,14797.07017,TRUE
+Tokelau,215,105585.0293,TRUE
+Tokelau,261,8946.089355,TRUE
+Tokelau,281,136069.2843,TRUE
+Tokelau,302,27087.34387,TRUE
+Tokelau,310,36133,TRUE
+Tokelau,106,13595.99028,TRUE
+Tokelau,30,62885.73079,TRUE
+Tokelau,91,126485.3041,TRUE
+Tokelau,192,3780098.195,TRUE
+Tokelau,249,70032.42373,TRUE
+Tokelau,308,35296.76443,TRUE
+Tokelau,116,98484.54468,TRUE
+Tokelau,234,8162.890747,TRUE
+Tokelau,88,138218.959,TRUE
+Tokelau,227,9358.848173,TRUE
+Tokelau,8,21599.0332,TRUE
+Tokelau,115,186672.4488,TRUE
+Tokelau,146,28645.96233,TRUE
+Tokelau,257,14862.84549,TRUE
+Tokelau,39,10075.63454,TRUE
+Tokelau,61,218943.5096,TRUE
+Tokelau,76,100326.9844,TRUE
+Tokelau,268,27005.25,TRUE
+Tokelau,194,9390.783666,TRUE
+Tokelau,198,5299.135169,TRUE
+Tokelau,245,11957.75,TRUE
+Tokelau,86,15341.61704,TRUE
+Tokelau,247,27947.125,TRUE
+Tokelau,15,5922.875,TRUE
+Tokelau,135,5719.346191,TRUE
+Tokelau,65,4252.65625,TRUE
+Tokelau,70,8796.273438,TRUE
+Tokelau,314,4472.643433,TRUE
+Tokelau,133,6124.625,TRUE
+Tokelau,240,4373.4375,TRUE
+Tokelau,148,23186,TRUE
+Tokelau,31,5157,TRUE
+Tonga,4,20977.52128,TRUE
+Tonga,5,7484.490489,TRUE
+Tonga,7,111437.9893,TRUE
+Tonga,8,47030.54376,TRUE
+Tonga,17,33099.94094,TRUE
+Tonga,105,149702.6633,TRUE
+Tonga,120,115713.1489,TRUE
+Tonga,161,8730.264786,TRUE
+Tonga,169,16777.49735,TRUE
+Tonga,179,121608.9919,TRUE
+Tonga,180,7520.279265,TRUE
+Tonga,203,26179.47154,TRUE
+Tonga,205,158255.8483,TRUE
+Tonga,208,41875,FALSE
+Tonga,219,80605.62094,TRUE
+Tonga,221,53059.48552,TRUE
+Tonga,229,16244.65912,TRUE
+Tonga,231,60255.26389,TRUE
+Tonga,235,172280.9273,TRUE
+Tonga,254,26952.37295,TRUE
+Tonga,84,9355.713607,TRUE
+Tonga,267,9372.487582,TRUE
+Tonga,282,423220.8453,TRUE
+Tonga,286,760050.6713,TRUE
+Tonga,289,9979.922823,TRUE
+Tonga,316,72255.87156,TRUE
+Tonga,317,82026,FALSE
+Tonga,318,32261.2753,TRUE
+Tonga,18,11273.75269,TRUE
+Tonga,19,77366.60983,TRUE
+Tonga,33,30270.38924,TRUE
+Tonga,40,180987.6885,TRUE
+Tonga,49,247408.5214,TRUE
+Tonga,54,175365.1249,TRUE
+Tonga,58,74040.89691,TRUE
+Tonga,59,22326.21725,TRUE
+Tonga,63,234336.5313,TRUE
+Tonga,90,194487.8189,TRUE
+Tonga,94,61002.28577,TRUE
+Tonga,101,138512.4356,TRUE
+Tonga,112,122104.9439,TRUE
+Tonga,138,17125.18189,TRUE
+Tonga,152,119704.6269,TRUE
+Tonga,154,24166,FALSE
+Tonga,158,96473.15601,TRUE
+Tonga,200,22918.25267,TRUE
+Tonga,202,85300.04797,TRUE
+Tonga,206,183393.7134,TRUE
+Tonga,218,52990.31222,TRUE
+Tonga,238,96380,FALSE
+Tonga,243,112174.5654,TRUE
+Tonga,259,55616.6005,TRUE
+Tonga,276,10950.60863,TRUE
+Tonga,279,177754.1672,TRUE
+Tonga,298,120463.1286,TRUE
+Tonga,305,15590.0347,TRUE
+Tonga,306,319812,FALSE
+Tonga,11,178064.2799,TRUE
+Tonga,16,15198,FALSE
+Tonga,48,27222.34375,TRUE
+Tonga,60,22383.25858,TRUE
+Tonga,63,11715.28525,TRUE
+Tonga,121,115777.4722,TRUE
+Tonga,128,5934,FALSE
+Tonga,156,10200.29705,TRUE
+Tonga,217,21196.4891,TRUE
+Tonga,248,14225.32829,TRUE
+Tonga,270,9151.63574,TRUE
+Tonga,52,155336,FALSE
+Tonga,74,4541.36112,TRUE
+Tonga,75,193421,FALSE
+Tonga,80,49992.57574,TRUE
+Tonga,301,80304,FALSE
+Tonga,319,136843,FALSE
+Tonga,51,26504.47085,TRUE
+Tonga,53,6581.96824,TRUE
+Tonga,77,15175,FALSE
+Tonga,213,124295.9159,TRUE
+Tonga,228,133880.2683,TRUE
+Tonga,269,15171.62496,TRUE
+Tonga,296,106882,FALSE
+Tonga,175,70802.39066,TRUE
+Tonga,12,36715.19395,TRUE
+Tonga,13,74728.86082,TRUE
+Tonga,108,12577.92841,TRUE
+Tonga,165,14797.07017,TRUE
+Tonga,215,105585.0293,TRUE
+Tonga,261,8946.089355,TRUE
+Tonga,281,136069.2843,TRUE
+Tonga,302,27087.34387,TRUE
+Tonga,310,36133,TRUE
+Tonga,106,13595.99028,TRUE
+Tonga,30,62885.73079,TRUE
+Tonga,91,126485.3041,TRUE
+Tonga,192,3780098.195,TRUE
+Tonga,249,70032.42373,TRUE
+Tonga,308,35296.76443,TRUE
+Tonga,116,98484.54468,TRUE
+Tonga,234,8162.890747,TRUE
+Tonga,88,138218.959,TRUE
+Tonga,227,9358.848173,TRUE
+Tonga,8,21599.0332,TRUE
+Tonga,115,186672.4488,TRUE
+Tonga,146,28645.96233,TRUE
+Tonga,257,14862.84549,TRUE
+Tonga,39,10075.63454,TRUE
+Tonga,61,218943.5096,TRUE
+Tonga,76,100326.9844,TRUE
+Tonga,268,27005.25,TRUE
+Tonga,194,9390.783666,TRUE
+Tonga,198,5299.135169,TRUE
+Tonga,245,11957.75,TRUE
+Tonga,86,15341.61704,TRUE
+Tonga,247,27947.125,TRUE
+Tonga,15,5922.875,TRUE
+Tonga,135,5719.346191,TRUE
+Tonga,65,4252.65625,TRUE
+Tonga,70,8796.273438,TRUE
+Tonga,314,6730,FALSE
+Tonga,133,6124.625,TRUE
+Tonga,240,4373.4375,TRUE
+Tonga,148,23186,TRUE
+Tonga,31,5157,TRUE
+Trinidad and Tobago,4,20977.52128,TRUE
+Trinidad and Tobago,5,7484.490489,TRUE
+Trinidad and Tobago,7,111437.9893,TRUE
+Trinidad and Tobago,8,47030.54376,TRUE
+Trinidad and Tobago,17,33099.94094,TRUE
+Trinidad and Tobago,105,149702.6633,TRUE
+Trinidad and Tobago,120,115713.1489,TRUE
+Trinidad and Tobago,161,8730.264786,TRUE
+Trinidad and Tobago,169,24245,FALSE
+Trinidad and Tobago,179,121608.9919,TRUE
+Trinidad and Tobago,180,7520.279265,TRUE
+Trinidad and Tobago,203,26179.47154,TRUE
+Trinidad and Tobago,205,158255.8483,TRUE
+Trinidad and Tobago,208,24255,FALSE
+Trinidad and Tobago,219,80605.62094,TRUE
+Trinidad and Tobago,221,53059.48552,TRUE
+Trinidad and Tobago,229,16244.65912,TRUE
+Trinidad and Tobago,231,60255.26389,TRUE
+Trinidad and Tobago,235,172280.9273,TRUE
+Trinidad and Tobago,254,8769,FALSE
+Trinidad and Tobago,84,9355.713607,TRUE
+Trinidad and Tobago,267,9372.487582,TRUE
+Trinidad and Tobago,282,423220.8453,TRUE
+Trinidad and Tobago,286,760050.6713,TRUE
+Trinidad and Tobago,289,9979.922823,TRUE
+Trinidad and Tobago,316,72255.87156,TRUE
+Trinidad and Tobago,317,50357,FALSE
+Trinidad and Tobago,318,32261.2753,TRUE
+Trinidad and Tobago,18,11273.75269,TRUE
+Trinidad and Tobago,19,77366.60983,TRUE
+Trinidad and Tobago,33,30270.38924,TRUE
+Trinidad and Tobago,40,85660,FALSE
+Trinidad and Tobago,49,247408.5214,TRUE
+Trinidad and Tobago,54,123125,FALSE
+Trinidad and Tobago,58,74040.89691,TRUE
+Trinidad and Tobago,59,22326.21725,TRUE
+Trinidad and Tobago,63,62067,FALSE
+Trinidad and Tobago,90,73694,FALSE
+Trinidad and Tobago,94,61002.28577,TRUE
+Trinidad and Tobago,101,134141,FALSE
+Trinidad and Tobago,112,122104.9439,TRUE
+Trinidad and Tobago,138,17125.18189,TRUE
+Trinidad and Tobago,152,119704.6269,TRUE
+Trinidad and Tobago,154,40191,FALSE
+Trinidad and Tobago,158,120417,FALSE
+Trinidad and Tobago,200,22918.25267,TRUE
+Trinidad and Tobago,202,31618,FALSE
+Trinidad and Tobago,206,183393.7134,TRUE
+Trinidad and Tobago,218,52990.31222,TRUE
+Trinidad and Tobago,238,38267,FALSE
+Trinidad and Tobago,243,112174.5654,TRUE
+Trinidad and Tobago,259,55616.6005,TRUE
+Trinidad and Tobago,276,10950.60863,TRUE
+Trinidad and Tobago,279,177754.1672,TRUE
+Trinidad and Tobago,298,120463.1286,TRUE
+Trinidad and Tobago,305,17094,FALSE
+Trinidad and Tobago,306,103167,FALSE
+Trinidad and Tobago,11,178064.2799,TRUE
+Trinidad and Tobago,16,26800,FALSE
+Trinidad and Tobago,48,27222.34375,TRUE
+Trinidad and Tobago,60,22383.25858,TRUE
+Trinidad and Tobago,63,62067,FALSE
+Trinidad and Tobago,121,81678,FALSE
+Trinidad and Tobago,128,9353.124815,TRUE
+Trinidad and Tobago,156,10200.29705,TRUE
+Trinidad and Tobago,217,21196.4891,TRUE
+Trinidad and Tobago,248,14225.32829,TRUE
+Trinidad and Tobago,270,9151.63574,TRUE
+Trinidad and Tobago,52,86886,FALSE
+Trinidad and Tobago,74,875,FALSE
+Trinidad and Tobago,75,74433,FALSE
+Trinidad and Tobago,80,15150,FALSE
+Trinidad and Tobago,301,79580,FALSE
+Trinidad and Tobago,319,28642,FALSE
+Trinidad and Tobago,51,26504.47085,TRUE
+Trinidad and Tobago,53,6581.96824,TRUE
+Trinidad and Tobago,77,1431,FALSE
+Trinidad and Tobago,213,124295.9159,TRUE
+Trinidad and Tobago,228,64020,FALSE
+Trinidad and Tobago,269,15171.62496,TRUE
+Trinidad and Tobago,296,113295,FALSE
+Trinidad and Tobago,175,60065,FALSE
+Trinidad and Tobago,12,36715.19395,TRUE
+Trinidad and Tobago,13,51958,FALSE
+Trinidad and Tobago,108,12577.92841,TRUE
+Trinidad and Tobago,165,14797.07017,TRUE
+Trinidad and Tobago,215,149524,FALSE
+Trinidad and Tobago,261,8946.089355,TRUE
+Trinidad and Tobago,281,136069.2843,TRUE
+Trinidad and Tobago,302,27087.34387,TRUE
+Trinidad and Tobago,310,36133,TRUE
+Trinidad and Tobago,106,13595.99028,TRUE
+Trinidad and Tobago,30,62885.73079,TRUE
+Trinidad and Tobago,91,126485.3041,TRUE
+Trinidad and Tobago,192,3780098.195,TRUE
+Trinidad and Tobago,249,70032.42373,TRUE
+Trinidad and Tobago,308,35296.76443,TRUE
+Trinidad and Tobago,116,98484.54468,TRUE
+Trinidad and Tobago,234,8162.890747,TRUE
+Trinidad and Tobago,88,138218.959,TRUE
+Trinidad and Tobago,227,8511,FALSE
+Trinidad and Tobago,8,21599.0332,TRUE
+Trinidad and Tobago,115,25955,FALSE
+Trinidad and Tobago,146,28645.96233,TRUE
+Trinidad and Tobago,257,14862.84549,TRUE
+Trinidad and Tobago,39,10075.63454,TRUE
+Trinidad and Tobago,61,218943.5096,TRUE
+Trinidad and Tobago,76,97841,FALSE
+Trinidad and Tobago,268,27005.25,TRUE
+Trinidad and Tobago,194,9390.783666,TRUE
+Trinidad and Tobago,198,5858,FALSE
+Trinidad and Tobago,245,11957.75,TRUE
+Trinidad and Tobago,86,31973,FALSE
+Trinidad and Tobago,247,27947.125,TRUE
+Trinidad and Tobago,15,5922.875,TRUE
+Trinidad and Tobago,135,5719.346191,TRUE
+Trinidad and Tobago,65,4252.65625,TRUE
+Trinidad and Tobago,70,8796.273438,TRUE
+Trinidad and Tobago,314,4472.643433,TRUE
+Trinidad and Tobago,133,6124.625,TRUE
+Trinidad and Tobago,240,4373.4375,TRUE
+Trinidad and Tobago,148,23186,TRUE
+Trinidad and Tobago,31,5157,TRUE
+Tunisia,4,3306,FALSE
+Tunisia,5,7780,FALSE
+Tunisia,7,51380,FALSE
+Tunisia,8,47692,FALSE
+Tunisia,17,10739,FALSE
+Tunisia,105,14398,FALSE
+Tunisia,120,66378,FALSE
+Tunisia,161,18765,FALSE
+Tunisia,169,16777.49735,TRUE
+Tunisia,179,104111,FALSE
+Tunisia,180,7520.279265,TRUE
+Tunisia,203,4253,FALSE
+Tunisia,205,289782,FALSE
+Tunisia,208,113379,FALSE
+Tunisia,219,91441,FALSE
+Tunisia,221,47542,FALSE
+Tunisia,229,1279,FALSE
+Tunisia,231,53650,FALSE
+Tunisia,235,177205,FALSE
+Tunisia,254,26952.37295,TRUE
+Tunisia,84,6297,FALSE
+Tunisia,267,9372.487582,TRUE
+Tunisia,282,436910,FALSE
+Tunisia,286,760050.6713,TRUE
+Tunisia,289,8995,FALSE
+Tunisia,316,72255.87156,TRUE
+Tunisia,317,659954,FALSE
+Tunisia,318,18227,FALSE
+Tunisia,18,7000,FALSE
+Tunisia,19,27585,FALSE
+Tunisia,33,11686,FALSE
+Tunisia,40,117783,FALSE
+Tunisia,49,166009,FALSE
+Tunisia,54,111011,FALSE
+Tunisia,58,52239,FALSE
+Tunisia,59,22326.21725,TRUE
+Tunisia,63,25281,FALSE
+Tunisia,90,227264,FALSE
+Tunisia,94,39353,FALSE
+Tunisia,101,139771,FALSE
+Tunisia,112,95386,FALSE
+Tunisia,138,17125.18189,TRUE
+Tunisia,152,119704.6269,TRUE
+Tunisia,154,146617,FALSE
+Tunisia,158,207404,FALSE
+Tunisia,200,3308,FALSE
+Tunisia,202,85300.04797,TRUE
+Tunisia,206,267011,FALSE
+Tunisia,218,37955,FALSE
+Tunisia,238,276287,FALSE
+Tunisia,243,85300,FALSE
+Tunisia,259,55616.6005,TRUE
+Tunisia,276,10950.60863,TRUE
+Tunisia,279,127273,FALSE
+Tunisia,298,83412,FALSE
+Tunisia,305,13852,FALSE
+Tunisia,306,587201,FALSE
+Tunisia,11,56893,FALSE
+Tunisia,16,74389.59543,TRUE
+Tunisia,48,20945,FALSE
+Tunisia,60,7692,FALSE
+Tunisia,63,25281,FALSE
+Tunisia,121,226094,FALSE
+Tunisia,128,9353.124815,TRUE
+Tunisia,156,4499,FALSE
+Tunisia,217,8689,FALSE
+Tunisia,248,7194,FALSE
+Tunisia,270,4856,FALSE
+Tunisia,52,72720.10141,TRUE
+Tunisia,74,4541.36112,TRUE
+Tunisia,75,47178.96176,TRUE
+Tunisia,80,49992.57574,TRUE
+Tunisia,301,113987.8459,TRUE
+Tunisia,319,89190.44102,TRUE
+Tunisia,51,26504.47085,TRUE
+Tunisia,53,6581.96824,TRUE
+Tunisia,77,5993.147024,TRUE
+Tunisia,213,124295.9159,TRUE
+Tunisia,228,133880.2683,TRUE
+Tunisia,269,15171.62496,TRUE
+Tunisia,296,43692.55808,TRUE
+Tunisia,175,70802.39066,TRUE
+Tunisia,12,36715.19395,TRUE
+Tunisia,13,107319,FALSE
+Tunisia,108,12577.92841,TRUE
+Tunisia,165,14797.07017,TRUE
+Tunisia,215,105585.0293,TRUE
+Tunisia,261,8946.089355,TRUE
+Tunisia,281,266494,FALSE
+Tunisia,302,27087.34387,TRUE
+Tunisia,310,36133,TRUE
+Tunisia,106,9256,FALSE
+Tunisia,30,62885.73079,TRUE
+Tunisia,91,126485.3041,TRUE
+Tunisia,192,3780098.195,TRUE
+Tunisia,249,70032.42373,TRUE
+Tunisia,308,18758,FALSE
+Tunisia,116,98484.54468,TRUE
+Tunisia,234,8162.890747,TRUE
+Tunisia,88,64492,FALSE
+Tunisia,227,9358.848173,TRUE
+Tunisia,8,47692,FALSE
+Tunisia,115,186672.4488,TRUE
+Tunisia,146,28645.96233,TRUE
+Tunisia,257,14862.84549,TRUE
+Tunisia,39,10075.63454,TRUE
+Tunisia,61,218943.5096,TRUE
+Tunisia,76,100326.9844,TRUE
+Tunisia,268,27005.25,TRUE
+Tunisia,194,9390.783666,TRUE
+Tunisia,198,5299.135169,TRUE
+Tunisia,245,11957.75,TRUE
+Tunisia,86,15341.61704,TRUE
+Tunisia,247,27947.125,TRUE
+Tunisia,15,5922.875,TRUE
+Tunisia,135,5719.346191,TRUE
+Tunisia,65,4252.65625,TRUE
+Tunisia,70,8796.273438,TRUE
+Tunisia,314,4472.643433,TRUE
+Tunisia,133,6124.625,TRUE
+Tunisia,240,4373.4375,TRUE
+Tunisia,148,23186,TRUE
+Tunisia,31,5157,TRUE
+Turkey,4,25509,FALSE
+Turkey,5,7223,FALSE
+Turkey,7,168739,FALSE
+Turkey,8,58964,FALSE
+Turkey,17,24815,FALSE
+Turkey,105,61106,FALSE
+Turkey,120,91906,FALSE
+Turkey,161,8730.264786,TRUE
+Turkey,169,94182,FALSE
+Turkey,179,219220,FALSE
+Turkey,180,23091,FALSE
+Turkey,203,20460,FALSE
+Turkey,205,323226,FALSE
+Turkey,208,351070,FALSE
+Turkey,219,149023,FALSE
+Turkey,221,185867,FALSE
+Turkey,229,27954,FALSE
+Turkey,231,142996,FALSE
+Turkey,235,328252,FALSE
+Turkey,254,79272,FALSE
+Turkey,84,50481,FALSE
+Turkey,267,6761,FALSE
+Turkey,282,604605,FALSE
+Turkey,286,760050.6713,TRUE
+Turkey,289,23259,FALSE
+Turkey,316,22452,FALSE
+Turkey,317,416493,FALSE
+Turkey,318,27070,FALSE
+Turkey,18,26539,FALSE
+Turkey,19,131002,FALSE
+Turkey,33,27379,FALSE
+Turkey,40,289204,FALSE
+Turkey,49,554784,FALSE
+Turkey,54,226761,FALSE
+Turkey,58,70759,FALSE
+Turkey,59,16603,FALSE
+Turkey,63,24175,FALSE
+Turkey,90,482330,FALSE
+Turkey,94,158062,FALSE
+Turkey,101,344616,FALSE
+Turkey,112,89113,FALSE
+Turkey,138,17125.18189,TRUE
+Turkey,152,282413,FALSE
+Turkey,154,283222,FALSE
+Turkey,158,213295,FALSE
+Turkey,200,22640,FALSE
+Turkey,202,51427,FALSE
+Turkey,206,157046,FALSE
+Turkey,218,100353,FALSE
+Turkey,238,45924,FALSE
+Turkey,243,195726,FALSE
+Turkey,259,26312,FALSE
+Turkey,276,43219,FALSE
+Turkey,279,124809,FALSE
+Turkey,298,287109,FALSE
+Turkey,305,7589,FALSE
+Turkey,306,669252,FALSE
+Turkey,11,128824,FALSE
+Turkey,16,491447,FALSE
+Turkey,48,45751,FALSE
+Turkey,60,12938,FALSE
+Turkey,63,24175,FALSE
+Turkey,121,411243,FALSE
+Turkey,128,38866,FALSE
+Turkey,156,14818,FALSE
+Turkey,217,26829,FALSE
+Turkey,248,35281,FALSE
+Turkey,270,30000,FALSE
+Turkey,52,72720.10141,TRUE
+Turkey,74,4541.36112,TRUE
+Turkey,75,47178.96176,TRUE
+Turkey,80,49992.57574,TRUE
+Turkey,301,147907,FALSE
+Turkey,319,89190.44102,TRUE
+Turkey,51,26504.47085,TRUE
+Turkey,53,6581.96824,TRUE
+Turkey,77,5993.147024,TRUE
+Turkey,213,124295.9159,TRUE
+Turkey,228,133880.2683,TRUE
+Turkey,269,15171.62496,TRUE
+Turkey,296,43692.55808,TRUE
+Turkey,175,70802.39066,TRUE
+Turkey,12,37381,FALSE
+Turkey,13,39959,FALSE
+Turkey,108,12577.92841,TRUE
+Turkey,165,14797.07017,TRUE
+Turkey,215,105585.0293,TRUE
+Turkey,261,14739,FALSE
+Turkey,281,269036,FALSE
+Turkey,302,31823,FALSE
+Turkey,310,36133,TRUE
+Turkey,106,9614,FALSE
+Turkey,30,62885.73079,TRUE
+Turkey,91,126485.3041,TRUE
+Turkey,192,3780098.195,TRUE
+Turkey,249,70032.42373,TRUE
+Turkey,308,33226,FALSE
+Turkey,116,98484.54468,TRUE
+Turkey,234,6084,FALSE
+Turkey,88,138218.959,TRUE
+Turkey,227,9358.848173,TRUE
+Turkey,8,58964,FALSE
+Turkey,115,186672.4488,TRUE
+Turkey,146,28645.96233,TRUE
+Turkey,257,14862.84549,TRUE
+Turkey,39,10075.63454,TRUE
+Turkey,61,218943.5096,TRUE
+Turkey,76,100326.9844,TRUE
+Turkey,268,27005.25,TRUE
+Turkey,194,9390.783666,TRUE
+Turkey,198,5299.135169,TRUE
+Turkey,245,11957.75,TRUE
+Turkey,86,15341.61704,TRUE
+Turkey,247,27947.125,TRUE
+Turkey,15,5922.875,TRUE
+Turkey,135,3333,FALSE
+Turkey,65,4252.65625,TRUE
+Turkey,70,8796.273438,TRUE
+Turkey,314,4472.643433,TRUE
+Turkey,133,6124.625,TRUE
+Turkey,240,4373.4375,TRUE
+Turkey,148,23186,TRUE
+Turkey,31,5157,TRUE
+Turkmenistan,4,6700,FALSE
+Turkmenistan,5,7484.490489,TRUE
+Turkmenistan,7,145627,FALSE
+Turkmenistan,8,142131,FALSE
+Turkmenistan,17,13817,FALSE
+Turkmenistan,105,149702.6633,TRUE
+Turkmenistan,120,147552,FALSE
+Turkmenistan,161,8730.264786,TRUE
+Turkmenistan,169,13018,FALSE
+Turkmenistan,179,121608.9919,TRUE
+Turkmenistan,180,7520.279265,TRUE
+Turkmenistan,203,26179.47154,TRUE
+Turkmenistan,205,274613,FALSE
+Turkmenistan,208,84004.18102,TRUE
+Turkmenistan,219,187362,FALSE
+Turkmenistan,221,53059.48552,TRUE
+Turkmenistan,229,16244.65912,TRUE
+Turkmenistan,231,249615,FALSE
+Turkmenistan,235,205832,FALSE
+Turkmenistan,254,9064,FALSE
+Turkmenistan,84,7963,FALSE
+Turkmenistan,267,9372.487582,TRUE
+Turkmenistan,282,132916,FALSE
+Turkmenistan,286,760050.6713,TRUE
+Turkmenistan,289,9979.922823,TRUE
+Turkmenistan,316,72255.87156,TRUE
+Turkmenistan,317,100251,FALSE
+Turkmenistan,318,10831,FALSE
+Turkmenistan,18,11273.75269,TRUE
+Turkmenistan,19,77366.60983,TRUE
+Turkmenistan,33,30270.38924,TRUE
+Turkmenistan,40,164350,FALSE
+Turkmenistan,49,333597,FALSE
+Turkmenistan,54,175365.1249,TRUE
+Turkmenistan,58,74040.89691,TRUE
+Turkmenistan,59,22326.21725,TRUE
+Turkmenistan,63,234336.5313,TRUE
+Turkmenistan,90,259293,FALSE
+Turkmenistan,94,61002.28577,TRUE
+Turkmenistan,101,138512.4356,TRUE
+Turkmenistan,112,105710,FALSE
+Turkmenistan,138,17125.18189,TRUE
+Turkmenistan,152,119704.6269,TRUE
+Turkmenistan,154,96782.90416,TRUE
+Turkmenistan,158,96473.15601,TRUE
+Turkmenistan,200,22918.25267,TRUE
+Turkmenistan,202,85300.04797,TRUE
+Turkmenistan,206,183393.7134,TRUE
+Turkmenistan,218,52990.31222,TRUE
+Turkmenistan,238,116960.1876,TRUE
+Turkmenistan,243,112174.5654,TRUE
+Turkmenistan,259,55616.6005,TRUE
+Turkmenistan,276,10950.60863,TRUE
+Turkmenistan,279,177754.1672,TRUE
+Turkmenistan,298,120463.1286,TRUE
+Turkmenistan,305,22149,FALSE
+Turkmenistan,306,401603,FALSE
+Turkmenistan,11,178064.2799,TRUE
+Turkmenistan,16,74389.59543,TRUE
+Turkmenistan,48,27222.34375,TRUE
+Turkmenistan,60,22383.25858,TRUE
+Turkmenistan,63,11715.28525,TRUE
+Turkmenistan,121,115777.4722,TRUE
+Turkmenistan,128,9353.124815,TRUE
+Turkmenistan,156,10200.29705,TRUE
+Turkmenistan,217,18363,FALSE
+Turkmenistan,248,14225.32829,TRUE
+Turkmenistan,270,9151.63574,TRUE
+Turkmenistan,52,72720.10141,TRUE
+Turkmenistan,74,4541.36112,TRUE
+Turkmenistan,75,47178.96176,TRUE
+Turkmenistan,80,49992.57574,TRUE
+Turkmenistan,301,113987.8459,TRUE
+Turkmenistan,319,89190.44102,TRUE
+Turkmenistan,51,26504.47085,TRUE
+Turkmenistan,53,6581.96824,TRUE
+Turkmenistan,77,5993.147024,TRUE
+Turkmenistan,213,124295.9159,TRUE
+Turkmenistan,228,133880.2683,TRUE
+Turkmenistan,269,15171.62496,TRUE
+Turkmenistan,296,43692.55808,TRUE
+Turkmenistan,175,70802.39066,TRUE
+Turkmenistan,12,36715.19395,TRUE
+Turkmenistan,13,74728.86082,TRUE
+Turkmenistan,108,12577.92841,TRUE
+Turkmenistan,165,14797.07017,TRUE
+Turkmenistan,215,105585.0293,TRUE
+Turkmenistan,261,8946.089355,TRUE
+Turkmenistan,281,136069.2843,TRUE
+Turkmenistan,302,27087.34387,TRUE
+Turkmenistan,310,36133,TRUE
+Turkmenistan,106,13595.99028,TRUE
+Turkmenistan,30,62885.73079,TRUE
+Turkmenistan,91,126485.3041,TRUE
+Turkmenistan,192,3780098.195,TRUE
+Turkmenistan,249,70032.42373,TRUE
+Turkmenistan,308,35296.76443,TRUE
+Turkmenistan,116,98484.54468,TRUE
+Turkmenistan,234,8162.890747,TRUE
+Turkmenistan,88,138218.959,TRUE
+Turkmenistan,227,9358.848173,TRUE
+Turkmenistan,8,142131,FALSE
+Turkmenistan,115,186672.4488,TRUE
+Turkmenistan,146,28645.96233,TRUE
+Turkmenistan,257,14862.84549,TRUE
+Turkmenistan,39,10075.63454,TRUE
+Turkmenistan,61,218943.5096,TRUE
+Turkmenistan,76,100326.9844,TRUE
+Turkmenistan,268,27005.25,TRUE
+Turkmenistan,194,9390.783666,TRUE
+Turkmenistan,198,5299.135169,TRUE
+Turkmenistan,245,11957.75,TRUE
+Turkmenistan,86,15341.61704,TRUE
+Turkmenistan,247,27947.125,TRUE
+Turkmenistan,15,5922.875,TRUE
+Turkmenistan,135,5719.346191,TRUE
+Turkmenistan,65,4252.65625,TRUE
+Turkmenistan,70,8796.273438,TRUE
+Turkmenistan,314,4472.643433,TRUE
+Turkmenistan,133,6124.625,TRUE
+Turkmenistan,240,4373.4375,TRUE
+Turkmenistan,148,23186,TRUE
+Turkmenistan,31,5157,TRUE
+Tuvalu,4,20977.52128,TRUE
+Tuvalu,5,7484.490489,TRUE
+Tuvalu,7,111437.9893,TRUE
+Tuvalu,8,47030.54376,TRUE
+Tuvalu,17,33099.94094,TRUE
+Tuvalu,105,149702.6633,TRUE
+Tuvalu,120,115713.1489,TRUE
+Tuvalu,161,8730.264786,TRUE
+Tuvalu,169,16777.49735,TRUE
+Tuvalu,179,121608.9919,TRUE
+Tuvalu,180,7520.279265,TRUE
+Tuvalu,203,26179.47154,TRUE
+Tuvalu,205,158255.8483,TRUE
+Tuvalu,208,84004.18102,TRUE
+Tuvalu,219,80605.62094,TRUE
+Tuvalu,221,53059.48552,TRUE
+Tuvalu,229,16244.65912,TRUE
+Tuvalu,231,60255.26389,TRUE
+Tuvalu,235,172280.9273,TRUE
+Tuvalu,254,26952.37295,TRUE
+Tuvalu,84,9355.713607,TRUE
+Tuvalu,267,9372.487582,TRUE
+Tuvalu,282,423220.8453,TRUE
+Tuvalu,286,760050.6713,TRUE
+Tuvalu,289,9979.922823,TRUE
+Tuvalu,316,72255.87156,TRUE
+Tuvalu,317,188762.6372,TRUE
+Tuvalu,318,32261.2753,TRUE
+Tuvalu,18,11273.75269,TRUE
+Tuvalu,19,77366.60983,TRUE
+Tuvalu,33,30270.38924,TRUE
+Tuvalu,40,180987.6885,TRUE
+Tuvalu,49,247408.5214,TRUE
+Tuvalu,54,175365.1249,TRUE
+Tuvalu,58,74040.89691,TRUE
+Tuvalu,59,22326.21725,TRUE
+Tuvalu,63,234336.5313,TRUE
+Tuvalu,90,194487.8189,TRUE
+Tuvalu,94,61002.28577,TRUE
+Tuvalu,101,138512.4356,TRUE
+Tuvalu,112,122104.9439,TRUE
+Tuvalu,138,17125.18189,TRUE
+Tuvalu,152,119704.6269,TRUE
+Tuvalu,154,96782.90416,TRUE
+Tuvalu,158,96473.15601,TRUE
+Tuvalu,200,22918.25267,TRUE
+Tuvalu,202,85300.04797,TRUE
+Tuvalu,206,183393.7134,TRUE
+Tuvalu,218,52990.31222,TRUE
+Tuvalu,238,116960.1876,TRUE
+Tuvalu,243,112174.5654,TRUE
+Tuvalu,259,55616.6005,TRUE
+Tuvalu,276,10950.60863,TRUE
+Tuvalu,279,177754.1672,TRUE
+Tuvalu,298,120463.1286,TRUE
+Tuvalu,305,15590.0347,TRUE
+Tuvalu,306,131681.4608,TRUE
+Tuvalu,11,178064.2799,TRUE
+Tuvalu,16,74389.59543,TRUE
+Tuvalu,48,27222.34375,TRUE
+Tuvalu,60,22383.25858,TRUE
+Tuvalu,63,11715.28525,TRUE
+Tuvalu,121,115777.4722,TRUE
+Tuvalu,128,9353.124815,TRUE
+Tuvalu,156,10200.29705,TRUE
+Tuvalu,217,21196.4891,TRUE
+Tuvalu,248,14225.32829,TRUE
+Tuvalu,270,9151.63574,TRUE
+Tuvalu,52,72720.10141,TRUE
+Tuvalu,74,4541.36112,TRUE
+Tuvalu,75,9662,FALSE
+Tuvalu,80,49992.57574,TRUE
+Tuvalu,301,113987.8459,TRUE
+Tuvalu,319,89190.44102,TRUE
+Tuvalu,51,26504.47085,TRUE
+Tuvalu,53,6581.96824,TRUE
+Tuvalu,77,5993.147024,TRUE
+Tuvalu,213,124295.9159,TRUE
+Tuvalu,228,133880.2683,TRUE
+Tuvalu,269,15171.62496,TRUE
+Tuvalu,296,43692.55808,TRUE
+Tuvalu,175,70802.39066,TRUE
+Tuvalu,12,36715.19395,TRUE
+Tuvalu,13,74728.86082,TRUE
+Tuvalu,108,12577.92841,TRUE
+Tuvalu,165,14797.07017,TRUE
+Tuvalu,215,105585.0293,TRUE
+Tuvalu,261,8946.089355,TRUE
+Tuvalu,281,136069.2843,TRUE
+Tuvalu,302,27087.34387,TRUE
+Tuvalu,310,36133,TRUE
+Tuvalu,106,13595.99028,TRUE
+Tuvalu,30,62885.73079,TRUE
+Tuvalu,91,126485.3041,TRUE
+Tuvalu,192,3780098.195,TRUE
+Tuvalu,249,70032.42373,TRUE
+Tuvalu,308,35296.76443,TRUE
+Tuvalu,116,98484.54468,TRUE
+Tuvalu,234,8162.890747,TRUE
+Tuvalu,88,138218.959,TRUE
+Tuvalu,227,9358.848173,TRUE
+Tuvalu,8,21599.0332,TRUE
+Tuvalu,115,186672.4488,TRUE
+Tuvalu,146,28645.96233,TRUE
+Tuvalu,257,14862.84549,TRUE
+Tuvalu,39,10075.63454,TRUE
+Tuvalu,61,218943.5096,TRUE
+Tuvalu,76,100326.9844,TRUE
+Tuvalu,268,27005.25,TRUE
+Tuvalu,194,9390.783666,TRUE
+Tuvalu,198,5299.135169,TRUE
+Tuvalu,245,11957.75,TRUE
+Tuvalu,86,15341.61704,TRUE
+Tuvalu,247,27947.125,TRUE
+Tuvalu,15,5922.875,TRUE
+Tuvalu,135,5719.346191,TRUE
+Tuvalu,65,4252.65625,TRUE
+Tuvalu,70,8796.273438,TRUE
+Tuvalu,314,4472.643433,TRUE
+Tuvalu,133,6124.625,TRUE
+Tuvalu,240,4373.4375,TRUE
+Tuvalu,148,23186,TRUE
+Tuvalu,31,5157,TRUE
+Uganda,4,20977.52128,TRUE
+Uganda,5,7484.490489,TRUE
+Uganda,7,111437.9893,TRUE
+Uganda,8,47030.54376,TRUE
+Uganda,17,33099.94094,TRUE
+Uganda,105,149702.6633,TRUE
+Uganda,120,115713.1489,TRUE
+Uganda,161,8730.264786,TRUE
+Uganda,169,23177,FALSE
+Uganda,179,121608.9919,TRUE
+Uganda,180,14008,FALSE
+Uganda,203,26179.47154,TRUE
+Uganda,205,40106,FALSE
+Uganda,208,84004.18102,TRUE
+Uganda,219,80605.62094,TRUE
+Uganda,221,53059.48552,TRUE
+Uganda,229,16244.65912,TRUE
+Uganda,231,60255.26389,TRUE
+Uganda,235,43340,FALSE
+Uganda,254,25276,FALSE
+Uganda,84,11117,FALSE
+Uganda,267,6190,FALSE
+Uganda,282,423220.8453,TRUE
+Uganda,286,678014,FALSE
+Uganda,289,10208,FALSE
+Uganda,316,72255.87156,TRUE
+Uganda,317,188762.6372,TRUE
+Uganda,318,15829,FALSE
+Uganda,18,15034,FALSE
+Uganda,19,77366.60983,TRUE
+Uganda,33,30270.38924,TRUE
+Uganda,40,180987.6885,TRUE
+Uganda,49,247408.5214,TRUE
+Uganda,54,175365.1249,TRUE
+Uganda,58,74040.89691,TRUE
+Uganda,59,22326.21725,TRUE
+Uganda,63,9888,FALSE
+Uganda,90,194487.8189,TRUE
+Uganda,94,61002.28577,TRUE
+Uganda,101,138512.4356,TRUE
+Uganda,112,122104.9439,TRUE
+Uganda,138,17125.18189,TRUE
+Uganda,152,119704.6269,TRUE
+Uganda,154,96782.90416,TRUE
+Uganda,158,96473.15601,TRUE
+Uganda,200,22918.25267,TRUE
+Uganda,202,85300.04797,TRUE
+Uganda,206,183393.7134,TRUE
+Uganda,218,52990.31222,TRUE
+Uganda,238,116960.1876,TRUE
+Uganda,243,112174.5654,TRUE
+Uganda,259,55616.6005,TRUE
+Uganda,276,12565,FALSE
+Uganda,279,177754.1672,TRUE
+Uganda,298,120463.1286,TRUE
+Uganda,305,10241,FALSE
+Uganda,306,58957,FALSE
+Uganda,11,178064.2799,TRUE
+Uganda,16,42101,FALSE
+Uganda,48,27222.34375,TRUE
+Uganda,60,6117,FALSE
+Uganda,63,9888,FALSE
+Uganda,121,115777.4722,TRUE
+Uganda,128,5000,FALSE
+Uganda,156,10200.29705,TRUE
+Uganda,217,5293,FALSE
+Uganda,248,14225.32829,TRUE
+Uganda,270,7902,FALSE
+Uganda,52,30515,FALSE
+Uganda,74,4148,FALSE
+Uganda,75,47178.96176,TRUE
+Uganda,80,49992.57574,TRUE
+Uganda,301,113987.8459,TRUE
+Uganda,319,89190.44102,TRUE
+Uganda,51,26504.47085,TRUE
+Uganda,53,3333,FALSE
+Uganda,77,5307,FALSE
+Uganda,213,124295.9159,TRUE
+Uganda,228,83978,FALSE
+Uganda,269,17212,FALSE
+Uganda,296,44106,FALSE
+Uganda,175,70802.39066,TRUE
+Uganda,12,36715.19395,TRUE
+Uganda,13,74728.86082,TRUE
+Uganda,108,12577.92841,TRUE
+Uganda,165,14797.07017,TRUE
+Uganda,215,105585.0293,TRUE
+Uganda,261,8946.089355,TRUE
+Uganda,281,136069.2843,TRUE
+Uganda,302,21498,FALSE
+Uganda,310,36133,TRUE
+Uganda,106,13595.99028,TRUE
+Uganda,30,62885.73079,TRUE
+Uganda,91,126485.3041,TRUE
+Uganda,192,3780098.195,TRUE
+Uganda,249,70032.42373,TRUE
+Uganda,308,35296.76443,TRUE
+Uganda,116,98484.54468,TRUE
+Uganda,234,8162.890747,TRUE
+Uganda,88,138218.959,TRUE
+Uganda,227,3818,FALSE
+Uganda,8,21599.0332,TRUE
+Uganda,115,29345,FALSE
+Uganda,146,28645.96233,TRUE
+Uganda,257,14862.84549,TRUE
+Uganda,39,10075.63454,TRUE
+Uganda,61,218943.5096,TRUE
+Uganda,76,100326.9844,TRUE
+Uganda,268,27005.25,TRUE
+Uganda,194,9390.783666,TRUE
+Uganda,198,5299.135169,TRUE
+Uganda,245,11957.75,TRUE
+Uganda,86,4906,FALSE
+Uganda,247,27947.125,TRUE
+Uganda,15,5922.875,TRUE
+Uganda,135,5719.346191,TRUE
+Uganda,65,4252.65625,TRUE
+Uganda,70,8796.273438,TRUE
+Uganda,314,5214,FALSE
+Uganda,133,6124.625,TRUE
+Uganda,240,4373.4375,TRUE
+Uganda,148,23186,TRUE
+Uganda,31,5157,TRUE
+Ukraine,4,20977.52128,TRUE
+Ukraine,5,11129,FALSE
+Ukraine,7,120004,FALSE
+Ukraine,8,106961,FALSE
+Ukraine,17,33001,FALSE
+Ukraine,105,149702.6633,TRUE
+Ukraine,120,88473,FALSE
+Ukraine,161,13415,FALSE
+Ukraine,169,66024,FALSE
+Ukraine,179,62395,FALSE
+Ukraine,180,17611,FALSE
+Ukraine,203,26179.47154,TRUE
+Ukraine,205,184595,FALSE
+Ukraine,208,84004.18102,TRUE
+Ukraine,219,53118,FALSE
+Ukraine,221,131092,FALSE
+Ukraine,229,16244.65912,TRUE
+Ukraine,231,100180,FALSE
+Ukraine,235,165830,FALSE
+Ukraine,254,53917,FALSE
+Ukraine,84,9355.713607,TRUE
+Ukraine,267,9372.487582,TRUE
+Ukraine,282,481162,FALSE
+Ukraine,286,760050.6713,TRUE
+Ukraine,289,22388,FALSE
+Ukraine,316,81811,FALSE
+Ukraine,317,90524,FALSE
+Ukraine,318,42056,FALSE
+Ukraine,18,15051,FALSE
+Ukraine,19,226353,FALSE
+Ukraine,33,22643,FALSE
+Ukraine,40,249464,FALSE
+Ukraine,49,203462,FALSE
+Ukraine,54,120000,FALSE
+Ukraine,58,62693,FALSE
+Ukraine,59,26656,FALSE
+Ukraine,63,128747,FALSE
+Ukraine,90,190542,FALSE
+Ukraine,94,61002.28577,TRUE
+Ukraine,101,153091,FALSE
+Ukraine,112,89505,FALSE
+Ukraine,138,16000,FALSE
+Ukraine,152,119704.6269,TRUE
+Ukraine,154,96782.90416,TRUE
+Ukraine,158,318222,FALSE
+Ukraine,200,23964,FALSE
+Ukraine,202,85300.04797,TRUE
+Ukraine,206,118160,FALSE
+Ukraine,218,50698,FALSE
+Ukraine,238,206452,FALSE
+Ukraine,243,94571,FALSE
+Ukraine,259,27267,FALSE
+Ukraine,276,23002,FALSE
+Ukraine,279,88855,FALSE
+Ukraine,298,120463.1286,TRUE
+Ukraine,305,23500,FALSE
+Ukraine,306,300093,FALSE
+Ukraine,11,178064.2799,TRUE
+Ukraine,16,74389.59543,TRUE
+Ukraine,48,20546,FALSE
+Ukraine,60,22383.25858,TRUE
+Ukraine,63,128747,FALSE
+Ukraine,121,115777.4722,TRUE
+Ukraine,128,9353.124815,TRUE
+Ukraine,156,18733,FALSE
+Ukraine,217,31262,FALSE
+Ukraine,248,25682,FALSE
+Ukraine,270,38990,FALSE
+Ukraine,52,72720.10141,TRUE
+Ukraine,74,4541.36112,TRUE
+Ukraine,75,47178.96176,TRUE
+Ukraine,80,245258,FALSE
+Ukraine,301,113987.8459,TRUE
+Ukraine,319,89190.44102,TRUE
+Ukraine,51,26504.47085,TRUE
+Ukraine,53,6581.96824,TRUE
+Ukraine,77,5993.147024,TRUE
+Ukraine,213,124295.9159,TRUE
+Ukraine,228,133880.2683,TRUE
+Ukraine,269,15171.62496,TRUE
+Ukraine,296,43692.55808,TRUE
+Ukraine,175,70802.39066,TRUE
+Ukraine,12,36715.19395,TRUE
+Ukraine,13,74728.86082,TRUE
+Ukraine,108,8933,FALSE
+Ukraine,165,16690,FALSE
+Ukraine,215,105585.0293,TRUE
+Ukraine,261,5079,FALSE
+Ukraine,281,77413,FALSE
+Ukraine,302,27087.34387,TRUE
+Ukraine,310,36133,TRUE
+Ukraine,106,5178,FALSE
+Ukraine,30,31500,FALSE
+Ukraine,91,51042,FALSE
+Ukraine,192,3780098.195,TRUE
+Ukraine,249,69391,FALSE
+Ukraine,308,35296.76443,TRUE
+Ukraine,116,131800,FALSE
+Ukraine,234,8162.890747,TRUE
+Ukraine,88,13396,FALSE
+Ukraine,227,9358.848173,TRUE
+Ukraine,8,106961,FALSE
+Ukraine,115,186672.4488,TRUE
+Ukraine,146,28645.96233,TRUE
+Ukraine,257,14862.84549,TRUE
+Ukraine,39,11479,FALSE
+Ukraine,61,245333,FALSE
+Ukraine,76,100326.9844,TRUE
+Ukraine,268,27005.25,TRUE
+Ukraine,194,7996,FALSE
+Ukraine,198,5299.135169,TRUE
+Ukraine,245,11957.75,TRUE
+Ukraine,86,15341.61704,TRUE
+Ukraine,247,27947.125,TRUE
+Ukraine,15,5922.875,TRUE
+Ukraine,135,6578,FALSE
+Ukraine,65,4252.65625,TRUE
+Ukraine,70,8796.273438,TRUE
+Ukraine,314,4472.643433,TRUE
+Ukraine,133,6124.625,TRUE
+Ukraine,240,4373.4375,TRUE
+Ukraine,148,23186,TRUE
+Ukraine,31,5157,TRUE
+United Arab Emirates,4,12788,FALSE
+United Arab Emirates,5,7484.490489,TRUE
+United Arab Emirates,7,111437.9893,TRUE
+United Arab Emirates,8,47030.54376,TRUE
+United Arab Emirates,17,79758,FALSE
+United Arab Emirates,105,45991,FALSE
+United Arab Emirates,120,24486,FALSE
+United Arab Emirates,161,8730.264786,TRUE
+United Arab Emirates,169,261786,FALSE
+United Arab Emirates,179,140867,FALSE
+United Arab Emirates,180,7520.279265,TRUE
+United Arab Emirates,203,26179.47154,TRUE
+United Arab Emirates,205,158255.8483,TRUE
+United Arab Emirates,208,84004.18102,TRUE
+United Arab Emirates,219,80605.62094,TRUE
+United Arab Emirates,221,53059.48552,TRUE
+United Arab Emirates,229,16244.65912,TRUE
+United Arab Emirates,231,60255.26389,TRUE
+United Arab Emirates,235,266030,FALSE
+United Arab Emirates,254,26952.37295,TRUE
+United Arab Emirates,84,9355.713607,TRUE
+United Arab Emirates,267,9372.487582,TRUE
+United Arab Emirates,282,423220.8453,TRUE
+United Arab Emirates,286,760050.6713,TRUE
+United Arab Emirates,289,9979.922823,TRUE
+United Arab Emirates,316,72255.87156,TRUE
+United Arab Emirates,317,259960,FALSE
+United Arab Emirates,318,36721,FALSE
+United Arab Emirates,18,11273.75269,TRUE
+United Arab Emirates,19,136880,FALSE
+United Arab Emirates,33,30270.38924,TRUE
+United Arab Emirates,40,321854,FALSE
+United Arab Emirates,49,141049,FALSE
+United Arab Emirates,54,254193,FALSE
+United Arab Emirates,58,74040.89691,TRUE
+United Arab Emirates,59,22326.21725,TRUE
+United Arab Emirates,63,253381,FALSE
+United Arab Emirates,90,385237,FALSE
+United Arab Emirates,94,71813,FALSE
+United Arab Emirates,101,410548,FALSE
+United Arab Emirates,112,122104.9439,TRUE
+United Arab Emirates,138,17125.18189,TRUE
+United Arab Emirates,152,119704.6269,TRUE
+United Arab Emirates,154,92082,FALSE
+United Arab Emirates,158,205971,FALSE
+United Arab Emirates,200,22918.25267,TRUE
+United Arab Emirates,202,228312,FALSE
+United Arab Emirates,206,269935,FALSE
+United Arab Emirates,218,52990.31222,TRUE
+United Arab Emirates,238,330056,FALSE
+United Arab Emirates,243,112174.5654,TRUE
+United Arab Emirates,259,55616.6005,TRUE
+United Arab Emirates,276,10950.60863,TRUE
+United Arab Emirates,279,289170,FALSE
+United Arab Emirates,298,120463.1286,TRUE
+United Arab Emirates,305,152773,FALSE
+United Arab Emirates,306,387253,FALSE
+United Arab Emirates,11,178064.2799,TRUE
+United Arab Emirates,16,188979,FALSE
+United Arab Emirates,48,27222.34375,TRUE
+United Arab Emirates,60,22383.25858,TRUE
+United Arab Emirates,63,253381,FALSE
+United Arab Emirates,121,115777.4722,TRUE
+United Arab Emirates,128,9353.124815,TRUE
+United Arab Emirates,156,10200.29705,TRUE
+United Arab Emirates,217,21196.4891,TRUE
+United Arab Emirates,248,14225.32829,TRUE
+United Arab Emirates,270,9151.63574,TRUE
+United Arab Emirates,52,72720.10141,TRUE
+United Arab Emirates,74,4541.36112,TRUE
+United Arab Emirates,75,47178.96176,TRUE
+United Arab Emirates,80,49992.57574,TRUE
+United Arab Emirates,301,113987.8459,TRUE
+United Arab Emirates,319,89190.44102,TRUE
+United Arab Emirates,51,26504.47085,TRUE
+United Arab Emirates,53,6581.96824,TRUE
+United Arab Emirates,77,5993.147024,TRUE
+United Arab Emirates,213,124295.9159,TRUE
+United Arab Emirates,228,133880.2683,TRUE
+United Arab Emirates,269,15171.62496,TRUE
+United Arab Emirates,296,43692.55808,TRUE
+United Arab Emirates,175,145599,FALSE
+United Arab Emirates,12,36715.19395,TRUE
+United Arab Emirates,13,74728.86082,TRUE
+United Arab Emirates,108,12577.92841,TRUE
+United Arab Emirates,165,14797.07017,TRUE
+United Arab Emirates,215,105585.0293,TRUE
+United Arab Emirates,261,8946.089355,TRUE
+United Arab Emirates,281,136069.2843,TRUE
+United Arab Emirates,302,27087.34387,TRUE
+United Arab Emirates,310,36133,TRUE
+United Arab Emirates,106,13595.99028,TRUE
+United Arab Emirates,30,62885.73079,TRUE
+United Arab Emirates,91,126485.3041,TRUE
+United Arab Emirates,192,3780098.195,TRUE
+United Arab Emirates,249,70032.42373,TRUE
+United Arab Emirates,308,35296.76443,TRUE
+United Arab Emirates,116,98484.54468,TRUE
+United Arab Emirates,234,8162.890747,TRUE
+United Arab Emirates,88,138218.959,TRUE
+United Arab Emirates,227,9358.848173,TRUE
+United Arab Emirates,8,21599.0332,TRUE
+United Arab Emirates,115,186672.4488,TRUE
+United Arab Emirates,146,28645.96233,TRUE
+United Arab Emirates,257,14862.84549,TRUE
+United Arab Emirates,39,10075.63454,TRUE
+United Arab Emirates,61,218943.5096,TRUE
+United Arab Emirates,76,100326.9844,TRUE
+United Arab Emirates,268,27005.25,TRUE
+United Arab Emirates,194,9390.783666,TRUE
+United Arab Emirates,198,5299.135169,TRUE
+United Arab Emirates,245,11957.75,TRUE
+United Arab Emirates,86,15341.61704,TRUE
+United Arab Emirates,247,27947.125,TRUE
+United Arab Emirates,15,5922.875,TRUE
+United Arab Emirates,135,5719.346191,TRUE
+United Arab Emirates,65,4252.65625,TRUE
+United Arab Emirates,70,8796.273438,TRUE
+United Arab Emirates,314,4472.643433,TRUE
+United Arab Emirates,133,6124.625,TRUE
+United Arab Emirates,240,4373.4375,TRUE
+United Arab Emirates,148,23186,TRUE
+United Arab Emirates,31,5157,TRUE
+United Kingdom,4,20977.52128,TRUE
+United Kingdom,5,7484.490489,TRUE
+United Kingdom,7,291364,FALSE
+United Kingdom,8,47030.54376,TRUE
+United Kingdom,17,59314,FALSE
+United Kingdom,105,149702.6633,TRUE
+United Kingdom,120,11751,FALSE
+United Kingdom,161,17778,FALSE
+United Kingdom,169,16777.49735,TRUE
+United Kingdom,179,121608.9919,TRUE
+United Kingdom,180,7520.279265,TRUE
+United Kingdom,203,26179.47154,TRUE
+United Kingdom,205,418370,FALSE
+United Kingdom,208,84004.18102,TRUE
+United Kingdom,219,80605.62094,TRUE
+United Kingdom,221,157480,FALSE
+United Kingdom,229,16244.65912,TRUE
+United Kingdom,231,127601,FALSE
+United Kingdom,235,386547,FALSE
+United Kingdom,254,26952.37295,TRUE
+United Kingdom,84,9355.713607,TRUE
+United Kingdom,267,9372.487582,TRUE
+United Kingdom,282,661279,FALSE
+United Kingdom,286,760050.6713,TRUE
+United Kingdom,289,9979.922823,TRUE
+United Kingdom,316,72255.87156,TRUE
+United Kingdom,317,188762.6372,TRUE
+United Kingdom,318,78897,FALSE
+United Kingdom,18,11273.75269,TRUE
+United Kingdom,19,123904,FALSE
+United Kingdom,33,38348,FALSE
+United Kingdom,40,307596,FALSE
+United Kingdom,49,639783,FALSE
+United Kingdom,54,93414,FALSE
+United Kingdom,58,23944,FALSE
+United Kingdom,59,22326.21725,TRUE
+United Kingdom,63,2560000,FALSE
+United Kingdom,90,5350000,FALSE
+United Kingdom,94,61002.28577,TRUE
+United Kingdom,101,138512.4356,TRUE
+United Kingdom,112,122104.9439,TRUE
+United Kingdom,138,13597,FALSE
+United Kingdom,152,197893,FALSE
+United Kingdom,154,96782.90416,TRUE
+United Kingdom,158,221382,FALSE
+United Kingdom,200,57872,FALSE
+United Kingdom,202,85300.04797,TRUE
+United Kingdom,206,121981,FALSE
+United Kingdom,218,43231,FALSE
+United Kingdom,238,116960.1876,TRUE
+United Kingdom,243,112174.5654,TRUE
+United Kingdom,259,18741,FALSE
+United Kingdom,276,10950.60863,TRUE
+United Kingdom,279,177754.1672,TRUE
+United Kingdom,298,120463.1286,TRUE
+United Kingdom,305,15590.0347,TRUE
+United Kingdom,306,4161897,FALSE
+United Kingdom,11,178064.2799,TRUE
+United Kingdom,16,74389.59543,TRUE
+United Kingdom,48,27222.34375,TRUE
+United Kingdom,60,22383.25858,TRUE
+United Kingdom,63,2560000,FALSE
+United Kingdom,121,115777.4722,TRUE
+United Kingdom,128,9353.124815,TRUE
+United Kingdom,156,10200.29705,TRUE
+United Kingdom,217,36589,FALSE
+United Kingdom,248,30656,FALSE
+United Kingdom,270,9151.63574,TRUE
+United Kingdom,52,72720.10141,TRUE
+United Kingdom,74,4541.36112,TRUE
+United Kingdom,75,47178.96176,TRUE
+United Kingdom,80,49992.57574,TRUE
+United Kingdom,301,113987.8459,TRUE
+United Kingdom,319,89190.44102,TRUE
+United Kingdom,51,26504.47085,TRUE
+United Kingdom,53,6581.96824,TRUE
+United Kingdom,77,5993.147024,TRUE
+United Kingdom,213,124295.9159,TRUE
+United Kingdom,228,133880.2683,TRUE
+United Kingdom,269,15171.62496,TRUE
+United Kingdom,296,43692.55808,TRUE
+United Kingdom,175,70802.39066,TRUE
+United Kingdom,12,25000,FALSE
+United Kingdom,13,74728.86082,TRUE
+United Kingdom,108,14471,FALSE
+United Kingdom,165,14797.07017,TRUE
+United Kingdom,215,105585.0293,TRUE
+United Kingdom,261,8946.089355,TRUE
+United Kingdom,281,245643,FALSE
+United Kingdom,302,27087.34387,TRUE
+United Kingdom,310,36133,TRUE
+United Kingdom,106,13595.99028,TRUE
+United Kingdom,30,62885.73079,TRUE
+United Kingdom,91,45376,FALSE
+United Kingdom,192,3780098.195,TRUE
+United Kingdom,249,96057,FALSE
+United Kingdom,308,38828,FALSE
+United Kingdom,116,82590,FALSE
+United Kingdom,234,8162.890747,TRUE
+United Kingdom,88,138218.959,TRUE
+United Kingdom,227,9358.848173,TRUE
+United Kingdom,8,21599.0332,TRUE
+United Kingdom,115,186672.4488,TRUE
+United Kingdom,146,28645.96233,TRUE
+United Kingdom,257,14862.84549,TRUE
+United Kingdom,39,10075.63454,TRUE
+United Kingdom,61,218943.5096,TRUE
+United Kingdom,76,100326.9844,TRUE
+United Kingdom,268,27005.25,TRUE
+United Kingdom,194,9390.783666,TRUE
+United Kingdom,198,5299.135169,TRUE
+United Kingdom,245,11957.75,TRUE
+United Kingdom,86,15341.61704,TRUE
+United Kingdom,247,27947.125,TRUE
+United Kingdom,15,5922.875,TRUE
+United Kingdom,135,5719.346191,TRUE
+United Kingdom,65,4252.65625,TRUE
+United Kingdom,70,8796.273438,TRUE
+United Kingdom,314,4472.643433,TRUE
+United Kingdom,133,6124.625,TRUE
+United Kingdom,240,4373.4375,TRUE
+United Kingdom,148,23186,TRUE
+United Kingdom,31,5157,TRUE
+United Republic of Tanzania,4,20977.52128,TRUE
+United Republic of Tanzania,5,9402,FALSE
+United Republic of Tanzania,7,111437.9893,TRUE
+United Republic of Tanzania,8,47030.54376,TRUE
+United Republic of Tanzania,17,17800,FALSE
+United Republic of Tanzania,105,149702.6633,TRUE
+United Republic of Tanzania,120,47237,FALSE
+United Republic of Tanzania,161,8730.264786,TRUE
+United Republic of Tanzania,169,14554,FALSE
+United Republic of Tanzania,179,121608.9919,TRUE
+United Republic of Tanzania,180,9171,FALSE
+United Republic of Tanzania,203,26179.47154,TRUE
+United Republic of Tanzania,205,137255,FALSE
+United Republic of Tanzania,208,116714,FALSE
+United Republic of Tanzania,219,80605.62094,TRUE
+United Republic of Tanzania,221,79113,FALSE
+United Republic of Tanzania,229,16244.65912,TRUE
+United Republic of Tanzania,231,64689,FALSE
+United Republic of Tanzania,235,80228,FALSE
+United Republic of Tanzania,254,24251,FALSE
+United Republic of Tanzania,84,5737,FALSE
+United Republic of Tanzania,267,10447,FALSE
+United Republic of Tanzania,282,423220.8453,TRUE
+United Republic of Tanzania,286,275991,FALSE
+United Republic of Tanzania,289,10349,FALSE
+United Republic of Tanzania,316,72255.87156,TRUE
+United Republic of Tanzania,317,100832,FALSE
+United Republic of Tanzania,318,9356,FALSE
+United Republic of Tanzania,18,10354,FALSE
+United Republic of Tanzania,19,51038,FALSE
+United Republic of Tanzania,33,30270.38924,TRUE
+United Republic of Tanzania,40,105644,FALSE
+United Republic of Tanzania,49,247408.5214,TRUE
+United Republic of Tanzania,54,175365.1249,TRUE
+United Republic of Tanzania,58,74040.89691,TRUE
+United Republic of Tanzania,59,22326.21725,TRUE
+United Republic of Tanzania,63,24887,FALSE
+United Republic of Tanzania,90,194487.8189,TRUE
+United Republic of Tanzania,94,61002.28577,TRUE
+United Republic of Tanzania,101,138512.4356,TRUE
+United Republic of Tanzania,112,35088,FALSE
+United Republic of Tanzania,138,17125.18189,TRUE
+United Republic of Tanzania,152,119704.6269,TRUE
+United Republic of Tanzania,154,52452,FALSE
+United Republic of Tanzania,158,96473.15601,TRUE
+United Republic of Tanzania,200,22918.25267,TRUE
+United Republic of Tanzania,202,85300.04797,TRUE
+United Republic of Tanzania,206,183393.7134,TRUE
+United Republic of Tanzania,218,18836,FALSE
+United Republic of Tanzania,238,116960.1876,TRUE
+United Republic of Tanzania,243,112174.5654,TRUE
+United Republic of Tanzania,259,55616.6005,TRUE
+United Republic of Tanzania,276,10245,FALSE
+United Republic of Tanzania,279,177754.1672,TRUE
+United Republic of Tanzania,298,120463.1286,TRUE
+United Republic of Tanzania,305,6902,FALSE
+United Republic of Tanzania,306,137005,FALSE
+United Republic of Tanzania,11,178064.2799,TRUE
+United Republic of Tanzania,16,75984,FALSE
+United Republic of Tanzania,48,27222.34375,TRUE
+United Republic of Tanzania,60,9020,FALSE
+United Republic of Tanzania,63,24887,FALSE
+United Republic of Tanzania,121,115777.4722,TRUE
+United Republic of Tanzania,128,7051,FALSE
+United Republic of Tanzania,156,10200.29705,TRUE
+United Republic of Tanzania,217,5655,FALSE
+United Republic of Tanzania,248,14225.32829,TRUE
+United Republic of Tanzania,270,9673,FALSE
+United Republic of Tanzania,52,52546,FALSE
+United Republic of Tanzania,74,7107,FALSE
+United Republic of Tanzania,75,7591,FALSE
+United Republic of Tanzania,80,35743,FALSE
+United Republic of Tanzania,301,113987.8459,TRUE
+United Republic of Tanzania,319,63355,FALSE
+United Republic of Tanzania,51,4140,FALSE
+United Republic of Tanzania,53,5000,FALSE
+United Republic of Tanzania,77,2361,FALSE
+United Republic of Tanzania,213,139006,FALSE
+United Republic of Tanzania,228,246127,FALSE
+United Republic of Tanzania,269,7099,FALSE
+United Republic of Tanzania,296,50331,FALSE
+United Republic of Tanzania,175,128902,FALSE
+United Republic of Tanzania,12,36715.19395,TRUE
+United Republic of Tanzania,13,74728.86082,TRUE
+United Republic of Tanzania,108,12577.92841,TRUE
+United Republic of Tanzania,165,14797.07017,TRUE
+United Republic of Tanzania,215,105585.0293,TRUE
+United Republic of Tanzania,261,5245,FALSE
+United Republic of Tanzania,281,136069.2843,TRUE
+United Republic of Tanzania,302,19384,FALSE
+United Republic of Tanzania,310,36133,TRUE
+United Republic of Tanzania,106,13595.99028,TRUE
+United Republic of Tanzania,30,62885.73079,TRUE
+United Republic of Tanzania,91,126485.3041,TRUE
+United Republic of Tanzania,192,3780098.195,TRUE
+United Republic of Tanzania,249,70032.42373,TRUE
+United Republic of Tanzania,308,35296.76443,TRUE
+United Republic of Tanzania,116,98484.54468,TRUE
+United Republic of Tanzania,234,8162.890747,TRUE
+United Republic of Tanzania,88,138218.959,TRUE
+United Republic of Tanzania,227,10161,FALSE
+United Republic of Tanzania,8,21599.0332,TRUE
+United Republic of Tanzania,115,23197,FALSE
+United Republic of Tanzania,146,28645.96233,TRUE
+United Republic of Tanzania,257,14862.84549,TRUE
+United Republic of Tanzania,39,10203,FALSE
+United Republic of Tanzania,61,218943.5096,TRUE
+United Republic of Tanzania,76,100326.9844,TRUE
+United Republic of Tanzania,268,27005.25,TRUE
+United Republic of Tanzania,194,9390.783666,TRUE
+United Republic of Tanzania,198,4274,FALSE
+United Republic of Tanzania,245,11957.75,TRUE
+United Republic of Tanzania,86,8960,FALSE
+United Republic of Tanzania,247,27947.125,TRUE
+United Republic of Tanzania,15,5922.875,TRUE
+United Republic of Tanzania,135,5719.346191,TRUE
+United Republic of Tanzania,65,4252.65625,TRUE
+United Republic of Tanzania,70,12367,FALSE
+United Republic of Tanzania,314,4472.643433,TRUE
+United Republic of Tanzania,133,6124.625,TRUE
+United Republic of Tanzania,240,4875,FALSE
+United Republic of Tanzania,148,23186,TRUE
+United Republic of Tanzania,31,5157,TRUE
+
+Uruguay,4,20977.52128,TRUE
+Uruguay,5,7484.490489,TRUE
+Uruguay,7,140736,FALSE
+Uruguay,8,47030.54376,TRUE
+Uruguay,17,35684,FALSE
+Uruguay,105,149702.6633,TRUE
+Uruguay,120,153685,FALSE
+Uruguay,161,12415,FALSE
+Uruguay,169,71364,FALSE
+Uruguay,179,217822,FALSE
+Uruguay,180,7520.279265,TRUE
+Uruguay,203,20630,FALSE
+Uruguay,205,221108,FALSE
+Uruguay,208,187517,FALSE
+Uruguay,219,92637,FALSE
+Uruguay,221,65007,FALSE
+Uruguay,229,16244.65912,TRUE
+Uruguay,231,49960,FALSE
+Uruguay,235,201175,FALSE
+Uruguay,254,85690,FALSE
+Uruguay,84,63392,FALSE
+Uruguay,267,9372.487582,TRUE
+Uruguay,282,423220.8453,TRUE
+Uruguay,286,483816,FALSE
+Uruguay,289,9979.922823,TRUE
+Uruguay,316,72255.87156,TRUE
+Uruguay,317,171984,FALSE
+Uruguay,318,35209,FALSE
+Uruguay,18,6366,FALSE
+Uruguay,19,33244,FALSE
+Uruguay,33,19227,FALSE
+Uruguay,40,94998,FALSE
+Uruguay,49,192691,FALSE
+Uruguay,54,175365.1249,TRUE
+Uruguay,58,74040.89691,TRUE
+Uruguay,59,22326.21725,TRUE
+Uruguay,63,665042,FALSE
+Uruguay,90,194487.8189,TRUE
+Uruguay,94,61002.28577,TRUE
+Uruguay,101,138512.4356,TRUE
+Uruguay,112,58439,FALSE
+Uruguay,138,17125.18189,TRUE
+Uruguay,152,119704.6269,TRUE
+Uruguay,154,225161,FALSE
+Uruguay,158,96473.15601,TRUE
+Uruguay,200,19005,FALSE
+Uruguay,202,85300.04797,TRUE
+Uruguay,206,183393.7134,TRUE
+Uruguay,218,52990.31222,TRUE
+Uruguay,238,112449,FALSE
+Uruguay,243,275325,FALSE
+Uruguay,259,55616.6005,TRUE
+Uruguay,276,19368,FALSE
+Uruguay,279,177754.1672,TRUE
+Uruguay,298,165095,FALSE
+Uruguay,305,38732,FALSE
+Uruguay,306,851853,FALSE
+Uruguay,11,178064.2799,TRUE
+Uruguay,16,74389.59543,TRUE
+Uruguay,48,27222.34375,TRUE
+Uruguay,60,22383.25858,TRUE
+Uruguay,63,665042,FALSE
+Uruguay,121,144824,FALSE
+Uruguay,128,5391,FALSE
+Uruguay,156,10200.29705,TRUE
+Uruguay,217,21380,FALSE
+Uruguay,248,15769,FALSE
+Uruguay,270,35522,FALSE
+Uruguay,52,72720.10141,TRUE
+Uruguay,74,4541.36112,TRUE
+Uruguay,75,47178.96176,TRUE
+Uruguay,80,73011,FALSE
+Uruguay,301,113987.8459,TRUE
+Uruguay,319,89190.44102,TRUE
+Uruguay,51,26504.47085,TRUE
+Uruguay,53,6581.96824,TRUE
+Uruguay,77,5993.147024,TRUE
+Uruguay,213,124295.9159,TRUE
+Uruguay,228,133880.2683,TRUE
+Uruguay,269,15171.62496,TRUE
+Uruguay,296,91446,FALSE
+Uruguay,175,70802.39066,TRUE
+Uruguay,12,36715.19395,TRUE
+Uruguay,13,74728.86082,TRUE
+Uruguay,108,12577.92841,TRUE
+Uruguay,165,14797.07017,TRUE
+Uruguay,215,105585.0293,TRUE
+Uruguay,261,8946.089355,TRUE
+Uruguay,281,136069.2843,TRUE
+Uruguay,302,27087.34387,TRUE
+Uruguay,310,36133,TRUE
+Uruguay,106,13595.99028,TRUE
+Uruguay,30,62885.73079,TRUE
+Uruguay,91,126485.3041,TRUE
+Uruguay,192,3780098.195,TRUE
+Uruguay,249,70032.42373,TRUE
+Uruguay,308,35296.76443,TRUE
+Uruguay,116,98484.54468,TRUE
+Uruguay,234,8162.890747,TRUE
+Uruguay,88,138218.959,TRUE
+Uruguay,227,9358.848173,TRUE
+Uruguay,8,21599.0332,TRUE
+Uruguay,115,186672.4488,TRUE
+Uruguay,146,28645.96233,TRUE
+Uruguay,257,14862.84549,TRUE
+Uruguay,39,10075.63454,TRUE
+Uruguay,61,218943.5096,TRUE
+Uruguay,76,100326.9844,TRUE
+Uruguay,268,27005.25,TRUE
+Uruguay,194,9390.783666,TRUE
+Uruguay,198,5299.135169,TRUE
+Uruguay,245,11957.75,TRUE
+Uruguay,86,15341.61704,TRUE
+Uruguay,247,27947.125,TRUE
+Uruguay,15,5922.875,TRUE
+Uruguay,135,5719.346191,TRUE
+Uruguay,65,4252.65625,TRUE
+Uruguay,70,8796.273438,TRUE
+Uruguay,314,4472.643433,TRUE
+Uruguay,133,6124.625,TRUE
+Uruguay,240,4373.4375,TRUE
+Uruguay,148,23186,TRUE
+Uruguay,31,5157,TRUE
+Uzbekistan,4,38576,FALSE
+Uzbekistan,5,7484.490489,TRUE
+Uzbekistan,7,110120,FALSE
+Uzbekistan,8,117802,FALSE
+Uzbekistan,17,16084,FALSE
+Uzbekistan,105,269793,FALSE
+Uzbekistan,120,121535,FALSE
+Uzbekistan,161,3333,FALSE
+Uzbekistan,169,119570,FALSE
+Uzbekistan,179,121608.9919,TRUE
+Uzbekistan,180,68121,FALSE
+Uzbekistan,203,9869,FALSE
+Uzbekistan,205,416657,FALSE
+Uzbekistan,208,84004.18102,TRUE
+Uzbekistan,219,116707,FALSE
+Uzbekistan,221,95078,FALSE
+Uzbekistan,229,2913,FALSE
+Uzbekistan,231,92591,FALSE
+Uzbekistan,235,347630,FALSE
+Uzbekistan,254,29322,FALSE
+Uzbekistan,84,25999,FALSE
+Uzbekistan,267,8757,FALSE
+Uzbekistan,282,423220.8453,TRUE
+Uzbekistan,286,760050.6713,TRUE
+Uzbekistan,289,36933,FALSE
+Uzbekistan,316,94358,FALSE
+Uzbekistan,317,363515,FALSE
+Uzbekistan,318,47988,FALSE
+Uzbekistan,18,11273.75269,TRUE
+Uzbekistan,19,123187,FALSE
+Uzbekistan,33,60330,FALSE
+Uzbekistan,40,753185,FALSE
+Uzbekistan,49,686934,FALSE
+Uzbekistan,54,175365.1249,TRUE
+Uzbekistan,58,88145,FALSE
+Uzbekistan,59,22326.21725,TRUE
+Uzbekistan,63,40342,FALSE
+Uzbekistan,90,474199,FALSE
+Uzbekistan,94,61002.28577,TRUE
+Uzbekistan,101,225059,FALSE
+Uzbekistan,112,364342,FALSE
+Uzbekistan,138,17125.18189,TRUE
+Uzbekistan,152,100960,FALSE
+Uzbekistan,154,75636,FALSE
+Uzbekistan,158,140286,FALSE
+Uzbekistan,200,22918.25267,TRUE
+Uzbekistan,202,85300.04797,TRUE
+Uzbekistan,206,183393.7134,TRUE
+Uzbekistan,218,60892,FALSE
+Uzbekistan,238,116960.1876,TRUE
+Uzbekistan,243,118479,FALSE
+Uzbekistan,259,89586,FALSE
+Uzbekistan,276,10950.60863,TRUE
+Uzbekistan,279,177754.1672,TRUE
+Uzbekistan,298,127446,FALSE
+Uzbekistan,305,12035,FALSE
+Uzbekistan,306,433410,FALSE
+Uzbekistan,11,319330,FALSE
+Uzbekistan,16,74389.59543,TRUE
+Uzbekistan,48,27222.34375,TRUE
+Uzbekistan,60,23200,FALSE
+Uzbekistan,63,40342,FALSE
+Uzbekistan,121,196038,FALSE
+Uzbekistan,128,42984,FALSE
+Uzbekistan,156,9309,FALSE
+Uzbekistan,217,33238,FALSE
+Uzbekistan,248,8498,FALSE
+Uzbekistan,270,94483,FALSE
+Uzbekistan,52,72720.10141,TRUE
+Uzbekistan,74,4541.36112,TRUE
+Uzbekistan,75,47178.96176,TRUE
+Uzbekistan,80,49992.57574,TRUE
+Uzbekistan,301,113987.8459,TRUE
+Uzbekistan,319,89190.44102,TRUE
+Uzbekistan,51,26504.47085,TRUE
+Uzbekistan,53,6581.96824,TRUE
+Uzbekistan,77,5993.147024,TRUE
+Uzbekistan,213,124295.9159,TRUE
+Uzbekistan,228,133880.2683,TRUE
+Uzbekistan,269,15171.62496,TRUE
+Uzbekistan,296,43692.55808,TRUE
+Uzbekistan,175,70802.39066,TRUE
+Uzbekistan,12,36715.19395,TRUE
+Uzbekistan,13,74728.86082,TRUE
+Uzbekistan,108,12577.92841,TRUE
+Uzbekistan,165,14797.07017,TRUE
+Uzbekistan,215,105585.0293,TRUE
+Uzbekistan,261,6492,FALSE
+Uzbekistan,281,65454,FALSE
+Uzbekistan,302,27087.34387,TRUE
+Uzbekistan,310,36133,TRUE
+Uzbekistan,106,11872,FALSE
+Uzbekistan,30,70953,FALSE
+Uzbekistan,91,198033,FALSE
+Uzbekistan,192,3780098.195,TRUE
+Uzbekistan,249,70032.42373,TRUE
+Uzbekistan,308,35296.76443,TRUE
+Uzbekistan,116,98484.54468,TRUE
+Uzbekistan,234,8162.890747,TRUE
+Uzbekistan,88,138218.959,TRUE
+Uzbekistan,227,9358.848173,TRUE
+Uzbekistan,8,117802,FALSE
+Uzbekistan,115,186672.4488,TRUE
+Uzbekistan,146,101236,FALSE
+Uzbekistan,257,14862.84549,TRUE
+Uzbekistan,39,10075.63454,TRUE
+Uzbekistan,61,218943.5096,TRUE
+Uzbekistan,76,100326.9844,TRUE
+Uzbekistan,268,27005.25,TRUE
+Uzbekistan,194,9390.783666,TRUE
+Uzbekistan,198,5299.135169,TRUE
+Uzbekistan,245,11957.75,TRUE
+Uzbekistan,86,15341.61704,TRUE
+Uzbekistan,247,27947.125,TRUE
+Uzbekistan,15,5922.875,TRUE
+Uzbekistan,135,5719.346191,TRUE
+Uzbekistan,65,4252.65625,TRUE
+Uzbekistan,70,8796.273438,TRUE
+Uzbekistan,314,4472.643433,TRUE
+Uzbekistan,133,6124.625,TRUE
+Uzbekistan,240,4373.4375,TRUE
+Uzbekistan,148,23186,TRUE
+Uzbekistan,31,5157,TRUE
+Vanuatu,4,20977.52128,TRUE
+Vanuatu,5,7484.490489,TRUE
+Vanuatu,7,111437.9893,TRUE
+Vanuatu,8,47030.54376,TRUE
+Vanuatu,17,33099.94094,TRUE
+Vanuatu,105,149702.6633,TRUE
+Vanuatu,120,115713.1489,TRUE
+Vanuatu,161,8730.264786,TRUE
+Vanuatu,169,6125,FALSE
+Vanuatu,179,121608.9919,TRUE
+Vanuatu,180,7520.279265,TRUE
+Vanuatu,203,26179.47154,TRUE
+Vanuatu,205,158255.8483,TRUE
+Vanuatu,208,84004.18102,TRUE
+Vanuatu,219,80605.62094,TRUE
+Vanuatu,221,53059.48552,TRUE
+Vanuatu,229,16244.65912,TRUE
+Vanuatu,231,60255.26389,TRUE
+Vanuatu,235,172280.9273,TRUE
+Vanuatu,254,26952.37295,TRUE
+Vanuatu,84,9355.713607,TRUE
+Vanuatu,267,9372.487582,TRUE
+Vanuatu,282,423220.8453,TRUE
+Vanuatu,286,760050.6713,TRUE
+Vanuatu,289,9979.922823,TRUE
+Vanuatu,316,72255.87156,TRUE
+Vanuatu,317,188762.6372,TRUE
+Vanuatu,318,32261.2753,TRUE
+Vanuatu,18,11273.75269,TRUE
+Vanuatu,19,77366.60983,TRUE
+Vanuatu,33,30270.38924,TRUE
+Vanuatu,40,180987.6885,TRUE
+Vanuatu,49,247408.5214,TRUE
+Vanuatu,54,175365.1249,TRUE
+Vanuatu,58,74040.89691,TRUE
+Vanuatu,59,22326.21725,TRUE
+Vanuatu,63,234336.5313,TRUE
+Vanuatu,90,194487.8189,TRUE
+Vanuatu,94,61002.28577,TRUE
+Vanuatu,101,138512.4356,TRUE
+Vanuatu,112,122104.9439,TRUE
+Vanuatu,138,17125.18189,TRUE
+Vanuatu,152,119704.6269,TRUE
+Vanuatu,154,96782.90416,TRUE
+Vanuatu,158,96473.15601,TRUE
+Vanuatu,200,22918.25267,TRUE
+Vanuatu,202,85300.04797,TRUE
+Vanuatu,206,183393.7134,TRUE
+Vanuatu,218,52990.31222,TRUE
+Vanuatu,238,116960.1876,TRUE
+Vanuatu,243,112174.5654,TRUE
+Vanuatu,259,55616.6005,TRUE
+Vanuatu,276,10950.60863,TRUE
+Vanuatu,279,177754.1672,TRUE
+Vanuatu,298,120463.1286,TRUE
+Vanuatu,305,15590.0347,TRUE
+Vanuatu,306,131681.4608,TRUE
+Vanuatu,11,178064.2799,TRUE
+Vanuatu,16,98161,FALSE
+Vanuatu,48,27222.34375,TRUE
+Vanuatu,60,22383.25858,TRUE
+Vanuatu,63,11715.28525,TRUE
+Vanuatu,121,115777.4722,TRUE
+Vanuatu,128,11526,FALSE
+Vanuatu,156,10200.29705,TRUE
+Vanuatu,217,21196.4891,TRUE
+Vanuatu,248,14225.32829,TRUE
+Vanuatu,270,9151.63574,TRUE
+Vanuatu,52,72720.10141,TRUE
+Vanuatu,74,5112,FALSE
+Vanuatu,75,35893,FALSE
+Vanuatu,80,49992.57574,TRUE
+Vanuatu,301,113987.8459,TRUE
+Vanuatu,319,89190.44102,TRUE
+Vanuatu,51,26504.47085,TRUE
+Vanuatu,53,6581.96824,TRUE
+Vanuatu,77,6006,FALSE
+Vanuatu,213,124295.9159,TRUE
+Vanuatu,228,133880.2683,TRUE
+Vanuatu,269,15171.62496,TRUE
+Vanuatu,296,43692.55808,TRUE
+Vanuatu,175,70802.39066,TRUE
+Vanuatu,12,36715.19395,TRUE
+Vanuatu,13,74728.86082,TRUE
+Vanuatu,108,12577.92841,TRUE
+Vanuatu,165,14797.07017,TRUE
+Vanuatu,215,105585.0293,TRUE
+Vanuatu,261,8946.089355,TRUE
+Vanuatu,281,136069.2843,TRUE
+Vanuatu,302,27087.34387,TRUE
+Vanuatu,310,36133,TRUE
+Vanuatu,106,13595.99028,TRUE
+Vanuatu,30,62885.73079,TRUE
+Vanuatu,91,126485.3041,TRUE
+Vanuatu,192,3780098.195,TRUE
+Vanuatu,249,70032.42373,TRUE
+Vanuatu,308,35296.76443,TRUE
+Vanuatu,116,98484.54468,TRUE
+Vanuatu,234,8162.890747,TRUE
+Vanuatu,88,138218.959,TRUE
+Vanuatu,227,9358.848173,TRUE
+Vanuatu,8,21599.0332,TRUE
+Vanuatu,115,186672.4488,TRUE
+Vanuatu,146,28645.96233,TRUE
+Vanuatu,257,14862.84549,TRUE
+Vanuatu,39,10075.63454,TRUE
+Vanuatu,61,218943.5096,TRUE
+Vanuatu,76,100326.9844,TRUE
+Vanuatu,268,27005.25,TRUE
+Vanuatu,194,9390.783666,TRUE
+Vanuatu,198,5299.135169,TRUE
+Vanuatu,245,11957.75,TRUE
+Vanuatu,86,15341.61704,TRUE
+Vanuatu,247,27947.125,TRUE
+Vanuatu,15,5922.875,TRUE
+Vanuatu,135,5719.346191,TRUE
+Vanuatu,65,4252.65625,TRUE
+Vanuatu,70,8796.273438,TRUE
+Vanuatu,314,4472.643433,TRUE
+Vanuatu,133,6124.625,TRUE
+Vanuatu,240,4373.4375,TRUE
+Vanuatu,148,23186,TRUE
+Vanuatu,31,5157,TRUE
+Venezuela (Bolivarian Republic of),4,20977.52128,TRUE
+Venezuela (Bolivarian Republic of),5,7484.490489,TRUE
+Venezuela (Bolivarian Republic of),7,111437.9893,TRUE
+Venezuela (Bolivarian Republic of),8,47030.54376,TRUE
+Venezuela (Bolivarian Republic of),17,33099.94094,TRUE
+Venezuela (Bolivarian Republic of),105,149702.6633,TRUE
+Venezuela (Bolivarian Republic of),120,162802,FALSE
+Venezuela (Bolivarian Republic of),161,8730.264786,TRUE
+Venezuela (Bolivarian Republic of),169,34079,FALSE
+Venezuela (Bolivarian Republic of),179,183466,FALSE
+Venezuela (Bolivarian Republic of),180,7520.279265,TRUE
+Venezuela (Bolivarian Republic of),203,26179.47154,TRUE
+Venezuela (Bolivarian Republic of),205,211398,FALSE
+Venezuela (Bolivarian Republic of),208,139885,FALSE
+Venezuela (Bolivarian Republic of),219,252983,FALSE
+Venezuela (Bolivarian Republic of),221,53059.48552,TRUE
+Venezuela (Bolivarian Republic of),229,16244.65912,TRUE
+Venezuela (Bolivarian Republic of),231,60255.26389,TRUE
+Venezuela (Bolivarian Republic of),235,193760,FALSE
+Venezuela (Bolivarian Republic of),254,38416,FALSE
+Venezuela (Bolivarian Republic of),84,11479,FALSE
+Venezuela (Bolivarian Republic of),267,3229,FALSE
+Venezuela (Bolivarian Republic of),282,212957,FALSE
+Venezuela (Bolivarian Republic of),286,637804,FALSE
+Venezuela (Bolivarian Republic of),289,6605,FALSE
+Venezuela (Bolivarian Republic of),316,72255.87156,TRUE
+Venezuela (Bolivarian Republic of),317,189497,FALSE
+Venezuela (Bolivarian Republic of),318,29787,FALSE
+Venezuela (Bolivarian Republic of),18,7860,FALSE
+Venezuela (Bolivarian Republic of),19,77366.60983,TRUE
+Venezuela (Bolivarian Republic of),33,30270.38924,TRUE
+Venezuela (Bolivarian Republic of),40,326138,FALSE
+Venezuela (Bolivarian Republic of),49,289075,FALSE
+Venezuela (Bolivarian Republic of),54,260528,FALSE
+Venezuela (Bolivarian Republic of),58,74040.89691,TRUE
+Venezuela (Bolivarian Republic of),59,22326.21725,TRUE
+Venezuela (Bolivarian Republic of),63,138289,FALSE
+Venezuela (Bolivarian Republic of),90,169221,FALSE
+Venezuela (Bolivarian Republic of),94,61002.28577,TRUE
+Venezuela (Bolivarian Republic of),101,112447,FALSE
+Venezuela (Bolivarian Republic of),112,89083,FALSE
+Venezuela (Bolivarian Republic of),138,17125.18189,TRUE
+Venezuela (Bolivarian Republic of),152,119704.6269,TRUE
+Venezuela (Bolivarian Republic of),154,128846,FALSE
+Venezuela (Bolivarian Republic of),158,201192,FALSE
+Venezuela (Bolivarian Republic of),200,22918.25267,TRUE
+Venezuela (Bolivarian Republic of),202,85300.04797,TRUE
+Venezuela (Bolivarian Republic of),206,199422,FALSE
+Venezuela (Bolivarian Republic of),218,52990.31222,TRUE
+Venezuela (Bolivarian Republic of),238,148808,FALSE
+Venezuela (Bolivarian Republic of),243,112174.5654,TRUE
+Venezuela (Bolivarian Republic of),259,55616.6005,TRUE
+Venezuela (Bolivarian Republic of),276,11000,FALSE
+Venezuela (Bolivarian Republic of),279,171569,FALSE
+Venezuela (Bolivarian Republic of),298,161453,FALSE
+Venezuela (Bolivarian Republic of),305,15905,FALSE
+Venezuela (Bolivarian Republic of),306,209917,FALSE
+Venezuela (Bolivarian Republic of),11,178064.2799,TRUE
+Venezuela (Bolivarian Republic of),16,146644,FALSE
+Venezuela (Bolivarian Republic of),48,27222.34375,TRUE
+Venezuela (Bolivarian Republic of),60,22383.25858,TRUE
+Venezuela (Bolivarian Republic of),63,138289,FALSE
+Venezuela (Bolivarian Republic of),121,85840,FALSE
+Venezuela (Bolivarian Republic of),128,30455,FALSE
+Venezuela (Bolivarian Republic of),156,10200.29705,TRUE
+Venezuela (Bolivarian Republic of),217,16833,FALSE
+Venezuela (Bolivarian Republic of),248,14225.32829,TRUE
+Venezuela (Bolivarian Republic of),270,22268,FALSE
+Venezuela (Bolivarian Republic of),52,122566,FALSE
+Venezuela (Bolivarian Republic of),74,3607,FALSE
+Venezuela (Bolivarian Republic of),75,113928,FALSE
+Venezuela (Bolivarian Republic of),80,49992.57574,TRUE
+Venezuela (Bolivarian Republic of),301,113987.8459,TRUE
+Venezuela (Bolivarian Republic of),319,96224,FALSE
+Venezuela (Bolivarian Republic of),51,26504.47085,TRUE
+Venezuela (Bolivarian Republic of),53,6581.96824,TRUE
+Venezuela (Bolivarian Republic of),77,3289,FALSE
+Venezuela (Bolivarian Republic of),213,125888,FALSE
+Venezuela (Bolivarian Republic of),228,215242,FALSE
+Venezuela (Bolivarian Republic of),269,21288,FALSE
+Venezuela (Bolivarian Republic of),296,92213,FALSE
+Venezuela (Bolivarian Republic of),175,166006,FALSE
+Venezuela (Bolivarian Republic of),12,36715.19395,TRUE
+Venezuela (Bolivarian Republic of),13,112886,FALSE
+Venezuela (Bolivarian Republic of),108,12577.92841,TRUE
+Venezuela (Bolivarian Republic of),165,14797.07017,TRUE
+Venezuela (Bolivarian Republic of),215,186377,FALSE
+Venezuela (Bolivarian Republic of),261,8946.089355,TRUE
+Venezuela (Bolivarian Republic of),281,205201,FALSE
+Venezuela (Bolivarian Republic of),302,27087.34387,TRUE
+Venezuela (Bolivarian Republic of),310,36133,TRUE
+Venezuela (Bolivarian Republic of),106,13595.99028,TRUE
+Venezuela (Bolivarian Republic of),30,62885.73079,TRUE
+Venezuela (Bolivarian Republic of),91,126485.3041,TRUE
+Venezuela (Bolivarian Republic of),192,3780098.195,TRUE
+Venezuela (Bolivarian Republic of),249,70032.42373,TRUE
+Venezuela (Bolivarian Republic of),308,35296.76443,TRUE
+Venezuela (Bolivarian Republic of),116,98484.54468,TRUE
+Venezuela (Bolivarian Republic of),234,8162.890747,TRUE
+Venezuela (Bolivarian Republic of),88,138218.959,TRUE
+Venezuela (Bolivarian Republic of),227,5733,FALSE
+Venezuela (Bolivarian Republic of),8,21599.0332,TRUE
+Venezuela (Bolivarian Republic of),115,186672.4488,TRUE
+Venezuela (Bolivarian Republic of),146,28645.96233,TRUE
+Venezuela (Bolivarian Republic of),257,14862.84549,TRUE
+Venezuela (Bolivarian Republic of),39,10075.63454,TRUE
+Venezuela (Bolivarian Republic of),61,218943.5096,TRUE
+Venezuela (Bolivarian Republic of),76,115014,FALSE
+Venezuela (Bolivarian Republic of),268,27005.25,TRUE
+Venezuela (Bolivarian Republic of),194,9390.783666,TRUE
+Venezuela (Bolivarian Republic of),198,5299.135169,TRUE
+Venezuela (Bolivarian Republic of),245,11957.75,TRUE
+Venezuela (Bolivarian Republic of),86,15341.61704,TRUE
+Venezuela (Bolivarian Republic of),247,27947.125,TRUE
+Venezuela (Bolivarian Republic of),15,5922.875,TRUE
+Venezuela (Bolivarian Republic of),135,5719.346191,TRUE
+Venezuela (Bolivarian Republic of),65,4252.65625,TRUE
+Venezuela (Bolivarian Republic of),70,8796.273438,TRUE
+Venezuela (Bolivarian Republic of),314,4472.643433,TRUE
+Venezuela (Bolivarian Republic of),133,6124.625,TRUE
+Venezuela (Bolivarian Republic of),240,4373.4375,TRUE
+Venezuela (Bolivarian Republic of),148,23186,TRUE
+Venezuela (Bolivarian Republic of),31,5157,TRUE
+Viet Nam,4,20977.52128,TRUE
+Viet Nam,5,6447,FALSE
+Viet Nam,7,111437.9893,TRUE
+Viet Nam,8,47030.54376,TRUE
+Viet Nam,17,33099.94094,TRUE
+Viet Nam,105,149702.6633,TRUE
+Viet Nam,120,211251,FALSE
+Viet Nam,161,8730.264786,TRUE
+Viet Nam,169,45529,FALSE
+Viet Nam,179,121608.9919,TRUE
+Viet Nam,180,26049,FALSE
+Viet Nam,203,26179.47154,TRUE
+Viet Nam,205,36719,FALSE
+Viet Nam,208,125179,FALSE
+Viet Nam,219,80605.62094,TRUE
+Viet Nam,221,53059.48552,TRUE
+Viet Nam,229,16244.65912,TRUE
+Viet Nam,231,60255.26389,TRUE
+Viet Nam,235,142740,FALSE
+Viet Nam,254,55810,FALSE
+Viet Nam,84,10094,FALSE
+Viet Nam,267,8594,FALSE
+Viet Nam,282,423220.8453,TRUE
+Viet Nam,286,636432,FALSE
+Viet Nam,289,9979.922823,TRUE
+Viet Nam,316,72255.87156,TRUE
+Viet Nam,317,220393,FALSE
+Viet Nam,318,32261.2753,TRUE
+Viet Nam,18,10299,FALSE
+Viet Nam,19,77366.60983,TRUE
+Viet Nam,33,30270.38924,TRUE
+Viet Nam,40,259380,FALSE
+Viet Nam,49,247408.5214,TRUE
+Viet Nam,54,183142,FALSE
+Viet Nam,58,74040.89691,TRUE
+Viet Nam,59,22326.21725,TRUE
+Viet Nam,63,14561,FALSE
+Viet Nam,90,194487.8189,TRUE
+Viet Nam,94,61002.28577,TRUE
+Viet Nam,101,138512.4356,TRUE
+Viet Nam,112,122104.9439,TRUE
+Viet Nam,138,17125.18189,TRUE
+Viet Nam,152,119704.6269,TRUE
+Viet Nam,154,96782.90416,TRUE
+Viet Nam,158,96473.15601,TRUE
+Viet Nam,200,22918.25267,TRUE
+Viet Nam,202,85300.04797,TRUE
+Viet Nam,206,183393.7134,TRUE
+Viet Nam,218,52990.31222,TRUE
+Viet Nam,238,116960.1876,TRUE
+Viet Nam,243,112174.5654,TRUE
+Viet Nam,259,55616.6005,TRUE
+Viet Nam,276,16138,FALSE
+Viet Nam,279,177754.1672,TRUE
+Viet Nam,298,120463.1286,TRUE
+Viet Nam,305,19941,FALSE
+Viet Nam,306,131681.4608,TRUE
+Viet Nam,11,178064.2799,TRUE
+Viet Nam,16,161773,FALSE
+Viet Nam,48,27222.34375,TRUE
+Viet Nam,60,22383.25858,TRUE
+Viet Nam,63,14561,FALSE
+Viet Nam,121,118120,FALSE
+Viet Nam,128,23117,FALSE
+Viet Nam,156,10200.29705,TRUE
+Viet Nam,217,21196.4891,TRUE
+Viet Nam,248,14225.32829,TRUE
+Viet Nam,270,9151.63574,TRUE
+Viet Nam,52,190468,FALSE
+Viet Nam,74,4541.36112,TRUE
+Viet Nam,75,100109,FALSE
+Viet Nam,80,49992.57574,TRUE
+Viet Nam,301,113987.8459,TRUE
+Viet Nam,319,89190.44102,TRUE
+Viet Nam,51,43447,FALSE
+Viet Nam,53,8182,FALSE
+Viet Nam,77,24445,FALSE
+Viet Nam,213,124295.9159,TRUE
+Viet Nam,228,160329,FALSE
+Viet Nam,269,15171.62496,TRUE
+Viet Nam,296,105218,FALSE
+Viet Nam,175,97358,FALSE
+Viet Nam,12,36715.19395,TRUE
+Viet Nam,13,74728.86082,TRUE
+Viet Nam,108,12577.92841,TRUE
+Viet Nam,165,14797.07017,TRUE
+Viet Nam,215,105585.0293,TRUE
+Viet Nam,261,8946.089355,TRUE
+Viet Nam,281,136069.2843,TRUE
+Viet Nam,302,20198,FALSE
+Viet Nam,310,36133,TRUE
+Viet Nam,106,13595.99028,TRUE
+Viet Nam,30,62885.73079,TRUE
+Viet Nam,91,126485.3041,TRUE
+Viet Nam,192,3780098.195,TRUE
+Viet Nam,249,70032.42373,TRUE
+Viet Nam,308,35296.76443,TRUE
+Viet Nam,116,98484.54468,TRUE
+Viet Nam,234,8162.890747,TRUE
+Viet Nam,88,138218.959,TRUE
+Viet Nam,227,9358.848173,TRUE
+Viet Nam,8,21599.0332,TRUE
+Viet Nam,115,186672.4488,TRUE
+Viet Nam,146,40210,FALSE
+Viet Nam,257,16662,FALSE
+Viet Nam,39,10075.63454,TRUE
+Viet Nam,61,218943.5096,TRUE
+Viet Nam,76,100326.9844,TRUE
+Viet Nam,268,27005.25,TRUE
+Viet Nam,194,9390.783666,TRUE
+Viet Nam,198,5299.135169,TRUE
+Viet Nam,245,11957.75,TRUE
+Viet Nam,86,15341.61704,TRUE
+Viet Nam,247,27947.125,TRUE
+Viet Nam,15,5922.875,TRUE
+Viet Nam,135,5719.346191,TRUE
+Viet Nam,65,3620,FALSE
+Viet Nam,70,8796.273438,TRUE
+Viet Nam,314,4472.643433,TRUE
+Viet Nam,133,6124.625,TRUE
+Viet Nam,240,4373.4375,TRUE
+Viet Nam,148,23186,TRUE
+Viet Nam,31,5157,TRUE
+Wallis and Futuna Islands,4,20977.52128,TRUE
+Wallis and Futuna Islands,5,7484.490489,TRUE
+Wallis and Futuna Islands,7,111437.9893,TRUE
+Wallis and Futuna Islands,8,47030.54376,TRUE
+Wallis and Futuna Islands,17,33099.94094,TRUE
+Wallis and Futuna Islands,105,149702.6633,TRUE
+Wallis and Futuna Islands,120,115713.1489,TRUE
+Wallis and Futuna Islands,161,8730.264786,TRUE
+Wallis and Futuna Islands,169,16777.49735,TRUE
+Wallis and Futuna Islands,179,44454,FALSE
+Wallis and Futuna Islands,180,7520.279265,TRUE
+Wallis and Futuna Islands,203,26179.47154,TRUE
+Wallis and Futuna Islands,205,158255.8483,TRUE
+Wallis and Futuna Islands,208,84004.18102,TRUE
+Wallis and Futuna Islands,219,80605.62094,TRUE
+Wallis and Futuna Islands,221,53059.48552,TRUE
+Wallis and Futuna Islands,229,16244.65912,TRUE
+Wallis and Futuna Islands,231,60255.26389,TRUE
+Wallis and Futuna Islands,235,172280.9273,TRUE
+Wallis and Futuna Islands,254,26952.37295,TRUE
+Wallis and Futuna Islands,84,9355.713607,TRUE
+Wallis and Futuna Islands,267,9372.487582,TRUE
+Wallis and Futuna Islands,282,423220.8453,TRUE
+Wallis and Futuna Islands,286,202760,FALSE
+Wallis and Futuna Islands,289,9979.922823,TRUE
+Wallis and Futuna Islands,316,72255.87156,TRUE
+Wallis and Futuna Islands,317,188762.6372,TRUE
+Wallis and Futuna Islands,318,32261.2753,TRUE
+Wallis and Futuna Islands,18,11273.75269,TRUE
+Wallis and Futuna Islands,19,77366.60983,TRUE
+Wallis and Futuna Islands,33,30270.38924,TRUE
+Wallis and Futuna Islands,40,180987.6885,TRUE
+Wallis and Futuna Islands,49,247408.5214,TRUE
+Wallis and Futuna Islands,54,175365.1249,TRUE
+Wallis and Futuna Islands,58,74040.89691,TRUE
+Wallis and Futuna Islands,59,22326.21725,TRUE
+Wallis and Futuna Islands,63,234336.5313,TRUE
+Wallis and Futuna Islands,90,194487.8189,TRUE
+Wallis and Futuna Islands,94,61002.28577,TRUE
+Wallis and Futuna Islands,101,138512.4356,TRUE
+Wallis and Futuna Islands,112,122104.9439,TRUE
+Wallis and Futuna Islands,138,17125.18189,TRUE
+Wallis and Futuna Islands,152,119704.6269,TRUE
+Wallis and Futuna Islands,154,96782.90416,TRUE
+Wallis and Futuna Islands,158,96473.15601,TRUE
+Wallis and Futuna Islands,200,22918.25267,TRUE
+Wallis and Futuna Islands,202,85300.04797,TRUE
+Wallis and Futuna Islands,206,183393.7134,TRUE
+Wallis and Futuna Islands,218,52990.31222,TRUE
+Wallis and Futuna Islands,238,116960.1876,TRUE
+Wallis and Futuna Islands,243,112174.5654,TRUE
+Wallis and Futuna Islands,259,55616.6005,TRUE
+Wallis and Futuna Islands,276,10950.60863,TRUE
+Wallis and Futuna Islands,279,177754.1672,TRUE
+Wallis and Futuna Islands,298,120463.1286,TRUE
+Wallis and Futuna Islands,305,15590.0347,TRUE
+Wallis and Futuna Islands,306,131681.4608,TRUE
+Wallis and Futuna Islands,11,178064.2799,TRUE
+Wallis and Futuna Islands,16,90355,FALSE
+Wallis and Futuna Islands,48,27222.34375,TRUE
+Wallis and Futuna Islands,60,22383.25858,TRUE
+Wallis and Futuna Islands,63,11715.28525,TRUE
+Wallis and Futuna Islands,121,115777.4722,TRUE
+Wallis and Futuna Islands,128,9353.124815,TRUE
+Wallis and Futuna Islands,156,10200.29705,TRUE
+Wallis and Futuna Islands,217,21196.4891,TRUE
+Wallis and Futuna Islands,248,14225.32829,TRUE
+Wallis and Futuna Islands,270,9151.63574,TRUE
+Wallis and Futuna Islands,52,135833,FALSE
+Wallis and Futuna Islands,74,4541.36112,TRUE
+Wallis and Futuna Islands,75,7453,FALSE
+Wallis and Futuna Islands,80,51048,FALSE
+Wallis and Futuna Islands,301,119042,FALSE
+Wallis and Futuna Islands,319,98322,FALSE
+Wallis and Futuna Islands,51,26504.47085,TRUE
+Wallis and Futuna Islands,53,6581.96824,TRUE
+Wallis and Futuna Islands,77,5993.147024,TRUE
+Wallis and Futuna Islands,213,124295.9159,TRUE
+Wallis and Futuna Islands,228,133880.2683,TRUE
+Wallis and Futuna Islands,269,15171.62496,TRUE
+Wallis and Futuna Islands,296,43692.55808,TRUE
+Wallis and Futuna Islands,175,52984,FALSE
+Wallis and Futuna Islands,12,36715.19395,TRUE
+Wallis and Futuna Islands,13,74728.86082,TRUE
+Wallis and Futuna Islands,108,12577.92841,TRUE
+Wallis and Futuna Islands,165,14797.07017,TRUE
+Wallis and Futuna Islands,215,105585.0293,TRUE
+Wallis and Futuna Islands,261,8946.089355,TRUE
+Wallis and Futuna Islands,281,136069.2843,TRUE
+Wallis and Futuna Islands,302,27087.34387,TRUE
+Wallis and Futuna Islands,310,36133,TRUE
+Wallis and Futuna Islands,106,13595.99028,TRUE
+Wallis and Futuna Islands,30,62885.73079,TRUE
+Wallis and Futuna Islands,91,126485.3041,TRUE
+Wallis and Futuna Islands,192,3780098.195,TRUE
+Wallis and Futuna Islands,249,70032.42373,TRUE
+Wallis and Futuna Islands,308,35296.76443,TRUE
+Wallis and Futuna Islands,116,98484.54468,TRUE
+Wallis and Futuna Islands,234,8162.890747,TRUE
+Wallis and Futuna Islands,88,138218.959,TRUE
+Wallis and Futuna Islands,227,9358.848173,TRUE
+Wallis and Futuna Islands,8,21599.0332,TRUE
+Wallis and Futuna Islands,115,186672.4488,TRUE
+Wallis and Futuna Islands,146,28645.96233,TRUE
+Wallis and Futuna Islands,257,14862.84549,TRUE
+Wallis and Futuna Islands,39,10075.63454,TRUE
+Wallis and Futuna Islands,61,218943.5096,TRUE
+Wallis and Futuna Islands,76,100326.9844,TRUE
+Wallis and Futuna Islands,268,27005.25,TRUE
+Wallis and Futuna Islands,194,9390.783666,TRUE
+Wallis and Futuna Islands,198,5299.135169,TRUE
+Wallis and Futuna Islands,245,11957.75,TRUE
+Wallis and Futuna Islands,86,15341.61704,TRUE
+Wallis and Futuna Islands,247,27947.125,TRUE
+Wallis and Futuna Islands,15,5922.875,TRUE
+Wallis and Futuna Islands,135,5719.346191,TRUE
+Wallis and Futuna Islands,65,4252.65625,TRUE
+Wallis and Futuna Islands,70,8796.273438,TRUE
+Wallis and Futuna Islands,314,4472.643433,TRUE
+Wallis and Futuna Islands,133,6124.625,TRUE
+Wallis and Futuna Islands,240,4373.4375,TRUE
+Wallis and Futuna Islands,148,23186,TRUE
+Wallis and Futuna Islands,31,5157,TRUE
+Western Sahara,4,20977.52128,TRUE
+Western Sahara,5,7484.490489,TRUE
+Western Sahara,7,111437.9893,TRUE
+Western Sahara,8,47030.54376,TRUE
+Western Sahara,17,5511,FALSE
+Western Sahara,105,149702.6633,TRUE
+Western Sahara,120,115713.1489,TRUE
+Western Sahara,161,8730.264786,TRUE
+Western Sahara,169,16777.49735,TRUE
+Western Sahara,179,121608.9919,TRUE
+Western Sahara,180,7520.279265,TRUE
+Western Sahara,203,26179.47154,TRUE
+Western Sahara,205,158255.8483,TRUE
+Western Sahara,208,84004.18102,TRUE
+Western Sahara,219,80605.62094,TRUE
+Western Sahara,221,53059.48552,TRUE
+Western Sahara,229,16244.65912,TRUE
+Western Sahara,231,60255.26389,TRUE
+Western Sahara,235,172280.9273,TRUE
+Western Sahara,254,26952.37295,TRUE
+Western Sahara,84,9355.713607,TRUE
+Western Sahara,267,9372.487582,TRUE
+Western Sahara,282,423220.8453,TRUE
+Western Sahara,286,760050.6713,TRUE
+Western Sahara,289,9979.922823,TRUE
+Western Sahara,316,72255.87156,TRUE
+Western Sahara,317,188762.6372,TRUE
+Western Sahara,318,32261.2753,TRUE
+Western Sahara,18,11273.75269,TRUE
+Western Sahara,19,77366.60983,TRUE
+Western Sahara,33,30270.38924,TRUE
+Western Sahara,40,180987.6885,TRUE
+Western Sahara,49,247408.5214,TRUE
+Western Sahara,54,175365.1249,TRUE
+Western Sahara,58,74040.89691,TRUE
+Western Sahara,59,22326.21725,TRUE
+Western Sahara,63,234336.5313,TRUE
+Western Sahara,90,194487.8189,TRUE
+Western Sahara,94,61002.28577,TRUE
+Western Sahara,101,138512.4356,TRUE
+Western Sahara,112,122104.9439,TRUE
+Western Sahara,138,17125.18189,TRUE
+Western Sahara,152,119704.6269,TRUE
+Western Sahara,154,96782.90416,TRUE
+Western Sahara,158,96473.15601,TRUE
+Western Sahara,200,22918.25267,TRUE
+Western Sahara,202,85300.04797,TRUE
+Western Sahara,206,183393.7134,TRUE
+Western Sahara,218,52990.31222,TRUE
+Western Sahara,238,116960.1876,TRUE
+Western Sahara,243,112174.5654,TRUE
+Western Sahara,259,55616.6005,TRUE
+Western Sahara,276,10950.60863,TRUE
+Western Sahara,279,177754.1672,TRUE
+Western Sahara,298,120463.1286,TRUE
+Western Sahara,305,15590.0347,TRUE
+Western Sahara,306,131681.4608,TRUE
+Western Sahara,11,178064.2799,TRUE
+Western Sahara,16,74389.59543,TRUE
+Western Sahara,48,27222.34375,TRUE
+Western Sahara,60,22383.25858,TRUE
+Western Sahara,63,11715.28525,TRUE
+Western Sahara,121,115777.4722,TRUE
+Western Sahara,128,9353.124815,TRUE
+Western Sahara,156,10200.29705,TRUE
+Western Sahara,217,21196.4891,TRUE
+Western Sahara,248,14225.32829,TRUE
+Western Sahara,270,9151.63574,TRUE
+Western Sahara,52,72720.10141,TRUE
+Western Sahara,74,4541.36112,TRUE
+Western Sahara,75,47178.96176,TRUE
+Western Sahara,80,49992.57574,TRUE
+Western Sahara,301,113987.8459,TRUE
+Western Sahara,319,89190.44102,TRUE
+Western Sahara,51,26504.47085,TRUE
+Western Sahara,53,6581.96824,TRUE
+Western Sahara,77,5993.147024,TRUE
+Western Sahara,213,124295.9159,TRUE
+Western Sahara,228,133880.2683,TRUE
+Western Sahara,269,15171.62496,TRUE
+Western Sahara,296,43692.55808,TRUE
+Western Sahara,175,70802.39066,TRUE
+Western Sahara,12,36715.19395,TRUE
+Western Sahara,13,74728.86082,TRUE
+Western Sahara,108,12577.92841,TRUE
+Western Sahara,165,14797.07017,TRUE
+Western Sahara,215,105585.0293,TRUE
+Western Sahara,261,8946.089355,TRUE
+Western Sahara,281,136069.2843,TRUE
+Western Sahara,302,27087.34387,TRUE
+Western Sahara,310,36133,TRUE
+Western Sahara,106,13595.99028,TRUE
+Western Sahara,30,62885.73079,TRUE
+Western Sahara,91,126485.3041,TRUE
+Western Sahara,192,3780098.195,TRUE
+Western Sahara,249,70032.42373,TRUE
+Western Sahara,308,35296.76443,TRUE
+Western Sahara,116,98484.54468,TRUE
+Western Sahara,234,8162.890747,TRUE
+Western Sahara,88,138218.959,TRUE
+Western Sahara,227,9358.848173,TRUE
+Western Sahara,8,21599.0332,TRUE
+Western Sahara,115,186672.4488,TRUE
+Western Sahara,146,28645.96233,TRUE
+Western Sahara,257,14862.84549,TRUE
+Western Sahara,39,10075.63454,TRUE
+Western Sahara,61,218943.5096,TRUE
+Western Sahara,76,100326.9844,TRUE
+Western Sahara,268,27005.25,TRUE
+Western Sahara,194,9390.783666,TRUE
+Western Sahara,198,5299.135169,TRUE
+Western Sahara,245,11957.75,TRUE
+Western Sahara,86,15341.61704,TRUE
+Western Sahara,247,27947.125,TRUE
+Western Sahara,15,5922.875,TRUE
+Western Sahara,135,5719.346191,TRUE
+Western Sahara,65,4252.65625,TRUE
+Western Sahara,70,8796.273438,TRUE
+Western Sahara,314,4472.643433,TRUE
+Western Sahara,133,6124.625,TRUE
+Western Sahara,240,4373.4375,TRUE
+Western Sahara,148,23186,TRUE
+Western Sahara,31,5157,TRUE
+Yemen,4,6467,FALSE
+Yemen,5,7484.490489,TRUE
+Yemen,7,103548,FALSE
+Yemen,8,22047,FALSE
+Yemen,17,7450,FALSE
+Yemen,105,119271,FALSE
+Yemen,120,121155,FALSE
+Yemen,161,8730.264786,TRUE
+Yemen,169,14699,FALSE
+Yemen,179,100408,FALSE
+Yemen,180,6913,FALSE
+Yemen,203,26179.47154,TRUE
+Yemen,205,147587,FALSE
+Yemen,208,152702,FALSE
+Yemen,219,37414,FALSE
+Yemen,221,52195,FALSE
+Yemen,229,16244.65912,TRUE
+Yemen,231,60255.26389,TRUE
+Yemen,235,129121,FALSE
+Yemen,254,26952.37295,TRUE
+Yemen,84,12921,FALSE
+Yemen,267,11488,FALSE
+Yemen,282,423220.8453,TRUE
+Yemen,286,760050.6713,TRUE
+Yemen,289,9979.922823,TRUE
+Yemen,316,72255.87156,TRUE
+Yemen,317,146436,FALSE
+Yemen,318,17358,FALSE
+Yemen,18,26532,FALSE
+Yemen,19,68665,FALSE
+Yemen,33,17997,FALSE
+Yemen,40,127237,FALSE
+Yemen,49,102625,FALSE
+Yemen,54,175365.1249,TRUE
+Yemen,58,74040.89691,TRUE
+Yemen,59,22326.21725,TRUE
+Yemen,63,55053,FALSE
+Yemen,90,164692,FALSE
+Yemen,94,38818,FALSE
+Yemen,101,77808,FALSE
+Yemen,112,86824,FALSE
+Yemen,138,17125.18189,TRUE
+Yemen,152,69959,FALSE
+Yemen,154,118883,FALSE
+Yemen,158,47010,FALSE
+Yemen,200,22918.25267,TRUE
+Yemen,202,61210,FALSE
+Yemen,206,183393.7134,TRUE
+Yemen,218,52990.31222,TRUE
+Yemen,238,70544,FALSE
+Yemen,243,63705,FALSE
+Yemen,259,55616.6005,TRUE
+Yemen,276,10950.60863,TRUE
+Yemen,279,177754.1672,TRUE
+Yemen,298,153621,FALSE
+Yemen,305,23038,FALSE
+Yemen,306,122083,FALSE
+Yemen,11,178064.2799,TRUE
+Yemen,16,132664,FALSE
+Yemen,48,27222.34375,TRUE
+Yemen,60,33307,FALSE
+Yemen,63,55053,FALSE
+Yemen,121,115777.4722,TRUE
+Yemen,128,9353.124815,TRUE
+Yemen,156,8524,FALSE
+Yemen,217,20691,FALSE
+Yemen,248,14225.32829,TRUE
+Yemen,270,8510,FALSE
+Yemen,52,72720.10141,TRUE
+Yemen,74,4541.36112,TRUE
+Yemen,75,47178.96176,TRUE
+Yemen,80,49992.57574,TRUE
+Yemen,301,113987.8459,TRUE
+Yemen,319,89190.44102,TRUE
+Yemen,51,26504.47085,TRUE
+Yemen,53,6581.96824,TRUE
+Yemen,77,6083,FALSE
+Yemen,213,124295.9159,TRUE
+Yemen,228,133880.2683,TRUE
+Yemen,269,15171.62496,TRUE
+Yemen,296,87084,FALSE
+Yemen,175,157847,FALSE
+Yemen,12,36715.19395,TRUE
+Yemen,13,74728.86082,TRUE
+Yemen,108,12577.92841,TRUE
+Yemen,165,14797.07017,TRUE
+Yemen,215,160777,FALSE
+Yemen,261,8946.089355,TRUE
+Yemen,281,136069.2843,TRUE
+Yemen,302,27087.34387,TRUE
+Yemen,310,36133,TRUE
+Yemen,106,13595.99028,TRUE
+Yemen,30,62885.73079,TRUE
+Yemen,91,126485.3041,TRUE
+Yemen,192,3780098.195,TRUE
+Yemen,249,70032.42373,TRUE
+Yemen,308,35296.76443,TRUE
+Yemen,116,98484.54468,TRUE
+Yemen,234,8162.890747,TRUE
+Yemen,88,138218.959,TRUE
+Yemen,227,9358.848173,TRUE
+Yemen,8,22047,FALSE
+Yemen,115,186672.4488,TRUE
+Yemen,146,28645.96233,TRUE
+Yemen,257,14862.84549,TRUE
+Yemen,39,10075.63454,TRUE
+Yemen,61,218943.5096,TRUE
+Yemen,76,100326.9844,TRUE
+Yemen,268,27005.25,TRUE
+Yemen,194,9390.783666,TRUE
+Yemen,198,5299.135169,TRUE
+Yemen,245,11957.75,TRUE
+Yemen,86,15341.61704,TRUE
+Yemen,247,27947.125,TRUE
+Yemen,15,5922.875,TRUE
+Yemen,135,5719.346191,TRUE
+Yemen,65,4252.65625,TRUE
+Yemen,70,8796.273438,TRUE
+Yemen,314,4472.643433,TRUE
+Yemen,133,6124.625,TRUE
+Yemen,240,4373.4375,TRUE
+Yemen,148,23186,TRUE
+Yemen,31,5157,TRUE
+Zambia,4,20977.52128,TRUE
+Zambia,5,7484.490489,TRUE
+Zambia,7,111437.9893,TRUE
+Zambia,8,47030.54376,TRUE
+Zambia,17,10274,FALSE
+Zambia,105,149702.6633,TRUE
+Zambia,120,115713.1489,TRUE
+Zambia,161,8730.264786,TRUE
+Zambia,169,24816,FALSE
+Zambia,179,121608.9919,TRUE
+Zambia,180,6337,FALSE
+Zambia,203,26179.47154,TRUE
+Zambia,205,153077,FALSE
+Zambia,208,42472,FALSE
+Zambia,219,80605.62094,TRUE
+Zambia,221,53059.48552,TRUE
+Zambia,229,16244.65912,TRUE
+Zambia,231,60255.26389,TRUE
+Zambia,235,187331,FALSE
+Zambia,254,12077,FALSE
+Zambia,84,8634,FALSE
+Zambia,267,9372.487582,TRUE
+Zambia,282,423220.8453,TRUE
+Zambia,286,1027896,FALSE
+Zambia,289,5269,FALSE
+Zambia,316,72255.87156,TRUE
+Zambia,317,188762.6372,TRUE
+Zambia,318,66005,FALSE
+Zambia,18,11273.75269,TRUE
+Zambia,19,77366.60983,TRUE
+Zambia,33,30270.38924,TRUE
+Zambia,40,180987.6885,TRUE
+Zambia,49,247408.5214,TRUE
+Zambia,54,175365.1249,TRUE
+Zambia,58,74040.89691,TRUE
+Zambia,59,22326.21725,TRUE
+Zambia,63,13757,FALSE
+Zambia,90,194487.8189,TRUE
+Zambia,94,61002.28577,TRUE
+Zambia,101,138512.4356,TRUE
+Zambia,112,122104.9439,TRUE
+Zambia,138,17125.18189,TRUE
+Zambia,152,119704.6269,TRUE
+Zambia,154,96782.90416,TRUE
+Zambia,158,96473.15601,TRUE
+Zambia,200,22918.25267,TRUE
+Zambia,202,85300.04797,TRUE
+Zambia,206,183393.7134,TRUE
+Zambia,218,52990.31222,TRUE
+Zambia,238,116960.1876,TRUE
+Zambia,243,112174.5654,TRUE
+Zambia,259,55616.6005,TRUE
+Zambia,276,1941,FALSE
+Zambia,279,177754.1672,TRUE
+Zambia,298,120463.1286,TRUE
+Zambia,305,16930,FALSE
+Zambia,306,97804,FALSE
+Zambia,11,178064.2799,TRUE
+Zambia,16,41267,FALSE
+Zambia,48,27222.34375,TRUE
+Zambia,60,22383.25858,TRUE
+Zambia,63,13757,FALSE
+Zambia,121,115777.4722,TRUE
+Zambia,128,7333,FALSE
+Zambia,156,10200.29705,TRUE
+Zambia,217,21196.4891,TRUE
+Zambia,248,14225.32829,TRUE
+Zambia,270,5288,FALSE
+Zambia,52,58430,FALSE
+Zambia,74,4541.36112,TRUE
+Zambia,75,47178.96176,TRUE
+Zambia,80,49992.57574,TRUE
+Zambia,301,113987.8459,TRUE
+Zambia,319,89190.44102,TRUE
+Zambia,51,26504.47085,TRUE
+Zambia,53,6581.96824,TRUE
+Zambia,77,8921,FALSE
+Zambia,213,124295.9159,TRUE
+Zambia,228,133880.2683,TRUE
+Zambia,269,15171.62496,TRUE
+Zambia,296,34631,FALSE
+Zambia,175,70802.39066,TRUE
+Zambia,12,36715.19395,TRUE
+Zambia,13,74728.86082,TRUE
+Zambia,108,12577.92841,TRUE
+Zambia,165,14797.07017,TRUE
+Zambia,215,105585.0293,TRUE
+Zambia,261,8946.089355,TRUE
+Zambia,281,136069.2843,TRUE
+Zambia,302,14356,FALSE
+Zambia,310,36133,TRUE
+Zambia,106,13595.99028,TRUE
+Zambia,30,62885.73079,TRUE
+Zambia,91,126485.3041,TRUE
+Zambia,192,3780098.195,TRUE
+Zambia,249,70032.42373,TRUE
+Zambia,308,35296.76443,TRUE
+Zambia,116,98484.54468,TRUE
+Zambia,234,8162.890747,TRUE
+Zambia,88,138218.959,TRUE
+Zambia,227,9358.848173,TRUE
+Zambia,8,21599.0332,TRUE
+Zambia,115,186672.4488,TRUE
+Zambia,146,28645.96233,TRUE
+Zambia,257,14862.84549,TRUE
+Zambia,39,10075.63454,TRUE
+Zambia,61,218943.5096,TRUE
+Zambia,76,100326.9844,TRUE
+Zambia,268,27005.25,TRUE
+Zambia,194,9390.783666,TRUE
+Zambia,198,5299.135169,TRUE
+Zambia,245,11957.75,TRUE
+Zambia,86,15341.61704,TRUE
+Zambia,247,27947.125,TRUE
+Zambia,15,5922.875,TRUE
+Zambia,135,5719.346191,TRUE
+Zambia,65,4252.65625,TRUE
+Zambia,70,8796.273438,TRUE
+Zambia,314,4472.643433,TRUE
+Zambia,133,6124.625,TRUE
+Zambia,240,4373.4375,TRUE
+Zambia,148,23186,TRUE
+Zambia,31,5157,TRUE
+Zimbabwe,4,20977.52128,TRUE
+Zimbabwe,5,7084,FALSE
+Zimbabwe,7,90611,FALSE
+Zimbabwe,8,20210,FALSE
+Zimbabwe,17,55160,FALSE
+Zimbabwe,105,149702.6633,TRUE
+Zimbabwe,120,81914,FALSE
+Zimbabwe,161,8730.264786,TRUE
+Zimbabwe,169,6275,FALSE
+Zimbabwe,179,131961,FALSE
+Zimbabwe,180,1696,FALSE
+Zimbabwe,203,26179.47154,TRUE
+Zimbabwe,205,162702,FALSE
+Zimbabwe,208,72140,FALSE
+Zimbabwe,219,49506,FALSE
+Zimbabwe,221,16471,FALSE
+Zimbabwe,229,16244.65912,TRUE
+Zimbabwe,231,32425,FALSE
+Zimbabwe,235,169354,FALSE
+Zimbabwe,254,22828,FALSE
+Zimbabwe,84,7097,FALSE
+Zimbabwe,267,9372.487582,TRUE
+Zimbabwe,282,423220.8453,TRUE
+Zimbabwe,286,800690,FALSE
+Zimbabwe,289,8947,FALSE
+Zimbabwe,316,72255.87156,TRUE
+Zimbabwe,317,188762.6372,TRUE
+Zimbabwe,318,18294,FALSE
+Zimbabwe,18,4291,FALSE
+Zimbabwe,19,77366.60983,TRUE
+Zimbabwe,33,30270.38924,TRUE
+Zimbabwe,40,132698,FALSE
+Zimbabwe,49,247408.5214,TRUE
+Zimbabwe,54,151425,FALSE
+Zimbabwe,58,74040.89691,TRUE
+Zimbabwe,59,22326.21725,TRUE
+Zimbabwe,63,4837,FALSE
+Zimbabwe,90,17583,FALSE
+Zimbabwe,94,61002.28577,TRUE
+Zimbabwe,101,138512.4356,TRUE
+Zimbabwe,112,122104.9439,TRUE
+Zimbabwe,138,17125.18189,TRUE
+Zimbabwe,152,119704.6269,TRUE
+Zimbabwe,154,63697,FALSE
+Zimbabwe,158,65134,FALSE
+Zimbabwe,200,20601,FALSE
+Zimbabwe,202,85300.04797,TRUE
+Zimbabwe,206,183393.7134,TRUE
+Zimbabwe,218,52990.31222,TRUE
+Zimbabwe,238,116960.1876,TRUE
+Zimbabwe,243,112174.5654,TRUE
+Zimbabwe,259,55616.6005,TRUE
+Zimbabwe,276,12727,FALSE
+Zimbabwe,279,177754.1672,TRUE
+Zimbabwe,298,82230,FALSE
+Zimbabwe,305,11954,FALSE
+Zimbabwe,306,71253,FALSE
+Zimbabwe,11,129665,FALSE
+Zimbabwe,16,65340,FALSE
+Zimbabwe,48,27222.34375,TRUE
+Zimbabwe,60,19325,FALSE
+Zimbabwe,63,4837,FALSE
+Zimbabwe,121,99627,FALSE
+Zimbabwe,128,2900,FALSE
+Zimbabwe,156,10200.29705,TRUE
+Zimbabwe,217,21196.4891,TRUE
+Zimbabwe,248,14225.32829,TRUE
+Zimbabwe,270,2688,FALSE
+Zimbabwe,52,47086,FALSE
+Zimbabwe,74,4541.36112,TRUE
+Zimbabwe,75,47178.96176,TRUE
+Zimbabwe,80,23168,FALSE
+Zimbabwe,301,113987.8459,TRUE
+Zimbabwe,319,89190.44102,TRUE
+Zimbabwe,51,26504.47085,TRUE
+Zimbabwe,53,6581.96824,TRUE
+Zimbabwe,77,2322,FALSE
+Zimbabwe,213,124295.9159,TRUE
+Zimbabwe,228,77410,FALSE
+Zimbabwe,269,15171.62496,TRUE
+Zimbabwe,296,22212,FALSE
+Zimbabwe,175,17335,FALSE
+Zimbabwe,12,37618,FALSE
+Zimbabwe,13,57924,FALSE
+Zimbabwe,108,12577.92841,TRUE
+Zimbabwe,165,14797.07017,TRUE
+Zimbabwe,215,37652,FALSE
+Zimbabwe,261,8946.089355,TRUE
+Zimbabwe,281,44589,FALSE
+Zimbabwe,302,35948,FALSE
+Zimbabwe,310,36133,TRUE
+Zimbabwe,106,13595.99028,TRUE
+Zimbabwe,30,62885.73079,TRUE
+Zimbabwe,91,126485.3041,TRUE
+Zimbabwe,192,3780098.195,TRUE
+Zimbabwe,249,19174,FALSE
+Zimbabwe,308,35296.76443,TRUE
+Zimbabwe,116,98484.54468,TRUE
+Zimbabwe,234,8162.890747,TRUE
+Zimbabwe,88,138218.959,TRUE
+Zimbabwe,227,9358.848173,TRUE
+Zimbabwe,8,20210,FALSE
+Zimbabwe,115,186672.4488,TRUE
+Zimbabwe,146,6315,FALSE
+Zimbabwe,257,14862.84549,TRUE
+Zimbabwe,39,10075.63454,TRUE
+Zimbabwe,61,218943.5096,TRUE
+Zimbabwe,76,100326.9844,TRUE
+Zimbabwe,268,27005.25,TRUE
+Zimbabwe,194,9390.783666,TRUE
+Zimbabwe,198,5299.135169,TRUE
+Zimbabwe,245,11957.75,TRUE
+Zimbabwe,86,15341.61704,TRUE
+Zimbabwe,247,27947.125,TRUE
+Zimbabwe,15,5922.875,TRUE
+Zimbabwe,135,5719.346191,TRUE
+Zimbabwe,65,4252.65625,TRUE
+Zimbabwe,70,8796.273438,TRUE
+Zimbabwe,314,4163,FALSE
+Zimbabwe,133,6124.625,TRUE
+Zimbabwe,240,4373.4375,TRUE
+Zimbabwe,148,23186,TRUE
+Zimbabwe,31,5157,TRUE
diff --git a/packages/api/db/seeds/seedData/yieldAmerica.csv b/packages/api/db/seeds/seedData/yieldAmerica.csv
new file mode 100644
index 0000000000..cd088aa9bb
--- /dev/null
+++ b/packages/api/db/seeds/seedData/yieldAmerica.csv
@@ -0,0 +1,247 @@
+country,crop_id,value,is_average
+Canada,4,20977.52128,TRUE
+Canada,5,8995,FALSE
+Canada,7,248193,FALSE
+Canada,8,69707,FALSE
+Canada,17,37249,FALSE
+Canada,105,149702.6633,TRUE
+Canada,120,76165,FALSE
+Canada,161,17130,FALSE
+Canada,169,93719,FALSE
+Canada,179,273645,FALSE
+Canada,180,7520.279265,TRUE
+Canada,203,26179.47154,TRUE
+Canada,205,409020,FALSE
+Canada,208,84004.18102,TRUE
+Canada,219,101225,FALSE
+Canada,221,124245,FALSE
+Canada,229,16244.65912,TRUE
+Canada,231,74536,FALSE
+Canada,235,126285,FALSE
+Canada,254,26952.37295,TRUE
+Canada,84,9355.713607,TRUE
+Canada,267,9372.487582,TRUE
+Canada,282,649630,FALSE
+Canada,286,760050.6713,TRUE
+Canada,289,19455,FALSE
+Canada,316,72255.87156,TRUE
+Canada,317,404783,FALSE
+Canada,318,32917,FALSE
+Canada,18,22570,FALSE
+Canada,19,61907,FALSE
+Canada,33,30270.38924,TRUE
+Canada,40,263889,FALSE
+Canada,49,454186,FALSE
+Canada,54,179453,FALSE
+Canada,58,91862,FALSE
+Canada,59,22326.21725,TRUE
+Canada,63,280514,FALSE
+Canada,90,242843,FALSE
+Canada,94,61002.28577,TRUE
+Canada,101,138512.4356,TRUE
+Canada,112,16043,FALSE
+Canada,138,17125.18189,TRUE
+Canada,152,184718,FALSE
+Canada,154,96782.90416,TRUE
+Canada,158,261510,FALSE
+Canada,200,32572,FALSE
+Canada,202,85300.04797,TRUE
+Canada,206,183393.7134,TRUE
+Canada,218,47433,FALSE
+Canada,238,192888,FALSE
+Canada,243,112174.5654,TRUE
+Canada,259,29160,FALSE
+Canada,276,26602,FALSE
+Canada,279,94255,FALSE
+Canada,298,120463.1286,TRUE
+Canada,305,27898,FALSE
+Canada,306,722309,FALSE
+Canada,11,178064.2799,TRUE
+Canada,16,74389.59543,TRUE
+Canada,48,27222.34375,TRUE
+Canada,60,17876,FALSE
+Canada,63,280514,FALSE
+Canada,121,115777.4722,TRUE
+Canada,128,9353.124815,TRUE
+Canada,156,14867,FALSE
+Canada,217,27169,FALSE
+Canada,248,23057,FALSE
+Canada,270,9151.63574,TRUE
+Canada,52,72720.10141,TRUE
+Canada,74,4541.36112,TRUE
+Canada,75,47178.96176,TRUE
+Canada,80,107898,FALSE
+Canada,301,113987.8459,TRUE
+Canada,319,89190.44102,TRUE
+Canada,51,26504.47085,TRUE
+Canada,53,6581.96824,TRUE
+Canada,77,5993.147024,TRUE
+Canada,213,124295.9159,TRUE
+Canada,228,133880.2683,TRUE
+Canada,269,15171.62496,TRUE
+Canada,296,43692.55808,TRUE
+Canada,175,70802.39066,TRUE
+Canada,12,51585,FALSE
+Canada,13,74728.86082,TRUE
+Canada,108,12577.92841,TRUE
+Canada,165,14797.07017,TRUE
+Canada,215,105585.0293,TRUE
+Canada,261,8946.089355,TRUE
+Canada,281,76226,FALSE
+Canada,302,27087.34387,TRUE
+Canada,310,36133,TRUE
+Canada,106,13595.99028,TRUE
+Canada,30,32776,FALSE
+Canada,91,126485.3041,TRUE
+Canada,192,3780098.195,TRUE
+Canada,249,52185,FALSE
+Canada,308,30977,FALSE
+Canada,116,98484.54468,TRUE
+Canada,234,8162.890747,TRUE
+Canada,88,216577,FALSE
+Canada,227,9358.848173,TRUE
+Canada,8,69707,FALSE
+Canada,115,186672.4488,TRUE
+Canada,146,28645.96233,TRUE
+Canada,257,14862.84549,TRUE
+Canada,39,10329,FALSE
+Canada,61,218943.5096,TRUE
+Canada,76,100326.9844,TRUE
+Canada,268,27005.25,TRUE
+Canada,194,12096,FALSE
+Canada,198,5299.135169,TRUE
+Canada,245,11957.75,TRUE
+Canada,86,15341.61704,TRUE
+Canada,247,27947.125,TRUE
+Canada,15,5922.875,TRUE
+Canada,135,5719.346191,TRUE
+Canada,65,4252.65625,TRUE
+Canada,70,8796.273438,TRUE
+Canada,314,4472.643433,TRUE
+Canada,133,6124.625,TRUE
+Canada,240,4373.4375,TRUE
+Canada,148,23186,TRUE
+Canada,31,5157,TRUE
+United States of America,4,52648,FALSE
+United States of America,5,7484.490489,TRUE
+United States of America,7,356128,FALSE
+United States of America,8,163185,FALSE
+United States of America,17,41913,FALSE
+United States of America,105,127987,FALSE
+United States of America,120,173138,FALSE
+United States of America,161,14845,FALSE
+United States of America,169,109604,FALSE
+United States of America,179,298080,FALSE
+United States of America,180,17040,FALSE
+United States of America,203,112680,FALSE
+United States of America,205,563970,FALSE
+United States of America,208,231241,FALSE
+United States of America,219,197305,FALSE
+United States of America,221,394284,FALSE
+United States of America,229,42044,FALSE
+United States of America,231,135942,FALSE
+United States of America,235,490203,FALSE
+United States of America,254,81121,FALSE
+United States of America,84,26117,FALSE
+United States of America,267,9372.487582,TRUE
+United States of America,282,734112,FALSE
+United States of America,286,807660,FALSE
+United States of America,289,19397,FALSE
+United States of America,316,47681,FALSE
+United States of America,317,396598,FALSE
+United States of America,318,35390,FALSE
+United States of America,18,20134,FALSE
+United States of America,19,36752,FALSE
+United States of America,33,30270.38924,TRUE
+United States of America,40,443182,FALSE
+United States of America,49,404407,FALSE
+United States of America,54,193988,FALSE
+United States of America,58,77736,FALSE
+United States of America,59,22326.21725,TRUE
+United States of America,63,27668,FALSE
+United States of America,90,167025,FALSE
+United States of America,94,75807,FALSE
+United States of America,101,388176,FALSE
+United States of America,112,168211,FALSE
+United States of America,138,19205,FALSE
+United States of America,152,119704.6269,TRUE
+United States of America,154,372705,FALSE
+United States of America,158,357390,FALSE
+United States of America,200,23681,FALSE
+United States of America,202,76071,FALSE
+United States of America,206,183393.7134,TRUE
+United States of America,218,54163,FALSE
+United States of America,238,241390,FALSE
+United States of America,243,112174.5654,TRUE
+United States of America,259,20393,FALSE
+United States of America,276,35006,FALSE
+United States of America,279,168377,FALSE
+United States of America,298,288323,FALSE
+United States of America,305,22045,FALSE
+United States of America,306,902874,FALSE
+United States of America,11,162618,FALSE
+United States of America,16,147456,FALSE
+United States of America,48,27222.34375,TRUE
+United States of America,60,15173,FALSE
+United States of America,63,27668,FALSE
+United States of America,121,280648,FALSE
+United States of America,128,41186,FALSE
+United States of America,156,13707,FALSE
+United States of America,217,19439,FALSE
+United States of America,248,20448,FALSE
+United States of America,270,48912,FALSE
+United States of America,52,72720.10141,TRUE
+United States of America,74,4541.36112,TRUE
+United States of America,75,47178.96176,TRUE
+United States of America,80,171748,FALSE
+United States of America,301,106260,FALSE
+United States of America,319,89190.44102,TRUE
+United States of America,51,26504.47085,TRUE
+United States of America,53,6581.96824,TRUE
+United States of America,77,11121,FALSE
+United States of America,213,124295.9159,TRUE
+United States of America,228,282528,FALSE
+United States of America,269,15171.62496,TRUE
+United States of America,296,216508,FALSE
+United States of America,175,187347,FALSE
+United States of America,12,35933,FALSE
+United States of America,13,74278,FALSE
+United States of America,108,12577.92841,TRUE
+United States of America,165,14797.07017,TRUE
+United States of America,215,170399,FALSE
+United States of America,261,15978,FALSE
+United States of America,281,668755,FALSE
+United States of America,302,27087.34387,TRUE
+United States of America,310,36133,TRUE
+United States of America,106,23023,FALSE
+United States of America,30,71697,FALSE
+United States of America,91,126485.3041,TRUE
+United States of America,192,3780098.195,TRUE
+United States of America,249,157249,FALSE
+United States of America,308,35296.76443,TRUE
+United States of America,116,98484.54468,TRUE
+United States of America,234,8162.890747,TRUE
+United States of America,88,238022,FALSE
+United States of America,227,9358.848173,TRUE
+United States of America,8,163185,FALSE
+United States of America,115,337228,FALSE
+United States of America,146,28645.96233,TRUE
+United States of America,257,14862.84549,TRUE
+United States of America,39,10464,FALSE
+United States of America,61,218943.5096,TRUE
+United States of America,76,100326.9844,TRUE
+United States of America,268,27005.25,TRUE
+United States of America,194,10989,FALSE
+United States of America,198,5299.135169,TRUE
+United States of America,245,11957.75,TRUE
+United States of America,86,18350,FALSE
+United States of America,247,27947.125,TRUE
+United States of America,15,5922.875,TRUE
+United States of America,135,5719.346191,TRUE
+United States of America,65,4252.65625,TRUE
+United States of America,70,8796.273438,TRUE
+United States of America,314,4472.643433,TRUE
+United States of America,133,6124.625,TRUE
+United States of America,240,4373.4375,TRUE
+United States of America,148,23186,TRUE
+United States of America,31,5157,TRUE
diff --git a/packages/api/knexfile.js b/packages/api/knexfile.js
new file mode 100644
index 0000000000..26c580d71d
--- /dev/null
+++ b/packages/api/knexfile.js
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (knexfile.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+module.exports = {
+
+ development: {
+ client: 'postgresql',
+ connection: {
+ host: 'localhost',
+ database: 'mock_farm',
+ user: 'postgres',
+ password: 'postgres',
+ },
+ migrations: {
+ directory: __dirname + '/db/migration',
+ },
+ seeds: {
+ directory: __dirname + '/db/seeds',
+ },
+ },
+
+ ci: {
+ client: 'postgresql',
+ connection: {
+ host: 'postgres',
+ database: 'mock_farm',
+ user: 'postgres',
+ password: 'postgres',
+ },
+ migrations: {
+ directory: __dirname + '/db/migration',
+ },
+ seeds: {
+ directory: __dirname + '/db/seeds',
+ },
+ },
+
+ integration: {
+ client: 'postgresql',
+ debug: true,
+ connection: process.env.DATABASE_URL,
+ migrations: {
+ directory: __dirname + '/db/migration',
+ },
+ seeds: {
+ directory: __dirname + '/db/seeds',
+ },
+ ssl: true,
+ },
+
+ production: {
+ client: 'postgresql',
+ debug: true,
+ connection: process.env.DATABASE_URL,
+ migrations: {
+ directory: __dirname + '/db/migration',
+ },
+ seeds: {
+ directory: __dirname + '/db/seeds',
+ },
+ ssl: true,
+ },
+};
diff --git a/packages/api/package-lock.json b/packages/api/package-lock.json
new file mode 100644
index 0000000000..0841643085
--- /dev/null
+++ b/packages/api/package-lock.json
@@ -0,0 +1,7830 @@
+{
+ "name": "litefarm-api",
+ "version": "1.0.2",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ }
+ }
+ },
+ "@types/body-parser": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
+ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
+ "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA=="
+ },
+ "@types/connect": {
+ "version": "3.4.32",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
+ "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/cookiejar": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz",
+ "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw=="
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
+ },
+ "@types/express": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz",
+ "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==",
+ "requires": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "@types/express-jwt": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz",
+ "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=",
+ "requires": {
+ "@types/express": "*",
+ "@types/express-unless": "*"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz",
+ "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==",
+ "requires": {
+ "@types/events": "*",
+ "@types/node": "*",
+ "@types/range-parser": "*"
+ }
+ },
+ "@types/express-unless": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.0.32.tgz",
+ "integrity": "sha512-6YpJyFNlDDnPnRjMOvJCoDYlSDDmG/OEEUsPk7yhNkL4G9hUYtgab6vi1CcWsGSSSM0CsvNlWTG+ywAGnvF03g==",
+ "requires": {
+ "@types/express": "*"
+ }
+ },
+ "@types/mime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
+ "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
+ },
+ "@types/node": {
+ "version": "10.11.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.2.tgz",
+ "integrity": "sha512-XubfQDIg88PGJ7netQPf3QOKHF7Xht4WXGtg5W7cGBeQs9ETbYKwfchR9o+tRRA9iLTQ7nAre85M205JbYsjJA=="
+ },
+ "@types/range-parser": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz",
+ "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw=="
+ },
+ "@types/serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
+ "requires": {
+ "@types/express-serve-static-core": "*",
+ "@types/mime": "*"
+ }
+ },
+ "@types/superagent": {
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz",
+ "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==",
+ "requires": {
+ "@types/cookiejar": "*",
+ "@types/node": "*"
+ }
+ },
+ "abab": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg=="
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+ },
+ "acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA=="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ },
+ "adm-zip": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz",
+ "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^1.0.0"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "async-file": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/async-file/-/async-file-2.0.2.tgz",
+ "integrity": "sha1-Aq0HhWrDcX6DayCuxaTP4AxG3yM=",
+ "requires": {
+ "rimraf": "^2.5.2"
+ }
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ },
+ "axios": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+ "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+ "requires": {
+ "follow-redirects": "^1.3.0",
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-jest": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz",
+ "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-istanbul": "^4.1.5",
+ "babel-preset-jest": "^22.4.4"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "find-up": "^2.1.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "test-exclude": "^4.2.1"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz",
+ "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-preset-jest": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz",
+ "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^22.4.4",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ },
+ "dependencies": {
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
+ },
+ "body-parser": {
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "~1.6.3",
+ "iconv-lite": "0.4.23",
+ "on-finished": "~2.3.0",
+ "qs": "6.5.2",
+ "raw-body": "2.3.3",
+ "type-is": "~1.6.16"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ }
+ },
+ "bser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-writer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
+ "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
+ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+ "dev": true,
+ "requires": {
+ "rsvp": "^3.3.3"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chai": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
+ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.1.0",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "chai-http": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.2.1.tgz",
+ "integrity": "sha512-S2Ezy5uSVuOYleeXppfUKtTU/xbHCZyKkwjheNJ/76SGFTUPDpDkkpVdPNgC3sAO1Ap5J5LJ+/rXdLG8EGhCDA==",
+ "requires": {
+ "@types/chai": "4",
+ "@types/superagent": "^3.8.3",
+ "cookiejar": "^2.1.1",
+ "is-ip": "^2.0.0",
+ "methods": "^1.1.2",
+ "qs": "^6.5.1",
+ "superagent": "^3.7.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
+ },
+ "check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A=="
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
+ "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A=="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "cron-parser": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.9.0.tgz",
+ "integrity": "sha512-WkHhWssz4OxEdepOIt3dXYQiKZgPwgeF1yzBMlLwnUCwv0ziNeINNbMs5haoG10ikM/j0LMrrhEsuK2Blt638w==",
+ "requires": {
+ "is-nan": "^1.2.1",
+ "moment-timezone": "^0.5.23"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "cssom": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
+ },
+ "cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "requires": {
+ "cssom": "~0.3.6"
+ },
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ }
+ }
+ },
+ "csvtojson": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.8.tgz",
+ "integrity": "sha512-DC6YFtsJiA7t/Yz+KjzT6GXuKtU/5gRbbl7HJqvDVVir+dxdw2/1EgwfgJdnsvUT7lOnON5DvGftKuYWX1nMOQ==",
+ "requires": {
+ "bluebird": "^3.5.1",
+ "lodash": "^4.17.3",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+ "requires": {
+ "abab": "^2.0.3",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.0.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decimal.js": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz",
+ "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw=="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deeks": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/deeks/-/deeks-2.2.1.tgz",
+ "integrity": "sha512-D2Qu3Fv5zBtBzXjXIUgWPRYn30d/IG6SCPOKIz42+LVTwhPeRI5+DAxdzap0vI2zYheiErIpVLwaUQBoA/iENw==",
+ "requires": {
+ "underscore": "1.9.1"
+ }
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "doc-path": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/doc-path/-/doc-path-2.0.1.tgz",
+ "integrity": "sha512-/CCG157H//3l513omROUzaREChY/OYpxqYXvQcv7gsrwGfjVOh5d/1gJigHJ6iTnO77pA8rMLZ63CgEPEM6+9Q=="
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "domexception": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "requires": {
+ "webidl-conversions": "^5.0.0"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
+ }
+ }
+ },
+ "dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
+ "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+ "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true
+ }
+ }
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "event-stream": {
+ "version": "3.3.4",
+ "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ },
+ "dependencies": {
+ "split": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ }
+ }
+ },
+ "exec-sh": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
+ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
+ "dev": true,
+ "requires": {
+ "merge": "^1.2.0"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "expect": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz",
+ "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "jest-diff": "^22.4.3",
+ "jest-get-type": "^22.4.3",
+ "jest-matcher-utils": "^22.4.3",
+ "jest-message-util": "^22.4.3",
+ "jest-regex-util": "^22.4.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ }
+ }
+ },
+ "express": {
+ "version": "4.16.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.3",
+ "content-disposition": "0.5.2",
+ "content-type": "~1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.1.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.4",
+ "qs": "6.5.2",
+ "range-parser": "~1.2.0",
+ "safe-buffer": "5.1.2",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "~1.4.0",
+ "type-is": "~1.6.16",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "express-jwt": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz",
+ "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==",
+ "requires": {
+ "async": "^1.5.0",
+ "express-unless": "^0.3.0",
+ "jsonwebtoken": "^8.1.0",
+ "lodash.set": "^4.0.0"
+ }
+ },
+ "express-jwt-authz": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/express-jwt-authz/-/express-jwt-authz-1.0.0.tgz",
+ "integrity": "sha1-JhVXAPokhb0+ms4+a7FFc9Rb5aQ="
+ },
+ "express-promise-router": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/express-promise-router/-/express-promise-router-3.0.3.tgz",
+ "integrity": "sha1-Xm0ipaPwE9cYMxcv6NereAw/a3A=",
+ "requires": {
+ "is-promise": "^2.1.0",
+ "lodash.flattendeep": "^4.0.0",
+ "methods": "^1.0.0"
+ }
+ },
+ "express-unless": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz",
+ "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA="
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "dev": true,
+ "requires": {
+ "bser": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
+ }
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.4.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz",
+ "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
+ "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
+ "requires": {
+ "debug": "^3.2.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "dependencies": {
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ }
+ }
+ },
+ "formidable": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
+ "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ },
+ "generate-password": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/generate-password/-/generate-password-1.5.1.tgz",
+ "integrity": "sha512-XdsyfiF4mKoOEuzA44w9jSNav50zOurdWOV3V8DbA7SJIxR3Xm9ob14HKYTnMQOPX3ylqiJMnQF0wEa8gXZIMw=="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globals": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw=="
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz",
+ "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==",
+ "dev": true,
+ "requires": {
+ "neo-async": "^2.6.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hoek": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
+ "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+ "requires": {
+ "whatwg-encoding": "^1.0.5"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+ },
+ "ipaddr.js": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+ "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-generator-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz",
+ "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz",
+ "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=",
+ "requires": {
+ "ip-regex": "^2.0.0"
+ }
+ },
+ "is-nan": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.2.1.tgz",
+ "integrity": "sha1-n69ltvttskt/XAYoR16nH5iEAeI=",
+ "requires": {
+ "define-properties": "^1.1.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-potential-custom-element-name": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
+ "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c="
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isemail": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
+ "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
+ "dev": true,
+ "requires": {
+ "punycode": "2.x.x"
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "istanbul-api": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.1.4",
+ "fileset": "^2.0.2",
+ "istanbul-lib-coverage": "^1.2.1",
+ "istanbul-lib-hook": "^1.2.2",
+ "istanbul-lib-instrument": "^1.10.2",
+ "istanbul-lib-report": "^1.1.5",
+ "istanbul-lib-source-maps": "^1.2.6",
+ "istanbul-reports": "^1.5.1",
+ "js-yaml": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "once": "^1.4.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "path-parse": "^1.0.5",
+ "supports-color": "^3.1.2"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.1",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.0.3"
+ }
+ },
+ "jest": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.4.tgz",
+ "integrity": "sha512-eBhhW8OS/UuX3HxgzNBSVEVhSuRDh39Z1kdYkQVWna+scpgsrD7vSeBI7tmEvsguPDMnfJodW28YBnhv/BzSew==",
+ "dev": true,
+ "requires": {
+ "import-local": "^1.0.0",
+ "jest-cli": "^22.4.4"
+ },
+ "dependencies": {
+ "jest-cli": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz",
+ "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "import-local": "^1.0.0",
+ "is-ci": "^1.0.10",
+ "istanbul-api": "^1.1.14",
+ "istanbul-lib-coverage": "^1.1.1",
+ "istanbul-lib-instrument": "^1.8.0",
+ "istanbul-lib-source-maps": "^1.2.1",
+ "jest-changed-files": "^22.2.0",
+ "jest-config": "^22.4.4",
+ "jest-environment-jsdom": "^22.4.1",
+ "jest-get-type": "^22.1.0",
+ "jest-haste-map": "^22.4.2",
+ "jest-message-util": "^22.4.0",
+ "jest-regex-util": "^22.1.0",
+ "jest-resolve-dependencies": "^22.1.0",
+ "jest-runner": "^22.4.4",
+ "jest-runtime": "^22.4.4",
+ "jest-snapshot": "^22.4.0",
+ "jest-util": "^22.4.1",
+ "jest-validate": "^22.4.4",
+ "jest-worker": "^22.2.2",
+ "micromatch": "^2.3.11",
+ "node-notifier": "^5.2.1",
+ "realpath-native": "^1.0.0",
+ "rimraf": "^2.5.4",
+ "slash": "^1.0.0",
+ "string-length": "^2.0.0",
+ "strip-ansi": "^4.0.0",
+ "which": "^1.2.12",
+ "yargs": "^10.0.3"
+ }
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz",
+ "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==",
+ "dev": true,
+ "requires": {
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz",
+ "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^22.4.1",
+ "jest-environment-node": "^22.4.1",
+ "jest-get-type": "^22.1.0",
+ "jest-jasmine2": "^22.4.4",
+ "jest-regex-util": "^22.1.0",
+ "jest-resolve": "^22.4.2",
+ "jest-util": "^22.4.1",
+ "jest-validate": "^22.4.4",
+ "pretty-format": "^22.4.0"
+ }
+ },
+ "jest-diff": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz",
+ "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.4.3",
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "jest-docblock": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz",
+ "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz",
+ "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^22.4.3",
+ "jest-util": "^22.4.3",
+ "jsdom": "^11.5.1"
+ },
+ "dependencies": {
+ "acorn-globals": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
+ "dev": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "data-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.2.0",
+ "whatwg-url": "^7.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^1.0.1"
+ }
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
+ "jest-environment-node": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz",
+ "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^22.4.3",
+ "jest-util": "^22.4.3"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz",
+ "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==",
+ "dev": true,
+ "requires": {
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "jest-docblock": "^22.4.3",
+ "jest-serializer": "^22.4.3",
+ "jest-worker": "^22.4.3",
+ "micromatch": "^2.3.11",
+ "sane": "^2.0.0"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz",
+ "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^22.4.0",
+ "graceful-fs": "^4.1.11",
+ "is-generator-fn": "^1.0.0",
+ "jest-diff": "^22.4.0",
+ "jest-matcher-utils": "^22.4.0",
+ "jest-message-util": "^22.4.0",
+ "jest-snapshot": "^22.4.0",
+ "jest-util": "^22.4.1",
+ "source-map-support": "^0.5.0"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz",
+ "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==",
+ "dev": true,
+ "requires": {
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz",
+ "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.4.3",
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "jest-message-util": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz",
+ "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0-beta.35",
+ "chalk": "^2.0.1",
+ "micromatch": "^2.3.11",
+ "slash": "^1.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz",
+ "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==",
+ "dev": true
+ },
+ "jest-regex-util": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz",
+ "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz",
+ "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "^1.11.2",
+ "chalk": "^2.0.1"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz",
+ "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^22.4.3"
+ }
+ },
+ "jest-runner": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz",
+ "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==",
+ "dev": true,
+ "requires": {
+ "exit": "^0.1.2",
+ "jest-config": "^22.4.4",
+ "jest-docblock": "^22.4.0",
+ "jest-haste-map": "^22.4.2",
+ "jest-jasmine2": "^22.4.4",
+ "jest-leak-detector": "^22.4.0",
+ "jest-message-util": "^22.4.0",
+ "jest-runtime": "^22.4.4",
+ "jest-util": "^22.4.1",
+ "jest-worker": "^22.2.2",
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-runtime": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz",
+ "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-jest": "^22.4.4",
+ "babel-plugin-istanbul": "^4.1.5",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^22.4.4",
+ "jest-haste-map": "^22.4.2",
+ "jest-regex-util": "^22.1.0",
+ "jest-resolve": "^22.4.2",
+ "jest-util": "^22.4.1",
+ "jest-validate": "^22.4.4",
+ "json-stable-stringify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "realpath-native": "^1.0.0",
+ "slash": "^1.0.0",
+ "strip-bom": "3.0.0",
+ "write-file-atomic": "^2.1.0",
+ "yargs": "^10.0.3"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz",
+ "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==",
+ "dev": true
+ },
+ "jest-snapshot": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz",
+ "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-diff": "^22.4.3",
+ "jest-matcher-utils": "^22.4.3",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "jest-util": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz",
+ "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.11",
+ "is-ci": "^1.0.10",
+ "jest-message-util": "^22.4.3",
+ "mkdirp": "^0.5.1",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "22.4.4",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz",
+ "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-config": "^22.4.4",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^22.4.0"
+ }
+ },
+ "jest-worker": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz",
+ "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "joi": {
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
+ "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
+ "dev": true,
+ "requires": {
+ "hoek": "5.x.x",
+ "isemail": "3.x.x",
+ "topo": "3.x.x"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz",
+ "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "jsdom": {
+ "version": "16.3.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.3.0.tgz",
+ "integrity": "sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==",
+ "requires": {
+ "abab": "^2.0.3",
+ "acorn": "^7.1.1",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.4.4",
+ "cssstyle": "^2.2.0",
+ "data-urls": "^2.0.0",
+ "decimal.js": "^10.2.0",
+ "domexception": "^2.0.1",
+ "escodegen": "^1.14.1",
+ "html-encoding-sniffer": "^2.0.1",
+ "is-potential-custom-element-name": "^1.0.0",
+ "nwsapi": "^2.2.0",
+ "parse5": "5.1.1",
+ "request": "^2.88.2",
+ "request-promise-native": "^1.0.8",
+ "saxes": "^5.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^3.0.1",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^2.0.0",
+ "webidl-conversions": "^6.1.0",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.0.0",
+ "ws": "^7.2.3",
+ "xml-name-validator": "^3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA=="
+ },
+ "ajv": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
+ "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "requires": {
+ "ip-regex": "^2.1.0",
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ }
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-2-csv": {
+ "version": "3.5.9",
+ "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-3.5.9.tgz",
+ "integrity": "sha512-zKIZBPeWyuNFladZ4wUmXHPkVSozPkn7MZRFJF2ETI+3/5HnOx9SenRkBEPr8sIE8Kiy+kn+e+x+m3yT0FoiYA==",
+ "requires": {
+ "deeks": "2.2.1",
+ "doc-path": "2.0.1",
+ "underscore": "1.9.1"
+ }
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonwebtoken": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz",
+ "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==",
+ "requires": {
+ "jws": "^3.1.5",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jwa": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
+ "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.10",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jwks-rsa": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.3.0.tgz",
+ "integrity": "sha512-9q+d5VffK/FvFAjuXoddrq7zQybFSINV4mcwJJExGKXGyjWWpTt3vsn/aX33aB0heY02LK0qSyicdtRK0gVTig==",
+ "requires": {
+ "@types/express-jwt": "0.0.34",
+ "debug": "^2.2.0",
+ "limiter": "^1.1.0",
+ "lru-memoizer": "^1.6.0",
+ "ms": "^2.0.0",
+ "request": "^2.73.0"
+ }
+ },
+ "jws": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
+ "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
+ "requires": {
+ "jwa": "^1.1.5",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "knex": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/knex/-/knex-0.14.6.tgz",
+ "integrity": "sha512-A+iP8oSSmEF3JbSMfUGuJveqduDMEgyS5E/dO0ycVzAT4EE5askfunk7+37+hPqC951vnbFK/fIiNDaJIjVW0w==",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "bluebird": "^3.5.1",
+ "chalk": "2.3.2",
+ "commander": "^2.15.1",
+ "debug": "3.1.0",
+ "inherits": "~2.0.3",
+ "interpret": "^1.1.0",
+ "liftoff": "2.5.0",
+ "lodash": "^4.17.5",
+ "minimist": "1.2.0",
+ "mkdirp": "^0.5.1",
+ "pg-connection-string": "2.0.0",
+ "readable-stream": "2.3.6",
+ "safe-buffer": "^5.1.1",
+ "tarn": "^1.1.4",
+ "tildify": "1.2.0",
+ "uuid": "^3.2.1",
+ "v8flags": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
+ "dev": true
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "limiter": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz",
+ "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw=="
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lock": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz",
+ "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0="
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ },
+ "lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+ },
+ "long-timeout": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz",
+ "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "lru-memoizer": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz",
+ "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=",
+ "requires": {
+ "lock": "~0.1.2",
+ "lodash": "^4.17.4",
+ "lru-cache": "~4.0.0",
+ "very-fast-args": "^1.1.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
+ "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
+ "requires": {
+ "pseudomap": "^1.0.1",
+ "yallist": "^2.0.0"
+ }
+ }
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "merge": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
+ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
+ "dev": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
+ "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
+ },
+ "mime-types": {
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
+ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "requires": {
+ "mime-db": "~1.36.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ },
+ "moment-timezone": {
+ "version": "0.5.23",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz",
+ "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==",
+ "requires": {
+ "moment": ">= 2.9.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "nan": {
+ "version": "2.13.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
+ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "neo-async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "dev": true
+ },
+ "node-notifier": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
+ "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
+ "dev": true,
+ "requires": {
+ "growly": "^1.3.0",
+ "is-wsl": "^1.1.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "node-schedule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.2.tgz",
+ "integrity": "sha512-GIND2pHMHiReSZSvS6dpZcDH7pGPGFfWBIEud6S00Q8zEIzAs9ommdyRK1ZbQt8y1LyZsJYZgPnyi7gpU2lcdw==",
+ "requires": {
+ "cron-parser": "^2.7.3",
+ "long-timeout": "0.1.1",
+ "sorted-array-functions": "^1.0.0"
+ }
+ },
+ "nodemailer": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.2.tgz",
+ "integrity": "sha512-g0n4nH1ONGvqYo1v72uSWvF/MRNnnq1LzmSzXb/6EPF3LFb51akOhgG3K2+aETAsJx90/Q5eFNTntu4vBCwyQQ=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+ "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "objection": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/objection/-/objection-1.6.9.tgz",
+ "integrity": "sha512-4mp2f34Fn+gCOXO5e9YEWbcnAfvFPF3Rd2NAyQWU6CkZQObqm1mFDw8tYZySpkvibnDg6DPMiprUm82yGy6fgQ==",
+ "requires": {
+ "ajv": "^6.1.1",
+ "bluebird": "^3.5.3",
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "packet-reader": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
+ "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
+ "parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA="
+ },
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "~2.3"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pg": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-7.9.0.tgz",
+ "integrity": "sha512-GkzteBFpsIoIBCSuomqik3IGvhqAtTr32jclR24RmUg170Jrn6ypwR97YalFHrsE1iaW8T0aAH13dmij8QUQ0g==",
+ "requires": {
+ "buffer-writer": "2.0.0",
+ "packet-reader": "1.0.0",
+ "pg-connection-string": "0.1.3",
+ "pg-pool": "^2.0.4",
+ "pg-types": "~2.0.0",
+ "pgpass": "1.x",
+ "semver": "4.3.2"
+ },
+ "dependencies": {
+ "pg-connection-string": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz",
+ "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc="
+ },
+ "semver": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz",
+ "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c="
+ }
+ }
+ },
+ "pg-connection-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.0.0.tgz",
+ "integrity": "sha1-Pu/lmX4G2Ugh5NUC5CtqHHP434I="
+ },
+ "pg-int8": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
+ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
+ },
+ "pg-pool": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz",
+ "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g=="
+ },
+ "pg-types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.0.tgz",
+ "integrity": "sha512-THUD7gQll5tys+5eQ8Rvs7DjHiIC3bLqixk3gMN9Hu8UrCBAOjf35FoI39rTGGc3lM2HU/R+Knpxvd11mCwOMA==",
+ "requires": {
+ "pg-int8": "1.0.1",
+ "postgres-array": "~2.0.0",
+ "postgres-bytea": "~1.0.0",
+ "postgres-date": "~1.0.0",
+ "postgres-interval": "^1.1.0"
+ }
+ },
+ "pgpass": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
+ "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
+ "requires": {
+ "split": "^1.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postgres-array": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
+ "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
+ },
+ "postgres-bytea": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
+ "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
+ },
+ "postgres-date": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz",
+ "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g="
+ },
+ "postgres-interval": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
+ "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
+ "requires": {
+ "xtend": "^4.0.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz",
+ "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ }
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ },
+ "proxy-addr": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.8.0"
+ }
+ },
+ "ps-tree": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
+ "dev": true,
+ "requires": {
+ "event-stream": "=3.3.4"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "raw-body": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "realpath-native": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+ "dev": true,
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw=="
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "request-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.4.tgz",
+ "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==",
+ "requires": {
+ "bluebird": "^3.5.0",
+ "request-promise-core": "1.1.2",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
+ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+ "requires": {
+ "request-promise-core": "1.1.3",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
+ },
+ "request-promise-core": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
+ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+ "dev": true
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sane": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
+ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "capture-exit": "^1.2.0",
+ "exec-sh": "^0.2.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.3",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5",
+ "watch": "~0.18.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "saxes": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "requires": {
+ "xmlchars": "^2.2.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "sorted-array-functions": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.2.0.tgz",
+ "integrity": "sha512-sWpjPhIZJtqO77GN+LD8dDsDKcWZ9GCOJNqKzi1tvtjGIzwfoyuRH8S0psunmc6Z5P+qfDqztSbwYR5X/e1UTg=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.11",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz",
+ "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+ "dev": true
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
+ "start-server-and-test": {
+ "version": "1.7.12",
+ "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.7.12.tgz",
+ "integrity": "sha512-ArW/prmdjQ6fwK4IQwVS1drKMZJ9hqK4ZdDh5k9qc+LZfFReYmwr4JjEvJ0lgLtTGQyJJr7xIWqXRKMsyxctvA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.3",
+ "check-more-types": "2.24.0",
+ "debug": "4.1.1",
+ "execa": "0.11.0",
+ "lazy-ass": "1.6.0",
+ "ps-tree": "1.2.0",
+ "wait-on": "3.2.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.11.0.tgz",
+ "integrity": "sha512-k5AR22vCt1DcfeiRixW46U5tMLtBg44ssdJM9PiXw3D8Bn5qyxFCSnKY/eR22y+ctFDGPqafpaXg2G4Emyua4A==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
+ "stream-combiner": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1"
+ }
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "dev": true,
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "superagent": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+ "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+ "requires": {
+ "component-emitter": "^1.2.0",
+ "cookiejar": "^2.1.0",
+ "debug": "^3.1.0",
+ "extend": "^3.0.0",
+ "form-data": "^2.3.1",
+ "formidable": "^1.2.0",
+ "methods": "^1.1.1",
+ "mime": "^1.4.1",
+ "qs": "^6.5.1",
+ "readable-stream": "^2.3.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "requires": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "tarn": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.4.tgz",
+ "integrity": "sha512-j4samMCQCP5+6Il9/cxCqBd3x4vvlLeVdoyGex0KixPKl4F8LpNbDSC6NDhjianZgUngElRr9UI1ryZqJDhwGg=="
+ },
+ "test-exclude": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "object-assign": "^4.1.0",
+ "read-pkg-up": "^1.0.1",
+ "require-main-filename": "^1.0.1"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "topo": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
+ "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
+ "dev": true,
+ "requires": {
+ "hoek": "6.x.x"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz",
+ "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==",
+ "dev": true
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "tr46": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
+ "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.18"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "uglify-js": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz",
+ "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
+ },
+ "underscore": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
+ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "v8flags": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz",
+ "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "very-fast-args": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz",
+ "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y="
+ },
+ "w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "requires": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "w3c-xmlserializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
+ "requires": {
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "wait-on": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.2.0.tgz",
+ "integrity": "sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg==",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.5.7",
+ "joi": "^13.0.0",
+ "minimist": "^1.2.0",
+ "request": "^2.88.0",
+ "rx": "^4.1.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "watch": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
+ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.2.0",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
+ },
+ "whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "requires": {
+ "iconv-lite": "0.4.24"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ }
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
+ },
+ "whatwg-url": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz",
+ "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^2.0.2",
+ "webidl-conversions": "^5.0.0"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz",
+ "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
+ "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
+ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/packages/api/package.json b/packages/api/package.json
new file mode 100644
index 0000000000..50377aa21c
--- /dev/null
+++ b/packages/api/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "litefarm-api",
+ "version": "1.0.2",
+ "description": "backend for LiteFarm",
+ "main": "./api/src/server.js",
+ "scripts": {
+ "test": "jest --runInBand",
+ "test-end2end": "jest endToEnd",
+ "jest-w": "jest --watch",
+ "start": "NODE_ENV=development node src/server.js",
+ "production": "NODE_ENV=production node src/server.js",
+ "integration": "NODE_ENV=integration node src/server.js",
+ "lint": "eslint src",
+ "gitlab-server": "NODE_ENV=ci node src/server.js",
+ "ci": "start-server-and-test gitlab-server 5000 test-end2end",
+ "e2e": "start-server-and-test start 5000 test-end2end",
+ "fix-lint": "eslint src --fix"
+ },
+ "jest": {
+ "verbose": true,
+ "testURL": "http://localhost/",
+ "testEnvironment": "./tests/testEnvironment.js"
+ },
+ "author": "LiteFarm",
+ "license": "ISC",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/juice-tn/LiteFarm.git"
+ },
+ "dependencies": {
+ "async-file": "^2.0.2",
+ "axios": "^0.18.0",
+ "body-parser": "^1.18.2",
+ "chai": "^4.1.2",
+ "chai-http": "^4.0.0",
+ "cors": "^2.8.5",
+ "csvtojson": "^2.0.3",
+ "eslint": "^4.19.1",
+ "express": "^4.16.3",
+ "express-jwt": "^5.3.1",
+ "express-jwt-authz": "^1.0.0",
+ "express-promise-router": "^3.0.2",
+ "fs-extra": "^8.1.0",
+ "generate-password": "^1.5.1",
+ "jsdom": "^16.3.0",
+ "json-2-csv": "^3.5.9",
+ "jwks-rsa": "^1.2.1",
+ "knex": "^0.14.6",
+ "lodash": "^4.17.10",
+ "node-schedule": "^1.3.2",
+ "nodemailer": "^6.4.2",
+ "objection": "^1.6.9",
+ "pg": "^7.4.3",
+ "request": "^2.87.0",
+ "request-promise": "^4.2.2",
+ "rimraf": "^2.6.3",
+ "uuid": "^3.3.2"
+ },
+ "devDependencies": {
+ "adm-zip": "^0.4.14",
+ "dotenv": "^8.2.0",
+ "jest": "^22.4.3",
+ "start-server-and-test": "^1.4.1"
+ }
+}
diff --git a/packages/api/researchAPI_README.md b/packages/api/researchAPI_README.md
new file mode 100644
index 0000000000..f5c28626b3
--- /dev/null
+++ b/packages/api/researchAPI_README.md
@@ -0,0 +1,35 @@
+# Research API
+
+### Endpoint
+##### Integration
+`https://litefarm-api-integration.herokuapp.com/stats/farm`
+##### Production
+`https://litefarm-api-production.herokuapp.com/stats/farm`
+
+### List of queriy parameters
+All parameters are in boolean except farm_id and token
+Order does not matter
+
+ - farm_id `required` `string`
+ - token `required` `string`
+ - all
+ - users
+ - fields
+ - field_crops
+ - shifts
+ - logs
+ - expenses
+ - sales
+ - people_fed
+ - soil_om
+ - labour_happiness
+ - biodiversity
+ - waterbalance
+ - nitrogenbalance
+
+ ### Examples
+
+ - Get users data
+ `https://www.litefarm.org/stats/farm?farm_id=xxxxxxxxxxxxx&token=xxxxxxxxxxxxx&users=true`
+ - Get users and labour_happiness
+ `https://www.litefarm.org/stats/farm?farm_id=xxxxxxxxxxxxx&token=xxxxxxxxxxxxx&users=true&labour_happiness=true`
diff --git a/packages/api/src/LiteFarmUtility/.DS_Store b/packages/api/src/LiteFarmUtility/.DS_Store
new file mode 100644
index 0000000000..4bec08b786
Binary files /dev/null and b/packages/api/src/LiteFarmUtility/.DS_Store differ
diff --git a/packages/api/src/LiteFarmUtility/__mocks__/exceptionHandler.js b/packages/api/src/LiteFarmUtility/__mocks__/exceptionHandler.js
new file mode 100644
index 0000000000..32b17f385f
--- /dev/null
+++ b/packages/api/src/LiteFarmUtility/__mocks__/exceptionHandler.js
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (exceptionHandler.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+// eslint-disable-next-line no-undef
+const handleException = jest.fn(()=>{
+ return { status:300, message:'Test error message' }
+});
+const ExceptionHandler = {
+ handleException,
+};
+
+module.exports = ExceptionHandler;
\ No newline at end of file
diff --git a/packages/api/src/LiteFarmUtility/exceptionHandler.js b/packages/api/src/LiteFarmUtility/exceptionHandler.js
new file mode 100644
index 0000000000..b83c9fef3a
--- /dev/null
+++ b/packages/api/src/LiteFarmUtility/exceptionHandler.js
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (exceptionHandler.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const KEY_NOT_FOUND = '23503';
+const KEY_NOT_DEFINED = '400';
+
+const UUID_WRONG_FORMAT = '22P02';
+const MODEL_VALIDATION = 'ModelValidation';
+
+class exceptionHandler {
+ static handleException(e){
+ if(e.type === MODEL_VALIDATION){
+ return { status:400, message:e.message }
+ }
+ switch(e.code){
+ case KEY_NOT_FOUND:
+ return { status:400, message:getKeyNotFound(e.detail)+ ' was not found' };
+ case KEY_NOT_DEFINED:
+ return { status:400, message:e.message };
+ case UUID_WRONG_FORMAT:
+ return { status:400, message:'wrong UUID format' };
+ default:
+ return { status:404, message:e.message }
+ }
+
+ }
+}
+function getKeyNotFound(detail){
+ const endingIndexOfKey = detail.indexOf(')');
+ return detail.substring(5, endingIndexOfKey);
+}
+
+
+module.exports = exceptionHandler;
diff --git a/packages/api/src/auth0Config.js b/packages/api/src/auth0Config.js
new file mode 100644
index 0000000000..2691cbefb0
--- /dev/null
+++ b/packages/api/src/auth0Config.js
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (auth0Config.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const environment = process.env.NODE_ENV || 'development';
+
+let token_url;
+let audience;
+let user_url;
+const client_id = process.env.AUTH0_CLIENT_ID;
+const client_secret = process.env.AUTH0_CLIENT_SECRET;
+
+// information from API Explorer Application in auth0
+switch (environment) {
+case 'integration':
+ token_url = 'https://litefarm.auth0.com/oauth/token';
+ audience = 'https://litefarm.auth0.com/api/v2/';
+ user_url = 'https://litefarm.auth0.com/api/v2/users';
+ break;
+case 'production':
+ token_url = 'https://litefarm-production.auth0.com/oauth/token';
+ audience = 'https://litefarm-production.auth0.com/api/v2/';
+ user_url = 'https://litefarm-production.auth0.com/api/v2/users';
+ break;
+case 'development':
+default:
+ token_url = 'https://litefarm-dev.auth0.com/oauth/token';
+ audience = 'https://litefarm-dev.auth0.com/api/v2/';
+ user_url = 'https://litefarm-dev.auth0.com/api/v2/users';
+ break;
+}
+const auth0Config = {
+ token_url,
+ token_headers: { 'content-type': 'application/json' },
+ token_body: {
+ client_id,
+ client_secret,
+ audience,
+ grant_type:'client_credentials',
+ scope: 'create:users update:users delete:users',
+ },
+ user_url,
+};
+
+module.exports = auth0Config;
diff --git a/packages/api/src/authExtensionConfig.js b/packages/api/src/authExtensionConfig.js
new file mode 100644
index 0000000000..6f8dffd832
--- /dev/null
+++ b/packages/api/src/authExtensionConfig.js
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (authExtensionConfig.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const environment = process.env.NODE_ENV || 'development';
+
+let auth0Uri;
+const authExtensionClientId = process.env.AUTH0_AUTH_EXTENSION_CLIENT_ID;
+const authExtensionClientSecret = process.env.AUTH0_AUTH_EXTENSION_CLIENT_SECRET;
+const authorizationExtensionUri = process.env.AUTH0_AUTH_EXTENSION_URI;
+
+switch (environment) {
+case 'integration':
+ auth0Uri = 'https://litefarm.auth0.com';
+ break;
+case 'production':
+ auth0Uri = 'https://litefarm-production.auth0.com';
+ break;
+case 'development':
+default:
+ auth0Uri = 'https://litefarm-dev.auth0.com';
+ break;
+}
+
+const authExtensionConfig = {
+ token_url: `${auth0Uri}/oauth/token`,
+ token_headers: { 'content-type': 'application/json' },
+ token_body: {
+ client_id: authExtensionClientId,
+ client_secret: authExtensionClientSecret,
+ audience: 'urn:auth0-authz-api',
+ grant_type: 'client_credentials',
+ },
+ auth0Uri,
+ authExtensionUri: authorizationExtensionUri,
+};
+
+module.exports = authExtensionConfig;
diff --git a/packages/api/src/controllers/baseController.js b/packages/api/src/controllers/baseController.js
new file mode 100644
index 0000000000..abd947f089
--- /dev/null
+++ b/packages/api/src/controllers/baseController.js
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (baseController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const lodash = require('lodash');
+
+class baseController {
+ static async get(model) {
+ return await model.query().skipUndefined()
+ }
+
+ static async post(model, data, transaction) {
+ data = removeAdditionalProperties(model, data);
+ return await model.query(transaction).insert(data);
+ }
+
+ // send back the resource that was just created
+ static async postWithResponse(model, data, transaction) {
+ return await model.query(transaction).insert(removeAdditionalProperties(model, data)).returning('*');
+ }
+
+ static async postRelated(model, subModel, data, transaction){
+ if(!Array.isArray(data)){ //if data is not an array
+ data = removeAdditionalProperties(subModel, data);
+ }
+
+ if(!lodash.isEmpty(data)){
+ return await model
+ .$relatedQuery(subModel.tableName, transaction)
+ .insert(data);
+ }else{
+ return;
+ }
+ }
+
+ // creates a relation between two tables in the database. If there is a many to many relation,
+ // the join table is updated with a new tuple
+ static async relateModels(model, subModel, data, transaction){
+ if(!Array.isArray(data)){ //if data is not an array
+ data = removeAdditionalProperties(subModel, data);
+ }
+ const ids = [];
+ data.map((d) => Object.keys(d).map((k) => ids.push(d[k])));
+ if(!lodash.isEmpty(data)){
+ // unrelate first so that any objects not in array are deleted
+ await model.$relatedQuery(subModel.tableName, transaction).unrelate();
+ for (const id of ids) {
+ // then relate new objects in array
+ await model
+ .$relatedQuery(subModel.tableName, transaction)
+ .relate(id);
+ }
+ return
+ }else{
+ return
+ }
+ }
+
+ static async put(model, id, data, transaction=null) {
+ // sometime id can be read as a string instead
+ // obtain attributes from model
+ const resource = removeAdditionalProperties(model, data);
+ // put to database
+ const table_id = model.idColumn;
+ // check if path id matches id provided from body
+ return await model.query(transaction).where(table_id, id).update(resource).returning('*');
+ }
+
+ static async delete(model, id, transaction=null) {
+ const table_id = model.idColumn;
+ return await model.query(transaction).where(table_id, id).del()
+ }
+
+ static async getIndividual(model, id) {
+ const table_id = model.idColumn;
+ return await model.query().where(table_id, id)
+ }
+ static async getByFieldId(model, field, fieldId){
+ const data = await model.query().where(field, fieldId);
+ return data;
+ }
+ static async getByForeignKey(model, field, fieldId){
+ const data = await model.query().where(field, fieldId);
+ return data;
+ }
+
+ static async updateIndividualById(model, id, updatedLog, transaction=null){
+ updatedLog = removeAdditionalProperties(model, updatedLog);
+ if(!lodash.isEmpty(updatedLog)){
+ return await model.query(transaction)
+ .patchAndFetchById(id, updatedLog);
+ }
+
+ }
+ static async getRelated(model, subModel){
+ return await model.$loadRelated(subModel.tableName)
+ }
+
+ // insert object and insert, update, or delete related objects
+ // see http://vincit.github.io/objection.js/#graph-upserts
+ static async upsertGraph(model, data, transaction) {
+ return await model.query(transaction).upsertGraph(data, { insertMissing: true });
+ }
+
+ // fetch an object and all of its related objects
+ // see http://vincit.github.io/objection.js/#eager-loading
+ static async eager(model, subModel, transaction) {
+ return await model.query(transaction).eager(subModel);
+ }
+}
+
+function removeAdditionalProperties(model, data) {
+ if(Array.isArray(data)){
+ const arrayWithoutAdditionalProperties = data.map((obj)=>{
+ return lodash.pick(obj, Object.keys(model.jsonSchema.properties));
+ });
+ return arrayWithoutAdditionalProperties;
+ }
+ //remove all the unnecessary properties
+
+ return lodash.pick(data, Object.keys(model.jsonSchema.properties));
+}
+
+
+module.exports = baseController;
+//export transaction;
diff --git a/packages/api/src/controllers/contactController.js b/packages/api/src/controllers/contactController.js
new file mode 100644
index 0000000000..23f963371a
--- /dev/null
+++ b/packages/api/src/controllers/contactController.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (contactController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const nodeMailer = require('nodemailer');
+const credentials = require('../credentials');
+
+class contactController extends baseController {
+ constructor() {
+ super();
+ }
+
+ static sendContactForm() {
+ const smptTransport = nodeMailer.createTransport({
+ service: 'Gmail',
+ port: 465,
+ auth: {
+ user: credentials.CONTACT_FORM.user,
+ pass: credentials.CONTACT_FORM.pass,
+ },
+ });
+ return async (req, res) => {
+ try {
+ const mailData = req.body;
+ const mailOptions = {
+ 'from': mailData.email,
+ to: credentials.CONTACT_FORM.user,
+ subject: mailData.email + ' ' + mailData.name + ': ' + mailData.subject,
+ text: 'FARM ID: ' + mailData.farm_id + '\n--\n' + mailData.body,
+ };
+
+ await smptTransport.sendMail(mailOptions, (err) => {
+ if (err) res.send(err);
+ else {
+ res.status(200).send('Success')
+ }
+ })
+ } catch (error) {
+ res.status(400).json({
+ error,
+ })
+ }
+ }
+ }
+}
+
+module.exports = contactController;
\ No newline at end of file
diff --git a/packages/api/src/controllers/createUserController.js b/packages/api/src/controllers/createUserController.js
new file mode 100644
index 0000000000..976e164a85
--- /dev/null
+++ b/packages/api/src/controllers/createUserController.js
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (createUserController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const findAuth0Uri = require('../util');
+const auth0Config = require('../auth0Config');
+const baseController = require('../controllers/baseController');
+const userModel = require('../models/userModel');
+const userFarmModel = require('../models/userFarmModel');
+const emailTokenModel = require('../models/emailTokenModel');
+const { transaction, Model } = require('objection');
+const axios = require('axios');
+const url = require('url');
+const emailSender = require('../templates/sendEmailTemplate');
+const farmModel = require('../models/farmModel');
+const uuidv4 = require('uuid/v4');
+
+const auth0Uri = findAuth0Uri();
+
+class createUserController extends baseController {
+ static async getAuth0Token() {
+ try {
+ const res = await axios({
+ url: auth0Config.token_url,
+ method: 'post',
+ headers: auth0Config.token_headers,
+ data: auth0Config.token_body,
+ });
+ if (res.status === 200) {
+ if (res.data && res.data.access_token) {
+ return res.data.access_token;
+ }
+ }
+ } catch (err) {
+ throw 'err: failed to get auth0 token';
+ }
+ }
+
+ static async getAuth0UserByEmail(email) {
+ try {
+ const token = await this.getAuth0Token();
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+ const parsedEmail = email.replace('@', '%40');
+ const result = await axios({
+ url: auth0Config.token_body.audience + 'users-by-email?email=' + parsedEmail,
+ method: 'get',
+ headers,
+ });
+ if (result.status === 200) {
+ return result;
+ }
+ }
+ catch (err) {
+ console.log(err);
+ throw err;
+ }
+ }
+
+ static async postToAuth0(user) {
+ try {
+ const token = await this.getAuth0Token();
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+ const result = await axios({
+ url: auth0Config.user_url,
+ method: 'post',
+ headers,
+ data: user,
+ });
+ if (result.status === 201) {
+ return result;
+ }
+ }
+ catch (err) {
+ console.log(err);
+ throw err;
+ }
+ }
+
+ static async sendResetPassword(email) {
+ try {
+ const result = await axios({
+ url: `${auth0Uri}/dbconnections/change_password`,
+ method: 'post',
+ headers: auth0Config.token_headers,
+ data: {
+ client_id: auth0Config.token_body.client_id,
+ email,
+ connection: 'Username-Password-Authentication',
+ },
+ json: true,
+ });
+ if (result.status === 201) {
+ return result;
+ }
+ }
+ catch (err) {
+ throw new Error(err);
+ }
+ }
+
+ static async deleteAuth0User(user_id){
+ try{
+ const token = await this.getAuth0Token();
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+ const result = await axios({
+ url: auth0Config.user_url + '/' + user_id,
+ method: 'delete',
+ headers,
+ });
+ return result.status === 204;
+ }
+ catch(err){
+ return false;
+ }
+ }
+
+ static createAuth0User() {
+ return async (req, res) => {
+ let user_id;
+ const template_path = '../templates/invitation_to_farm_email.html';
+ const sender = 'help@litefarm.org';
+ if(req.body.email && req.body.password && req.body.user_metadata && req.body.farm_id && req.body.user_metadata.hasOwnProperty('first_name') && req.body.user_metadata.hasOwnProperty('last_name') && req.body.hasOwnProperty('role_id') && req.body.wage){
+ const user = {
+ email : req.body.email,
+ password: req.body.password,
+ user_metadata : req.body.user_metadata,
+ app_metadata: { emailInvite: true },
+ connection: 'Username-Password-Authentication',
+ };
+ await this.postToAuth0(user).then(async (authResponse) => {
+ user_id = authResponse.user_id;
+ const url_parts = url.parse(authResponse.data.picture, true);
+ const query = url_parts.query;
+ const lite_farm_user = {
+ user_id: authResponse.data.user_id.split('|')[1],
+ first_name: authResponse.data.user_metadata.first_name,
+ last_name: authResponse.data.user_metadata.last_name,
+ email: authResponse.data.email,
+ profile_picture: query.d || '',
+ farm_id: req.body.farm_id,
+ role_id: req.body.role_id,
+ wage: req.body.wage,
+ };
+ const rows = await farmModel.query().select('*').where('farm.farm_id', lite_farm_user.farm_id);
+ const replacements = {
+ first_name: lite_farm_user.first_name,
+ farm: rows[0].farm_name,
+ };
+ const subject = `You’ve been invited to join ${rows[0].farm_name} on LiteFarm!`;
+ const trx = await transaction.start(Model.knex());
+ baseController.post(userModel, lite_farm_user, trx).then(async () => {
+ await userFarmModel.query(trx).insert({
+ user_id: lite_farm_user.user_id,
+ farm_id: lite_farm_user.farm_id,
+ status: 'Invited',
+ consent_version: '1.0',
+ role_id: lite_farm_user.role_id,
+ });
+
+ // create invite token
+ let token = uuidv4();
+ // gets rid of the dashes
+ token = token.replace(/[-]/g, "");
+ // add a row in emailToken table
+ await emailTokenModel.query(trx).insert({
+ user_id: lite_farm_user.user_id,
+ farm_id: lite_farm_user.farm_id,
+ token,
+ is_used: false,
+ });
+
+ trx.commit();
+ res.sendStatus(201);
+
+ // the following is to determine the url
+ const environment = process.env.NODE_ENV || 'development';
+ let joinUrl;
+ // preferably with a switch case
+ if(environment === 'integration'){
+ joinUrl = `https://beta.litefarm.org/sign_up/${token}/${lite_farm_user.user_id}/${lite_farm_user.farm_id}/${lite_farm_user.email}/${lite_farm_user.first_name}/${lite_farm_user.last_name}`;
+ }else if(environment === 'production'){
+ joinUrl = `https://www.litefarm.org/sign_up/${token}/${lite_farm_user.user_id}/${lite_farm_user.farm_id}/${lite_farm_user.email}/${lite_farm_user.first_name}/${lite_farm_user.last_name}`;
+ }else{
+ joinUrl = `localhost:3000/sign_up/${token}/${lite_farm_user.user_id}/${lite_farm_user.farm_id}/${lite_farm_user.email}/${lite_farm_user.first_name}/${lite_farm_user.last_name}`
+ }
+ await emailSender.sendEmail(template_path, subject, replacements, lite_farm_user.email, sender, true, joinUrl);
+ }).catch(async (err) => {
+ console.log(err);
+ if(await this.deleteAuth0User(user_id)){
+ await trx.rollback();
+ res.status(500).send(err);
+ }
+ else{
+ res.status(500).send(err);
+ }
+ });
+ }).catch(async (addNewUserError) => {
+ console.log(addNewUserError.message);
+ if (addNewUserError.response.status === 409) {
+ // at this point the user exists on Auth0
+ try {
+ const trx = await transaction.start(Model.knex());
+ const authResponse = await this.getAuth0UserByEmail(req.body.email);
+ const user_id = authResponse.data[0].user_id.split('|')[1];
+ // check if user exists in users table
+ const rows = await userModel.query().select('*').where('user_id', user_id);
+ if (rows && rows.length === 0) {
+ res.status(404).send('User already exists but not found in database');
+ } else {
+ // at this point user exists on Auth0 AND in users table, so just
+ // add userFarm association to add the user to current farm, status
+ // is Active by default because no sign up is required
+ await userFarmModel.query(trx).insert({
+ user_id,
+ farm_id: req.body.farm_id,
+ status: 'Active',
+ consent_version: '1.0',
+ role_id: req.body.role_id,
+ });
+ trx.commit();
+ res.sendStatus(201);
+ const rows = await farmModel.query().select('*').where('farm.farm_id', req.body.farm_id);
+ const replacements = {
+ first_name: authResponse.data[0].user_metadata.first_name,
+ farm: rows[0].farm_name,
+ };
+ const subject = `You’ve been invited to join ${rows[0].farm_name} on LiteFarm!`;
+ await emailSender.sendEmail(template_path, subject, replacements, authResponse.data[0].email, sender);
+ }
+ } catch (addExistingUserError) {
+ console.log(addExistingUserError);
+ res.status(500).send(addExistingUserError.message);
+ }
+ } else {
+ res.status(500).send(addNewUserError.message);
+ }
+ })
+ // .then(async () => {
+ // return await this.sendResetPassword(req.body.email);
+ // }).catch((response) => {
+ // console.log(response.message);
+ // res.status(500).send(response.message);
+ // });
+ } else{
+ res.status(400).send('missing properties');
+ }
+ };
+ }
+}
+
+module.exports = createUserController;
diff --git a/packages/api/src/controllers/cropController.js b/packages/api/src/controllers/cropController.js
new file mode 100644
index 0000000000..568ff4ab23
--- /dev/null
+++ b/packages/api/src/controllers/cropController.js
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (cropController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const cropModel = require('../models/cropModel');
+const { transaction, Model } = require('objection');
+
+class cropController extends baseController {
+ constructor() {
+ super();
+ }
+
+ static addCropWithFarmID() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ req.body.user_added = true;
+ const result = await baseController.postWithResponse(cropModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getAllCrop() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await cropController.get(farm_id);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getIndividualCrop() {
+ return async (req, res) => {
+ try {
+ const id = req.params.id;
+ const row = await baseController.getIndividual(cropModel, id);
+ if (!row.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(row);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ // should only delete user added crop
+ static delCrop() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await cropController.del(req, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateCrop() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const updated = await baseController.put(cropModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ }
+ else {
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async get(farm_id){
+ return await cropModel.query().where('user_added', false).orWhere('farm_id', farm_id);
+ }
+
+ static async del(req, trx){
+ const id = req.params.id;
+ const table_id = cropModel.idColumn;
+ return await cropModel.query(trx).where(table_id, id).andWhere('user_added', true).del()
+ }
+}
+
+module.exports = cropController;
diff --git a/packages/api/src/controllers/diseaseController.js b/packages/api/src/controllers/diseaseController.js
new file mode 100644
index 0000000000..4f7aafd6c5
--- /dev/null
+++ b/packages/api/src/controllers/diseaseController.js
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (diseaseController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const DiseaseModel = require('../models/diseaseModel');
+const { transaction, Model } = require('objection');
+
+class diseaseController extends baseController {
+ constructor() {
+ super();
+ }
+
+ static getDisease() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await diseaseController.get(farm_id);
+ res.status(200).send(rows);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+ static addDisease(){
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(DiseaseModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static async get(farm_id){
+ //return await super.get(FertilizerModel);
+ return await DiseaseModel.query().where('farm_id', null).orWhere('farm_id', farm_id);
+ }
+}
+
+module.exports = diseaseController;
diff --git a/packages/api/src/controllers/farmController.js b/packages/api/src/controllers/farmController.js
new file mode 100644
index 0000000000..4a4de7c5d3
--- /dev/null
+++ b/packages/api/src/controllers/farmController.js
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const farmModel = require('../models/farmModel');
+const userModel = require('../models/userModel');
+const userFarmModel = require('../models/userFarmModel');
+const { transaction, Model } = require('objection');
+
+class farmController extends baseController {
+ static addFarm() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(farmModel, req.body, trx);
+ // console.log('farm post result: ', result);
+ // update user with new farm
+ const new_user = await farmController.getUser(req, trx);
+ await farmController.insertUserFarm(new_user[0], result.farm_id, trx);
+
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ // console.log('farm post fail: ', error.message);
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ };
+ }
+
+ static getAllFarms() {
+ return async (req, res) => {
+ try {
+ const rows = await baseController.get(farmModel);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getFarmByID() {
+ return async (req, res) => {
+ try {
+
+ const id = req.params.farm_id;
+ const row = await baseController.getIndividual(farmModel, id);
+ if (!row.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(row);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static deleteFarm() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(farmModel, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateFarm() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const updated = await baseController.put(farmModel, req.params.id, req.body, trx);
+
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ }
+ else {
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async getUser(req, trx){
+ // check if a user is making this call
+ if (req.user) {
+
+ const uid = req.user.sub.split('|')[1] || req.user.sub.split('@')[0];
+
+ return await userModel.query(trx).where(userModel.idColumn, uid).returning('*');
+ }
+ }
+
+ static async insertUserFarm(user, farm_id, trx){
+ await userFarmModel.query(trx).insert({ user_id: user.user_id, farm_id, role_id: 1, status: 'Active' });
+ }
+}
+
+module.exports = farmController;
diff --git a/packages/api/src/controllers/farmExpenseController.js b/packages/api/src/controllers/farmExpenseController.js
new file mode 100644
index 0000000000..bf65d2141e
--- /dev/null
+++ b/packages/api/src/controllers/farmExpenseController.js
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmExpenseController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const farmExpenseModel = require('../models/farmExpenseModel');
+const expenseTypeModel = require('../models/expenseTypeModel');
+const { transaction, Model } = require('objection');
+
+class farmExpenseController extends baseController {
+ static addFarmExpense() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const expenses = req.body;
+ if(!Array.isArray(expenses)){
+ res.status(400).send('needs to be an array of expense items')
+ }
+ //fuck lint i wanna use let. LET ME
+ // eslint-disable-next-line
+ for(let e of expenses){
+ await baseController.post(farmExpenseModel, e, trx);
+ }
+ await trx.commit();
+ res.sendStatus(201);
+ } catch (error) {
+ //handle more exceptions
+
+ await trx.rollback();
+ res.status(400).send(error)
+ }
+ };
+ }
+
+ static getAllFarmExpense() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await baseController.getByForeignKey(farmExpenseModel, 'farm_id', farm_id);
+ res.status(200).send(rows);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ //takes an array of farm_expense_id
+ static delFarmExpense() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const farmIDs = req.body;
+ if(!Array.isArray(farmIDs)){
+ res.status(400).send('Needs to be an array of farm id');
+ }
+ const table_id = farmExpenseModel.idColumn;
+ // eslint-disable-next-line
+ for(let id of farmIDs){
+ const deleted = await farmExpenseModel.query(trx).where(table_id, id).del();
+ if(!deleted){
+ await trx.rollback();
+ res.status(400).send('cannot delete expense with id ' + id);
+ }
+ }
+ await trx.commit();
+ res.sendStatus(200)
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static addFarmExpenseType() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(expenseTypeModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getFarmExpenseType() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const result = await expenseTypeModel.query().where('farm_id', null).orWhere('farm_id', farm_id);
+ res.status(200).send(result);
+ } catch (error) {
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getDefaultTypes() {
+ return async (req, res) => {
+ try {
+ const result = await expenseTypeModel.query().where('farm_id', null);
+ res.status(200).send(result);
+ } catch (error) {
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+}
+
+module.exports = farmExpenseController;
diff --git a/packages/api/src/controllers/fertilizerController.js b/packages/api/src/controllers/fertilizerController.js
new file mode 100644
index 0000000000..5a8c9577fb
--- /dev/null
+++ b/packages/api/src/controllers/fertilizerController.js
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fertilizerController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const FertilizerModel = require('../models/fertilizerModel');
+const { transaction, Model } = require('objection');
+
+class fertilizerController extends baseController {
+ static getFertilizers() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await FertilizerModel.query().where('farm_id', null).orWhere('farm_id', farm_id);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+ static addFertilizer(){
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const farm_id = req.params.farm_id;
+ const body_farm_id = req.body.farm_id;
+ // another check for farm_id after ACL
+ if(farm_id !== body_farm_id){
+ res.status(400).send({ error: 'farm_id does not match in params and body' });
+ }
+ const result = await baseController.postWithResponse(FertilizerModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+}
+
+module.exports = fertilizerController;
diff --git a/packages/api/src/controllers/fieldController.js b/packages/api/src/controllers/fieldController.js
new file mode 100644
index 0000000000..4a3c517e9a
--- /dev/null
+++ b/packages/api/src/controllers/fieldController.js
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const { transaction, Model } = require('objection');
+const fieldModel = require('../models/fieldModel');
+const uuidv4 = require('uuid/v4');
+
+
+class fieldController extends baseController {
+ constructor() {
+ super();
+ }
+
+ static addField() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await fieldController.postWithResponse(req, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delField(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const isDeleted = await baseController.delete(fieldModel, req.params.id, trx);
+ await trx.commit();
+ if(isDeleted){
+ res.sendStatus(200);
+ }
+ else{
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateField(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const updated = await baseController.put(fieldModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if(!updated.length){
+ res.sendStatus(404);
+ }
+ else{
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getFieldByFarmID() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await baseController.getByForeignKey(fieldModel, 'farm_id', farm_id);
+ if (!rows.length) {
+ res.status(200).send(rows);
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async postWithResponse(req, trx){
+ const id_column = fieldModel.idColumn;
+ req.body[id_column] = uuidv4();
+ return await super.postWithResponse(fieldModel, req.body, trx);
+ }
+}
+
+module.exports = fieldController;
diff --git a/packages/api/src/controllers/fieldCropController.js b/packages/api/src/controllers/fieldCropController.js
new file mode 100644
index 0000000000..4a27b95e0c
--- /dev/null
+++ b/packages/api/src/controllers/fieldCropController.js
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldCropController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const fieldCropModel = require('../models/fieldCropModel');
+const { transaction, Model } = require('objection');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+
+
+class FieldCropController extends baseController {
+ static addFieldCrop() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(fieldCropModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delFieldCrop() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(fieldCropModel, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ } else {
+ res.sendStatus(404);
+ }
+ } catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateFieldCrop() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const updated = await baseController.put(fieldCropModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ } else {
+ res.status(200).send(updated);
+ }
+
+ } catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getFieldCropByFarmID() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await FieldCropController.getByForeignKey(farm_id);
+ if (!rows.length) {
+ res.status(200).send(rows);
+ } else {
+ res.status(200).send(rows);
+ }
+ } catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async getByForeignKey(farm_id) {
+
+ const fieldCrops = await fieldCropModel.query().select('*').from('fieldCrop').join('field', function () {
+ this.on('fieldCrop.field_id', '=', 'field.field_id');
+ }).where('field.farm_id', farm_id)
+ .join('crop', function () {
+ this.on('fieldCrop.crop_id', '=', 'crop.crop_id');
+ });
+
+ for (const fieldCrop of fieldCrops) {
+ await fieldCrop.$loadRelated('crop.[price(getFarm), yield(getFarm)]', {
+ getFarm: (builder) => {
+ builder.where('farm_id', farm_id);
+ },
+ })
+ }
+
+ return fieldCrops;
+ }
+
+ static getFieldCropsByDate() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const date = req.params.date;
+ const dataPoints = await knex.raw(
+ `SELECT *
+ FROM "field" f, "fieldCrop" fc, "crop" c
+ WHERE f.farm_id = '${farmID}' and f.field_id = fc.field_id and c.crop_id = fc.crop_id and to_char(date(fc.end_date), 'YYYY-MM-DD') >= '${date}'`);
+
+ if (dataPoints.rows) {
+ const body = dataPoints.rows;
+ res.status(200).send(body);
+ } else {
+ res.status(200).send([]);
+ }
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ };
+ }
+
+ static getExpiredFieldCrops() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const date = formatDate(new Date());
+ const dataPoints = await knex.raw(
+ `SELECT *
+ FROM "field" f, "fieldCrop" fc, "crop" c
+ WHERE f.farm_id = '${farmID}' and f.field_id = fc.field_id and c.crop_id = fc.crop_id and to_char(date(fc.end_date), 'YYYY-MM-DD') < '${date}'`);
+ if (dataPoints.rows) {
+ const body = dataPoints.rows;
+ res.status(200).send(body);
+ } else {
+ res.status(200).send([]);
+ }
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ }
+ }
+}
+
+const formatDate = (currDate) => {
+ const d = currDate;
+ const year = d.getFullYear();
+ let
+ month = '' + (d.getMonth() + 1),
+ day = '' + d.getDate();
+
+ if (month.length < 2) month = '0' + month;
+ if (day.length < 2) day = '0' + day;
+
+ return [year, month, day].join('-');
+};
+
+module.exports = FieldCropController;
diff --git a/packages/api/src/controllers/insightController.js b/packages/api/src/controllers/insightController.js
new file mode 100644
index 0000000000..aff2bb70dd
--- /dev/null
+++ b/packages/api/src/controllers/insightController.js
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (insightController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const { transaction, Model } = require('objection');
+const waterBalanceModel = require('../models/waterBalanceModel');
+const nitrogenScheduleModel = require('../models/nitrogenScheduleModel');
+const baseController = require('../controllers/baseController');
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+const insightHelpers = require('../controllers/insightHelpers');
+const waterBalanceScheduler = require('../jobs/waterBalance/waterBalance');
+
+class insightController extends baseController {
+
+ // this is for the People Fed module
+ static getPeopleFedData() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const data = await knex.raw(
+ `SELECT DISTINCT cs.sale_id, cs.quantity_kg, c.percentrefuse, c.crop_common_name, c.energy, c.protein, c.lipid, c.vitc, c.vita_rae
+ FROM "cropSale" cs, "sale" s, "crop" c
+ WHERE cs.sale_id = s.sale_id AND s.farm_id = '${farmID}' AND cs.crop_id = c.crop_id`
+ );
+
+ if (data.rows) {
+ const people_fed_data = insightHelpers.getNutritionalData(data.rows);
+ const meals = insightHelpers.averagePeopleFedMeals(people_fed_data);
+ const body = {
+ preview: meals,
+ data: people_fed_data,
+ };
+ res.status(200).send(body);
+ } else {
+ res.status(200).send({
+ preview: 0,
+ data: [{ label: 'Calories', val: 0, percentage: 0 },
+ { label: 'Protein', val: 0, percentage: 0 },
+ { label: 'Fat', val: 0, percentage: 0 },
+ { label: 'Vitamin C', val: 0, percentage: 0 },
+ { label: 'Vitamin A', val: 0, percentage: 0 }],
+ });
+ }
+ } catch (error) {
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ // this is for the soil om submodule
+ static getSoilDataByFarmID() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ // Note that soil analysis could have been done on some fields but
+ // not the others - the left join ensures that all fields are returned.
+ // However, for fields that don't have soil analysis data, they will
+ // have null values for the om values. Hence, we need to return 0 by default.
+ const data = await knex.raw(
+ `SELECT DISTINCT
+ f.field_id,
+ f.field_name,
+ f.grid_points,
+ COALESCE(AVG(table_2.om), 0) as om,
+ COALESCE(AVG(organic_carbon), 0) as organic_carbon,
+ COALESCE(AVG(total_carbon), 0) as total_carbon
+ FROM "field" f
+ LEFT JOIN (
+ SELECT sdl.om, sdl.organic_carbon, sdl.inorganic_carbon, sdl.total_carbon, af.field_id
+ FROM "activityLog" al, "activityFields" af, "field" f, "soilDataLog" sdl
+ WHERE f.farm_id = '${farmID}' and f.field_id = af.field_id and al.activity_id = sdl.activity_id and af.activity_id = sdl.activity_id
+ ) table_2 ON table_2.field_id = f.field_id
+ WHERE f.farm_id = '${farmID}'
+ GROUP BY f.field_id
+ ORDER BY f.field_name`
+ );
+
+ if (data.rows) {
+ const body = await insightHelpers.getSoilOM(data.rows);
+ res.status(200).send(body);
+ } else {
+ res.status(200).send({});
+ }
+ } catch (error) {
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getLabourHappinessByFarmID() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const data = await knex.raw(
+ `SELECT DISTINCT t.task_id, s.shift_id, t.task_name, st.duration, s.mood
+ FROM "field" f, "shiftTask" st, "taskType" t, "shift" s, "fieldCrop" fc
+ WHERE f.farm_id = '${farmID}' and fc.field_crop_id = st.field_crop_id and fc.field_id = f.field_id and st.task_id = t.task_id and st.shift_id = s.shift_id and s.mood != 'na'
+ ORDER BY s.shift_id`
+ );
+
+ if (data.rows) {
+ const body = insightHelpers.getLabourHappiness(data.rows);
+ res.status(200).send(body);
+ } else {
+ res.status(200).send({});
+ }
+ } catch (error) {
+ res.status(400).json({ error });
+ }
+ }
+ }
+
+ static getBiodiversityByFarmID() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const dataPoints = await knex.raw(
+ `SELECT f.grid_points, COUNT(fc.crop_id)
+ FROM "field" f
+ LEFT JOIN "fieldCrop" fc
+ ON fc.field_id = f.field_id
+ WHERE f.farm_id = '${farmID}'
+ GROUP BY f.grid_points`
+ );
+ if (dataPoints.rows) {
+ const body = await insightHelpers.getBiodiversityAPI(dataPoints.rows);
+ res.status(200).send(body);
+ } else {
+ res.status(200).send({})
+ }
+ } catch (error) {
+ res.status(400).json({ error });
+ }
+ }
+ }
+
+ static getPricesNearbyByFarmID() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const distance = req.query.distance;
+ const myLat = req.query.lat;
+ const myLong = req.query.long;
+ const startDate = req.query.startdate;
+ const dataPoints = await knex.raw(
+ `
+ SELECT to_char(date(s.sale_date), 'YYYY-MM') as year_month, c.crop_common_name, SUM(cs.quantity_kg) as sale_quant, SUM(cs.sale_value) as sale_value, fa.farm_id, fa.grid_points
+ FROM "sale" s
+ JOIN "cropSale" cs on cs.sale_id = s.sale_id
+ JOIN "crop" c on c.crop_id = cs.crop_id
+ JOIN "farm" fa on fa.farm_id = s.farm_id
+ WHERE s.sale_date >= '${startDate}' and c.crop_id IN (
+ SELECT fc.crop_id
+ FROM "fieldCrop" fc, "field" f
+ WHERE fc.field_id = f.field_id and f.farm_id = '${farmID}')
+ GROUP BY year_month, c.crop_common_name, fa.farm_id, fa.grid_points
+ ORDER BY year_month, c.crop_common_name
+ `
+ );
+ if (dataPoints.rows) {
+ const filtered_datapoints = dataPoints.rows.filter((dataPoint) => {
+ const farm_location = dataPoint['grid_points'];
+ const field_distance = insightHelpers.distance(farm_location['lat'], farm_location['lng'], parseFloat(myLat), parseFloat(myLong), 'K');
+ return field_distance < distance
+ });
+ const body = insightHelpers.formatPricesNearbyData(farmID, filtered_datapoints);
+ res.status(200).send(body)
+ } else {
+ res.status(200).send({})
+ }
+
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static getWaterBalance() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const prevDate = await insightHelpers.formatPreviousDate(new Date(), 'day');
+ const dataPoints = await knex.raw(
+ `SELECT c.crop_common_name, f.field_name, f.field_id, w.plant_available_water
+ FROM "fieldCrop" fc, "field" f, "waterBalance" w, "crop" c
+ WHERE fc.field_id = f.field_id and f.farm_id = '${farmID}' and c.crop_id = w.crop_id and w.field_id = f.field_id and fc.crop_id = w.crop_id and to_char(date(w.created_at), 'YYYY-MM-DD') = '${prevDate}'`
+ );
+ if (dataPoints.rows) {
+ const body = await insightHelpers.formatWaterBalanceData(dataPoints.rows);
+ res.status(200).send(body);
+ } else {
+ res.status(200).send({ preview: 0, data: {} })
+ }
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static addWaterBalanceSchedule() {
+ return async (req, res) => {
+ try {
+ const body = req.body;
+ waterBalanceScheduler.registerFarmID(body.farm_id);
+ res.status(200).send({ preview: 0, data: 'Registered Farm ID' })
+ } catch (e) {
+ res.status(400).json({ e })
+ }
+ }
+ }
+
+ static getWaterSchedule() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const dataPoints = await knex.raw(
+ `SELECT *
+ FROM "waterBalanceSchedule" w
+ WHERE w.farm_id = '${farmID}'`
+ );
+ if (dataPoints.rows.length > 0) {
+ const body = dataPoints.rows[0];
+ res.status(200).send(body)
+ } else {
+ res.status(200).send({})
+ }
+ } catch (e) {
+ res.status(400).json({ e })
+ }
+ }
+ }
+
+ static getNitrogenBalance() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const prevDate = insightHelpers.formatPreviousDate(new Date(), 'year');
+ const dataPoints = await knex.raw(
+ `SELECT f.field_id, f.field_name, AVG(n.nitrogen_value) as nitrogen_value
+ FROM "field" f, "nitrogenBalance" n
+ WHERE f.farm_id = '${farmID}' and n.field_id = f.field_id and to_char(date(n.created_at), 'YYYY-MM-DD') >= '${prevDate}'
+ GROUP BY f.field_id`
+ );
+ if (dataPoints.rows.length > 0) {
+ const body = await insightHelpers.formatNitrogenBalanceData(dataPoints.rows);
+ res.status(200).send(body)
+ } else {
+ res.status(200).send({ preview: 0, data: 'No data yet' })
+ }
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static getNitrogenSchedule() {
+ return async (req, res) => {
+ try {
+ const farmID = req.params.farm_id;
+ const dataPoints = await knex.raw(
+ `SELECT *
+ FROM "nitrogenSchedule" n
+ WHERE n.farm_id = '${farmID}'
+ ORDER BY n.scheduled_at DESC`
+ );
+ if (dataPoints.rows) {
+ const body = dataPoints.rows[0];
+ res.status(200).send(body);
+ } else {
+ res.status(404).json({ error: 'no data' })
+ }
+
+ } catch (error) {
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static addWaterBalance() {
+ let trx;
+ return async (req, res) => {
+ const body = req.body;
+ trx = await transaction.start(Model.knex());
+ try {
+ const waterBalanceResult = await baseController.postWithResponse(waterBalanceModel, body, trx);
+ await trx.commit();
+ res.status(201).send(waterBalanceResult)
+ } catch (error) {
+ await trx.rollback();
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static addNitrogenSchedule() {
+ let trx;
+ return async (req, res) => {
+ const body = req.body;
+ trx = await transaction.start(Model.knex());
+ try {
+ const nitrogenScheduleResult = await baseController.postWithResponse(nitrogenScheduleModel, body, trx);
+ await trx.commit();
+ res.status(201).send(nitrogenScheduleResult)
+ } catch (error) {
+ await trx.rollback();
+ res.status(400).json({ error })
+ }
+ }
+ }
+
+ static delNitrogenSchedule() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(nitrogenScheduleModel, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ } else {
+ res.sendStatus(404);
+ }
+ } catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+}
+
+
+module.exports = insightController;
\ No newline at end of file
diff --git a/packages/api/src/controllers/insightHelpers.js b/packages/api/src/controllers/insightHelpers.js
new file mode 100644
index 0000000000..b1bb61ac10
--- /dev/null
+++ b/packages/api/src/controllers/insightHelpers.js
@@ -0,0 +1,591 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (insightHelpers.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const rp = require('request-promise');
+const endPoints = require('../endPoints');
+// helper functions
+// people_fed helpers:
+// average the people fed meals for the main page of insights
+exports.averagePeopleFedMeals = (data) => {
+ let finalAverage = 0;
+ data.forEach((data) => {
+ finalAverage += data['val']
+ });
+
+ return Math.round((finalAverage / data.length) * 100) / 100;
+};
+
+exports.getNutritionalData = (cropNutritionData) => {
+// @TODO, a simpler way to do this???
+ // generates the data for displaying a chart
+ // cal, prot, fats, vitc, vita
+ // returns an array with the values to easy-map
+ // expected intak for each nutrtion is referenced in the doc
+ const MEALS_PER_DAY = 3;
+ const data = {
+ 'Calories': { label: 'Calories', val: 0, percentage: 0 },
+ 'Protein': { label: 'Protein', val: 0, percentage: 0 },
+ 'Fat': { label: 'Fat', val: 0, percentage: 0 },
+ 'Vitamin C': { label: 'Vitamin C', val: 0, percentage: 0 },
+ 'Vitamin A': { label: 'Vitamin A', val: 0, percentage: 0 },
+ };
+ const expectedIntake = { 'Calories': 2500, 'Protein': 52, 'Fat': 750, 'Vitamin C': 90, 'Vitamin A': 900 };
+
+ cropNutritionData.map((item) => {
+ const percentRefuse = item.percentrefuse || 0;
+ const percentLeft = 1 - (percentRefuse * 0.01);
+ data['Calories']['val'] += (item.energy * 10) * item.quantity_kg * percentLeft; // kcal/lb
+ data['Protein']['val'] += (item.protein * 10) * item.quantity_kg * percentLeft; // g/100g
+ data['Fat']['val'] += (item.lipid * 10) * item.quantity_kg * percentLeft; // g/100g
+ data['Vitamin C']['val'] += (item.vitc * 10) * item.quantity_kg * percentLeft; // mg/
+ data['Vitamin A']['val'] += (item.vita_rae * 10) * item.quantity_kg * percentLeft;
+ });
+
+ // now normalize the data values
+ for (const key in data) {
+ if (data.hasOwnProperty(key)) {
+ data[key]['val'] = Math.round(data[key]['val'] / (expectedIntake[key] / MEALS_PER_DAY))
+ }
+ }
+
+ // now find the highest value for progress-bar to go off of
+ let maxVal = 0;
+ for (const key in data) {
+ if (data.hasOwnProperty(key)) {
+ maxVal = maxVal > data[key]['val'] ? maxVal : data[key]['val'];
+ }
+ }
+
+ // now set the percentages for the progress-bar based off of the maxVal
+
+ for (const key in data) {
+ if (data.hasOwnProperty(key)) {
+ data[key]['percentage'] = Math.round((data[key]['val'] / maxVal) * 100);
+ }
+ }
+ // now finally return an array that react can just map-render
+
+ const returnArray = [];
+ for (const key in data) {
+ if (data.hasOwnProperty(key)) {
+ returnArray.push(data[key])
+ }
+ }
+ return returnArray
+};
+
+// helpers for Soil OM
+
+exports.getSoilOM = async (data) => {
+ const returnValue = {
+ preview: 0,
+ data: [],
+ };
+
+ if (data.length === 0) return returnValue;
+
+ const returnData = {};
+ data.map((element) => {
+ if (!(element.field_id in returnData)) {
+ // The current field is not added to the returnData yet
+ returnData[element.field_id] = initOMData(element)
+ } else {
+ // If the current field has multiple soil data logs, put them
+ // into a list for calculating the average
+ returnData[element.field_id]['activity_oms'].push(grabOM(element))
+ }
+ });
+
+ // assigning 'soil_om' to be the average of 'activity_oms'
+ // if there is no data, call the soilgrids api based on the first gridpoint
+
+
+ const soilGridPromises = Object.keys(returnData).map(async (key) => {
+ const summed = returnData[key]['activity_oms'].reduce((a, b) => a + b, 0);
+ if (summed === 0) {
+ if (returnData[key]['grid_points'].length === 0) {
+ // not possible to retrieve data as we have no data for this soil data log
+ returnData[key]['soil_om'] = 0;
+ } else {
+ returnData[key]['soil_om'] = await callSoilGridAPI(returnData[key]); // saving async stuff in a queue
+ }
+ } else {
+ returnData[key]['soil_om'] = summed / returnData[key]['activity_oms'].length;
+ }
+ });
+ await Promise.all(soilGridPromises);
+
+ let runningAverage = 0;
+ for (const key in returnData) {
+ runningAverage += returnData[key]['soil_om']
+ }
+ returnValue['preview'] = Math.round((runningAverage / Object.keys(returnData).length) * 100) / 100;
+
+ // max OM becomes 100% while everything else is based on it
+ let maxSoilOM = 0;
+ for (const key in returnData) {
+ maxSoilOM = Math.max(returnData[key]['soil_om'], maxSoilOM)
+ }
+ for (const key in returnData) {
+ returnData[key]['percentage'] = (returnData[key]['soil_om'] / maxSoilOM) * 100
+ }
+ // normalize to put in 'data' field of returnValue
+
+ for (const key in returnData) {
+ returnValue.data.push(returnData[key]);
+ }
+ return returnValue;
+};
+
+const initOMData = (element) => {
+ const OMData = {};
+ // set the field name
+ OMData['field_name'] = element.field_name;
+ OMData['soil_om'] = 0;
+ OMData['grid_points'] = element.grid_points;
+ OMData['percentage'] = 0;
+ OMData['activity_oms'] = [grabOM(element)];
+
+ return OMData
+};
+
+// if om does not exist, grab organic_carbon, if organic_carbon does not exist, grab total_carbon
+const grabOM = (element) => {
+ // parse the OM %
+ if (element.om !== 0) {
+ return element.om
+ } else if (element.organic_carbon !== 0) {
+ return element.organic_carbon;
+ } else {
+ return element.total_carbon;
+ }
+};
+
+const callSoilGridAPI = async (data) => {
+ const options = {
+ uri: endPoints.soilGridsAPI,
+ qs: {
+ lon: data['grid_points'][0]['lng'],
+ lat: data['grid_points'][0]['lat'],
+ property: 'soc',
+ depth: '5-15cm',
+ value:'mean',
+ },
+ };
+ return await rp(options)
+ .then((data) => {
+ const parsedObject = JSON.parse(data);
+ let soil_om = parsedObject['properties']['layers'][0]['depths'][0]['values']['mean']
+ soil_om *= 2 * 0.01;
+ return Math.floor(soil_om);
+ })
+ .catch((err) => {
+ return err
+ })
+
+};
+
+/* Helpers for Labour Happiness */
+
+exports.getLabourHappiness = (data) => {
+ const returnValue = {
+ preview: 0,
+ data: [],
+ };
+
+ // the DB datatype for mood is assigned as a string, so I need to quantify it
+ const mappingTypes = {
+ 'very sad': 1,
+ 'sad': 2,
+ 'neutral': 3,
+ 'happy': 4,
+ 'very happy': 5,
+ };
+
+ const tasks = {};
+ // parse by shift_id first in order to do the algorithm discussed with Zia on the whiteboard
+ data.map((element) => {
+ const currentValueMood = element['mood'] ? mappingTypes[element['mood']] : 0;
+ const taskObject = { taskName: element['task_name'], duration: element['duration'] };
+ if (!(element['shift_id'] in tasks)) {
+ tasks[element['shift_id']] = { mood: currentValueMood, tasks: [taskObject] };
+ } else {
+ tasks[element['shift_id']]['tasks'].push(taskObject)
+ }
+ });
+
+ const weightedTasks = {};
+ // now parse each task that was assigned to the shift_id individually
+ for (const key in tasks) {
+ const currentMood = tasks[key]['mood'];
+ const currentTasks = tasks[key]['tasks']; // an array
+ let currentDurationAverage = 0;
+ currentTasks.map((element) => currentDurationAverage += element['duration']);
+ currentTasks.map((element) => {
+ const weighted = (element['duration'] / currentDurationAverage);
+ if (!(element['taskName'] in weightedTasks)) {
+ weightedTasks[element['taskName']] = [{ mood: currentMood, weight: weighted }]
+ } else {
+ weightedTasks[element['taskName']].push({ mood: currentMood, weight: weighted })
+ }
+ })
+ }
+
+ // perform a "weighted mean" to get accurate data on ratings of tasks
+ for (const key in weightedTasks) {
+ const currentTask = key;
+ const moodsWithWeights = weightedTasks[key];
+ let currentNumerator = 0;
+ let currentDenominator = 0;
+ moodsWithWeights.map((element) => {
+ currentNumerator += element['mood'] * element['weight'];
+ currentDenominator += element['weight'];
+ });
+ returnValue['data'].push({
+ task: currentTask,
+ mood: Math.round((currentNumerator / currentDenominator) * 100) / 100,
+ });
+ }
+
+ // finally, calculate the running average to display for the preview
+ let average = 0;
+ returnValue['data'].map((element) => {
+ average += element['mood'];
+ });
+ returnValue['preview'] = Math.round((average / returnValue['data'].length) * 100) / 100;
+ return returnValue
+};
+
+exports.getBiodiversityAPI = async (data) => {
+ const resultData = {
+ preview: 0,
+ data: [],
+ };
+
+ const dictionary = {
+ Aves: 'Birds',
+ Insecta: 'Insects',
+ Plantae: 'Plants',
+ Amphibia: 'Amphibians',
+ };
+
+ const speciesCount = {
+ Birds: 0,
+ Insects: 0,
+ Plants: 0,
+ Amphibians: 0,
+ Crops: 0,
+ };
+
+ const sortLats = new Array(data.length);
+ const sortLngs = new Array(data.length);
+ for (let i = 0; i < data.length; i++) {
+ if (data[i]['grid_points'] != null) {
+ data[i]['grid_points'].map((grid_point) => {
+ if (Array.isArray(sortLats[i])) {
+ sortLats[i].push(Math.round(grid_point['lat'] * 10000) / 10000);
+ sortLngs[i].push(Math.round(grid_point['lng'] * 10000) / 10000);
+ } else {
+ sortLats[i] = [Math.round(grid_point['lat'] * 10000) / 10000];
+ sortLngs[i] = [Math.round(grid_point['lng'] * 10000) / 10000]
+ }
+ })
+ }
+ }
+ const fieldPoints = new Array(data.length);
+
+ for (let i = 0; i < data.length; i++) {
+ fieldPoints[i] = [
+ [Math.min(...sortLats[i]), Math.max(...sortLats[i])],
+ [Math.min(...sortLngs[i]), Math.max(...sortLngs[i])],
+ ]
+ }
+ for (let i = 0; i < data.length; i++) {
+ speciesCount['Crops'] += parseInt(data[i]['count']);
+ }
+ const apiCalls = [];
+
+ fieldPoints.forEach((fieldPoint) => {
+ const options = {
+ uri: endPoints.gbifAPI,
+ qs: {
+ decimalLatitude: fieldPoint[0][0] + ',' + fieldPoint[0][1], //minLat maxLat
+ decimalLongitude: fieldPoint[1][0] + ',' + fieldPoint[1][1], //minLong maxLong
+ },
+ };
+ apiCalls.push(new Promise((resolve, reject) => {
+ rp(options)
+ .then((data) => {
+ const jsonfied = JSON.parse(data);
+ const results = jsonfied['results'];
+ results.map((currentSpecies) => {
+ if (currentSpecies['kingdom'] in dictionary) {
+ speciesCount[dictionary[currentSpecies['kingdom']]]++;
+ } else if (currentSpecies['class'] in dictionary) {
+ speciesCount[dictionary[currentSpecies['class']]]++;
+ }
+ });
+ resolve()
+ })
+ .catch((error) => {
+ reject(error)
+ })
+ }));
+ });
+ return await Promise.all(apiCalls)
+ .then(() => {
+ let runningTotal = 0;
+ let maxSpecies = 0;
+ for (const key in speciesCount) {
+ runningTotal += speciesCount[key];
+ maxSpecies = Math.max(speciesCount[key], maxSpecies);
+ resultData['data'].push({ name: key, count: speciesCount[key], percentage: 0 })
+ }
+ resultData['data'].map((curr) => {
+ curr['percentage'] = (curr['count'] / maxSpecies) * 100;
+ });
+ resultData['preview'] = runningTotal;
+ return resultData
+ })
+ .catch((error) => {
+ return error
+ });
+};
+
+exports.formatPricesData = (data) => {
+ const returnData = {
+ preview: 0,
+ data: [], // data will be generated as json files with month and value
+ };
+
+ const organizeByMonthAndYear = {}; // key: "YYYY-MM" value: array of json objects for crop_common_name
+ let runningTotal = 0;
+ let runningLength = 0;
+ // tally the running total as well as separate the data into different months
+ data.map((element) => {
+ let myPriceForCrop = 0;
+ let networkPriceForCrop = 0;
+ if (element['sale_quant'] != null && element['sale_val'] != null) {
+ myPriceForCrop = element['sale_val'] / element['sale_quant'];
+ }
+ if (element['network_quant'] != null && element['network_value'] != null) {
+ networkPriceForCrop = element['network_value'] / element['network_quant'];
+ }
+ if (myPriceForCrop !== 0 && networkPriceForCrop !== 0) {
+ runningTotal += myPriceForCrop / networkPriceForCrop;
+ }
+ runningLength += 1;
+ const crop_name = element['crop_common_name'];
+ const cropData = {
+ crop_date: element['year_month'],
+ crop_price: myPriceForCrop.toFixed(2),
+ network_price: networkPriceForCrop.toFixed(2),
+ };
+ if (crop_name in organizeByMonthAndYear) {
+ organizeByMonthAndYear[crop_name].push(cropData)
+ } else {
+ organizeByMonthAndYear[crop_name] = [cropData]
+ }
+ });
+ runningTotal = (runningTotal * 100) / 100;
+ returnData['preview'] = Math.ceil((runningTotal / runningLength) * 100);
+ for (const key in organizeByMonthAndYear) {
+ returnData['data'].push({ [key]: organizeByMonthAndYear[key] });
+ }
+ return returnData
+};
+
+exports.formatPricesNearbyData = (myFarmID, data) => {
+ const returnData = {
+ preview: 0,
+ data: [], // data will be generated as json files with month and value
+ };
+ // {'Alfalfa for Fodder': [{crop_date: '2019-11', crop_price: 1, network_price: 1}, .., ..]}
+ const organizeByMonthAndYear = {};
+ const organizeByNameThenByDate = {}; // key: "YYYY-MM" value: array of json objects for crop_common_name
+ const farmIDs = new Set();
+ // tally the running total as well as separate the data into different months
+ data.map((element) => {
+ if (!(element['crop_common_name'] in organizeByNameThenByDate)) {
+ organizeByNameThenByDate[element['crop_common_name']] = {}
+ }
+ if (!(element['year_month'] in organizeByNameThenByDate[element['crop_common_name']])) {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']] = {
+ 'crop_price': 0,
+ 'network_price': 0,
+ }
+ }
+ if (element['farm_id'] === myFarmID) {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['crop_price'] = element['sale_value'] / element['sale_quant'];
+ if (Array.isArray(organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'])) {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'].push(element)
+ } else {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'] = [ element ];
+ }
+ }
+ else {
+ // first total up all network prices in an array and then grab the mean after
+ farmIDs.add(element['farm_id']);
+ if (Array.isArray(organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'])) {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'].push(element)
+ } else {
+ organizeByNameThenByDate[element['crop_common_name']][element['year_month']]['network_price'] = [ element ]
+ }
+ }
+ });
+ for (const crop_name in organizeByNameThenByDate) {
+ for (const date in organizeByNameThenByDate[crop_name]) {
+ // get network price by adding all quants and value and then divide for mean
+ let runningNetworkQuantity = 0;
+ let runningNetworkValue = 0;
+ organizeByNameThenByDate[crop_name][date]['network_price'].forEach((sale) => {
+ runningNetworkQuantity += sale['sale_quant'];
+ runningNetworkValue += sale['sale_value'];
+ });
+ const networkPrice = runningNetworkQuantity / runningNetworkValue;
+ const cropData = {
+ crop_date: date,
+ crop_price: roundToTwoDecimal(organizeByNameThenByDate[crop_name][date]['crop_price']),
+ network_price: roundToTwoDecimal(networkPrice),
+ };
+ if (crop_name in organizeByMonthAndYear) {
+ organizeByMonthAndYear[crop_name].push(cropData)
+ } else {
+ organizeByMonthAndYear[crop_name] = [cropData]
+ }
+ }
+ }
+ // calculate the average price for main insight page
+ let runningSum = 0;
+ let runningLength = 0;
+ for (const crop in organizeByMonthAndYear) {
+ organizeByMonthAndYear[crop].forEach((crop) => {
+ if (crop['crop_price'] !== 0) {
+ runningSum += crop['crop_price'] / crop['network_price'];
+ runningLength += 1
+ }
+ })
+ }
+ returnData['preview'] = Math.ceil((runningSum / runningLength) * 100);
+ returnData['amountOfFarms'] = farmIDs.size || 0;
+ for (const key in organizeByMonthAndYear) {
+ returnData['data'].push({ [key]: organizeByMonthAndYear[key] });
+ }
+ return returnData
+};
+
+exports.formatWaterBalanceData = async (dataPoints) => {
+ const returnData = {
+ preview: 0,
+ data: [],
+ };
+
+ if (dataPoints.length === 0) return returnData;
+
+ const cropsByField = {};
+ const amountOfCrops = dataPoints.length;
+ let runningTotal = 0;
+ dataPoints.forEach((crop) => {
+ const fieldKeyName = crop['field_id'] + ' ' + crop['field_name'];
+ const cropObject = { crop: crop['crop_common_name'], plantAvailableWater: crop['plant_available_water'] };
+ runningTotal += crop['plant_available_water'];
+ if (Array.isArray(cropsByField[fieldKeyName])) {
+ cropsByField[fieldKeyName].push(cropObject);
+ } else {
+ cropsByField[fieldKeyName] = [cropObject];
+ }
+ });
+ for (const key in cropsByField) {
+ returnData['data'].push({ [key]: cropsByField[key] })
+ }
+ returnData['preview'] = Math.round((runningTotal / amountOfCrops) * 100) / 100;
+
+ return returnData
+};
+
+exports.formatNitrogenBalanceData = async (dataPoints) => {
+ const returnData = {
+ preview: 0,
+ data: [],
+ };
+ let runningTotal = 0;
+ if (dataPoints.length === 0) return returnData;
+ dataPoints.forEach((row) => {
+ runningTotal += row['nitrogen_value'];
+ returnData['data'].push({ [row['field_id'] + ' ' + row['field_name']]: Math.round(row['nitrogen_value'] * 100) / 100 })
+ });
+ returnData['preview'] = Math.round(runningTotal / dataPoints.length * 100) / 100;
+ return returnData
+};
+
+
+exports.formatPreviousDate = (date, mode) => {
+ const d = new Date(date);
+ let
+ year = d.getFullYear(),
+ month = '' + (d.getMonth() + 1),
+ day = '' + d.getDate();
+
+ if (mode === 'day') day = '' + (day - 1);
+ else if (mode === 'month') month = '' + (month - 1);
+ else if (mode === 'year') year = '' + (year - 1);
+ if (month.length < 2) month = '0' + month;
+ if (day.length < 2) day = '0' + day;
+
+ return [year, month, day].join('-');
+};
+
+//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+//::: Passed to function: :::
+//::: lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) :::
+//::: lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) :::
+//::: unit = the unit you desire for results :::
+//::: where: 'M' is statute miles (default) :::
+//::: 'K' is kilometers :::
+//::: 'N' is nautical miles :::
+//::: :::
+//::: :::
+//::: GeoDataSource.com (C) All Rights Reserved 2018 :::
+//::: :::
+//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+exports.distance = (lat1, lon1, lat2, lon2, unit) => {
+ if ((lat1 === lat2) && (lon1 === lon2)) {
+ return 0;
+ } else {
+ const radlat1 = Math.PI * lat1 / 180;
+ const radlat2 = Math.PI * lat2 / 180;
+ const theta = lon1 - lon2;
+ const radtheta = Math.PI * theta / 180;
+ let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
+ if (dist > 1) {
+ dist = 1;
+ }
+ dist = Math.acos(dist);
+ dist = dist * 180 / Math.PI;
+ dist = dist * 60 * 1.1515;
+ if (unit === 'K') {
+ dist = dist * 1.609344
+ }
+ if (unit === 'N') {
+ dist = dist * 0.8684
+ }
+ return dist;
+ }
+};
+
+const roundToTwoDecimal = (number) => {
+ return number * 100 / 100
+};
\ No newline at end of file
diff --git a/packages/api/src/controllers/logController.js b/packages/api/src/controllers/logController.js
new file mode 100644
index 0000000000..b35d671483
--- /dev/null
+++ b/packages/api/src/controllers/logController.js
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (logController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const { transaction } = require('objection');
+const { Model } = require('objection');
+const ExceptionHandler = require('../LiteFarmUtility/exceptionHandler');
+const lodash = require('lodash');
+
+const ActivityLogModel = require('../models/activityLogModel');
+const FertilizerLog = require('../models/fertilizerLogModel');
+const PestControlLog = require('../models/pestControlLogModel');
+const ScoutingLog = require('../models/scoutingLogModel');
+const IrrigationLog = require('../models/irrigationLogModel');
+const FieldWorkLog = require('../models/fieldWorkLogModel');
+const SoilDataLog = require('../models/soilDataLogModel');
+const SeedLog = require('../models/seedLogModel');
+const fieldCrop = require('../models/fieldCropModel');
+const HarvestLog = require('../models/harvestLogModel');
+const field = require('../models/fieldModel');
+
+class logController extends baseController {
+ static addLog() {
+ return async (req, res) => {
+ const transac = await transaction.start(Model.knex());
+ try{
+
+ if(!lodash.isEmpty(req.body)){
+ await logServices.insertLog(req.body, transac);
+ await transac.commit();
+ }
+ res.sendStatus(200);
+ }catch(exception){
+ await transac.rollback();
+ var error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error: error.message });
+ }
+ };
+ }
+
+
+ static getLog(){
+ return async (req, res) => {
+ try{
+ const query = req.query;
+ if(query.logid || query.logId){
+ var logId = (query.logId != null) ? query.logId : query.logid;
+
+ var log = await logServices.getLogById(logId);
+ res.json(log);
+ }else if(query.farmId || query.farmid){
+ //find by user id
+ var farmId = (query.farmId != null) ? query.farmId : query.farmid;
+ var logs = await logServices.getLogByFarm(farmId);
+ if(logs && !logs.length){
+ res.json([{}]);
+ }else{
+ res.json(logs);
+ }
+ }else{
+ res.status(200).json([]);
+ }
+ }catch(exception){
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error:error.message });
+ }
+ }
+ }
+
+ static deleteLog(){
+ return async (req, res) => {
+ try{
+ if(req.params.id){
+ await logServices.deleteLog(req.params.id);
+ res.sendStatus(200);
+ }else{
+ throw { code:400, message:'No log id defined' }
+ }
+ }catch(exception){
+ //HANDLE USER UNABLE TO DELETE
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error: error.message });
+ }
+ }
+ }
+
+ static putLog(){
+ return async(req, res)=>{
+ try{
+ if(req.params.id){
+ const transac = await transaction.start(Model.knex());
+ await logServices.patchLog(req.params.id, transac, req.body);
+ await transac.commit();
+ res.sendStatus(200);
+ }else{
+ throw { code:400, message:'No log id defined' }
+ }
+
+ }catch(exception){
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error: error.message });
+ }
+ }
+ }
+}
+
+class logServices extends baseController {
+ constructor() {
+ super();
+ }
+
+ static async insertLog(data, transaction){
+ const logModel = getActivityModelKind(data.activity_kind);
+ const activityLog = await super.post(ActivityLogModel, data, transaction);
+
+ //insert crops,fields and beds
+ await super.relateModels(activityLog, fieldCrop, data.crops, transaction);
+ await super.relateModels(activityLog, field, data.fields, transaction);
+ if (!logModel.isOther) {
+ await super.postRelated(activityLog, logModel, data, transaction);
+ }
+ }
+
+ static async getLogById(id){
+ const log = await super.getIndividual(ActivityLogModel, id);
+ const logKind = getActivityModelKind(log[0].activity_kind);
+ if(logKind !== null){
+ await super.getRelated(log[0], logKind);
+ }
+ return log[0];
+ }
+
+ static async getLogByFarm(farm_id){
+ var logs = await ActivityLogModel.query()
+ .distinct('users.first_name', 'users.last_name', 'activityLog.activity_id', 'activityLog.activity_kind',
+ 'activityLog.date', 'activityLog.user_id', 'activityLog.notes', 'activityLog.action_needed', 'activityLog.photo')
+ .join('userFarm', 'userFarm.user_id', '=', 'activityLog.user_id')
+ .join('users', 'users.user_id', '=', 'activityLog.user_id')
+ .join('farm', 'farm.farm_id', '=', 'userFarm.farm_id')
+ .where('farm.farm_id', farm_id);
+ for(var log of logs){
+ // get fields and fieldCrops associated with log
+ await log.$loadRelated('fieldCrop.crop');
+ await super.getRelated(log, field);
+
+ // get related models for specialized logs
+ var logKind = getActivityModelKind(log.activity_kind);
+ if (!logKind.isOther) {
+ await super.getRelated(log, logKind);
+ }
+ }
+ return logs;
+ }
+
+ static async patchLog(logId, transaction, updatedLog){
+ var log = await super.getIndividual(ActivityLogModel, logId);
+ const activityLog = await super.updateIndividualById(ActivityLogModel, logId, updatedLog, transaction);
+
+ //insert fieldCrops,fields
+ await super.relateModels(activityLog, fieldCrop, updatedLog.crops, transaction);
+ await super.relateModels(activityLog, field, updatedLog.fields, transaction);
+
+ var logKind = getActivityModelKind(log[0].activity_kind);
+ if (!logKind.isOther) {
+ await super.updateIndividualById(logKind, logId, updatedLog, transaction)
+ }
+ }
+
+ static async deleteLog(logId, trasnaction){
+ await super.delete(ActivityLogModel, logId, trasnaction);
+ }
+}
+
+function getActivityModelKind(activity_kind){
+
+
+ if(activity_kind === 'fertilizing'){
+ return FertilizerLog;
+ }else if(activity_kind === 'pestControl'){
+ return PestControlLog;
+ }else if(activity_kind === 'scouting'){
+ return ScoutingLog;
+ }else if(activity_kind === 'irrigation'){
+ return IrrigationLog;
+ }else if(activity_kind === 'harvest'){
+ return HarvestLog;
+ }else if(activity_kind === 'fieldWork') {
+ return FieldWorkLog;
+ }else if(activity_kind === 'soilData'){
+ return SoilDataLog;
+ }else if(activity_kind === 'others'){
+ return null;
+ }else if(activity_kind === 'seeding'){
+ return SeedLog;
+ }else if(activity_kind === 'other'){
+ return { isOther:true };
+ }
+ throw 'Unknown log type'
+}
+
+module.exports.logController = logController;
+module.exports.logServices = logServices;
diff --git a/packages/api/src/controllers/notificationController.js b/packages/api/src/controllers/notificationController.js
new file mode 100644
index 0000000000..7d39754faf
--- /dev/null
+++ b/packages/api/src/controllers/notificationController.js
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (notificationController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const notificationModel = require('../models/notificationModel');
+const { transaction, Model } = require('objection');
+
+
+class notificationController extends baseController {
+
+ static getNotificationByUserID() {
+ return async (req, res) => {
+ try {
+ const user_id = req.params.user_id;
+ const rows = await baseController.getByForeignKey(notificationModel, 'user_id', user_id);
+ if (!rows.length) {
+ res.json([])
+ }
+ else {
+ res.status(200).json(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateNotification() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const updated = await baseController.put(notificationModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ }
+ else {
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+}
+
+module.exports = notificationController;
diff --git a/packages/api/src/controllers/pesticideController.js b/packages/api/src/controllers/pesticideController.js
new file mode 100644
index 0000000000..d3a73b634e
--- /dev/null
+++ b/packages/api/src/controllers/pesticideController.js
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (pesticideController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const PesticideModel = require('../models/pesiticideModel');
+const { transaction, Model } = require('objection');
+
+class pesticideController extends baseController {
+ static getPesticide() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await PesticideModel.query().where('farm_id', null).orWhere('farm_id', farm_id);
+ res.status(200).send(rows);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+ static addPesticide(){
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(PesticideModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+}
+
+module.exports = pesticideController;
diff --git a/packages/api/src/controllers/planController.js b/packages/api/src/controllers/planController.js
new file mode 100644
index 0000000000..6d3594041c
--- /dev/null
+++ b/packages/api/src/controllers/planController.js
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (planController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const planModel = require('../models/planModel');
+const uuidv4 = require('uuid/v4');
+const { transaction, Model } = require('objection');
+
+
+class PlanController extends baseController {
+ static addPlan() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await PlanController.postWithResponse(req, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getPlanByFarmId() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const row = await baseController.getByForeignKey(planModel, 'farm_id', farm_id);
+ if (!row.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(row);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static delPlan() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(planModel, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async postWithResponse(req, trx){
+ const id_column = planModel.idColumn;
+ req.body[id_column] = uuidv4();
+ return await super.postWithResponse(planModel, req.body, trx);
+ }
+}
+
+module.exports = PlanController;
diff --git a/packages/api/src/controllers/priceController.js b/packages/api/src/controllers/priceController.js
new file mode 100644
index 0000000000..c4631d04ee
--- /dev/null
+++ b/packages/api/src/controllers/priceController.js
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (priceController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const priceModel = require('../models/priceModel');
+const { transaction, Model } = require('objection');
+
+
+class PriceController extends baseController {
+ static addPrice() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(priceModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delPrice(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const isDeleted = await baseController.delete(priceModel, req.params.id, trx);
+ await trx.commit();
+ if(isDeleted){
+ res.sendStatus(200);
+ }
+ else{
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updatePrice(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const updated = await baseController.put(priceModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if(!updated.length){
+ res.sendStatus(404);
+ }
+ else{
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getPriceByFarmId() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await baseController.getByForeignKey(priceModel, 'farm_id', farm_id);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+}
+
+module.exports = PriceController;
diff --git a/packages/api/src/controllers/rolesController.js b/packages/api/src/controllers/rolesController.js
new file mode 100644
index 0000000000..52d7e10935
--- /dev/null
+++ b/packages/api/src/controllers/rolesController.js
@@ -0,0 +1,25 @@
+const baseController = require('../controllers/baseController');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config)
+
+class rolesController extends baseController {
+ static getRoles() {
+ return async (req, res) => {
+ try {
+ const data = await knex('role').whereNot('role_id', 4);
+ res.status(200).send(data);
+ if (!data.length) {
+ res.sendStatus(404)
+ }
+ }
+ catch (error) {
+ // handle more exceptions
+ res.status(400).send(error);
+ }
+ }
+ }
+}
+
+module.exports = rolesController;
diff --git a/packages/api/src/controllers/saleController.js b/packages/api/src/controllers/saleController.js
new file mode 100644
index 0000000000..157068013a
--- /dev/null
+++ b/packages/api/src/controllers/saleController.js
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (saleController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const sale = require('../models/saleModel');
+const cropSaleModel = require('../models/cropSaleModel');
+const { transaction, Model } = require('objection');
+
+class SaleController extends baseController {
+ // this messed the update up as field Crop id is the same and it will change for all sales with the same field crop id!
+ static addOrUpdateSale() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ // post to sale and crop sale table
+ const result = await baseController.upsertGraph(sale, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ // eslint-disable-next-line no-console
+ console.log(error);
+ }
+ };
+ }
+
+ static patchSales() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const sale_id = req.body.sale_id;
+ const result = await sale.query(trx).where('sale_id', sale_id)
+ .patch(req.body).returning('*');
+
+ if(result){
+ const cropSale = req.body.cropSale;
+ const isExistingDeleted = await cropSaleModel.query(trx).where('sale_id', req.body.sale_id).del();
+
+ if(isExistingDeleted){
+ for(const cs of cropSale){
+ await cropSaleModel.query(trx).insert(cs);
+ }
+ }else{
+ res.status(400).send({ 'error': 'Failed to patch sales, failed to delete existing sales' })
+ }
+
+ }else{
+ res.status(400).send({ 'error': 'Failed to patch sales' })
+ }
+
+ await trx.commit();
+ res.sendStatus(204);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ // eslint-disable-next-line no-console
+ console.log(error);
+ }
+ };
+ }
+
+ // get sales and related crop sales
+ static getSaleByFarmId() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const sales = await SaleController.getSalesOfFarm(farm_id);
+ // eslint-disable-next-line no-console
+ if (!sales.length) {
+ // Craig: I think this should return 200 otherwise we get an error in Finances front end, i changed it xD
+ // eslint-disable-next-line no-console
+ res.status(200).send([]);
+ }
+ else {
+ for (const sale of sales) {
+ // load related prices and yields of this sale
+ await sale.$loadRelated('cropSale.crop.[price(getFarm), yield(getFarm)]', {
+ getFarm: (builder) => {
+ builder.where('farm_id', farm_id);
+ },
+ });
+ }
+ res.status(200).send(sales);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ // eslint-disable-next-line no-console
+ console.log(error);
+ }
+ }
+ }
+
+ static delSale() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(sale, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async getSalesOfFarm(farm_id) {
+ return await sale
+ .query()
+ .distinct('sale.sale_id', 'sale.customer_name', 'sale.sale_date')
+ .join('cropSale', 'cropSale.sale_id', '=', 'sale.sale_id')
+ //.join('fieldCrop', 'fieldCrop.field_crop_id', '=', 'cropSale.field_crop_id')
+ .join('crop', 'crop.crop_id', '=', 'cropSale.crop_id')
+ //.join('field', 'field.field_id', '=', 'fieldCrop.field_id')
+ .where('sale.farm_id', farm_id)
+ }
+}
+
+module.exports = SaleController;
diff --git a/packages/api/src/controllers/shiftController.js b/packages/api/src/controllers/shiftController.js
new file mode 100644
index 0000000000..ff9aaa885b
--- /dev/null
+++ b/packages/api/src/controllers/shiftController.js
@@ -0,0 +1,261 @@
+/* eslint-disable */
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (shiftController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const { transaction, Model } = require('objection');
+const shiftModel = require('../models/shiftModel');
+const shiftTaskModel = require('../models/shiftTaskModel');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+
+class shiftController extends baseController {
+ static addShift() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const body = req.body;
+ console.log(body);
+ if (!body.tasks) {
+ res.status(400).send('missing tasks');
+ return;
+ }
+ const tasks = body.tasks;
+ let shift_result = await baseController.postWithResponse(shiftModel, body, trx);
+ const shift_id = shift_result.shift_id;
+ shift_result.tasks = await shiftController.insertTasks(tasks, trx, shift_id);
+ console.log(shift_result);
+ await trx.commit();
+ res.status(201).send(shift_result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static addMultiShift() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const body = req.body;
+ if (!body.tasks) {
+ res.status(400).send('missing tasks');
+ return;
+ }
+ const tasks = body.tasks;
+ const shiftUsers = body.shift_users;
+ for(let sUser of shiftUsers){ // eslint-disable-line
+ const temp = body;
+ temp.user_id = sUser.value;
+ temp.wage_at_moment = sUser.wage;
+ temp.mood = sUser.mood;
+ const shift_result = await baseController.postWithResponse(shiftModel, temp, trx);
+ const shift_id = shift_result.shift_id;
+ shift_result.tasks = await shiftController.insertTasks(tasks, trx, shift_id);
+ }
+ await trx.commit();
+ res.sendStatus(201);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delShift() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const sID = (req.params.id).toString();
+ const isShiftTaskDeleted = await shiftTaskModel.query(trx).where('shift_id', sID).del();
+ const isShiftDeleted = await baseController.delete(shiftModel, sID, trx);
+ await trx.commit();
+ if (isShiftDeleted && isShiftTaskDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ await trx.rollback();
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static getShiftByID() {
+ return async (req, res) => {
+ try {
+ const id = req.params.id;
+ const shiftRow = await baseController.getIndividual(shiftModel, id);
+ if (!shiftRow.length) {
+ res.status(404).send('Shift not found');
+ }
+ const taskRow = await baseController.getByForeignKey(shiftTaskModel, 'shift_id', id);
+ if (!taskRow.length) {
+ res.status(404).send('Shit tasks not found');
+ }
+ shiftRow[0].tasks = taskRow;
+ res.status(200).send(shiftRow);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateShift() {
+ return async (req, res) => {
+ //eslint-disable-next-line
+ let trx = await transaction.start(Model.knex());
+ try {
+ if (!req.body.tasks) {
+ res.status(400).send('missing tasks')
+ }
+ const updatedShift = await baseController.put(shiftModel, req.params.id, req.body, trx);
+ if (!updatedShift.length) {
+ res.sendStatus(404).send('can not find shift');
+ }
+ const isShiftTaskDeleted = await shiftTaskModel.query(trx).delete().where('shift_id', req.params.id);//await baseController.delete(shiftTaskModel, req.params.id, trx);
+ if (!isShiftTaskDeleted) {
+ await trx.rollback();
+ res.status(404).send('can not find shift tasks');
+ }
+ const tasks_added = await shiftController.insertTasks(req.body.tasks, trx, req.params.id);
+ updatedShift[0].tasks = tasks_added;
+ await trx.commit();
+ res.status(200).send(updatedShift);
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getShiftByUserID() {
+ return async (req, res) => {
+ try {
+ const user_id = req.params.user_id;
+ const shiftIDs = await shiftModel.query().where('user_id', user_id).select('shift_id');
+ //eslint-disable-next-line
+ let shifts = [];
+ //eslint-disable-next-line
+ for (let idObj of shiftIDs) {
+ const shift_id = idObj.shift_id;
+ const shiftRow = await baseController.getIndividual(shiftModel, shift_id);
+ if (!shiftRow.length) {
+ //res.status(404).send('Shift not found');
+ continue;
+ }
+ const taskRow = await baseController.getByForeignKey(shiftTaskModel, 'shift_id', shift_id);
+ if (!taskRow.length) {
+ //res.status(404).send('Shift task not found');
+ continue;
+ }
+ shiftRow[0].tasks = taskRow;
+ shifts.push(shiftRow[0]);
+ }
+ res.status(200).send(shifts);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ // old query for get shift by farm id
+ /* `SELECT *
+ FROM "shiftTask" t, "shift" s, "users" u, "crop" c, "fieldCrop" f, "taskType" tp
+ WHERE s.shift_id = t.shift_id AND s.user_id = u.user_id AND u.farm_id = '${farm_id}'
+ AND t.field_crop_id = f.field_crop_id AND f.crop_id = c.crop_id AND t.task_id = tp.task_id`*/
+
+ static getShiftByFarmID() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const data = await knex.raw(
+ `
+ SELECT t.task_id, tp.task_name, t.shift_id, t.is_field, t.field_id, x.field_name, t.field_crop_id, t.duration, s.start_time, s.end_time, s.wage_at_moment, u.user_id, u.farm_id, s.mood, u.wage, u.first_name, u.last_name, s.break_duration, x.crop_id, x.crop_common_name, x.variety, x.area_used, x.estimated_production, x.estimated_revenue, x.start_date, x.end_date
+ FROM "shiftTask" t
+ LEFT JOIN (
+ SELECT f.field_crop_id, c.crop_id, crop_common_name, f.area_used, f.estimated_production, f.estimated_revenue, f.start_date, f.end_date, f.variety, fd.field_name
+ FROM "fieldCrop" f, "crop" c, "field" fd
+ WHERE f.crop_id = c.crop_id AND f.field_id = fd.field_id
+ )
+ x ON x.field_crop_id = t.field_crop_id,
+ "shift" s, "users" u, "taskType" tp, "userFarm" uf
+ WHERE s.shift_id = t.shift_id AND uf.user_id = u.user_id AND uf.farm_id = '${farm_id}'
+ AND t.task_id = tp.task_id
+ `
+ );
+ if (data.rows) {
+ res.status(200).send(data.rows);
+ } else {
+ res.status(200).send([]);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async insertTasks(tasks, trx, shift_id) {
+ //eslint-disable-next-line
+ let result = [];
+ try {
+ //eslint-disable-next-line
+ for (let task of tasks) {
+ if (task.is_field && !task.field_id) {
+ throw 'missing field_id';
+ }
+ task.shift_id = shift_id;
+ //eslint-disable-next-line
+ let inserted = await shiftTaskModel.query(trx).insert(task).returning('*');
+ result.push(inserted);
+ }
+ return result;
+ }
+ catch (error) {
+ return error;
+ }
+
+ }
+}
+
+module.exports = shiftController;
diff --git a/packages/api/src/controllers/shiftTaskController.js b/packages/api/src/controllers/shiftTaskController.js
new file mode 100644
index 0000000000..1ae0004d8c
--- /dev/null
+++ b/packages/api/src/controllers/shiftTaskController.js
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (shiftTaskController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const shiftTaskModel = require('../models/shiftTaskModel');
+const { transaction, Model } = require('objection');
+
+class shiftTaskController extends baseController {
+ static addShiftTask() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(shiftTaskModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delShiftTask(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const isDeleted = await baseController.delete(shiftTaskModel, req, trx);
+ await trx.commit();
+ if(isDeleted){
+ res.sendStatus(200);
+ }
+ else{
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+}
+
+module.exports = shiftTaskController;
diff --git a/packages/api/src/controllers/signUpController.js b/packages/api/src/controllers/signUpController.js
new file mode 100644
index 0000000000..702db63afe
--- /dev/null
+++ b/packages/api/src/controllers/signUpController.js
@@ -0,0 +1,141 @@
+const baseController = require('../controllers/baseController');
+const { transaction, Model } = require('objection');
+const axios = require('axios');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+
+const auth0Config = require('../auth0Config');
+const emailTokenModel = require('../models/emailTokenModel');
+const userModel = require('../models/userModel');
+const userFarmModel = require('../models/userFarmModel');
+
+class signUpController extends baseController {
+ static isEmailTokenValid() {
+ return async (req, res) => {
+ try {
+ const { token } = req.params;
+ const rows = await emailTokenModel.query()
+ .select('*')
+ .where('token', token)
+ .andWhere('is_used', false);
+ if (rows && rows.length === 0) {
+ res.status(401).send('Invalid email token');
+ } else {
+ res.status(200).send('Valid email token');
+ }
+ } catch (error) {
+ console.log(error);
+ throw error;
+ }
+ }
+ }
+
+ static async getAuth0Token() {
+ try {
+ const res = await axios({
+ url: auth0Config.token_url,
+ method: 'post',
+ headers: auth0Config.token_headers,
+ data: auth0Config.token_body,
+ });
+ if (res.status === 200) {
+ if (res.data && res.data.access_token) {
+ return res.data.access_token;
+ }
+ }
+ } catch (err) {
+ throw 'failed to get auth0 token';
+ }
+ }
+
+ static async updateAuth0User(id, user) {
+ try {
+ const token = await this.getAuth0Token();
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+ const result = await axios({
+ url: auth0Config.user_url + `/${id}`,
+ method: 'patch',
+ headers,
+ data: user,
+ });
+ if (result.status >= 200) {
+ return result;
+ }
+ }
+ catch (err) {
+ console.log(err);
+ throw err;
+ }
+ }
+
+ static signUpViaInvitation() {
+ return async (req, res) => {
+ try {
+ const { id } = req.params;
+ const {
+ token,
+ farm_id,
+ first_name,
+ last_name,
+ password,
+ } = req.body;
+
+ // 1. Verify email token is associated with the given user_id and farm_id
+ // 2. Verify email token is valid, i.e. not used/not expired
+ const rows = await emailTokenModel.query()
+ .select('*')
+ .where('user_id', id)
+ .andWhere('farm_id', farm_id)
+ .andWhere('token', token)
+ .andWhere('is_used', false);
+ if (rows && rows.length === 0) {
+ res.status(401).send('Invalid email token');
+ }
+
+ // Update user's info in Auth0
+ const auth0UserId = `auth0|${id}`;
+ const updatedAuth0User = {
+ user_metadata: {
+ first_name,
+ last_name,
+ },
+ password,
+ connection: 'Username-Password-Authentication',
+ app_metadata: { signed_up: true },
+ };
+ await this.updateAuth0User(auth0UserId, updatedAuth0User);
+
+ const trx = await transaction.start(Model.knex());
+ // Update user's info in users table
+ const updatedUserInfo = { first_name, last_name };
+ await userModel.query(trx).where('user_id', id).patch(updatedUserInfo);
+ // Update user's status in userFarm table
+ await userFarmModel.query(trx)
+ .where('user_id', id)
+ .andWhere('farm_id', farm_id)
+ .patch({
+ status: 'Active',
+ });
+ // Update token status to invalid
+ await emailTokenModel.query(trx)
+ .where('user_id', id)
+ .andWhere('farm_id', farm_id)
+ .andWhere('token', token)
+ .patch({
+ is_used: true,
+ });
+ await trx.commit();
+ res.status(200).send('Signed up successfully');
+ } catch (error) {
+ res.status(500).send('Failed to sign up');
+ }
+ }
+ }
+}
+
+module.exports = signUpController;
diff --git a/packages/api/src/controllers/statsController.js b/packages/api/src/controllers/statsController.js
new file mode 100644
index 0000000000..54ecdb209d
--- /dev/null
+++ b/packages/api/src/controllers/statsController.js
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (statsController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const userModel = require('../models/userModel');
+const fieldModel = require('../models/fieldModel');
+const FieldCropController = require('../controllers/fieldCropController');
+const logController = require('../controllers/logController');
+const logServices = logController.logServices;
+const farmExpenseModel = require('../models/farmExpenseModel');
+const SaleController = require('../controllers/saleController');
+const credentials = require('../credentials');
+// const cropModel = require('../models/cropModel');
+// const PesticideModel = require('../models/pesiticideModel');
+// const DiseaseModel = require('../models/diseaseModel');
+// const expenseTypeModel = require('../models/expenseTypeModel');
+// const TaskTypeModel = require('../models/TaskTypeModel');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+const farmModel = require('../models/farmModel');
+const insightHelpers = require('../controllers/insightHelpers');
+const waterBalanceScheduler = require('../jobs/waterBalance/waterBalance');
+
+class statsController extends baseController {
+
+ static getFarmStats() {
+
+ return async (req, res) => {
+ const template = {
+ 'farm': [],
+ 'users': [],
+ 'fields': [],
+ 'field_crops': [],
+ 'shifts': [],
+ 'logs': [],
+ 'expenses': [],
+ 'sales': [],
+ 'people_fed': {},
+ 'soil_om': [],
+ 'labour_happiness': [],
+ 'biodiversity': [],
+ 'waterbalance': [],
+ 'nitrogenbalance': [],
+ };
+
+ try {
+ const access_token = req.query.token;
+
+ const all_tokens = Object.values(credentials.STATS_TOKENS);
+
+ if (!access_token || !all_tokens.includes(access_token)) {
+ res.status(400).send({ 'error': 'Missing token' });
+ return;
+ }
+
+ const farm_id = req.query.farm_id;
+
+ if (!farm_id) {
+ res.status(400).send({ 'error': 'Missing farm id' });
+ return;
+ }
+
+ const users = req.query.users;
+ const fields = req.query.fields;
+ const field_crops = req.query.field_crops;
+ const shifts = req.query.shifts;
+ const logs = req.query.logs;
+ const expenses = req.query.expenses;
+ const sales = req.query.sales;
+ const people_fed = req.query.people_fed;
+ const soil_om = req.query.soil_om;
+ const labour_happiness = req.query.labour_happiness;
+ const biodiversity = req.query.biodiversity;
+ const waterbalance = req.query.waterbalance;
+ const nitrogenbalance = req.query.nitrogenbalance;
+
+ let isAll = false;
+
+ if (req.query.all && req.query.all === 'true'){
+ isAll = true;
+ }
+
+ template.farm = await baseController.getIndividual(farmModel, farm_id);
+
+ if (users === 'true' || isAll) {
+ template.users = await baseController.getByForeignKey(userModel, 'farm_id', farm_id);
+ }
+
+ if (fields === 'true' || isAll) {
+ template.fields = await baseController.getByForeignKey(fieldModel, 'farm_id', farm_id);
+ }
+
+ if (field_crops === 'true' || isAll) {
+ template.field_crops = await FieldCropController.getByForeignKey(farm_id);
+ }
+
+ if (shifts === 'true' || isAll) {
+ const get_shifts = await knex.raw(
+ `
+ SELECT t.task_id, tp.task_name, t.shift_id, t.is_field, t.field_id, t.field_crop_id, t.duration, s.start_time, s.end_time, s.wage_at_moment, u.user_id, s.mood, u.wage, u.first_name, u.last_name, s.break_duration, x.crop_id, x.crop_common_name
+ FROM "shiftTask" t
+ LEFT JOIN (
+ SELECT f.field_crop_id, c.crop_id, crop_common_name
+ FROM "fieldCrop" f, "crop" c
+ WHERE f.crop_id = c.crop_id
+ )
+ x ON x.field_crop_id = t.field_crop_id,
+ "shift" s, "users" u, "taskType" tp
+ WHERE s.shift_id = t.shift_id AND s.user_id = u.user_id AND u.farm_id = '${farm_id}'
+ AND t.task_id = tp.task_id
+ `
+ );
+ template.shifts = get_shifts.rows;
+ }
+
+ if (logs === 'true' || isAll) {
+ template.logs = await logServices.getLogByFarm(farm_id);
+ }
+
+ if (expenses === 'true' || isAll) {
+ template.expenses = await baseController.getByForeignKey(farmExpenseModel, 'farm_id', farm_id);
+ }
+
+ if (sales === 'true' || isAll) {
+ template.sales = await SaleController.getSalesOfFarm(farm_id);
+ for (const sale of template.sales) {
+ // load related prices and yields of this sale
+ await sale.$loadRelated('cropSale.fieldCrop.crop.[price(getFarm), yield(getFarm)]', {
+ getFarm: (builder) => {
+ builder.where('farm_id', farm_id);
+ },
+ });
+ }
+ }
+
+ if (people_fed === 'true' || isAll) {
+ const data = await knex.raw(
+ `SELECT DISTINCT cs.sale_id, cs.quantity_kg, c.percentrefuse, c.crop_common_name, c.energy, c.protein, c.lipid, c.vitc, c.vita_rae
+ FROM "cropSale" cs, "fieldCrop" fc, "field" f, "crop" c
+ WHERE cs.field_crop_id = fc.field_crop_id AND f.farm_id = '${farm_id}' AND fc.crop_id = c.crop_id AND f.field_id = fc.field_id
+ ORDER BY cs.sale_id`
+ );
+
+ if (data.rows) {
+ const people_fed_data = insightHelpers.getNutritionalData(data.rows);
+ const meals = insightHelpers.averagePeopleFedMeals(people_fed_data);
+ template.people_fed = {
+ preview: meals,
+ data: people_fed_data,
+ };
+ }
+ }
+
+ if (soil_om === 'true' || isAll) {
+ const data = await knex.raw(
+ `SELECT DISTINCT
+ f.field_id,
+ f.field_name,
+ f.grid_points,
+ COALESCE(AVG(table_2.om), 0) as om,
+ COALESCE(AVG(organic_carbon), 0) as organic_carbon,
+ COALESCE(AVG(total_carbon), 0) as total_carbon
+ FROM "field" f
+ LEFT JOIN (
+ SELECT sdl.om, sdl.organic_carbon, sdl.inorganic_carbon, sdl.total_carbon, af.field_id
+ FROM "activityLog" al, "activityFields" af, "field" f, "soilDataLog" sdl
+ WHERE f.farm_id = '${farm_id}' and f.field_id = af.field_id and al.activity_id = sdl.activity_id and af.activity_id = sdl.activity_id
+ ) table_2 ON table_2.field_id = f.field_id
+ WHERE f.farm_id = '${farm_id}'
+ GROUP BY f.field_id`
+ );
+
+ if (data.rows) {
+ template.soil_om = await insightHelpers.getSoilOM(data.rows);
+ }
+ }
+
+ if (labour_happiness === 'true' || isAll) {
+ const data = await knex.raw(
+ `SELECT DISTINCT t.task_id, s.shift_id, t.task_name, st.duration, s.mood
+ FROM "field" f, "shiftTask" st, "taskType" t, "shift" s, "fieldCrop" fc
+ WHERE f.farm_id = '${farm_id}' and fc.field_crop_id = st.field_crop_id and fc.field_id = f.field_id and st.task_id = t.task_id and st.shift_id = s.shift_id and s.mood != 'na'
+ ORDER BY s.shift_id`
+ );
+
+ if (data.rows) {
+ template.labour_happiness = insightHelpers.getLabourHappiness(data.rows);
+ }
+ }
+
+ if (biodiversity === 'true' || isAll) {
+ const dataPoints = await knex.raw(
+ `SELECT f.grid_points, COUNT(fc.crop_id)
+ FROM "field" f
+ LEFT JOIN "fieldCrop" fc
+ ON fc.field_id = f.field_id
+ WHERE f.farm_id = '${farm_id}'
+ GROUP BY f.grid_points`
+ );
+ if (dataPoints.rows) {
+ template.biodiversity = await insightHelpers.getBiodiversityAPI(dataPoints.rows);
+ }
+ }
+
+ if (waterbalance === 'true' || isAll) {
+ const prevDate = await insightHelpers.formatPreviousDate(new Date(), 'day');
+ const dataPoints = await knex.raw(
+ `SELECT c.crop_common_name, f.field_name, f.field_id, w.plant_available_water
+ FROM "fieldCrop" fc, "field" f, "waterBalance" w, "crop" c
+ WHERE fc.field_id = f.field_id and f.farm_id = '${farm_id}' and c.crop_id = w.crop_id and w.field_id = f.field_id and fc.crop_id = w.crop_id and to_char(date(w.created_at), 'YYYY-MM-DD') = '${prevDate}'`
+ );
+ if (dataPoints.rows > 0){
+ if (await waterBalanceScheduler.checkFarmID(farm_id)) {
+ template.waterbalance = await insightHelpers.formatWaterBalanceData(dataPoints.rows);
+ }
+ }
+ else{
+ template.waterbalance = 'No data yet'
+ }
+ }
+
+ if (nitrogenbalance === 'true' || isAll) {
+ const prevDate = insightHelpers.formatPreviousDate(new Date(), 'year');
+ const dataPoints = await knex.raw(
+ `SELECT f.field_id, f.field_name, AVG(n.nitrogen_value) as nitrogen_value
+ FROM "field" f, "nitrogenBalance" n
+ WHERE f.farm_id = '${farm_id}' and n.field_id = f.field_id and to_char(date(n.created_at), 'YYYY-MM-DD') >= '${prevDate}'
+ GROUP BY f.field_id`
+ );
+ if (dataPoints.rows) {
+ template.nitrogenbalance = await insightHelpers.formatNitrogenBalanceData(dataPoints.rows);
+ }
+ }
+
+
+ res.status(200).send(template);
+
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).send(error);
+ }
+ }
+ }
+}
+
+
+module.exports = statsController;
diff --git a/packages/api/src/controllers/taskTypeController.js b/packages/api/src/controllers/taskTypeController.js
new file mode 100644
index 0000000000..055ed5aca7
--- /dev/null
+++ b/packages/api/src/controllers/taskTypeController.js
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (taskTypeController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const TaskTypeModel = require('../models/taskTypeModel');
+const { transaction, Model } = require('objection');
+
+
+class taskTypeController extends baseController {
+ static addType() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(TaskTypeModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getAllTypes() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await TaskTypeModel.query().where('farm_id', null).orWhere('farm_id', farm_id);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows)
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getTypeByID() {
+ return async (req, res) => {
+ try {
+ const id = req.params.id;
+ const row = await baseController.getIndividual(TaskTypeModel, id);
+ if (!row.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(row)
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static delType(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const isDeleted = await baseController.delete(TaskTypeModel, req.params.id, trx);
+ await trx.commit();
+ if(isDeleted){
+ res.sendStatus(200);
+ }
+ else{
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+}
+
+module.exports = taskTypeController;
diff --git a/packages/api/src/controllers/todoController.js b/packages/api/src/controllers/todoController.js
new file mode 100644
index 0000000000..4385e9e08a
--- /dev/null
+++ b/packages/api/src/controllers/todoController.js
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (todoController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const notificationModel = require('../models/notificationModel');
+const TodoModel = require('../models/todoModel');
+const userTodo = require('../models/userTodo');
+
+const { transaction } = require('objection');
+const { Model } = require('objection');
+const ExceptionHandler = require('../LiteFarmUtility/exceptionHandler')
+
+class todoController extends baseController {
+ static addTodo() {
+ return async (req, res) => {
+ const transac = await transaction.start(Model.knex());
+ try{
+ if(req.body){
+ await todoController.insertTodo(req.body, transac);
+ await todoController.addNotificationForUsers(req.body.users, 'todo_added', transac);
+ await transac.commit();
+ res.sendStatus(200);
+ //insert into notifications table
+ }else{
+ await transac.commit();
+ throw { status:400, message:'No todo data given' }
+ }
+ // await notificationServices.addNotificationForUsers('',);
+ }catch(exception){
+ await transac.rollback();
+ var error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error: error.message });
+ }
+ };
+ }
+
+ static getTodo(){
+ return async (req, res) => {
+ try{
+ const query = req.query;
+ if(query.todoid || query.todoId){
+ var todoId = (query.todoid != null) ? query.todoid : query.todoId;
+ var todo = await baseController.getIndividual(TodoModel, todoId)[0];
+ res.json(todo);
+ }else if(query.userId || query.userid){
+ //find by user id
+ var userId = (query.userId != null) ? query.userId : query.userid;
+ var logs = await todoController.getTodoByUserId(userId);
+ if(!logs || !logs.length){
+ res.json([{}]);
+ }else{
+ res.json(logs);
+ }
+ }else if(query.farmId || query.farmid){
+ //get todos by farm id
+ var farmId = (query.farmId != null) ? query.farmId : query.farmid;
+ var todoLogs = await await TodoModel.query().where('farm_id', farmId).skipUndefined();
+ if(!todoLogs || !todoLogs.length){
+ res.json([]);
+ }else{
+ res.json(todoLogs);
+ }
+ }else{
+ res.status(200).json([]);
+ }
+ }catch(exception){
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error:error.message });
+ }
+
+ }
+ }
+
+ static patchTodo(){
+ return async (req, res) => {
+ try{
+ if(req.params.id && req.body){
+ await baseController.updateIndividualById(TodoModel, req.params.id, req.body);
+ res.sendStatus(200);
+ }else{
+ throw { status:400, message:'Todo id and patch is required' }//throw an exception
+ }
+ }
+ catch(exception){
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error:error.message });
+ }
+ }
+ }
+
+ static deleteTodo(){
+ return async (req, res) => {
+ try{
+ if(req.params.id){
+ await baseController.delete(TodoModel, req.params.id);
+ res.sendStatus(200);
+ }else{
+ throw { status:400, message:'Todo id is required' }
+ }
+ }catch(exception){
+ //HANDLE USER UNABLE TO DELETE
+ const error = ExceptionHandler.handleException(exception);
+ res.status(error.status).json({ error: error.message });
+ }
+ }
+ }
+
+ static async addNotificationForUsers(userIdArray, notificationKind, transaction = null){
+ //if it is an array object
+ let objectToInsert;
+ if(Array.isArray(userIdArray)){
+ objectToInsert = userIdArray.map((userId)=>{
+ return { user_id:userId, notification_kind:notificationKind }
+ });
+ }else{
+ objectToInsert = { user_id:userIdArray, notification_kind:notificationKind };
+ }
+ return await super.post(notificationModel, objectToInsert, transaction);
+ }
+
+ static async insertTodo(data, transaction){
+ const todo = await super.post(TodoModel, data, transaction);
+ const users = data.users.map(user => {
+ return { 'user_id': user }
+ });
+ return await super.postRelated(todo, userTodo, users, transaction);
+ }
+
+ static async getTodoByUserId(userId){
+ var todos = await userTodo.query().where('user_id', userId).eager(TodoModel.tableName);
+ return todos.map(todo=>todo.todo);
+ }
+}
+
+module.exports = todoController;
diff --git a/packages/api/src/controllers/userController.js b/packages/api/src/controllers/userController.js
new file mode 100644
index 0000000000..981b611807
--- /dev/null
+++ b/packages/api/src/controllers/userController.js
@@ -0,0 +1,372 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const userModel = require('../models/userModel');
+const userFarmModel = require('../models/userFarmModel');
+const roleModel = require('../models/roleModel');
+const { transaction, Model } = require('objection');
+const auth0Config = require('../auth0Config');
+const axios = require('axios');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+const emailSender = require('../templates/sendEmailTemplate');
+
+
+class userController extends baseController {
+ static addUser() {
+ // Add pseudo user endpoint
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const { user_id, farm_id, wage } = req.body;
+ await baseController.post(userModel, req.body, trx);
+ await userFarmModel.query(trx).insert({
+ user_id,
+ farm_id,
+ status: 'Active',
+ consent_version: '1.0',
+ role_id: 4,
+ wage,
+ });
+ await trx.commit();
+ res.sendStatus(201);
+ } catch (error) {
+ // handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static getUserByID() {
+ return async (req, res) => {
+ try {
+ const id = req.params.id;
+
+ const data = await knex.raw(
+ `
+ SELECT uf.user_id, uf.farm_id, uf.role_id, uf.has_consent, u.created_at, u.first_name, u.last_name, u.profile_picture, u.email, u.phone_number,
+ uf.status, uf.consent_version, uf.wage
+ FROM "users" u
+ LEFT JOIN
+ "userFarm" uf
+ ON uf.user_id = u.user_id
+ WHERE u.user_id = '${id}'
+ `
+ );
+
+ if (!data && !data.rows) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(data.rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ console.log(error);
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static getUserByFarmID() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const userFarm = await knex.raw(`
+ SELECT
+ uf.user_id,
+ first_name,
+ last_name,
+ profile_picture,
+ phone_number,
+ address,
+ notification_setting,
+ role,
+ uf.has_consent,
+ status,
+ uf.consent_version,
+ r.role_id,
+ uf.wage,
+ CASE
+ WHEN r.role_id = 4 THEN ''
+ ELSE email END
+ FROM "userFarm" uf, "role" r, "users" u
+ WHERE uf.farm_id='${farm_id}'
+ AND uf.user_id=u.user_id
+ AND uf.role_id=r.role_id
+ `);
+ const { rows } = userFarm;
+ if (!rows || rows.length === 0) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getActiveUserByFarmID() {
+ // TODO: convert this into get all users by farm id and let front end handle which type of users to display
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const userFarm = await knex.raw(`
+ SELECT
+ uf.user_id,
+ first_name,
+ last_name,
+ profile_picture,
+ email,
+ phone_number,
+ address,
+ notification_setting,
+ wage,
+ role,
+ uf.has_consent,
+ status,
+ uf.consent_version,
+ uf.wage
+ FROM "userFarm" uf, "role" r, "users" u
+ WHERE uf.farm_id='${farm_id}'
+ AND uf.status='Active'
+ AND uf.user_id=u.user_id
+ AND uf.role_id=r.role_id
+ `);
+ const { rows } = userFarm;
+ if (!rows || rows.length === 0) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static delUser() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const isDeleted = await baseController.delete(userModel, req.params.id, trx);
+ await trx.commit();
+ if (isDeleted) {
+ res.sendStatus(200);
+ }
+ else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async getAuth0Token() {
+ try {
+ const res = await axios({
+ url: auth0Config.token_url,
+ method: 'post',
+ headers: auth0Config.token_headers,
+ data: auth0Config.token_body,
+ });
+ if (res.status === 200) {
+ if (res.data && res.data.access_token) {
+ return res.data.access_token;
+ }
+ }
+ } catch (err) {
+ throw 'failed to get auth0 token';
+ }
+ }
+
+ static async deleteAuth0User(user_id){
+ try{
+ const token = await this.getAuth0Token();
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+ // eslint-disable-next-line
+ let result = await axios({
+ url: auth0Config.user_url + '/auth0|' + user_id,
+ method: 'delete',
+ headers,
+ });
+ return result.status === 204;
+ }
+ catch(err){
+ // eslint-disable-next-line
+ console.log(err);
+ return false;
+ }
+ }
+
+ static deactivateUser() {
+ return async (req, res) => {
+ const user_id = req.params.id;
+ // const user = await baseController.getIndividual(userModel, user_id);
+ const template_path = '../templates/revocation_of_access_to_farm_email.html';
+ // if(user && user[0] && !user[0].is_pseudo){
+ // const isAuth0Deleted = await this.deleteAuth0User(user_id);
+ // if(!isAuth0Deleted){
+ // res.status(400).json({
+ // error: 'Cannot delete auth0 user',
+ // });
+ // return;
+ // }
+ // }
+ const trx = await transaction.start(Model.knex());
+ try {
+ const rows = await userFarmModel.query().select('*').where('userFarm.user_id', user_id)
+ .leftJoin('role', 'userFarm.role_id', 'role.role_id')
+ .leftJoin('users', 'userFarm.user_id', 'users.user_id')
+ .leftJoin('farm', 'userFarm.farm_id', 'farm.farm_id');
+ const subject = 'You\'ve lost access to ' + rows[0].farm_name + ' on LiteFarm!'
+ const replacements = {
+ first_name: rows[0].first_name,
+ farm: rows[0].farm_name,
+ };
+ const sender = 'help@litefarm.org';
+ const isUserFarmPatched = await userFarmModel.query(trx).where('user_id', user_id)
+ .patch({
+ status: 'Inactive',
+ });
+ await trx.commit();
+ if (isUserFarmPatched) {
+ res.sendStatus(200);
+ //send email informing user their access revoked (unless user is no account worker - no email)
+ try {
+ if (rows[0].email) {
+ await emailSender.sendEmail(template_path, subject, replacements, rows[0].email, sender)
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ } else {
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateConsent(){
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ const user_id = req.params.id;
+ try {
+ const updated = await userModel.query(trx).where('user_id', user_id)
+ .patch({
+ has_consent: true,
+ });
+ await trx.commit();
+ if (!updated) {
+ res.status(409).send('Update failed');
+ }
+ else {
+ res.sendStatus(200);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static updateUser() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+
+ const updated = await baseController.put(userModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ }
+ else {
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateNotificationSetting(){
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const updated = await userController.updateSetting(req, trx);
+ await trx.commit();
+ if (!updated.length) {
+ res.sendStatus(404);
+ }
+ else {
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static async updateSetting(req, trx){
+ const notificationSettingModel = require('../models/notificationSettingModel');
+ return await super.put(notificationSettingModel, req, trx);
+ }
+}
+
+module.exports = userController;
diff --git a/packages/api/src/controllers/userFarmController.js b/packages/api/src/controllers/userFarmController.js
new file mode 100644
index 0000000000..f63259ba7d
--- /dev/null
+++ b/packages/api/src/controllers/userFarmController.js
@@ -0,0 +1,450 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userFarmController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const userFarmModel = require('../models/userFarmModel');
+const userModel = require('../models/userModel');
+const farmModel = require('../models/farmModel');
+const createUserController = require('../controllers/createUserController');
+const {transaction, Model} = require('objection');
+const axios = require('axios');
+const authExtensionConfig = require('../authExtensionConfig');
+const environment = process.env.NODE_ENV || 'development';
+const Knex = require('knex');
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+const lodash = require('lodash');
+const url = require('url');
+const generator = require('generate-password');
+const emailSender = require('../templates/sendEmailTemplate');
+
+class userFarmController extends baseController {
+ constructor() {
+ super();
+ }
+
+ static getUserFarmByUserID() {
+ return async (req, res) => {
+ try {
+ const user_id = req.params.id;
+ const rows = await userFarmModel.query().select('*').where('userFarm.user_id', user_id)
+ .leftJoin('role', 'userFarm.role_id', 'role.role_id')
+ .leftJoin('users', 'userFarm.user_id', 'users.user_id')
+ .leftJoin('farm', 'userFarm.farm_id', 'farm.farm_id');
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static getFarmInfo() {
+ return async (req, res) => {
+ try {
+ const user_id = req.params.user_id;
+ const farm_id = req.params.farm_id;
+ const rows = await userFarmModel.query().select('*').where('userFarm.user_id', user_id).andWhere('userFarm.farm_id', farm_id)
+ .leftJoin('role', 'userFarm.role_id', 'role.role_id')
+ .leftJoin('users', 'userFarm.user_id', 'users.user_id')
+ .leftJoin('farm', 'userFarm.farm_id', 'farm.farm_id');
+ res.status(200).send(rows);
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static addUserFarm() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const { user_id, farm_id, role } = req.body;
+ let role_id = 0;
+
+ const data = await knex.raw(
+ `SELECT * FROM "role" r WHERE r.role='${role}'`
+ );
+
+ if (data.rows && data.rows.length > 0) {
+ role_id = data.rows[0].role_id;
+ }
+
+ const reqBody = { user_id, farm_id, role_id };
+ const result = await baseController.postWithResponse(userFarmModel, reqBody, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ };
+ }
+
+
+ static async getAuthExtensionToken() {
+ const { token_url, token_headers, token_body } = authExtensionConfig;
+ try {
+ const res = await axios({
+ url: token_url,
+ method: 'post',
+ headers: token_headers,
+ data: token_body,
+ });
+ if (res.status === 200) {
+ if (res.data && res.data.access_token) {
+ return res.data.access_token;
+ }
+ }
+ } catch (err) {
+ throw 'err: failed to get auth extension token';
+ }
+ }
+
+ static getAllRolePermissions() {
+ return async (req, res) => {
+ try {
+ const token = await this.getAuthExtensionToken();
+ const { authExtensionUri } = authExtensionConfig;
+ const headers = {
+ 'content-type': 'application/json',
+ 'Authorization': 'Bearer ' + token,
+ };
+
+ const permissions = {};
+ const permissionsRawData = await axios({
+ url: `${authExtensionUri}/api/permissions`,
+ method: 'get',
+ headers,
+ });
+ permissionsRawData.data.permissions.forEach(permission => {
+ const { _id, name, description } = permission;
+ permissions[_id] = { permission_id: _id, name, description };
+ });
+
+ const rolesRawData = await axios({
+ url: `${authExtensionUri}/api/roles`,
+ method: 'get',
+ headers,
+ });
+ const roles = rolesRawData.data.roles.map(role => {
+ const { _id, name, description, permissions: rolePermissions } = role;
+ const roleData = {
+ role_id: _id,
+ name,
+ description,
+ permissions: [],
+ };
+ rolePermissions.forEach(rolePermissionId => {
+ roleData['permissions'].push(permissions[rolePermissionId]);
+ });
+ return roleData;
+ })
+ res.status(201).send(roles);
+ } catch (error) {
+ res.send(error);
+ }
+ }
+ }
+
+ static updateConsent() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ const user_id = req.params.user_id;
+ const farm_id = req.params.farm_id;
+
+ let subject;
+ let template_path;
+ const has_consent = req.body.has_consent;
+ const consent_version = req.body.consent_version;
+ const sender = 'system@litefarm.org'
+
+ try {
+
+ const rows = await userFarmModel.query().select('*').where('userFarm.user_id', user_id).andWhere('userFarm.farm_id', farm_id)
+ .leftJoin('role', 'userFarm.role_id', 'role.role_id')
+ .leftJoin('users', 'userFarm.user_id', 'users.user_id')
+ .leftJoin('farm', 'userFarm.farm_id', 'farm.farm_id');
+
+ const isPatched = await userFarmModel.query(trx).where('user_id', user_id).andWhere('farm_id', farm_id)
+ .patch({
+ has_consent,
+ consent_version,
+ });
+
+ const replacements = {
+ first_name: rows[0].first_name,
+ farm: rows[0].farm_name,
+ };
+ if (has_consent === false) {
+ subject = 'You didn’t agree with the LiteFarm privacy policy – here are your options';
+ template_path = '../templates/withheld_consent_email.html';
+ }
+ else {
+ subject = 'You\'ve successfully joined ' + rows[0].farm_name + '!';
+ template_path = '../templates/send_confirmation_email.html';
+ replacements['role'] = rows[0].role
+ }
+ if (isPatched) {
+ await trx.commit();
+ res.sendStatus(200);
+ //send out confirmation or withdrew consent email
+ await emailSender.sendEmail(template_path, subject, replacements, rows[0].email, sender)
+ }
+ else {
+ await trx.rollback();
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ };
+ }
+
+ static updateRole() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ const farm_id = req.params.farm_id;
+ const user_id = req.params.user_id;
+ const { role } = req.body;
+ let role_id = 0;
+
+ const data = await knex.raw(
+ `SELECT * FROM "role" r WHERE r.role='${role}'`
+ );
+
+ if (data.rows && data.rows.length > 0) {
+ role_id = data.rows[0].role_id;
+ }
+
+ if (!role_id) {
+ res.status(400).send('role_id not found');
+ return;
+ }
+ try {
+ const isPatched = await userFarmModel.query(trx).where('farm_id', farm_id).andWhere('user_id', user_id)
+ .patch({
+ role_id,
+ });
+ if (isPatched) {
+ res.sendStatus(200);
+ await trx.commit();
+ return;
+ }
+ else {
+ await trx.rollback();
+ res.sendStatus(404);
+ return;
+ }
+ } catch (error) {
+ // handle more exceptions
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ };
+ }
+
+ static updateStatus() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ const farm_id = req.params.farm_id;
+ const user_id = req.params.user_id;
+ const { status } = req.body;
+
+ try {
+ const isPatched = await userFarmModel.query(trx).where('farm_id', farm_id).andWhere('user_id', user_id)
+ .patch({
+ status,
+ });
+ if (isPatched) {
+ res.sendStatus(200);
+ await trx.commit();
+ return;
+ }
+ else {
+ await trx.rollback();
+ res.sendStatus(404);
+ return;
+ }
+ } catch (error) {
+ // handle more exceptions
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ };
+ }
+
+ static updateUser() {
+ function removeAdditionalProperties(model, data) {
+ if (Array.isArray(data)) {
+ const arrayWithoutAdditionalProperties = data.map((obj) => {
+ return lodash.pick(obj, Object.keys(model.jsonSchema.properties));
+ });
+ return arrayWithoutAdditionalProperties;
+ }
+ //remove all the unnecessary properties
+
+ return lodash.pick(data, Object.keys(model.jsonSchema.properties));
+ }
+
+ async function getFarmNamebyID(farm_id) {
+ try{
+
+ const rows = await baseController.getIndividual(farmModel, farm_id)
+
+ if(rows.length){
+ return rows[0].farm_name;
+ }else{
+ return '404*FARM_NOT_FOUND*';
+ }
+ }
+ catch(err){
+ throw new Error(err);
+ }
+ }
+
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ const farm_id = req.params.farm_id;
+ let user_id = req.params.user_id;
+
+
+ let needToConvertWorker = false;
+ if (req.body && req.body.email_needs_update && req.body.email) {
+ needToConvertWorker = true;
+ }
+
+ try {
+ /*
+ Flow of converting a user
+ create a user on auth0
+ update email in users table
+ update user_id in users
+ */
+ let farm_name = await getFarmNamebyID(farm_id);
+ if(farm_name === '404*FARM_NOT_FOUND*'){
+ res.status(400).send('farm not found');
+ return;
+ }
+
+ if (needToConvertWorker) {
+
+ const replacements = {
+ first_name: req.body.first_name,
+ farm: farm_name,
+ };
+ const subject = "You’ve been invited to join " + farm_name + " on LiteFarm!";
+ const template_path = '../templates/invitation_to_farm_email.html';
+ const sender = 'help@litefarm.org';
+ const pw = generator.generate({
+ length: 10,
+ numbers: true,
+ symbols: true,
+ });
+ const user = {
+ email: req.body.email,
+ password: pw,
+ user_metadata: {
+ first_name: req.body.first_name,
+ last_name: req.body.last_name,
+ },
+ app_metadata: {emailInvite: true, signed_up: true},
+ connection: 'Username-Password-Authentication',
+ };
+
+ // CHECK IF USER EMAIL ALREADY EXISTS, IF IT DOES, THEN SEND INVITE EMAIL INSTEAD
+ const emails = await baseController.getByFieldId(userModel, 'email', req.body.email);
+
+ if(emails.length && emails.length > 0){
+ const existing_email = emails[0].email;
+ await emailSender.sendEmail(template_path, subject, replacements, existing_email, sender);
+ const isPatched = await userFarmModel.query(trx).where('user_id', emails[0].user_id).andWhere('farm_id', farm_id)
+ .patch(removeAdditionalProperties(userFarmModel, req.body));
+
+ if (isPatched) {
+ await trx.commit();
+ res.sendStatus(200);
+ }else{
+ await trx.rollback();
+ res.status(500).send('add user failed');
+ }
+ }
+
+ const authResponse = await createUserController.postToAuth0(user);
+ let new_user_id = authResponse.data.user_id.split('|')[1];
+ const url_parts = url.parse(authResponse.data.picture, true);
+ const query = url_parts.query;
+ let picture = query.d || '';
+
+ await userModel.query(trx).where('user_id', user_id)
+ .patch({user_id: new_user_id});
+
+ await userModel.query(trx).where('user_id', new_user_id)
+ .patch({email: req.body.email, profile_picture: picture});
+
+ await createUserController.sendResetPassword(req.body.email);
+ await emailSender.sendEmail(template_path, subject, replacements, req.body.email, sender);
+
+ const isPatched = await userFarmModel.query(trx).where('user_id', new_user_id).andWhere('farm_id', farm_id)
+ .patch(removeAdditionalProperties(userFarmModel, req.body));
+
+ if (isPatched) {
+ await trx.commit();
+ res.sendStatus(200);
+ }else{
+ await trx.rollback();
+ await createUserController.deleteAuth0User('auth0|' + new_user_id);
+ res.status(500).send('add user failed');
+ }
+ }
+ else{
+ const isPatched = await userFarmModel.query(trx).where('user_id', user_id).andWhere('farm_id', farm_id)
+ .patch(removeAdditionalProperties(userFarmModel, req.body));
+
+ if (isPatched) {
+ res.sendStatus(200);
+ await trx.commit();
+ }else{
+ await trx.rollback();
+ res.status(500).send('add user failed');
+ }
+ }
+ } catch (error) {
+ // handle more exceptions
+ if (needToConvertWorker) {
+ await createUserController.deleteAuth0User('auth0|' + user_id);
+ }
+ console.log(error);
+ await trx.rollback();
+ res.status(400).send(error);
+ }
+ }
+ }
+
+}
+
+module.exports = userFarmController;
diff --git a/packages/api/src/controllers/userFarmDataController.js b/packages/api/src/controllers/userFarmDataController.js
new file mode 100644
index 0000000000..333a55714d
--- /dev/null
+++ b/packages/api/src/controllers/userFarmDataController.js
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userFarmDataController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+
+/* eslint-disable no-console */
+
+class userFarmDataController extends baseController {
+ static registerFarm() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.query.farm_id;
+ const user_id = req.query.user_id;
+ await knex('farmDataSchedule').insert({ farm_id, user_id });
+ res.sendStatus(200);
+ }
+ catch (error) {
+ //handle more exceptions
+ console.log(error);
+ res.status(400).send(error);
+ }
+ }
+ }
+
+ static getSchedule(){
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const data = await knex('farmDataSchedule').where({ farm_id, is_processed: false }).returning('*');
+ res.status(200).send(data);
+ }
+ catch (error) {
+ //handle more exceptions
+ console.log(error);
+ res.status(400).send(error);
+ }
+ }
+ }
+}
+
+module.exports = userFarmDataController;
\ No newline at end of file
diff --git a/packages/api/src/controllers/yieldController.js b/packages/api/src/controllers/yieldController.js
new file mode 100644
index 0000000000..a585f5f2c1
--- /dev/null
+++ b/packages/api/src/controllers/yieldController.js
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (yieldController.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const baseController = require('../controllers/baseController');
+const yieldModel = require('../models/yieldModel');
+const { transaction, Model } = require('objection');
+
+
+class YieldController extends baseController {
+ static addYield() {
+ return async (req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ const result = await baseController.postWithResponse(yieldModel, req.body, trx);
+ await trx.commit();
+ res.status(201).send(result);
+ } catch (error) {
+ //handle more exceptions
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ };
+ }
+
+ static delYield(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const isDeleted = await baseController.delete(yieldModel, req.params.id, trx);
+ await trx.commit();
+ if(isDeleted){
+ res.sendStatus(200);
+ }
+ else{
+ res.sendStatus(404);
+ }
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static updateYield(){
+ return async(req, res) => {
+ const trx = await transaction.start(Model.knex());
+ try{
+ const updated = await baseController.put(yieldModel, req.params.id, req.body, trx);
+ await trx.commit();
+ if(!updated.length){
+ res.sendStatus(404);
+ }
+ else{
+ res.status(200).send(updated);
+ }
+
+ }
+ catch (error) {
+ await trx.rollback();
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+
+ static getYieldByFarmId() {
+ return async (req, res) => {
+ try {
+ const farm_id = req.params.farm_id;
+ const rows = await baseController.getByForeignKey(yieldModel, 'farm_id', farm_id);
+ if (!rows.length) {
+ res.sendStatus(404)
+ }
+ else {
+ res.status(200).send(rows);
+ }
+ }
+ catch (error) {
+ //handle more exceptions
+ res.status(400).json({
+ error,
+ });
+ }
+ }
+ }
+}
+
+module.exports = YieldController;
diff --git a/packages/api/src/credentials.js b/packages/api/src/credentials.js
new file mode 100644
index 0000000000..d506be302c
--- /dev/null
+++ b/packages/api/src/credentials.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (credentials.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const credentials = {
+ WATER_BALANCE_DIR: './src/jobs/waterBalance/waterBalanceData/',
+ GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
+ OPEN_WEATHER_APP_ID: process.env.OPEN_WEATHER_APP_ID,
+ CONTACT_FORM: {
+ user: process.env.CONTACT_FORM_EMAIL,
+ pass: process.env.CONTACT_FORM_PASSWORD,
+ },
+ STATS_TOKENS: { 'Zia': process.env.STATS_TOKENS_ZIA, 'Mollie': process.env.STATS_TOKENS_MOLLIE },
+ LiteFarm_Service_Gmail:{
+ user: process.env.LITEFARM_SERVICE_EMAIL,
+ pass: process.env.LITEFARM_SERVICE_EMAIL_PASSWORD,
+ client_id: process.env.GMAIL_API_CLIENT_ID,
+ client_secret: process.env.GMAIL_API_CLIENT_SECRET,
+ refresh_token: process.env.GMAIL_REFRESH_TOKEN,
+ },
+};
+
+module.exports = credentials;
diff --git a/packages/api/src/endPoints.js b/packages/api/src/endPoints.js
new file mode 100644
index 0000000000..3fae07651a
--- /dev/null
+++ b/packages/api/src/endPoints.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (endPoints.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const endPoints = {
+ googleMapsAPI: 'https://maps.googleapis.com/maps/api/elevation/json', // for grabbing elevation
+ openWeatherAPI: 'https://api.openweathermap.org/data/2.5/weather', // for grabbing weather data
+ soilGridsAPI: 'https://rest.soilgrids.org/soilgrids/v2.0/properties/query', // for grabbing soil organic matter when no soil analysis is present
+ gbifAPI: 'http://api.gbif.org/v1/occurrence/search', // for grabbing species in biodiversity
+};
+
+module.exports = endPoints;
\ No newline at end of file
diff --git a/packages/api/src/jobs/nitrogenBalance/nitrogenBalance.js b/packages/api/src/jobs/nitrogenBalance/nitrogenBalance.js
new file mode 100644
index 0000000000..bd0a0599bf
--- /dev/null
+++ b/packages/api/src/jobs/nitrogenBalance/nitrogenBalance.js
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (nitrogenBalance.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const scheduler = require('node-schedule');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../../knexfile')[environment];
+const knex = Knex(config);
+const nitrogenBalanceModel = require('../../models/nitrogenBalanceModel');
+const { transaction, Model } = require('objection');
+
+/* eslint-disable no-console*/
+
+class NitrogenBalance {
+ static registerDailyJob() {
+ const rule = new scheduler.RecurrenceRule();
+ rule.hour = 23;
+ rule.minute = 30;
+ // I make this 11:30pm as waterBalance has one for 11:00pm
+ scheduler.scheduleJob(rule, () => {
+ const currDate = formatDate(new Date());
+ grabFarmIDsToRun(currDate)
+ .then((currFarms) => {
+ if (Array.isArray(currFarms) && currFarms.length > 0) {
+ currFarms.forEach(async (farm) => {
+ runNitrogenBalance(farm)
+ .then((nitrogenBalanceByField) => { // saved as hashmap by field ID
+ saveToDB(nitrogenBalanceByField);
+ })
+ .then(() => {
+ console.log('Nitrogen Balance Model successfully finished on Farm: ' + farm)
+ }).catch((error) => {
+ console.log(error)
+ })
+ })
+ }
+ });
+ console.log('Nitrogen Balance Daily Calculation is Done')
+ })
+ }
+
+ static runOnce() {
+ const currDate = formatDate(new Date());
+ grabFarmIDsToRun(currDate)
+ .then((currFarms) => {
+ if (Array.isArray(currFarms) && currFarms.length > 0) {
+ currFarms.forEach(async (farm) => {
+ runNitrogenBalance(farm)
+ .then((nitrogenBalanceByField) => { // saved as hashmap by field ID
+ saveToDB(nitrogenBalanceByField);
+ })
+ .then(() => {
+ console.log('Nitrogen Balance Model successfully finished on Farm: ' + farm)
+ }).catch((error) => {
+ console.log(error)
+ })
+ })
+ }
+ });
+ }
+}
+
+const grabFarmIDsToRun = async (currDate) => {
+ const dataPoints = await knex.raw(`SELECT n.farm_id
+ FROM "nitrogenSchedule" n
+ WHERE to_char(date(n.scheduled_at), 'YYYY-MM-DD') = '${currDate}'`);
+ return dataPoints.rows
+};
+
+const runNitrogenBalance = async (farmIDJSON) => {
+ const farmID = farmIDJSON['farm_id'];
+ const [inputN, outputN] = await Promise.all([inputNitrogenForFarm(farmID), outputNitrogenForFarm(farmID)]);
+ return await finalNitrogenValuesByField(inputN, outputN)
+};
+
+const inputNitrogenForFarm = async (farmID) => {
+ const dataPoints = await knex.raw(`
+ SELECT f.fertilizer_id, fl.quantity_kg, f.fertilizer_type, f.moisture_percentage, f.n_percentage, f.nh4_n_ppm, f.p_percentage, f.k_percentage, f.mineralization_rate, af.field_id, SUM(c.nutrient_credits * (fc.area_used/10000)) as field_nutrient_credits
+ FROM "fertilizerLog" fl, "fertilizer" f, "activityLog" a, "users" u, "nitrogenSchedule" n, "activityFields" af, "fieldCrop" fc, "crop" c
+ WHERE fl.activity_id = a.activity_id and u.farm_id = '${farmID}' and u.user_id = a.user_id and f.fertilizer_id = fl.fertilizer_id and n.farm_id = '${farmID}' and date(n.created_at) < date(a.date) and date(n.scheduled_at) >= date(a.date) and af.activity_id = a.activity_id and fc.field_id = af.field_id and c.crop_id = fc.crop_id
+ GROUP BY f.fertilizer_id, fl.quantity_kg, f.fertilizer_type, f.moisture_percentage, f.n_percentage, f.nh4_n_ppm, f.p_percentage, f.k_percentage, f.mineralization_rate, af.field_id
+`);
+ /* these data points were found here:
+ https://pdfs.semanticscholar.org/f300/3faece1e5ed8b3525ad6114d7d654f156076.pdf
+ in table 1
+ */
+ const totalNitrogenInputByField = {};
+ //const cropCredits = 0; //@TODO how to get crop credits?
+ if(dataPoints.rows) {
+ await Promise.all(dataPoints.rows.map(async (data) => {
+ const currentTotalNitrogen = (data['quantity_kg'] * (data['n_percentage']/100));
+ const currentNH3 = 0; //@TODO still need this from the crop nutrient that Zia will update
+ const currentNH4 = (data['nh4_n_ppm'] / 1000000) * data['quantity_kg'];
+ const nitrogenCredits = data['field_nutrient_credits'];
+ const mineralizationRate = data['mineralization_rate'];
+ const totalNitrogenForFert = nitrogenCredits + ((currentTotalNitrogen - currentNH3 - currentNH4) * mineralizationRate) + currentNH4 + currentNH3;
+
+ if (data['field_id'] in totalNitrogenInputByField) {
+ totalNitrogenInputByField[data['field_id']] += totalNitrogenForFert;
+ } else {
+ totalNitrogenInputByField[data['field_id']] = totalNitrogenForFert;
+ }
+ }))
+ }
+ return totalNitrogenInputByField
+};
+
+
+const outputNitrogenForFarm = async (farmID) => {
+ const dataPoints = await knex.raw(`
+ SELECT h.quantity_kg, c.crop_id, c.crop_common_name, c.percentrefuse, c.protein, fc.field_id
+ FROM "harvestLog" h, "activityLog" a, "users" u, "activityCrops" ac, "nitrogenSchedule" n, "crop" c, "fieldCrop" fc
+ WHERE h.activity_id = a.activity_id and u.farm_id = '${farmID}' and ac.activity_id = h.activity_id and date(n.created_at) < date(a.date) and date(n.scheduled_at) >= date(a.date) and fc.field_crop_id = ac.field_crop_id and c.crop_id = fc.crop_id
+ `);
+ const totalNitrogenOutputByField = {};
+ if(dataPoints.rows) {
+ await Promise.all(dataPoints.rows.map(async (data) => {
+ const quantityHarvested = data['quantity_kg'];
+ const refuse = data['percentrefuse'] / 100 || 0;
+ const proteinContent = Math.round(data['protein'] * 1000 / 1000) / 100;
+ const factorToConvertFromProteinToNitrogen = 0.16;
+ const moistureFactor = 1; // Defaulted to 1 see below comment
+ // Also there should be an X which is the factor to adjust moisture difference, Zia said to just note it here and not put it in the calculation
+ console.log(quantityHarvested, refuse, proteinContent, factorToConvertFromProteinToNitrogen, moistureFactor)
+ const totalNitrogenInCrop = quantityHarvested * (1 - refuse) * proteinContent * factorToConvertFromProteinToNitrogen * moistureFactor;
+ if (data['field_id'] in totalNitrogenOutputByField) {
+ totalNitrogenOutputByField[data['field_id']] += totalNitrogenInCrop
+ } else {
+ totalNitrogenOutputByField[data['field_id']] = totalNitrogenInCrop
+ }
+ }))
+ }
+ return totalNitrogenOutputByField
+};
+
+const finalNitrogenValuesByField = (inputN, outputN) => {
+ for (const key in outputN) {
+ if (key in inputN) {
+ inputN[key] = inputN[key] - outputN[key];
+ } else {
+ inputN[key] = -outputN[key]
+ }
+ inputN[key] = Math.round(inputN[key] * 100) / 100;
+ }
+ return inputN
+};
+
+const saveToDB = async (nitrogenBalanceByField) => {
+ const trx = await transaction.start(Model.knex());
+ try {
+ for (const key in nitrogenBalanceByField) {
+ await nitrogenBalanceModel.query(trx).insert({ field_id: key, nitrogen_value: nitrogenBalanceByField[key] }).returning('*');
+ }
+ trx.commit();
+ } catch (e) {
+ trx.rollback();
+ console.log(e);
+ }
+};
+
+
+const formatDate = (date) => {
+ const d = new Date(date), year = d.getFullYear();
+ let
+ month = '' + (d.getMonth() + 1),
+ day = '' + d.getDate();
+
+ if (month.length < 2) month = '0' + month;
+ if (day.length < 2) day = '0' + day;
+
+ return [year, month, day].join('-');
+};
+
+module.exports = NitrogenBalance;
diff --git a/packages/api/src/jobs/sendFarmData/sendFarmData.js b/packages/api/src/jobs/sendFarmData/sendFarmData.js
new file mode 100644
index 0000000000..33a59a325e
--- /dev/null
+++ b/packages/api/src/jobs/sendFarmData/sendFarmData.js
@@ -0,0 +1,1109 @@
+/* eslint-disable */
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (sendFarmData.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const fs = require('async-file');
+const fieldModel = require('../../models/fieldModel');
+const FieldCropController = require('../../controllers/fieldCropController');
+const logController = require('../../controllers/logController');
+const logServices = logController.logServices;
+const farmExpenseModel = require('../../models/farmExpenseModel');
+const SaleController = require('../../controllers/saleController');
+const farmModel = require('../../models/farmModel');
+const fertilizerModel = require('../../models/fertilizerModel');
+const pesticideModel = require('../../models/pesiticideModel');
+const harvModel = require('../../models/harvestLogModel');
+const seedModel = require('../../models/seedLogModel');
+const fieldWorkModel = require('../../models/fieldWorkLogModel');
+const soilDataModel = require('../../models/soilDataLogModel');
+const irriModel = require('../../models/irrigationLogModel');
+const scoutModel = require('../../models/scoutingLogModel');
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../../knexfile')[environment];
+const knex = Knex(config);
+const credentials = require('../../credentials');
+const scheduler = require('node-schedule');
+const baseController = require('../../controllers/baseController');
+const nodemailer = require('nodemailer');
+const converter = require('json-2-csv');
+const fse = require('fs-extra');
+const fs_regular = require('fs');
+const AdmZip = require('adm-zip');
+
+const TEMPLATE = {
+ 'farm': [],
+ 'users': [],
+ 'fields': [],
+ 'field_crops': [],
+ 'shifts': [],
+ 'logs': [],
+ 'expenses': [],
+ 'sales': [],
+};
+
+class sendUserFarmDataScheduler {
+ static registerJob() {
+ const rule = new scheduler.RecurrenceRule();
+ if (process.env.REACT_APP_ENV === 'production') {
+ rule.minute = new scheduler.Range(0, 59, 30);
+ } else {
+ rule.second = new scheduler.Range(0, 59, 15);
+ }
+
+
+ scheduler.scheduleJob(rule, () => {
+ let request_id;
+ grabFarmIDsToRun()
+ .then(async (currFarms) => {
+ const transporter = nodemailer.createTransport({
+ host: 'smtp.gmail.com',
+ port: 465,
+ secure: true,
+ service: 'gmail',
+ auth: {
+ type: 'OAuth2',
+ clientId: credentials.LiteFarm_Service_Gmail.client_id,
+ clientSecret: credentials.LiteFarm_Service_Gmail.client_secret,
+ },
+ });
+
+ let obj; // a farm
+ if (currFarms.length > 0) {
+ obj = currFarms[0];
+ }
+ else {
+ return;
+ }
+ if (!fs_regular.existsSync(__dirname + '/temp_files')) {
+ fs_regular.mkdirSync(__dirname + '/temp_files');
+ }
+ await cleanFiles();
+ const farm_id = obj.farm_id;
+ const request_number = obj.request_number;
+ request_id = request_number;
+ const user_id = obj.user_id;
+ const user_email = await getUserEmail(user_id);
+ const template = TEMPLATE;
+
+ template.farm = await baseController.getIndividual(farmModel, farm_id);
+ const user_data = await knex.raw(
+ `
+ SELECT uf.user_id, uf.farm_id, uf.role_id, uf.has_consent, u.created_at, u.first_name, u.last_name, u.profile_picture, u.email, u.phone_number,
+ u.wage, u.is_pseudo, uf.status
+ FROM "userFarm" uf
+ LEFT JOIN
+ "users" u
+ ON uf.user_id = u.user_id
+ WHERE uf.farm_id = '${farm_id}'
+ `
+ );
+ template.users = user_data.rows;
+ template.fields = await baseController.getByForeignKey(fieldModel, 'farm_id', farm_id);
+ template.field_crops = await FieldCropController.getByForeignKey(farm_id);
+
+ const get_shifts = await knex.raw(
+ `
+ SELECT t.shift_id, t.task_id, tp.task_name, t.duration AS "duration_minute", s.break_duration AS "break_duration_minute", s.start_time, s.end_time, s.wage_at_moment AS "hourly_wage", u.user_id, u.first_name, u.last_name, x.crop_id, x.crop_common_name, t.is_field, t.field_id, t.field_crop_id
+ FROM "shiftTask" t
+ LEFT JOIN (
+ SELECT f.field_crop_id, c.crop_id, crop_common_name
+ FROM "fieldCrop" f, "crop" c
+ WHERE f.crop_id = c.crop_id
+ )
+ x ON x.field_crop_id = t.field_crop_id,
+ "shift" s, "users" u, "taskType" tp, "userFarm" uf
+ WHERE s.shift_id = t.shift_id AND s.user_id = u.user_id AND uf.user_id = u.user_id AND uf.farm_id = '${farm_id}'
+ AND t.task_id = tp.task_id
+ `
+ );
+ template.shifts = get_shifts.rows;
+
+ template.expenses = await baseController.getByForeignKey(farmExpenseModel, 'farm_id', farm_id);
+
+ template.sales = await SaleController.getSalesOfFarm(farm_id);
+ for (const sale of template.sales) {
+ // load related prices and yields of this sale
+ await sale.$loadRelated('cropSale.crop.[price(getFarm), yield(getFarm)]', {
+ getFarm: (builder) => {
+ builder.where('farm_id', farm_id);
+ },
+ });
+ }
+
+ await processLogs(farm_id);
+
+
+ await saveJson(template.farm, 'farm');
+ delete(template.users.notification_setting);
+ await saveJson(template.users, 'users');
+ await saveJson(template.fields, 'fields');
+ delete(template.field_crops.crop);
+ await saveJson(template.field_crops, 'field_crops', ['farm_id', 'field_id', 'field_name', 'grid_points.lat', 'grid_points.lng', 'crop_id', 'field_crop_id', 'crop_common_name', 'crop_genus', 'crop_specie', 'crop_group', 'crop_subgroup', 'start_date',
+ 'end_date', 'area_used', 'estimated_production', 'estimated_revenue', 'is_by_bed', 'bed_config', 'field_name', 'deleted', 'yield.quantity_kg/m2', 'price.value_$/kg'
+ ]);
+
+ await saveJson(template.shifts, 'shifts', null);
+ await processSale(template.sales);
+ await saveJson(template.expenses, 'expenses', ['farm_id', 'expense_date', 'picture', 'expense_type_id', 'expense_type', 'note', 'farm_expense_id', 'value']);
+
+ let zip = new AdmZip();
+
+ zip.addLocalFile(__dirname + '/temp_files/farm.csv');
+ zip.addLocalFile(__dirname + '/temp_files/users.csv');
+ zip.addLocalFile(__dirname + '/temp_files/expenses.csv');
+ zip.addLocalFile(__dirname + '/temp_files/fertilizing_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/field_crops.csv');
+ zip.addLocalFile(__dirname + '/temp_files/field_work_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/fields.csv');
+ zip.addLocalFile(__dirname + '/temp_files/harvest_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/irrigation_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/other_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/pesticide_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/sales.csv');
+ zip.addLocalFile(__dirname + '/temp_files/scouting_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/seed_logs.csv');
+ zip.addLocalFile(__dirname + '/temp_files/shifts.csv');
+ zip.addLocalFile(__dirname + '/temp_files/soil_data_logs.csv');
+ zip.writeZip(__dirname + `/temp_files/${farm_id}_data.zip`);
+
+ try {
+ await transporter.sendMail({
+ from: 'LiteFarm ',
+ to: user_email, // list of receivers
+ subject: 'Farm Data Request', // Subject line
+ text: 'Please find your data in the attachment', // plain text body
+ attachments: [
+ // // { // filename and content type is derived from path
+ // // path: __dirname + '/temp_files/farm.csv',
+ // // },
+ // // {
+ // // path: __dirname + '/temp_files/users.csv',
+ // // },
+ // // {
+ // // path: __dirname + '/temp_files/fields.csv',
+ // // },
+ // // {
+ // // path: __dirname + '/temp_files/field_crops.csv',
+ // // },
+ // // {
+ // // path: __dirname + '/temp_files/shifts.csv',
+ // // },
+ // // {
+ // // path: __dirname + '/temp_files/logs.csv',
+ // // },
+ {
+ path: __dirname + `/temp_files/${farm_id}_data.zip`,
+ },
+ // // {
+ // // path: __dirname + '/temp_files/sales.csv',
+ // // },
+ ],
+ auth: {
+ user: 'system@litefarm.org',
+ refreshToken: credentials.LiteFarm_Service_Gmail.refresh_token,
+ },
+ });
+
+ console.log(`FarmDataScheduler: file sent for farm_id: ${farm_id}`);
+
+ await cleanFiles();
+
+ try {
+ await knex('farmDataSchedule')
+ .where({request_number})
+ .update({is_processed: true}, ['request_number', 'is_processed'])
+ }
+ catch (error) {
+ await setHasFailed(request_number);
+ console.log('FarmDataScheduler: failed to update process status', error);
+ }
+ }
+ catch (error) {
+ await setHasFailed(request_number);
+ console.log('FarmDataScheduler: failed to send file\n', error);
+ }
+ })
+ .catch(async (error) => {
+ if (request_id) {
+ await setHasFailed(request_number);
+ }
+ console.log(error);
+ });
+ });
+ }
+}
+
+const setHasFailed = async (request_number) => {
+ try {
+ await knex('farmDataSchedule')
+ .where({request_number})
+ .update({has_failed: true}, ['request_number', 'has_failed'])
+ }
+ catch (error) {
+ console.log('FarmDataScheduler: failed to update failed status', error);
+ }
+};
+
+
+const SALE = {
+ sale_id: null,
+ customer_name: null,
+ sale_date: null,
+ sale_quantity_kg: null,
+ sale_value: null,
+ field_crop_id: null,
+ crop_id: null,
+ crop_common_name: null,
+};
+
+const FERT = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+ fertilizer_id: null,
+ fertilizer_type: null,
+ fertilizer_quantity_kg: null,
+ fert_moisture_percentage: null,
+ fert_n_percentage: null,
+ fert_nh4_n_ppm: null,
+ fert_p_percentage: null,
+ fert_k_percentage: null,
+ fert_mineralization_rate: null,
+};
+
+const PEST = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ pesticide_id: null,
+ pesticide_name: null,
+ pest_entry_interval: null,
+ pest_harvest_interval: null,
+ pest_active_ingredients: null,
+ pest_concentration: null,
+};
+
+const HARV = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ harvest_quantity_kg: null,
+};
+
+const SEED = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ seed_type: null,
+ seed_space_depth_cm: null,
+ seed_space_length_cm: null,
+ seed_space_width_cm: null,
+ seed_rate_seeds_per_m2: null,
+};
+
+const FIEL = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ field_work_type: null,
+};
+
+const SOIL = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ notes: null,
+
+ soil_texture: null,
+ soil_k: null,
+ soil_p: null,
+ soil_n: null,
+ soil_om: null,
+ soil_ph: null,
+ soil_bulk_density_kg_per_m3: null,
+ soil_organic_carbon: null,
+ soil_inorganic_carbon: null,
+ soil_s: null,
+ soil_ca: null,
+ soil_mg: null,
+ soil_zn: null,
+ soil_mn: null,
+ soil_fe: null,
+ soil_cu: null,
+ soil_b: null,
+ soil_c: null,
+ soil_cec: null,
+ soil_na: null,
+ soil_total_carbon: null,
+ soil_depth_cm: null,
+};
+
+const IRRI = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ irrigation_type: null,
+ irri_flow_rate: null,
+ irri_flow_rate_unit: null,
+ irri_hours: null,
+};
+
+const SCOUT = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+
+ scout_type: null,
+};
+
+const OTHER = {
+ activity_id: null,
+ activity_kind: null,
+ first_name: null,
+ last_name: null,
+ user_id: null,
+ date: null,
+ photo: null,
+ field_id: null,
+ field_name: null,
+ field_area_m2: null,
+ field_crop_id: null,
+ crop_common_name: null,
+ notes: null,
+};
+
+const processSale = async (sales) => {
+ let processed = [];
+ for (let sale of sales) {
+ for (let s of sale.cropSale) {
+ let obj = Object.assign({}, SALE);
+ obj.sale_id = sale.sale_id;
+ obj.customer_name = sale.customer_name;
+ obj.sale_date = sale.sale_date;
+ obj.sale_quantity_kg = s.quantity_kg;
+ obj.sale_value = s.sale_value;
+ obj.crop_id = s.crop_id;
+ obj.crop_common_name = s.crop.crop_common_name;
+ processed.push(obj);
+ }
+ }
+ await saveJson(processed, 'sales', Object.keys(SALE));
+};
+
+const getFieldNameNArea = (field_id, fields) => {
+ // name_area[0]: Name, [1]: Area
+ let name_area = [];
+ for (let f of fields) {
+ if (f.field_id === field_id) {
+ name_area.push(f.field_name);
+ name_area.push(f.area);
+ break;
+ }
+ }
+ return name_area;
+};
+
+const processFert = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let processed = [];
+
+ let fertilizer_id = log.fertilizerLog.fertilizer_id;
+ let fertDetail = await baseController.getIndividual(fertilizerModel, fertilizer_id);
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, FERT);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+ logObj.fertilizer_id = fertilizer_id;
+ logObj.fertilizer_quantity_kg = log.fertilizerLog.quantity_kg;
+ logObj.fertilizer_type = fertDetail[0].fertilizer_type;
+ logObj.fert_moisture_percentage = fertDetail[0].moisture_percentage;
+ logObj.fert_n_percentage = fertDetail[0].n_percentage;
+ logObj.fert_nh4_n_ppm = fertDetail[0].nh4_n_ppm;
+ logObj.fert_p_percentage = fertDetail[0].p_percentage;
+ logObj.fert_k_percentage = fertDetail[0].k_percentage;
+ logObj.fert_mineralization_rate = fertDetail[0].mineralization_rate;
+
+ processed.push(logObj);
+ }
+
+ } else if (crop_length > 0) {
+ // has crop so we ignore fields
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, FERT);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.fertilizer_id = fertilizer_id;
+ logObj.fertilizer_quantity_kg = log.fertilizerLog.quantity_kg;
+ logObj.fertilizer_type = fertDetail[0].fertilizer_type;
+ logObj.fert_moisture_percentage = fertDetail[0].moisture_percentage;
+ logObj.fert_n_percentage = fertDetail[0].n_percentage;
+ logObj.fert_nh4_n_ppm = fertDetail[0].nh4_n_ppm;
+ logObj.fert_p_percentage = fertDetail[0].p_percentage;
+ logObj.fert_k_percentage = fertDetail[0].k_percentage;
+ logObj.fert_mineralization_rate = fertDetail[0].mineralization_rate;
+
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+
+};
+
+const processPest = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let pesticide_id = log.pestControlLog.pesticide_id;
+ let pesticideDetail = await baseController.getIndividual(pesticideModel, pesticide_id);
+
+ let processed = [];
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, PEST);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+ logObj.pesticide_id = pesticide_id;
+ logObj.pesticide_name = pesticideDetail[0].pesticide_name;
+ logObj.pest_entry_interval = pesticideDetail[0].entry_interval;
+ logObj.pest_harvest_interval = pesticideDetail[0].harvest_interval;
+ logObj.pest_active_ingredients = pesticideDetail[0].active_ingredients;
+ logObj.pest_concentration = pesticideDetail[0].concentration;
+ processed.push(logObj);
+ }
+
+ } else if (crop_length > 0) {
+ // has crop so we ignore fields
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, PEST);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.pesticide_id = pesticide_id;
+ logObj.pesticide_name = pesticideDetail[0].pesticide_name;
+ logObj.pest_entry_interval = pesticideDetail[0].entry_interval;
+ logObj.pest_harvest_interval = pesticideDetail[0].harvest_interval;
+ logObj.pest_active_ingredients = pesticideDetail[0].active_ingredients;
+ logObj.pest_concentration = pesticideDetail[0].concentration;
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+
+};
+
+const processHarv = async (log) => {
+ let crop_length = log['fieldCrop'].length;
+
+ let activity_id = log.activity_id;
+ let harvDetail = await baseController.getIndividual(harvModel, activity_id);
+
+ let processed = [];
+
+ if (crop_length > 0) {
+ // has a single crop per log
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, HARV);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.harvest_quantity_kg = harvDetail[0].quantity_kg;
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+};
+
+const processSeed = async (log) => {
+ let crop_length = log['fieldCrop'].length;
+
+ let activity_id = log.activity_id;
+ let seedDetail = await baseController.getIndividual(seedModel, activity_id);
+
+ let processed = [];
+
+ if (crop_length > 0) {
+ // has to have more than 0 crops
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, SEED);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.seed_type = seedDetail[0].type;
+ logObj.seed_space_depth_cm = seedDetail[0].space_depth_cm;
+ logObj.seed_space_length_cm = seedDetail[0].space_length_cm;
+ logObj.seed_space_width_cm = seedDetail[0].space_width_cm;
+ logObj.seed_rate_seeds_per_m2 = seedDetail[0]["rate_seeds/m2"];
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+};
+
+const processFieldWork = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let activity_id = log.activity_id;
+ let fieldWorkDetail = await baseController.getIndividual(fieldWorkModel, activity_id);
+
+ let processed = [];
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, FIEL);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+
+ logObj.field_work_type = fieldWorkDetail[0].type;
+ processed.push(logObj);
+ }
+
+ }
+
+ return processed;
+
+};
+
+const processSoil = async (log) => {
+ let field_length = log['field'].length;
+
+ let activity_id = log.activity_id;
+ let soilDetail = await baseController.getIndividual(soilDataModel, activity_id);
+
+ let processed = [];
+
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, SOIL);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+
+ logObj.soil_texture = soilDetail[0].texture;
+ logObj.soil_k = soilDetail[0].k;
+ logObj.soil_p = soilDetail[0].p;
+ logObj.soil_n = soilDetail[0].n;
+ logObj.soil_om = soilDetail[0].om;
+ logObj.soil_ph = soilDetail[0].ph;
+ logObj.soil_bulk_density_kg_per_m3 = soilDetail[0]['bulk_density_kg/m3'];
+ logObj.soil_organic_carbon = soilDetail[0].organic_carbon;
+ logObj.soil_inorganic_carbon = soilDetail[0].inorganic_carbon;
+ logObj.soil_s = soilDetail[0].s;
+ logObj.soil_ca = soilDetail[0].ca;
+ logObj.soil_mg = soilDetail[0].mg;
+ logObj.soil_zn = soilDetail[0].zn;
+ logObj.soil_mn = soilDetail[0].mn;
+ logObj.soil_fe = soilDetail[0].fe;
+ logObj.soil_cu = soilDetail[0].cu;
+ logObj.soil_b = soilDetail[0].b;
+ logObj.soil_c = soilDetail[0].c;
+ logObj.soil_cec = soilDetail[0].cec;
+ logObj.soil_na = soilDetail[0].na;
+ logObj.soil_total_carbon = soilDetail[0].total_carbon;
+ logObj.soil_depth_cm = soilDetail[0].depth_cm;
+
+ processed.push(logObj);
+ }
+
+ return processed;
+
+};
+
+const processIrri = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let processed = [];
+
+ let activity_id = log.activity_id;
+ let irriDetail = await baseController.getIndividual(irriModel, activity_id);
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, IRRI);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+
+ logObj.irrigation_type = irriDetail[0].type;
+ logObj.irri_flow_rate = irriDetail[0]['flow_rate_l/min'];
+ logObj.irri_flow_rate_unit = irriDetail[0].flow_rate_unit;
+ logObj.irri_hours = irriDetail[0].hours;
+
+ processed.push(logObj);
+ }
+
+ } else if (crop_length > 0) {
+ // has crop so we ignore fields
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, IRRI);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.irrigation_type = irriDetail[0].type;
+ logObj.irri_flow_rate = irriDetail[0]['flow_rate_l/min'];
+ logObj.irri_flow_rate_unit = irriDetail[0].flow_rate_unit;
+ logObj.irri_hours = irriDetail[0].hours;
+
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+
+};
+
+const processScout = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let processed = [];
+
+ let activity_id = log.activity_id;
+ let scoutDetail = await baseController.getIndividual(scoutModel, activity_id);
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, SCOUT);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+
+ logObj.scout_type = scoutDetail[0].type;
+
+ processed.push(logObj);
+ }
+
+ } else if (crop_length > 0) {
+ // has crop so we ignore fields
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, SCOUT);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ logObj.scout_type = scoutDetail[0].type;
+
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+
+};
+
+const processOther = async (log) => {
+ let field_length = log['field'].length;
+ let crop_length = log['fieldCrop'].length;
+
+ let processed = [];
+
+ if (crop_length === 0) {
+ // Here: no crop, user selected fields only
+ for (let i = 0; i < field_length; i++) {
+ let logObj = Object.assign({}, OTHER);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.field[i].field_id;
+ logObj.field_name = log.field[i].field_name;
+ logObj.field_area_m2 = log.field[i].area;
+ logObj.notes = log.notes;
+
+ processed.push(logObj);
+ }
+
+ } else if (crop_length > 0) {
+ // has crop so we ignore fields
+
+ for (let i = 0; i < crop_length; i++) {
+ let logObj = Object.assign({}, OTHER);
+ logObj.activity_id = log.activity_id;
+ logObj.activity_kind = log.activity_kind;
+ logObj.first_name = log.first_name;
+ logObj.last_name = log.last_name;
+ logObj.user_id = log.user_id;
+ logObj.date = log.date;
+ logObj.photo = log.photo;
+ logObj.field_id = log.fieldCrop[i].field_id;
+
+ let nameArea = getFieldNameNArea(log.fieldCrop[i].field_id, log.field);
+ logObj.field_name = nameArea[0];
+ logObj.field_area_m2 = nameArea[1];
+
+ logObj.notes = log.notes;
+
+ logObj.field_crop_id = log.fieldCrop[i].field_crop_id;
+ logObj.crop_common_name = log.fieldCrop[i].crop.crop_common_name;
+
+ processed.push(logObj);
+ }
+ }
+
+ return processed;
+
+};
+
+const processLogs = async (farm_id) => {
+ try {
+ let allLogs = await logServices.getLogByFarm(farm_id);
+ //console.log(JSON.stringify(allLogs));
+ let fertLogs = [], pestLogs = [], harvLogs = [], seedLogs = [], fieldLogs = [], soilLogs = [], irriLogs = [],
+ scoutLogs = [], otherLogs = [];
+
+ for (let log of allLogs) {
+ if (log.activity_kind === 'fertilizing') {
+ let processed = await processFert(log);
+ fertLogs = fertLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'pestControl') {
+ let processed = await processPest(log);
+ pestLogs = pestLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'harvest') {
+ let processed = await processHarv(log);
+ harvLogs = harvLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'seeding') {
+ let processed = await processSeed(log);
+ seedLogs = seedLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'fieldWork') {
+ let processed = await processFieldWork(log);
+ fieldLogs = fieldLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'soilData') {
+ let processed = await processSoil(log);
+ soilLogs = soilLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'irrigation') {
+ let processed = await processIrri(log);
+ irriLogs = irriLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'scouting') {
+ let processed = await processScout(log);
+ scoutLogs = scoutLogs.concat(processed);
+ }
+ else if (log.activity_kind === 'other') {
+ let processed = await processOther(log);
+ otherLogs = otherLogs.concat(processed);
+ }
+ }
+
+ await saveJson(fertLogs, 'fertilizing_logs', Object.keys(FERT));
+ await saveJson(pestLogs, 'pesticide_logs', Object.keys(PEST));
+ await saveJson(harvLogs, 'harvest_logs', Object.keys(HARV));
+ await saveJson(seedLogs, 'seed_logs', Object.keys(SEED));
+ await saveJson(fieldLogs, 'field_work_logs', Object.keys(FIEL));
+ await saveJson(soilLogs, 'soil_data_logs', Object.keys(SOIL));
+ await saveJson(irriLogs, 'irrigation_logs', Object.keys(IRRI));
+ await saveJson(scoutLogs, 'scouting_logs', Object.keys(SCOUT));
+ await saveJson(otherLogs, 'other_logs', Object.keys(OTHER));
+
+
+ }
+ catch (err) {
+ throw err;
+ }
+};
+
+const saveJson = async (jsonContent, fileName, keys) => {
+ let csv;
+ try {
+ csv = await converter.json2csvAsync(jsonContent, {'expandArrayObjects': true, keys});
+ await fs.writeFile(__dirname + `/temp_files/${fileName}.csv`, csv, 'utf8');
+ // console.log(`Saved file ${fileName}`);
+ }
+ catch (error) {
+ console.log(error);
+ throw error;
+ }
+};
+
+const grabFarmIDsToRun = async () => {
+ const data = await knex.raw(`SELECT f.farm_id, f.request_number, f.user_id
+ FROM "farmDataSchedule" f
+ WHERE f.is_processed = FALSE AND f.has_failed = FALSE
+ `);
+ return data.rows
+};
+
+const getUserEmail = async (user_id) => {
+ const data = await knex.raw(`SELECT u.email
+ FROM "users" u
+ WHERE u.user_id = '${user_id}'
+ `);
+ return data.rows[0].email;
+};
+
+const cleanFiles = async () => {
+ const directory = __dirname + '/temp_files';
+ try {
+ await fse.emptyDir(directory);
+ } catch (err) {
+ console.log(err);
+ throw err;
+ }
+};
+
+module.exports = sendUserFarmDataScheduler;
+
diff --git a/packages/api/src/jobs/waterBalance/waterBalance.js b/packages/api/src/jobs/waterBalance/waterBalance.js
new file mode 100644
index 0000000000..13004891be
--- /dev/null
+++ b/packages/api/src/jobs/waterBalance/waterBalance.js
@@ -0,0 +1,533 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (waterBalance.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../../knexfile')[environment];
+const knex = Knex(config);
+const rp = require('request-promise');
+const credentials = require('../../credentials');
+const endPoints = require('../../endPoints');
+const scheduler = require('node-schedule');
+const waterBalanceModel = require('../../models/waterBalanceModel');
+const waterBalanceScheduleModel = require('../../models/waterBalanceSchedule');
+const weatherModel = require('../../models/weatherModel');
+const weatherHourlyModel = require('../../models/weatherHourlyModel');
+
+/* eslint-disable no-console */
+
+
+class waterBalanceScheduler {
+ static registerHourlyJob() {
+ const rule = new scheduler.RecurrenceRule();
+ rule.hour = [new scheduler.Range(1, 23)];
+ rule.minute = 0;
+ // scheduler.scheduleJob('*/20 * * * * *', () => {
+ scheduler.scheduleJob(rule, () => {
+ grabFarmIDsToRun()
+ .then((currFarms) => {
+ if (Array.isArray(currFarms) && currFarms.length > 0) {
+ currFarms.forEach(async (farmID) => {
+ saveWeatherData(farmID);
+ })
+ }
+ })
+ .catch((error) => {
+ console.log(error)
+ });
+ console.log('Water Balance Hourly Calculation has Ran')
+ });
+ }
+
+ static registerDailyJob() {
+ const rule = new scheduler.RecurrenceRule();
+ rule.hour = 0;
+ rule.minute = 0;
+ // scheduler.scheduleJob('*/10 * * * * *', () => {
+ scheduler.scheduleJob(rule, () => {
+ grabFarmIDsToRun().then((farms) => {
+ if (Array.isArray(farms) && farms.length > 0) {
+ farms.forEach(async (farmID) => {
+ return waterBalanceDailyCalc(farmID)
+ .then((dailyCalculationsCropArray) => {
+ return callDB(dailyCalculationsCropArray)
+ })
+ .then((farmID) => {
+ return removeWeather(farmID)
+ })
+ .then((farmID) => {
+ return saveWeatherData(farmID)
+ })
+ .catch((error) => {
+ console.log(error)
+ })
+ })
+ }
+ });
+ console.log('Water Balance Daily Calculation has Ran')
+ });
+ }
+
+ static async addWaterBalance(waterBalances) {
+ await waterBalances.forEach(async (waterBalance) => {
+ try {
+ await waterBalanceModel.query().insert(waterBalance).returning('*');
+ } catch (e) {
+ console.log(e);
+ }
+ });
+ console.log('Added a Water Balance')
+ }
+
+ static async registerFarmID(farmID) {
+ try {
+ await waterBalanceScheduleModel.query().insert({ farm_id: farmID });
+ console.log('Water Balance: Registered a new FarmID')
+ } catch (e) {
+ console.log(e);
+ }
+ }
+
+ static async checkFarmID(farmID) {
+ const dataPoints = await knex.raw(`SELECT w.farm_id
+ FROM "waterBalanceSchedule" w
+ WHERE w.farm_id = '${farmID}'`);
+ return (dataPoints.rows.length === 1)
+ }
+}
+
+const grabFarmIDsToRun = async () => {
+ const dataPoints = await knex.raw(`SELECT w.farm_id
+ FROM "waterBalanceSchedule" w`);
+ return dataPoints.rows
+};
+
+const saveWeatherData = async (dataPoint) => {
+ const farmID = dataPoint.farm_id;
+ const dataPoints = await knex.raw(
+ `SELECT f.field_id, f.grid_points
+ FROM "field" f
+ WHERE f.farm_id = '${farmID}'`
+ );
+ dataPoints.rows.forEach(async (field) => {
+ const weatherData = await callOpenWeatherAPI(field.grid_points[0]);
+ saveWeatherToDisk(weatherData, field, farmID)
+ })
+};
+
+const saveWeatherToDisk = async (weatherData, field) => {
+ const hourlyWeatherData = {
+ created_at: new Date(),
+ min_degrees: weatherData['main']['temp_min'],
+ max_degrees: weatherData['main']['temp_max'],
+ precipitation: calculatePrecipitation(weatherData),
+ min_humidity: weatherData['main']['humidity'],
+ max_humidity: weatherData['main']['humidity'],
+ wind_speed: weatherData['wind']['speed'],
+ field_id: field.field_id,
+ data_points: 1,
+ };
+ try {
+ const data = await knex.raw (`
+ SELECT *
+ FROM "weatherHourly" w
+ WHERE w.field_id = '${field.field_id}'
+ `);
+ if (data.rows && data.rows.length > 0) {
+ const currentWeather = compareWeatherData(data.rows[0], hourlyWeatherData);
+ await knex.raw(
+ `UPDATE "weatherHourly"
+ SET min_degrees = '${currentWeather.min_degrees}', max_degrees = '${currentWeather.max_degrees}', min_humidity = '${currentWeather.min_humidity}',
+ max_humidity = '${currentWeather.max_humidity}', precipitation = '${currentWeather.precipitation}', wind_speed = '${currentWeather.wind_speed}',
+ data_points = '${currentWeather.data_points}'
+ WHERE field_id = '${currentWeather.field_id}'
+ `)
+ } else {
+ await weatherHourlyModel.query().insert(hourlyWeatherData).returning('*');
+ }
+ } catch (e) {
+ console.log(e);
+ }
+};
+
+const compareWeatherData = (existingWeatherData, newWeatherData) => {
+ const returningWeatherData = {};
+
+ for (const key in existingWeatherData) {
+ switch (key) {
+ case 'min_degrees':
+ returningWeatherData[key] = Math.min(existingWeatherData[key], newWeatherData[key]);
+ break;
+ case 'max_degrees':
+ returningWeatherData[key] = Math.max(existingWeatherData[key], newWeatherData[key]);
+ break;
+ case 'precipitation':
+ returningWeatherData[key] = existingWeatherData[key] + newWeatherData[key];
+ break;
+ case 'min_humidity':
+ returningWeatherData[key] = Math.min(existingWeatherData[key], newWeatherData['min_humidity']);
+ break;
+ case 'max_humidity':
+ returningWeatherData[key] = Math.max(existingWeatherData[key], newWeatherData['max_humidity']);
+ break;
+ case 'wind_speed':
+ returningWeatherData[key] = existingWeatherData[key] + newWeatherData[key];
+ break;
+ case 'field_id':
+ returningWeatherData[key] = existingWeatherData[key];
+ break;
+ case 'data_points':
+ returningWeatherData[key] = existingWeatherData[key] + 1;
+ break;
+ default:
+ // should be no default case
+ }
+ }
+ return returningWeatherData
+};
+
+const removeWeather = async (farmID) => {
+ try {
+ await knex.raw(`DELETE FROM "weatherHourly"
+ WHERE weather_hourly_id IN
+ (SELECT w.weather_hourly_id
+ FROM "field" f, "weatherHourly" w
+ WHERE f.farm_id = '${farmID}' and w.field_id = f.field_id)`);
+ console.log('Deleted Weather For FarmID: ', farmID);
+ return { farm_id: farmID }
+ } catch(e) {
+ console.log(e)
+ }
+};
+
+const waterBalanceDailyCalc = async (dataPoint) => {
+ const previousDay = await formatDate(new Date(), true);
+ const currentDay = await formatDate(new Date());
+ const farmID = dataPoint.farm_id;
+ const dataPoints = await knex.raw(
+ `
+ SELECT c.crop_common_name, c.crop_id, fc.field_crop_id, f.field_id, c.max_rooting_depth, c.mid_kc, AVG(sdl.om) as om, f.grid_points, il."flow_rate_l/min", il.hours, fc.area_used, MAX(sdl.texture) as texture
+ FROM "field" f, "crop" c, "users" u,
+ "activityLog" al,
+ "soilDataLog" sdl,
+ "activityFields" af,
+ "fieldCrop" fc
+ LEFT JOIN (
+ SELECT w.field_id, w.crop_id, w.soil_water, w.created_at FROM "waterBalance" w, "field" f
+ WHERE w.field_id = f.field_id and f.farm_id = '${farmID}' and to_char(date(w.created_at), 'YYYY-MM-DD') = '${previousDay}')
+ w ON w.field_id = fc.field_id and w.crop_id = fc.crop_id
+ LEFT JOIN (
+ SELECT SUM(il."flow_rate_l/min") as "flow_rate_l/min", SUM(il.hours) as hours,ac.field_crop_id
+ FROM "irrigationLog" il, "activityCrops" ac, "activityLog" al
+ WHERE il.activity_id = ac.activity_id and al.activity_id = il.activity_id
+ and to_char(date(al.date), 'YYYY-MM-DD') = '${currentDay}'
+ GROUP BY ac.field_crop_id
+ ) il ON il.field_crop_id = fc.field_crop_id
+ WHERE fc.field_id = f.field_id and f.farm_id = '${farmID}' and c.crop_id = fc.crop_id and u.farm_id = '${farmID}' and al.activity_id = sdl.activity_id and af.field_id = fc.field_id and af.activity_id = sdl.activity_id
+ GROUP BY c.crop_common_name, c.crop_id, fc.field_crop_id,c.max_rooting_depth, c.mid_kc, f.grid_points, f.field_id, il."flow_rate_l/min", il.hours, fc.area_used, w.soil_water
+ `
+ );
+ if (dataPoints.rows) {
+ const weatherDataByField = await grabWeatherData(farmID);
+ postWeatherToDB(weatherDataByField);
+ const returnValue = await doWaterBalanceCalculations(dataPoints.rows, weatherDataByField, farmID)
+ returnValue['farm_id'] = farmID;
+ return returnValue;
+ } else {
+ // eslint-disable-next-line no-console
+ console.log('No Data found for Water Balance Calculation');
+ }
+};
+
+
+const doWaterBalanceCalculations = async (data, weatherDataByField) => {
+ const promises = [];
+ const textures = {
+ 'sand': { sand: 0.88, clay: 0.05 },
+ 'loamySand': { sand: 0.80, clay: 0.05 },
+ 'sandyLoam': { sand: 0.65, clay: 0.10 },
+ 'loam': { sand: 0.40, clay: 0.20 },
+ 'siltyLoam': { sand: 0.20, clay: 0.15 },
+ 'silt': { sand: 0.10, clay: 0.05 },
+ 'sandyClayLoam': { sand: 0.60, clay: 0.25 },
+ 'clayLoam': { sand: 0.30, clay: 0.35 },
+ 'siltyClayLoam': { sand: 0.10, clay: 0.35 },
+ 'siltyClay': { sand: 0.10, clay: 0.45 },
+ 'sandyClay': { sand: 0.50, clay: 0.40 },
+ 'clay': { sand: 0.25, clay: 0.50 },
+ };
+ data.forEach(async (crop) => {
+ promises.push(new Promise((resolve, reject) => {
+ const texture = crop.texture;
+ calculateSoilWaterContent(crop, weatherDataByField[crop.field_id], textures)
+ .then((soilWaterContent) => {
+ return {
+ soilWaterContent,
+ plantAvailableWater: soilWaterContent - calculateWiltingPoint(textures[texture], crop.om, crop.max_rooting_depth),
+ }
+ })
+ .then((calculations) => {
+ resolve({
+ field_id: crop.field_id,
+ crop_id: crop.crop_id,
+ soil_water: calculations.soilWaterContent,
+ plant_available_water: calculations.plantAvailableWater,
+ })
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ }));
+ });
+
+ return await Promise.all(promises).then((cropArray) => {
+ return cropArray
+ })
+};
+
+const calculateSoilWaterContent = async (data, weatherData, textures) => {
+ // reference: https://ora.ox.ac.uk/objects/uuid:a6603a69-dd8d-478b-8756-b06163677cf1/download_file?file_format=pdf&safe_filename=Mehrabi_PhDThesis.pdf&type_of_work=Thesis
+ const texture = data.texture;
+ const averageWeatherData = weatherData;
+ const fieldCapacity = calculateFieldCapacity(textures[texture], data.om, data.max_rooting_depth);
+ const oldSoilWaterContent = data.soil_water;
+ let precipitation = calculatePrecipitation(weatherData);
+ const irrigation = calculateIrrigation(data['flow_rate_l/min'], data['hours'], data['area_used']);
+ precipitation += irrigation;
+ const ET = await calculateEvapotranspiration(data, averageWeatherData);
+ if (oldSoilWaterContent + precipitation > fieldCapacity) {
+ return fieldCapacity - ET;
+ } else {
+ return (oldSoilWaterContent + precipitation) - ET;
+ }
+};
+
+const calculateIrrigation = (flow_rate_l, hours, area_used) => {
+ if (flow_rate_l !== null && hours !== null) {
+ const minutes = hours * 60;
+ const volume = flow_rate_l * minutes;
+ return volume / area_used
+ }
+ else return 0
+};
+
+const postWeatherToDB = async (weatherDataMap) => {
+ for (const key in weatherDataMap) {
+ try {
+ await weatherModel.query().insert(weatherDataMap[key]).returning('*');
+ console.log('Posted Weather Data')
+ } catch (e) {
+ console.log(e);
+ }
+ }
+};
+
+const grabWeatherData = async (farmID) => {
+ const weatherData = {};
+ const dataPoints = await knex.raw(`
+ SELECT f.field_id, w.min_degrees as min_degrees, w.max_degrees as max_degrees, w.min_humidity as min_humidity,
+ w.max_humidity as max_humidity, w.precipitation as precipitation, w.wind_speed as wind_speed, w.data_points as data_points
+ FROM "weatherHourly" w, "field" f
+ WHERE w.field_id = f.field_id and f.farm_id = '${farmID}'
+ `);
+ if (dataPoints.rows) {
+ dataPoints.rows.forEach((field) => {
+ field.wind_speed = field.wind_speed / field.data_points;
+ weatherData[field.field_id] = field
+ });
+ return weatherData;
+ } else {
+ console.log('No Weather Data for Farm: ', farmID)
+ }
+};
+const calculatePrecipitation = (weatherData) => {
+ if (weatherData) {
+ if (weatherData['rain'] != null) {
+ return weatherData['rain']['1h'] || weatherData['rain']['3h']
+ } else if (weatherData['snow'] != null) {
+ return weatherData['snow']['1h'] || weatherData['snow']['3h']
+ } else {
+ return 0
+ }
+ } else {
+ return 0
+ }
+};
+
+const calculateWiltingPoint = (textureObject, organicMatter, rootingDepth) => {
+ // reference: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.452.9733&rep=rep1&type=pdf
+ const wiltingPoint_1 = (-0.024 * textureObject.sand) + (0.487 * textureObject.clay) + 0.006 * organicMatter
+ + 0.005 * (textureObject.sand * textureObject.clay) - 0.013 * (textureObject.clay * organicMatter)
+ + 0.068 * (textureObject.sand * textureObject.clay) + 0.031;
+
+ const wiltingPoint_2 = wiltingPoint_1 + (0.14 * wiltingPoint_1 - 0.02);
+ return wiltingPoint_2 * rootingDepth
+};
+
+const calculateFieldCapacity = (textureObject, organicMatter, rootingDepth) => {
+ // reference: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.452.9733&rep=rep1&type=pdf
+ const fieldCapacity_1 = (-0.251 * textureObject.sand) + (0.195 * textureObject.clay) + (0.011 * organicMatter)
+ + 0.006 * (textureObject.sand * organicMatter) - 0.027 * (textureObject.clay * organicMatter)
+ + 0.452 * (textureObject.sand * textureObject.clay) + 0.299
+ const fieldCapacity_2 = fieldCapacity_1 + (1.283 * Math.pow(fieldCapacity_1, 2)
+ - 0.374 * fieldCapacity_1 - 0.015);
+ return fieldCapacity_2 * rootingDepth
+};
+
+const calculateEvapotranspiration = async (data, weatherData) => {
+ // reference: http://www.fao.org/3/X0490E/x0490e08.htm#eto%20calculated%20with%20different%20time%20steps
+ if (weatherData) {
+ const tal = 1; //clear sky transmissivity
+ const albedo = 0.23;
+ const grid_point = data.grid_points[0];
+ const averageTemperature = (weatherData['min_degrees'] + weatherData['max_degrees']) / 2;
+ const elevationData = await callGoogleMapsAPI(grid_point);
+ const windSpeed = calculateWindSpeed(weatherData['wind_speed']);
+ const extraTSolarRadiation = calculateExtraTSolarRadiation(grid_point, elevationData);
+ // solar radiation calculation reference: https://agriculture.alberta.ca/acis/docs/Estimating-solar-radiation-using-daily-max-and-min-temperatures-data-y2014_m06_d13.pdf
+ const solarRadiation = calculateSolarRadiation(weatherData, extraTSolarRadiation);
+ const slope = calculateSlope(averageTemperature);
+ const psychometricConstant = calculatePsychometricConstant(elevationData, averageTemperature);
+ const saturatedVP = (calculateSaturatedVapourPressure(weatherData['min_degrees']) + calculateSaturatedVapourPressure(weatherData['max_degrees'])) / 2;
+ const actualVP = (calculateActualVapourPressure(weatherData['min_degrees'], weatherData['max_humidity'])
+ + calculateActualVapourPressure(weatherData['max_degrees'], weatherData['min_humidity'])) / 2;
+ const rnl = calculateRNL(weatherData['min_degrees'], weatherData['max_degrees'], solarRadiation, actualVP, extraTSolarRadiation, tal);
+ const rns = calculateRNS(solarRadiation, albedo);
+
+ return (0.408 * slope * (rns - rnl) + psychometricConstant * (900 / (averageTemperature + 273)) * windSpeed * (saturatedVP - actualVP)) / (slope + psychometricConstant * (1 + 0.34 * windSpeed))
+ } else {
+ return 0;
+ }
+};
+
+const calculateWindSpeed = (windSpeed) => {
+ const calculatedWindSpeed = windSpeed * 4.87 / Math.log(67.8 * 10 - 5.42);
+ return Math.round(calculatedWindSpeed * 1000) / 1000
+};
+
+const calculateRNL = (minTemp, maxTemp, solarRadiation, actualVapourPressure, extraT, tal) => {
+ return 4.903e-09 * ((Math.pow(maxTemp + 273.16, 4) + Math.pow(minTemp + 273.16, 4)) / 2) * (0.34 - 0.14 * Math.sqrt(actualVapourPressure)) * (1.35 * solarRadiation / (extraT * tal) - 0.35)
+};
+
+const calculateRNS = (solarRadiation, albedo) => {
+ return (1 - albedo) * solarRadiation
+};
+
+const calculatePsychometricConstant = (elevation, averageTemperature) => {
+ // reference: http://www.fao.org/3/X0490E/x0490e0j.htm#annex%202.%20meteorological%20tables
+ const p = 101.3 * (Math.pow((293 - 0.0065 * elevation) / 293, 5.26));
+ return (1.013e-03 * p) / (0.622 * (2.501 - 0.002361 * averageTemperature));
+};
+
+const calculateSlope = (temperature) => {
+ // reference: http://www.fao.org/3/X0490E/x0490e0j.htm#annex%202.%20meteorological%20tables
+ return (4098 * (0.6108 * Math.exp(17.27 * temperature / (temperature + 237.3)))) / Math.pow(temperature + 237.3, 2)
+};
+
+const calculateExtraTSolarRadiation = (data) => {
+ // data is an array of gridpoints from a field
+
+ const latitude = data.lat;
+ const dayOfYear = grabDayOfYear();
+ const latitudeInRadian = latitude * Math.PI / 180;
+ const corrEarthSunDist = 1 + 0.0334 * Math.cos(0.01721 * dayOfYear - 0.0552);
+ const solarDecl = 0.4093 * Math.sin((2 * Math.PI * (284 + dayOfYear)) / 365);
+ const daylightTimeFactor = Math.acos(-Math.tan(latitudeInRadian) * Math.tan(solarDecl));
+
+ return 4.921 * 24 / Math.PI * corrEarthSunDist *
+ (Math.sin(latitudeInRadian) * Math.sin(solarDecl) * daylightTimeFactor + Math.cos(latitudeInRadian) * Math.cos(solarDecl)) *
+ Math.sin(daylightTimeFactor)
+};
+
+const calculateSolarRadiation = (weatherData, extraTSolar) => {
+ if (weatherData) {
+ return 0.16 * extraTSolar * (weatherData['max_degrees'] - weatherData['min_degrees'])
+ } else {
+ return 1
+ }
+};
+const calculateSaturatedVapourPressure = (temperature) => {
+ return 0.6108 * Math.exp((17.27 * temperature) / (temperature + 237.3))
+};
+
+const calculateActualVapourPressure = (temperature, humidity) => {
+ const saturatedVP = calculateSaturatedVapourPressure(temperature);
+ return saturatedVP * humidity / 100
+};
+
+const grabDayOfYear = () => {
+ const now = new Date();
+ const start = new Date(now.getFullYear(), 0, 0);
+ const diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
+ const oneDay = 1000 * 60 * 60 * 24;
+ return Math.floor(diff / oneDay);
+};
+
+const callOpenWeatherAPI = async (gridPoint) => {
+ const options = {
+ uri: endPoints.openWeatherAPI,
+ qs: {
+ lon: gridPoint['lng'],
+ lat: gridPoint['lat'],
+ units: 'metric',
+ APPID: credentials.OPEN_WEATHER_APP_ID,
+ },
+ };
+ return await rp(options)
+ .then((data) => {
+ return JSON.parse(data);
+ })
+ .catch((err) => {
+ return err
+ })
+};
+
+const callGoogleMapsAPI = async (gridPoint) => {
+ const options = {
+ uri: endPoints.googleMapsAPI,
+ qs: {
+ locations: gridPoint.lat + ',' + gridPoint.lng,
+ key: credentials.GOOGLE_API_KEY,
+ },
+ };
+ return await rp(options)
+ .then((data) => {
+ const googleMapsInfo = JSON.parse(data);
+ return googleMapsInfo['results'][0]['elevation'];
+ })
+};
+
+const callDB = (contentFile) => {
+ contentFile.forEach((calculation) => {
+ calculation['soil_water'] = Math.round(calculation['soil_water'] * 100) / 100;
+ calculation['plant_available_water'] = Math.round(calculation['plant_available_water'] * 100) / 100;
+ });
+ waterBalanceScheduler.addWaterBalance(contentFile);
+ return contentFile.farm_id;
+};
+
+const formatDate = (date, prevDay) => {
+ const d = new Date(date), year = d.getFullYear();
+ let month = '' + (d.getMonth() + 1);
+ let day = prevDay ? '' + d.getDate() - 1: '' + d.getDate(); // I want to grab the previous dates soilWater so I subtract one
+
+ if (month.length < 2) month = '0' + month;
+ if (day.length < 2) day = '0' + day;
+
+ return [year, month, day].join('-');
+};
+
+module.exports = waterBalanceScheduler;
+
diff --git a/packages/api/src/middleware/acl/authFarmId.js b/packages/api/src/middleware/acl/authFarmId.js
new file mode 100644
index 0000000000..3145e66d60
--- /dev/null
+++ b/packages/api/src/middleware/acl/authFarmId.js
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (authFarmId.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const { Model } = require('objection');
+
+async function authFarmId(req, res, next) {
+ const knex = Model.knex();
+ const farm_id = req.params.farm_id;
+ if (farm_id) {
+ // console.log(farm_id);
+ // user id is contained in attribute sub in this format: 'auth0|5b0560215d7d1617fd7ed217'
+ const user_id = req.user.sub.split('|')[1];
+ // console.log("check farm_id", user_id, farm_id);
+ const farms = await knex.raw(`SELECT uf.farm_id
+ FROM "userFarm" uf
+ WHERE uf.user_id = '${user_id}'`);
+
+ if (farms && farms.rows.length) {
+ let is_found = false;
+ for(const f of farms.rows){
+ if(f.farm_id === farm_id){
+ is_found = true;
+ next();
+ }
+ }
+ if(!is_found){
+ res.status(401).send('user not authorized to access farm with specified farm_id');
+ }
+ } else {
+ // console.log('failed in authFarmId: ', user_id, farm_id);
+ res.status(401).send('user not authorized to access farm with specified farm_id');
+ }
+ } else {
+ next();
+ }
+}
+
+module.exports = authFarmId;
diff --git a/packages/api/src/middleware/acl/checkEditPrivilege.js b/packages/api/src/middleware/acl/checkEditPrivilege.js
new file mode 100644
index 0000000000..f1e3d1584f
--- /dev/null
+++ b/packages/api/src/middleware/acl/checkEditPrivilege.js
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (checkEditPrivilege.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const { Model } = require('objection');
+
+
+
+const checkEditPrivilege = () => {
+
+ return async (req, res, next) => {
+ const knex = Model.knex();
+ const farm_id = req.params.farm_id;
+ const edit_user_id = req.params.user_id;
+ const request_user_id = req.user.sub.split('|')[1];
+
+ if (farm_id) {
+ // console.log(farm_id);
+ // user id is contained in attribute sub in this format: 'auth0|5b0560215d7d1617fd7ed217'
+ const farms = await knex.raw(`SELECT *
+ FROM "userFarm" uf
+ WHERE uf.user_id = '${request_user_id}' AND uf.farm_id = '${farm_id}' `);
+
+
+ let is_found = false;
+ if (farms && farms.rows.length) {
+ for (let f of farms.rows) {
+ if (f.farm_id === farm_id) {
+ is_found = true;
+ if (f.role_id !== 1 && f.role_id !== 2) {
+ return res.status(401).send('user not authorized to edit user').end();
+ }
+ }
+ }
+ if (!is_found) {
+ return res.status(401).send('user not authorized to access farm with specified farm_id').end();
+ }
+ } else {
+ // console.log('failed in authFarmId: ', user_id, farm_id);
+ return res.status(401).send('user not authorized to access farm with specified farm_id').end();
+ }
+ }
+
+ if (edit_user_id) {
+ const userRow = await knex.raw(
+ `SELECT *
+ FROM "userFarm" uf
+ WHERE uf.user_id = '${edit_user_id}'
+ AND uf.farm_id = '${farm_id}'
+ `
+ );
+
+ if (userRow && userRow.rows && userRow.rows.length) {
+ const payload = req.body;
+ if (payload.first_name && payload.first_name.toString().length > 0){
+ return res.status(403).send('First name may not be modified').end();
+ }
+ if (payload.last_name && payload.last_name.toString().length > 0){
+ return res.status(403).send('Last name may not be modified').end();
+ }
+ if (req.body && req.body.email && req.body.email.length > 0 && !req.body.email_needs_update){
+ return res.status(403).send('Email may not be modified').end();
+ }else if(userRow.rows[0].role_id && userRow.rows[0].role_id !== 4){
+ return res.status(403).send('Email may not be modified').end();
+ }
+ if (payload.wage && payload.wage.amount && (Number(payload.wage.amount) < 0 || Number(payload.wage.amount) > 999999999999.99)){
+ return res.status(403).send('Wage must be a valid, non-negative decimal').end();
+ }
+ if (payload.wage && payload.wage.type && payload.wage.type !== 'hourly') {
+ return res.status(403).send('Wage type must be Hourly for this version.').end();
+ }
+ next();
+ } else {
+ return res.status(404).send('User to be edited not found').end();
+ }
+ }
+ }
+
+};
+
+module.exports = checkEditPrivilege;
diff --git a/packages/api/src/middleware/acl/checkJwt.js b/packages/api/src/middleware/acl/checkJwt.js
new file mode 100644
index 0000000000..df6b89f61b
--- /dev/null
+++ b/packages/api/src/middleware/acl/checkJwt.js
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (checkJwt.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const findAuth0Uri = require('../../util');
+const jwt = require('express-jwt');
+const jwksRsa = require('jwks-rsa');
+const auth0Uri = findAuth0Uri();
+
+// Authentication middleware. When used, the
+// Access Token must exist and be verified against
+// the Auth0 JSON Web Key Set
+const checkJwt = jwt({
+ // Dynamically provide a signing key
+ // based on the kid in the header and
+ // the signing keys provided by the JWKS endpoint.
+ secret: jwksRsa.expressJwtSecret({
+ cache: true,
+ rateLimit: true,
+ jwksRequestsPerMinute: 5,
+ jwksUri: `${auth0Uri}/.well-known/jwks.json`,
+ }),
+
+ // Validate the audience and the issuer.
+ aud: 'http://localhost:5000',
+ issuer: `${auth0Uri}/`,
+ algorithms: ['RS256'],
+});
+
+module.exports = checkJwt;
diff --git a/packages/api/src/middleware/acl/checkOwnership.js b/packages/api/src/middleware/acl/checkOwnership.js
new file mode 100644
index 0000000000..f612c87469
--- /dev/null
+++ b/packages/api/src/middleware/acl/checkOwnership.js
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (checkOwnership.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const { Model } = require('objection');
+
+// relation must be one of field, plan, farmExpense, farmCrop, or to do
+const checkOwnership = (relation) => {
+ return async function authRelation(req, res, next) {
+ const knex = Model.knex();
+ const id = req.params.id;
+ if (id) {
+ let sqlQuery;
+ // console.log(farm_id);
+ // user id is contained in attribute sub in this format: 'auth0|5b0560215d7d1617fd7ed217'
+ const user_id = req.user.sub.split('|')[1];
+ // console.log(`check ${relation}_id`, user_id, id);
+
+ switch (relation) {
+ case 'shift':
+ case 'log':
+ case 'notification':
+ sqlQuery = `SELECT DISTINCT u.user_id
+ FROM "${relation}" r, "users" u
+ WHERE u.user_id = '${user_id}' AND r.${relation}_id = '${id}' AND u.user_id = r.user_id`;
+ break;
+ case 'sale':
+ sqlQuery = `SELECT DISTINCT u.user_id
+ FROM "${relation}" s, "users" u
+ WHERE u.user_id = '${user_id}' AND s.${relation}_id = '${id}' AND u.farm_id = s.farm_id`;
+ break;
+ case 'fieldCrop':
+ sqlQuery = `SELECT DISTINCT u.user_id
+ FROM "${relation}" r, "users" u, "field" f
+ WHERE u.user_id = '${user_id}' AND r.field_crop_id = '${id}' AND f.field_id = r.field_id AND f.farm_id = u.farm_id`;
+ break;
+ case 'nitrogenSchedule':
+ sqlQuery = `SELECT DISTINCT u.user_id
+ FROM "${relation}" r, "users" u
+ WHERE u.user_id = '${user_id}' AND r.nitrogen_schedule_id = '${id}' AND u.farm_id = r.farm_id`;
+ break;
+ default:
+ sqlQuery = `SELECT DISTINCT u.user_id
+ FROM "${relation}" r, "users" u
+ WHERE u.user_id = '${user_id}' AND r.${relation}_id = '${id}' AND u.farm_id = r.farm_id`;
+ }
+
+ const verified = await knex.raw(sqlQuery);
+ if (verified.rowCount) {
+ next();
+ } else {
+ // console.log('failed in check ownership');
+ res.status(401).send(`user not authorized to access ${relation} with specified ${relation}_id`);
+ }
+ } else {
+ next();
+ }
+ };
+};
+
+module.exports = checkOwnership;
diff --git a/packages/api/src/middleware/acl/checkScope.js b/packages/api/src/middleware/acl/checkScope.js
new file mode 100644
index 0000000000..8b7c5b6c53
--- /dev/null
+++ b/packages/api/src/middleware/acl/checkScope.js
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (checkScope.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../../knexfile')[environment];
+const knex = Knex(config);
+
+const getScopes = async (user_id, farm_id) => {
+ // essential to fetch the most updated userFarm info to know user's most updated granted access
+ const dataPoints = await knex.raw(
+ `SELECT p.name
+ FROM "userFarm" uf, "rolePermissions" rp, "permissions" p
+ WHERE uf.farm_id = '${farm_id}'
+ and uf.user_id = '${user_id}'
+ and uf.role_id = rp.role_id
+ and rp.permission_id = p.permission_id
+ and uf.status = 'Active'`
+ );
+
+ return dataPoints.rows;
+};
+
+/**
+ * Middleware for checking permissions for user. Read auth0 documentation on adding custom claims to id_tokens, and check rules page in litefarm auth0 dashboard
+ * for more information. Permissions were added to id_token by adding a custom claim using rules in auth0
+ * @param expectedScopes - array of required scopes to make request [ 'get:crops', 'add:sales' ]
+ */
+const checkScope = (expectedScopes) => {
+ if (!Array.isArray(expectedScopes)){
+ throw new Error('Parameter expectedScopes must be an array of strings representing the scopes for the endpoint(s)');
+ }
+
+ return async (req, res, next) => {
+ if (expectedScopes.length === 0){
+ return next();
+ }
+
+ const { headers } = req;
+ const { user_id, farm_id } = headers; // these are the minimum props needed for most endpoints' authorization
+ if (!user_id) return res.status(400).send('Missing user_id in headers');
+ if (!farm_id) return res.status(400).send('Missing farm_id in headers');
+
+ const scopes = await getScopes(user_id, farm_id);
+
+ const allowed = expectedScopes.some(function(expectedScope){
+ return scopes.find(permission => permission.name === expectedScope);
+ });
+
+ return allowed ?
+ next() :
+ res.status(403).send(`User does not have the following permission(s): ${expectedScopes.join(', ')}`);
+ }
+};
+
+module.exports = checkScope;
diff --git a/packages/api/src/models/activityCropsModel.js b/packages/api/src/models/activityCropsModel.js
new file mode 100644
index 0000000000..1d0f60cd99
--- /dev/null
+++ b/packages/api/src/models/activityCropsModel.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (activityCropsModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class ActivityCrops extends Model {
+ static get tableName() {
+ return 'activityCrops';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['field_crop_id'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ field_crop_id: { type: 'integer' },
+ },
+ };
+ }
+}
+
+module.exports = ActivityCrops;
diff --git a/packages/api/src/models/activityFieldsModel.js b/packages/api/src/models/activityFieldsModel.js
new file mode 100644
index 0000000000..7721ce20e3
--- /dev/null
+++ b/packages/api/src/models/activityFieldsModel.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (activityFieldsModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class ActivityFields extends Model {
+ static get tableName() {
+ return 'activityFields';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['field_id'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ field_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = ActivityFields;
diff --git a/packages/api/src/models/activityLogModel.js b/packages/api/src/models/activityLogModel.js
new file mode 100644
index 0000000000..ea803b142d
--- /dev/null
+++ b/packages/api/src/models/activityLogModel.js
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (activityLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+// const FertilizerLogModel = require('./fertilizerLogModel');
+class activityLogModel extends Model {
+ static get tableName() {
+ return 'activityLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['activity_kind', 'date'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ activity_kind: { type: 'string', enum:['fertilizing', 'pestControl', 'scouting', 'irrigation', 'harvest', 'seeding', 'fieldWork', 'weatherData', 'soilData', 'other'] },
+ date: { type: 'date-time' },
+ notes: { type: 'string' },
+ action_needed: { type: 'boolean' },
+ user_id: { type: 'string' },
+ },
+ };
+ }
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ fertilizerLog: {
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./fertilizerLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'fertilizerLog.activity_id',
+ },
+ },
+ pestControlLog: {
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./pestControlLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'pestControlLog.activity_id',
+ },
+ },
+ irrigationLog: {
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./irrigationLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'irrigationLog.activity_id',
+ },
+ },
+ scoutingLog:{
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./scoutingLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'scoutingLog.activity_id',
+ },
+ },
+ soilDataLog:{
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./soilDataLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'soilDataLog.activity_id',
+ },
+ },
+ fieldWorkLog:{
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./fieldWorkLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'fieldWorkLog.activity_id',
+ },
+ },
+ harvestLog:{
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./harvestLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'harvestLog.activity_id',
+ },
+ },
+ seedLog:{
+ relation: Model.HasOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./seedLogModel'),
+ join: {
+ from: 'activityLog.activity_id',
+ to: 'seedLog.activity_id',
+ },
+ },
+ fieldCrop:{
+ modelClass:require('./fieldCropModel'),
+ relation:Model.ManyToManyRelation,
+ join:{
+ from: 'activityLog.activity_id',
+ through: {
+ modelClass: require('./activityCropsModel'),
+ from: 'activityCrops.activity_id',
+ to: 'activityCrops.field_crop_id',
+ },
+ to: 'fieldCrop.field_crop_id',
+ },
+ },
+ field:{
+ modelClass:require('./fieldModel'),
+ relation:Model.ManyToManyRelation,
+ join:{
+ from: 'activityLog.activity_id',
+ through: {
+ modelClass: require('./activityFieldsModel'),
+ from: 'activityFields.activity_id',
+ to: 'activityFields.field_id',
+ },
+ to: 'field.field_id',
+ },
+ },
+ };
+ }
+}
+
+module.exports = activityLogModel;
diff --git a/packages/api/src/models/cropModel.js b/packages/api/src/models/cropModel.js
new file mode 100644
index 0000000000..a44455cde9
--- /dev/null
+++ b/packages/api/src/models/cropModel.js
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (cropModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Crop extends Model {
+ static get tableName() {
+ return 'crop';
+ }
+
+ static get idColumn() {
+ return 'crop_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['crop_common_name', 'crop_group', 'crop_subgroup', 'farm_id'],
+
+ properties: {
+ crop_id: { type: 'integer' },
+ farm_id: { type : 'string' },
+ crop_common_name: { type: 'string', minLength: 1, maxLength: 255 },
+ crop_genus: { type: 'string', minLength: 1, maxLength: 255 },
+ crop_specie: { type: 'string', minLength: 1, maxLength: 255 },
+ crop_group: {
+ type: 'string',
+ enum: ['Other crops', 'Fruit and nuts', 'Beverage and spice crops', 'Potatoes and yams'
+ , 'Vegetables and melons', 'Cereals', 'Leguminous crops', 'Sugar crops', 'Oilseed crops'],
+ },
+ crop_subgroup: {
+ type: 'string',
+ enum: ['Fibre crops', 'Grasses and other fodder crops', 'Nuts',
+ 'Temporary spice crops', 'Pome fruits and stone fruits', 'Other crops',
+ 'High starch Root/tuber crops', 'Leafy or stem vegetables',
+ 'Tropical and subtropical fruits',
+ 'Cereals', 'Legumes', 'Sugar crops (root)',
+ 'Citrus fruits', 'Permanent spice crops',
+ 'Berries', 'Fruit-bearing vegetables', 'Other fruits',
+ 'Root, bulb, or tuberous vegetables', 'Temporary oilseed crops',
+ 'Permanent oilseed crops', 'Medicinal, aromatic, pesticidal, or similar crops',
+ 'Grapes', 'Flower crops', 'Mushrooms and truffles', 'Rubber', 'Sugar crops (other)',
+ 'Tobacco'],
+ },
+ deleted: { type: 'boolean' },
+ max_rooting_depth: { type : 'number' },
+ depletion_fraction: { type : 'number' },
+ initial_kc: { type : 'number' },
+ mid_kc: { type : 'number' },
+ end_kc: { type : 'number' },
+ max_height: { type : 'number' },
+ percentrefuse: { type : 'number' },
+ protein: { type : 'number' },
+ lipid: { type : 'number' },
+ energy: { type : 'number' },
+ ca: { type : 'number' },
+ fe: { type : 'number' },
+ mg: { type : 'number' },
+ ph: { type : 'number' },
+ k: { type : 'number' },
+ na: { type : 'number' },
+ zn: { type : 'number' },
+ cu: { type : 'number' },
+ fl: { type : 'number' },
+ mn: { type : 'number' },
+ se: { type : 'number' },
+ vita_rae: { type : 'number' },
+ vite: { type : 'number' },
+ vitc: { type : 'number' },
+ thiamin: { type : 'number' },
+ riboflavin: { type : 'number' },
+ niacin: { type : 'number' },
+ pantothenic: { type : 'number' },
+ vitb6: { type : 'number' },
+ folate: { type : 'number' },
+ vitb12: { type : 'number' },
+ vitk: { type : 'number' },
+ is_avg_depth: { type : 'boolean, null' },
+ is_avg_nutrient: { type : 'boolean, null' },
+ is_avg_kc: { type : 'boolean, null' },
+ user_added: { type : 'boolean' },
+ nutrient_notes: { type : 'string' },
+ refuse: { type : 'string' },
+ nutrient_credits: { type : 'number' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ return {
+ yield: {
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./yieldModel'),
+ join: {
+ from: 'crop.crop_id',
+ to: 'yield.crop_id',
+ },
+ },
+ price: {
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./priceModel'),
+ join: {
+ from: 'crop.crop_id',
+ to: 'price.crop_id',
+ },
+ },
+ }
+ }
+}
+
+module.exports = Crop;
diff --git a/packages/api/src/models/cropSaleModel.js b/packages/api/src/models/cropSaleModel.js
new file mode 100644
index 0000000000..1b2121d5e2
--- /dev/null
+++ b/packages/api/src/models/cropSaleModel.js
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (cropSaleModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class CropSale extends Model {
+ static get tableName() {
+ return 'cropSale';
+ }
+
+ static get idColumn() {
+ return 'crop_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['crop_id'],
+
+ properties: {
+ field_crop_id: { type: 'integer' },
+ sale_id: { type: 'integer' },
+ quantity_kg: { type: 'float' },
+ sale_value: { type: 'float' },
+ crop_id: { type: 'integer' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ return {
+ crop: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./cropModel'),
+ join: {
+ from: 'cropSale.crop_id',
+ to: 'crop.crop_id',
+ },
+ },
+ }
+ }
+}
+
+module.exports = CropSale;
diff --git a/packages/api/src/models/diseaseModel.js b/packages/api/src/models/diseaseModel.js
new file mode 100644
index 0000000000..b80d60a30e
--- /dev/null
+++ b/packages/api/src/models/diseaseModel.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (diseaseModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Disease extends Model {
+ static get tableName() {
+ return 'disease';
+ }
+
+ static get idColumn() {
+ return 'disease_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['disease_common_name', 'farm_id', 'disease_group'],
+ properties: {
+ disease_scientific_name: { type: 'string' },
+ disease_common_name: { type: 'string' },
+ disease_group: { type: 'string',
+ enum: ['Fungus', 'Insect', 'Bacteria', 'Virus', 'Deficiency', 'Mite', 'Other', 'Weed'],
+ },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = Disease;
diff --git a/packages/api/src/models/emailTokenModel.js b/packages/api/src/models/emailTokenModel.js
new file mode 100644
index 0000000000..26e3388c52
--- /dev/null
+++ b/packages/api/src/models/emailTokenModel.js
@@ -0,0 +1,32 @@
+const Model = require('objection').Model;
+
+class emailTokenModel extends Model {
+ static get tableName() {
+ return 'emailToken';
+ }
+
+ static get idColumn() {
+ return ['user_id', 'farm_id'];
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['user_id', 'farm_id'],
+
+ properties: {
+ user_id: {type: 'string'},
+ farm_id: {type: 'string'},
+ token: {type: 'string'},
+ is_used: {type: 'boolean'},
+ created_at: { type : 'date-time' },
+ updated_at: { type : 'date-time' },
+ }
+ };
+ }
+}
+
+module.exports = emailTokenModel;
diff --git a/packages/api/src/models/expenseTypeModel.js b/packages/api/src/models/expenseTypeModel.js
new file mode 100644
index 0000000000..5e1a3e47f0
--- /dev/null
+++ b/packages/api/src/models/expenseTypeModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (expenseTypeModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class ExpenseType extends Model {
+ static get tableName() {
+ return 'farmExpenseType';
+ }
+
+ static get idColumn() {
+ return 'expense_type_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['expense_name', 'farm_id'],
+
+ properties: {
+ expense_type_id: { type: 'string' },
+ expense_name: { type: 'string', minLength: 1, maxLength: 255 },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = ExpenseType;
diff --git a/packages/api/src/models/farmExpenseModel.js b/packages/api/src/models/farmExpenseModel.js
new file mode 100644
index 0000000000..4bc03db1de
--- /dev/null
+++ b/packages/api/src/models/farmExpenseModel.js
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmExpenseModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Expense extends Model {
+ static get tableName() {
+ return 'farmExpense';
+ }
+
+ static get idColumn() {
+ return 'farm_expense_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['expense_date', 'value', 'note', 'expense_type_id', 'farm_id'],
+
+ properties: {
+ farm_expense_id: { type: 'string' },
+ farm_id: { type: 'string' },
+ expense_date: { type: 'date-time' },
+ value: { type: 'number' },
+ picture: { type: 'string' },
+ note: { type: 'string', minLength: 1, maxLength: 255 },
+ expense_type_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = Expense;
diff --git a/packages/api/src/models/farmModel.js b/packages/api/src/models/farmModel.js
new file mode 100644
index 0000000000..f7543c871a
--- /dev/null
+++ b/packages/api/src/models/farmModel.js
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Farm extends Model {
+ static get tableName() {
+ return 'farm';
+ }
+
+ static get idColumn() {
+ return 'farm_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ // required: ['farm_name'],
+
+ properties: {
+ farm_id: { type: 'string' },
+ farm_name: { type: 'string', minLength: 1, maxLength: 255 },
+ address: { type: 'string', minLength: 1, maxLength: 255 },
+ grid_points: { type: 'object' },
+ phone_number: {
+ type: 'object',
+ required: ['number', 'country'],
+ properties: {
+ number: { type : 'string' },
+ country: {
+ type : 'string',
+ enum: ['ALA', 'AFG', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'VGB', 'BRN', 'BGR', 'BFA', 'BDI', 'CPV', 'KHM', 'CMR', 'CAN', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'HKG', 'MAC', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'PRK', 'COD', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'SWZ', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'KOR', 'MDA', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', '', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'PSE', 'SDN', 'SUR', 'SJM', 'SWE', 'CHE', 'SYR', 'TJK', 'THA', 'MKD', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'TZA', 'UMI', 'USA', 'VIR', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE'],
+ },
+ },
+ },
+ units: {
+ type : 'object',
+ required: ['measurement'],
+ properties: {
+ measurement: {
+ type : 'string',
+ enum: ['imperial', 'metric'],
+ },
+ currency: {
+ type: 'string',
+ enum: ['AFN', 'ALL', 'DZD', 'USD', 'EUR', 'AOA', 'XCD', 'ARS', 'AMD', 'AWG', 'AUD', 'AZN', 'BSD', 'BHD', 'BDT', 'BBD', 'BYR', 'BZD', 'XOF', 'BMD', 'BTN', 'INR', 'BOB', 'BOV', 'BAM', 'BWP', 'NOK', 'BRL', 'BND', 'BGN', 'BIF', 'CVE', 'KHR', 'XAF', 'CAD', 'KYD', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'KMF', 'CDF', 'NZD', 'CRC', 'HRK', 'CUC', 'CUP', 'ANG', 'CZK', 'DKK', 'DJF', 'DOP', 'EGP', 'SVC', 'ERN', 'ETB', 'FKP', 'FJD', 'XPF', 'GMD', 'GEL', 'GHS', 'GIP', 'GTQ', 'GBP', 'GNF', 'GYD', 'HTG', 'HNL', 'HKD', 'HUF', 'ISK', 'IDR', 'XDR', 'IRR', 'IQD', 'ILS', 'JMD', 'JPY', 'JOD', 'KZT', 'KES', 'KPW', 'KRW', 'KWD', 'KGS', 'LAK', 'LBP', 'LSL', 'ZAR', 'LRD', 'LYD', 'CHF', 'MOP', 'MKD', 'MGA', 'MWK', 'MYR', 'MVR', 'MRU', 'MUR', 'XUA', 'MXN', 'MXV', 'MDL', 'MNT', 'MAD', 'MZN', 'MMK', 'NAD', 'NPR', 'NIO', 'NGN', 'OMR', 'PKR', 'PAB', 'PGK', 'PYG', 'PEN', 'PHP', 'PLN', 'QAR', 'RON', 'RUB', 'RWF', 'SHP', 'WST', 'STN', 'SAR', 'RSD', 'SCR', 'SLL', 'SGD', 'XSU', 'SBD', 'SOS', 'SSP', 'LKR', 'SDG', 'SRD', 'SZL', 'SEK', 'CHE', 'CHW', 'SYP', 'TWD', 'TJS', 'TZS', 'THB', 'TOP', 'TTD', 'TND', 'TRY', 'TMT', 'UGX', 'UAH', 'AED', 'USN', 'UYI', 'UYU', 'UZS', 'VUV', 'VEF', 'VND', 'YER', 'ZMW', 'ZWL'],
+ },
+ date_format:{
+ type : 'string',
+ enum: ['MM/DD/YY', 'DD/MM/YY', 'YY/MM/DD'],
+ },
+ },
+ },
+ sandbox_bool: { type: 'boolean' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ return {
+ price: {
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./priceModel'),
+ join: {
+ from: 'farm.farm_id',
+ to: 'price.farm_id',
+ },
+ },
+ yield: {
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./yieldModel'),
+ join: {
+ from: 'farm.farm_id',
+ to: 'yield.farm_id',
+ },
+ },
+ }
+ }
+
+}
+
+module.exports = Farm;
diff --git a/packages/api/src/models/fertilizerLogModel.js b/packages/api/src/models/fertilizerLogModel.js
new file mode 100644
index 0000000000..60481c53c8
--- /dev/null
+++ b/packages/api/src/models/fertilizerLogModel.js
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fertilizerLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class FertilizerLogModel extends Model {
+ static get tableName() {
+ return 'fertilizerLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['fertilizer_id', 'quantity_kg'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ fertilizer_id: { type: 'integer' },
+ quantity_kg: { type: 'float' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'fertilizerLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+
+ };
+ }
+}
+
+module.exports = FertilizerLogModel;
diff --git a/packages/api/src/models/fertilizerModel.js b/packages/api/src/models/fertilizerModel.js
new file mode 100644
index 0000000000..832a141529
--- /dev/null
+++ b/packages/api/src/models/fertilizerModel.js
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fertilizerModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Fertilizer extends Model {
+ static get tableName() {
+ return 'fertilizer';
+ }
+
+ static get idColumn() {
+ return 'fertilizer_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['fertilizer_type', 'farm_id'],
+ properties: {
+ fertilizer_id: { type: 'string' },
+ fertilizer_type: { type: 'string' },
+ moisture_percentage: { type: 'number' },
+ n_percentage: { type: 'number' },
+ nh4_n_ppm: { type: 'number' },
+ p_percentage: { type: 'number' },
+ k_percentage: { type: 'number' },
+ farm_id: {
+ anyOf: [
+ {
+ type: 'string',
+ },
+ {
+ type: 'null',
+ },
+ ],
+ },
+ },
+ };
+ }
+}
+
+module.exports = Fertilizer;
diff --git a/packages/api/src/models/fieldCropModel.js b/packages/api/src/models/fieldCropModel.js
new file mode 100644
index 0000000000..b4ad6a278a
--- /dev/null
+++ b/packages/api/src/models/fieldCropModel.js
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldCropModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+
+class FieldCrop extends Model {
+ static get tableName() {
+ return 'fieldCrop';
+ }
+
+ static get idColumn() {
+ return 'field_crop_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ properties: {
+ field_crop_id: { type: 'integer' },
+ crop_id: { type: 'integer' },
+ field_id: { type: 'string' },
+ variety: { type: 'string' },
+ start_date: { type: 'date-time' },
+ end_date: { type: 'date-time' },
+ area_used: { type: 'float' },
+ estimated_production: { type: 'float' },
+ estimated_revenue: { type: 'float' },
+ is_by_bed: { type: 'boolean' },
+ bed_config: { type: 'object, null' },
+ },
+ };
+ }
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ farm: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./fieldModel.js'),
+ join: {
+ from: 'fieldCrop.field_id',
+ to: 'field.farm_id',
+ },
+ },
+ crop:{
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./cropModel.js'),
+ join: {
+ from: 'fieldCrop.crop_id',
+ to: 'crop.crop_id',
+ },
+ },
+ activityLog:{
+ relation:Model.ManyToManyRelation,
+ modelClass:require('./activityLogModel.js'),
+ join:{
+ to: 'activityLog.activity_id',
+ through:{
+ from:'activityCrops.activity_id',
+ to:'activityCrops.field_crop_id',
+ },
+ from:'fieldCrop.field_crop_id',
+ },
+ },
+ };
+ }
+}
+
+module.exports = FieldCrop;
diff --git a/packages/api/src/models/fieldModel.js b/packages/api/src/models/fieldModel.js
new file mode 100644
index 0000000000..b4163889ed
--- /dev/null
+++ b/packages/api/src/models/fieldModel.js
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Field extends Model {
+ static get tableName() {
+ return 'field';
+ }
+
+ static get idColumn() {
+ return 'field_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['farm_id', 'grid_points'],
+ properties: {
+ field_id: { type: 'string' },
+ farm_id: { type: 'string' },
+ field_name: { type: 'string' },
+ area: { type: 'number' },
+ grid_points: { type: 'array',
+ properties: {
+ lat: { type: 'number' },
+ lng: { type: 'number' },
+ },
+ },
+ },
+ };
+ }
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ fieldCrop:{
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./fieldCropModel.js'),
+ join: {
+ from: 'field.field_id',
+ to: 'fieldCrop.field_id',
+ },
+ },
+ };
+ }
+}
+
+module.exports = Field;
diff --git a/packages/api/src/models/fieldWorkLogModel.js b/packages/api/src/models/fieldWorkLogModel.js
new file mode 100644
index 0000000000..01fa88a514
--- /dev/null
+++ b/packages/api/src/models/fieldWorkLogModel.js
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldWorkLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class FieldWorkLog extends Model {
+ static get tableName() {
+ return 'fieldWorkLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+
+ properties: {
+ activity_id: { type: 'integer' },
+ type: {
+ type: 'string',
+ enum:['plow', 'ridgeTill', 'zoneTill', 'mulchTill', 'ripping', 'discing'],
+ },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'fieldWorkLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+
+ };
+ }
+}
+
+module.exports = FieldWorkLog;
diff --git a/packages/api/src/models/harvestActivityCrop.js b/packages/api/src/models/harvestActivityCrop.js
new file mode 100644
index 0000000000..df615e3e39
--- /dev/null
+++ b/packages/api/src/models/harvestActivityCrop.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (harvestActivityCrop.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Bed extends Model {
+ static get tableName() {
+ return 'activityCrops';
+ }
+
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['activity_id', 'farm_crop_id', 'quantity'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ farm_crop_id: { type: 'integer' },
+ quantity: {
+ type: 'float',
+ minimum:0.01,
+ },
+ quantity_unit: {
+ type:'string',
+ enu:['lb', 'kg'],
+ },
+ },
+ };
+ }
+
+}
+
+module.exports = Bed;
diff --git a/packages/api/src/models/harvestLogModel.js b/packages/api/src/models/harvestLogModel.js
new file mode 100644
index 0000000000..3d8ae7e008
--- /dev/null
+++ b/packages/api/src/models/harvestLogModel.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (harvestLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class HarvestLog extends Model {
+ static get tableName() {
+ return 'harvestLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['quantity_kg'],
+
+ properties: {
+ quantity_kg: { type: 'float' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'harvestLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+
+ };
+ }
+}
+
+module.exports = HarvestLog;
diff --git a/packages/api/src/models/irrigationLogModel.js b/packages/api/src/models/irrigationLogModel.js
new file mode 100644
index 0000000000..742c40c308
--- /dev/null
+++ b/packages/api/src/models/irrigationLogModel.js
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (irrigationLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class IrrigationLog extends Model {
+ static get tableName() {
+ return 'irrigationLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['type'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ type: {
+ type: 'string',
+ enum:['sprinkler', 'drip', 'subsurface', 'flood'],
+
+ },
+ 'flow_rate_l/min': {
+ type: 'float',
+ },
+ hours: {
+ type: 'float',
+ },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'irrigationLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+
+ };
+ }
+}
+
+module.exports = IrrigationLog;
diff --git a/packages/api/src/models/nitrogenBalanceModel.js b/packages/api/src/models/nitrogenBalanceModel.js
new file mode 100644
index 0000000000..9b806fad43
--- /dev/null
+++ b/packages/api/src/models/nitrogenBalanceModel.js
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (nitrogenBalanceModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class NitrogenBalance extends Model {
+ static get tableName() {
+ return 'nitrogenBalance';
+ }
+
+ static get idColumn() {
+ return 'nitrogen_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['field_id', 'nitrogen_value'],
+ properties: {
+ nitrogen_id: { type: 'integer' },
+ created_at: { type: 'date-time' },
+ field_id: { type: 'string' },
+ nitrogen_value: { type: 'float' },
+ },
+ };
+ }
+}
+
+module.exports = NitrogenBalance;
diff --git a/packages/api/src/models/nitrogenScheduleModel.js b/packages/api/src/models/nitrogenScheduleModel.js
new file mode 100644
index 0000000000..892000fd23
--- /dev/null
+++ b/packages/api/src/models/nitrogenScheduleModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (nitrogenScheduleModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class NitrogenSchedule extends Model {
+ static get tableName() {
+ return 'nitrogenSchedule';
+ }
+
+ static get idColumn() {
+ return 'nitrogen_schedule_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['scheduled_at', 'farm_id', 'frequency'],
+ properties: {
+ nitrogen_schedule_id: { type: 'integer' },
+ created_at: { type: 'date-time' },
+ scheduled_at: { type: 'date-time' },
+ farm_id: { type: 'string' },
+ frequency: { type: 'integer' },
+ },
+ };
+ }
+}
+
+module.exports = NitrogenSchedule;
diff --git a/packages/api/src/models/notificationModel.js b/packages/api/src/models/notificationModel.js
new file mode 100644
index 0000000000..5206b600c3
--- /dev/null
+++ b/packages/api/src/models/notificationModel.js
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (notificationModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+
+class Notification extends Model {
+
+ static get tableName() {
+ return 'notification';
+ }
+
+ static get idColumn() {
+ return 'notification_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['user_id', 'notification_kind'],
+
+ properties: {
+ notification_id: { type: 'string' },
+ user_id: { type: 'string' },
+ notification_kind: {
+ type: 'string',
+ enum: ['todo_added', 'alert_weather', 'alert_worker_finish', 'alert_action_after_scouting', 'alert_before_planned_date', 'alert_pest'],
+ },
+ notification_body: {
+ type: 'object',
+ required: ['message'],
+ properties:{
+ message: { type : 'string' },
+ },
+ },
+ is_read: { type : 'boolean' },
+ },
+ };
+ }
+}
+
+module.exports = Notification;
diff --git a/packages/api/src/models/pesiticideModel.js b/packages/api/src/models/pesiticideModel.js
new file mode 100644
index 0000000000..8dd68f083d
--- /dev/null
+++ b/packages/api/src/models/pesiticideModel.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (pesiticideModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Pesticide extends Model {
+ static get tableName() {
+ return 'pesticide';
+ }
+
+ static get idColumn() {
+ return 'pesticide_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['pesticide_name', 'farm_id'],
+ properties: {
+ pesticide_name: { type: 'string' },
+ farm_id: { type: 'string' },
+ active_ingredients: { type: 'string' },
+ concentration: { type: 'number' },
+ entry_interval: { type: 'number' },
+ harvest_interval: { type: 'number' },
+ },
+ };
+ }
+}
+
+module.exports = Pesticide;
diff --git a/packages/api/src/models/pestControlLogModel.js b/packages/api/src/models/pestControlLogModel.js
new file mode 100644
index 0000000000..16d6a7f6a8
--- /dev/null
+++ b/packages/api/src/models/pestControlLogModel.js
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (pestControlLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+const lodash = require('lodash');
+
+class PestControlLog extends Model {
+ static get tableName() {
+ return 'pestControlLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+
+ $parseJson(json, opt) {
+ // Remember to call the super class's implementation.
+ json = super.$parseJson(json, opt);
+ // Do your conversion here.
+ return lodash.pick(json, Object.keys(this.constructor.jsonSchema.properties));
+ }
+
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['pesticide_id', 'quantity_kg', 'target_disease_id', 'type'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ pesticide_id: { type: 'integer' },
+ quantity_kg: { type: 'number' },
+ type: {
+ type: 'string',
+ enum: ['systemicSpray', 'foliarSpray', 'handPick', 'biologicalControl', 'burning', 'soilFumigation', 'heatTreatment'],
+ },
+ target_disease_id: { type: 'integer' },
+ },
+ };
+ }
+}
+
+module.exports = PestControlLog;
diff --git a/packages/api/src/models/planModel.js b/packages/api/src/models/planModel.js
new file mode 100644
index 0000000000..2b92b5fcca
--- /dev/null
+++ b/packages/api/src/models/planModel.js
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (planModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Plan extends Model {
+ static get tableName() {
+ return 'plan';
+ }
+
+ static get idColumn() {
+ return 'plan_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['plan_config', 'farm_id'],
+
+ properties: {
+ plan_id: { type: 'string' },
+ plan_config: { type: 'object' },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = Plan;
diff --git a/packages/api/src/models/plantingLogModel.js b/packages/api/src/models/plantingLogModel.js
new file mode 100644
index 0000000000..367d072e25
--- /dev/null
+++ b/packages/api/src/models/plantingLogModel.js
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (plantingLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class PlantingLog extends Model {
+ static get tableName() {
+ return 'plantingLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['activity_id'],
+
+ properties: {
+ activity_id: { type: 'integer' },
+ type: { type: 'string' },
+ space_depth: { type: 'integer' },
+ space_length: { type: 'integer' },
+ space_width: { type: 'integer' },
+ rate: { type: 'integer' },
+ space_unit: { type: 'string' },
+ rate_unit: { type: 'integer' },
+ },
+ };
+ }
+}
+
+module.exports = PlantingLog;
diff --git a/packages/api/src/models/priceModel.js b/packages/api/src/models/priceModel.js
new file mode 100644
index 0000000000..00cac96d09
--- /dev/null
+++ b/packages/api/src/models/priceModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (priceModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Price extends Model {
+ static get tableName() {
+ return 'price';
+ }
+
+ static get idColumn() {
+ return 'price_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['crop_id', 'value_$/kg', 'farm_id'],
+ properties: {
+ price_id: { type: 'integer' },
+ crop_id: { type: 'integer' },
+ 'value_$/kg': { type: 'integer' },
+ date: { type: 'date-time' },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = Price;
diff --git a/packages/api/src/models/roleModel.js b/packages/api/src/models/roleModel.js
new file mode 100644
index 0000000000..bacc437a20
--- /dev/null
+++ b/packages/api/src/models/roleModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (roleModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Role extends Model {
+ static get tableName() {
+ return 'role';
+ }
+
+ static get idColumn() {
+ return 'role_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: [ 'role' ],
+ properties: {
+ role_id: { type: 'integer' },
+ role: {
+ type: 'string',
+ enum: ['Owner', 'Manager', 'Worker'],
+ },
+ },
+ };
+ }
+}
+
+module.exports = Role;
diff --git a/packages/api/src/models/saleModel.js b/packages/api/src/models/saleModel.js
new file mode 100644
index 0000000000..9efc2ca8c1
--- /dev/null
+++ b/packages/api/src/models/saleModel.js
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (saleModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Sale extends Model {
+ static get tableName() {
+ return 'sale';
+ }
+
+ static get idColumn() {
+ return 'sale_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: [ 'customer_name', 'sale_date', 'farm_id'],
+
+ properties: {
+ sale_id: { type: 'integer' },
+ customer_name: { type: 'string', minLength: 1, maxLength: 255 },
+ sale_date: { type: 'string', minLength: 1, maxLength: 255 },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ return {
+ crop:{
+ modelClass:require('./cropModel'),
+ relation: Model.ManyToManyRelation,
+ join:{
+ from: 'sale.sale_id',
+ through: {
+ modelClass: require('./cropSaleModel'),
+ from: 'cropSale.sale_id',
+ to: 'cropSale.crop_id',
+ },
+ to: 'crop.crop_id',
+ },
+ },
+ cropSale: {
+ relation: Model.HasManyRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./cropSaleModel'),
+ join: {
+ from: 'sale.sale_id',
+ to: 'cropSale.sale_id',
+ },
+ },
+ }
+ }
+}
+
+module.exports = Sale;
diff --git a/packages/api/src/models/scoutingLogModel.js b/packages/api/src/models/scoutingLogModel.js
new file mode 100644
index 0000000000..b80a508a24
--- /dev/null
+++ b/packages/api/src/models/scoutingLogModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (scoutingLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class ScoutingLog extends Model {
+ static get tableName() {
+ return 'scoutingLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+
+ properties: {
+ activity_id: { type: 'integer' },
+ type: {
+ type: 'string',
+ enum:['harvest', 'pest', 'disease', 'weed', 'other'],
+ },
+ },
+ };
+ }
+}
+
+module.exports = ScoutingLog;
diff --git a/packages/api/src/models/seedLogModel.js b/packages/api/src/models/seedLogModel.js
new file mode 100644
index 0000000000..8d3d7e110c
--- /dev/null
+++ b/packages/api/src/models/seedLogModel.js
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (seedLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+
+class SeedLogModel extends Model {
+ static get tableName() {
+ return 'seedLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+
+ properties: {
+ activity_id: { type: 'integer' },
+ space_depth_cm: {
+ type: 'float',
+ },
+ space_length_cm: {
+ type: 'float',
+ },
+ space_width_cm: {
+ type: 'float',
+ },
+ 'rate_seeds/m2': {
+ type: 'float',
+ },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'seedLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+ };
+ }
+}
+
+module.exports = SeedLogModel;
diff --git a/packages/api/src/models/shiftModel.js b/packages/api/src/models/shiftModel.js
new file mode 100644
index 0000000000..9f3f8ba4ac
--- /dev/null
+++ b/packages/api/src/models/shiftModel.js
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (shiftModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Shift extends Model {
+ static get tableName() {
+ return 'shift';
+ }
+
+ static get idColumn() {
+ return 'shift_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['start_time', 'end_time', 'user_id'],
+
+ properties: {
+ shift_id: { type: 'string' },
+ start_time: { type: 'date-time' },
+ end_time: { type: 'date-time' },
+ user_id: { type: 'string' },
+ break_duration: { type: 'number' },
+ mood: {
+ type: 'string',
+ enum: ['happy', 'neutral', 'very happy', 'sad', 'very sad', 'na'],
+ },
+ wage_at_moment: { type: 'number' },
+ },
+ }
+ }
+}
+
+module.exports = Shift;
diff --git a/packages/api/src/models/shiftTaskModel.js b/packages/api/src/models/shiftTaskModel.js
new file mode 100644
index 0000000000..65dd0c1f61
--- /dev/null
+++ b/packages/api/src/models/shiftTaskModel.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (shiftTaskModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class ShiftTask extends Model {
+ static get tableName() {
+ return 'shiftTask';
+ }
+
+ static get idColumn() {
+ return 'task_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['shift_id', 'is_field', 'duration', 'task_id'],
+ properties: {
+ shift_id: { type: 'string' },
+ task_id: { type: 'string' },
+ field_crop_id: { type: 'integer' },
+ is_field: { type: 'boolean' },
+ field_id: { type: 'string' },
+ duration: { type: 'number' },
+ },
+ };
+ }
+}
+
+module.exports = ShiftTask;
diff --git a/packages/api/src/models/soilDataLogModel.js b/packages/api/src/models/soilDataLogModel.js
new file mode 100644
index 0000000000..e674b3c692
--- /dev/null
+++ b/packages/api/src/models/soilDataLogModel.js
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (soilDataLogModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class SoilDataLog extends Model {
+ static get tableName() {
+ return 'soilDataLog';
+ }
+
+ static get idColumn() {
+ return 'activity_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+
+ properties: {
+ activity_id: { type: 'integer' },
+ start_depth: { type: 'integer' },
+ end_depth: { type: 'integer' },
+ depth_cm: { type: 'string' },
+ texture: { type: 'string', enum:['sand', 'loamySand', 'sandyLoam', 'loam',
+ 'siltLoam', 'silt', 'sandyClayLoam', 'clayLoam', 'siltyClayLoam',
+ 'sandyClay', 'siltyClay', 'clay'] },
+ k: { type: 'integer' },
+ p: { type: 'integer' },
+ n: { type: 'integer' },
+ na: { type: 'integer' },
+ om: { type: 'integer' },
+ ph: { type: 'integer' },
+ 'bulk_density_kg/m3': { type: 'float' },
+ organic_carbon: { type: 'integer' },
+ inorganic_carbon: { type: 'integer' },
+ total_carbon: { type: 'integer' },
+ s: { type: 'integer' },
+ ca: { type: 'integer' },
+ mg: { type: 'integer' },
+ zn: { type: 'integer' },
+ mn: { type: 'integer' },
+ fe: { type: 'integer' },
+ cu: { type: 'integer' },
+ b: { type: 'integer' },
+ c: { type: 'integer' },
+ cec: { type: 'float' },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ activityLog: {
+ relation: Model.BelongsToOneRelation,
+ // The related model. This can be either a Model
+ // subclass constructor or an absolute file path
+ // to a module that exports one.
+ modelClass: require('./activityLogModel'),
+ join: {
+ from: 'soilDataLog.activity_id',
+ to: 'activityLog.activity_id',
+ },
+ },
+
+ };
+ }
+}
+
+module.exports = SoilDataLog;
diff --git a/packages/api/src/models/taskTypeModel.js b/packages/api/src/models/taskTypeModel.js
new file mode 100644
index 0000000000..1eae1e901e
--- /dev/null
+++ b/packages/api/src/models/taskTypeModel.js
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (taskTypeModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class TaskName extends Model {
+ static get tableName() {
+ return 'taskType';
+ }
+
+ static get idColumn() {
+ return 'task_id';
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['task_name', 'farm_id'],
+ properties: {
+ task_id: { type: 'integer' },
+ task_name: { type: 'string', minLength: 1, maxLength: 25 },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = TaskName;
diff --git a/packages/api/src/models/todoModel.js b/packages/api/src/models/todoModel.js
new file mode 100644
index 0000000000..7eba0454dd
--- /dev/null
+++ b/packages/api/src/models/todoModel.js
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (todoModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Todo extends Model {
+ static get tableName() {
+ return 'todo';
+ }
+
+
+ static get idColumn() {
+ return 'todo_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['todo_text', 'farm_id'],
+
+ properties: {
+ todo_id: { type: 'string', minLength: 1, maxLength: 255 },
+ todo_text: { type: 'string' },
+ farm_id: { type: 'string', minLength: 1, maxLength: 255 },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ userTodo:{
+ modelClass:require('./userTodo.js'),
+ relation:Model.HasManyRelation,
+ join:{
+ from:'userTodo.todo_id',
+ to:'todo.todo_id',
+ },
+ },
+ }
+ }
+}
+
+module.exports = Todo;
diff --git a/packages/api/src/models/userFarmModel.js b/packages/api/src/models/userFarmModel.js
new file mode 100644
index 0000000000..50a3f85071
--- /dev/null
+++ b/packages/api/src/models/userFarmModel.js
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userFarmModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class userFarm extends Model {
+ static get tableName() {
+ return 'userFarm';
+ }
+
+ static get idColumn() {
+ return ['user_id', 'farm_id'];
+ }
+
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['user_id', 'farm_id'],
+
+ properties: {
+ user_id: { type: 'string' },
+ farm_id: { type: 'string' },
+ role_id: { type: 'number' },
+ has_consent: { type: ['boolean', 'null'] },
+ status: {
+ type: 'enum',
+ enum: ['Active', 'Inactive', 'Invited',],
+ },
+ created_at: { type: 'string' },
+ consent_version: { type: 'string' },
+ wage: {
+ type : 'object',
+ required: ['type', 'amount'],
+ properties: {
+ type: {
+ type: 'string',
+ enum: ['hourly', 'annually'],
+ },
+ amount:{ type: 'number' },
+ },
+ },
+ },
+ };
+ }
+
+ static get relationMappings() {
+ return {
+ user:{
+ modelClass:require('./userModel'),
+ relation: Model.HasOneRelation,
+ join: {
+ from: 'userFarm.user_id',
+ to: 'users.user_id',
+ },
+ },
+ farm: {
+ modelClass:require('./farmModel'),
+ relation: Model.HasOneRelation,
+ join: {
+ from: 'userFarm.farm_id',
+ to: 'farm.farm_id',
+ },
+ },
+ role: {
+ modelClass:require('./roleModel'),
+ relation: Model.HasOneRelation,
+ join: {
+ from: 'userFarm.role_id',
+ to: 'role.role_id',
+ },
+ },
+ }
+ }
+}
+
+module.exports = userFarm;
diff --git a/packages/api/src/models/userModel.js b/packages/api/src/models/userModel.js
new file mode 100644
index 0000000000..1b78129fc3
--- /dev/null
+++ b/packages/api/src/models/userModel.js
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../../knexfile')[environment];
+const knex = Knex(config);
+
+class User extends Model {
+ $beforeUpdate() {
+ this.updated_at = knex.fn.now();
+ }
+
+ static get tableName() {
+ return 'users';
+ }
+
+ static get idColumn() {
+ return 'user_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['user_id', 'first_name', 'last_name', 'email'],
+
+ properties: {
+ user_id: { type: 'string' },
+ first_name: { type: 'string', minLength: 1, maxLength: 255 },
+ last_name: { type: 'string', minLength: 1, maxLength: 255 },
+ profile_picture: { type: 'string' },
+ phone_number: { type : 'string' },
+ address: { type : 'string' },
+ email: { type: 'email' },
+ farm_id: { type: ['string', 'null'] },
+ notification_setting: {
+ type: 'object',
+ required:['alert_weather', 'alert_worker_finish', 'alert_action_after_scouting', 'alert_before_planned_date', 'alert_pest'],
+ properties:{
+ alert_weather: { type : 'boolean' },
+ alert_worker_finish: { type : 'boolean' },
+ alert_action_after_scouting: { type : 'boolean' },
+ alert_before_planned_date: { type : 'boolean' },
+ alert_pest: { type : 'boolean' },
+ },
+ },
+ created_at: { type : 'date-time' },
+ updated_at: { type : 'date-time' },
+ },
+ };
+ }
+}
+
+module.exports = User;
diff --git a/packages/api/src/models/userTodo.js b/packages/api/src/models/userTodo.js
new file mode 100644
index 0000000000..12cd45f483
--- /dev/null
+++ b/packages/api/src/models/userTodo.js
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userTodo.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class userTodo extends Model {
+ static get tableName() {
+ return 'userTodo';
+ }
+
+
+ static get idColumn() {
+ return ['todo_id', 'user_id'];
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['user_id'],
+
+ properties: {
+ todo_id: { type: 'string' },
+ user_id: { type: 'string' },
+ },
+ };
+ }
+ static get relationMappings() {
+ // Import models here to prevent require loops.
+ return {
+ user:{
+ modelClass:require('./userModel.js'),
+ relation:Model.HasOneRelation,
+ join:{
+ from:'userTodo.user_id',
+ to:'users.uid',
+ },
+ },
+ todo:{
+ modelClass:require('./todoModel.js'),
+ relation:Model.HasOneRelation,
+ join:{
+ from:'userTodo.todo_id',
+ to:'todo.todo_id',
+ },
+ },
+ };
+ }
+}
+
+module.exports = userTodo;
diff --git a/packages/api/src/models/waterBalanceModel.js b/packages/api/src/models/waterBalanceModel.js
new file mode 100644
index 0000000000..41e010c916
--- /dev/null
+++ b/packages/api/src/models/waterBalanceModel.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (waterBalanceModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class WaterBalance extends Model {
+ static get tableName() {
+ return 'waterBalance';
+ }
+
+ static get idColumn() {
+ return 'water_balance_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['crop_id', 'field_id', 'soil_water', 'plant_available_water'],
+ properties: {
+ water_balance_id: { type: 'integer' },
+ crop_id: { type: 'integer' },
+ field_id: { type: 'string' },
+ created_at: { type: 'date-time' },
+ soil_water: { type: 'float' },
+ plant_available_water: { type: 'float' },
+ },
+ };
+ }
+}
+
+module.exports = WaterBalance;
diff --git a/packages/api/src/models/waterBalanceSchedule.js b/packages/api/src/models/waterBalanceSchedule.js
new file mode 100644
index 0000000000..78a6f51f63
--- /dev/null
+++ b/packages/api/src/models/waterBalanceSchedule.js
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (waterBalanceSchedule.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class waterBalanceSchedule extends Model {
+ static get tableName() {
+ return 'waterBalanceSchedule';
+ }
+
+ static get idColumn() {
+ return 'water_balance_schedule_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['farm_id'],
+ properties: {
+ water_balance_schedule_id: { type: 'integer' },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = waterBalanceSchedule;
\ No newline at end of file
diff --git a/packages/api/src/models/weatherHourlyModel.js b/packages/api/src/models/weatherHourlyModel.js
new file mode 100644
index 0000000000..7d412e86ca
--- /dev/null
+++ b/packages/api/src/models/weatherHourlyModel.js
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (weatherHourlyModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class weatherHourly extends Model {
+ static get tableName() {
+ return 'weatherHourly';
+ }
+
+ static get idColumn() {
+ return 'weather_hourly_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['min_degrees', 'max_degrees', 'min_humidity', 'max_humidity', 'precipitation', 'wind_speed', 'field_id'],
+ properties: {
+ weather_hourly_id: { type: 'integer' },
+ min_degrees: { type: 'float' },
+ max_degrees: { type: 'float' },
+ min_humidity: { type: 'float' },
+ max_humidity: { type: 'float' },
+ precipitation: { type: 'float ' },
+ wind_speed: { type: 'float' },
+ field_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = weatherHourly;
diff --git a/packages/api/src/models/weatherModel.js b/packages/api/src/models/weatherModel.js
new file mode 100644
index 0000000000..69f84e7247
--- /dev/null
+++ b/packages/api/src/models/weatherModel.js
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (weatherModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class WeatherModel extends Model {
+ static get tableName() {
+ return 'weather';
+ }
+
+ static get idColumn() {
+ return 'weather_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['min_degrees', 'max_degrees', 'min_humidity', 'max_humidity', 'precipitation', 'wind_speed'],
+ properties: {
+ weather_id: { type: 'integer' },
+ created_at: { type: 'date-time' },
+ min_degrees: { type: 'float' },
+ max_degrees: { type: 'float' },
+ min_humidity: { type: 'float' },
+ max_humidity: { type: 'float' },
+ precipitation: { type: 'float' },
+ wind_speed: { type: 'float' },
+ field_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = WeatherModel;
diff --git a/packages/api/src/models/yieldModel.js b/packages/api/src/models/yieldModel.js
new file mode 100644
index 0000000000..6c53a9be14
--- /dev/null
+++ b/packages/api/src/models/yieldModel.js
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (yieldModel.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Model = require('objection').Model;
+
+class Yield extends Model {
+ static get tableName() {
+ return 'yield';
+ }
+
+ static get idColumn() {
+ return 'yield_id';
+ }
+ // Optional JSON schema. This is not the database schema! Nothing is generated
+ // based on this. This is only used for validation. Whenever a model instance
+ // is created it is checked against this schema. http://json-schema.org/.
+ static get jsonSchema() {
+ return {
+ type: 'object',
+ required: ['crop_id', 'quantity_kg/m2', 'farm_id'],
+ properties: {
+ yield_id: { type: 'integer' },
+ crop_id: { type: 'integer' },
+ 'quantity_kg/m2': { type: 'integer' },
+ date: { type: 'date-time' },
+ farm_id: { type: 'string' },
+ },
+ };
+ }
+}
+
+module.exports = Yield;
diff --git a/packages/api/src/routes/contactRoute.js b/packages/api/src/routes/contactRoute.js
new file mode 100644
index 0000000000..6591912e2f
--- /dev/null
+++ b/packages/api/src/routes/contactRoute.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (contactRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const contactController = require('../controllers/contactController');
+
+
+router.post('/', contactController.sendContactForm());
+
+module.exports = router;
\ No newline at end of file
diff --git a/packages/api/src/routes/createUserRoute.js b/packages/api/src/routes/createUserRoute.js
new file mode 100644
index 0000000000..4724052cc9
--- /dev/null
+++ b/packages/api/src/routes/createUserRoute.js
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (createUserRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const createUserController = require('../controllers/createUserController');
+
+
+// create auth0 user then post it to DB
+router.post('/', createUserController.createAuth0User());
+
+module.exports = router;
diff --git a/packages/api/src/routes/cropRoute.js b/packages/api/src/routes/cropRoute.js
new file mode 100644
index 0000000000..feeb4c5f44
--- /dev/null
+++ b/packages/api/src/routes/cropRoute.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (cropRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const cropController = require('../controllers/cropController');
+const express = require('express');
+const router = express.Router();
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+// get an individual crop
+router.get('/:id', checkScope(['get:crops']), cropController.getIndividualCrop());
+// get all crop INCLUDING crops farm added
+router.get('/farm/:farm_id', authFarmId, checkScope(['get:crops']), cropController.getAllCrop());
+router.post('/', checkScope(['add:crops']), cropController.addCropWithFarmID());
+router.put('/:id', checkScope(['edit:crops']), cropController.updateCrop());
+// only user added crop can be deleted
+router.delete('/:id', checkScope(['delete:crops']), cropController.delCrop());
+
+module.exports = router;
diff --git a/packages/api/src/routes/diseaseRoute.js b/packages/api/src/routes/diseaseRoute.js
new file mode 100644
index 0000000000..16dfff1180
--- /dev/null
+++ b/packages/api/src/routes/diseaseRoute.js
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (diseaseRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const diseaseController = require('../controllers/diseaseController');
+//const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.get('/farm/:farm_id', checkScope(['get:diseases']), diseaseController.getDisease());
+router.post('/', checkScope(['add:diseases']), diseaseController.addDisease());
+
+module.exports = router;
diff --git a/packages/api/src/routes/farmExpenseRoute.js b/packages/api/src/routes/farmExpenseRoute.js
new file mode 100644
index 0000000000..92ce196294
--- /dev/null
+++ b/packages/api/src/routes/farmExpenseRoute.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmExpenseRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const farmExpenseController = require('../controllers/farmExpenseController');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.get('/farm/:farm_id', checkOwnership('farmExpense'), checkScope(['get:expenses']), farmExpenseController.getAllFarmExpense());
+
+// add farm expense takes an array of expense
+router.post('/', checkScope(['add:expenses']), farmExpenseController.addFarmExpense());
+
+//takes an array of farm_expense_id
+// this is DELETE
+router.put('/', checkScope(['delete:expenses']), farmExpenseController.delFarmExpense());
+
+router.post('/expense_type', checkScope(['add:expense_types']), farmExpenseController.addFarmExpenseType());
+
+router.get('/expense_type/farm/:farm_id', checkScope(['get:expense_types']), farmExpenseController.getFarmExpenseType());
+
+router.get('/expense_type/default', farmExpenseController.getDefaultTypes());
+
+
+module.exports = router;
diff --git a/packages/api/src/routes/farmRoute.js b/packages/api/src/routes/farmRoute.js
new file mode 100644
index 0000000000..7c5010a063
--- /dev/null
+++ b/packages/api/src/routes/farmRoute.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (farmRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const farmController = require('../controllers/farmController');
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+// Get the crop on a bed
+router.get('/', farmController.getAllFarms());
+
+router.get('/:farm_id', authFarmId, farmController.getFarmByID());
+
+router.post('/', farmController.addFarm());
+
+router.put('/:id', checkScope(['edit:farms']), farmController.updateFarm());
+
+router.delete('/:id', checkScope(['delete:farms']), farmController.deleteFarm());
+
+
+module.exports = router;
diff --git a/packages/api/src/routes/fertilizerRoute.js b/packages/api/src/routes/fertilizerRoute.js
new file mode 100644
index 0000000000..2bdcab8f58
--- /dev/null
+++ b/packages/api/src/routes/fertilizerRoute.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fertilizerRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const fertilizerController = require('../controllers/fertilizerController');
+//const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+//router.get('/', fertilizerController.getFertilizers());
+router.get('/farm/:farm_id', checkScope(['get:fertilizers']), fertilizerController.getFertilizers());
+router.post('/farm/:farm_id', checkScope(['add:fertilizers']), fertilizerController.addFertilizer());
+
+module.exports = router;
diff --git a/packages/api/src/routes/fieldCropRoute.js b/packages/api/src/routes/fieldCropRoute.js
new file mode 100644
index 0000000000..55b85e3485
--- /dev/null
+++ b/packages/api/src/routes/fieldCropRoute.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldCropRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const fieldCropController = require('../controllers/fieldCropController');
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.get('/farm/:farm_id', authFarmId, checkScope(['get:field_crops']), fieldCropController.getFieldCropByFarmID());
+
+router.get('/farm/date/:farm_id/:date', authFarmId, checkScope(['get:field_crops']), fieldCropController.getFieldCropsByDate());
+
+router.get('/expired/farm/:farm_id', authFarmId, checkScope(['get:field_crops']), fieldCropController.getExpiredFieldCrops());
+
+router.post('/', checkScope(['add:field_crops']), fieldCropController.addFieldCrop());
+
+router.put('/:id', checkScope(['edit:field_crops']), fieldCropController.updateFieldCrop());
+
+router.delete('/:id', checkScope(['delete:field_crops']), fieldCropController.delFieldCrop());
+
+module.exports = router;
diff --git a/packages/api/src/routes/fieldRoute.js b/packages/api/src/routes/fieldRoute.js
new file mode 100644
index 0000000000..e233cb2093
--- /dev/null
+++ b/packages/api/src/routes/fieldRoute.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (fieldRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const fieldController = require('../controllers/fieldController');
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+// Get the crop on a bed
+router.get('/farm/:farm_id', authFarmId, checkScope(['get:fields']), fieldController.getFieldByFarmID());
+
+router.post('/', checkScope(['add:fields']), fieldController.addField());
+
+router.put('/:id', checkOwnership('field'), checkScope(['edit:fields']), fieldController.updateField());
+
+router.delete('/:id', checkOwnership('field'), checkScope(['delete:fields']), fieldController.delField());
+
+module.exports = router;
diff --git a/packages/api/src/routes/insightRoute.js b/packages/api/src/routes/insightRoute.js
new file mode 100644
index 0000000000..707b8283e1
--- /dev/null
+++ b/packages/api/src/routes/insightRoute.js
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (insightRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const insightController = require('../controllers/insightController');
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+// people fed specific stuff
+// get all the nutritional data that is displayed as a view on People Fed Module
+router.get('/people_fed/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getPeopleFedData());
+// get one single number for generating meals page on the main insight page
+
+// soil om submodule
+// grabs soil data logs based on user_id
+// sorted by field_id so its easy to use in the soil_om submodule
+router.get('/soil_om/:farm_id', checkScope(['get:insights']), insightController.getSoilDataByFarmID());
+
+router.get('/labour_happiness/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getLabourHappinessByFarmID());
+
+router.get('/biodiversity/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getBiodiversityByFarmID());
+
+router.get('/prices/distance/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getPricesNearbyByFarmID());
+
+router.get('/waterbalance/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getWaterBalance());
+
+router.get('/waterbalance/schedule/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getWaterSchedule());
+
+router.get('/nitrogenbalance/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getNitrogenBalance());
+
+router.get('/nitrogenbalance/schedule/:farm_id', authFarmId, checkScope(['get:insights']), insightController.getNitrogenSchedule());
+
+// add calls
+router.post('/waterbalance', checkScope(['add:insights']), insightController.addWaterBalance());
+router.post('/waterbalance/schedule', checkScope(['add:insights']), insightController.addWaterBalanceSchedule());
+router.post('/nitrogenbalance/schedule', checkScope(['add:insights']), insightController.addNitrogenSchedule());
+
+// delete calls
+router.delete('/nitrogenbalance/schedule/:id', checkOwnership('nitrogenSchedule'), checkScope(['delete:insights']), insightController.delNitrogenSchedule());
+
+module.exports = router;
diff --git a/packages/api/src/routes/logRoute.js b/packages/api/src/routes/logRoute.js
new file mode 100644
index 0000000000..9f1cabfade
--- /dev/null
+++ b/packages/api/src/routes/logRoute.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (logRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const logController = require('../controllers/logController');
+const express = require('express');
+const router = express.Router();
+const checkScope = require('../middleware/acl/checkScope');
+
+router.post('/', checkScope(['add:logs']), logController.logController.addLog());
+router.get('/', checkScope(['get:logs']), logController.logController.getLog());
+router.put('/:id', checkScope(['edit:logs']), logController.logController.putLog());
+router.delete('/:id', checkScope(['delete:logs']), logController.logController.deleteLog());
+
+module.exports = router;
diff --git a/packages/api/src/routes/notificationRoute.js b/packages/api/src/routes/notificationRoute.js
new file mode 100644
index 0000000000..da9477cde5
--- /dev/null
+++ b/packages/api/src/routes/notificationRoute.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (notificationRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const notificationController = require('../controllers/notificationController');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+
+// Get the crop on a bed
+router.get('/user/:user_id', notificationController.getNotificationByUserID());
+
+router.put('/:id', checkOwnership('notification'), notificationController.updateNotification());
+
+module.exports = router;
diff --git a/packages/api/src/routes/notificationSettingRoute.js b/packages/api/src/routes/notificationSettingRoute.js
new file mode 100644
index 0000000000..02e791b74f
--- /dev/null
+++ b/packages/api/src/routes/notificationSettingRoute.js
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (notificationSettingRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const userController = require('../controllers/userController');
+// const checkJwt = require('../middleware/acl/checkJwt');
+// const checkScope = require('../middleware/acl/checkScope');
+
+router.put('/:id', userController.updateNotificationSetting());
+
+module.exports = router;
diff --git a/packages/api/src/routes/pesticideRoute.js b/packages/api/src/routes/pesticideRoute.js
new file mode 100644
index 0000000000..f89d8829fc
--- /dev/null
+++ b/packages/api/src/routes/pesticideRoute.js
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (pesticideRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const pesticideController = require('../controllers/pesticideController');
+//const authFarmId = require('../middleware/acl/authFarmId');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.get('/farm/:farm_id', checkScope(['get:pesticides']), pesticideController.getPesticide());
+router.post('/', checkScope(['add:pesticides']), pesticideController.addPesticide());
+
+module.exports = router;
diff --git a/packages/api/src/routes/planRoute.js b/packages/api/src/routes/planRoute.js
new file mode 100644
index 0000000000..1af69528f7
--- /dev/null
+++ b/packages/api/src/routes/planRoute.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (planRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const Plan = require('../models/planModel');
+const express = require('express');
+const router = express.Router();
+const planController = require('../controllers/planController');
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+
+// Get the crop on a bed
+router.get('/farm/:farm_id', authFarmId, checkScope(['get:plans']), planController.getPlanByFarmId(Plan));
+
+router.post('/', checkScope(['add:plans']), planController.addPlan(Plan));
+
+router.delete('/:id', checkOwnership('plan'), checkScope(['delete:plans']), planController.delPlan(Plan));
+
+module.exports = router;
diff --git a/packages/api/src/routes/priceRoute.js b/packages/api/src/routes/priceRoute.js
new file mode 100644
index 0000000000..2109b741f8
--- /dev/null
+++ b/packages/api/src/routes/priceRoute.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (priceRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const priceController = require('../controllers/priceController');
+// const authFarmId = require('../middleware/acl/authFarmId');
+// const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+// Get the crop on a bed
+router.get('/farm/:farm_id', checkScope(['get:prices']), priceController.getPriceByFarmId());
+
+router.post('/', checkScope(['add:prices']), priceController.addPrice());
+
+router.put('/:id', checkScope(['edit:prices']), priceController.updatePrice());
+
+router.delete('/:id', checkScope(['delete:prices']), priceController.delPrice());
+
+module.exports = router;
diff --git a/packages/api/src/routes/rolesRoute.js b/packages/api/src/routes/rolesRoute.js
new file mode 100644
index 0000000000..72d22fdebe
--- /dev/null
+++ b/packages/api/src/routes/rolesRoute.js
@@ -0,0 +1,8 @@
+const express = require('express');
+const router = express.Router();
+const rolesController = require('../controllers/rolesController');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.get('/', rolesController.getRoles());
+
+module.exports = router;
diff --git a/packages/api/src/routes/saleRoute.js b/packages/api/src/routes/saleRoute.js
new file mode 100644
index 0000000000..c0a50d19aa
--- /dev/null
+++ b/packages/api/src/routes/saleRoute.js
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (saleRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const SaleController = require('../controllers/saleController');
+const express = require('express');
+const router = express.Router();
+const authFarmId = require('../middleware/acl/authFarmId');
+const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.post('/', checkScope(['add:sales']), SaleController.addOrUpdateSale());
+router.get('/:farm_id', authFarmId, checkScope(['get:sales']), SaleController.getSaleByFarmId());
+router.delete('/:id', checkOwnership('sale'), checkScope(['delete:sales']), SaleController.delSale());
+router.patch('/', checkScope(['edit:sales']), SaleController.patchSales());
+
+module.exports = router;
diff --git a/packages/api/src/routes/shiftRoute.js b/packages/api/src/routes/shiftRoute.js
new file mode 100644
index 0000000000..8c2c9097de
--- /dev/null
+++ b/packages/api/src/routes/shiftRoute.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (shiftRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const ShiftController = require('../controllers/shiftController');
+const express = require('express');
+const router = express.Router();
+// const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+//router.post('/', checkScope(['add:shifts']), ShiftController.addShift());
+router.post('/', checkScope(['add:shifts']), ShiftController.addShift());
+
+router.post('/multi', checkScope(['add:shifts']), ShiftController.addMultiShift());
+//router.delete('/:id', checkScope(['delete:shifts']), checkOwnership('shift'), ShiftController.delShift());
+router.delete('/:id', checkScope(['delete:shifts']), ShiftController.delShift());
+
+//router.get('/:id', checkScope(['get:shifts']), checkOwnership('shift'), ShiftController.getShiftByID());
+router.get('/:id', checkScope(['get:shifts']), ShiftController.getShiftByID());
+
+router.get('/user/:user_id', checkScope(['get:shifts']), ShiftController.getShiftByUserID());
+
+router.get('/farm/:farm_id', checkScope(['get:shifts']), ShiftController.getShiftByFarmID());
+
+//router.put('/:id', checkScope(['edit:shifts']), checkOwnership('shift'), ShiftController.updateShift());
+router.put('/:id', checkScope(['edit:shifts']), ShiftController.updateShift());
+
+module.exports = router;
diff --git a/packages/api/src/routes/signUpRoute.js b/packages/api/src/routes/signUpRoute.js
new file mode 100644
index 0000000000..3f9646dcb2
--- /dev/null
+++ b/packages/api/src/routes/signUpRoute.js
@@ -0,0 +1,9 @@
+const express = require('express');
+const router = express.Router();
+const signUpController = require('../controllers/signUpController');
+
+router.get('/verify_token/:token', signUpController.isEmailTokenValid());
+
+router.patch('/:id', signUpController.signUpViaInvitation());
+
+module.exports = router;
diff --git a/packages/api/src/routes/statsRoute.js b/packages/api/src/routes/statsRoute.js
new file mode 100644
index 0000000000..1ae9aed776
--- /dev/null
+++ b/packages/api/src/routes/statsRoute.js
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (statsRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const statsController = require('../controllers/statsController');
+
+router.get('/farm', statsController.getFarmStats());
+
+module.exports = router;
\ No newline at end of file
diff --git a/packages/api/src/routes/taskTypeRoute.js b/packages/api/src/routes/taskTypeRoute.js
new file mode 100644
index 0000000000..31736e0c23
--- /dev/null
+++ b/packages/api/src/routes/taskTypeRoute.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (taskTypeRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const TaskTypeController = require('../controllers/taskTypeController');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.post('/', checkScope(['add:task_types']), TaskTypeController.addType());
+router.get('/farm/:farm_id', checkScope(['get:task_types']), TaskTypeController.getAllTypes());
+router.get('/:id', checkScope(['get:task_types']), TaskTypeController.getTypeByID());
+router.delete('/:id', checkScope(['delete:task_types']), TaskTypeController.delType());
+
+module.exports = router;
diff --git a/packages/api/src/routes/todoRoute.js b/packages/api/src/routes/todoRoute.js
new file mode 100644
index 0000000000..ee4320f791
--- /dev/null
+++ b/packages/api/src/routes/todoRoute.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (todoRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const todoController = require('../controllers/todoController');
+const express = require('express');
+const router = express.Router();
+const checkOwnership = require('../middleware/acl/checkOwnership');
+
+
+router.post('/', todoController.addTodo());
+router.get('/', todoController.getTodo());
+router.put('/:id', checkOwnership('todo'), todoController.patchTodo());
+router.delete('/:id', checkOwnership('todo'), todoController.deleteTodo());
+
+module.exports = router;
diff --git a/packages/api/src/routes/userFarmDataRoute.js b/packages/api/src/routes/userFarmDataRoute.js
new file mode 100644
index 0000000000..e66ef003ba
--- /dev/null
+++ b/packages/api/src/routes/userFarmDataRoute.js
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userFarmDataRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const userFarmDataController = require('../controllers/userFarmDataController');
+const checkScope = require('../middleware/acl/checkScope');
+
+router.post('/', checkScope(['add:farm_schedules']), userFarmDataController.registerFarm());
+router.get('/:farm_id', checkScope(['get:farm_schedules']), userFarmDataController.getSchedule());
+
+module.exports = router;
diff --git a/packages/api/src/routes/userFarmRoute.js b/packages/api/src/routes/userFarmRoute.js
new file mode 100644
index 0000000000..dcbe4ca460
--- /dev/null
+++ b/packages/api/src/routes/userFarmRoute.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userFarmRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const userFarmController = require('../controllers/userFarmController');
+const checkScope = require('../middleware/acl/checkScope');
+const checkEditPrivilege = require('../middleware/acl/checkEditPrivilege');
+
+router.get('/user/:id', userFarmController.getUserFarmByUserID());
+
+router.get('/role/permissions', userFarmController.getAllRolePermissions());
+
+router.post('/', userFarmController.addUserFarm());
+
+router.patch('/consent/farm/:farm_id/user/:user_id', userFarmController.updateConsent());
+
+router.patch('/role/farm/:farm_id/user/:user_id', checkScope(['edit:user_role']), userFarmController.updateRole());
+
+router.patch('/status/farm/:farm_id/user/:user_id', checkScope(['edit:user_status']), userFarmController.updateStatus());
+
+router.get('/farm/:farm_id/user/:user_id', checkScope(['get:user_farm_info']), userFarmController.getFarmInfo());
+
+router.patch('/update/farm/:farm_id/user/:user_id', checkEditPrivilege(), userFarmController.updateUser());
+
+module.exports = router;
diff --git a/packages/api/src/routes/userRoute.js b/packages/api/src/routes/userRoute.js
new file mode 100644
index 0000000000..014ee3ada1
--- /dev/null
+++ b/packages/api/src/routes/userRoute.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (userRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const userController = require('../controllers/userController');
+const checkScope = require('../middleware/acl/checkScope');
+
+// Get the crop on a bed
+// router.get('/', userController.getAllFarms());
+//
+router.get('/:id', userController.getUserByID());
+
+router.get('/farm/:farm_id', checkScope(['get:users']), userController.getUserByFarmID());
+
+router.get('/active/farm/:farm_id', checkScope(['get:users']), userController.getActiveUserByFarmID());
+
+router.post('/', userController.addUser());
+
+router.put('/:id', checkScope(['edit:users']), userController.updateUser());
+
+router.delete('/:id', checkScope(['delete:users']), userController.delUser());
+
+router.patch('/deactivate/:id', checkScope(['delete:users']), userController.deactivateUser());
+
+router.patch('/consent/:id', userController.updateConsent());
+
+module.exports = router;
diff --git a/packages/api/src/routes/yieldRoute.js b/packages/api/src/routes/yieldRoute.js
new file mode 100644
index 0000000000..61f938338c
--- /dev/null
+++ b/packages/api/src/routes/yieldRoute.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (yieldRoute.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const express = require('express');
+const router = express.Router();
+const yieldController = require('../controllers/yieldController');
+// const authFarmId = require('../middleware/acl/authFarmId');
+// const checkOwnership = require('../middleware/acl/checkOwnership');
+const checkScope = require('../middleware/acl/checkScope');
+
+// Get the crop on a bed
+router.get('/farm/:farm_id', checkScope(['get:yields']), yieldController.getYieldByFarmId());
+
+router.post('/', checkScope(['add:yields']), yieldController.addYield());
+
+router.put('/:id', checkScope(['edit:yields']), yieldController.updateYield());
+
+router.delete('/:id', checkScope(['delete:yields']), yieldController.delYield());
+
+module.exports = router;
\ No newline at end of file
diff --git a/packages/api/src/server.js b/packages/api/src/server.js
new file mode 100644
index 0000000000..b7fd7d308e
--- /dev/null
+++ b/packages/api/src/server.js
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (server.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const path = require('path');
+require('dotenv').config();
+require('dotenv').config({ path: path.resolve(process.cwd(), '.env.local') });
+const express = require('express');
+const bodyParser = require('body-parser');
+const app = express();
+const Knex = require('knex');
+const environment = process.env.NODE_ENV || 'development';
+const config = require('../knexfile')[environment];
+const promiseRouter = require('express-promise-router');
+const { Model } = require('objection');
+const checkJwt = require('./middleware/acl/checkJwt');
+const cors = require('cors');
+
+// initialize knex
+const knex = Knex(config);
+
+// bind all models to a knex instance
+Model.knex(knex);
+
+// import routes
+const cropRoutes = require('./routes/cropRoute');
+const fieldRoutes = require('./routes/fieldRoute');
+const planRoutes = require('./routes/planRoute');
+const saleRoutes = require('./routes/saleRoute');
+//const shiftTaskRoutes = require('./routes/shiftTaskRoute');
+const taskTypeRoutes = require('./routes/taskTypeRoute');
+const todoRoutes = require('./routes/todoRoute');
+const userRoutes = require('./routes/userRoute');
+const farmExpenseRoute = require('./routes/farmExpenseRoute');
+// const notificationRoutes = require('./routes/notificationRoute');
+const farmRoutes = require('./routes/farmRoute');
+const logRoutes = require('./routes/logRoute');
+const shiftRoutes = require('./routes/shiftRoute');
+// const notificationSettingRoutes = require('./routes/notificationSettingRoute');
+const fieldCropRoutes = require('./routes/fieldCropRoute');
+const createUserRoutes = require('./routes/createUserRoute');
+const fertilizerRoutes = require('./routes/fertilizerRoute');
+const diseaseRoutes = require('./routes/diseaseRoute');
+const pesticideRoutes = require('./routes/pesticideRoute');
+const yieldRoutes = require('./routes/yieldRoute');
+const priceRoutes = require('./routes/priceRoute');
+const insightRoutes = require('./routes/insightRoute');
+const contactRoutes = require('./routes/contactRoute');
+const statsRoutes = require('./routes/statsRoute');
+const userFarmDataRoute = require('./routes/userFarmDataRoute');
+const userFarmRoute = require('./routes/userFarmRoute');
+const rolesRoutes = require('./routes/rolesRoute');
+const signUpRoutes = require('./routes/signUpRoute');
+
+const waterBalanceScheduler = require('./jobs/waterBalance/waterBalance');
+const nitrogenBalanceScheduler = require('./jobs/nitrogenBalance/nitrogenBalance');
+const farmDataScheduler = require('./jobs/sendFarmData/sendFarmData');
+
+// register API
+const router = promiseRouter();
+
+app.get('/', (req, res)=>{
+ res.sendStatus(200);
+});
+
+app.use(bodyParser.json())
+ .use(bodyParser.urlencoded({ extended: true }))
+
+ // prevent CORS errors
+ .use(cors())
+ .use((req, res, next) => {
+ res.header('Access-Control-Allow-Origin', '*');
+ res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
+ if (req.method === 'OPTIONS') {
+ res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
+ return res.status(200).json({});
+ }
+ next();
+ })
+ .use(router)
+ .set('json spaces', 2)
+ .use('/stats', statsRoutes)
+ .use('/sign_up', signUpRoutes)
+ // ACL middleware
+ .use(checkJwt)
+
+ // routes
+ .use('/crop', cropRoutes)
+ .use('/field', fieldRoutes)
+ .use('/plan', planRoutes)
+ .use('/sale', saleRoutes)
+ //.use('/shift_task', shiftTaskRoutes)
+ .use('/task_type', taskTypeRoutes)
+ .use('/todo', todoRoutes)
+ .use('/user', userRoutes)
+ .use('/expense', farmExpenseRoute)
+ // .use('/notification', notificationRoutes)
+ .use('/farm', farmRoutes)
+ .use('/log', logRoutes)
+ .use('/shift', shiftRoutes)
+ // .use('/notification_setting', notificationSettingRoutes)
+ .use('/field_crop', fieldCropRoutes)
+ .use('/create_user', createUserRoutes)
+ .use('/fertilizer', fertilizerRoutes)
+ .use('/disease', diseaseRoutes)
+ .use('/pesticide', pesticideRoutes)
+ .use('/yield', yieldRoutes)
+ .use('/price', priceRoutes)
+ .use('/insight', insightRoutes)
+ .use('/contact', contactRoutes)
+ .use('/farmdata', userFarmDataRoute)
+ .use('/user_farm', userFarmRoute)
+ .use('/roles', rolesRoutes)
+
+ // handle errors
+ .use((req, res, next) => {
+ const error = new Error('Not found');
+ error.status = 404;
+ next(error);
+ })
+
+ .use((error, req, res, next) => {
+ res.status(error.status || 500);
+ res.json({
+ error: {
+ message: error.message,
+ },
+ })
+ });
+
+const port = process.env.PORT || 5000;
+app.listen(port, () => {
+// eslint-disable-next-line no-console
+ console.log('LiteFarm Backend listening on port ' + port + '!');
+});
+
+waterBalanceScheduler.registerHourlyJob();
+waterBalanceScheduler.registerDailyJob();
+
+nitrogenBalanceScheduler.registerDailyJob();
+
+farmDataScheduler.registerJob();
+
+// eslint-disable-next-line no-console
+console.log('LiteFarm Water Balance Scheduler Enabled');
diff --git a/packages/api/src/templates/invitation_to_farm_email.html b/packages/api/src/templates/invitation_to_farm_email.html
new file mode 100644
index 0000000000..b977e16da9
--- /dev/null
+++ b/packages/api/src/templates/invitation_to_farm_email.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+ LiteFarm Consent Withheld Email
+
+
+
+
Dear {{first_name}},
+
+
The great folks at {{farm}} have invited you to join their team on LiteFarm! LiteFarm is an open-source software tool for helping farmers manage their farms. You can read more about LiteFarm at litefarm.org.
+
+
You can accept this invitation (on any device) using the button below:
+
+
+
\ No newline at end of file
diff --git a/packages/api/src/templates/revocation_of_access_to_farm_email.html b/packages/api/src/templates/revocation_of_access_to_farm_email.html
new file mode 100644
index 0000000000..cd8c43b033
--- /dev/null
+++ b/packages/api/src/templates/revocation_of_access_to_farm_email.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ LiteFarm Consent Withheld Email
+
+
+
+
Dear {{first_name}},
+
It looks like one of the administrators at {{farm}} has revoked your access to their farm on LiteFarm. If this comes as a surprise, you should reach out to your contact there to fix the problem.
+
Cheers,
+
The LiteFarm team
+
+
\ No newline at end of file
diff --git a/packages/api/src/templates/sendEmailTemplate.js b/packages/api/src/templates/sendEmailTemplate.js
new file mode 100644
index 0000000000..3cf3c4ffec
--- /dev/null
+++ b/packages/api/src/templates/sendEmailTemplate.js
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 Free Software Foundation, Inc.
+ * This file (sendEmailTemplate.js) is part of LiteFarm.
+ *
+ * LiteFarm is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * LiteFarm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details, see .
+ */
+
+const nodemailer = require('nodemailer');
+const credentials = require('../credentials');
+const handlebars = require('handlebars');
+const fs = require('fs-extra');
+const path = require('path');
+const jsdom = require("jsdom");
+const { JSDOM } = jsdom;
+
+class sendEmailTemplate {
+ static async sendEmail(template_path, subject, replacements, email, sender, modifyHTML=false, joinURL=null) {
+ const transporter = nodemailer.createTransport({
+ host: 'smtp.gmail.com',
+ port: 465,
+ secure: true,
+ service: 'gmail',
+ auth: {
+ type: 'OAuth2',
+ clientId: credentials.LiteFarm_Service_Gmail.client_id,
+ clientSecret: credentials.LiteFarm_Service_Gmail.client_secret,
+ },
+ });
+
+ const filePath = path.join(__dirname, template_path);
+ const html = await fs.readFile(filePath, 'utf8');
+
+ // this compiles the html file, but template itself is a function
+ let template = handlebars.compile(html);
+
+ // after this the template is converted to strings
+ let htmlToSend = template(replacements);
+
+ // this changes the join button href for invite a user email
+ if(template_path === '../templates/invitation_to_farm_email.html'){
+ // using JSDOM to dynamically set the href for the Join button
+ let dom = new JSDOM(htmlToSend);
+
+ if(modifyHTML){
+ dom.window.document.getElementById('join-button').setAttribute('href', joinURL);
+ }else{
+ const environment = process.env.NODE_ENV || 'development';
+ let homeUrl;
+ // preferably with a switch case, but writing if statements is faster :)
+ if(environment === 'integration'){
+ homeUrl = 'https://beta.litefarm.org';
+ }else if(environment === 'production'){
+ homeUrl = 'https://www.litefarm.org';
+ }else if(environment === 'development'){
+ homeUrl = 'localhost:3000'
+ }
+ dom.window.document.getElementById('join-button').setAttribute('href', homeUrl);
+ }
+ // this exports the dom back to a string
+ htmlToSend = dom.serialize();
+ }
+
+ const MailInfo = {
+ from: 'LiteFarm <' + sender + '>',
+ to: email,
+ subject,
+ html: htmlToSend,
+ auth: {
+ user: 'system@litefarm.org',
+ refreshToken: credentials.LiteFarm_Service_Gmail.refresh_token,
+ },
+ };
+
+ transporter.sendMail(MailInfo, function (error, info) {
+ if (error) {
+ return console.log(error)
+ }
+ console.log('Message sent: ' + info.response);
+ });
+
+ }
+}
+
+module.exports = sendEmailTemplate;
diff --git a/packages/api/src/templates/send_confirmation_email.html b/packages/api/src/templates/send_confirmation_email.html
new file mode 100644
index 0000000000..ef8ff4e2af
--- /dev/null
+++ b/packages/api/src/templates/send_confirmation_email.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+ LiteFarm Confirmation Email
+
+
+
+
Dear {{first_name}},
+
+
Congrats on becoming the newest (and best?) {{role}} at {{farm}}!
+
You can log-in (on any device) using the button below:
+
+
+
\ No newline at end of file
diff --git a/packages/api/src/templates/withheld_consent_email.html b/packages/api/src/templates/withheld_consent_email.html
new file mode 100644
index 0000000000..faed957cd1
--- /dev/null
+++ b/packages/api/src/templates/withheld_consent_email.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+ LiteFarm Consent Withheld Email
+
+
+
+
Dear {{first_name}},
+
Recently, while joining {{farm}} on the LiteFarm application, you decided to withhold your consent regarding the LiteFarm privacy policy. This is absolutely your right, however, it means you won’t be able to access the application. We’re very sorry about this.
+
+
We’ve de-activated your association to {{farm}}. However, we still have the basic information you shared with us while setting up your user account. If you’re associated with other farms, we also have any information you entered while working with those farms as well.
+
+
You have the following rights regarding your data:
+
+
To know what data we have about you and request a copy of it
+
To update or correct any data we have about you
+
Request that we stop collecting your data (you’ve just done this)
+
Request a transfer of your data
+
Request that we delete your data
+
+
+To request any of these actions, send an email to data@litefarm.org with your request and we’ll take care of you.
+
+
+Otherwise, if you change your mind, you can log-in (on any device) at any time and accept our privacy policy using the button below:
+