Showing preview only (945K chars total). Download the full file or copy to clipboard to get everything.
Repository: fohristiwhirl/nibbler
Branch: master
Commit: fb29b0467172
Files: 60
Total size: 883.4 KB
Directory structure:
gitextract_lqka34fb/
├── LICENSE.md
├── README.md
└── files/
├── .editorconfig
├── .gitignore
├── misc/
│ ├── chess960.txt
│ ├── escape_and_missing_quotes.pgn
│ ├── nibbler_menu_translations_template.json
│ ├── pathological.pgn
│ ├── pgn.txt
│ ├── scraps.js
│ ├── state_logic.txt
│ └── uci.txt
├── res/
│ └── linux/
│ └── nibbler.desktop
├── scripts/
│ ├── builder.py
│ ├── install.sh
│ └── install_mac.sh
└── src/
├── main.js
├── modules/
│ ├── alert_main.js
│ ├── background.js
│ ├── config_io.js
│ ├── custom_uci.js
│ ├── debork_json.js
│ ├── empty.js
│ ├── engineconfig_io.js
│ ├── images.js
│ ├── messages.js
│ ├── running_as_electron.js
│ ├── stringify.js
│ ├── translate.js
│ └── translations.js
├── nibbler.css
├── nibbler.html
├── package.json
└── renderer/
├── 10_globals.js
├── 20_utils.js
├── 30_point.js
├── 31_sliders.js
├── 40_position.js
├── 41_fen.js
├── 42_perft.js
├── 43_chess960.js
├── 50_table.js
├── 51_node.js
├── 52_sorted_moves.js
├── 55_winrate_graph.js
├── 60_pgn_utils.js
├── 61_pgn_parse.js
├── 63_polyglot.js
├── 65_loaders.js
├── 71_tree_handler.js
├── 72_tree_draw.js
├── 75_looker.js
├── 80_info.js
├── 81_arrows.js
├── 82_infobox.js
├── 83_statusbox.js
├── 90_engine.js
├── 95_hub.js
├── 97_drag.js
└── 99_start.js
================================================
FILE CONTENTS
================================================
================================================
FILE: LICENSE.md
================================================
### GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
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.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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 <https://www.gnu.org/licenses/>.
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:
<program> Copyright (C) <year> <name of author>
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 <https://www.gnu.org/licenses/>.
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 <https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
# Nibbler
Nibbler is a real-time analysis GUI for [Leela Chess Zero](http://lczero.org/play/quickstart/) (Lc0), which runs Leela in the background and constantly displays opinions about the current position. You can also compel the engine to evaluate one or more specific moves. Nibbler is loosely inspired by [Lizzie](https://github.com/featurecat/lizzie) and [Sabaki](https://github.com/SabakiHQ/Sabaki).
These days, Nibbler more-or-less works with traditional engines like [Stockfish](https://stockfishchess.org/), too. (Ensure `MultiPV` is `1`, `Threads` (CPU) is set, and `Hash` is set (more is better), for maximum strength.)
For prebuilt binary releases, see the [Releases](https://github.com/rooklift/nibbler/releases) section. For help, the [Discord](https://discordapp.com/invite/pKujYxD) may be your best bet, or open an issue here.

## Features
* Display Leela's top choices graphically.
* Winrate graph.
* Optionally shows Leela statistics like N, P, Q, S, U, V, and WDL for each move.
* UCI `searchmoves` functionality.
* Automatic full-game analysis.
* Play against Leela from any position.
* Leela self-play from any position.
* PGN loading via menu, clipboard, or drag-and-drop.
* Supports PGN variations of arbitrary depth.
* FEN loading.
* Chess 960.
## Installation - Windows / Linux
Some Windows and Linux standalone releases are uploaded to the [Releases](https://github.com/rooklift/nibbler/releases) section from time to time.
*Alternatively*, it is possible to run Nibbler from source. This requires Electron, but has no other dependencies. If you have Electron installed (e.g. `npm install -g electron`) you can likely enter the `/src` directory, then do `electron .` to run it. Nibbler should be compatible with at least version 5 and above.
You could also build a standalone app. See comments inside the Python script `builder.py` for info.
## Linux install script
Linux users can make use of the following *one-liner* to install the latest version of Nibbler:
```bash
curl -L https://raw.githubusercontent.com/rooklift/nibbler/master/files/scripts/install.sh | bash
```
## Installation - Mac
Mac builds have been made by [twoplan](https://github.com/twoplan/Nibbler-for-macOS) and [Jac-Zac](https://github.com/Jac-Zac/Nibbler_MacOS) and [Zamana](https://github.com/Zamana/nibbler) - the last of which is probably the most up-to-date.
## Mac install script
Alternatively, MacOS users can run the following *one-liner* to assemble Nibbler locally. This (hopefully) removes any codesigning issues (Gatekeeper refusing to open unauthorized apps) by building Nibbler on-the-fly, though I can't test it myself:
```bash
curl -L https://raw.githubusercontent.com/rooklift/nibbler/master/files/scripts/install_mac.sh | bash
```
## Advanced engine options
Most people won't need them, but all of Leela's engine options can be set in two ways:
* Leela automatically loads options from a file called `lc0.config` at startup - see [here](https://lczero.org/play/configuration/flags/#config-file).
* Nibbler will send UCI options specified in Nibbler's own `engines.json` file (which you can find via the Dev menu).
## Hints and tips
An option to enable the UCI `searchmoves` feature is available in the Analysis menu. Once enabled, one or more moves can be specified as moves to focus on; Leela will ignore other moves. This is useful when you think Leela isn't giving a certain move enough attention.
Leela forgets much of the evaluation if the position changes. To mitigate this, an option in the Analysis menu allows you to hover over a PV (on the right) and see it play out on the board, without changing the position we're actually analysing. You might prefer to halt Leela while doing this, so that the PVs don't change while you're looking at them.
Leela running out of RAM can be a problem if searches go on too long. You might like to set a reasonable node limit (in the Engine menu), perhaps 10 million or so.
## Thanks
Thanks to everyone in Discord and GitHub who's offered advice and suggestions; and thanks to all Lc0 devs and GPU-hours contributors!
The pieces are from [Lichess](https://lichess.org/).
Icon design by [ciriousjoker](https://github.com/ciriousjoker) based on [this](https://www.svgrepo.com/svg/155301/chess).
================================================
FILE: files/.editorconfig
================================================
[*]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = true
================================================
FILE: files/.gitignore
================================================
.DS_Store
scripts/dist
scripts/electron_zipped
scripts/update_my_installation.py
================================================
FILE: files/misc/chess960.txt
================================================
https://www.mark-weeks.com/cfaa/chess960/c960strt.htm
I've verified Nibbler produces exactly the same results given a Chess960 number.
000 BBQNNRKR bbqnnrkr 959 RKRNNQBB
001 BQNBNRKR bqnbnrkr 955 RKRNBNQB
002 BQNNRBKR bqnnrbkr 951 RKBRNNQB
003 BQNNRKRB bqnnrkrb 947 BRKRNNQB
004 QBBNNRKR qbbnnrkr 958 RKRNNBBQ
005 QNBBNRKR qnbbnrkr 954 RKRNBBNQ
006 QNBNRBKR qnbnrbkr 950 RKBRNBNQ
007 QNBNRKRB qnbnrkrb 946 BRKRNBNQ
008 QBNNBRKR qbnnbrkr 957 RKRBNNBQ
009 QNNBBRKR qnnbbrkr 953 RKRBBNNQ
010 QNNRBBKR qnnrbbkr 949 RKBBRNNQ
011 QNNRBKRB qnnrbkrb 945 BRKBRNNQ
012 QBNNRKBR qbnnrkbr 956 RBKRNNBQ
013 QNNBRKBR qnnbrkbr 952 RBKRBNNQ
014 QNNRKBBR qnnrkbbr 948 RBBKRNNQ
015 QNNRKRBB qnnrkrbb 944 BBRKRNNQ
016 BBNQNRKR bbnqnrkr 943 RKRNQNBB
017 BNQBNRKR bnqbnrkr 939 RKRNBQNB
018 BNQNRBKR bnqnrbkr 935 RKBRNQNB
019 BNQNRKRB bnqnrkrb 931 BRKRNQNB
020 NBBQNRKR nbbqnrkr 942 RKRNQBBN
021 NQBBNRKR nqbbnrkr 938 RKRNBBQN
022 NQBNRBKR nqbnrbkr 934 RKBRNBQN
023 NQBNRKRB nqbnrkrb 930 BRKRNBQN
024 NBQNBRKR nbqnbrkr 941 RKRBNQBN
025 NQNBBRKR nqnbbrkr 937 RKRBBNQN
026 NQNRBBKR nqnrbbkr 933 RKBBRNQN
027 NQNRBKRB nqnrbkrb 929 BRKBRNQN
028 NBQNRKBR nbqnrkbr 940 RBKRNQBN
029 NQNBRKBR nqnbrkbr 936 RBKRBNQN
030 NQNRKBBR nqnrkbbr 932 RBBKRNQN
031 NQNRKRBB nqnrkrbb 928 BBRKRNQN
032 BBNNQRKR bbnnqrkr 927 RKRQNNBB
033 BNNBQRKR bnnbqrkr 923 RKRQBNNB
034 BNNQRBKR bnnqrbkr 919 RKBRQNNB
035 BNNQRKRB bnnqrkrb 915 BRKRQNNB
036 NBBNQRKR nbbnqrkr 926 RKRQNBBN
037 NNBBQRKR nnbbqrkr 922 RKRQBBNN
038 NNBQRBKR nnbqrbkr 918 RKBRQBNN
039 NNBQRKRB nnbqrkrb 914 BRKRQBNN
040 NBNQBRKR nbnqbrkr 925 RKRBQNBN
041 NNQBBRKR nnqbbrkr 921 RKRBBQNN
042 NNQRBBKR nnqrbbkr 917 RKBBRQNN
043 NNQRBKRB nnqrbkrb 913 BRKBRQNN
044 NBNQRKBR nbnqrkbr 924 RBKRQNBN
045 NNQBRKBR nnqbrkbr 920 RBKRBQNN
046 NNQRKBBR nnqrkbbr 916 RBBKRQNN
047 NNQRKRBB nnqrkrbb 912 BBRKRQNN
048 BBNNRQKR bbnnrqkr 911 RKQRNNBB
049 BNNBRQKR bnnbrqkr 907 RKQRBNNB
050 BNNRQBKR bnnrqbkr 903 RKBQRNNB
051 BNNRQKRB bnnrqkrb 899 BRKQRNNB
052 NBBNRQKR nbbnrqkr 910 RKQRNBBN
053 NNBBRQKR nnbbrqkr 906 RKQRBBNN
054 NNBRQBKR nnbrqbkr 902 RKBQRBNN
055 NNBRQKRB nnbrqkrb 898 BRKQRBNN
056 NBNRBQKR nbnrbqkr 909 RKQBRNBN
057 NNRBBQKR nnrbbqkr 905 RKQBBRNN
058 NNRQBBKR nnrqbbkr 901 RKBBQRNN
059 NNRQBKRB nnrqbkrb 897 BRKBQRNN
060 NBNRQKBR nbnrqkbr 908 RBKQRNBN
061 NNRBQKBR nnrbqkbr 904 RBKQBRNN
062 NNRQKBBR nnrqkbbr 900 RBBKQRNN
063 NNRQKRBB nnrqkrbb 896 BBRKQRNN
064 BBNNRKQR bbnnrkqr 895 RQKRNNBB
065 BNNBRKQR bnnbrkqr 891 RQKRBNNB
066 BNNRKBQR bnnrkbqr 887 RQBKRNNB
067 BNNRKQRB bnnrkqrb 883 BRQKRNNB
068 NBBNRKQR nbbnrkqr 894 RQKRNBBN
069 NNBBRKQR nnbbrkqr 890 RQKRBBNN
070 NNBRKBQR nnbrkbqr 886 RQBKRBNN
071 NNBRKQRB nnbrkqrb 882 BRQKRBNN
072 NBNRBKQR nbnrbkqr 893 RQKBRNBN
073 NNRBBKQR nnrbbkqr 889 RQKBBRNN
074 NNRKBBQR nnrkbbqr 885 RQBBKRNN
075 NNRKBQRB nnrkbqrb 881 BRQBKRNN
076 NBNRKQBR nbnrkqbr 892 RBQKRNBN
077 NNRBKQBR nnrbkqbr 888 RBQKBRNN
078 NNRKQBBR nnrkqbbr 884 RBBQKRNN
079 NNRKQRBB nnrkqrbb 880 BBRQKRNN
080 BBNNRKRQ bbnnrkrq 879 QRKRNNBB
081 BNNBRKRQ bnnbrkrq 875 QRKRBNNB
082 BNNRKBRQ bnnrkbrq 871 QRBKRNNB
083 BNNRKRQB bnnrkrqb 867 BQRKRNNB
084 NBBNRKRQ nbbnrkrq 878 QRKRNBBN
085 NNBBRKRQ nnbbrkrq 874 QRKRBBNN
086 NNBRKBRQ nnbrkbrq 870 QRBKRBNN
087 NNBRKRQB nnbrkrqb 866 BQRKRBNN
088 NBNRBKRQ nbnrbkrq 877 QRKBRNBN
089 NNRBBKRQ nnrbbkrq 873 QRKBBRNN
090 NNRKBBRQ nnrkbbrq 869 QRBBKRNN
091 NNRKBRQB nnrkbrqb 865 BQRBKRNN
092 NBNRKRBQ nbnrkrbq 876 QBRKRNBN
093 NNRBKRBQ nnrbkrbq 872 QBRKBRNN
094 NNRKRBBQ nnrkrbbq 868 QBBRKRNN
095 NNRKRQBB nnrkrqbb 864 BBQRKRNN
096 BBQNRNKR bbqnrnkr 863 RKNRNQBB
097 BQNBRNKR bqnbrnkr 859 RKNRBNQB
098 BQNRNBKR bqnrnbkr 855 RKBNRNQB
099 BQNRNKRB bqnrnkrb 851 BRKNRNQB
100 QBBNRNKR qbbnrnkr 862 RKNRNBBQ
101 QNBBRNKR qnbbrnkr 858 RKNRBBNQ
102 QNBRNBKR qnbrnbkr 854 RKBNRBNQ
103 QNBRNKRB qnbrnkrb 850 BRKNRBNQ
104 QBNRBNKR qbnrbnkr 861 RKNBRNBQ
105 QNRBBNKR qnrbbnkr 857 RKNBBRNQ
106 QNRNBBKR qnrnbbkr 853 RKBBNRNQ
107 QNRNBKRB qnrnbkrb 849 BRKBNRNQ
108 QBNRNKBR qbnrnkbr 860 RBKNRNBQ
109 QNRBNKBR qnrbnkbr 856 RBKNBRNQ
110 QNRNKBBR qnrnkbbr 852 RBBKNRNQ
111 QNRNKRBB qnrnkrbb 848 BBRKNRNQ
112 BBNQRNKR bbnqrnkr 847 RKNRQNBB
113 BNQBRNKR bnqbrnkr 843 RKNRBQNB
114 BNQRNBKR bnqrnbkr 839 RKBNRQNB
115 BNQRNKRB bnqrnkrb 835 BRKNRQNB
116 NBBQRNKR nbbqrnkr 846 RKNRQBBN
117 NQBBRNKR nqbbrnkr 842 RKNRBBQN
118 NQBRNBKR nqbrnbkr 838 RKBNRBQN
119 NQBRNKRB nqbrnkrb 834 BRKNRBQN
120 NBQRBNKR nbqrbnkr 845 RKNBRQBN
121 NQRBBNKR nqrbbnkr 841 RKNBBRQN
122 NQRNBBKR nqrnbbkr 837 RKBBNRQN
123 NQRNBKRB nqrnbkrb 833 BRKBNRQN
124 NBQRNKBR nbqrnkbr 844 RBKNRQBN
125 NQRBNKBR nqrbnkbr 840 RBKNBRQN
126 NQRNKBBR nqrnkbbr 836 RBBKNRQN
127 NQRNKRBB nqrnkrbb 832 BBRKNRQN
128 BBNRQNKR bbnrqnkr 831 RKNQRNBB
129 BNRBQNKR bnrbqnkr 827 RKNQBRNB
130 BNRQNBKR bnrqnbkr 823 RKBNQRNB
131 BNRQNKRB bnrqnkrb 819 BRKNQRNB
132 NBBRQNKR nbbrqnkr 830 RKNQRBBN
133 NRBBQNKR nrbbqnkr 826 RKNQBBRN
134 NRBQNBKR nrbqnbkr 822 RKBNQBRN
135 NRBQNKRB nrbqnkrb 818 BRKNQBRN
136 NBRQBNKR nbrqbnkr 829 RKNBQRBN
137 NRQBBNKR nrqbbnkr 825 RKNBBQRN
138 NRQNBBKR nrqnbbkr 821 RKBBNQRN
139 NRQNBKRB nrqnbkrb 817 BRKBNQRN
140 NBRQNKBR nbrqnkbr 828 RBKNQRBN
141 NRQBNKBR nrqbnkbr 824 RBKNBQRN
142 NRQNKBBR nrqnkbbr 820 RBBKNQRN
143 NRQNKRBB nrqnkrbb 816 BBRKNQRN
144 BBNRNQKR bbnrnqkr 815 RKQNRNBB
145 BNRBNQKR bnrbnqkr 811 RKQNBRNB
146 BNRNQBKR bnrnqbkr 807 RKBQNRNB
147 BNRNQKRB bnrnqkrb 803 BRKQNRNB
148 NBBRNQKR nbbrnqkr 814 RKQNRBBN
149 NRBBNQKR nrbbnqkr 810 RKQNBBRN
150 NRBNQBKR nrbnqbkr 806 RKBQNBRN
151 NRBNQKRB nrbnqkrb 802 BRKQNBRN
152 NBRNBQKR nbrnbqkr 813 RKQBNRBN
153 NRNBBQKR nrnbbqkr 809 RKQBBNRN
154 NRNQBBKR nrnqbbkr 805 RKBBQNRN
155 NRNQBKRB nrnqbkrb 801 BRKBQNRN
156 NBRNQKBR nbrnqkbr 812 RBKQNRBN
157 NRNBQKBR nrnbqkbr 808 RBKQBNRN
158 NRNQKBBR nrnqkbbr 804 RBBKQNRN
159 NRNQKRBB nrnqkrbb 800 BBRKQNRN
160 BBNRNKQR bbnrnkqr 799 RQKNRNBB
161 BNRBNKQR bnrbnkqr 795 RQKNBRNB
162 BNRNKBQR bnrnkbqr 791 RQBKNRNB
163 BNRNKQRB bnrnkqrb 787 BRQKNRNB
164 NBBRNKQR nbbrnkqr 798 RQKNRBBN
165 NRBBNKQR nrbbnkqr 794 RQKNBBRN
166 NRBNKBQR nrbnkbqr 790 RQBKNBRN
167 NRBNKQRB nrbnkqrb 786 BRQKNBRN
168 NBRNBKQR nbrnbkqr 797 RQKBNRBN
169 NRNBBKQR nrnbbkqr 793 RQKBBNRN
170 NRNKBBQR nrnkbbqr 789 RQBBKNRN
171 NRNKBQRB nrnkbqrb 785 BRQBKNRN
172 NBRNKQBR nbrnkqbr 796 RBQKNRBN
173 NRNBKQBR nrnbkqbr 792 RBQKBNRN
174 NRNKQBBR nrnkqbbr 788 RBBQKNRN
175 NRNKQRBB nrnkqrbb 784 BBRQKNRN
176 BBNRNKRQ bbnrnkrq 783 QRKNRNBB
177 BNRBNKRQ bnrbnkrq 779 QRKNBRNB
178 BNRNKBRQ bnrnkbrq 775 QRBKNRNB
179 BNRNKRQB bnrnkrqb 771 BQRKNRNB
180 NBBRNKRQ nbbrnkrq 782 QRKNRBBN
181 NRBBNKRQ nrbbnkrq 778 QRKNBBRN
182 NRBNKBRQ nrbnkbrq 774 QRBKNBRN
183 NRBNKRQB nrbnkrqb 770 BQRKNBRN
184 NBRNBKRQ nbrnbkrq 781 QRKBNRBN
185 NRNBBKRQ nrnbbkrq 777 QRKBBNRN
186 NRNKBBRQ nrnkbbrq 773 QRBBKNRN
187 NRNKBRQB nrnkbrqb 769 BQRBKNRN
188 NBRNKRBQ nbrnkrbq 780 QBRKNRBN
189 NRNBKRBQ nrnbkrbq 776 QBRKBNRN
190 NRNKRBBQ nrnkrbbq 772 QBBRKNRN
191 NRNKRQBB nrnkrqbb 768 BBQRKNRN
192 BBQNRKNR bbqnrknr 671 RNKRNQBB
193 BQNBRKNR bqnbrknr 667 RNKRBNQB
194 BQNRKBNR bqnrkbnr 663 RNBKRNQB
195 BQNRKNRB bqnrknrb 659 BRNKRNQB
196 QBBNRKNR qbbnrknr 670 RNKRNBBQ
197 QNBBRKNR qnbbrknr 666 RNKRBBNQ
198 QNBRKBNR qnbrkbnr 662 RNBKRBNQ
199 QNBRKNRB qnbrknrb 658 BRNKRBNQ
200 QBNRBKNR qbnrbknr 669 RNKBRNBQ
201 QNRBBKNR qnrbbknr 665 RNKBBRNQ
202 QNRKBBNR qnrkbbnr 661 RNBBKRNQ
203 QNRKBNRB qnrkbnrb 657 BRNBKRNQ
204 QBNRKNBR qbnrknbr 668 RBNKRNBQ
205 QNRBKNBR qnrbknbr 664 RBNKBRNQ
206 QNRKNBBR qnrknbbr 660 RBBNKRNQ
207 QNRKNRBB qnrknrbb 656 BBRNKRNQ
208 BBNQRKNR bbnqrknr 655 RNKRQNBB
209 BNQBRKNR bnqbrknr 651 RNKRBQNB
210 BNQRKBNR bnqrkbnr 647 RNBKRQNB
211 BNQRKNRB bnqrknrb 643 BRNKRQNB
212 NBBQRKNR nbbqrknr 654 RNKRQBBN
213 NQBBRKNR nqbbrknr 650 RNKRBBQN
214 NQBRKBNR nqbrkbnr 646 RNBKRBQN
215 NQBRKNRB nqbrknrb 642 BRNKRBQN
216 NBQRBKNR nbqrbknr 653 RNKBRQBN
217 NQRBBKNR nqrbbknr 649 RNKBBRQN
218 NQRKBBNR nqrkbbnr 645 RNBBKRQN
219 NQRKBNRB nqrkbnrb 641 BRNBKRQN
220 NBQRKNBR nbqrknbr 652 RBNKRQBN
221 NQRBKNBR nqrbknbr 648 RBNKBRQN
222 NQRKNBBR nqrknbbr 644 RBBNKRQN
223 NQRKNRBB nqrknrbb 640 BBRNKRQN
224 BBNRQKNR bbnrqknr 639 RNKQRNBB
225 BNRBQKNR bnrbqknr 635 RNKQBRNB
226 BNRQKBNR bnrqkbnr 631 RNBKQRNB
227 BNRQKNRB bnrqknrb 627 BRNKQRNB
228 NBBRQKNR nbbrqknr 638 RNKQRBBN
229 NRBBQKNR nrbbqknr 634 RNKQBBRN
230 NRBQKBNR nrbqkbnr 630 RNBKQBRN
231 NRBQKNRB nrbqknrb 626 BRNKQBRN
232 NBRQBKNR nbrqbknr 637 RNKBQRBN
233 NRQBBKNR nrqbbknr 633 RNKBBQRN
234 NRQKBBNR nrqkbbnr 629 RNBBKQRN
235 NRQKBNRB nrqkbnrb 625 BRNBKQRN
236 NBRQKNBR nbrqknbr 636 RBNKQRBN
237 NRQBKNBR nrqbknbr 632 RBNKBQRN
238 NRQKNBBR nrqknbbr 628 RBBNKQRN
239 NRQKNRBB nrqknrbb 624 BBRNKQRN
240 BBNRKQNR bbnrkqnr 623 RNQKRNBB
241 BNRBKQNR bnrbkqnr 619 RNQKBRNB
242 BNRKQBNR bnrkqbnr 615 RNBQKRNB
243 BNRKQNRB bnrkqnrb 611 BRNQKRNB
244 NBBRKQNR nbbrkqnr 622 RNQKRBBN
245 NRBBKQNR nrbbkqnr 618 RNQKBBRN
246 NRBKQBNR nrbkqbnr 614 RNBQKBRN
247 NRBKQNRB nrbkqnrb 610 BRNQKBRN
248 NBRKBQNR nbrkbqnr 621 RNQBKRBN
249 NRKBBQNR nrkbbqnr 617 RNQBBKRN
250 NRKQBBNR nrkqbbnr 613 RNBBQKRN
251 NRKQBNRB nrkqbnrb 609 BRNBQKRN
252 NBRKQNBR nbrkqnbr 620 RBNQKRBN
253 NRKBQNBR nrkbqnbr 616 RBNQBKRN
254 NRKQNBBR nrkqnbbr 612 RBBNQKRN
255 NRKQNRBB nrkqnrbb 608 BBRNQKRN
256 BBNRKNQR bbnrknqr 607 RQNKRNBB
257 BNRBKNQR bnrbknqr 603 RQNKBRNB
258 BNRKNBQR bnrknbqr 599 RQBNKRNB
259 BNRKNQRB bnrknqrb 595 BRQNKRNB
260 NBBRKNQR nbbrknqr 606 RQNKRBBN
261 NRBBKNQR nrbbknqr 602 RQNKBBRN
262 NRBKNBQR nrbknbqr 598 RQBNKBRN
263 NRBKNQRB nrbknqrb 594 BRQNKBRN
264 NBRKBNQR nbrkbnqr 605 RQNBKRBN
265 NRKBBNQR nrkbbnqr 601 RQNBBKRN
266 NRKNBBQR nrknbbqr 597 RQBBNKRN
267 NRKNBQRB nrknbqrb 593 BRQBNKRN
268 NBRKNQBR nbrknqbr 604 RBQNKRBN
269 NRKBNQBR nrkbnqbr 600 RBQNBKRN
270 NRKNQBBR nrknqbbr 596 RBBQNKRN
271 NRKNQRBB nrknqrbb 592 BBRQNKRN
272 BBNRKNRQ bbnrknrq 591 QRNKRNBB
273 BNRBKNRQ bnrbknrq 587 QRNKBRNB
274 BNRKNBRQ bnrknbrq 583 QRBNKRNB
275 BNRKNRQB bnrknrqb 579 BQRNKRNB
276 NBBRKNRQ nbbrknrq 590 QRNKRBBN
277 NRBBKNRQ nrbbknrq 586 QRNKBBRN
278 NRBKNBRQ nrbknbrq 582 QRBNKBRN
279 NRBKNRQB nrbknrqb 578 BQRNKBRN
280 NBRKBNRQ nbrkbnrq 589 QRNBKRBN
281 NRKBBNRQ nrkbbnrq 585 QRNBBKRN
282 NRKNBBRQ nrknbbrq 581 QRBBNKRN
283 NRKNBRQB nrknbrqb 577 BQRBNKRN
284 NBRKNRBQ nbrknrbq 588 QBRNKRBN
285 NRKBNRBQ nrkbnrbq 584 QBRNBKRN
286 NRKNRBBQ nrknrbbq 580 QBBRNKRN
287 NRKNRQBB nrknrqbb 576 BBQRNKRN
288 BBQNRKRN bbqnrkrn 383 NRKRNQBB
289 BQNBRKRN bqnbrkrn 379 NRKRBNQB
290 BQNRKBRN bqnrkbrn 375 NRBKRNQB
291 BQNRKRNB bqnrkrnb 371 BNRKRNQB
292 QBBNRKRN qbbnrkrn 382 NRKRNBBQ
293 QNBBRKRN qnbbrkrn 378 NRKRBBNQ
294 QNBRKBRN qnbrkbrn 374 NRBKRBNQ
295 QNBRKRNB qnbrkrnb 370 BNRKRBNQ
296 QBNRBKRN qbnrbkrn 381 NRKBRNBQ
297 QNRBBKRN qnrbbkrn 377 NRKBBRNQ
298 QNRKBBRN qnrkbbrn 373 NRBBKRNQ
299 QNRKBRNB qnrkbrnb 369 BNRBKRNQ
300 QBNRKRBN qbnrkrbn 380 NBRKRNBQ
301 QNRBKRBN qnrbkrbn 376 NBRKBRNQ
302 QNRKRBBN qnrkrbbn 372 NBBRKRNQ
303 QNRKRNBB qnrkrnbb 368 BBNRKRNQ
304 BBNQRKRN bbnqrkrn 367 NRKRQNBB
305 BNQBRKRN bnqbrkrn 363 NRKRBQNB
306 BNQRKBRN bnqrkbrn 359 NRBKRQNB
307 BNQRKRNB bnqrkrnb 355 BNRKRQNB
308 NBBQRKRN nbbqrkrn 366 NRKRQBBN
309 NQBBRKRN nqbbrkrn 362 NRKRBBQN
310 NQBRKBRN nqbrkbrn 358 NRBKRBQN
311 NQBRKRNB nqbrkrnb 354 BNRKRBQN
312 NBQRBKRN nbqrbkrn 365 NRKBRQBN
313 NQRBBKRN nqrbbkrn 361 NRKBBRQN
314 NQRKBBRN nqrkbbrn 357 NRBBKRQN
315 NQRKBRNB nqrkbrnb 353 BNRBKRQN
316 NBQRKRBN nbqrkrbn 364 NBRKRQBN
317 NQRBKRBN nqrbkrbn 360 NBRKBRQN
318 NQRKRBBN nqrkrbbn 356 NBBRKRQN
319 NQRKRNBB nqrkrnbb 352 BBNRKRQN
320 BBNRQKRN bbnrqkrn 351 NRKQRNBB
321 BNRBQKRN bnrbqkrn 347 NRKQBRNB
322 BNRQKBRN bnrqkbrn 343 NRBKQRNB
323 BNRQKRNB bnrqkrnb 339 BNRKQRNB
324 NBBRQKRN nbbrqkrn 350 NRKQRBBN
325 NRBBQKRN nrbbqkrn 346 NRKQBBRN
326 NRBQKBRN nrbqkbrn 342 NRBKQBRN
327 NRBQKRNB nrbqkrnb 338 BNRKQBRN
328 NBRQBKRN nbrqbkrn 349 NRKBQRBN
329 NRQBBKRN nrqbbkrn 345 NRKBBQRN
330 NRQKBBRN nrqkbbrn 341 NRBBKQRN
331 NRQKBRNB nrqkbrnb 337 BNRBKQRN
332 NBRQKRBN nbrqkrbn 348 NBRKQRBN
333 NRQBKRBN nrqbkrbn 344 NBRKBQRN
334 NRQKRBBN nrqkrbbn 340 NBBRKQRN
335 NRQKRNBB nrqkrnbb 336 BBNRKQRN
336 BBNRKQRN bbnrkqrn 335 NRQKRNBB
337 BNRBKQRN bnrbkqrn 331 NRQKBRNB
338 BNRKQBRN bnrkqbrn 327 NRBQKRNB
339 BNRKQRNB bnrkqrnb 323 BNRQKRNB
340 NBBRKQRN nbbrkqrn 334 NRQKRBBN
341 NRBBKQRN nrbbkqrn 330 NRQKBBRN
342 NRBKQBRN nrbkqbrn 326 NRBQKBRN
343 NRBKQRNB nrbkqrnb 322 BNRQKBRN
344 NBRKBQRN nbrkbqrn 333 NRQBKRBN
345 NRKBBQRN nrkbbqrn 329 NRQBBKRN
346 NRKQBBRN nrkqbbrn 325 NRBBQKRN
347 NRKQBRNB nrkqbrnb 321 BNRBQKRN
348 NBRKQRBN nbrkqrbn 332 NBRQKRBN
349 NRKBQRBN nrkbqrbn 328 NBRQBKRN
350 NRKQRBBN nrkqrbbn 324 NBBRQKRN
351 NRKQRNBB nrkqrnbb 320 BBNRQKRN
352 BBNRKRQN bbnrkrqn 319 NQRKRNBB
353 BNRBKRQN bnrbkrqn 315 NQRKBRNB
354 BNRKRBQN bnrkrbqn 311 NQBRKRNB
355 BNRKRQNB bnrkrqnb 307 BNQRKRNB
356 NBBRKRQN nbbrkrqn 318 NQRKRBBN
357 NRBBKRQN nrbbkrqn 314 NQRKBBRN
358 NRBKRBQN nrbkrbqn 310 NQBRKBRN
359 NRBKRQNB nrbkrqnb 306 BNQRKBRN
360 NBRKBRQN nbrkbrqn 317 NQRBKRBN
361 NRKBBRQN nrkbbrqn 313 NQRBBKRN
362 NRKRBBQN nrkrbbqn 309 NQBBRKRN
363 NRKRBQNB nrkrbqnb 305 BNQBRKRN
364 NBRKRQBN nbrkrqbn 316 NBQRKRBN
365 NRKBRQBN nrkbrqbn 312 NBQRBKRN
366 NRKRQBBN nrkrqbbn 308 NBBQRKRN
367 NRKRQNBB nrkrqnbb 304 BBNQRKRN
368 BBNRKRNQ bbnrkrnq 303 QNRKRNBB
369 BNRBKRNQ bnrbkrnq 299 QNRKBRNB
370 BNRKRBNQ bnrkrbnq 295 QNBRKRNB
371 BNRKRNQB bnrkrnqb 291 BQNRKRNB
372 NBBRKRNQ nbbrkrnq 302 QNRKRBBN
373 NRBBKRNQ nrbbkrnq 298 QNRKBBRN
374 NRBKRBNQ nrbkrbnq 294 QNBRKBRN
375 NRBKRNQB nrbkrnqb 290 BQNRKBRN
376 NBRKBRNQ nbrkbrnq 301 QNRBKRBN
377 NRKBBRNQ nrkbbrnq 297 QNRBBKRN
378 NRKRBBNQ nrkrbbnq 293 QNBBRKRN
379 NRKRBNQB nrkrbnqb 289 BQNBRKRN
380 NBRKRNBQ nbrkrnbq 300 QBNRKRBN
381 NRKBRNBQ nrkbrnbq 296 QBNRBKRN
382 NRKRNBBQ nrkrnbbq 292 QBBNRKRN
383 NRKRNQBB nrkrnqbb 288 BBQNRKRN
384 BBQRNNKR bbqrnnkr 767 RKNNRQBB
385 BQRBNNKR bqrbnnkr 763 RKNNBRQB
386 BQRNNBKR bqrnnbkr 759 RKBNNRQB
387 BQRNNKRB bqrnnkrb 755 BRKNNRQB
388 QBBRNNKR qbbrnnkr 766 RKNNRBBQ
389 QRBBNNKR qrbbnnkr 762 RKNNBBRQ
390 QRBNNBKR qrbnnbkr 758 RKBNNBRQ
391 QRBNNKRB qrbnnkrb 754 BRKNNBRQ
392 QBRNBNKR qbrnbnkr 765 RKNBNRBQ
393 QRNBBNKR qrnbbnkr 761 RKNBBNRQ
394 QRNNBBKR qrnnbbkr 757 RKBBNNRQ
395 QRNNBKRB qrnnbkrb 753 BRKBNNRQ
396 QBRNNKBR qbrnnkbr 764 RBKNNRBQ
397 QRNBNKBR qrnbnkbr 760 RBKNBNRQ
398 QRNNKBBR qrnnkbbr 756 RBBKNNRQ
399 QRNNKRBB qrnnkrbb 752 BBRKNNRQ
400 BBRQNNKR bbrqnnkr 751 RKNNQRBB
401 BRQBNNKR brqbnnkr 747 RKNNBQRB
402 BRQNNBKR brqnnbkr 743 RKBNNQRB
403 BRQNNKRB brqnnkrb 739 BRKNNQRB
404 RBBQNNKR rbbqnnkr 750 RKNNQBBR
405 RQBBNNKR rqbbnnkr 746 RKNNBBQR
406 RQBNNBKR rqbnnbkr 742 RKBNNBQR
407 RQBNNKRB rqbnnkrb 738 BRKNNBQR
408 RBQNBNKR rbqnbnkr 749 RKNBNQBR
409 RQNBBNKR rqnbbnkr 745 RKNBBNQR
410 RQNNBBKR rqnnbbkr 741 RKBBNNQR
411 RQNNBKRB rqnnbkrb 737 BRKBNNQR
412 RBQNNKBR rbqnnkbr 748 RBKNNQBR
413 RQNBNKBR rqnbnkbr 744 RBKNBNQR
414 RQNNKBBR rqnnkbbr 740 RBBKNNQR
415 RQNNKRBB rqnnkrbb 736 BBRKNNQR
416 BBRNQNKR bbrnqnkr 735 RKNQNRBB
417 BRNBQNKR brnbqnkr 731 RKNQBNRB
418 BRNQNBKR brnqnbkr 727 RKBNQNRB
419 BRNQNKRB brnqnkrb 723 BRKNQNRB
420 RBBNQNKR rbbnqnkr 734 RKNQNBBR
421 RNBBQNKR rnbbqnkr 730 RKNQBBNR
422 RNBQNBKR rnbqnbkr 726 RKBNQBNR
423 RNBQNKRB rnbqnkrb 722 BRKNQBNR
424 RBNQBNKR rbnqbnkr 733 RKNBQNBR
425 RNQBBNKR rnqbbnkr 729 RKNBBQNR
426 RNQNBBKR rnqnbbkr 725 RKBBNQNR
427 RNQNBKRB rnqnbkrb 721 BRKBNQNR
428 RBNQNKBR rbnqnkbr 732 RBKNQNBR
429 RNQBNKBR rnqbnkbr 728 RBKNBQNR
430 RNQNKBBR rnqnkbbr 724 RBBKNQNR
431 RNQNKRBB rnqnkrbb 720 BBRKNQNR
432 BBRNNQKR bbrnnqkr 719 RKQNNRBB
433 BRNBNQKR brnbnqkr 715 RKQNBNRB
434 BRNNQBKR brnnqbkr 711 RKBQNNRB
435 BRNNQKRB brnnqkrb 707 BRKQNNRB
436 RBBNNQKR rbbnnqkr 718 RKQNNBBR
437 RNBBNQKR rnbbnqkr 714 RKQNBBNR
438 RNBNQBKR rnbnqbkr 710 RKBQNBNR
439 RNBNQKRB rnbnqkrb 706 BRKQNBNR
440 RBNNBQKR rbnnbqkr 717 RKQBNNBR
441 RNNBBQKR rnnbbqkr 713 RKQBBNNR
442 RNNQBBKR rnnqbbkr 709 RKBBQNNR
443 RNNQBKRB rnnqbkrb 705 BRKBQNNR
444 RBNNQKBR rbnnqkbr 716 RBKQNNBR
445 RNNBQKBR rnnbqkbr 712 RBKQBNNR
446 RNNQKBBR rnnqkbbr 708 RBBKQNNR
447 RNNQKRBB rnnqkrbb 704 BBRKQNNR
448 BBRNNKQR bbrnnkqr 703 RQKNNRBB
449 BRNBNKQR brnbnkqr 699 RQKNBNRB
450 BRNNKBQR brnnkbqr 695 RQBKNNRB
451 BRNNKQRB brnnkqrb 691 BRQKNNRB
452 RBBNNKQR rbbnnkqr 702 RQKNNBBR
453 RNBBNKQR rnbbnkqr 698 RQKNBBNR
454 RNBNKBQR rnbnkbqr 694 RQBKNBNR
455 RNBNKQRB rnbnkqrb 690 BRQKNBNR
456 RBNNBKQR rbnnbkqr 701 RQKBNNBR
457 RNNBBKQR rnnbbkqr 697 RQKBBNNR
458 RNNKBBQR rnnkbbqr 693 RQBBKNNR
459 RNNKBQRB rnnkbqrb 689 BRQBKNNR
460 RBNNKQBR rbnnkqbr 700 RBQKNNBR
461 RNNBKQBR rnnbkqbr 696 RBQKBNNR
462 RNNKQBBR rnnkqbbr 692 RBBQKNNR
463 RNNKQRBB rnnkqrbb 688 BBRQKNNR
464 BBRNNKRQ bbrnnkrq 687 QRKNNRBB
465 BRNBNKRQ brnbnkrq 683 QRKNBNRB
466 BRNNKBRQ brnnkbrq 679 QRBKNNRB
467 BRNNKRQB brnnkrqb 675 BQRKNNRB
468 RBBNNKRQ rbbnnkrq 686 QRKNNBBR
469 RNBBNKRQ rnbbnkrq 682 QRKNBBNR
470 RNBNKBRQ rnbnkbrq 678 QRBKNBNR
471 RNBNKRQB rnbnkrqb 674 BQRKNBNR
472 RBNNBKRQ rbnnbkrq 685 QRKBNNBR
473 RNNBBKRQ rnnbbkrq 681 QRKBBNNR
474 RNNKBBRQ rnnkbbrq 677 QRBBKNNR
475 RNNKBRQB rnnkbrqb 673 BQRBKNNR
476 RBNNKRBQ rbnnkrbq 684 QBRKNNBR
477 RNNBKRBQ rnnbkrbq 680 QBRKBNNR
478 RNNKRBBQ rnnkrbbq 676 QBBRKNNR
479 RNNKRQBB rnnkrqbb 672 BBQRKNNR
480 BBQRNKNR bbqrnknr 575 RNKNRQBB
481 BQRBNKNR bqrbnknr 571 RNKNBRQB
482 BQRNKBNR bqrnkbnr 567 RNBKNRQB
483 BQRNKNRB bqrnknrb 563 BRNKNRQB
484 QBBRNKNR qbbrnknr 574 RNKNRBBQ
485 QRBBNKNR qrbbnknr 570 RNKNBBRQ
486 QRBNKBNR qrbnkbnr 566 RNBKNBRQ
487 QRBNKNRB qrbnknrb 562 BRNKNBRQ
488 QBRNBKNR qbrnbknr 573 RNKBNRBQ
489 QRNBBKNR qrnbbknr 569 RNKBBNRQ
490 QRNKBBNR qrnkbbnr 565 RNBBKNRQ
491 QRNKBNRB qrnkbnrb 561 BRNBKNRQ
492 QBRNKNBR qbrnknbr 572 RBNKNRBQ
493 QRNBKNBR qrnbknbr 568 RBNKBNRQ
494 QRNKNBBR qrnknbbr 564 RBBNKNRQ
495 QRNKNRBB qrnknrbb 560 BBRNKNRQ
496 BBRQNKNR bbrqnknr 559 RNKNQRBB
497 BRQBNKNR brqbnknr 555 RNKNBQRB
498 BRQNKBNR brqnkbnr 551 RNBKNQRB
499 BRQNKNRB brqnknrb 547 BRNKNQRB
500 RBBQNKNR rbbqnknr 558 RNKNQBBR
501 RQBBNKNR rqbbnknr 554 RNKNBBQR
502 RQBNKBNR rqbnkbnr 550 RNBKNBQR
503 RQBNKNRB rqbnknrb 546 BRNKNBQR
504 RBQNBKNR rbqnbknr 557 RNKBNQBR
505 RQNBBKNR rqnbbknr 553 RNKBBNQR
506 RQNKBBNR rqnkbbnr 549 RNBBKNQR
507 RQNKBNRB rqnkbnrb 545 BRNBKNQR
508 RBQNKNBR rbqnknbr 556 RBNKNQBR
509 RQNBKNBR rqnbknbr 552 RBNKBNQR
510 RQNKNBBR rqnknbbr 548 RBBNKNQR
511 RQNKNRBB rqnknrbb 544 BBRNKNQR
512 BBRNQKNR bbrnqknr 543 RNKQNRBB
513 BRNBQKNR brnbqknr 539 RNKQBNRB
514 BRNQKBNR brnqkbnr 535 RNBKQNRB
515 BRNQKNRB brnqknrb 531 BRNKQNRB
516 RBBNQKNR rbbnqknr 542 RNKQNBBR
517 RNBBQKNR rnbbqknr 538 RNKQBBNR
518 RNBQKBNR rnbqkbnr 534 RNBKQBNR
519 RNBQKNRB rnbqknrb 530 BRNKQBNR
520 RBNQBKNR rbnqbknr 541 RNKBQNBR
521 RNQBBKNR rnqbbknr 537 RNKBBQNR
522 RNQKBBNR rnqkbbnr 533 RNBBKQNR
523 RNQKBNRB rnqkbnrb 529 BRNBKQNR
524 RBNQKNBR rbnqknbr 540 RBNKQNBR
525 RNQBKNBR rnqbknbr 536 RBNKBQNR
526 RNQKNBBR rnqknbbr 532 RBBNKQNR
527 RNQKNRBB rnqknrbb 528 BBRNKQNR
528 BBRNKQNR bbrnkqnr 527 RNQKNRBB
529 BRNBKQNR brnbkqnr 523 RNQKBNRB
530 BRNKQBNR brnkqbnr 519 RNBQKNRB
531 BRNKQNRB brnkqnrb 515 BRNQKNRB
532 RBBNKQNR rbbnkqnr 526 RNQKNBBR
533 RNBBKQNR rnbbkqnr 522 RNQKBBNR
534 RNBKQBNR rnbkqbnr 518 RNBQKBNR
535 RNBKQNRB rnbkqnrb 514 BRNQKBNR
536 RBNKBQNR rbnkbqnr 525 RNQBKNBR
537 RNKBBQNR rnkbbqnr 521 RNQBBKNR
538 RNKQBBNR rnkqbbnr 517 RNBBQKNR
539 RNKQBNRB rnkqbnrb 513 BRNBQKNR
540 RBNKQNBR rbnkqnbr 524 RBNQKNBR
541 RNKBQNBR rnkbqnbr 520 RBNQBKNR
542 RNKQNBBR rnkqnbbr 516 RBBNQKNR
543 RNKQNRBB rnkqnrbb 512 BBRNQKNR
544 BBRNKNQR bbrnknqr 511 RQNKNRBB
545 BRNBKNQR brnbknqr 507 RQNKBNRB
546 BRNKNBQR brnknbqr 503 RQBNKNRB
547 BRNKNQRB brnknqrb 499 BRQNKNRB
548 RBBNKNQR rbbnknqr 510 RQNKNBBR
549 RNBBKNQR rnbbknqr 506 RQNKBBNR
550 RNBKNBQR rnbknbqr 502 RQBNKBNR
551 RNBKNQRB rnbknqrb 498 BRQNKBNR
552 RBNKBNQR rbnkbnqr 509 RQNBKNBR
553 RNKBBNQR rnkbbnqr 505 RQNBBKNR
554 RNKNBBQR rnknbbqr 501 RQBBNKNR
555 RNKNBQRB rnknbqrb 497 BRQBNKNR
556 RBNKNQBR rbnknqbr 508 RBQNKNBR
557 RNKBNQBR rnkbnqbr 504 RBQNBKNR
558 RNKNQBBR rnknqbbr 500 RBBQNKNR
559 RNKNQRBB rnknqrbb 496 BBRQNKNR
560 BBRNKNRQ bbrnknrq 495 QRNKNRBB
561 BRNBKNRQ brnbknrq 491 QRNKBNRB
562 BRNKNBRQ brnknbrq 487 QRBNKNRB
563 BRNKNRQB brnknrqb 483 BQRNKNRB
564 RBBNKNRQ rbbnknrq 494 QRNKNBBR
565 RNBBKNRQ rnbbknrq 490 QRNKBBNR
566 RNBKNBRQ rnbknbrq 486 QRBNKBNR
567 RNBKNRQB rnbknrqb 482 BQRNKBNR
568 RBNKBNRQ rbnkbnrq 493 QRNBKNBR
569 RNKBBNRQ rnkbbnrq 489 QRNBBKNR
570 RNKNBBRQ rnknbbrq 485 QRBBNKNR
571 RNKNBRQB rnknbrqb 481 BQRBNKNR
572 RBNKNRBQ rbnknrbq 492 QBRNKNBR
573 RNKBNRBQ rnkbnrbq 488 QBRNBKNR
574 RNKNRBBQ rnknrbbq 484 QBBRNKNR
575 RNKNRQBB rnknrqbb 480 BBQRNKNR
576 BBQRNKRN bbqrnkrn 287 NRKNRQBB
577 BQRBNKRN bqrbnkrn 283 NRKNBRQB
578 BQRNKBRN bqrnkbrn 279 NRBKNRQB
579 BQRNKRNB bqrnkrnb 275 BNRKNRQB
580 QBBRNKRN qbbrnkrn 286 NRKNRBBQ
581 QRBBNKRN qrbbnkrn 282 NRKNBBRQ
582 QRBNKBRN qrbnkbrn 278 NRBKNBRQ
583 QRBNKRNB qrbnkrnb 274 BNRKNBRQ
584 QBRNBKRN qbrnbkrn 285 NRKBNRBQ
585 QRNBBKRN qrnbbkrn 281 NRKBBNRQ
586 QRNKBBRN qrnkbbrn 277 NRBBKNRQ
587 QRNKBRNB qrnkbrnb 273 BNRBKNRQ
588 QBRNKRBN qbrnkrbn 284 NBRKNRBQ
589 QRNBKRBN qrnbkrbn 280 NBRKBNRQ
590 QRNKRBBN qrnkrbbn 276 NBBRKNRQ
591 QRNKRNBB qrnkrnbb 272 BBNRKNRQ
592 BBRQNKRN bbrqnkrn 271 NRKNQRBB
593 BRQBNKRN brqbnkrn 267 NRKNBQRB
594 BRQNKBRN brqnkbrn 263 NRBKNQRB
595 BRQNKRNB brqnkrnb 259 BNRKNQRB
596 RBBQNKRN rbbqnkrn 270 NRKNQBBR
597 RQBBNKRN rqbbnkrn 266 NRKNBBQR
598 RQBNKBRN rqbnkbrn 262 NRBKNBQR
599 RQBNKRNB rqbnkrnb 258 BNRKNBQR
600 RBQNBKRN rbqnbkrn 269 NRKBNQBR
601 RQNBBKRN rqnbbkrn 265 NRKBBNQR
602 RQNKBBRN rqnkbbrn 261 NRBBKNQR
603 RQNKBRNB rqnkbrnb 257 BNRBKNQR
604 RBQNKRBN rbqnkrbn 268 NBRKNQBR
605 RQNBKRBN rqnbkrbn 264 NBRKBNQR
606 RQNKRBBN rqnkrbbn 260 NBBRKNQR
607 RQNKRNBB rqnkrnbb 256 BBNRKNQR
608 BBRNQKRN bbrnqkrn 255 NRKQNRBB
609 BRNBQKRN brnbqkrn 251 NRKQBNRB
610 BRNQKBRN brnqkbrn 247 NRBKQNRB
611 BRNQKRNB brnqkrnb 243 BNRKQNRB
612 RBBNQKRN rbbnqkrn 254 NRKQNBBR
613 RNBBQKRN rnbbqkrn 250 NRKQBBNR
614 RNBQKBRN rnbqkbrn 246 NRBKQBNR
615 RNBQKRNB rnbqkrnb 242 BNRKQBNR
616 RBNQBKRN rbnqbkrn 253 NRKBQNBR
617 RNQBBKRN rnqbbkrn 249 NRKBBQNR
618 RNQKBBRN rnqkbbrn 245 NRBBKQNR
619 RNQKBRNB rnqkbrnb 241 BNRBKQNR
620 RBNQKRBN rbnqkrbn 252 NBRKQNBR
621 RNQBKRBN rnqbkrbn 248 NBRKBQNR
622 RNQKRBBN rnqkrbbn 244 NBBRKQNR
623 RNQKRNBB rnqkrnbb 240 BBNRKQNR
624 BBRNKQRN bbrnkqrn 239 NRQKNRBB
625 BRNBKQRN brnbkqrn 235 NRQKBNRB
626 BRNKQBRN brnkqbrn 231 NRBQKNRB
627 BRNKQRNB brnkqrnb 227 BNRQKNRB
628 RBBNKQRN rbbnkqrn 238 NRQKNBBR
629 RNBBKQRN rnbbkqrn 234 NRQKBBNR
630 RNBKQBRN rnbkqbrn 230 NRBQKBNR
631 RNBKQRNB rnbkqrnb 226 BNRQKBNR
632 RBNKBQRN rbnkbqrn 237 NRQBKNBR
633 RNKBBQRN rnkbbqrn 233 NRQBBKNR
634 RNKQBBRN rnkqbbrn 229 NRBBQKNR
635 RNKQBRNB rnkqbrnb 225 BNRBQKNR
636 RBNKQRBN rbnkqrbn 236 NBRQKNBR
637 RNKBQRBN rnkbqrbn 232 NBRQBKNR
638 RNKQRBBN rnkqrbbn 228 NBBRQKNR
639 RNKQRNBB rnkqrnbb 224 BBNRQKNR
640 BBRNKRQN bbrnkrqn 223 NQRKNRBB
641 BRNBKRQN brnbkrqn 219 NQRKBNRB
642 BRNKRBQN brnkrbqn 215 NQBRKNRB
643 BRNKRQNB brnkrqnb 211 BNQRKNRB
644 RBBNKRQN rbbnkrqn 222 NQRKNBBR
645 RNBBKRQN rnbbkrqn 218 NQRKBBNR
646 RNBKRBQN rnbkrbqn 214 NQBRKBNR
647 RNBKRQNB rnbkrqnb 210 BNQRKBNR
648 RBNKBRQN rbnkbrqn 221 NQRBKNBR
649 RNKBBRQN rnkbbrqn 217 NQRBBKNR
650 RNKRBBQN rnkrbbqn 213 NQBBRKNR
651 RNKRBQNB rnkrbqnb 209 BNQBRKNR
652 RBNKRQBN rbnkrqbn 220 NBQRKNBR
653 RNKBRQBN rnkbrqbn 216 NBQRBKNR
654 RNKRQBBN rnkrqbbn 212 NBBQRKNR
655 RNKRQNBB rnkrqnbb 208 BBNQRKNR
656 BBRNKRNQ bbrnkrnq 207 QNRKNRBB
657 BRNBKRNQ brnbkrnq 203 QNRKBNRB
658 BRNKRBNQ brnkrbnq 199 QNBRKNRB
659 BRNKRNQB brnkrnqb 195 BQNRKNRB
660 RBBNKRNQ rbbnkrnq 206 QNRKNBBR
661 RNBBKRNQ rnbbkrnq 202 QNRKBBNR
662 RNBKRBNQ rnbkrbnq 198 QNBRKBNR
663 RNBKRNQB rnbkrnqb 194 BQNRKBNR
664 RBNKBRNQ rbnkbrnq 205 QNRBKNBR
665 RNKBBRNQ rnkbbrnq 201 QNRBBKNR
666 RNKRBBNQ rnkrbbnq 197 QNBBRKNR
667 RNKRBNQB rnkrbnqb 193 BQNBRKNR
668 RBNKRNBQ rbnkrnbq 204 QBNRKNBR
669 RNKBRNBQ rnkbrnbq 200 QBNRBKNR
670 RNKRNBBQ rnkrnbbq 196 QBBNRKNR
671 RNKRNQBB rnkrnqbb 192 BBQNRKNR
672 BBQRKNNR bbqrknnr 479 RNNKRQBB
673 BQRBKNNR bqrbknnr 475 RNNKBRQB
674 BQRKNBNR bqrknbnr 471 RNBNKRQB
675 BQRKNNRB bqrknnrb 467 BRNNKRQB
676 QBBRKNNR qbbrknnr 478 RNNKRBBQ
677 QRBBKNNR qrbbknnr 474 RNNKBBRQ
678 QRBKNBNR qrbknbnr 470 RNBNKBRQ
679 QRBKNNRB qrbknnrb 466 BRNNKBRQ
680 QBRKBNNR qbrkbnnr 477 RNNBKRBQ
681 QRKBBNNR qrkbbnnr 473 RNNBBKRQ
682 QRKNBBNR qrknbbnr 469 RNBBNKRQ
683 QRKNBNRB qrknbnrb 465 BRNBNKRQ
684 QBRKNNBR qbrknnbr 476 RBNNKRBQ
685 QRKBNNBR qrkbnnbr 472 RBNNBKRQ
686 QRKNNBBR qrknnbbr 468 RBBNNKRQ
687 QRKNNRBB qrknnrbb 464 BBRNNKRQ
688 BBRQKNNR bbrqknnr 463 RNNKQRBB
689 BRQBKNNR brqbknnr 459 RNNKBQRB
690 BRQKNBNR brqknbnr 455 RNBNKQRB
691 BRQKNNRB brqknnrb 451 BRNNKQRB
692 RBBQKNNR rbbqknnr 462 RNNKQBBR
693 RQBBKNNR rqbbknnr 458 RNNKBBQR
694 RQBKNBNR rqbknbnr 454 RNBNKBQR
695 RQBKNNRB rqbknnrb 450 BRNNKBQR
696 RBQKBNNR rbqkbnnr 461 RNNBKQBR
697 RQKBBNNR rqkbbnnr 457 RNNBBKQR
698 RQKNBBNR rqknbbnr 453 RNBBNKQR
699 RQKNBNRB rqknbnrb 449 BRNBNKQR
700 RBQKNNBR rbqknnbr 460 RBNNKQBR
701 RQKBNNBR rqkbnnbr 456 RBNNBKQR
702 RQKNNBBR rqknnbbr 452 RBBNNKQR
703 RQKNNRBB rqknnrbb 448 BBRNNKQR
704 BBRKQNNR bbrkqnnr 447 RNNQKRBB
705 BRKBQNNR brkbqnnr 443 RNNQBKRB
706 BRKQNBNR brkqnbnr 439 RNBNQKRB
707 BRKQNNRB brkqnnrb 435 BRNNQKRB
708 RBBKQNNR rbbkqnnr 446 RNNQKBBR
709 RKBBQNNR rkbbqnnr 442 RNNQBBKR
710 RKBQNBNR rkbqnbnr 438 RNBNQBKR
711 RKBQNNRB rkbqnnrb 434 BRNNQBKR
712 RBKQBNNR rbkqbnnr 445 RNNBQKBR
713 RKQBBNNR rkqbbnnr 441 RNNBBQKR
714 RKQNBBNR rkqnbbnr 437 RNBBNQKR
715 RKQNBNRB rkqnbnrb 433 BRNBNQKR
716 RBKQNNBR rbkqnnbr 444 RBNNQKBR
717 RKQBNNBR rkqbnnbr 440 RBNNBQKR
718 RKQNNBBR rkqnnbbr 436 RBBNNQKR
719 RKQNNRBB rkqnnrbb 432 BBRNNQKR
720 BBRKNQNR bbrknqnr 431 RNQNKRBB
721 BRKBNQNR brkbnqnr 427 RNQNBKRB
722 BRKNQBNR brknqbnr 423 RNBQNKRB
723 BRKNQNRB brknqnrb 419 BRNQNKRB
724 RBBKNQNR rbbknqnr 430 RNQNKBBR
725 RKBBNQNR rkbbnqnr 426 RNQNBBKR
726 RKBNQBNR rkbnqbnr 422 RNBQNBKR
727 RKBNQNRB rkbnqnrb 418 BRNQNBKR
728 RBKNBQNR rbknbqnr 429 RNQBNKBR
729 RKNBBQNR rknbbqnr 425 RNQBBNKR
730 RKNQBBNR rknqbbnr 421 RNBBQNKR
731 RKNQBNRB rknqbnrb 417 BRNBQNKR
732 RBKNQNBR rbknqnbr 428 RBNQNKBR
733 RKNBQNBR rknbqnbr 424 RBNQBNKR
734 RKNQNBBR rknqnbbr 420 RBBNQNKR
735 RKNQNRBB rknqnrbb 416 BBRNQNKR
736 BBRKNNQR bbrknnqr 415 RQNNKRBB
737 BRKBNNQR brkbnnqr 411 RQNNBKRB
738 BRKNNBQR brknnbqr 407 RQBNNKRB
739 BRKNNQRB brknnqrb 403 BRQNNKRB
740 RBBKNNQR rbbknnqr 414 RQNNKBBR
741 RKBBNNQR rkbbnnqr 410 RQNNBBKR
742 RKBNNBQR rkbnnbqr 406 RQBNNBKR
743 RKBNNQRB rkbnnqrb 402 BRQNNBKR
744 RBKNBNQR rbknbnqr 413 RQNBNKBR
745 RKNBBNQR rknbbnqr 409 RQNBBNKR
746 RKNNBBQR rknnbbqr 405 RQBBNNKR
747 RKNNBQRB rknnbqrb 401 BRQBNNKR
748 RBKNNQBR rbknnqbr 412 RBQNNKBR
749 RKNBNQBR rknbnqbr 408 RBQNBNKR
750 RKNNQBBR rknnqbbr 404 RBBQNNKR
751 RKNNQRBB rknnqrbb 400 BBRQNNKR
752 BBRKNNRQ bbrknnrq 399 QRNNKRBB
753 BRKBNNRQ brkbnnrq 395 QRNNBKRB
754 BRKNNBRQ brknnbrq 391 QRBNNKRB
755 BRKNNRQB brknnrqb 387 BQRNNKRB
756 RBBKNNRQ rbbknnrq 398 QRNNKBBR
757 RKBBNNRQ rkbbnnrq 394 QRNNBBKR
758 RKBNNBRQ rkbnnbrq 390 QRBNNBKR
759 RKBNNRQB rkbnnrqb 386 BQRNNBKR
760 RBKNBNRQ rbknbnrq 397 QRNBNKBR
761 RKNBBNRQ rknbbnrq 393 QRNBBNKR
762 RKNNBBRQ rknnbbrq 389 QRBBNNKR
763 RKNNBRQB rknnbrqb 385 BQRBNNKR
764 RBKNNRBQ rbknnrbq 396 QBRNNKBR
765 RKNBNRBQ rknbnrbq 392 QBRNBNKR
766 RKNNRBBQ rknnrbbq 388 QBBRNNKR
767 RKNNRQBB rknnrqbb 384 BBQRNNKR
768 BBQRKNRN bbqrknrn 191 NRNKRQBB
769 BQRBKNRN bqrbknrn 187 NRNKBRQB
770 BQRKNBRN bqrknbrn 183 NRBNKRQB
771 BQRKNRNB bqrknrnb 179 BNRNKRQB
772 QBBRKNRN qbbrknrn 190 NRNKRBBQ
773 QRBBKNRN qrbbknrn 186 NRNKBBRQ
774 QRBKNBRN qrbknbrn 182 NRBNKBRQ
775 QRBKNRNB qrbknrnb 178 BNRNKBRQ
776 QBRKBNRN qbrkbnrn 189 NRNBKRBQ
777 QRKBBNRN qrkbbnrn 185 NRNBBKRQ
778 QRKNBBRN qrknbbrn 181 NRBBNKRQ
779 QRKNBRNB qrknbrnb 177 BNRBNKRQ
780 QBRKNRBN qbrknrbn 188 NBRNKRBQ
781 QRKBNRBN qrkbnrbn 184 NBRNBKRQ
782 QRKNRBBN qrknrbbn 180 NBBRNKRQ
783 QRKNRNBB qrknrnbb 176 BBNRNKRQ
784 BBRQKNRN bbrqknrn 175 NRNKQRBB
785 BRQBKNRN brqbknrn 171 NRNKBQRB
786 BRQKNBRN brqknbrn 167 NRBNKQRB
787 BRQKNRNB brqknrnb 163 BNRNKQRB
788 RBBQKNRN rbbqknrn 174 NRNKQBBR
789 RQBBKNRN rqbbknrn 170 NRNKBBQR
790 RQBKNBRN rqbknbrn 166 NRBNKBQR
791 RQBKNRNB rqbknrnb 162 BNRNKBQR
792 RBQKBNRN rbqkbnrn 173 NRNBKQBR
793 RQKBBNRN rqkbbnrn 169 NRNBBKQR
794 RQKNBBRN rqknbbrn 165 NRBBNKQR
795 RQKNBRNB rqknbrnb 161 BNRBNKQR
796 RBQKNRBN rbqknrbn 172 NBRNKQBR
797 RQKBNRBN rqkbnrbn 168 NBRNBKQR
798 RQKNRBBN rqknrbbn 164 NBBRNKQR
799 RQKNRNBB rqknrnbb 160 BBNRNKQR
800 BBRKQNRN bbrkqnrn 159 NRNQKRBB
801 BRKBQNRN brkbqnrn 155 NRNQBKRB
802 BRKQNBRN brkqnbrn 151 NRBNQKRB
803 BRKQNRNB brkqnrnb 147 BNRNQKRB
804 RBBKQNRN rbbkqnrn 158 NRNQKBBR
805 RKBBQNRN rkbbqnrn 154 NRNQBBKR
806 RKBQNBRN rkbqnbrn 150 NRBNQBKR
807 RKBQNRNB rkbqnrnb 146 BNRNQBKR
808 RBKQBNRN rbkqbnrn 157 NRNBQKBR
809 RKQBBNRN rkqbbnrn 153 NRNBBQKR
810 RKQNBBRN rkqnbbrn 149 NRBBNQKR
811 RKQNBRNB rkqnbrnb 145 BNRBNQKR
812 RBKQNRBN rbkqnrbn 156 NBRNQKBR
813 RKQBNRBN rkqbnrbn 152 NBRNBQKR
814 RKQNRBBN rkqnrbbn 148 NBBRNQKR
815 RKQNRNBB rkqnrnbb 144 BBNRNQKR
816 BBRKNQRN bbrknqrn 143 NRQNKRBB
817 BRKBNQRN brkbnqrn 139 NRQNBKRB
818 BRKNQBRN brknqbrn 135 NRBQNKRB
819 BRKNQRNB brknqrnb 131 BNRQNKRB
820 RBBKNQRN rbbknqrn 142 NRQNKBBR
821 RKBBNQRN rkbbnqrn 138 NRQNBBKR
822 RKBNQBRN rkbnqbrn 134 NRBQNBKR
823 RKBNQRNB rkbnqrnb 130 BNRQNBKR
824 RBKNBQRN rbknbqrn 141 NRQBNKBR
825 RKNBBQRN rknbbqrn 137 NRQBBNKR
826 RKNQBBRN rknqbbrn 133 NRBBQNKR
827 RKNQBRNB rknqbrnb 129 BNRBQNKR
828 RBKNQRBN rbknqrbn 140 NBRQNKBR
829 RKNBQRBN rknbqrbn 136 NBRQBNKR
830 RKNQRBBN rknqrbbn 132 NBBRQNKR
831 RKNQRNBB rknqrnbb 128 BBNRQNKR
832 BBRKNRQN bbrknrqn 127 NQRNKRBB
833 BRKBNRQN brkbnrqn 123 NQRNBKRB
834 BRKNRBQN brknrbqn 119 NQBRNKRB
835 BRKNRQNB brknrqnb 115 BNQRNKRB
836 RBBKNRQN rbbknrqn 126 NQRNKBBR
837 RKBBNRQN rkbbnrqn 122 NQRNBBKR
838 RKBNRBQN rkbnrbqn 118 NQBRNBKR
839 RKBNRQNB rkbnrqnb 114 BNQRNBKR
840 RBKNBRQN rbknbrqn 125 NQRBNKBR
841 RKNBBRQN rknbbrqn 121 NQRBBNKR
842 RKNRBBQN rknrbbqn 117 NQBBRNKR
843 RKNRBQNB rknrbqnb 113 BNQBRNKR
844 RBKNRQBN rbknrqbn 124 NBQRNKBR
845 RKNBRQBN rknbrqbn 120 NBQRBNKR
846 RKNRQBBN rknrqbbn 116 NBBQRNKR
847 RKNRQNBB rknrqnbb 112 BBNQRNKR
848 BBRKNRNQ bbrknrnq 111 QNRNKRBB
849 BRKBNRNQ brkbnrnq 107 QNRNBKRB
850 BRKNRBNQ brknrbnq 103 QNBRNKRB
851 BRKNRNQB brknrnqb 099 BQNRNKRB
852 RBBKNRNQ rbbknrnq 110 QNRNKBBR
853 RKBBNRNQ rkbbnrnq 106 QNRNBBKR
854 RKBNRBNQ rkbnrbnq 102 QNBRNBKR
855 RKBNRNQB rkbnrnqb 098 BQNRNBKR
856 RBKNBRNQ rbknbrnq 109 QNRBNKBR
857 RKNBBRNQ rknbbrnq 105 QNRBBNKR
858 RKNRBBNQ rknrbbnq 101 QNBBRNKR
859 RKNRBNQB rknrbnqb 097 BQNBRNKR
860 RBKNRNBQ rbknrnbq 108 QBNRNKBR
861 RKNBRNBQ rknbrnbq 104 QBNRBNKR
862 RKNRNBBQ rknrnbbq 100 QBBNRNKR
863 RKNRNQBB rknrnqbb 096 BBQNRNKR
864 BBQRKRNN bbqrkrnn 095 NNRKRQBB
865 BQRBKRNN bqrbkrnn 091 NNRKBRQB
866 BQRKRBNN bqrkrbnn 087 NNBRKRQB
867 BQRKRNNB bqrkrnnb 083 BNNRKRQB
868 QBBRKRNN qbbrkrnn 094 NNRKRBBQ
869 QRBBKRNN qrbbkrnn 090 NNRKBBRQ
870 QRBKRBNN qrbkrbnn 086 NNBRKBRQ
871 QRBKRNNB qrbkrnnb 082 BNNRKBRQ
872 QBRKBRNN qbrkbrnn 093 NNRBKRBQ
873 QRKBBRNN qrkbbrnn 089 NNRBBKRQ
874 QRKRBBNN qrkrbbnn 085 NNBBRKRQ
875 QRKRBNNB qrkrbnnb 081 BNNBRKRQ
876 QBRKRNBN qbrkrnbn 092 NBNRKRBQ
877 QRKBRNBN qrkbrnbn 088 NBNRBKRQ
878 QRKRNBBN qrkrnbbn 084 NBBNRKRQ
879 QRKRNNBB qrkrnnbb 080 BBNNRKRQ
880 BBRQKRNN bbrqkrnn 079 NNRKQRBB
881 BRQBKRNN brqbkrnn 075 NNRKBQRB
882 BRQKRBNN brqkrbnn 071 NNBRKQRB
883 BRQKRNNB brqkrnnb 067 BNNRKQRB
884 RBBQKRNN rbbqkrnn 078 NNRKQBBR
885 RQBBKRNN rqbbkrnn 074 NNRKBBQR
886 RQBKRBNN rqbkrbnn 070 NNBRKBQR
887 RQBKRNNB rqbkrnnb 066 BNNRKBQR
888 RBQKBRNN rbqkbrnn 077 NNRBKQBR
889 RQKBBRNN rqkbbrnn 073 NNRBBKQR
890 RQKRBBNN rqkrbbnn 069 NNBBRKQR
891 RQKRBNNB rqkrbnnb 065 BNNBRKQR
892 RBQKRNBN rbqkrnbn 076 NBNRKQBR
893 RQKBRNBN rqkbrnbn 072 NBNRBKQR
894 RQKRNBBN rqkrnbbn 068 NBBNRKQR
895 RQKRNNBB rqkrnnbb 064 BBNNRKQR
896 BBRKQRNN bbrkqrnn 063 NNRQKRBB
897 BRKBQRNN brkbqrnn 059 NNRQBKRB
898 BRKQRBNN brkqrbnn 055 NNBRQKRB
899 BRKQRNNB brkqrnnb 051 BNNRQKRB
900 RBBKQRNN rbbkqrnn 062 NNRQKBBR
901 RKBBQRNN rkbbqrnn 058 NNRQBBKR
902 RKBQRBNN rkbqrbnn 054 NNBRQBKR
903 RKBQRNNB rkbqrnnb 050 BNNRQBKR
904 RBKQBRNN rbkqbrnn 061 NNRBQKBR
905 RKQBBRNN rkqbbrnn 057 NNRBBQKR
906 RKQRBBNN rkqrbbnn 053 NNBBRQKR
907 RKQRBNNB rkqrbnnb 049 BNNBRQKR
908 RBKQRNBN rbkqrnbn 060 NBNRQKBR
909 RKQBRNBN rkqbrnbn 056 NBNRBQKR
910 RKQRNBBN rkqrnbbn 052 NBBNRQKR
911 RKQRNNBB rkqrnnbb 048 BBNNRQKR
912 BBRKRQNN bbrkrqnn 047 NNQRKRBB
913 BRKBRQNN brkbrqnn 043 NNQRBKRB
914 BRKRQBNN brkrqbnn 039 NNBQRKRB
915 BRKRQNNB brkrqnnb 035 BNNQRKRB
916 RBBKRQNN rbbkrqnn 046 NNQRKBBR
917 RKBBRQNN rkbbrqnn 042 NNQRBBKR
918 RKBRQBNN rkbrqbnn 038 NNBQRBKR
919 RKBRQNNB rkbrqnnb 034 BNNQRBKR
920 RBKRBQNN rbkrbqnn 045 NNQBRKBR
921 RKRBBQNN rkrbbqnn 041 NNQBBRKR
922 RKRQBBNN rkrqbbnn 037 NNBBQRKR
923 RKRQBNNB rkrqbnnb 033 BNNBQRKR
924 RBKRQNBN rbkrqnbn 044 NBNQRKBR
925 RKRBQNBN rkrbqnbn 040 NBNQBRKR
926 RKRQNBBN rkrqnbbn 036 NBBNQRKR
927 RKRQNNBB rkrqnnbb 032 BBNNQRKR
928 BBRKRNQN bbrkrnqn 031 NQNRKRBB
929 BRKBRNQN brkbrnqn 027 NQNRBKRB
930 BRKRNBQN brkrnbqn 023 NQBNRKRB
931 BRKRNQNB brkrnqnb 019 BNQNRKRB
932 RBBKRNQN rbbkrnqn 030 NQNRKBBR
933 RKBBRNQN rkbbrnqn 026 NQNRBBKR
934 RKBRNBQN rkbrnbqn 022 NQBNRBKR
935 RKBRNQNB rkbrnqnb 018 BNQNRBKR
936 RBKRBNQN rbkrbnqn 029 NQNBRKBR
937 RKRBBNQN rkrbbnqn 025 NQNBBRKR
938 RKRNBBQN rkrnbbqn 021 NQBBNRKR
939 RKRNBQNB rkrnbqnb 017 BNQBNRKR
940 RBKRNQBN rbkrnqbn 028 NBQNRKBR
941 RKRBNQBN rkrbnqbn 024 NBQNBRKR
942 RKRNQBBN rkrnqbbn 020 NBBQNRKR
943 RKRNQNBB rkrnqnbb 016 BBNQNRKR
944 BBRKRNNQ bbrkrnnq 015 QNNRKRBB
945 BRKBRNNQ brkbrnnq 011 QNNRBKRB
946 BRKRNBNQ brkrnbnq 007 QNBNRKRB
947 BRKRNNQB brkrnnqb 003 BQNNRKRB
948 RBBKRNNQ rbbkrnnq 014 QNNRKBBR
949 RKBBRNNQ rkbbrnnq 010 QNNRBBKR
950 RKBRNBNQ rkbrnbnq 006 QNBNRBKR
951 RKBRNNQB rkbrnnqb 002 BQNNRBKR
952 RBKRBNNQ rbkrbnnq 013 QNNBRKBR
953 RKRBBNNQ rkrbbnnq 009 QNNBBRKR
954 RKRNBBNQ rkrnbbnq 005 QNBBNRKR
955 RKRNBNQB rkrnbnqb 001 BQNBNRKR
956 RBKRNNBQ rbkrnnbq 012 QBNNRKBR
957 RKRBNNBQ rkrbnnbq 008 QBNNBRKR
958 RKRNNBBQ rkrnnbbq 004 QBBNNRKR
959 RKRNNQBB rkrnnqbb 000 BBQNNRKR
================================================
FILE: files/misc/escape_and_missing_quotes.pgn
================================================
[Event "Test \"quotes\" \\ and escaping and missing quotes in the FEN tag"]
[Site "local"]
[Date "2021.04.01"]
[Round "1"]
[White "Jimmy \"The Pawn\" Smith"]
[Black "Lc0 \\ Stockfish"]
[Result "*"]
[FEN rnbqkb1r/ppp1pppp/5n2/3p4/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3]
[SetUp "1"]
3... c5 {EV: 47.0%, N: 63.14% of 63.4k} 4. e3 {EV: 53.3%, N: 95.14% of 66.9k} e6
{EV: 47.4%, N: 67.90% of 115k} 5. Nbd2 {EV: 53.1%, N: 67.58% of 96.2k} Qb6 {EV:
47.8%, N: 77.32% of 198k} 6. Rb1 {EV: 52.7%, N: 90.85% of 166k} *
================================================
FILE: files/misc/nibbler_menu_translations_template.json
================================================
{
"LANGUAGE_NAME_FIXME": { // The language name itself, in its own language.
"File": "TODO", // As in: "file menu"
"About": "TODO",
"New game": "TODO",
"New 960 game": "TODO", // New game of Chess960
"Open PGN...": "TODO", // Portable game notation file
"Load FEN / PGN from clipboard": "TODO", // Examines clipboard for valid FEN or PGN data
"Save this game...": "TODO", // Saves as PGN
"Write PGN to clipboard": "TODO",
"PGN saved statistics": "TODO", // Has submenu of which statistics to save to PGN variations...
"EV": "TODO", // ... expected value
"Centipawns": "TODO", // ...
"N (%)": "TODO", // ... N (node count, percent of total)
"N (absolute)": "TODO", // ... N (absolute count)
"...out of total": "TODO", // ... display total N
"Depth (A/B only)": "TODO", // ... search depth, only displayed if alphabeta-style engine
"Cut": "TODO",
"Copy": "TODO",
"Paste": "TODO",
"Quit": "TODO",
"Tree": "TODO", // Game tree manipulation functions
"Play engine choice": "TODO", // Adds engine's choice of move to game tree / goes to it if already present
"1st": "TODO", // ... i.e. play engine's top choice
"2nd": "TODO", // ... i.e. play engine's 2nd choice
"3rd": "TODO", // ... i.e. play engine's 3rd choice
"4th": "TODO", // ... i.e. play engine's 3rd choice
"Root": "TODO", // Move to root node in game tree
"End": "TODO", // Move to final node in (this line of) game tree
"Backward": "TODO", // Backward one move in game tree
"Forward": "TODO", // Forward one move in game tree
"Previous sibling": "TODO", // Go to previous sibling in game tree (if extant)
"Next sibling": "TODO", // Go to next sibling in game tree (if extant)
"Return to main line": "TODO",
"Promote line to main line": "TODO",
"Promote line by 1 level": "TODO",
"Delete node": "TODO",
"Delete children": "TODO", // i.e. child nodes in game tree
"Delete siblings": "TODO",
"Delete ALL other lines": "TODO",
"Show PGN games list": "TODO", // For when a PGN file has multiple games
"Escape": "TODO", // Escape key function - "escape" out of this screen to main screen
"Analysis": "TODO",
"Go": "TODO", // Starts the engine running
"Go and lock engine": "TODO", // Starts the engine running on current position, and does NOT change the engine position even if GUI position changes
"Return to locked position": "TODO", // Returns to the position the engine is analysing, IF the "go and lock engine" item was used
"Halt": "TODO", // Stops the engine
"Auto-evaluate line": "TODO", // Makes engine analyse a whole line of the game tree
"Auto-evaluate line, backwards": "TODO", // Makes engine analyse a whole line of the game tree, backwards
"Show focus (searchmoves) buttons": "TODO", // Shows buttons next to each legal move to allow the engine to focus analysis on selected moves
"Clear focus": "TODO", // Deselects all such buttons
"Invert focus": "TODO", // Inverts all such buttons
"Winrate POV": "TODO", // Winrate (really EV) displayed from whose point of view?
"Current": "TODO", // ... displayed from current player's
"White": "TODO", // ... displayed from White's point of view
"Black": "TODO", // ... displayed from Black's point of view
"Centipawn POV": "TODO", // Centipawn scores displayed from whose point of view? (submenu not in this list)
"Win / draw / loss POV": "TODO", // WDL statistic displayed from whose point of view? (submenu not in this list)
"PV clicks": "TODO", // What to do when user clicks on a displayed principal variation (PV)
"Do nothing": "TODO", // ... nothing
"Go there": "TODO", // ... move to that position
"Add to tree": "TODO", // ... add PV to game tree
"Write infobox to clipboard": "TODO",
"Forget all analysis": "TODO",
"Display": "TODO", // Has large submenu of display options
"Flip board": "TODO",
"Arrows": "TODO",
"Piece-click spotlight": "TODO", // Displays arrows showing legal moves, when a piece is clicked
"Always show actual move (if known)": "TODO", // Displays arrow representing move actually played in the game record (if known)
"...with unique colour": "TODO", // ... displays that arrow with a unique colour
"...with outline": "TODO", // ... and an outline
"Arrowhead type": "TODO", // Arrows display what statistic?
"Winrate": "TODO", // ... (really expected value)
"Node %": "TODO", // ... What % of examined nodes (examined by the engine) were this move?
"Policy": "TODO", // Policy / prior
"MultiPV rank": "TODO", // Ordinal rank in engine's preferred moves
"Moves Left Head": "TODO", // Output of engine neural network head estimating "moves left before game ends"
"Arrow filter (Lc0)": "TODO", // Filter criteria for displaying / not displaying arrows (when using Lc0 engine)
"All moves": "TODO", // ... always display all arrows
"Top move": "TODO", // ... display arrow for top move only
"Arrow filter (others)": "TODO", // Filter criteria for displaying / not displaying arrows (when using Stockfish or similar)
"Diff < 15%": "TODO", // ... EV was within 15% of best move
"Diff < 10%": "TODO", // ... EV was within 10% of best move
"Diff < 5%": "TODO", // ... EV was within 5% of best move
"Infobox stats": "TODO", // Stats to display in info pane
"N - nodes (%)": "TODO", // ...
"N - nodes (absolute)": "TODO", // ...
"P - policy": "TODO", // ...
"V - static evaluation": "TODO", // ...
"Q - evaluation": "TODO", // ...
"U - uncertainty": "TODO", // ...
"S - search priority": "TODO", // ...
"M - moves left": "TODO", // ...
"WDL - win / draw / loss": "TODO", // ...
"Linebreak before stats": "TODO",
"PV move numbers": "TODO", // Display move numbers when writing principal variation e.g. 40. Kc2 Qf1 41. Rd8 etc etc
"Online API": "TODO", // Access an online API to display real-world game outcome stats
"None": "TODO", // ... Don't access API
"ChessDB.cn evals": "TODO", // ... Use ChessDB.cn
"Lichess results (masters)": "TODO", // ... Use results from Lichess master player database
"Lichess results (plebs)": "TODO", // ... Use results from Lichess user database
"Allow API after move 25": "TODO",
"Draw PV on mouseover": "TODO",
"Draw PV method": "TODO", // How to draw a PV when mouse-over-ing part of it
"Animate": "TODO", // Animate a series of moves
"Single move": "TODO", // Show exactly the position after the move being hovered over
"Final position": "TODO", // Show the final position in the sequence
"Pieces": "TODO", // Icons / images to use for piece display
"Choose pieces folder...": "TODO", // ... Select folder containing such images
"Default": "TODO", // ... Just use default images
"About custom pieces": "TODO", // Displays text explaining how to create custom images
"Background": "TODO", // Background to use for board display
"Choose background image...": "TODO", // ... Select image file for background
"Book frequency arrows": "TODO", // Dispay arrows representing move frequency in opening book file
"Lichess frequency arrows": "TODO", // Dispay arrows representing move frequency in Lichess database
"Sizes": "TODO", // Adjust sizes of displayed things
"Infobox font": "TODO", // Adjust SIZE of font in info pane
"Move history font": "TODO", // Adjust SIZE of font in game tree pane
"Board": "TODO", // Adjust SIZE of board
"Giant": "TODO", // ...
"Large": "TODO", // ...
"Medium": "TODO", // ...
"Small": "TODO", // ...
"Graph": "TODO", // Adjust SIZE (height) of graph displaying winrate
"Graph lines": "TODO", // Adjust SIZE of graph line
"I want other size options!": "TODO", // Displays text explaining how to set custom size options
"Engine": "TODO", // Top level menu item for engine settings
"Choose engine...": "TODO", // Choose engine via file picker
"Choose known engine...": "TODO", // Choose engine from a list of previously used engines
"Weights": "TODO", // Choose neural net weight file
"Lc0 WeightsFile...": "TODO", // ... For Lc0
"Stockfish EvalFile...": "TODO", // ... For Stockfish
"Set to <auto>": "TODO", // ... Just allow engine to use default
"Backend": "TODO", // Backend choices for Lc0 engine (submenu not in this list)
"Choose Syzygy path...": "TODO", // Find endgame tablebase folder
"Unset": "TODO", // Clear endgame tablebase folder
"Limit - normal": "TODO", // Node limit for engine in normal circumstances
"Unlimited": "TODO", // ... no node limit (note: other options exist but are not in this list)
"Up slightly": "TODO", // ... increase node limit slightly
"Down slightly": "TODO", // ... decrease node limit slightly
"Limit - auto-eval / play": "TODO", // Node limit for engine when playing or evaluating a game
"Limit by time instead of nodes": "TODO", // Consider node limit setting as a time limit in milliseconds instead
"Threads": "TODO", // How many threads engine should used
"Warning about threads": "TODO", // ... Displays a text warning about when not to use too many threads
"Hash": "TODO", // Hash size (submenu not in this list)
"I want other hash options!": "TODO", // ... Displays text about how to have a custom hash setting
"MultiPV": "TODO", // How many lines a Stockfish-like engine should consider at once (multipv setting)
"Contempt Mode": "TODO",
"White analysis": "TODO", // ... Contempt from White's point of view
"Black analysis": "TODO", // ... Contempt from Black's point of view
"Contempt": "TODO", // Numerical contempt value (submenu not in this list)
"WDL Calibration Elo": "TODO", // Technical contempt setting
"Use default WDL": "TODO", // ... Technical contempt setting
"WDL Eval Objectivity": "TODO", // Technical contempt setting
"Yes": "TODO", // ...
"No": "TODO", // ...
"Score Type": "TODO", // Technical contempt setting
"Custom scripts": "TODO",
"How to add scripts": "TODO", // ... Displays text explanation
"Show scripts folder": "TODO", // ... Displays folder in filesystem
"Restart engine": "TODO",
"Soft engine reset": "TODO", // Tells engine to reset cache etc, without actually restarting
"Play": "TODO", // Top level menu item for playing against the engine
"Play this colour": "TODO", // Engine itself plays current colour from now on
"Start self-play": "TODO", // Engine plays against itself
"Use Polyglot book...": "TODO",
"Use PGN book...": "TODO",
"Unload book / abort load": "TODO",
"Book depth limit": "TODO", // What depth to stop using the book
"Temperature": "TODO", // Temperature for Lc0 neural network
"Temp Decay Moves": "TODO", // Technical temperature-related setting (numerical options present, but not in this list)
"Infinite": "TODO", // ...
"About play modes": "TODO", // Displays text
"Dev": "TODO", // Top level menu for Dev / technical settings
"Toggle Developer Tools": "TODO",
"Toggle Debug CSS": "TODO", // Shows red border around HTML elements
"Permanently enable save": "TODO", // Allows save function to be used
"Show config.json": "TODO", // Displays config file in filesystem
"Show engines.json": "TODO", // Displays config file in filesystem
"Reload engines.json (and restart engine)": "TODO",
"Random move": "TODO", // Makes a random move from legal possibilities
"Disable hardware acceleration for GUI": "TODO",
"Spin rate": "TODO", // How frequently to update GUI
"Frenetic": "TODO", // ...
"Fast": "TODO", // ...
"Normal": "TODO", // ...
"Relaxed": "TODO", // ...
"Lazy": "TODO", // ...
"Show engine state": "TODO", // Shows debug info about engine
"List sent options": "TODO", // Shows a list of all options ever sent to the engine
"Show error log": "TODO", // Shows engine stderr
"Hacks and kludges": "TODO", // Submenu with specific hacks
"Allow arbitrary scripts": "TODO", // ...
"Accept any file size": "TODO", // ...
"Allow stopped analysis": "TODO", // ...
"Never hide focus buttons": "TODO", // ...
"Never grayout move info": "TODO", // ...
"Use lowerbound / upperbound info": "TODO", // ...
"Suppress ucinewgame": "TODO", // ... do not send ucinewgame token to engine
"Log RAM state to console": "TODO",
"Fire GC": "TODO", // Call JS garbage collector
"Logging": "TODO",
"Use logfile...": "TODO", // ...
"Disable logging": "TODO", // ...
"Clear log when opening": "TODO", // ...
"Use unique logfile each time": "TODO", // ...
"Log illegal moves": "TODO", // ...
"Log positions": "TODO", // ...
"Log info lines": "TODO", // ...
"...including useless lines": "TODO", // ...
"Language": "TODO",
"RESTART_REQUIRED": "TODO" // Special item - translate from "The GUI must now be restarted."
}
}
================================================
FILE: files/misc/pathological.pgn
================================================
[Event "Jeopardy Match 12"]
[Site "brinanSee"]
[Date "2019.06.15"]
[Round "4"]
[White "lc0.net.42518"]
[Black "Stockfish.dev 19061000"]
[Result "1/2-1/2"]
[ECO "D31"]
[Opening "Semi-Slav"]
[Variation "Marshall Gambit, 8.Ne2"]
[TimeControl "5100+1"]
[Termination "normal"]
[PlyCount "304"]
1. d4 (d4 Nf6 c4 e6 g3 Bb4 Bd2 Be7 Bg2 d5 Nf3 O-O O-O c6 Qc2 Nbd7 Rd1 b6
Bf4 Ba6 Nbd2 Nh5 Be3 Rc8 Rac1 h6 Ne5 Nhf6 Qa4 Nb8 Qb3 Nbd7 h3 Bb7 Qa4 a6
cxd5) {+0.27/13 89} d5 {0.00/1} 2. c4 (c4 e6 Nc3 Nf6 cxd5 exd5 Bg5 Be7 e3
h6 Bh4 O-O Bd3 c6 Nge2 Ne4 Bxe7 Qxe7 Bxe4 dxe4 O-O Nd7 d5 Nf6 dxc6 bxc6 Qa4
Rb8) {+0.32/13 52} e6 {0.00/1 0} 3. Nc3 (Nc3 Nf6 cxd5 exd5 Bg5 Be7 e3 h6
Bh4 O-O Bd3 c6 Nge2 Ne4 Bxe7 Qxe7 Bxe4 dxe4 O-O Nd7 d5 f5 Nf4 Ne5 Qb3 Qf7
Rfd1) {+0.32/15 62} c6 {0.00/1 0} 4. e4 (e4 dxe4 Nxe4 Bb4 Bd2 Qxd4 Bxb4
Qxe4 Ne2 Ne7 Qd2 c5 Bxc5 Nbc6 Rd1 O-O Qf4 Qxf4 Nxf4 b6 Ba3 Re8 f3 e5 Nd5
Nxd5 cxd5 Nd4 Kf2 Rd8 f4 Bg4 Rd2 Rxd5 Bc4 Rd7 fxe5 Rc8 b3 b5) {+0.42/18 94}
dxe4 {0.00/1 0} 5. Nxe4 (Nxe4 Bb4 Bd2 Qxd4 Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O
Qxd6 Bxd6 Nh6 Ng3 f5 Bd3 Kf7 Rhe1 Re8 Bc2 g6 h3 Kg7 Bb4 e5 f4 e4) {+0.41/20
41} Bb4+ {0.00/1 0} 6. Bd2 (Bd2 Qxd4 Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6
Bxd6 b6 g4 Bb7 Bg2 O-O-O Rhe1 Ngf6 g5 Ng4 Ng3 c5 Bxb7 Kxb7 Ne4 f5 gxf6
Ndxf6 Nxf6 gxf6 Rxe6 Nxf2 Rd2 Ng4) {+0.38/20 63} Qxd4 {0.00/1} 7. Bxb4
(Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6 Bxd6 b6 g4 Bb7 Bg2 O-O-O Rhe1 Ngf6 g5
Ng4 Ng3 c5 Bxb7 Kxb7 Ne4 f5 gxf6 Ndxf6 Nxf6 gxf6 Rxe6 Nxf2 Rd2 Ng4)
{+0.38/15 3} Qxe4+ {0.00/1 0} 8. Ne2 (Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6 Bxd6 Nh6
Ng3 f5 Bd3 g6 Rhe1 Kf7 Bc2 Re8 f4 Kg8 Bb4 Nf7 Bc3 Kf8 Nf1 e5 fxe5 Ndxe5 b3)
{+0.32/18 117} Nd7 {0.00/1 0} 9. Qd6 (Qd6 Qe5 O-O-O Qxd6 Bxd6 Nh6 Ng3 f5
Bd3 g6 Rhe1 Kf7 Bc2 Re8 f4 b6 Ne2 Ba6 b3 c5 Ng1 Bb7 Nh3 Kg8 Ng5) {+0.28/18
58} Qe5 {0.00/1 0} 10. O-O-O (O-O-O Qxd6 Bxd6 Nh6 Ng3 f5 Bd3 g6 Rhe1 Kf7
Nh1 Re8 f3 Kg8 Nf2 Nf7 Bb4 e5 Bc2 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7)
{+0.23/16 154} Qxd6 {0.00/1 0} 11. Bxd6 (Bxd6 Nh6 Ng3 f5 Bd3 g6 Rhe1 Kf7
Nh1 Re8 f3 Kg8 Nf2 e5 Bc2 Nf7 Bb4 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7)
{+0.22/15 19} Nh6 {0.00/1 0} 12. Ng3 (Ng3 f5 Bd3 g6 Rhe1 Kf7 Nh1 Re8 f3 Kg8
Bb4 e5 Nf2 Nf7 Bc2 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6) {+0.19/14 175} f5
{0.00/1 0} 13. Bd3 (Bd3 g6 Rhe1 Kf7 Nh1 Re8 f3 Kg8 Bb4 a5 Bc3 e5 Nf2 Nf7
Bc2 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6 hxg6) {+0.17/14 89} g6 {0.00/1 0} 14.
Rhe1 (Rhe1 Kf7 Nh1 Re8 f3 Kg8 Bb4 a5 Bc3 e5 Nf2 Nf7 Bc2 Nc5 Bd4 Nd7 Bc3 Nc5
Bd4 Nd7 Bc3) {+0.14/14 146} Kf7 {0.00/1 0} 15. Nh1 (Nh1 Re8 f3 Kg8 Bb4 a5
Bc3 e5 Nf2 Nf7 Bc2 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6 hxg6 g4 Kf8 Rg1) {+0.12/13
271} a5 (a5 f3 Re8 Ba3 Kg7 h3 Nf7 g4 Nf6 b3 Ng5 Bb2 Kf7 f4 Nxh3 gxf5 gxf5
Rf1 Rg8 Rf3 Ng1 Rff1) {0.00/41 680} 16. Bf4 (Bf4 Ng4 f3 Ngf6 Nf2 e5 Bd2 Re8
Bc3 a4 Bc2 b5 g4 bxc4 gxf5 gxf5 Bxf5 Nc5 Bc2 a3 bxa3 Nd5 Bb4 Nxb4 axb4 Na6
a3) {+0.33/12 86} Ng8 (Ng8 f3 Ngf6 Nf2 Re8 Bg5 a4 g4 b5 cxb5 cxb5 gxf5 gxf5
Bxb5 Ra5 Bxf6 Rxb5 Bc3 e5 Rd6 Re6 Rxe6 Kxe6 Nd3 Bb7 Nxe5 Nxe5 f4 Rc5 Rxe5
Rxe5 Bxe5 Bd5 b3 axb3 axb3 Bxb3 Kb2 Bd5 Kc3 h6 Kb4) {+0.05/35 68} 17. f3
(f3 Ngf6 Nf2 e5 Bd2 Re8 Bc3 a4 h3 h5 h4 e4 fxe4 Nc5 e5 Ng4 Nh3 Be6 Bb4 Nxd3
Rxd3 Bxc4 Rd7 Kg8 Bc3 b5 a3 c5 Rd6 b4 axb4) {+0.36/14 57} Ngf6 (Ngf6 Nf2
Re8 Bd6 b6 g4 Ba6 Nh3 Kg8 Ng5 fxg4 fxg4 e5 h3 b5 Ne4 bxc4 Nxf6 Nxf6 Bc2 Bb7
Bxe5 Nd5 Bd4 Ba6 a3 Rad8 Bc5 Rxe1 Rxe1 Nf4 Bb6 Rd3 Be3 Ng2 Bxd3 cxd3 Bd2
Nxe1 Bxe1 Kf7 Bxa5 Ke6 Kd2) {+0.01/38 53} 18. Nf2 (Nf2 e5 Bd2 Re8 Bc3 a4 h3
h5 h4 e4 fxe4 Nc5 e5 Ng4 Nh3 Be6 Bb4 Nxd3 Rxd3 Bxc4 Rd7 Kg8 Bc3 Bxa2 Nf4
Be6 Rxb7 Nf2 Rc7 a3 bxa3) {+0.40/15 14} Re8 (Re8 Bd6 b6 g4 Ba6 Nh3 Kg8 Ng5
fxg4 fxg4 e5 h3 b5 Ne4 bxc4 Nxf6 Nxf6 Bc2 Nd5 Bxe5 Bb7 Bd4 Rad8 Bc5 Rxe1
Rxe1 Kf7 Rf1 Kg8 Re1) {0.00/37 51} 19. Bd6 (Bd6 b5 cxb5 cxb5 Bxb5 Ba6 Ba4
Rec8 Kb1 Nb6 Bb3 Nfd5 Nh3 h6 Nf4 Bc4 Bxc4 Rxc4 Nd3 Nd7 Rc1 Rd4 Red1 Rd8 Bg3
Ne3 Rd2 Rd5 Bc7 Rc8 Bxa5 Nc4 Rdc2 Na3 bxa3 Rxc2 Kxc2) {+0.23/15 128} b6 (b6
g4 Ba6 Nh3 Kg8 Ng5 fxg4 fxg4 Nxg4 Bf1 e5 Bc7 Bc8 Rd6 Ra7 Rxc6 Bb7 Rd6 Bc8)
{0.00/41 0} 20. g4 (g4 Ba6 Bf1 Ra7 Nh3 e5 gxf5 gxf5 Bd3 h6 b3 e4 fxe4 Nxe4
Bxe4 Rxe4 Rxe4 fxe4 Rf1 Ke6 Bg3 b5 Nf4 Ke7 Re1 Nf6 Bh4 Kf7 Rf1) {+0.40/12
109} Ba6 (Ba6 h4 h5 gxh5 Nxh5 Nh3 e5 Ng5 Kg7 Ba3 b5 cxb5 cxb5 b4 axb4 Bxb4
Ra7 Bc2 Bc8 Bb3 Nb6 Bd6 Kf6 Kb1 Nc4 Bxc4 bxc4 Rd5 e4 fxe4 Kg7 Ka1 Ra6 Re5
Rxe5 Bxe5 Kf8 Kb2 Rb6 Kc2 Ra6 Rd1 Ke7 Kc3 Rxa2) {-0.23/36 65} 21. b3 (b3
Bb7 g5 Nh5 Be2 a4 Bc7 Bc8 f4 e5 fxe5 axb3 axb3 Nf4 Bf3 Ra7 Bd6 Ra2 Nd3 Nxd3
Rxd3 Ra1 Kd2 Rxe1 Kxe1 Nxe5 Bxe5 Rxe5 Kf2 f4 Rd6 Rxg5 Rxc6 Be6 Rxb6)
{+0.37/14 165} b5 (b5 Nh3 Kg8 Ng5 fxg4 fxg4 bxc4 bxc4 Nxg4 Bg3 Nc5 Bc2 e5
h3 Nh6 Rd6 Nf7 Nxf7 Kxf7 Rxe5 Rxe5 Bxe5 Bxc4 Rf6 Ke7 Rxc6 Nd3 Bxd3 Bxd3 Bc3
Kd7 Rc5 Bf5 Rxa5 Rxa5 Bxa5 Bxh3 a4 Kc6 Be1) {+0.40/32 44} 22. g5 (g5 bxc4
bxc4 Ng8 c5 Ne7 Bxa6 Rxa6 Nd3 Nd5 Kd2 Nb4 a3 Nxd3 Kxd3 Ra7 Rb1 e5 Kc4 e4
fxe4 Ne5 Bxe5 Rxe5 exf5 Rxf5 Rf1 Re7 Rxf5 gxf5 Rb6 Re6 Kd3 Kg6) {+0.16/13
98} Nh5 (Nh5 Bf1 bxc4 bxc4 Ra7 Be5 c5 Rd6 Re7 Bc3 Nf4 Red1 e5 Nd3 Nxd3
R1xd3 Bxc4 Rxd7 Raxd7 Rxd7 Bxf1 Rxe7 Kxe7 Bxe5 Ke6 f4 Bc4 Kb2 Kd5 a4 Ke4
Kc3 Bd5 h4 Kf3 Bc7 Kg4 Bd6 Kg3 Bc7 Kxh4 Bxa5 Kg3) {+0.58/33 52} 23. c5 (c5
e5 b4 Nf4 Bc2 Ng2 Re2 Nf4 Red2 Ne6 Bb3 axb4 Re1 Kg7 Nd3 Nxg5 Nxe5 Nh3 Rdd1
Nxe5 Bxe5 Kh6 Rd4 f4 Bf7 Red8 Rd6 Rxd6) {+0.57/16 89} e5 (e5 Bc2 b4 Nd3
Bxd3 Bxd3 Ra7 Bc4 Kg7 Rd4 h6 h4 Kh7 Kb2 Kg7) {0.00/43 188} 24. b4 (b4 Nf4
Bc2 Ng2 Re2 Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3
Bc8 Kb2 f4 Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7
Nd3 Rf5 Kc3 Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 Re8 Kd3 f3 h5)
{+0.57/33 0} Nf4 (Nf4 Bc2 Ng2 Re2 Nf4) {0.00/42 151} 25. Bc2 (Bc2 Ng2 Re2
Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3 Bc8 Kb2 f4
Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7 Nd3 Rf5 Kc3
Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 f3 Ke1 Rf4 h5 gxh5 Rxh5)
{+0.55/24 61} Ng2 (Ng2 Re2 Nf4 Ree1) {0.00/43 14} 26. Re2 (Re2 Nf4 Ree1 Ng2
Re2 Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3 Bc8 Kb2
f4 Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7 Nd3 Rf5
Kc3 Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 f3 Ke1 Rf4) {+0.55/22
19} Nf4 (Nf4 Ree1 Ng2 Re2) {0.00/45 57} 27. Red2 (Red2 axb4 Nd3 Ne6 Bb3 Kg7
Re1 Nd4 Nxe5 Nxb3 axb3 Bc8 Kb2 Nxe5 Bxe5 Kg8 Rd6 Be6 Rxc6 Bd5 Rc7 Bxf3 Rg7
Kf8 Rxh7 Be4 Bf6 f4 Rh4 Bf5 Rxe8 Rxe8 Rxf4 Re2 Ka1 Rc2 Rxb4 Rxc5 Kb2 Rc2
Ka3 Bd3 Rd4 Bf5 h4 Re2 Rd5) {+0.53/26 250} a4 (a4 Nd3 Nd5 Re1 Re6 a3 Rae8
Rde2 Bc8 h4 e4 fxe4 Rxe4 Rxe4 fxe4 Nf4 Nxf4 Bxf4 e3 Bb1 Ne5 Ba2 Nc4 Bxc4
bxc4 Rxe3 Rxe3 Bxe3 Ke6 Kd2 Kd5 Kc3 Bf5 Bc1 Bd3 Bd2 Be2 Be3 Bf3 Bd4 Bg4 Bf6
Be2 Kd2 Bf3 Ke3 Bg4 Kf4 Be6 Bc3 Bd7 Ke3 Bf5 Kf4) {0.00/42 311} 28. a3 (a3
Nd5 Bb1 Nc3 Ba2 Nxa2 Rxa2 Re6 Re2 Rae8 Nd3 Bc8 h4 Kg8 Rde1 e4 Nf4 Ne5 fxe4
fxe4 Nxe6 Nd3 Kd2 Bxe6 Rf1 Bf5 Kc3 Kf7 Kd4 Kg7 h5) {+1.00/14 112} Bc8 (Bc8
Re1 Ng2 Rg1 Nf4 Bb1 Nf8 Re1 Be6 Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 Rde2 Rxe5 Bxe5
Ne6 f4 Rd8 Re3 Bd5 Kc2 Rd7 Bd6 Rd8 Kc3 Re8 Be5 Rd8 Rh3 Kg8 Bd6 Re8 Rg3 Kf7
Be5 Re7 Re3 Re8 Kc2 Bb3 Kd2 Bd5 Re2 Bb3 Kc3 Rd8 Rd2 Bd5 Be2 Be4 Rxd8 Nxd8
h4) {-0.50/42 440} 29. Bb1 (Bb1 Nf8 Re1 Be6 Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Rde2
Nf4 Re1 Ng2 R1e2 Nf4 Rd2 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3 Kg7 Be5 Kg8 Bf6 Rd7 Kc3
h6 Ne5 Rxd2 Kxd2 hxg5 hxg5 Nh7 Nxc6 Nxf6 gxf6 Kf7) {+1.08/20 82} Nf8 (Nf8
Re1 Be6 Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Rcd8 Ree2 Ne6 Rf2 Rd7 h4 Nd8 Be5 Ne6
Be2 Rxd2 Kxd2 Bd5 Rh2 Re7 Bd3 Bb3 Ke3 Nf8 Re2 Nd7 Kd4 Nxe5 Rxe5 Rd7 Kc3 Bd5
h5 Rd8 h6 Rd7 Bc2 Re7 Kd4 Rd7 Ke3 Bc4 Kf3 Bd5 Kg3) {-0.54/41 150} 30. Re1
(Re1 Be6 Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3 Kg7 Ne5 Rc8 f4 h6
Bxf8 Nxf8 Kc3 Rc7 Rd6 Ree7 Kd3 Re8 Nxc6 hxg5 hxg5) {+1.14/17 0} Be6 (Be6
Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Ne6 Re3 Ng7 Ree2 Rcd8 Kb2 Rd7 Rxe8 Nxe8 Be5
Ke6 Kc3 Nc7 Bxc7 Rxc7 Be2 Bd5 Rd3 h5 gxh6 Rh7 Rh3 Kf7 Bf1 Kg8 Bd3 Re7 h7
Rxh7 Rxh7 Kxh7 Be2 Kg7 Kd4 Be4 Ke5 Kf7 h4 Ke7 h5 gxh5 Bxh5 Kd8 Kf6 Kc7 Kg5)
{-0.67/42 179} 31. Rxe5 (Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3
Kh8 Ne5 Rc8 Bxf8 Nxf8 Nf7 Kg7 Nd6 Rcd8 Nxe8 Rxe8 Rd6 Re2 Kb1 Re1 Kc2 Re2
Rd2 Re3 Kb2 Rxf3 Rd6 Rf2 Kb1 Rf1 Kc2 Rf2 Rd2 Rxd2 Kxd2 Nd7 Ke3 Ne5)
{+1.19/19 0} Rac8 (Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Ne6 Re3 Ng7 Ree2 Rcd8 Kb2 Rd7
Rxe8 Nxe8 Be5 Ke6 Kc3 Nc7 Bxc7 Rxc7 Be2 Bd5 Rd3 h5 gxh6 Rh7 Rh3 Kf7 Bf1 Kg8
Kd4 Re7 h7 Kh8 Bd3 Be4 Kc3 Bxd3 Kxd3 Re4 Rh6 Rxf4 Rxg6 Rf3 Kd4 Rxa3 Rxc6
Rb3 Rc7 Rxb4 Kd5 Rg4 Rf7 Rc4) {-0.70/40 94} 32. Rd4 (Rd4 Nd5 Kd2 Nd7 Re1
Kg7 Nd3 Bf7 Be5 Kg8 Ba2 Nf8 h4 Re7 Bd6 Rxe1 Nxe1 Ne6 Rd3 Nef4 Bxf4 Nxf4
Bxf7 Kxf7 Rd7 Ke6 Rd6 Ke7 Nd3 Nxd3 Kxd3) {+1.27/16 209} Nd5 (Nd5 Kd2 Nd7
Re1 Kg7 Nd3 Bf7 f4 Rcd8 Ne5 Nxe5 Bxe5 Kg8 Kc1 Re7 Rd3 Red7 Red1 Be6 Ba2 Kf8
Kb2 Bf7 R1d2 Kg8 Bb1 Be6 Re2 Bf7 Rc2 Be6 Rc1 Bf7 Ba2 Be6 Rcd1 Re8 R1d2 Bf7
Bb1 Rde7 Bc2 h6 gxh6 Kh7) {-0.89/36 88} 33. Kd2 (Kd2 Nd7 Re1 Kg7 Nd3 Bf7
Be5 Kg8 Ba2 Nf8 h4 Rcd8 Bd6 Rxe1 Nxe1 Ne6 Rd3 Ng7 Be5 Nh5 Nc2 Re8 Bxd5 Bxd5
Rxd5 cxd5 f4 Kf7 Nd4 Nxf4 Bxf4 Re4) {+1.30/16 12} Kg7 (Kg7 Nd3 Nd7 Re1 Bf7
f4 Rcd8 Ne5 Nxe5 Bxe5 Kg8 Kc1 Rd7 Rd3 Red8 Red1 Be6 Ba2 Kf7 R3d2 Kf8 h4 Kg8
Kb2 Bf7 Rd4 Kf8 R1d2 Kg8 Kc1 Re8 R4d3 Red8 Rd1 Kf8 Bb1 Ke8 Re1 Re7 Rd2 Kd7
h5 Kc8 Rh1 Red7) {-0.99/40 80} 34. Bd3 (Bd3 Nd7 Re2 h6 h4 Bf7 Nd1 hxg5 hxg5
Rxe2 Bxe2 Re8 f4 Rh8 Bf3 Rh2 Ke1 Be6 Rd3 Kf7 Ne3 Rh3 Kf2 Nxe3) {+1.38/14
348} Nd7 (Nd7 Re2 h6 h4 hxg5 hxg5 Bf7 Nd1 Nc7 Rxe8 Nxe8 Bg3 Nf8 Be5 Kg8 Nf2
Bb3 Rh4 Ng7 Be2 Rd8 Kc3 Re8 f4 Nd7 Bf3 Nxe5 fxe5 Rxe5 Nd3 Re3 Bxc6 Bc4 Rxc4
bxc4 Kxc4 Ne6 Bxa4 Kf8 Bb3 Ke7 a4 Nxg5 a5) {-1.17/36 237} 35. Re2 (Re2 h6
h4 Bf7 Nd1 Nf8 Rxe8 Rxe8 f4 hxg5 hxg5 Nd7 Be2 Rh8 Bf3 Rh2 Ke1 Be6 Rd3 Rh3
Kf2 Kf7 Kg2 Rh8 Nc3 Nxc3) {+1.52/15 0} h6 (h6 f4 hxg5 fxg5 Rcd8 Nd1 Kf7 Nc3
N7b6 cxb6 Rxd6 Nxd5 Red8 Nc7 Rxd4 Nxe6 Rxd3 Kc2 R3d7 Nxd8 Rxd8 Rd2 Rb8 Rd7
Ke6 Rg7 Rxb6 Rxg6 Ke5 h4 Rb8 Rxc6 Rh8 Rh6 Rc8 Kd3 Rc4 h5 Rg4 g6 Rg3 Ke2 f4
Rh7 Re3 Kf2 Rxa3 Rb7 Rb3 Rxb5 Kf6 Ra5 Rxb4) {-1.13/36 124} 36. h4 (h4 hxg5
hxg5 Rcd8 Nd1 Nf8 f4 Kf7 Rh2 Ne7 Nc3 Nc8 Be5 Rxd4 Bxd4 Ne7 Bf6 Nd5 Be5 Nxc3
Kxc3 Bd5 Rh6 Bf3 Bb1 Bd5 Rh8 Ne6) {+1.55/14 41} hxg5 (hxg5 hxg5 Kg8 Nh3 Bf7
f4 Nf8 Ng1 Red8 Rh2 Rxd6 cxd6 Rd8 Rh4 Kg7 Be2 Ne6 Rxd5 cxd5 Bxb5 Rxd6 Ne2
Rd8 Bd3 Rd6 Rh1 Be8 Rb1 Kf7 b5 Rb6 Rb4 Rb7 Nc3 d4 Ne2 Ke7 b6 Bc6 Bc4 Kd6)
{-1.23/34 52} 37. hxg5 (hxg5 Rcd8 Nd1 Kf7 Rh2 Nf8 f4 Ne7 Nc3 Nc8 Be5 Rxd4
Bxd4 Ne7 Be5 Rd8 Ke3 Nd5 Nxd5 Bxd5 Bd6 Re8 Kd2 Be4 Be2 Bd5 Rh8 Kg7)
{+1.61/14 89} Kg8 (Kg8 Nh3 Bf7 f4 Nf8 Ng1 Red8 Rh2 Rxd6 cxd6 Rd8 Rh4 Kg7
Be2 Ne6 Rxd5 cxd5 Bxb5 Rxd6 Ne2 Rd8 Rh3 Be8 Bd3 d4 Bc4 Nc7 Rd3 Bb5 Nxd4
Bxc4 Nxf5 gxf5 Rxd8 Bf7 Ke3 Nd5 Kf3) {-0.95/34} 38. Nd1 (Nd1 Kf7 Rh4 Rh8
Reh2 Rxh4 Rxh4 Kg7 Be2 Bg8 Rd4 Be6 Ne3 Nxe3 Kxe3 Re8 Kf2 Kf7 f4 Rh8 Bf3 Rc8
Rd1 Bb3 Rh1 Kg7 Re1 Kg8 Re7) {+1.68/14 163} Nf8 (Nf8 Rh2 Rcd8 Nc3 Nxc3 Kxc3
Bb3 Rdh4 Kg7 Kd2 Bg8 Bf1 Bd5 f4 Kf7 Bd3 Rxd6 cxd6 Rd8 Kc3 Rxd6 Rh6 Rd7 Rd2
Kg7 Rh4 Kf7 Rh3 Kg8 Bf1 Kf7 Rh6 Rd6 Bg2 Ne6 Rh7 Kg8 Rh4 Kf8 Bf3 Ke7 Rh7 Kd8
Bxd5 cxd5 Rf2) {-1.61/37 182} 39. f4 (f4 Ne7 Nc3 Kf7 Rh2 Rcd8 Rh3 Nc8 Be5
Rxd4 Bxd4 Ne7 Be5 Rd8 Ke1 Bb3 Bd6 Nc8 Bc7 Rd7 Be5 Ne7 Bf1 Nd5 Bg2 Rd8 Nxd5)
{+1.70/13 254} Ne7 (Ne7 Nc3 Kf7 Rh2 Bb3 Bf1 Ne6 Rd3 Rh8 Rdh3 Rxh3 Rxh3 Nd5
Nxd5 Bxd5 Rh7 Kg8 Re7 Rd8 Be2 Ng7 Bc7 Re8 Rd7 Be4 Be5 Ne6 Ke3 Nxg5 Rg7 Kf8
Rxg6 Nf7 Bg7 Ke7 Bh5 Kd7 Rf6 Bd5 Kf2 Ke7 Bxf7 Bxf7 Rxc6 Bc4) {-1.21/38 231}
40. Nc3 (Nc3 Kf7 Rh2 Rcd8 Rh3 Nc8 Be5 Rxd4 Bxd4 Ne7 Be5 Rd8 Ke1 Bb3 Bd6 Nd5
Nxd5 Bxd5 Kf2 Re8 Bxf8 Rxf8 Rh7 Ke6 Rg7 Rh8 Rxg6) {+1.54/14 0} Kf7 (Kf7 Rh2
Rcd8 Rh8 Bc8 Be2 Ne6 Rxe8 Rxe8 Rd3 Rh8 Bf3 Bd7 Ke1 Rh2 Ne2 Nd5 Kf1 Bc8 Kg1
Rh3 Kg2 Rh8 Be5 Re8 Bxd5 cxd5 Rh3 d4 Kf2 d3 Nc3 d2 Rh7 Kg8 Rh6 Kf7 c6 Rd8
Ke2) {-1.91/36 79} 41. Rh2 (Rh2 Rcd8 Rh3 Nc8 Be5 Rxd4 Bxd4 Ne7 Ne2 Rd8 Rh8
Rd7 Be5 Bc4 Nd4 Ne6 Rh7 Ke8 Rh8 Kf7 Rh7 Ke8 Bxc4 bxc4 Rh8 Kf7 Kc3 Nxd4 Bxd4
Nd5 Kxc4 Nxf4 Be5 Ne6 Rh7 Ke8 Rh6 Kf7 b5 Rd5 Rh7 Kg8) {+1.58/18 18} Rcd8
(Rcd8 Rh8 Bc8 Be2 Ne6 Rxe8 Rxe8 Rd3 Rh8 Bf3 Bb7 Re3 Rd8 Ke1 Rd7 Be2 Nc7 Rh3
Ncd5 Nxd5 Nxd5 Kf2 Ke6 Rh6 Kf7 Be5 Ba6 Bf3 Bb7 Rh8 Ne7 Ke3 Nd5 Bxd5 cxd5
Kd4 Ke6 Bd6) {-1.85/35 16} 42. Rh6 (Rh6 Nc8 Be5 Rxd4 Bxd4 Ne7 Be5 Bb3 Bd6
Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2 Bb1 Bd5 Rd6 Kf7 Bd3 Bg2 Rd7 Kg8 Ke3
Re8 Kf2 Bh1 Be2 Re4 Rd1 Rxf4 Kg3) {+1.56/18 119} Nc8 (Nc8 Be5 Rxd4 Bxd4 Bb3
Be5 Ne7 Rh8 Rd8 Bc7 Re8 Bd6 Nd5 Rh6 Rd8 Nxd5 Bxd5 Ke3 Kg7 Kd4 Ne6 Kc3 Nf8
Be5 Kf7 Rh8 Re8 Rh2 Rd8 Rd2 Ne6 Bd6 Bf3 Rh2 Nf8 Bc7 Rd7 Be5 Bd5 Bd6 Rd8 Rd2
Ne6 Bf1 Be4 Rh2 Nf8 Rh8 Bd5 Bxf8 Be4 Rh6) {-0.74/36 24} 43. Be5 (Be5 Rxd4
Bxd4 Ne7 Be5 Bb3 Bd6 Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2 Bb1 Bd5 Rd6
Kf7 Bd3 Bg2 Rd7 Kg8 Bb1 Bd5 Kc3 Re8 Rxd5 cxd5 Bd3 Kf7 Bxb5 Re3 Bd3 Rf3)
{+1.52/17 19} Rxd4 (Rxd4 Bxd4 Bb3 Be5 Ne7 Rh8 Rd8 Bc7 Re8 Bd6 Nd5 Nxd5 Bxd5
Rh2 Be4 Be2 Rd8 Kc3 Bd5 Bd3 Re8 Rh6 Kg7 Be5 Kf7 Rh8 Rd8 Be2 Be4 Rh3 Re8 Rh2
Rd8 Rh8 Bd5 Rh3 Bg2 Rh6 Be4 Bd6 Bd5 Bd3 Re8 Bxf8 Rxf8 Rh7 Kg8) {-0.74/40
17} 44. Bxd4 (Bxd4 Ne7 Be5 Bb3 Bd6 Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2
Bb1 Bd5 Rd6 Kf7 Bd3 Bg2 Rd7 Kg8 Bb1 Bd5 Kc3 Re8 Rxd5 cxd5 Bd3 Kf7 Bxb5 Re3
Bd3 Rf3) {+1.47/16 25} Ne7 (Ne7 Ne2 Bb3 Be5 Ne6 Rh7 Kg8 Rh4 Rd8 Rh1 Kf7 Rh7
Ke8 Bd6 Nc8 Bb8 Ne7 Be5 Nd5 Bd6 Rd7 Rh4 Kf7 Be5 Ne7 Rh7 Kg8 Rh8 Kf7 Bd6 Nd5
Ra8 Rd8 Ra7 Kg8 Be5 Rc8 Rd7 Kf8 Rh7 Rd8 Bd6 Kg8 Rh4 Bc4 Bxc4 bxc4 Rh6 Ndxf4
Nxf4 Nxf4 Kc3) {-0.74/39 17} 45. Be5 (Be5 Bb3 Ne2 Ne6 Rh7 Kg8 Rh6 Kf7 Nd4
Nxd4 Bxd4 Rd8 Be5 Rd7 Rh7 Ke6 Rh6 Kf7 Rh7 Ke8 Bd6 Bg8 Rh8 Kf7 Rh1 Nc8 Be5
Ne7 Rh6 Ke8 Bd6 Kf7 Be2) {+1.41/16 272} Bb3 (Bb3 Ne2 Ne6 Ng1 Bd5 Rh4 Kf8
Ne2 Kf7 Rh7 Kg8 Rh6 Kf7 Nc3 Bb3 Rh7 Kg8 Rh2 Kf7 Bf1 Rd8 Ke3 Nd5 Nxd5 Bxd5
Rh7 Ke8 Bd6 Rd7 Rh8 Kf7 Bd3 Kg7 Rh3 Rd8 Be5 Kf7 Rh7 Ke8 Bd6 Rd7 Rh6 Kf7 Be2
Be4 Rh7 Ke8 Rh3 Kf7 Bf3 Bxf3 Kxf3 Nf8 Rh6 Kg7 Bxf8 Kxf8 Rxg6 Rd3 Ke2 Rxa3)
{-0.75/41 61} 46. Ne2 (Ne2 Ne6 Rh7 Kg8 Rh6 Kf7 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd7
Rh7 Ke6 Rh6 Kf7 Rh7 Ke8 Bd6 Bg8 Rh8 Kf7 Rh1 Nc8 Be5 Ne7 Rh6 Ke8 Bd6 Kf7
Be2) {+1.40/15 24} Ne6 (Ne6 Ng1 Bd5 Rh4 Kf8 Ne2 Kf7 Rh7 Kg8 Rh6 Kf7 Nc3 Bb3
Rh7 Kg8 Rh2 Kf7 Be2 Rd8 Ke3 Nd5 Nxd5 Bxd5 Rh7 Ke8 Bd6 Rd7 Rh8 Kf7 Bd3 Kg7
Rh3 Nd8 Kd4 Ne6 Kc3 Nd8 Be5 Kf7 Rh8 Ne6 Bd6 Kg7 Rh6 Nd8 Be5 Kf7 Kd2 Ne6 Rh7
Ke8 Rh8 Kf7 Bd6 Kg7 Rh2 Kf7 Ke3 Kg7 Be5 Kf7 Rh7 Ke8 Rh4 Kf7 Bd6 Nf8 Bxf8
Kxf8 Rh6) {-0.74/41 4} 47. Rh7+ (Rh7 Kg8 Rh6 Kf7 Nd4 Nxd4 Bxd4 Rd8 Rh7 Ke6
Be5 Rd5 Kc3 Rd7 Rh6 Kf7 Rh8 Ke6 Bd6 Nd5 Kd2 Nxf4 Bxf4 Bc4 Bd6 Bxd3 Kxd3 Rf7
Bf4 Rd7 Ke3 Kd5) {+1.35/14 149} Kg8 (Kg8 Rh2 Kf7 Rh4 Bd5 Rh7 Kg8 Rh2 Kf7
Nc3 Bb3 Rh7 Kg8 Rh6 Kf7 Ke3 Nf8 Ne2 Ne6 Rh7 Kg8 Rh8 Kf7 Rh6 Nd5 Kd2 Ne7 Ng1
Bd5 Rh7 Kg8 Rh3 Kf7 Rh6 Rd8 Ne2 Bf3 Nc3 Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg7 Nxd5
Bxd5 Be5 Kg8 Rh6 Kf7 Bf6 Re8 Rh7 Kg8) {-0.74/41 31} 48. Rh6 (Rh6 Kf7 Rh2
Nd5 Rh7 Kf8 Ra7 Rc8 Ra6 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3
Bc4 Bd6 Ke8 Bg2) {+1.33/15 72} Kf7 (Kf7 Nc3 Nf8 Be2 Rd8 Ke3 Nd5 Nxd5 Bxd5
Bd3 Re8 Kf2 Rd8 Bd6 Re8 Bf1 Be4 Rh3 Kg8 Be5 Rd8 Rh8 Kf7 Bd6 Re8 Rh6 Kg7 Be5
Kf7 Ke3 Rd8 Bd6 Bd5 Bd3 Re8 Kd2 Rd8 Kc3 Kg7 Rh2 Kf7 Rd2 Ne6 Bf1 Be4 Rh2 Nf8
Bxf8 Rxf8 Rh7 Kg8) {-0.74/44 51} 49. Ng1 (Ng1 Nd5 Rh7 Kf8 Ne2 Kg8 Rd7 Rd8
Ra7 Rc8 Ra6 Kf7 Bd6 Ke8 Ra7 Rd8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Ra6 Ne7
Nc1) {+1.35/15 55} Bd5 (Bd5 Rh7 Kg8 Rh4 Kf7 Ke3 Bb3 Ne2 Nd5 Kd2 Ne7 Rh6 Nd5
Bd6 Kg7 Rh1 Kg8 Rh4 Ne7 Nc3 Nf8 Rh3 Nd5 Nxd5 Bxd5 Rh6 Kf7 Rh4 Be4 Be2 Bd5
Be5 Be4 Ke3 Bd5 Rh3 Rd8 Rh6 Re8 Kf2 Rd8 Bd6 Re8 Bxf8 Rxf8 Rh7 Ke8 Bf3)
{-0.74/45 39} 50. Rh7+ (Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd5
Kc3 Rd7 Rh8 Nd5 Kd2 Bc4 Bxc4 bxc4 Kc1 Ne3 Bd6 c3 b5 cxb5 c6) {+1.38/14 1}
Kg8 (Kg8 Rh4 Kf7 Ke3 Bb3 Ne2 Nd5 Kd2 Ne7 Rh6 Nd5 Bd6 Kg7 Rh1 Kg8 Rh4 Ne7
Nc3 Nf8 Rh3 Nd5 Nxd5 Bxd5 Rh6 Kf7 Rh4 Be4 Be2 Bd5 Be5 Be4 Ke3 Bd5 Rh3 Rd8
Rh6 Re8 Kf2 Rd8 Bd6 Re8 Bd3 Bc4 Bxc4 bxc4 Be5 Nd7 Rh7 Ke6) {-0.74/45 28}
51. Rh2 (Rh2 Rd8 Ke3 Re8 Ne2 Bb3 Nc3 Nd5 Nxd5 Bxd5 Rh8 Kf7 Rh7 Kf8 Rd7 Rd8
Bd6 Kg8 Re7 Rf8 Bf1 Rd8 Be2 Rf8 Bf3 Bxf3 Rxe6 Bd5 Rxg6) {+1.49/14 38} Kf7
(Kf7 Ne2 Bb3 Rh7 Kg8 Rh8 Kf7 Rh2 Nd5 Rh7 Kf8 Rh4 Kf7 Bd6 Kg8 Rh2 Kf7 Rh7
Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Rh3 Kf7 Kd2 Bd5 Rh8 Kg7 Be5 Kf7 Kc3
Re8 Rh6 Bb3 Be2 Bd5 Kd2 Rd8 Ke3 Be4 Rh3 Bd5 Bd6 Re8 Kf2 Be4 Rh6 Bd5 Bxf8
Rxf8 Rh7 Ke8) {-0.74/41 36} 52. Ne2 (Ne2 Bb3 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd7 Bd6
Nc8 Bb8 Ne7 Rh7 Kg8 Rh6 Kf7 Rh8 Bc4 Bd6 Bxd3 Kxd3 Nd5 Rf8 Ke6 Rc8 Rh7 Rxc6
Rh3 Kd4 Rxa3 Be5 Ke7 Rxg6 Nxb4) {+1.34/14 65} Bb3 (Bb3) {-0.74/42} 53. Rh1
(Rh1 Nd5 Rh7 Kg8 Rd7 Rd8 Ra7 Rc8 Ra5 Kf8 Ra6 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8
Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8 Bg2) {+1.30/13 113} Nd5 (Nd5 Rh7 Kf8 Bd6
Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Rh4 Kg8 Be5 Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Rh7 Kg8
Rh8 Kf7 Rh2 Nd5 Rh1 Kf8 Rh7 Rd8 Rh4 Kf7 Bd6 Ba2 Rh7 Kg8 Ra7 Bb3 Be5 Rc8 Nd4
Nxd4 Bxd4 Nxf4) {-0.74/39 52} 54. Rh7+ (Rh7 Kg8 Rd7 Rd8 Ra7 Rc8 Ra5 Kf8 Ra6
Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Ke8 Bg2 Kd7 Nf3)
{+1.26/15 0} Kf8 (Kf8 Bd6 Kg8 Rh4 Ba2 Rh2 Kf7 Rh6 Rd8 Nc3 Nxc3 Kxc3 Rd7 Kd2
Bb3 Rh7 Ke8 Rh4 Kf7 Kc3 Bd5 Kb2 Nd4 Rh7 Ke6 Rh6 Kf7 Bb1 Ne6 Rh7 Ke8 Rh8 Kf7
Rh6 Bb3 Rh7 Ke8 Rh8 Kf7 Kc3 Kg7 Be5 Kf7 Bd3 Bd5 Rh6 Ba2 Bf1 Bd5 Bd6 Be4 Be2
Kg7 Bd1 Bd5 Be5 Kf7 Rh7 Ke8 Rh4 Kf7 Be2 Nf8 Rh6 Rd8 Bd6 Re8 Bd3 Bf3 Be5 Rd8
Rh8 Bd5 Bd6 Bf3 Kd2 Bd5 Ke3 Re8 Be5 Bg2 Rh2 Bd5 Rh6 Bb3 Be2 Bd5 Kd2 Rd8 Bd6
Be4 Kc3 Kg7 Rh3 Kf7 Bd3 Bd5 Rh6 Bf3 Kd2 Re8 Bxf8 Rxf8 Rh7 Kg8) {-0.74/39
46} 55. Ra7 (Ra7 Rc8 Rd7 Rd8 Bd6 Kg8 Ra7 Re8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7
Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8) {+1.28/13 65} Rc8 (Rc8 Rd7
Rd8 Rh7 Kg8 Rh2 Re8 Rh1 Kf7 Rh7 Kf8 Bd6 Kg8 Rh4 Ba2 Rh6 Kf7 Nc3 Nxc3 Kxc3
Bd5 Rh7 Kg8 Rb7 Be4 Bf1 Bf3 Rd7 Be4 Ra7 Bd5 Ra6 Rd8 Bd3 Rd7 Ra8 Kg7 Be5 Kf7
Rh8 Ke7 Rh7 Ke8 Rh4 Kf7 Bd6 Ke8 Bf1 Kf7 Rh7 Ke8 Rh8 Kf7 Bd3 Kg7 Be5 Kf7 Kd2
Rd8 Rh7 Kg8 Rh6 Kf7 Bd6 Kg7 Kc3 Nf8 Rh2 Kf7 Bxf8 Kxf8 Rh7) {-0.74/42 26}
56. Rh7 (Rh7 Re8 Bd6 Kg8 Ra7 Rd8 Be5 Rc8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2
Bf3 Ke8 Bg2 Kd7 Nf3) {+1.22/13 45} Rd8 (Rd8 Rh8 Kf7 Rh6 Re8 Rh7 Kf8 Bd6 Kg8
Rh4 Ba2 Rh6 Kf7 Nc3 Nxc3 Kxc3 Bd5 Rh7 Kg8 Rb7 Be4 Bf1 Bf3 Rd7 Nf8 Rc7 Ne6
Rb7 Bd5 Ra7 Nf8 Bd3 Ne6 Ra6 Kf7 Bc2 Be4 Ra7 Kg8 Rd7 Bd5 Be5 Nxg5 Rg7 Kf8
Rxg6 Ne4 Kb2 Re6) {-0.74/41 26} 57. Bd6+ (Bd6 Kg8 Ra7 Re8 Be5 Rc8 Rd7 Rd8
Rxd8 Nxd8 Nd4 Kf7 Be2 Ke8 Bf3 Kd7 Nxb3 axb3 Kc1 Ne3 Be2 Ne6) {+1.24/13 8}
Kg8 (Kg8 Rh4 Re8 Rh3 Rd8 Be5 Re8 Rh6 Kf7 Rh4 Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5 Bxd5
Kc3 Nf8 Be5 Kg8 Rh8 Kf7 Rh6 Rd8 Bd6 Kg7 Bc7 Rd7 Be5 Kf7 Bd6 Ne6 Rh7 Ke8 Rh4
Kf7 Kd2 Kg8 Rh6 Kg7 Be5 Kf7 Rh7 Ke8 Rh8 Kf7 Kc3 Nf8 Bd6 Ne6 Kb2 Kg7 Rh3 Kf7
Rh7 Ng7 Kc3 Kg8 Rh6 Kf7 Kd4 Rd8 Rh7 Kg8 Rh3 Ne6 Ke3 Re8 Kf2 Nf8 Rh6 Kf7
Bxf8 Rxf8 Rh7 Kg8) {-0.74/43 23} 58. Ra7 (Ra7 Rc8 Rd7 Rd8 Ra7 Re8 Ra6 Rc8
Be5 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8 Bg2)
{+1.23/13 24} Kh8 (Kh8 Ra6 Rc8 Be5 Kg8 Ra7 Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Kh8 Be5
Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Rd8 Rh8 Kf7 Rh6 Re8 Rh4 Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5
Bxd5 Kc3 Nf8 Be5 Kg8 Rh6 Kf7 Rh3 Rd8 Rh2 Re8 Rd2 Rd8 Bc7 Rd7 Bd6 Ne6)
{-0.74/41 51} 59. Ra6 (Ra6 Rc8 Ra5 Kg8 Ra6 Kf7 Be5 Ke7 Ra7 Kf8 Rd7 Rd8 Rxd8
Nxd8 Nd4 Ke8 Be2 Kd7 Bf3 Bc4 Bg2) {+1.25/13 42} Rc8 (Rc8 Be5 Kg8 Ra5 Re8
Ra7 Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Ra8 Rd7 Rc8 Be5 Kf8 Rh7 Rd8 Rh8 Kf7 Rh6 Re8 Rh4
Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5 Bxd5 Kc3 Nf8 Be5 Kg8 Rh6 Kf7 Rh3 Rd8 Rh2 Re8 Rd2
Rd8 Bc7 Rd7 Bd6 Ne6) {-0.74/45} 60. Ra5 (Ra5 Kg8 Ra6 Kf7 Be5 Ke7 Ra7 Kf8
Rd7 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Ra6 Ne7 Nc1) {+1.24/12 15}
Re8 (Re8 Be5 Kg8 Ra6 Rc8 Bd6 Kh8 Ra7 Rd8 Rb7 Kg8 Be5 Rc8 Rd7 Kf8 Rh7 Rd8
Rh8 Kf7 Rh4 Rd7 Rh7 Ke8 Rh8 Kf7 Bd6 Rd8 Rh6 Rd7 Rh7 Ke8 Rh4 Kf7 Nc3 Nd4 Rh3
Ne6 Rh7 Ke8 Rh8 Kf7 Nxd5 Bxd5 Ke3 Kg7 Rh6 Kf7 Rh7 Ke8 Rh3 Kf7 Rh6 Kg7 Be5
Kf7) {-0.76/40 66} 61. Ra7 (Ra7 Kg8 Be5 Rc8 Rd7 Rd8 Ra7 Rc8 Rd7 Kf8 Rd6 Kf7
Ke1 Ne3 Nd4 Nxd4 Bxd4 Ng2 Kd2 Nxf4 Rf6) {+1.24/13 28} Rd8 (Rd8 Be5 Kg8 Ra6
Rc8 Bd6 Kh8 Bxb5 cxb5 Be5 Kg8 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3 Kf7
c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8 Kc5 Bc4
Bh2 Kc8 Kd4 Kd8 Ke5 Kc8 Kf6 Bd3 Bf4 Kd8 Bd6 Kc8 Ke6 Bc4 Ke5 Be2 Kf4 Bd3 Ke3
Bc4 Ke4 Kd8 c7 Kc8) {-0.52/39 20} 62. Ra6 (Ra6 Rc8 Be5 Kg8 Ra7 Kf8 Rd7 Rd8
Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Ne5 Nxe5 Bxe5) {+1.15/14
14} Rc8 (Rc8 Bxb5 cxb5 Be5 Kg8 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3 Kf7
c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8 Kc5 Bc4
Bh2 Kc8 Kd6 Bd3 Kd5 Bc4 Kc5 Bd3 Bd6 Bc4 Kb6 Be2 Be5 Bc4 Bd4 Bd3 c7 Bc4 Be5
Bd3 Kc5) {-0.52/42 21} 63. Ra5 (Ra5 Kg7 Ra7 Kg8 Be5 Kf8 Rd7 Rd8 Bd6 Kg8
Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Bb8 Kc8 Be5) {+1.13/13 5} Re8
(Re8 Be5 Kg8 Ra7 Rd8 Ra6 Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8
Re3 Kf7 c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8
Kc5 Bc4 Bh2 Bd3 Kb6 Kc8 Bf4 Bc4 Be5 Bd3 Bd4 Bc4 Kc5 Kd8 Kd6 Bd3 Be5 Bc4 c7
Kc8 Kc6 Bd3 Bf4) {-0.52/43 25} 64. Be5+ (Be5 Kg8 Ra6 Rc8 Ra7 Kf8 Rd7 Rd8
Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Bb8 Kc8 Be5) {+1.16/13
10} Kg8 (Kg8 Ra7 Rd8 Ra6 Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8
Re3 Kf7 c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8
Kc5 Bc4 Bh2 Bd3 Kb6 Kc8 Bf4 Bc4 Be5 Bd3 Bh2 Be2 Bg3 Bd3 Kc5 Bc4 Kd6 Kd8 Be5
Kc8 Ke7 Bd3 c7 Be2 Bg3) {-0.52/45 11} 65. Ra6 (Ra6 Rc8 Ra5 Kf7 Ra6 Ke7 Ra7
Kf8 Rd7 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Rh8 Ne7 Ng1 Bd5)
{+1.14/13 21} Rc8 (Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3
Kf7 c6 Bc4 Kd2 f4 Bxf4 Rxe3 Kxe3 Ke7 Kd4 Kd8 Ke5 Kc8 Kf6 Bd3 Bd6 Be4 Kg7
Bd3 Kf7 Kd8 Kf6 Be4 Bf4 Bd3 c7 Kd7 Ke5 Bf5 Kd5 Be6 Kc5 Bc4 Be5 Bd3 Bg3 Bf1
Bd6 Kc8 Kd5 Be2 Bf4 Bd3 Kc6 Bc4) {-0.52/45 23} 66. Ra5 (Ra5 Kf7 Ra6 Ke7 Ra7
Kf8 Rd7 Rd8 Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Ne5 Nxe5 Bxe5
Bc4) {+1.13/15 0} Re8 (Re8 Ra7 Rd8 Rb7 Kf8 Rh7 Kg8 Rh8 Kf7 Rh6 Ne7 Rh7 Ke8
Bd6 Rd7 Nc3 Nf8 Rh8 Kf7 Ke3 Rd8 Rh6 Nd5 Nxd5 Bxd5 Kd4 Bb3 Kc3 Kg7 Bc7 Re8
Be5 Kf7 Rh8 Bd5 Rh3 Rd8 Rh6 Re8 Rh8 Ne6 Rh7 Kg8 Ra7 Nxg5 Rd7 Ne4 Kd4 Bf7
Rc7 Nf2 Rxc6 Nxd3) {-1.04/40 91} 67. Ra7 (Ra7 Rc8 Rd7 Kf8 Bd6 Kg8 Ra7 Rd8
Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4)
{+1.14/12 10} Rd8 (Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Rc8 Ra7 Re8 Ra6 Rc8 Be5 Kf7 Ra7
Kg8 Rd7 Kf8 Rh7 Rd8 Rh8 Ke7 Rh2 Ke8 Rh6 Kf7 Rh4 Kf8 Bd6 Kg8 Rh6 Kf7 Be5 Rd7
Rh7 Ke8 Rh4 Kf8 Bd6 Kg7 Ng1 Bc4 Bxc4 bxc4 Nf3 Rd8 Kc2 Re8 Be5 Kf7 Rh7 Kf8
Rh8 Kf7 Rh4 Rd8 Rh7 Kg8 Rh6 Kf7) {-1.04/42 28} 68. Rb7 (Rb7 Kf8 Rh7 Re8 Bd6
Kg8 Rd7 Rc8 Ra7 Rd8 Ra6 Rc8 Be5 Ba2 Nc3 Nxc3 Kxc3 Bd5 Ra7 Re8 Rd7 Rd8 Re7)
{+1.10/13 9} Kf8 (Kf8 Rh7 Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Rd8 Rh4 Kf7 Nc3 Re8 Bd6
Nd4 Rh7 Kg8 Rh3 Kf7 Ne2 Ne6 Rh7 Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Be5
Kf7 Rh4 Re8 Rh1 Bd5 Rh3 Rd8 Rh8 Bb3 Be2 Bd5 Bd6 Kg7 Rh6 Nd7) {-0.84/37 5}
69. Rh7 (Rh7 Re8 Ra7 Rc8 Rd7 Rd8 Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7
Nf3 Nf7 Bb8 Kc8 Be5 Kd7 Bh1) {+1.08/12 0} Kg8 (Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Re8
Bd6 Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Be5 Kf7 Be2 Bd5 Bd6 Kg7 Rh3 Re8
Be5 Kf7 Bf1 Rd8 Bd3 Re8 Rh8 Bb3 Rh2 Rd8 Bd6 Re8 Rh6 Kg7 Be5 Kf7 Rh8 Rd8 Be2
Bd5 Rh6 Re8 Bf1 Rd8 Bd6 Kg7 Rh2 Be4 Rh3 Kf7 Bd3 Bxd3 Kxd3 Re8) {-0.81/40
18} 70. Ra7 (Ra7 Rc8 Rd7 Kf8 Ra7 Kg8 Rd7 Kf8 Kc1 Ke8 Rh7 Rd8 Bd6 Rd7 Rh8
Kf7 Bb1 Bc4 Ng1 Ndxf4) {+1.13/11 7} Rc8 (Rc8 Rd7 Kf8 Rh7 Rd8 Rh8 Kf7 Rh2
Ke8 Bd6 Kf7 Rh4 Ba2 Rh3 Re8 Rh7 Kg8 Rh4 Bb3 Rh6 Kg7 Be5 Kf7 Rh7 Kf8 Bd6 Kg8
Rh4 Ne7 Be5 Kf7 Rh7 Kg8 Rh3 Kf7 Nc3 Nd5 Rh7 Kg8 Rh6 Nexf4 Nxd5 Nxd5 Rxg6
Kf7 Rg7 Kf8) {-0.81/39 18} 71. Rd7 (Rd7 Kf8 Bd6 Kg8 Ra7 Rd8 Be5 Rc8 Rd7 Kf8
Ke1 Rd8 Rxd8 Nxd8 Nd4 Ne3 Kd2 Nc4 Bxc4 Bxc4 Bf6 Ne6) {+1.06/12 4} Kf8 (Kf8
Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Be5 Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nc3
Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg8 Nxd5 Bxd5 Rh6 Kg7 Kc3 Nf8 Be5 Kf7 Rh3 Bb3 Rh4
Ba2 Rh1 Bd5 Rh6 Bb3 Bd6 Kg7 Bxf8 Rxf8) {-0.81/37 13} 72. Bd6+ (Bd6 Kg8 Ra7
Rd8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Kc1 Ke8 Rh7 Rd8 Bd6 Rd7 Rh8 Kf7 Kd2 Rd8
Rh7) {+1.03/13 0} Kg8 (Kg8 Be5 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh3 Nd5 Be5 Kf7
Rh4 Ne7 Ng1 Bd5 Rh7 Kg8 Rh3 Kf7 Ne2 Bb3 Nc3 Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg8
Nxd5 Bxd5 Rh6 Kg7 Kc3 Nf8 Be5 Kf7 Rh3 Bb3 Bf1 Bd5 Rh8 Rd8 Bd3 Re8 Rh6 Bb3)
{-0.81/42 26} 73. Ra7 (Ra7 Rd8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Rd6 Ke7 Ke1
Ne3 Kd2 Nd5 Kc1 Kf7 Kd2 Ke7) {+0.99/14 0} Re8 (Re8 Rd7 Rd8 Rb7 Rc8 Be5 Rd8
Ra7 Rc8 Rd7 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Be5 Nd5 Nc3 Kf7 Bd6 Nd4 Rh7 Kg8 Rh3
Kf7 Ne2 Ne6 Rh6 Rd8 Rh4 Kg8 Ng1 Bc4 Bxc4 bxc4 Ne2 Ndc7 Rh6 Kg7 Kc2 Nb5 Be5
Kf7 Rh7 Ke8 Nc3 Ned4 Bxd4 Nxd4 Kb2 Ne6 Rh8 Ke7 Rxd8 Kxd8 Nxa4 Nxf4 Nb6 Ne6)
{-0.81/43 15} 74. Ra6 (Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Rxd8 Nxd8
Nd4 Ke8 Nxb3 axb3 Be2 Nf7 Bb8 Kd7 Kb2 Kc8 Bf3) {+0.96/12 16} Rc8 (Rc8 Be5
Kf7 Ra7 Kf8 Rd7 Rd8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Nc3 Nd5 Be5 Kf7 Ne2 Ne7 Ng1 Bd5
Rh2 Rd8 Ke3 Re8 Ne2 Bb3 Nc3 Nf8 Rh8 Ne6 Rh6 Nf8 Kd2 Nd5 Nxd5 Bxd5 Kc3 Bb3
Bd6 Bd5 Bxf8 Rxf8 Rh7 Kg8 Rd7 Bg2 Bb1 Re8) {-0.81/41 20} 75. Be5 (Be5 Kf7
Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Kd2 Rd8 Rxd8 Nxd8 Nd4 Ke8
Be5 Kd7 Nxf5 gxf5 Bxf5) {+0.93/13 0} Kf7 (Kf7 Ra7 Kg8 Rd7 Kf8 Rh7 Re8 Bd6
Kg8 Rh4 Ne7 Nc3 Nd5 Be5 Kf7 Ne2 Ne7 Rh2 Rd8 Rh7 Ke8 Rh6 Kf7 Nc3 Nf8 Ke3 Re8
Rh2 Rd8 Be2 Nd5 Nxd5 Bxd5 Rh8 Re8 Kd2 Rd8 Kc3 Re8 Bd3 Bb3 Bd6 Kg7 Rxf8)
{-0.80/39 12} 76. Ra7+ (Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Kd2
Rd8 Rxd8 Nxd8 Nd4 Ke8 Bf1 Kd7 Bg2 Ne6 Nxe6 Kxe6 Bf3 Bc4 Be5) {+0.90/13 7}
Kg8 (Kg8 Rd7 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh1 Nd5 Be5 Kf7 Rh4 Ne7 Rh7 Kg8
Rh3 Kf7 Ng1 Bd5 Rh6 Rd8 Ne2 Bb3 Rh1 Re8 Nc3 Nf8 Rh8 Nd5 Nxd5 Bxd5 Kc3 Bb3
Bf1 Bd5 Rh3 Rd8 Rh6 Re8 Bd3 Bb3 Rh8 Bd5 Bd6 Kg7) {-0.80/41 11} 77. Rd7 (Rd7
Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Kd2 Ne7 Ra6 Bd5 Nc3 Bg2
Ke3 Nc8) {+0.90/13 0} Kf8 (Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Be5
Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nc3 Nf8 Rh8 Rd8 Bc7 Re8 Bd6 Kg7 Rh2 Nd5 Nxd5
Bxd5 Be5 Kf7 Kc3 Bb3 Rh8 Bd5 Rh6 Bb3 Bd6 Kg7 Rh3) {-0.80/38 14} 78. Rd6
(Rd6 Ke7 Ke1 Ne3 Bf6 Kf7 Kd2 Nd5 Be5 Ke7 Ke1 Ne3 Nd4 Nxd4 Bxd4 Ng2 Kd2 Nxf4
Bf1 Bd5 Bf6 Kf7 Rd7 Kf8) {+0.87/13 7} Ke7 (Ke7 Nd4 Nxd4 Bxd4 Nxf4 Bf1 Kf7
Ke3 Nd5 Kf2 Bc4 Bg2 Re8 Bxd5 Bxd5 Rf6 Ke7 Rxg6 Kf8 Rf6 Kg8 Be3 Re4 Rxf5 Rc4
Ke2 Be4 Rf4 Bd5 Rxc4 Bxc4 Kf3 Kf7 Bc1 Ke6 Kf4 Kf7 Kf5 Bd3 Kg4 Kg6)
{-0.31/29 13} 79. Ke1 (Ke1 Ne3 Kd2 Nd5 Ng1 Ndxf4 Nf3 Bd5 Bf6 Ke8 Ne5 Nxd3
Kxd3 Rc7 Nxg6 Rh7 Ne5 Rh3 Kd2 Rh2 Ke1 Rh1 Kf2 Rh2 Kg3 Rg2 Kh3 Nf4)
{+0.81/14 0} Rd8 (Rd8 Rxc6 Nxb4 axb4 Rxd3 Ra6 Bc4 Bf6 Kf7 Ra7 Ke8 Nc3 Nd4
Ra8 Kf7 Bxd4 Rxd4 c6 Be6 Ra7 Kf8 c7 Rxb4 Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=Q
Bxc8 Rxc8 Rg4 Ra8 Rxg5 Nd4 Rg4 Rxa4 Re4 Kd3 Kf6 Ra6 Ke5 Ne2 g5 Ra3 Kf6 Ra8
Re5 Rf8 Ke7) {-0.24/34 22} 80. Rxc6 (Rxc6 Nxb4 axb4 Rxd3 Ra6 Bc4 Nc1 Rd5 c6
Rxe5 fxe5 Kd8 Ne2 Kc7 Kf2 f4 Nc3 Nxg5 Kg2 Ne6 Kf3 g5 Kg4 Nd4 Ra7 Kxc6)
{+0.89/14 1} Nxb4 (Nxb4 axb4 Rxd3 Ra6 Bc4 Bf6 Ke8 Nc3 Nd4 Ra8 Kf7 Bxd4 Rxd4
c6 Be6 Ra7 Kf8 c7 Rxb4 Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=N Bxc8 Rxc8 Rg4 Ra8
Rxg5 Nd4 Rg2 Kf3 Rg4 Ke3 Re4 Kd3 Kf6 Ra6 Ke5 Rxa4 Kf4 Ne6 Ke5 Ra6 Rg4)
{-0.22/36 10} 81. axb4 (axb4 Rxd3 Ra6 Bc4 Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5
Nd3 Ne6 Nb2 Bb3 Nd3 Bc4 Kd2 g5 Nc5 Nxc5 bxc5 f4 Rd7 Kc8 Rd6) {+0.89/16 0}
Rxd3 (Rxd3 Ra6 Bc4 Bf6 Ke8 Nc3 Nd4 Ra8 Kf7 Bxd4 Rxd4 c6 Be6 Ra7 Kf8 c7 Rxb4
Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=N Bxc8 Rxc8 Rg4 Ra8 Rxg5 Nd4 Rg3 Kf2 Rd3 Rxa4
f4 Ke2 Re3 Kd2 Kf6 Ra6 Ke5 Nc6 Ke6 Ra5 g5 Nd4 Kf6 Nf5 Re8) {-0.13/36 14}
82. Ra6 (Ra6 Bc4 Nc1 Rd5 Ne2 Rd3 Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6
Nb2 Bb3 Nd3 Bc4 Kd2 g5 Nc5 Nxc5 bxc5 f4 Rd7 Kc8 Rd6) {+0.76/16 0} Bc4 (Bc4
Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ne2 Kc7 Kf2 f4 Nc3 Nxg5 Ra7 Kxc6 Ra6 Kc7 Rxg6 Nf7
Rg7 Kc6 Rg6) {0.00/37 37} 83. Nc1 (Nc1 Rd5 Ne2 Rd3 Nc1 Rd5 c6 Rxe5 fxe5 Kd8
Ra7 Nxg5 Nd3 Ne6 Kd2 g5 Nb2 Bb3 Nd1 Kc8 Ne3 Nd4 Kc3 Nxc6 Rg7 f4 Nf5 f3 Nd6
Kd8 Rxg5) {+0.60/18 0} Rd5 (Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6 Kf2 f4
Nb2 Bb3 Nd1 Kc8 Nc3 Nd4 Rg7 g5 Ne4 Nxc6 Nd6 Kd8 Nxb5 Nxe5 Rxg5 Nc6 Kf3 Nxb4
Kxf4 a3 Nd4 Bd5 Rg3 Kc7 Rxa3) {0.00/35 8} 84. Ne2 (Ne2 Rd3 Nc1 Rd5 c6 Rxe5
fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6 Nc5 Nxc5 bxc5 g5 c7 Kc8 Ra6 Kxc7 e6 Kd8 c6 a3 Ra8
Ke7 c7 Bxe6 Rxa3 Kd7 Ra6 Bc4 Rc6 Kc8 Rc5 Be6 Rxb5 Kxc7) {+0.56/19 1} Rd3
(Rd3 Ng1 a3 Bf6 Ke8 c6 Nxf4 Ra8 Kf7 Ra7 Kf8 Ra8) {0.00/37 22} 85. Bf6+ (Bf6
Ke8 Nc3 Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Ne6 Na3 Bf1 Ke3 Nxg5 Kf4 Ne6 Ke5
Nd8 Kd5 f4 Kc5 Ne6 Kd5 Nd8 Kc5 Ne6 Kd5 Nd8) {+0.55/20 3} Ke8 (Ke8 Nc3 Nxf4
c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Bd5 Ra7 Kxc6 Ra6 Kb7 Rd6 Kc7 Rf6 Be6 Kc2 Bd5)
{0.00/36 20} 86. Nc3 (Nc3 Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6
Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1 Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8 a3)
{+0.53/20 0} Nxf4 (Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Bd5 Ra7 Kxc6 Ra6 Kc7
Rf6 Be6 Kc2 Bd5) {0.00/37 9} 87. c6 (c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7
Kxc6 Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1 Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8
a3) {+0.50/21 0} Rd8 (Rd8 Bxd8 Kxd8 Ra7 Nd3 Kd2 Nxb4 c7 Kd7 Nxa4 bxa4 Rxa4
Na6 c8=Q Kxc8 Rxc4 Kd7 Rh4 Nc5 Ke3 Ne6 Rh7 Kd6 Rh6 Nxg5) {0.00/39 9} 88.
Bxd8 (Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6 Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1
Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8 a3) {+0.48/18 0} Kxd8 (Kxd8 Ra7 Nd3
Kd2 Nxb4 c7 Kd7 Nxa4 bxa4 Rxa4 Na6 c8=Q Kxc8 Rxc4 Kd7 Rh4 Nc5 Ke3 Ne6 Rh7
Kd6 Rh6 Nxg5) {0.00/42 11} 89. Kd2 (Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6 Rg7 Nxb4 Rxg6
Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Rxf5 b3 Na3 Nd4 Rf4 b2 g6 Nb5 Kc2 Nxa3 Kxb2 Nc4
Ka1 Ne3 g7 Nc2) {+0.46/17 0} Kc7 (Kc7 Nb1 Nd5 Na3 Nxb4 Ra7 Kxc6 Nxc4 bxc4
Kc3 Nd5 Kxc4 Nc7 Rxa4 Kd7 Kb4 Ne6 Ra7 Kd6 Ra6 Ke5 Kc4 Nxg5) {0.00/41 9} 90.
Nb1 (Nb1 Nd5 Ra7 Kxc6 Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Rxf5 b3 Ne3
Ne7 Re5 a3 Kc1 Kd6 Rxe7 Kxe7 Nxd5 Kf7 Nf4 Kg7) {+0.47/18 0} Nd5 (Nd5 Na3
Nxb4 Ra7 Kxc6 Nxc4 bxc4 Kc3 Nd5 Kxc4 Nc7 Rxa4 Kd7 Kb4 Ne6 Ra7 Kd6 Ra6 Ke5
Kc4 Nxg5) {0.00/41 8} 91. Ra7+ (Ra7 Kxc6 Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6
Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kc2 Kd4 Kb2 Ke5 Rf8 f4 Nc2 b3
Nb4 Bg8 Nd3) {+0.48/18 8} Kxc6 (Kxc6 Ra6 Nb6 Na3 Bf1 Ra7 Nc4 Nxc4 Bxc4 Ra6
Kd5 Rxg6 f4 Ra6 Ke4 g6 f3 g7 f2 Rf6 a3 Rxf2 a2 Re2 Bxe2 Kxe2) {0.00/40 8}
92. Rg7 (Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1
Ne7 Re6 Ng8 g7 Bd5 Re5 f4 Rf5 f3 Kc2 Kd4 Kb2 Ke4 Rf8 b3) {+0.46/18 0} Nxb4
(Nxb4 Rxg6 Kc5 Rf6 Nd5 Rxf5 b4 Kc2 Kd4 Rf3 Ne3 Kd2 a3 Nxa3 bxa3 Rxe3)
{0.00/40 12} 93. Na3 (Na3 Bd5 Rxg6 Kc5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2
Na1 Ne7 Re6 Ng8 Re8 Bd5 Rf8 Ne7 g7 b3 Kc3 Kd6 Nxb3 Bxb3 Kxb3 a1=Q g8=Q)
{+0.41/17 3} Bd5 (Bd5 Rxg6 Kc5 Rf6 Nc6 Nxb5 Kxb5 Rxf5 Kc5 Rxd5) {0.00/42
10} 94. Rxg6+ (Rxg6 Kc5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5
Kd3 Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 f4 Nc2 b3 Ne1 Ke4 Ng2) {+0.28/18 0} Kc5 (Kc5
Rf6 Nc6 Nc2 b4 g6 b3 Rxf5 bxc2 Rxd5 Kxd5) {0.00/39 9} 95. Rf6 (Rf6 Nc6 Nc2
b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kd3 Bc4 Kc2 Kd4 Kb2 Ke5 Rf8 f4 Nb3
Bd5 Nc1 f3 Nxa2 Nf5) {+0.27/16 0} Nc6 (Nc6 Nc2 b4 Rxf5 b3 g6 bxc2 Rxd5
Kxd5) {0.00/41 7} 96. Nc2 (Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kd3
Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 f4 Nc2 b3 Ne1 Ke4 Re8 Kf5) {+0.27/16 0} b4 (b4 g6
b3 Rxf5 bxc2 Rxd5 Kxd5) {0.00/41 16} 97. Ne3 (Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7
g7 Bd5 Kd3 Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 b3 Nxb3 Bxb3 Re8 Kf6 Rxe7 Kxe7 Kxb3)
{+0.22/17 0} Be4 (Be4 g6 Ne7 Re6 Nxg6 Rxg6 a3 Rg1 b3 Kc3 b2 Kb3 b1=R Rxb1
Bxb1) {0.00/37 8} 98. g6 (g6 a3 Nc2 a2 Na1 Ne7 Kc1 Bd5 Kb2 Kd4 Nc2 Ke5 Rb6
f4 Nxb4 Bg8 Nd3 Kf5 g7 f3 Ra6 Kg5 Nf2 Nf5) {+0.19/16 0} a3 (a3 Nc2 Ne7 Re6
Nxg6 Rxg6 b3 Nxa3 Kb4 Ra6 b2 Ra7 Kb3 Ke2 b1=Q Nxb1) {0.00/38 6} 99. Nc2
(Nc2 a2 Na1 Ne7 g7 Bd5 Kd3 Bg8 Kc2 Kd4 Kb2 Ke5 Rf8 b3 Ka3 f4 Kb2 Bd5 Nxb3
f3 Nd2 f2) {+0.18/15 0} Ne7 (Ne7 Re6 Nxg6 Rxg6 b3 Nxa3 Kb4 Ra6 b2 Ra7 Kb3
Ke2 b1=Q Nxb1) {0.00/40 5} 100. g7 (g7 a2 Na1 Bd5 Kd3 Bc4 Kc2 Kd4 Kb2 Ke5
Rf8 b3 Kc3 Be6 Nxb3 Bxb3 Kxb3) {+0.22/10 4} a2 (a2 Na1 Bd5 Kc2 Kd4 Ra6 Ke5
Nb3 f4 Rxa2 Bxb3 Kxb3 Kf6 Rg2 Ng8 Kb2 f3 Rg3 f2 Rf3 Kxg7) {0.00/39 8} 101.
Na1 (Na1 Bd5 Kd3 Bg8 Kc2 Kd4 Kb2 Ke5 Rf8 b3 Rb8 Kf6 Nxb3 Kxg7 Kxa2 f4 Kb2
f3 Nd2 Bd5) {+0.07/12 0} Bd5 (Bd5 Kc2 Kd4 Ra6 f4 Nb3 Ke5 Rxa2 Nf5 Ra5 Nxg7
Kd3 Nf5 Nd2 Kd6 Rb5 f3 Rxb4 f2 Rf4 f1=Q Nxf1) {0.00/41 4} 102. Kc2 (Kc2 Kd4
Kb2 Ke5 Rb6 f4 Nc2 f3 Ne3 Be6 Rxb4 f2 Ra4 Kf6 Rf4 Kxg7 Rxf2 Kg6 Ng2 Kg5)
{+0.04/11 1} b3+ (b3 Kb2 Kd4 Ra6 Ke5 Nxb3 Bxb3 Kxb3 a1=Q Rxa1) {0.00/42 5}
103. Kc3 (Kc3 Bc4 Kb2 Kd4 Rb6 Ke5 Nxb3 f4 Nd2 Bd5 Ra6 f3 Nxf3 Bxf3 Ra7 Ng8)
{+0.31/8 1} Bc4 (Bc4 Rf8 Bd5 Kb2 Kd4 Re8 Ng8 Rb8 Ke5 Nxb3 Bxb3 Rxb3 a1=Q
Kxa1) {0.00/43 6} 104. Kb2 (Kb2 Kd4 Rb6 Ke5 Nxb3 f4 Nd2 Bd5 Rb5 Ke6 Rb4 Kf7
Rxf4 Kxg7 Ne4 a1=Q Kxa1) {+0.31/10 0} Kd4 (Kd4 Rf8 Ke5 g8=Q Nxg8 Re8 Kf6
Re1 f4 Nxb3 f3 Nd2 f2 Ne4 Kg6 Nxf2 a1=Q Rxa1) {0.00/46 5} 105. Rb6 (Rb6 Ke5
Nxb3 Bxb3 Rxb3 Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3 f4 Kc4 f3 Kd3 f2 Ke2 Nh6) {+0.27/11
0} Ke5 (Ke5 Nxb3 Bxb3 Rxb3 a1=Q Kxa1) {0.00/48 5} 106. Nxb3 (Nxb3 Bxb3 Rxb3
Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3 f4 Kc4 f3 Kd3 Nh6 Ke3 Nf5 Kxf3) {+0.23/11 0} Bxb3
(Bxb3 Rxb3 a1=Q Kxa1) {0.00/53 7} 107. Rxb3 (Rxb3 Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3
f4 Kc4 f3 Kd3 Nh6 Ke3 Nf5 Kxf3 Nxg7) {+0.17/10 0} a1=Q+ (a1=Q Kxa1)
{0.00/105 4} 108. Kxa1 (Kxa1 Kf6 Rb7 Ng8 Kb2 Kg6 Kc3 f4 Kd4 f3 Ke3 Nh6 Kxf3
Kh7 Kf4) {+0.25/8 1} Kf6 (Kf6 Rb7 Ng8 Kb2 Ke6 Kb3 Kf6 Kb4 Nh6 Kc3 Ng8 Ra7
Kg6 Kd4 Kf6 Kd3 Kg6 Ke2 Nh6 Rb7 Kf6 Kf3 Kg6 Kf2 Kf6 Rd7 Kg6 Kg2 Ng8 Kf3 Nh6
Rb7 Ng8 Kf4 Kf6 Ra7 Nh6 Rd7 Ng8 Kf3 Kg6 Kg2 Nf6 Rb7 Ng8 Kg1 Nf6 Kf2 Ne4 Kf3
Nf6 Ra7 Ng8 Kf4 Nh6 Ke5 Nf7 Ke6 Nh6 Rb7 f4 Kd5 f3) {0.00/55 16} 109. Rb7
(Rb7 Ng8 Kb2 Kg6 Kc3 Nh6 Kd4 Kf6 Kd5 Ng8 Ra7 Nh6 Rd7 Ng8 Kd6 Nh6) {+0.26/11
0} Ng8 (Ng8 Kb2 Ke6 Kb3 Kf6 Kb4 Nh6 Kc3 Ng8 Ra7 Nh6 Kd3 Kg6 Kd4 Kf6 Rc7 Kg6
Ke5 Nf7 Kd5 Nh6 Rb7 Kf6 Rd7 Kg6 Ke5 Ng4 Kd4 Nh6 Ke3 Ng8 Rb7 Nh6 Kf4 Kf6 Rd7
Kg6 Rc7 Kf6 Kg3 Ng8 Ra7 Kg6 Kh4 Nf6 Kh3 Kh7 Kg3 Kg6 Kf3 Ng8 Rb7 Nf6 Ke3 Ng8
Rd7 Nh6 Ke2 Ng8 Kd1 Nf6 Kc2 f4 Ra7 Kh7) {0.00/58 8} 110. Kb2 (Kb2 Kg6 Kc3
Nh6 Kd4 Kf6 Kd5 Ng8 Rc7 Nh6 Rb7 Kg6 Ke6 Ng8 Rf7 Nh6) {+0.31/10 0} Nh6 (Nh6
Kc3 Ng8 Ra7 Kg6 Kd4 Kf6 Kd3 Kg6 Ke3 Nh6 Kd4 Kf6 Rc7 Kg6 Ke5 Nf7 Kd5 Nh6 Rb7
Kf6 Rd7 Ng8 Kc4 Nh6 Kd3 Ng8 Rc7 Kg6 Ke3 Nf6 Kd4 Ng8 Ke5 Nh6 Rd7 Nf7 Kf4 Nh6
Kf3 Ng8 Rc7 Nh6 Rb7 Ng8 Kg3 Nf6 Kf2 Ng8 Rc7 Nf6 Ra7 Ng8 Kg2 Nh6 Kg3 Ng8 Kh3
Nf6 Kg2 Kh7 Kg3 Nh5 Kh4 Nxg7 Kg5 Kg8) {0.00/56 3} 111. Kc3 (Kc3 Kg6 Kd4 Kf6
Rc7 Kg6 Ke5 Ng8 Ra7 Nh6 Ke6 Ng8 Ra1 Kxg7) {+0.34/9 0} Ng8 (Ng8 Ra7 Kg6 Kd4
Nh6 Kd3 Ng8 Rd7 Kh7 Kd4 Nh6 Kd5 Kg6 Rc7 Kf6 Kd4 Ng8 Kc4 Nh6 Kd5 Kg6 Rd7 Kf6
Kd4 Kg6 Ra7 Ng8 Ke5 Nh6 Kf4 Kf6 Rc7 Ng8 Rd7 Nh6 Ke3 Kg6 Kf3 Kf6 Rb7 Kg6 Ra7
Kf6 Kf2 Ng8 Kg2 Kg6 Kh3 Nh6 Rc7 Ng8 Rb7 Kf6 Rd7 Kg6 Rc7 Kh7 Rb7 Kg6 Kh2 Nh6
Rd7 Ng4 Kh3 Nf6 Kh4 f4 Ra7 f3) {0.00/50 3} 112. Kd4 (Kd4 Nh6 Ke3 Kg6 Kf4
Ng8 Ke5 Nh6 Rd7 Ng8 Ke6 Nh6 Rc7 Ng8) {+0.40/8 3} Kg6 (Kg6 Ke5 Nh6 Rd7 Nf7
Ke6 Nh6 Kd5 Kf6 Ra7 Kg6 Rc7 Kf6 Rd7 Kg6 Kd4 Kf6 Ke3 Kg6 Kf3 Ng8 Kf2 Nf6 Rb7
Ng8 Kg2 Nh6 Kg3 Ng8 Kh3 Nf6 Kg2 Kh7 Kg3 Ng8 Kf4 Kg6 Ra7 Nh6 Kf3 Ng8 Ke3 Nf6
Kd4 Ng8 Rb7 Nf6 Rc7 Ng8 Kc3 Nf6 Ra7 Ng8 Rd7 Nh6 Rb7 f4 Kd3 f3) {0.00/53 53}
113. Ke5 (Ke5 Nh6 Ra7 Ng8 Ke6 Nh6 Ra1 Kxg7 Rg1 Kh7 Kf6 Ng8 Kf7 Nh6 Ke6)
{+0.42/9 1} Nh6 (Nh6 Rd7 Nf7 Ke6 Nh6 Kd5 Kf6 Ra7 Kg6 Rc7 Kf6 Rd7 Kg6 Kd4
Kf6 Kd3 Kg6 Ke2 Kh7 Kf3 Ng8 Kg3 Nf6 Rf7 Ng8 Rb7 Kg6 Kf4 Nf6 Ke5 Ng4 Kd4 Nf6
Kc4 Ng8 Kc3 Kf6 Ra7 Nh6 Kd3 Kg6 Rd7 Ng8 Kd4 Nh6 Rc7 Ng8 Ke5 Nh6 Kf4 Ng8 Ra7
Nf6 Kf3 Ng8 Kg2 Nh6 Kf2 Ng8 Rd7 Nf6 Rb7 Ng8 Kg3 Nf6 Kh4 f4 Ra7 f3) {0.00/55
2} 114. Rc7 (Rc7 Ng8 Ra7 Nh6 Ke6 f4 Ra1 Kxg7 Rg1 Kf8 Kf6 Ng8 Ke6 Nh6 Rg6)
{+0.39/9 2} Ng4+ (Ng4 Kd4 Nh6 Rd7 Ng8 Ke5 Nh6 Kf4 Ng8 Rb7 Nf6 Ke5 Ng4 Kd4
Nf6 Re7 Ng8 Rd7 Nf6 Rb7 Ng8 Ke5 Nh6 Rd7 Ng4 Kd5 Nh6 Ra7 Kf6 Kd4 Kg6 Kd3 Ng8
Kc3 Nh6 Kd2 Ng8 Ke1 Nf6 Kf2 Ng4 Kg3 Nf6 Kh3 Ng8 Kg2 Nh6 Kg3 Kf6 Rd7 Kg6 Rc7
Kh7 Ra7 Ng8 Rd7 Nh6 Kh3 f4 Kg2 Nf5) {0.00/51 4} 115. Ke6 (Ke6 Nh6 Rf7 Ng8
Rd7 Nh6 Ra7 f4 Ke5 f3 Ke6 f2 Ra1 Kxg7 Rf1) {+0.38/8 0} Nh6 (Nh6 Kd5 Kf6 Rb7
Kg6 Kd4 Ng8 Ke5 Nh6 Rd7 Nf7 Kd5 Nh6 Kd4 Ng8 Rb7 Nf6 Rc7 Ng8 Kc3 Kf6 Kd2 Kg6
Rb7 Kh7 Ke3 Kg6 Ra7 Nf6 Kd3 Ng8 Kc2 Kf6 Kb3 Kg6 Kb2 Nh6 Kb1 f4 Kc2 f3 Kd1
Kh7) {0.00/38 31} 116. Rf7 (Rf7 Ng8 Rc7 Nh6 Ra7 f4 Ke5 f3 Ke4 f2 Ra1 Kxg7
Ke3 f1=B Ra7 Kf6) {+0.32/10 0} Ng8 (Ng8 Rxf5 Kxg7 Rf7 Kg6 Rf1 Kg7 Rg1 Kf8
Rg6 Ne7 Rf6 Ke8 Rf3 Ng8 Rf1 Nh6 Kf6 Ng8 Ke5 Nh6 Rb1 Kf7 Rb7 Kg6 Ke6 Ng8 Rf7
Nh6 Ra7 Ng8 Ra8 Kg7 Re8 Nh6 Re7 Kg6 Kd5 Kg5 Ra7 Kf4 Ra1 Kg5 Kd4 Ng4 Ra7 Kf5
Rf7 Kg5 Kc3 Nh6 Kb2 Nxf7 Kb1 Kh4) {0.00/40 2} 117. Rc7 (Rc7 Nh6 Rb7 f4 Rf7
Ng8 Rxf4 Kxg7 Rg4 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8) {+0.28/9 1} f4 (f4 Rf7 f3
Rxf3 Kxg7 Kf5 Nh6 Ke5 Kg6 Rg3 Kf7 Kd5 Ng8 Rf3 Ke7 Re3 Kf8 Ke5 Kg7 Rg3 Kf8
Ke6 Nh6 Kf6 Ng8 Kg5 Kf7 Rg2 Ne7 Rd2 Ke6 Re2 Kf7 Kf4 Kf6 Ke4 Ng8 Rg2 Kf7 Kd4
Ne7 Rg1 Kf6 Rf1 Ke6 Kc5 Ng6 Re1 Kf5 Kd4 Kf6 Ke4 Ne7 Rf1 Kg7 Rg1 Kf7 Ke5 Ng8
Rf1 Kg7 Kf5 Ne7 Ke4 Ng8 Ke5 Nh6 Rg1 Kf7 Kf4 Kf6 Ke4 Kf7 Ke3 Nf5 Kf4 Nd4 Ke4
Ne6 Ke5 Nd8 Kd5 Ke7 Rg7 Nf7 Rg3 Kf6 Rf3 Kg6 Ke6 Ng5 Ke7 Nxf3 Kd8 Kf6)
{0.00/46 3} 118. Rf7 (Rf7 f3 Rxf3 Kxg7 Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8
Kf8 Rh7 Ke8) {+0.19/8 1} f3 (f3 Rf8 Kxg7 Rf7 Kh6 Rxf3 Kg7 Rg3 Kf8 Rg1 Nh6
Kf6 Ng8 Kf5 Kf7 Re1 Nh6 Kf4 Ng8 Kg5 Kf8 Re6 Kf7 Rb6 Kg7 Rb7 Kf8 Rd7 Ne7 Kf4
Ng8 Kf5 Ne7 Kg5 Ng8 Rd8 Kf7 Rb8 Kg7 Ra8 Kf7 Kf4 Kg7 Ra7 Kf6 Ra6 Kf7 Ke5 Ne7
Ra3 Ng6 Kf5 Ne7 Kg5 Ng8 Rf3 Ke6 Rf1 Ne7 Rg1 Nc6 Re1 Kd6 Kf4 Kd5 Re8 Kd6 Ke4
Ne7 Rd8 Ke6 Rb8 Nd5 Kd4 Ne7 Rb6 Kf7 Ke3 Nd5 Kd2 Nxb6 Ke1 Ke6) {0.00/49 0}
119. Rxf3 (Rxf3 Kxg7 Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8 Ra7)
{+0.13/8 0} Kxg7 (Kxg7 Ke5 Kg6 Rg3 Kf7 Rd3 Nh6 Rf3 Ke7 Rg3 Nf7 Ke4 Nd6 Kd5
Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6 Kf5 Nd5 Ke6 Nc7 Ke5 Nb5 Rh6 Kc5
Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Rd1 Kc6 Rd6 Kc5 Rd8 Kc6 Rc8 Kb7 Rg8 Kc6 Rg4 Nb5 Rc4
Kd7 Kf6 Kd6 Rf4 Na3 Rf3 Nb5 Rd3 Kc6 Rd8 Nc7 Kg6 Ne6 Kf5 Nxd8 Kf6 Kd7)
{0.00/51 3} 120. Rg3+ (Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8 Ra7
Kf8 Rf7) {+0.13/7 0} Kf8 (Kf8 Rf3 Kg7 Ke5 Kg6 Rg3 Kf7 Rd3 Nh6 Rf3 Ke7 Rg3
Nf7 Ke4 Nd6 Kd5 Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6 Kf5 Nd5 Ke6 Nc7
Ke5 Nb5 Rh6 Kc5 Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Rd1 Kc6 Ke4 Nb5 Rg1 Nc7 Rg6 Kd7 Kd3
Ne8 Kd4 Nc7 Rb6 Ne8 Kd5 Nc7 Kc5 Ne6 Kc4 Nd8 Kd3 Ke7 Kd4 Ne6 Kd5 Nc7 Kc6 Ne8
Kc5 Kd7 Rb7 Ke6 Kd4 Nf6 Rb6 Kf5 Rb5 Ke6 Ra5 Ng4 Ra8 Kf5 Re8 Kg6 Kd5 Nf6 Ke6
Nxe8 Ke5 Kg5) {0.00/54 2} 121. Rg6 (Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8
Ra7 Kf8 Rf7 Ke8) {+0.18/7 1} Ne7 (Ne7 Rg3 Ng8 Rf3 Kg7 Ke5 Kg6 Rg3 Kf7 Rd3
Nh6 Rf3 Ke7 Rg3 Nf7 Ke4 Nd6 Kd5 Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6
Kf5 Nd5 Ke6 Nc7 Ke5 Nb5 Rh6 Kc5 Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Kd4 Kd6 Ke4 Nb5 Kf5
Kd5 Rd1 Kc5 Ke6 Na3 Rd7 Nb5 Rg7 Kc6 Rg6 Nd4 Ke5 Kc5 Kf4 Nc6 Ke4 Nb4 Rg1 Nc6
Rd1 Na7 Rd3 Nb5 Rd8 Nd6 Ke5 Nc4 Ke6 Ne3 Rd7 Kc6 Kf6 Kxd7 Kg5 Ke6) {0.00/56
2} 122. Rf6+ (Rf6 Ke8 Rh6 Ng8 Rg6 Kf8 Kd6 Kf7 Rg2 Nh6 Ke5 Ng8) {+0.15/7 1}
Ke8 (Ke8 Kd6 Nc8 Kc5 Ke7 Ra6 Kf7 Ra8 Ne7 Kd4 Ke6 Ra6 Kf5 Rb6 Ng6 Kd5 Nf4
Kd6 Ke4 Ra6 Nd3 Ra8 Kf5 Ra5 Kf6 Kd5 Nf4 Ke4 Ne6 Rf5 Ke7 Ke5 Nf8 Rf1 Nd7 Kd4
Nf6 Ra1 Kf8 Ke5 Ng8 Ra7 Ne7 Rd7 Ng8 Kf5 Ne7 Kg5 Ng8 Rd8 Kg7 Kf5 Ne7 Ke6 Ng8
Rc8 Nh6 Ke5 Ng4 Kf4 Nh6 Rc7 Kf6 Rc6 Kg7 Kg5 Ng8 Re6 Kf8 Rb6 Kf7 Rb7 Ke6 Rb1
Kf7 Rg1 Ke7 Rf1 Kd6 Re1 Kd7 Rd1 Ke7 Kf5 Kf7 Kf4 Kg7 Rf1 Nh6 Ke5 Ng4 Kf5 Ne3
Ke4 Nxf1 Ke5 Ng3) {0.00/50 2} 123. Rh6 (Rh6 Ng8 Rg6 Kf8 Kd6 Kf7 Ke5 Kxg6)
{+0.14/7 1} Ng8 (Ng8 Rh8 Kf8 Rh7 Ke8 Ra7 Kf8 Ra8 Kg7 Rc8 Nh6 Rc7 Kg6 Ke5
Ng4 Kf4 Nh6 Ke4 Kf6 Kd4 Kf5 Rb7 Kf4 Kd3 Nf5 Rb5 Ng7 Kc4 Ke4 Rb1 Ne6 Ra1 Ke5
Re1 Kf5 Kd5 Nf4 Kd6 Kf6 Ra1 Kf5 Ra4 Nd3 Ra5 Kf6 Kd5 Nf4 Ke4 Ne6 Rf5 Ke7 Ke5
Nf8 Rf1 Nd7 Kd4 Ke6 Ra1 Ke7 Ra7 Ke6 Ke4 Nc5 Ke3 Kd5 Kf4 Ne6 Kg4 Ke5 Ra5 Kd4
Kf5 Nc5 Ra7 Kd5 Rh7 Ne4 Re7 Nd6 Kf4 Kd4 Rc7 Nc4 Rc6 Ne3 Re6 Nd5 Kf5 Ne3
Rxe3 Kxe3 Ke5 Kf3) {0.00/51 2} 124. Rh7 (Rh7 Kf8 Rf7 Ke8 Ra7 Kf8 Rf7 Ke8
Rf3 Nh6 Ra3 Kf8) {+0.11/7 1} Kf8 (Kf8 Ra7 Nh6 Ra3 Kg7 Rg3 Kf8 Rf3 Kg7 Ke5
Ng8 Ke4 Nf6 Kf5 Ng8 Rg3 Kf8 Ke4 Nf6 Kd3 Kf7 Kd4 Ng8 Rg1 Nf6 Re1 Ng8 Ra1 Nh6
Ra7 Kg6 Ra6 Kg5 Kc5 Nf5 Kd5 Nh6 Ra7 Kf5 Kc5 Ng4 Rf7 Ke4 Re7 Kf5 Kd6 Kg5 Rg7
Kf4 Rf7 Ke4 Rf8 Ne3 Re8 Kd4 Ke6 Nc4 Rd8 Ke3 Kd5 Nd2 Rd7 Nf3 Rf7 Nh2 Re7 Kf4
Re4 Kf5 Re6 Ng4 Ra6 Nf6 Kc4 Kg6 Kd3 Kg7 Ra8 Kh6 Rf8 Nd7 Ke3 Nxf8 Kf2 Ne6)
{0.00/52 2} 125. Rf7+ (Rf7 Ke8 Rg7 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rg6 Kf8 Rg4)
{+0.11/8 0} Ke8 (Ke8) {0.00/1 0} 126. Rf2 (Rf2 Nh6 Ra2 Kf8 Ra7 Ng8 Rh7 Ke8
Ra7 Kf8 Rf7 Ke8 Rf4) {+0.15/7 1} Nh6 (Nh6 Kd5 Ke7 Rf1 Nf7 Rf3 Nh6 Ke5 Ng8
Re3 Kf7 Rg3 Kf8 Kf4 Ne7 Rg1 Ng8 Rd1 Kf7 Rf1 Kf6 Kg3 Ke7 Ra1 Ke6 Kf4 Kf6 Ra6
Kf7 Kg3 Ne7 Ra7 Ke6 Ra8 Ke5 Kf3 Ke6 Ra6 Ke5 Ra5 Nd5 Ra1 Kd4 Ra4 Ke5 Re4 Kf5
Re8 Nf6 Rf8 Ke5 Ra8 Ke6 Kf4 Nd5 Ke4 Nf6 Kf3 Kd6 Kf4 Nd5 Kf5 Ne7 Ke4 Nc6 Rg8
Ne7 Rg1 Ke6 Rf1 Nc6 Rd1 Nb4 Rc1 Kd6 Rg1 Nc6 Rg6 Kd7 Ke3 Ne5 Kf4 Nxg6 Ke4
Ne7) {0.00/53 6} 127. Ra2 (Ra2 Kf8 Ra7 Ng8 Kf5 Ne7 Ke6 Ng8 Rf7 Ke8 Rf4 Nh6
Rf6 Ng8) {+0.16/8 1} Kf8 (Kf8 Rg2 Ng8 Kd6 Nh6 Kc5 Ng8 Rb2 Kf7 Rb1 Ke6 Kd4
Ne7 Ke4 Nd5 Ra1 Nf6 Kd4 Nd7 Ra6 Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Kf7 Ra6 Ke7 Ra7 Kd6
Rb7 Ke6 Rb1 Kd6 Rd1 Ke6 Rg1 Nc5 Re1 Kd5 Rd1 Ke6 Rd8 Ke7 Rg8 Ke6 Ke3 Ke5 Rg5
Kd6 Kd4 Ne6 Kd3 Nxg5 Kc4 Ke5) {0.00/50 3} 128. Rg2 (Rg2 Ng8 Rg6 Ne7 Rg5 Ng8
Rg1 Nh6 Kf6 Ng8 Kg5 Kf7 Rf1) {+0.14/8 0} Ng8 (Ng8 Kd6 Nh6 Kc5 Ng8 Rb2 Kf7
Rb1 Ke6 Kd4 Ne7 Ke4 Nd5 Ra1 Nf6 Kd4 Nd7 Ra6 Ke7 Rg6 Nf6 Kd3 Kf7 Rg5 Nd7 Ke4
Ke6 Rg6 Ke7 Rc6 Nf6 Kf5 Nd7 Re6 Kf7 Rd6 Nf8 Rd1 Ng6 Rd7 Ne7 Ke5 Kf8 Rd1 Kg7
Rg1 Kf8 Rf1 Kg7 Rf3 Ng8 Ke4 Nf6 Kf5 Ng8 Rg3 Kf8 Kg5 Ke7 Re3 Kd6 Re1 Ne7 Kf6
Nd5 Kg6 Ne7 Kf7 Nf5 Re4 Kd5 Kf6 Kxe4 Kg5 Nd4) {0.00/51 1} 129. Rg6 (Rg6 Ne7
Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh5 Kg7 Rg5 Kf8) {+0.16/7 0} Ne7 (Ne7 Rg3 Ng8 Rf3
Kg7 Ke5 Kg6 Rg3 Kf7 Kf4 Nh6 Rg2 Kf6 Kf3 Nf5 Ke4 Nh6 Rg3 Kf7 Rf3 Ke6 Kf4 Nf7
Re3 Kf6 Re1 Nd6 Rf1 Ke6 Rg1 Kf6 Rg5 Nc4 Rg8 Nd6 Rb8 Ke6 Rb6 Kd5 Ra6 Nc4 Rg6
Kd4 Kf5 Kd5 Kf6 Nd6 Rg5 Kc6 Ke6 Nb5 Rg3 Nc7 Kf5 Kc5 Rd3 Kc6 Kf6 Nb5 Ke7 Na7
Rd2 Nb5 Rd7 Nc7 Rd6 Kc5 Rd1 Nd5 Ke6 Nc7 Kf5 Nb5 Rg1 Nd4 Ke5 Nf3 Kf4 Nxg1
Ke3 Kb4) {0.00/52 2} 130. Rf6+ (Rf6 Ke8 Rh6 Ng8 Rh5 Kf8 Rh7 Ke8 Ra7 Kf8 Rf7
Ke8 Rf4) {+0.11/7 1} Ke8 (Ke8 Kd6 Nc8 Kc5 Ke7 Ra6 Kf7 Ra8 Ne7 Kd4 Nf5 Ke5
Nh6 Kd5 Kf6 Ra6 Kg7 Ra7 Kf6 Rc7 Ng8 Rc6 Kg7 Rb6 Nf6 Kc4 Kf7 Rb7 Ke6 Ra7 Ne4
Kd4 Nf6 Ra6 Kf5 Rb6 Ne4 Rb5 Kf4 Rb7 Nf6 Rb6 Ne4 Re6 Ng3 Rf6 Nf5 Kd5 Kg5 Ra6
Nh6 Rb6 Ng4 Kd4 Kf4 Rb1 Ne3 Rb8 Nf5 Kd5 Ne3 Kc5 Ke5 Re8 Kf4 Kd4 Nf5 Kd3 Kg5
Ke2 Kf6 Kf3 Kg7 Kf4 Kf7 Kxf5 Kxe8 Ke6 Kf8) {0.00/53 3} 131. Rh6 (Rh6 Ng8
Rg6 Kf8 Kd7 Kf7 Re6 Kg7 Rd6 Kf7) {+0.13/7 0} Ng8 (Ng8 Rh8 Kf8 Rh7 Ke8 Ra7
Kf8 Rf7 Ke8 Rf1 Nh6 Rd1 Ng8 Rb1 Kf8 Kf5 Ne7 Kf4 Kf7 Ke4 Ke6 Rb6 Kf7 Rb7 Kf6
Rc7 Ng6 Rc6 Kf7 Ra6 Ne7 Kd4 Kg7 Rb6 Nf5 Ke5 Nh6 Rb7 Kg6 Kf4 Kf6 Ke4 Nf7 Kf3
Nd6 Rc7 Ke5 Ra7 Nc4 Ra1 Kd5 Rd1 Ke5 Re1 Kd5 Kf4 Kd6 Ke4 Nd2 Kf5 Nc4 Rd1 Kc5
Ke4 Nd6 Kf4 Kc6 Kg5 Nc4 Kf6 Kc5 Kf5 Ne3 Ke5 Nxd1 Kf6 Nc3) {0.00/52 2} 132.
Rg6 (Rg6 Kf8 Kd7 Kf7 Rg2 Nf6 Kd6 Ne8 Ke5 Ng7) {+0.11/7 1} Kf8 (Kf8 Kd6 Kf7
Rg4 Kf8 Rg1 Nf6 Ke5 Ng8 Rf1 Kg7 Kd4 Kg6 Ke3 Nf6 Kf4 Ng8 Rg1 Kf7 Rg2 Nf6 Rb2
Nd5 Ke5 Ne7 Rb7 Kf8 Rb8 Kf7 Ra8 Kg7 Kd4 Nf5 Kc4 Ne3 Kb5 Nf5 Ka4 Kf6 Ra5 Ke6
Kb4 Nd6 Kb3 Ne4 Kc2 Nd6 Kd2 Ne8 Ra6 Kd5 Kd3 Nd6 Rb6 Ke5 Rxd6 Kxd6 Ke2 Kc5)
{0.00/47 2} 133. Rg1 (Rg1 Nh6 Rg2 Ng8 Rd2 Kg7 Rd7 Kg6 Rf7 Nh6) {+0.13/7 1}
Nh6 (Nh6 Re1 Kg7 Kd6 Nf5 Kd7 Kf6 Re6 Kg7 Rb6 Nh6 Rb7 Kg6 Kc6 Nf7 Kd5 Kf6
Rb6 Kg7 Ke6 Nh6 Rb7 Kg6 Kd5 Ng8 Rb8 Nf6 Kd6 Ng4 Rg8 Kf5 Rf8 Ke4 Re8 Kf5 Re2
Kf4 Kc5 Ne3 Kd4 Nf5 Kd3 Kg4 Rg2 Kf4 Rf2 Ke5 Re2 Kd5 Rg2 Nd6 Rg5 Ke6 Ra5 Nf5
Rc5 Ne7 Kd4 Nf5 Kc3 Ng3 Rc8 Kf7 Kd4 Nf5 Kd5 Ne7 Ke4 Nxc8 Kf4 Nd6) {0.00/48
2} 134. Rg2 (Rg2 Ng8 Rg3 Nh6 Kf6 Ng8 Kf5 Kf7 Rf3) {+0.11/7 1} Ng8 (Ng8 Kd6
Nf6 Rf2 Kg7 Rf1 Ng8 Ke5 Ne7 Rf3 Ng8 Rg3 Kf8 Kf4 Ne7 Rg1 Ng8 Rg6 Kf7 Rg2 Nf6
Rb2 Nd5 Ke5 Ne7 Rb7 Kf8 Rb8 Kf7 Ra8 Kg7 Kd4 Nf5 Kc4 Ne3 Kb5 Nf5 Ka4 Kf6 Ra5
Ke6 Kb4 Nd6 Kb3 Ne4 Kc4 Nd6 Kd4 Nf5 Ke4 Ng3 Kf3 Nf5 Ra8 Ke5 Ke2 Ke4 Kd2 Nd4
Re8 Kd5 Re1 Nf3 Kd3 Nxe1 Kc3 Nf3) {0.00/53 2} 135. Rg3 (Rg3 Nh6 Rg1 Ng8 Rf1
Kg7 Rf7 Kg6 Rf8 Kg7 Rf7 Kg6) {+0.11/7 0} Nh6 (Nh6 Rg1 Ng8 Rc1 Nh6 Rf1 Kg7
Rg1 Kf8 Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke4 Ng4 Rb5
Kf6 Rf5 Kg6 Kf4 Nh6 Rf8 Kg7 Ra8 Kg6 Ra6 Kg7 Kg5 Nf7 Kh5 Ne5 Rb6 Nc4 Rc6 Ne5
Ra6 Nf7 Rg6 Kf8 Rg1 Nd6 Re1 Kf7 Kg5 Ne8 Rf1 Ke7 Ra1 Kd6 Ra6 Ke7 Kg6 Nc7 Kf5
Nxa6 Ke4 Nb4) {0.00/53 2} 136. Rg6 (Rg6 Ng8 Kd6 Kf7 Rg7 Kxg7) {+0.10/6 1}
Ng8 (Ng8 Kd6 Kf7 Rg4 Kf8 Rg1 Nf6 Ke5 Ng8 Ke4 Ne7 Rf1 Kg7 Ke3 Ng6 Kd4 Ne7
Ke4 Ng8 Ke5 Ne7 Rf3 Ng8 Rg3 Kf7 Ke4 Ne7 Kf3 Kf6 Rg2 Ke5 Re2 Kf6 Re1 Nd5 Ke4
Ne7 Kd3 Ng6 Kd2 Nf4 Rb1 Nd5 Kd3 Nf4 Ke4 Ne6 Rf1 Ke7 Ke5 Nc7 Rf6 Ne8 Re6 Kd7
Rg6 Nc7 Rg7 Kc6 Ke4 Nb5 Rf7 Nd6 Kd3 Nxf7 Ke3 Kc7) {0.00/50 2} 137. Rg2 (Rg2
Nh6 Rg3 Ng8 Rh3 Kg7 Rg3 Kf8) {+0.12/6 0} Nh6 (Nh6 Kf6 Ng8 Kg6 Ne7 Kg5 Ng8
Rf2 Ke7 Re2 Kd6 Re1 Ne7 Kf6 Nd5 Kf5 Ne7 Ke4 Nc6 Rd1 Ke6 Rg1 Ne5 Rg5 Nd7 Rg6
Nf6 Kd4 Kf5 Rg1 Nd7 Rf1 Ke6 Re1 Kd6 Ke3 Nc5 Kf3 Kd5 Rd1 Ke6 Ra1 Kd5 Kg4 Ne4
Kf4 Nc5 Rd1 Ke6 Kf3 Ke5 Kg4 Ne4 Rf1 Kd4 Kh5 Ng3 Kg5 Nxf1 Kh6 Kc5) {0.00/51
2} 138. Rg3 (Rg3 Ng8 Rg5 Nh6 Rg1 Ng8 Rg2 Nh6 Rg6 Ng8) {+0.10/6 1} Ng8 (Ng8
Rf3 Kg7 Rb3 Kf8 Kf5 Ne7 Kf4 Ng8 Rf3 Kg7 Re3 Kf7 Re5 Kf6 Rf5 Ke6 Rg5 Ne7 Re5
Kd6 Ke4 Nc6 Rd5 Ke6 Rd1 Ne5 Kf4 Nc6 Rg1 Ne7 Re1 Kd6 Ke4 Nc6 Rd1 Ke6 Rg1 Ne5
Rg8 Nd7 Re8 Kd6 Ra8 Nf6 Kf5 Nd7 Rg8 Kd5 Rg6 Nc5 Rg1 Nd3 Ra1 Nc5 Ra7 Ne4 Rd7
Nd6 Kf4 Kc6 Ke5 Kxd7 Kf4 Ke6 Kg4) {0.00/50 1} 139. Rg5 (Rg5 Nh6 Rg1 Ng8 Rg2
Nh6 Kf6 Ng8 Ke6) {+0.11/6 1} Nh6 (Nh6 Kd5 Kf7 Re5 Kg7 Kc4 Kf7 Kd3 Kf6 Ke4
Ng4 Rf5 Ke6 Rg5 Nf6 Kd3 Kd6 Kd4 Nd7 Rg6 Ke7 Kd5 Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8
Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Rg1 Ke6 Rg6 Kd5 Rb6 Nd6 Rb8 Ne4 Rb1 Nc3 Kf5 Nxb1
Kf4 Nc3) {0.00/44 2} 140. Kf6 (Kf6 Ng8 Kg6 Ne7 Kf6 Ng8 Ke6 Nh6 Rg1 Ng8 Rg2
Nh6 Rg6 Ng8) {+0.10/6 0} Ng8+ (Ng8 Ke6 Nh6 Kd5 Nf7 Rg2 Nh6 Rb2 Kf7 Rb7 Kg6
Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6 Ke7 Rg6
Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8 Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Ke4 Ke7 Rc7 Ke6 Rc6 Ke7
Kf4 Nd8 Rc8 Kd7 Ke4 Kxc8 Kd5 Kb7) {0.00/45 2} 141. Ke6 (Ke6 Nh6 Rg1 Ng8 Rc1
Nh6 Rc7 Ng8 Rf7 Ke8 Rf4 Nh6) {+0.09/7 0} Nh6 (Nh6 Kd5 Nf7 Rg2 Nh6 Rb2 Kf7
Rb7 Kg6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6
Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8 Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Ke4 Ke7 Rc7 Ke6
Rc6 Ke7 Kf4 Nd8 Rc8 Kd7 Ke4 Kxc8 Kd5 Kb7) {0.00/51 0} 142. Rg1 (Rg1 Ng8 Rg2
Nh6 Rd2 Ng8 Rd7 Nh6 Rh7 Ng8) {+0.10/5 0} Ng8 (Ng8 Rc1 Nh6 Rf1 Kg7 Rg1 Kf8
Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1
Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6 Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Nf6 Kf5 Nd5
Rc6 Ne3 Ke4 Ng4 Kf4 Nf6 Rxf6 Kxf6 Ke3 Kg5) {0.00/54 1} 143. Rg3 (Rg3 Nh6
Rg1 Ng8 Rh1 Kg7 Rg1 Kf8) {+0.12/6 1} Nh6 (Nh6 Rg1 Ng8 Rc1 Nh6 Rf1 Kg7 Rg1
Kf8 Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4
Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Re5 Kd6 Re1 Nd5 Ke4 Ne7 Ra1 Kd7 Ra6 Ke8 Ke5 Kf8 Rb6
Ng8 Kf5 Ke8 Rb8 Kf7 Rxg8 Kxg8 Kg6 Kf8 Kh5 Ke7) {0.00/54 3} 144. Rg1 (Rg1
Ng8 Rg2 Nh6 Rg6 Ng8) {+0.09/6 1} Ng8 (Ng8 Rc1 Nh6 Rf1 Kg7 Rg1 Kf8 Rc1 Kg7
Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Ke6 Kf4 Rb4 Kf3 Rb1
Kf4 Ra1 Nh6 Ra4 Kg5 Ke5 Nf7 Ke4 Nd6 Kd5 Nf7 Ra7 Kg6 Ke4 Nh6 Kf4 Kf6 Ra6 Kg7
Rxh6 Kxh6 Ke5 Kg6 Ke6 Kg7) {0.00/53 0} 145. Rg2 (Rg2 Nh6 Rg3 Ng8) {+0.10/6
0} Nh6 (Nh6 Rb2 Ng8 Ke5 Kf7 Kd6 Kg7 Rb7 Kf6 Rb6 Ne7 Kd7 Kf7 Rb1 Ng8 Kd6 Kg6
Rg1 Kf7 Rg4 Kf8 Rf4 Kg7 Rf3 Kg6 Ke5 Kg7 Kf5 Nh6 Kg5 Ng8 Rh3 Kf8 Kf5 Kf7 Rh7
Kf8 Ra7 Ne7 Ke4 Nc6 Ra1 Ke7 Kd5 Kd7 Re1 Ne7 Rxe7 Kxe7 Ke5 Kd7 Kf6 Kd6)
{0.00/50 2} 146. Rg5 (Rg5 Ng8 Rg1 Nh6 Kf6 Ng8 Ke5 Kf7 Rf1) {+0.08/6 1} Ng8
(Ng8 Rc5 Kg7 Rc7 Kg6 Ra7 Nh6 Ra3 Ng4 Rg3 Kg5 Rg2 Kf4 Ra2 Ke4 Ra4 Kf3 Kf5
Ne3 Kf6 Ng4 Ke6 Nh6 Rb4 Ng4 Kd5 Ne3 Ke5 Ng4 Kd4 Nh6 Rb1 Kf4 Ra1 Nf5 Kd5 Kf3
Ke5 Ne3 Ra3 Ke2 Kf4 Nf1 Rf3 Ke1 Rxf1 Kxf1 Kg3 Kg1 Kg4 Kf2) {0.00/49 2} 147.
Rg1 (Rg1 Nh6 Rg3 Ng8) {+0.11/6 0} Nh6 (Nh6 Ke5 Nf7 Kf6 Nh6 Kg6 Ng8 Rg5 Ne7
Kh7 Kf7 Ra5 Kf8 Ra3 Ke8 Ra8 Kf7 Ra2 Nd5 Ra6 Nf6 Kh6 Ng8 Kh5 Nf6 Kh4 Nd5 Kg5
Ne7 Rb6 Ke8 Rb7 Ng8 Ra7 Kf8 Kh5 Nf6 Kh6 Ng8 Kg5 Ke8 Kg6 Ne7 Rxe7 Kxe7 Kg7
Ke6) {0.00/43 1} 148. Kf6 (Kf6 Ng8 Kg6 Ne7 Kf6 Ng8 Ke6) {+0.08/6 1} Ng8+
(Ng8 Kg6 Ne7 Kg5 Ng8 Ra1 Kg7 Re1 Kf8 Kf4 Nf6 Rf1 Ng8 Rf3 Kg7 Re3 Kf7 Rd3
Nf6 Ke5 Ke7 Kf5 Ne8 Re3 Kd7 Kg6 Nc7 Re4 Kc6 Kf5 Nb5 Ke5 Kd7 Rf4 Nc7 Rg4 Ne6
Re4 Nd8 Rd4 Ke7 Rxd8 Kxd8 Kd6 Ke8 Kc5 Kf7 Kb4 Ke7) {0.00/47 2} 149. Kg6
(Kg6 Ne7 Kf6 Ng8 Kg6 Ne7 Kh7 Kf7 Rf1 Ke6 Re1 Kf6 Re2) {+0.08/7 0} Ne7+ (Ne7
Kg5 Ng8 Ra1 Kg7 Re1 Kf8 Kf4 Nf6 Rf1 Ng8 Rf3 Kg7 Re3 Kf7 Rd3 Nf6 Ke5 Ke7 Kf5
Ne8 Re3 Kd7 Rf3 Ng7 Kg6 Ne6 Rf6 Nc7 Rf1 Nd5 Kg5 Nc7 Re1 Ne8 Kg4 Nd6 Rd1 Ke6
Rxd6 Kxd6 Kh3 Ke5) {0.00/42 0} 150. Kf6 (Kf6 Ng8 Kg6 Ne7 Kh7 Kf7 Rf1 Ke6
Re1 Kf6 Re2) {+0.09/7 0} Ng8+ (Ng8 Kg6 Ne7 Kg5 Nd5 Rd1 Ne7 Rd7 Kf7 Rb7 Kf8
Kf6 Ng8 Kf5 Ne7 Ke5 Ng8 Kd6 Nh6 Rb6 Nf7 Ke6 Nh6 Rb1 Kg7 Rf1 Ng8 Re1 Kf8 Rh1
Kg7 Rh5 Kg6 Rf5 Nh6 Rf6 Kg5 Rxh6 Kxh6 Kf6 Kh7 Kf7 Kh6 Ke8 Kg6) {0.00/39 15}
151. Kg6 (Kg6 Ne7 Kf6 Ng8) {+0.06/7 1} Ne7+ (Ne7 Kg5 Nd5 Rd1 Ne7 Rd7 Kf7
Rb7 Kf8 Kf6 Ng8 Kf5 Ne7 Ke5 Ng8 Rd7 Nh6 Ra7 Ke8 Kf6 Ng8 Kf5 Kf8 Kg5 Ne7 Ra6
Kg7 Rf6 Ng8 Rf3 Nh6 Rg3 Ng8 Kh4 Kf7 Rxg8 Kxg8 Kh3 Kh7) {0.00/33 0} 152. Kf6
(Kf6 Ng8) {+0.05/5 0} Ng8+ (Ng8) {0.00/52 1 3-fold repetition} 1/2-1/2
================================================
FILE: files/misc/pgn.txt
================================================
Standard: Portable Game Notation Specification and Implementation Guide
Revised: 1994.03.12
Authors: Interested readers of the Internet newsgroup rec.games.chess
Coordinator: Steven J. Edwards (send comments to sje@world.std.com)
0: Preface
From the Tower of Babel story:
"If now, while they are one people, all speaking the same language, they have
started to do this, nothing will later stop them from doing whatever they
propose to do."
Genesis XI, v.6, _New American Bible_
1: Introduction
PGN is "Portable Game Notation", a standard designed for the representation of
chess game data using ASCII text files. PGN is structured for easy reading and
writing by human users and for easy parsing and generation by computer
programs. The intent of the definition and propagation of PGN is to facilitate
the sharing of public domain chess game data among chessplayers (both organic
and otherwise), publishers, and computer chess researchers throughout the
world.
PGN is not intended to be a general purpose standard that is suitable for every
possible use; no such standard could fill all conceivable requirements.
Instead, PGN is proposed as a universal portable representation for data
interchange. The idea is to allow the construction of a family of chess
applications that can quickly and easily process chess game data using PGN for
import and export among themselves.
2: Chess data representation
Computer usage among chessplayers has become quite common in recent years and a
variety of different programs, both commercial and public domain, are used to
generate, access, and propagate chess game data. Some of these programs are
rather impressive; most are now well behaved in that they correctly follow the
Laws of Chess and handle users' data with reasonable care. Unfortunately, many
programs have had serious problems with several aspects of the external
representation of chess game data. Sometimes these problems become more
visible when a user attempts to move significant quantities of data from one
program to another; if there has been no real effort to ensure portability of
data, then the chances for a successful transfer are small at best.
2.1: Data interchange incompatibility
The reasons for format incompatibility are easy to understand. In fact, most
of them are correlated with the same problems that have already been seen with
commercial software offerings for other domains such as word processing,
spreadsheets, fonts, and graphics. Sometimes a manufacturer deliberately
designs a data format using encryption or some other secret, proprietary
technique to "lock in" a customer. Sometimes a designer may produce a format
that can be deciphered without too much difficulty, but at the same time
publicly discourage third party software by claiming trade secret protection.
Another software producer may develop a non-proprietary system, but it may work
well only within the scope of a single program or application because it is not
easily expandable. Finally, some other software may work very well for many
purposes, but it uses symbols and language not easily understood by people or
computers available to those outside the country of its development.
2.2: Specification goals
A specification for a portable game notation must observe the lessons of
history and be able to handle probable needs of the future. The design
criteria for PGN were selected to meet these needs. These criteria include:
1) The details of the system must be publicly available and free of unnecessary
complexity. Ideally, if the documentation is not available for some reason,
typical chess software developers and users should be able to understand most
of the data without the need for third party assistance.
2) The details of the system must be non-proprietary so that users and software
developers are unrestricted by concerns about infringing on intellectual
property rights. The idea is to let chess programmers compete in a free market
where customers may choose software based on their real needs and not based on
artificial requirements created by a secret data format.
3) The system must work for a variety of programs. The format should be such
that it can be used by chess database programs, chess publishing programs,
chess server programs, and chessplaying programs without being unnecessarily
specific to any particular application class.
4) The system must be easily expandable and scalable. The expansion ability
must include handling data items that may not exist currently but could be
expected to emerge in the future. (Examples: new opening classifications and
new country names.) The system should be scalable in that it must not have any
arbitrary restrictions concerning the quantity of stored data. Also, planned
modes of expansion should either preserve earlier databases or at least allow
for their automatic conversion.
5) The system must be international. Chess software users are found in many
countries and the system should be free of difficulties caused by conventions
local to a given region.
6) Finally, the system should handle the same kinds and amounts of data that
are already handled by existing chess software and by print media.
2.3: A sample PGN game
Although its description may seem rather lengthy, PGN is actually fairly
simple. A sample PGN game follows; it has most of the important features
described in later sections of this document.
[Event "F/S Return Match"]
[Site "Belgrade, Serbia JUG"]
[Date "1992.11.04"]
[Round "29"]
[White "Fischer, Robert J."]
[Black "Spassky, Boris V."]
[Result "1/2-1/2"]
1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3
O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15.
Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21.
Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7
27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33.
f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5
40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2
3: Formats: import and export
There are two formats in the PGN specification. These are the "import" format
and the "export" format. These are the two different ways of formatting the
same PGN data according to its source. The details of the two formats are
described throughout the following sections of this document.
Other than formats, there is the additional topic of PGN presentation. While
both PGN import and export formats are designed to be readable by humans, there
is no recommendation that either of these be an ultimate mode of chess data
presentation. Rather, software developers are urged to consider all of the
various techniques at their disposal to enhance the display of chess data at
the presentation level (i.e., highest level) of their programs. This means
that the use of different fonts, character sizes, color, and other tools of
computer aided interaction and publishing should be explored to provide a high
quality presentation appropriate to the function of the particular program.
3.1: Import format allows for manually prepared data
The import format is rather flexible and is used to describe data that may have
been prepared by hand, much like a source file for a high level programming
language. A program that can read PGN data should be able to handle the
somewhat lax import format.
3.2: Export format used for program generated output
The export format is rather strict and is used to describe data that is usually
prepared under program control, something like a pretty printed source program
reformatted by a compiler.
3.2.1: Byte equivalence
For a given PGN data file, export format representations generated by different
PGN programs on the same computing system should be exactly equivalent, byte
for byte.
3.2.2: Archival storage and the newline character
Export format should also be used for archival storage. Here, "archival"
storage is defined as storage that may be accessed by a variety of computing
systems. The only extra requirement for archival storage is that the newline
character have a specific representation that is independent of its value for a
particular computing system's text file usage. The archival representation of
a newline is the ASCII control character LF (line feed, decimal value 10,
hexadecimal value 0x0a).
Sadly, there are some accidents of history that survive to this day that have
baroque representations for a newline: multicharacter sequences, end-of-line
record markers, start-of-line byte counts, fixed length records, and so forth.
It is well beyond the scope of the PGN project to reconcile all of these to the
unified world of ANSI C and the those enjoying the bliss of a single '\n'
convention. Some systems may just not be able to handle an archival PGN text
file with native text editors. In these cases, an indulgence of sorts is
granted to use the local newline convention in non-archival PGN files for those
text editors.
3.2.3: Speed of processing
Several parts of the export format deal with exact descriptions of line and
field justification that are absent from the import format details. The main
reason for these restrictions on the export format are to allow the
construction of simple data translation programs that can easily scan PGN data
without having to have a full chess engine or other complex parsing routines.
The idea is to encourage chess software authors to always allow for at least a
limited PGN reading capability. Even when a full chess engine parsing
capability is available, it is likely to be at least two orders of magnitude
slower than a simple text scanner.
3.2.4: Reduced export format
A PGN game represented using export format is said to be in "reduced export
format" if all of the following hold: 1) it has no commentary, 2) it has only
the standard seven tag roster identification information ("STR", see below), 3)
it has no recursive annotation variations ("RAV", see below), and 4) it has no
numeric annotation glyphs ("NAG", see below). Reduced export format is used
for bulk storage of unannotated games. It represents a minimum level of
standard conformance for a PGN exporting application.
4: Lexicographical issues
PGN data is composed of characters; non-overlapping contiguous sequences of
characters form lexical tokens.
4.1: Character codes
PGN data is represented using a subset of the eight bit ISO 8859/1 (Latin 1)
character set. ("ISO" is an acronym for the International Standards
Organization.) This set is also known as ECMA-94 and is similar to other ISO
Latin character sets. ISO 8859/1 includes the standard seven bit ASCII
character set for the 32 control character code values from zero to 31. The 95
printing character code values from 32 to 126 are also equivalent to seven bit
ASCII usage. (Code value 127, the ASCII DEL control character, is a graphic
character in ISO 8859/1; it is not used for PGN data representation.)
The 32 ISO 8859/1 code values from 128 to 159 are non-printing control
characters. They are not used for PGN data representation. The 32 code values
from 160 to 191 are mostly non-alphabetic printing characters and their use for
PGN data is discouraged as their graphic representation varies considerably
among other ISO Latin sets. Finally, the 64 code values from 192 to 255 are
mostly alphabetic printing characters with various diacritical marks; their use
is encouraged for those languages that require such characters. The graphic
representations of this last set of 64 characters is fairly constant for the
ISO Latin family.
Printing character codes outside of the seven bit ASCII range may only appear
in string data and in commentary. They are not permitted for use in symbol
construction.
Because some PGN users' environments may not support presentation of non-ASCII
characters, PGN game authors should refrain from using such characters in
critical commentary or string values in game data that may be referenced in
such environments. PGN software authors should have their programs handle such
environments by displaying a question mark ("?") for non-ASCII character codes.
This is an important point because there are many computing systems that can
display eight bit character data, but the display graphics may differ among
machines and operating systems from different manufacturers.
Only four of the ASCII control characters are permitted in PGN import format;
these are the horizontal and vertical tabs along with the linefeed and carriage
return codes.
The external representation of the newline character may differ among
platforms; this is an acceptable variation as long as the details of the
implementation are hidden from software implementors and users. When a choice
is practical, the Unix "newline is linefeed" convention is preferred.
4.2: Tab characters
Tab characters, both horizontal and vertical, are not permitted in the export
format. This is because the treatment of tab characters is highly dependent
upon the particular software in use on the host computing system. Also, tab
characters may not appear inside of string data.
4.3: Line lengths
PGN data are organized as simple text lines without any special bytes or
markers for secondary record structure imposed by specific operating systems.
Import format PGN text lines are limited to having a maximum of 255 characters
per line including the newline character. Lines with 80 or more printing
characters are strongly discouraged because of the difficulties experienced by
common text editors with long lines.
In some cases, very long tag values will require 80 or more columns, but these
are relatively rare. An example of this is the "FEN" tag pair; it may have a
long tag value, but this particular tag pair is only used to represent a game
that doesn't start from the usual initial position.
5: Commentary
Comment text may appear in PGN data. There are two kinds of comments. The
first kind is the "rest of line" comment; this comment type starts with a
semicolon character and continues to the end of the line. The second kind
starts with a left brace character and continues to the next right brace
character. Comments cannot appear inside any token.
Brace comments do not nest; a left brace character appearing in a brace comment
loses its special meaning and is ignored. A semicolon appearing inside of a
brace comment loses its special meaning and is ignored. Braces appearing
inside of a semicolon comments lose their special meaning and are ignored.
*** Export format representation of comments needs definition work.
6: Escape mechanism
There is a special escape mechanism for PGN data. This mechanism is triggered
by a percent sign character ("%") appearing in the first column of a line; the
data on the rest of the line is ignored by publicly available PGN scanning
software. This escape convention is intended for the private use of software
developers and researchers to embed non-PGN commands and data in PGN streams.
A percent sign appearing in any other place other than the first position in a
line does not trigger the escape mechanism.
7: Tokens
PGN character data is organized as tokens. A token is a contiguous sequence of
characters that represents a basic semantic unit. Tokens may be separated from
adjacent tokens by white space characters. (White space characters include
space, newline, and tab characters.) Some tokens are self delimiting and do
not require white space characters.
A string token is a sequence of zero or more printing characters delimited by a
pair of quote characters (ASCII decimal value 34, hexadecimal value 0x22). An
empty string is represented by two adjacent quotes. (Note: an apostrophe is
not a quote.) A quote inside a string is represented by the backslash
immediately followed by a quote. A backslash inside a string is represented by
two adjacent backslashes. Strings are commonly used as tag pair values (see
below). Non-printing characters like newline and tab are not permitted inside
of strings. A string token is terminated by its closing quote. Currently, a
string is limited to a maximum of 255 characters of data.
An integer token is a sequence of one or more decimal digit characters. It is
a special case of the more general "symbol" token class described below.
Integer tokens are used to help represent move number indications (see below).
An integer token is terminated just prior to the first non-symbol character
following the integer digit sequence.
A period character (".") is a token by itself. It is used for move number
indications (see below). It is self terminating.
An asterisk character ("*") is a token by itself. It is used as one of the
possible game termination markers (see below); it indicates an incomplete game
or a game with an unknown or otherwise unavailable result. It is self
terminating.
The left and right bracket characters ("[" and "]") are tokens. They are used
to delimit tag pairs (see below). Both are self terminating.
The left and right parenthesis characters ("(" and ")") are tokens. They are
used to delimit Recursive Annotation Variations (see below). Both are self
terminating.
The left and right angle bracket characters ("<" and ">") are tokens. They are
reserved for future expansion. Both are self terminating.
A Numeric Annotation Glyph ("NAG", see below) is a token; it is composed of a
dollar sign character ("$") immediately followed by one or more digit
characters. It is terminated just prior to the first non-digit character
following the digit sequence.
A symbol token starts with a letter or digit character and is immediately
followed by a sequence of zero or more symbol continuation characters. These
continuation characters are letter characters ("A-Za-z"), digit characters
("0-9"), the underscore ("_"), the plus sign ("+"), the octothorpe sign ("#"),
the equal sign ("="), the colon (":"), and the hyphen ("-"). Symbols are used
for a variety of purposes. All characters in a symbol are significant. A
symbol token is terminated just prior to the first non-symbol character
following the symbol character sequence. Currently, a symbol is limited to a
maximum of 255 characters in length.
8: Parsing games
A PGN database file is a sequential collection of zero or more PGN games. An
empty file is a valid, although somewhat uninformative, PGN database.
A PGN game is composed of two sections. The first is the tag pair section and
the second is the movetext section. The tag pair section provides information
that identifies the game by defining the values associated with a set of
standard parameters. The movetext section gives the usually enumerated and
possibly annotated moves of the game along with the concluding game termination
marker. The chess moves themselves are represented using SAN (Standard
Algebraic Notation), also described later in this document.
8.1: Tag pair section
The tag pair section is composed of a series of zero or more tag pairs.
A tag pair is composed of four consecutive tokens: a left bracket token, a
symbol token, a string token, and a right bracket token. The symbol token is
the tag name and the string token is the tag value associated with the tag
name. (There is a standard set of tag names and semantics described below.)
The same tag name should not appear more than once in a tag pair section.
A further restriction on tag names is that they are composed exclusively of
letters, digits, and the underscore character. This is done to facilitate
mapping of tag names into key and attribute names for use with general purpose
database programs.
For PGN import format, there may be zero or more white space characters between
any adjacent pair of tokens in a tag pair.
For PGN export format, there are no white space characters between the left
bracket and the tag name, there are no white space characters between the tag
value and the right bracket, and there is a single space character between the
tag name and the tag value.
Tag names, like all symbols, are case sensitive. All tag names used for
archival storage begin with an upper case letter.
PGN import format may have multiple tag pairs on the same line and may even
have a tag pair spanning more than a single line. Export format requires each
tag pair to appear left justified on a line by itself; a single empty line
follows the last tag pair.
Some tag values may be composed of a sequence of items. For example, a
consultation game may have more than one player for a given side. When this
occurs, the single character ":" (colon) appears between adjacent items.
Because of this use as an internal separator in strings, the colon should not
otherwise appear in a string.
The tag pair format is designed for expansion; initially only strings are
allowed as tag pair values. Tag value formats associated with the STR (Seven
Tag Roster, see below) will not change; they will always be string values.
However, there are long term plans to allow general list structures as tag
values for non-STR tag pairs. Use of these expanded tag values will likely be
restricted to special research programs. In all events, the top level
structure of a tag pair remains the same: left bracket, tag name, tag value,
and right bracket.
8.1.1: Seven Tag Roster
There is a set of tags defined for mandatory use for archival storage of PGN
data. This is the STR (Seven Tag Roster). The interpretation of these tags is
fixed as is the order in which they appear. Although the definition and use of
additional tag names and semantics is permitted and encouraged when needed, the
STR is the common ground that all programs should follow for public data
interchange.
For import format, the order of tag pairs is not important. For export format,
the STR tag pairs appear before any other tag pairs. (The STR tag pairs must
also appear in order; this order is described below). Also for export format,
any additional tag pairs appear in ASCII order by tag name.
The seven tag names of the STR are (in order):
1) Event (the name of the tournament or match event)
2) Site (the location of the event)
3) Date (the starting date of the game)
4) Round (the playing round ordinal of the game)
5) White (the player of the white pieces)
6) Black (the player of the black pieces)
7) Result (the result of the game)
A set of supplemental tag names is given later in this document.
For PGN export format, a single blank line appears after the last of the tag
pairs to conclude the tag pair section. This helps simple scanning programs to
quickly determine the end of the tag pair section and the beginning of the
movetext section.
8.1.1.1: The Event tag
The Event tag value should be reasonably descriptive. Abbreviations are to be
avoided unless absolutely necessary. A consistent event naming should be used
to help facilitate database scanning. If the name of the event is unknown, a
single question mark should appear as the tag value.
Examples:
[Event "FIDE World Championship"]
[Event "Moscow City Championship"]
[Event "ACM North American Computer Championship"]
[Event "Casual Game"]
8.1.1.2: The Site tag
The Site tag value should include city and region names along with a standard
name for the country. The use of the IOC (International Olympic Committee)
three letter names is suggested for those countries where such codes are
available. If the site of the event is unknown, a single question mark should
appear as the tag value. A comma may be used to separate a city from a region.
No comma is needed to separate a city or region from the IOC country code. A
later section of this document gives a list of three letter nation codes along
with a few additions for "locations" not covered by the IOC.
Examples:
[Site "New York City, NY USA"]
[Site "St. Petersburg RUS"]
[Site "Riga LAT"]
8.1.1.3: The Date tag
The Date tag value gives the starting date for the game. (Note: this is not
necessarily the same as the starting date for the event.) The date is given
with respect to the local time of the site given in the Event tag. The Date
tag value field always uses a standard ten character format: "YYYY.MM.DD". The
first four characters are digits that give the year, the next character is a
period, the next two characters are digits that give the month, the next
character is a period, and the final two characters are digits that give the
day of the month. If the any of the digit fields are not known, then question
marks are used in place of the digits.
Examples:
[Date "1992.08.31"]
[Date "1993.??.??"]
[Date "2001.01.01"]
8.1.1.4: The Round tag
The Round tag value gives the playing round for the game. In a match
competition, this value is the number of the game played. If the use of a
round number is inappropriate, then the field should be a single hyphen
character. If the round is unknown, a single question mark should appear as
the tag value.
Some organizers employ unusual round designations and have multipart playing
rounds and sometimes even have conditional rounds. In these cases, a multipart
round identifier can be made from a sequence of integer round numbers separated
by periods. The leftmost integer represents the most significant round and
succeeding integers represent round numbers in descending hierarchical order.
Examples:
[Round "1"]
[Round "3.1"]
[Round "4.1.2"]
8.1.1.5: The White tag
The White tag value is the name of the player or players of the white pieces.
The names are given as they would appear in a telephone directory. The family
or last name appears first. If a first name or first initial is available, it
is separated from the family name by a comma and a space. Finally, one or more
middle initials may appear. (Wherever a comma appears, the very next character
should be a space. Wherever an initial appears, the very next character should
be a period.) If the name is unknown, a single question mark should appear as
the tag value.
The intent is to allow meaningful ASCII sorting of the tag value that is
independent of regional name formation customs. If more than one person is
playing the white pieces, the names are listed in alphabetical order and are
separated by the colon character between adjacent entries. A player who is
also a computer program should have appropriate version information listed
after the name of the program.
The format used in the FIDE Rating Lists is appropriate for use for player name
tags.
Examples:
[White "Tal, Mikhail N."]
[White "van der Wiel, Johan"]
[White "Acme Pawngrabber v.3.2"]
[White "Fine, R."]
8.1.1.6: The Black tag
The Black tag value is the name of the player or players of the black pieces.
The names are given here as they are for the White tag value.
Examples:
[Black "Lasker, Emmanuel"]
[Black "Smyslov, Vasily V."]
[Black "Smith, John Q.:Woodpusher 2000"]
[Black "Morphy"]
8.1.1.7: The Result tag
The Result field value is the result of the game. It is always exactly the
same as the game termination marker that concludes the associated movetext. It
is always one of four possible values: "1-0" (White wins), "0-1" (Black wins),
"1/2-1/2" (drawn game), and "*" (game still in progress, game abandoned, or
result otherwise unknown). Note that the digit zero is used in both of the
first two cases; not the letter "O".
All possible examples:
[Result "0-1"]
[Result "1-0"]
[Result "1/2-1/2"]
[Result "*"]
8.2: Movetext section
The movetext section is composed of chess moves, move number indications,
optional annotations, and a single concluding game termination marker.
Because illegal moves are not real chess moves, they are not permitted in PGN
movetext. They may appear in commentary, however. One would hope that illegal
moves are relatively rare in games worthy of recording.
8.2.1: Movetext line justification
In PGN import format, tokens in the movetext do not require any specific line
justification.
In PGN export format, tokens in the movetext are placed left justified on
successive text lines each of which has less than 80 printing characters. As
many tokens as possible are placed on a line with the remainder appearing on
successive lines. A single space character appears between any two adjacent
symbol tokens on the same line in the movetext. As with the tag pair section,
a single empty line follows the last line of data to conclude the movetext
section.
Neither the first or the last character on an export format PGN line is a
space. (This may change in the case of commentary; this area is currently
under development.)
8.2.2: Movetext move number indications
A move number indication is composed of one or more adjacent digits (an integer
token) followed by zero or more periods. The integer portion of the indication
gives the move number of the immediately following white move (if present) and
also the immediately following black move (if present).
8.2.2.1: Import format move number indications
PGN import format does not require move number indications. It does not
prohibit superfluous move number indications anywhere in the movetext as long
as the move numbers are correct.
PGN import format move number indications may have zero or more period
characters following the digit sequence that gives the move number; one or more
white space characters may appear between the digit sequence and the period(s).
8.2.2.2: Export format move number indications
There are two export format move number indication formats, one for use
appearing immediately before a white move element and one for use appearing
immediately before a black move element. A white move number indication is
formed from the integer giving the fullmove number with a single period
character appended. A black move number indication is formed from the integer
giving the fullmove number with three period characters appended.
All white move elements have a preceding move number indication. A black move
element has a preceding move number indication only in two cases: first, if
there is intervening annotation or commentary between the black move and the
previous white move; and second, if there is no previous white move in the
special case where a game starts from a position where Black is the active
player.
There are no other cases where move number indications appear in PGN export
format.
8.2.3: Movetext SAN (Standard Algebraic Notation)
SAN (Standard Algebraic Notation) is a representation standard for chess moves
using the ASCII Latin alphabet.
Examples of SAN recorded games are found throughout most modern chess
publications. SAN as presented in this document uses English language single
character abbreviations for chess pieces, although this is easily changed in
the source. English is chosen over other languages because it appears to be
the most widely recognized.
An alternative to SAN is FAN (Figurine Algebraic Notation). FAN uses miniature
piece icons instead of single letter piece abbreviations. The two notations
are otherwise identical.
8.2.3.1: Square identification
SAN identifies each of the sixty four squares on the chessboard with a unique
two character name. The first character of a square identifier is the file of
the square; a file is a column of eight squares designated by a single lower
case letter from "a" (leftmost or queenside) up to and including "h" (rightmost
or kingside). The second character of a square identifier is the rank of the
square; a rank is a row of eight squares designated by a single digit from "1"
(bottom side [White's first rank]) up to and including "8" (top side [Black's
first rank]). The initial squares of some pieces are: white queen rook at a1,
white king at e1, black queen knight pawn at b7, and black king rook at h8.
8.2.3.2: Piece identification
SAN identifies each piece by a single upper case letter. The standard English
values: pawn = "P", knight = "N", bishop = "B", rook = "R", queen = "Q", and
king = "K".
The letter code for a pawn is not used for SAN moves in PGN export format
movetext. However, some PGN import software disambiguation code may allow for
the appearance of pawn letter codes. Also, pawn and other piece letter codes
are needed for use in some tag pair and annotation constructs.
It is admittedly a bit chauvinistic to select English piece letters over those
from other languages. There is a slight justification in that English is a de
facto universal second language among most chessplayers and program users. It
is probably the best that can be done for now. A later section of this
document gives alternative piece letters, but these should be used only for
local presentation software and not for archival storage or for dynamic
interchange among programs.
8.2.3.3: Basic SAN move construction
A basic SAN move is given by listing the moving piece letter (omitted for
pawns) followed by the destination square. Capture moves are denoted by the
lower case letter "x" immediately prior to the destination square; pawn
captures include the file letter of the originating square of the capturing
pawn immediately prior to the "x" character.
SAN kingside castling is indicated by the sequence "O-O"; queenside castling is
indicated by the sequence "O-O-O". Note that the upper case letter "O" is
used, not the digit zero. The use of a zero character is not only incompatible
with traditional text practices, but it can also confuse parsing algorithms
which also have to understand about move numbers and game termination markers.
Also note that the use of the letter "O" is consistent with the practice of
having all chess move symbols start with a letter; also, it follows the
convention that all non-pwn move symbols start with an upper case letter.
En passant captures do not have any special notation; they are formed as if the
captured pawn were on the capturing pawn's destination square. Pawn promotions
are denoted by the equal sign "=" immediately following the destination square
with a promoted piece letter (indicating one of knight, bishop, rook, or queen)
immediately following the equal sign. As above, the piece letter is in upper
case.
8.2.3.4: Disambiguation
In the case of ambiguities (multiple pieces of the same type moving to the same
square), the first appropriate disambiguating step of the three following steps
is taken:
First, if the moving pieces can be distinguished by their originating files,
the originating file letter of the moving piece is inserted immediately after
the moving piece letter.
Second (when the first step fails), if the moving pieces can be distinguished
by their originating ranks, the originating rank digit of the moving piece is
inserted immediately after the moving piece letter.
Third (when both the first and the second steps fail), the two character square
coordinate of the originating square of the moving piece is inserted
immediately after the moving piece letter.
Note that the above disambiguation is needed only to distinguish among moves of
the same piece type to the same square; it is not used to distinguish among
attacks of the same piece type to the same square. An example of this would be
a position with two white knights, one on square c3 and one on square g1 and a
vacant square e2 with White to move. Both knights attack square e2, and if
both could legally move there, then a file disambiguation is needed; the
(nonchecking) knight moves would be "Nce2" and "Nge2". However, if the white
king were at square e1 and a black bishop were at square b4 with a vacant
square d2 (thus an absolute pin of the white knight at square c3), then only
one white knight (the one at square g1) could move to square e2: "Ne2".
8.2.3.5: Check and checkmate indication characters
If the move is a checking move, the plus sign "+" is appended as a suffix to
the basic SAN move notation; if the move is a checkmating move, the octothorpe
sign "#" is appended instead.
Neither the appearance nor the absence of either a check or checkmating
indicator is used for disambiguation purposes. This means that if two (or
more) pieces of the same type can move to the same square the differences in
checking status of the moves does not allieviate the need for the standard rank
and file disabiguation described above. (Note that a difference in checking
status for the above may occur only in the case of a discovered check.)
Neither the checking or checkmating indicators are considered annotation as
they do not communicate subjective information. Therefore, they are
qualitatively different from move suffix annotations like "!" and "?".
Subjective move annotations are handled using Numeric Annotation Glyphs as
described in a later section of this document.
There are no special markings used for double checks or discovered checks.
There are no special markings used for drawing moves.
8.2.3.6: SAN move length
SAN moves can be as short as two characters (e.g., "d4"), or as long as seven
characters (e.g., "Qa6xb7#", "fxg1=Q+"). The average SAN move length seen in
realistic games is probably just fractionally longer than three characters. If
the SAN rules seem complicated, be assured that the earlier notation systems of
LEN (Long English Notation) and EDN (English Descriptive Notation) are much
more complex, and that LAN (Long Algebraic Notation, the predecessor of SAN) is
unnecessarily bulky.
8.2.3.7: Import and export SAN
PGN export format always uses the above canonical SAN to represent moves in the
movetext section of a PGN game. Import format is somewhat more relaxed and it
makes allowances for moves that do not conform exactly to the canonical format.
However, these allowances may differ among different PGN reader programs. Only
data appearing in export format is in all cases guaranteed to be importable
into all PGN readers.
There are a number of suggested guidelines for use with implementing PGN reader
software for permitting non-canonical SAN move representation. The idea is to
have a PGN reader apply various transformations to attempt to discover the move
that is represented by non-canonical input. Some suggested transformations
include: letter case remapping, capture indicator insertion, check indicator
insertion, and checkmate indicator insertion.
8.2.3.8: SAN move suffix annotations
Import format PGN allows for the use of traditional suffix annotations for
moves. There are exactly six such annotations available: "!", "?", "!!", "!?",
"?!", and "??". At most one such suffix annotation may appear per move, and if
present, it is always the last part of the move symbol.
When exported, a move suffix annotation is translated into the corresponding
Numeric Annotation Glyph as described in a later section of this document. For
example, if the single move symbol "Qxa8?" appears in an import format PGN
movetext, it would be replaced with the two adjacent symbols "Qxa8 $2".
8.2.4: Movetext NAG (Numeric Annotation Glyph)
An NAG (Numeric Annotation Glyph) is a movetext element that is used to
indicate a simple annotation in a language independent manner. An NAG is
formed from a dollar sign ("$") with a non-negative decimal integer suffix.
The non-negative integer must be from zero to 255 in value.
8.2.5: Movetext RAV (Recursive Annotation Variation)
An RAV (Recursive Annotation Variation) is a sequence of movetext containing
one or more moves enclosed in parentheses. An RAV is used to represent an
alternative variation. The alternate move sequence given by an RAV is one that
may be legally played by first unplaying the move that appears immediately
prior to the RAV. Because the RAV is a recursive construct, it may be nested.
*** The specification for import/export representation of RAV elements needs
further development.
8.2.6: Game Termination Markers
Each movetext section has exactly one game termination marker; the marker
always occurs as the last element in the movetext. The game termination marker
is a symbol that is one of the following four values: "1-0" (White wins), "0-1"
(Black wins), "1/2-1/2" (drawn game), and "*" (game in progress, result
unknown, or game abandoned). Note that the digit zero is used in the above;
not the upper case letter "O". The game termination marker appearing in the
movetext of a game must match the value of the game's Result tag pair. (While
the marker appears as a string in the Result tag, it appears as a symbol
without quotes in the movetext.)
9: Supplemental tag names
The following tag names and their associated semantics are recommended for use
for information not contained in the Seven Tag Roster.
9.1: Player related information
Note that if there is more than one player field in an instance of a player
(White or Black) tag, then there will be corresponding multiple fields in any
of the following tags. For example, if the White tag has the three field value
"Jones:Smith:Zacharias" (a consultation game), then the WhiteTitle tag could
have a value of "IM:-:GM" if Jones was an International Master, Smith was
untitled, and Zacharias was a Grandmaster.
9.1.1: Tags: WhiteTitle, BlackTitle
These use string values such as "FM", "IM", and "GM"; these tags are used only
for the standard abbreviations for FIDE titles. A value of "-" is used for an
untitled player.
9.1.2: Tags: WhiteElo, BlackElo
These tags use integer values; these are used for FIDE Elo ratings. A value of
"-" is used for an unrated player.
9.1.3: Tags: WhiteUSCF, BlackUSCF
These tags use integer values; these are used for USCF (United States Chess
Federation) ratings. Similar tag names can be constructed for other rating
agencies.
9.1.4: Tags: WhiteNA, BlackNA
These tags use string values; these are the e-mail or network addresses of the
players. A value of "-" is used for a player without an electronic address.
9.1.5: Tags: WhiteType, BlackType
These tags use string values; these describe the player types. The value
"human" should be used for a person while the value "program" should be used
for algorithmic (computer) players.
9.2: Event related information
The following tags are used for providing additional information about the
event.
9.2.1: Tag: EventDate
This uses a date value, similar to the Date tag field, that gives the starting
date of the Event.
9.2.2: Tag: EventSponsor
This uses a string value giving the name of the sponsor of the event.
9.2.3: Tag: Section
This uses a string; this is used for the playing section of a tournament (e.g.,
"Open" or "Reserve").
9.2.4: Tag: Stage
This uses a string; this is used for the stage of a multistage event (e.g.,
"Preliminary" or "Semifinal").
9.2.5: Tag: Board
This uses an integer; this identifies the board number in a team event and also
in a simultaneous exhibition.
9.3: Opening information (locale specific)
The following tag pairs are used for traditional opening names. The associated
tag values will vary according to the local language in use.
9.3.1: Tag: Opening
This uses a string; this is used for the traditional opening name. This will
vary by locale. This tag pair is associated with the use of the EPD opcode
"v0" described in a later section of this document.
9.3.2: Tag: Variation
This uses a string; this is used to further refine the Opening tag. This will
vary by locale. This tag pair is associated with the use of the EPD opcode
"v1" described in a later section of this document.
9.3.3: Tag: SubVariation
This uses a string; this is used to further refine the Variation tag. This
will vary by locale. This tag pair is associated with the use of the EPD
opcode "v2" described in a later section of this document.
9.4: Opening information (third party vendors)
The following tag pairs are used for representing opening identification
according to various third party vendors and organizations. References to
these organizations does not imply any endorsement of them or any endorsement
by them.
9.4.1: Tag: ECO
This uses a string of either the form "XDD" or the form "XDD/DD" where the "X"
is a letter from "A" to "E" and the "D" positions are digits; this is used for
an opening designation from the five volume _Encyclopedia of Chess Openings_.
This tag pair is associated with the use of the EPD opcode "eco" described in a
later section of this document.
9.4.2: Tag: NIC
This uses a string; this is used for an opening designation from the _New in
Chess_ database. This tag pair is associated with the use of the EPD opcode
"nic" described in a later section of this document.
9.5: Time and date related information
The following tags assist with further refinement of the time and data
information associated with a game.
9.5.1: Tag: Time
This uses a time-of-day value in the form "HH:MM:SS"; similar to the Date tag
except that it denotes the local clock time (hours, minutes, and seconds) of
the start of the game. Note that colons, not periods, are used for field
separators for the Time tag value. The value is taken from the local time
corresponding to the location given in the Site tag pair.
9.5.2: Tag: UTCTime
This tag is similar to the Time tag except that the time is given according to
the Universal Coordinated Time standard.
9.5.3: Tag:; UTCDate
This tag is similar to the Date tag except that the date is given according to
the Universal Coordinated Time standard.
9.6: Time control
The follwing tag is used to help describe the time control used with the game.
9.6.1: Tag: TimeControl
This uses a list of one or more time control fields. Each field contains a
descriptor for each time control period; if more than one descriptor is present
then they are separated by the colon character (":"). The descriptors appear
in the order in which they are used in the game. The last field appearing is
considered to be implicitly repeated for further control periods as needed.
There are six kinds of TimeControl fields.
The first kind is a single question mark ("?") which means that the time
control mode is unknown. When used, it is usually the only descriptor present.
The second kind is a single hyphen ("-") which means that there was no time
control mode in use. When used, it is usually the only descriptor present.
The third Time control field kind is formed as two positive integers separated
by a solidus ("/") character. The first integer is the number of moves in the
period and the second is the number of seconds in the period. Thus, a time
control period of 40 moves in 2 1/2 hours would be represented as "40/9000".
The fourth TimeControl field kind is used for a "sudden death" control period.
It should only be used for the last descriptor in a TimeControl tag value. It
is sometimes the only descriptor present. The format consists of a single
integer that gives the number of seconds in the period. Thus, a blitz game
would be represented with a TimeControl tag value of "300".
The fifth TimeControl field kind is used for an "incremental" control period.
It should only be used for the last descriptor in a TimeControl tag value and
is usually the only descriptor in the value. The format consists of two
positive integers separated by a plus sign ("+") character. The first integer
gives the minimum number of seconds allocated for the period and the second
integer gives the number of extra seconds added after each move is made. So,
an incremental time control of 90 minutes plus one extra minute per move would
be given by "4500+60" in the TimeControl tag value.
The sixth TimeControl field kind is used for a "sandclock" or "hourglass"
control period. It should only be used for the last descriptor in a
TimeControl tag value and is usually the only descriptor in the value. The
format consists of an asterisk ("*") immediately followed by a positive
integer. The integer gives the total number of seconds in the sandclock
period. The time control is implemented as if a sandclock were set at the
start of the period with an equal amount of sand in each of the two chambers
and the players invert the sandclock after each move with a time forfeit
indicated by an empty upper chamber. Electronic implementation of a physical
sandclock may be used. An example sandclock specification for a common three
minute egg timer sandclock would have a tag value of "*180".
Additional TimeControl field kinds will be defined as necessary.
9.7: Alternative starting positions
There are two tags defined for assistance with describing games that did not
start from the usual initial array.
9.7.1: Tag: SetUp
This tag takes an integer that denotes the "set-up" status of the game. A
value of "0" indicates that the game has started from the usual initial array.
A value of "1" indicates that the game started from a set-up position; this
position is given in the "FEN" tag pair. This tag must appear for a game
starting with a set-up position. If it appears with a tag value of "1", a FEN
tag pair must also appear.
9.7.2: Tag: FEN
This tag uses a string that gives the Forsyth-Edwards Notation for the starting
position used in the game. FEN is described in a later section of this
document. If a SetUp tag appears with a tag value of "1", the FEN tag pair is
also required.
9.8: Game conclusion
There is a single tag that discusses the conclusion of the game.
9.8.1: Tag: Termination
This takes a string that describes the reason for the conclusion of the game.
While the Result tag gives the result of the game, it does not provide any
extra information and so the Termination tag is defined for this purpose.
Strings that may appear as Termination tag values:
* "abandoned": abandoned game.
* "adjudication": result due to third party adjudication process.
* "death": losing player called to greater things, one hopes.
* "emergency": game concluded due to unforeseen circumstances.
* "normal": game terminated in a normal fashion.
* "rules infraction": administrative forfeit due to losing player's failure to
observe either the Laws of Chess or the event regulations.
* "time forfeit": loss due to losing player's failure to meet time control
requirements.
* "unterminated": game not terminated.
9.9: Miscellaneous
These are tags that can be briefly described and that doon't fit well inother
sections.
9.9.1: Tag: Annotator
This tag uses a name or names in the format of the player name tags; this
identifies the annotator or annotators of the game.
9.9.2: Tag: Mode
This uses a string that gives the playing mode of the game. Examples: "OTB"
(over the board), "PM" (paper mail), "EM" (electronic mail), "ICS" (Internet
Chess Server), and "TC" (general telecommunication).
9.9.3: Tag: PlyCount
This tag takes a single integer that gives the number of ply (moves) in the
game.
10: Numeric Annotation Glyphs
NAG zero is used for a null annotation; it is provided for the convenience of
software designers as a placeholder value and should probably not be used in
external PGN data.
NAGs with values from 1 to 9 annotate the move just played.
NAGs with values from 10 to 135 modify the current position.
NAGs with values from 136 to 139 describe time pressure.
Other NAG values are reserved for future definition.
Note: the number assignments listed below should be considered preliminary in
nature; they are likely to be changed as a result of reviewer feedback.
NAG Interpretation
--- --------------
0 null annotation
1 good move (traditional "!")
2 poor move (traditional "?")
3 very good move (traditional "!!")
4 very poor move (traditional "??")
5 speculative move (traditional "!?")
6 questionable move (traditional "?!")
7 forced move (all others lose quickly)
8 singular move (no reasonable alternatives)
9 worst move
10 drawish position
11 equal chances, quiet position
12 equal chances, active position
13 unclear position
14 White has a slight advantage
15 Black has a slight advantage
16 White has a moderate advantage
17 Black has a moderate advantage
18 White has a decisive advantage
19 Black has a decisive advantage
20 White has a crushing advantage (Black should resign)
21 Black has a crushing advantage (White should resign)
22 White is in zugzwang
23 Black is in zugzwang
24 White has a slight space advantage
25 Black has a slight space advantage
26 White has a moderate space advantage
27 Black has a moderate space advantage
28 White has a decisive space advantage
29 Black has a decisive space advantage
30 White has a slight time (development) advantage
31 Black has a slight time (development) advantage
32 White has a moderate time (development) advantage
33 Black has a moderate time (development) advantage
34 White has a decisive time (development) advantage
35 Black has a decisive time (development) advantage
36 White has the initiative
37 Black has the initiative
38 White has a lasting initiative
39 Black has a lasting initiative
40 White has the attack
41 Black has the attack
42 White has insufficient compensation for material deficit
43 Black has insufficient compensation for material deficit
44 White has sufficient compensation for material deficit
45 Black has sufficient compensation for material deficit
46 White has more than adequate compensation for material deficit
47 Black has more than adequate compensation for material deficit
48 White has a slight center control advantage
49 Black has a slight center control advantage
50 White has a moderate center control advantage
51 Black has a moderate center control advantage
52 White has a decisive center control advantage
53 Black has a decisive center control advantage
54 White has a slight kingside control advantage
55 Black has a slight kingside control advantage
56 White has a moderate kingside control advantage
57 Black has a moderate kingside control advantage
58 White has a decisive kingside control advantage
59 Black has a decisive kingside control advantage
60 White has a slight queenside control advantage
61 Black has a slight queenside control advantage
62 White has a moderate queenside control advantage
63 Black has a moderate queenside control advantage
64 White has a decisive queenside control advantage
65 Black has a decisive queenside control advantage
66 White has a vulnerable first rank
67 Black has a vulnerable first rank
68 White has a well protected first rank
69 Black has a well protected first rank
70 White has a poorly protected king
71 Black has a poorly protected king
72 White has a well protected king
73 Black has a well protected king
74 White has a poorly placed king
75 Black has a poorly placed king
76 White has a well placed king
77 Black has a well placed king
78 White has a very weak pawn structure
79 Black has a very weak pawn structure
80 White has a moderately weak pawn structure
81 Black has a moderately weak pawn structure
82 White has a moderately strong pawn structure
83 Black has a moderately strong pawn structure
84 White has a very strong pawn structure
85 Black has a very strong pawn structure
86 White has poor knight placement
87 Black has poor knight placement
88 White has good knight placement
89 Black has good knight placement
90 White has poor bishop placement
91 Black has poor bishop placement
92 White has good bishop placement
93 Black has good bishop placement
84 White has poor rook placement
85 Black has poor rook placement
86 White has good rook placement
87 Black has good rook placement
98 White has poor queen placement
99 Black has poor queen placement
100 White has good queen placement
101 Black has good queen placement
102 White has poor piece coordination
103 Black has poor piece coordination
104 White has good piece coordination
105 Black has good piece coordination
106 White has played the opening very poorly
107 Black has played the opening very poorly
108 White has played the opening poorly
109 Black has played the opening poorly
110 White has played the opening well
111 Black has played the opening well
112 White has played the opening very well
113 Black has played the opening very well
114 White has played the middlegame very poorly
115 Black has played the middlegame very poorly
116 White has played the middlegame poorly
117 Black has played the middlegame poorly
118 White has played the middlegame well
119 Black has played the middlegame well
120 White has played the middlegame very well
121 Black has played the middlegame very well
122 White has played the ending very poorly
123 Black has played the ending very poorly
124 White has played the ending poorly
125 Black has played the ending poorly
126 White has played the ending well
127 Black has played the ending well
128 White has played the ending very well
129 Black has played the ending very well
130 White has slight counterplay
131 Black has slight counterplay
132 White has moderate counterplay
133 Black has moderate counterplay
134 White has decisive counterplay
135 Black has decisive counterplay
136 White has moderate time control pressure
137 Black has moderate time control pressure
138 White has severe time control pressure
139 Black has severe time control pressure
11: File names and directories
File names chosen for PGN data should be both informative and portable. The
directory names and arrangements should also be chosen for the same reasons and
also for ease of navigation.
Some of suggested file and directory names may be difficult or impossible to
represent on certain computing systems. Use of appropriate conversion customs
is encouraged.
11.1: File name suffix for PGN data
The use of the file suffix ".pgn" is encouraged for ASCII text files containing
PGN data.
11.2: File name formation for PGN data for a specific player
PGN games for a specific player should have a file name consisting of the
player's last name followed by the ".pgn" suffix.
11.3: File name formation for PGN data for a specific event
PGN games for a specific event should have a file name consisting of the
event's name followed by the ".pgn" suffix.
11.4: File name formation for PGN data for chronologically ordered games
PGN data files used for chronologically ordered (oldest first) archives use
date information as file name root strings. A file containing all the PGN
games for a given year would have an eight character name in the format
"YYYY.pgn". A file containing PGN data for a given month would have a ten
character name in the format "YYYYMM.pgn". Finally, a file for PGN games for a
single day would have a twelve character name in the format "YYYYMMDD.pgn".
Large files are split into smaller files as needed.
As game files are commonly arranged by chronological order, games with missing
or incomplete Date tag pair data are to be avoided. Any question mark
characters in a Date tag value will be treated as zero digits for collation
within a file and also for file naming.
Large quantities of PGN data arranged by chronological order should be
organized into hierarchical directories. A directory containing all PGN data
for a given year would have a four character name in the format "YYYY";
directories containing PGN files for a given month would have a six character
name in the format "YYYYMM".
11.5: Suggested directory tree organization
A suggested directory arrangement for ftp sites and CD-ROM distributions:
* PGN: master directory of the PGN subtree (pub/chess/Game-Databases/PGN)
* PGN/Events: directory of PGN files, each for a specific event
* PGN/Events/News: news and status of the event collection
* PGN/Events/ReadMe: brief description of the local directory contents
* PGN/MGR: directory of the Master Games Repository subtree
* PGN/MGR/News: news and status of the entire PGN/MGR subtree
* PGN/MGR/ReadMe: brief description of the local directory contents
* PGN/MGR/YYYY: directory of games or subtrees for the year YYYY
* PGN/MGR/YYYY/ReadMe: description of local directory for year YYYY
* PGN/MGR/YYYY/News: news and status for year YYYY data
* PGN/News: news and status of the entire PGN subtree
* PGN/Players: directory of PGN files, each for a specific player
* PGN/Players/News: news and status of the player collection
* PGN/Players/ReadMe: brief description of the local directory contents
* PGN/ReadMe: brief description of the local directory contents
* PGN/Standard: the PGN standard (this document)
* PGN/Tools: software utilities that access PGN data
12: PGN collating sequence
There is a standard sorting order for PGN games within a file. This collation
is based on eight keys; these are the seven tag values of the STR and also the
movetext itself.
The first (most important, primary key) is the Date tag. Earlier dated games
appear prior to games played at a later date. This field is sorted by
ascending numeric value first with the year, then the month, and finally the
day of the month. Query characters used for unknown date digit values will be
treated as zero digit characters for ordering comparison.
The second key is the Event tag. This is sorted in ascending ASCII order.
The third key is the Site tag. This is sorted in ascending ASCII order.
The fourth key is the Round tag. This is sorted in ascending numeric order
based on the value of the integer used to denote the playing round. A query or
hyphen used for the round is ordered before any integer value. A query
character is ordered before a hyphen character.
The fifth key is the White tag. This is sorted in ascending ASCII order.
The sixth key is the Black tag. This is sorted in ascending ASCII order.
The seventh key is the Result tag. This is sorted in ascending ASCII order.
The eighth key is the movetext itself. This is sorted in ascending ASCII order
with the entire text including spaces and newline characters.
13: PGN software
This section describes some PGN software that is either currently available or
expected to be available in the near future. The entries are presented in
rough chronological order of their being made known to the PGN standard
coordinator. Authors of PGN capable software are encouraged to contact the
coordinator (e-mail address listed near the start of this document) so that the
information may be included here in this section.
In addition to the PGN standard, there are two more chess standards of interest
to the chess software community. These are the FEN standard (Forsyth-Edwards
Notation) for position notation and the EPD standard (Extended Position
Description) for comprehensive position description for automated interprogram
processing. These are described in a later section of this document.
Some PGN software is freeware and can be gotten from ftp sites and other
sources. Other PGN software is payware and appears as part of commercial
chessplaying programs and chess database managers. Those who are interested in
the propagation of the PGN standard are encouraged to support manufacturers of
chess software that use the standard. If a particular vendor does not offer
PGN compatibility, it is likely that a few letters to them along with a copy of
this specification may help them decide to include PGN support in their next
release.
The staff at the University of Oklahoma at Norman (USA) have graciously
provided an ftp site (chess.uoknor.edu) for the storage of chess related data
and programs. Because file names change over time, those accessing the site
are encouraged to first retrieve the file "pub/chess/ls-lR.gz" for a current
listing. A scan of this listin
gitextract_lqka34fb/
├── LICENSE.md
├── README.md
└── files/
├── .editorconfig
├── .gitignore
├── misc/
│ ├── chess960.txt
│ ├── escape_and_missing_quotes.pgn
│ ├── nibbler_menu_translations_template.json
│ ├── pathological.pgn
│ ├── pgn.txt
│ ├── scraps.js
│ ├── state_logic.txt
│ └── uci.txt
├── res/
│ └── linux/
│ └── nibbler.desktop
├── scripts/
│ ├── builder.py
│ ├── install.sh
│ └── install_mac.sh
└── src/
├── main.js
├── modules/
│ ├── alert_main.js
│ ├── background.js
│ ├── config_io.js
│ ├── custom_uci.js
│ ├── debork_json.js
│ ├── empty.js
│ ├── engineconfig_io.js
│ ├── images.js
│ ├── messages.js
│ ├── running_as_electron.js
│ ├── stringify.js
│ ├── translate.js
│ └── translations.js
├── nibbler.css
├── nibbler.html
├── package.json
└── renderer/
├── 10_globals.js
├── 20_utils.js
├── 30_point.js
├── 31_sliders.js
├── 40_position.js
├── 41_fen.js
├── 42_perft.js
├── 43_chess960.js
├── 50_table.js
├── 51_node.js
├── 52_sorted_moves.js
├── 55_winrate_graph.js
├── 60_pgn_utils.js
├── 61_pgn_parse.js
├── 63_polyglot.js
├── 65_loaders.js
├── 71_tree_handler.js
├── 72_tree_draw.js
├── 75_looker.js
├── 80_info.js
├── 81_arrows.js
├── 82_infobox.js
├── 83_statusbox.js
├── 90_engine.js
├── 95_hub.js
├── 97_drag.js
└── 99_start.js
SYMBOL INDEX (122 symbols across 29 files)
FILE: files/misc/scraps.js
function NewPGNFileLoader (line 3) | function NewPGNFileLoader(filename, callback) {
function NewPGNPreParser (line 60) | function NewPGNPreParser(buf, callback) { // Cannot fail unless aborted.
function NewLineSplitter (line 184) | function NewLineSplitter(buf, callback) {
function split_buffer_alternative (line 266) | function split_buffer_alternative(buf) {
FILE: files/src/main.js
function startup (line 79) | function startup() {
function menu_build (line 335) | function menu_build() {
function language_choices_submenu (line 4734) | function language_choices_submenu() {
function get_submenu_items (line 4756) | function get_submenu_items(menupath) {
function set_checks (line 4778) | function set_checks(...menupath) {
function set_one_check (line 4797) | function set_one_check(state, ...menupath) {
FILE: files/src/modules/background.js
function background (line 3) | function background(light, dark, square_size) {
FILE: files/src/modules/config_io.js
function Config (line 18) | function Config() {} // This exists solely to make instanceof work.
function fix (line 158) | function fix(cfg) {
FILE: files/src/modules/debork_json.js
function replace_all (line 3) | function replace_all(s, search, replace) {
function debork_json (line 10) | function debork_json(s) {
FILE: files/src/modules/engineconfig_io.js
function EngineConfig (line 18) | function EngineConfig() {} // This exists solely to make instanceof work.
function fix (line 23) | function fix(cfg) {
FILE: files/src/modules/translations.js
function checker (line 3714) | function checker() {
FILE: files/src/renderer/20_utils.js
function XY (line 7) | function XY(s) { // e.g. "b7" --> [1, 1]
function S (line 20) | function S(x, y) { // e.g. (1, 1) --> "b7"
function InfoVal (line 29) | function InfoVal(s, key) {
function InfoValMany (line 54) | function InfoValMany(s, keys) {
function InfoPV (line 83) | function InfoPV(s) {
function C960_PV_Converter (line 127) | function C960_PV_Converter(pv, board) {
function InfoWDL (line 168) | function InfoWDL(s) {
function CompareArrays (line 200) | function CompareArrays(a, b) {
function ArrayStartsWith (line 219) | function ArrayStartsWith(a, b) { // where b is itself an array
function OppositeColour (line 238) | function OppositeColour(s) {
function ReplaceAll (line 244) | function ReplaceAll(s, search, replace) {
function SafeStringHTML (line 249) | function SafeStringHTML(s) {
function UnsafeStringHTML (line 261) | function UnsafeStringHTML(s) {
function SafeStringPGN (line 273) | function SafeStringPGN(s) {
function UnsafeStringPGN (line 282) | function UnsafeStringPGN(s) {
function Log (line 291) | function Log(s) {
function LogBoth (line 342) | function LogBoth(s) {
function UniqueFilepath (line 347) | function UniqueFilepath(filepath) {
function New2DArray (line 384) | function New2DArray(width, height, defval) {
function CanvasCoords (line 398) | function CanvasCoords(x, y) {
function EventPathString (line 427) | function EventPathString(event, prefix) {
function EventPathN (line 451) | function EventPathN(event, prefix) {
function SwapElements (line 470) | function SwapElements(obj1, obj2) {
function NString (line 481) | function NString(n) {
function DateString (line 518) | function DateString(dt) {
function QfromPawns (line 530) | function QfromPawns(pawns) {
function QfromWDL (line 547) | function QfromWDL(wdl) {
function Value (line 562) | function Value(q) { // Rescale Q to 0..1 range.
function SmoothStep (line 575) | function SmoothStep(x) {
function Sign (line 581) | function Sign(n) {
function CommaNum (line 587) | function CommaNum(n) {
function DurationString (line 611) | function DurationString(ms) {
function NumbersBetween (line 632) | function NumbersBetween(a, b) {
function RandInt (line 649) | function RandInt(min, max) {
function RandChoice (line 664) | function RandChoice(arr) {
function HighlightString (line 671) | function HighlightString(s, prefix, classname) {
function StringIsNumeric (line 682) | function StringIsNumeric(s) {
function FileExceedsGigabyte (line 692) | function FileExceedsGigabyte(filename, multiplier = 1) {
FILE: files/src/renderer/30_point.js
function Point (line 3) | function Point(a, b) {
function PointsBetween (line 38) | function PointsBetween(a, b) {
FILE: files/src/renderer/31_sliders.js
function generate_movegen_sliders (line 6) | function generate_movegen_sliders() {
FILE: files/src/renderer/40_position.js
function NewPosition (line 1401) | function NewPosition(state = null, active = "w", castling = "", enpassan...
FILE: files/src/renderer/41_fen.js
function LoadFEN (line 3) | function LoadFEN(fen) {
function CastlingRights (line 119) | function CastlingRights(board, s) { // s is the castling string fro...
function EnPassantSquare (line 210) | function EnPassantSquare(board, s) { // board.active must be correct. s ...
function IsNormalChessPosition (line 262) | function IsNormalChessPosition(board) {
FILE: files/src/renderer/42_perft.js
function perft (line 22) | function perft(pos, depth, print_moves) {
function perft_print_move (line 39) | function perft_print_move(pos, mv, val) {
function Perft (line 54) | function Perft(fen, depth) {
function PerftFileTest (line 70) | function PerftFileTest(filename, depth, verbose = false) {
FILE: files/src/renderer/43_chess960.js
function c960_arrangement (line 3) | function c960_arrangement(n) {
function c960_fen (line 55) | function c960_fen(n) {
FILE: files/src/renderer/50_table.js
function NewTable (line 5) | function NewTable() {
function NewInfo (line 89) | function NewInfo(board, move) {
FILE: files/src/renderer/51_node.js
function NewNode (line 3) | function NewNode(parent, move, board_for_root) { // move must be legal;...
function NewRoot (line 37) | function NewRoot(board) { // Arg is a board (position) object, not a...
function DestroyTree (line 471) | function DestroyTree(node) {
function __destroy_tree (line 479) | function __destroy_tree(node) {
function CleanTree (line 522) | function CleanTree(node) {
function __clean_tree (line 529) | function __clean_tree(node) {
function AddTreeToBook (line 552) | function AddTreeToBook(node, book) {
function __add_tree_to_book (line 567) | function __add_tree_to_book(node, book) {
FILE: files/src/renderer/52_sorted_moves.js
function SortedMoveInfo (line 3) | function SortedMoveInfo(node) {
function SortedMoveInfoFromTable (line 12) | function SortedMoveInfoFromTable(table) {
FILE: files/src/renderer/55_winrate_graph.js
function NewGrapher (line 3) | function NewGrapher() {
FILE: files/src/renderer/60_pgn_utils.js
function split_buffer (line 3) | function split_buffer(buf) {
function new_byte_pusher (line 41) | function new_byte_pusher(size) {
function new_pgndata (line 80) | function new_pgndata(buf, indices) { // Made by the PGN file loader. Us...
function SavePGN (line 108) | function SavePGN(filename, node) {
function PGNToClipboard (line 117) | function PGNToClipboard(node) {
function make_pgn_string (line 124) | function make_pgn_string(node) {
function make_movetext (line 170) | function make_movetext(node) {
function get_ordered_nodes (line 231) | function get_ordered_nodes(node) {
function __order_nodes (line 237) | function __order_nodes(node, list, skip_self_flag) {
FILE: files/src/renderer/61_pgn_parse.js
function new_pgn_record (line 3) | function new_pgn_record() {
function PreParsePGN (line 10) | function PreParsePGN(buf) { // buf should be the buffer for a sin...
function LoadPGNRecord (line 71) | function LoadPGNRecord(o) { // This can throw!
FILE: files/src/renderer/63_polyglot.js
function KeyFromBoard (line 237) | function KeyFromBoard(board) {
function ParsePolyglotBlob (line 279) | function ParsePolyglotBlob(buf, off) { // Args are Buffer + offset.
function SortAndDeclutterPGNBook (line 306) | function SortAndDeclutterPGNBook(book) {
function BookAtLogicalIndex (line 357) | function BookAtLogicalIndex(book, i) {
function BookLogicalLength (line 365) | function BookLogicalLength(book) {
function BookProbe (line 375) | function BookProbe(key, book) {
function BookSortedTest (line 452) | function BookSortedTest(book) { // Returns true if a cursory inspection...
function HubProbe (line 488) | function HubProbe() {
function BigIntToHex (line 502) | function BigIntToHex(big) {
function BookStressTest (line 508) | function BookStressTest() {
FILE: files/src/renderer/65_loaders.js
function NewFastPGNLoader (line 12) | function NewFastPGNLoader(foo, callback) {
function NewPolyglotBookLoader (line 117) | function NewPolyglotBookLoader(filename, callback) {
function NewPGNBookLoader (line 153) | function NewPGNBookLoader(filename, callback) {
FILE: files/src/renderer/71_tree_handler.js
function NewTreeHandler (line 7) | function NewTreeHandler() {
FILE: files/src/renderer/75_looker.js
function NewLooker (line 14) | function NewLooker() {
method query_api (line 131) | query_api(query) { // Returns a promise, which is solely used by the ca...
function new_chessdbcn_move (line 229) | function new_chessdbcn_move(board, raw_item) { // The object with info...
function new_lichess_move (line 259) | function new_lichess_move(board, raw_item, position_total) { // The obj...
FILE: files/src/renderer/80_info.js
function NewInfoHandler (line 3) | function NewInfoHandler() {
FILE: files/src/renderer/83_statusbox.js
function NewStatusHandler (line 3) | function NewStatusHandler() {
FILE: files/src/renderer/90_engine.js
constant GUI_WANTS_TO_KNOW (line 42) | const GUI_WANTS_TO_KNOW = ["Backend", "EvalFile", "WeightsFile", "Syzygy...
function SearchParams (line 52) | function SearchParams(node = null, limit = null, limit_by_time = false, ...
function NewEngine (line 74) | function NewEngine(hub) {
FILE: files/src/renderer/95_hub.js
function NewHub (line 3) | function NewHub() {
FILE: files/src/renderer/99_start.js
function input_loop (line 137) | function input_loop() {
function force_gc (line 274) | function force_gc() {
function enter_loop (line 287) | function enter_loop() {
Condensed preview — 60 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,063K chars).
[
{
"path": "LICENSE.md",
"chars": 34916,
"preview": "### GNU GENERAL PUBLIC LICENSE\n\nVersion 3, 29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc.\n<https://fsf."
},
{
"path": "README.md",
"chars": 4400,
"preview": "# Nibbler\n\nNibbler is a real-time analysis GUI for [Leela Chess Zero](http://lczero.org/play/quickstart/) (Lc0), which r"
},
{
"path": "files/.editorconfig",
"chars": 71,
"preview": "[*]\nindent_style = tab\nindent_size = 4\ntrim_trailing_whitespace = true\n"
},
{
"path": "files/.gitignore",
"chars": 81,
"preview": ".DS_Store\nscripts/dist\nscripts/electron_zipped\nscripts/update_my_installation.py\n"
},
{
"path": "files/misc/chess960.txt",
"chars": 33736,
"preview": "https://www.mark-weeks.com/cfaa/chess960/c960strt.htm\nI've verified Nibbler produces exactly the same results given a Ch"
},
{
"path": "files/misc/escape_and_missing_quotes.pgn",
"chars": 511,
"preview": "[Event \"Test \\\"quotes\\\" \\\\ and escaping and missing quotes in the FEN tag\"]\n[Site \"local\"]\n[Date \"2021.04.01\"]\n[Round \"1"
},
{
"path": "files/misc/nibbler_menu_translations_template.json",
"chars": 13833,
"preview": "{\n\t\"LANGUAGE_NAME_FIXME\": {\t\t\t\t\t\t// The language name itself, in its own language.\n\t\t\"File\": \"TODO\",\t\t\t\t\t\t\t\t\t// As in: \""
},
{
"path": "files/misc/pathological.pgn",
"chars": 47156,
"preview": "[Event \"Jeopardy Match 12\"]\n[Site \"brinanSee\"]\n[Date \"2019.06.15\"]\n[Round \"4\"]\n[White \"lc0.net.42518\"]\n[Black \"Stockfish"
},
{
"path": "files/misc/pgn.txt",
"chars": 121012,
"preview": "\n\nStandard: Portable Game Notation Specification and Implementation Guide\n\nRevised: 1994.03.12\n\nAuthors: Interested read"
},
{
"path": "files/misc/scraps.js",
"chars": 6532,
"preview": "\"use strict\";\n\nfunction NewPGNFileLoader(filename, callback) {\n\n\tlet loader = Object.create(null);\n\tloader.type = \"pgn\";"
},
{
"path": "files/misc/state_logic.txt",
"chars": 1241,
"preview": "State logic\nAs of 2020-05-26:\n /-----------> halt()\n "
},
{
"path": "files/misc/uci.txt",
"chars": 27364,
"preview": "Description of the universal chess interface (UCI) April 2006\n======================================================"
},
{
"path": "files/res/linux/nibbler.desktop",
"chars": 217,
"preview": "[Desktop Entry]\nCategories=Game;BoardGame;\nComment=Nibbler is a real-time analysis GUI for Leela Chess Zero (Lc0).\nExec="
},
{
"path": "files/scripts/builder.py",
"chars": 1742,
"preview": "import json, os, shutil, zipfile\n\nzips = {\n\t\"windows\": \"scripts/electron_zipped/electron-v9.4.4-win32-x64.zip\",\n\t\"linux\""
},
{
"path": "files/scripts/install.sh",
"chars": 2691,
"preview": "#!/usr/bin/env bash\nset -e\n\nBASE_URL=\"https://github.com/rooklift/nibbler\"\n\n# check curl\nif ! which curl 1>/dev/null 2>&"
},
{
"path": "files/scripts/install_mac.sh",
"chars": 2454,
"preview": "#!/bin/bash\nset -euo pipefail\n\nmsg() {\n\tprintf \"=======================\\n\"\n\tprintf \"\\033[93m%s\\033[0m\\n\" \"$1\"\n}\n\nok() {\n"
},
{
"path": "files/src/main.js",
"chars": 121549,
"preview": "\"use strict\";\n\nconst electron = require(\"electron\");\n\n// The docs are a bit vague but it seems there's a limited timefra"
},
{
"path": "files/src/modules/alert_main.js",
"chars": 1530,
"preview": "\"use strict\";\n\n// Exports a function we use to draw alert messages.\n// To be used in the main process only (so when the "
},
{
"path": "files/src/modules/background.js",
"chars": 570,
"preview": "\"use strict\";\n\nfunction background(light, dark, square_size) {\n\n\tlet c = document.createElement(\"canvas\");\n\tc.width = sq"
},
{
"path": "files/src/modules/config_io.js",
"chars": 7900,
"preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
},
{
"path": "files/src/modules/custom_uci.js",
"chars": 1381,
"preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
},
{
"path": "files/src/modules/debork_json.js",
"chars": 754,
"preview": "\"use strict\";\n\nfunction replace_all(s, search, replace) {\n\tif (!s.includes(search)) {\t\t\t\t\t// Seems to improve speed over"
},
{
"path": "files/src/modules/empty.js",
"chars": 131,
"preview": "\"use strict\";\n\n// The most perfect JS module ever written. Extensive testing\n// shows that this module contains less tha"
},
{
"path": "files/src/modules/engineconfig_io.js",
"chars": 2958,
"preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
},
{
"path": "files/src/modules/images.js",
"chars": 2254,
"preview": "\"use strict\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n\nlet sprites = {\n\n\tloads: 0,\n\n\tfully_loaded: func"
},
{
"path": "files/src/modules/messages.js",
"chars": 4767,
"preview": "\"use strict\";\n\nconst config_io = require(\"./config_io\");\nconst engineconfig_io = require(\"./engineconfig_io\");\n\n\nexports"
},
{
"path": "files/src/modules/running_as_electron.js",
"chars": 217,
"preview": "\"use strict\";\n\nconst path = require(\"path\");\n\n// Is there not a better way? Perhaps some Electron API somewhere?\n\nmodule"
},
{
"path": "files/src/modules/stringify.js",
"chars": 452,
"preview": "\"use strict\";\n\n// Given anything, create a string from it.\n// Helps with sending messages over IPC, displaying alerts, e"
},
{
"path": "files/src/modules/translate.js",
"chars": 878,
"preview": "\"use strict\";\n\nconst translations = require(\"./translations\");\n\nlet startup_language = null;\n\nexports.register_startup_l"
},
{
"path": "files/src/modules/translations.js",
"chars": 145897,
"preview": "\"use strict\";\n\nconst config_io = require(\"./config_io\");\nconst engineconfig_io = require(\"./engineconfig_io\");\n\n// Some "
},
{
"path": "files/src/nibbler.css",
"chars": 4412,
"preview": "html {\n\theight: 100%;\n}\n\nbody {\n\tbackground-color: #080808;\n\tborder: 0;\n\tcolor: #eeeeee;\n\tcursor: default;\n\tmargin: 0;\n\t"
},
{
"path": "files/src/nibbler.html",
"chars": 2832,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<!-- https://content"
},
{
"path": "files/src/package.json",
"chars": 247,
"preview": "{\n\t\"name\": \"Nibbler\",\n\t\"version\": \"2.5.9\",\n\t\"author\": \"Rooklift\",\n\t\"description\": \"Leela Chess Zero (Lc0) interface\",\n\t\""
},
{
"path": "files/src/renderer/10_globals.js",
"chars": 4853,
"preview": "\"use strict\";\n\n// HTML stuff.......................................................\n//\n// All of this may be redundant s"
},
{
"path": "files/src/renderer/20_utils.js",
"chars": 14608,
"preview": "\"use strict\";\n\n// At some point I tried caching the results of XY() and S()\n// but for XY(), object lookups were slower "
},
{
"path": "files/src/renderer/30_point.js",
"chars": 1610,
"preview": "\"use strict\";\n\nfunction Point(a, b) {\n\n\t// Each Point is represented by a single object so that naive equality checking "
},
{
"path": "files/src/renderer/31_sliders.js",
"chars": 1460,
"preview": "\"use strict\";\n\n// This makes an object storing \"sliders\" for every piece except K and k which are handled\n// differently"
},
{
"path": "files/src/renderer/40_position.js",
"chars": 34343,
"preview": "\"use strict\";\n\n\n//\t\tNote that ALL CASTLING MOVES are expected to be in format KING-TO-ROOK (e.g. e1h1).\n//\t\tThat is, onl"
},
{
"path": "files/src/renderer/41_fen.js",
"chars": 6539,
"preview": "\"use strict\";\n\nfunction LoadFEN(fen) {\n\n\tif (fen.length > 200) {\n\t\tthrow \"Invalid FEN - size\";\n\t}\n\n\tlet ret = NewPositio"
},
{
"path": "files/src/renderer/42_perft.js",
"chars": 3043,
"preview": "\"use strict\";\n\n/* Perft notes:\n\nThe correct perft value for a position and depth is the number of leaf nodes at\nthat dep"
},
{
"path": "files/src/renderer/43_chess960.js",
"chars": 1685,
"preview": "\"use strict\";\n\nfunction c960_arrangement(n) {\n\n\t// Given n, generate a string like \"RNBQKBNR\".\n\t// AFAIK, matches the sc"
},
{
"path": "files/src/renderer/50_table.js",
"chars": 8834,
"preview": "\"use strict\";\n\n// The table object stores info from the engine about a game-tree (PGN) node.\n\nfunction NewTable() {\n\tlet"
},
{
"path": "files/src/renderer/51_node.js",
"chars": 13481,
"preview": "\"use strict\";\n\nfunction NewNode(parent, move, board_for_root) {\t\t// move must be legal; board is only relevant for root "
},
{
"path": "files/src/renderer/52_sorted_moves.js",
"chars": 4085,
"preview": "\"use strict\";\n\nfunction SortedMoveInfo(node) {\n\n\tif (!node || node.destroyed) {\n\t\treturn [];\n\t}\n\n\treturn SortedMoveInfoF"
},
{
"path": "files/src/renderer/55_winrate_graph.js",
"chars": 5258,
"preview": "\"use strict\";\n\nfunction NewGrapher() {\n\n\tlet grapher = Object.create(null);\n\n\tgrapher.dragging = false;\t\t\t// Used by the"
},
{
"path": "files/src/renderer/60_pgn_utils.js",
"chars": 6058,
"preview": "\"use strict\";\n\nfunction split_buffer(buf) {\n\n\t// Split a binary buffer into an array of binary buffers corresponding to "
},
{
"path": "files/src/renderer/61_pgn_parse.js",
"chars": 5366,
"preview": "\"use strict\";\n\nfunction new_pgn_record() {\n\treturn {\n\t\ttags: Object.create(null),\n\t\tmovebufs: []\n\t};\n}\n\nfunction PrePars"
},
{
"path": "files/src/renderer/63_polyglot.js",
"chars": 24564,
"preview": "\"use strict\";\n\n// http://hgm.nubati.net/book_format.html\n\n// Note on bitwise operations on BigInt values: everything is "
},
{
"path": "files/src/renderer/65_loaders.js",
"chars": 5644,
"preview": "\"use strict\";\n\n// Non-blocking loader objects.\n//\n// Implementation rule: The callback property is non-null iff it's sti"
},
{
"path": "files/src/renderer/71_tree_handler.js",
"chars": 7032,
"preview": "\"use strict\";\n\n// The point is that updating the node should trigger an immediate redraw. The caller doesn't need\n// to "
},
{
"path": "files/src/renderer/72_tree_draw.js",
"chars": 3922,
"preview": "\"use strict\";\n\nlet tree_draw_props = {\n\n\t// Since we use Object.assign(), it's bad form to have any deep objects in the "
},
{
"path": "files/src/renderer/75_looker.js",
"chars": 8545,
"preview": "\"use strict\";\n\n// Rate limit strategy - thanks to Sopel:\n//\n// .running holds the item in-flight.\n// .pending holds a si"
},
{
"path": "files/src/renderer/80_info.js",
"chars": 12026,
"preview": "\"use strict\";\n\nfunction NewInfoHandler() {\n\n\tlet ih = Object.create(null);\n\tObject.assign(ih, info_misc_props);\n\tObject."
},
{
"path": "files/src/renderer/81_arrows.js",
"chars": 12668,
"preview": "\"use strict\";\n\nlet arrow_props = {\n\n\tdraw_arrows: function(node, specific_source, show_move) {\t\t// If not nullish, speci"
},
{
"path": "files/src/renderer/82_infobox.js",
"chars": 9604,
"preview": "\"use strict\";\n\nlet infobox_props = {\n\n\tdraw_infobox: function(node, mouse_point, active_square, active_colour, hoverdraw"
},
{
"path": "files/src/renderer/83_statusbox.js",
"chars": 5314,
"preview": "\"use strict\";\n\nfunction NewStatusHandler() {\n\n\tlet sh = Object.create(null);\n\n\tsh.special_message = null;\n\tsh.special_me"
},
{
"path": "files/src/renderer/90_engine.js",
"chars": 14584,
"preview": "\"use strict\";\n\n/*\n\nWe are in one of these states (currently implicit in the logic):\n\t1. Inactive\n\t2. Running a search\n\t3"
},
{
"path": "files/src/renderer/95_hub.js",
"chars": 78882,
"preview": "\"use strict\";\n\nfunction NewHub() {\n\n\tlet hub = Object.create(null);\n\n\thub.engine = NewEngine(hub);\t\t\t\t\t\t// Just a dummy "
},
{
"path": "files/src/renderer/97_drag.js",
"chars": 5104,
"preview": "\"use strict\"\n\n// Drag improvements submitted by ObnubiladO in PR #291\n// Back in the day, something like this would be r"
},
{
"path": "files/src/renderer/99_start.js",
"chars": 8802,
"preview": "\"use strict\";\n\n// Upon first run, hopefully the prefs directory exists by now\n// (I think the main process makes it...)\n"
}
]
About this extraction
This page contains the full source code of the fohristiwhirl/nibbler GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 60 files (883.4 KB), approximately 288.8k tokens, and a symbol index with 122 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.