diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b7c70d0834..95bdf8981f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,11 +4,6 @@ what is the goal of the pull request Pull requests without a rationale and clear improvement may be closed immediately. -GUI-related pull requests should be opened against -https://github.com/BGL-core/gui -first. See CONTRIBUTING.md ---> - ### Notes implementation details, hints for reviewers diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbf55d3cb3..bf93c52af4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -417,7 +417,7 @@ Rebased-From: ``` Have a look at [an example backport PR]( -https://github.com/BGL/BGL/pull/16189). +https://github.com/bitcoin/bitcoin/pull/16189). Also see the [backport.py script]( https://github.com/BGL-core/BGL-maintainer-tools#backport). diff --git a/README.md b/README.md index 58bf5b3d70..8c19c3d5c6 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Features: * Optional module for ECDH key exchange. * Optional module for Schnorr signatures according to [BIP-340](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki) (experimental). -Bitgesell is a fork of BGL with the following changes:
+Bitgesell is a fork of Bitcoin with the following changes:
* Block Reward [Burn rate is 90% of tx fees] ```sh nFees*0.1 + GetBlockSubsidy() diff --git a/build_msvc/BGL_config.h b/build_msvc/BGL_config.h index 2b96d6edb4..66fc9a9f9e 100644 --- a/build_msvc/BGL_config.h +++ b/build_msvc/BGL_config.h @@ -6,16 +6,16 @@ #define BGL_BGL_CONFIG_H /* Version Build */ -#define CLIENT_VERSION_BUILD 6 +#define CLIENT_VERSION_BUILD 0 /* Version is release */ #define CLIENT_VERSION_IS_RELEASE true /* Major version */ -#define CLIENT_VERSION_MAJOR 22 +#define CLIENT_VERSION_MAJOR 1 /* Minor version */ -#define CLIENT_VERSION_MINOR 1 +#define CLIENT_VERSION_MINOR 8 /* Copyright holder(s) before %s replacement */ #define COPYRIGHT_HOLDERS "The %s developers" @@ -27,7 +27,7 @@ #define COPYRIGHT_HOLDERS_SUBSTITUTION "BGL Core" /* Copyright year */ -#define COPYRIGHT_YEAR 2021 +#define COPYRIGHT_YEAR 2022 /* Define to 1 to enable wallet functions */ #define ENABLE_WALLET 1 @@ -174,19 +174,19 @@ #define HAVE_SYS_TYPES_H 1 /* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "https://github.com/BGL/BGL/issues" +#define PACKAGE_BUGREPORT "https://github.com/BitgesellOfficial/bitgesell/issues" /* Define to the full name of this package. */ #define PACKAGE_NAME "BGL Core" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "BGL Core 22.99.0" +#define PACKAGE_STRING "BGL Core 0.1.8" /* Define to the home page for this package. */ -#define PACKAGE_URL "https://BGLcore.org/" +#define PACKAGE_URL "https://bitgesell.ca/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "22.99.0" +#define PACKAGE_VERSION "0.1.8" /* Define this symbol if the minimal qt platform exists */ #define QT_QPA_PLATFORM_MINIMAL 1 diff --git a/build_msvc/libBGL_qt/libBGL_qt.vcxproj b/build_msvc/libBGL_qt/libBGL_qt.vcxproj index a979135f37..0418681317 100644 --- a/build_msvc/libBGL_qt/libBGL_qt.vcxproj +++ b/build_msvc/libBGL_qt/libBGL_qt.vcxproj @@ -35,6 +35,7 @@ + @@ -89,6 +90,7 @@ + diff --git a/build_msvc/libsecp256k1/libsecp256k1.vcxproj b/build_msvc/libsecp256k1/libsecp256k1.vcxproj index 39ad64fc9f..71e90cdbf7 100644 --- a/build_msvc/libsecp256k1/libsecp256k1.vcxproj +++ b/build_msvc/libsecp256k1/libsecp256k1.vcxproj @@ -1,22 +1,23 @@ - - - - - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6} - - - StaticLibrary - - - - - - - ENABLE_MODULE_ECDH;ENABLE_MODULE_RECOVERY;ENABLE_MODULE_EXTRAKEYS;ENABLE_MODULE_SCHNORRSIG;%(PreprocessorDefinitions) - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - - - - - - + + + + + {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6} + + + StaticLibrary + + + + + + + ENABLE_MODULE_ECDH;ENABLE_MODULE_RECOVERY;ENABLE_MODULE_EXTRAKEYS;ENABLE_MODULE_SCHNORRSIG;%(PreprocessorDefinitions) + ..\..\src\secp256k1;%(AdditionalIncludeDirectories) + 4146;4244;4267;4334 + + + + + + \ No newline at end of file diff --git a/configure.ac b/configure.ac index df1aa5ab6d..2cee099dfa 100755 --- a/configure.ac +++ b/configure.ac @@ -1,13 +1,13 @@ AC_PREREQ([2.69]) -define(_CLIENT_VERSION_MAJOR, 22) -define(_CLIENT_VERSION_MINOR, 99) +define(_CLIENT_VERSION_MAJOR, 1) +define(_CLIENT_VERSION_MINOR, 8) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_RC, 0) -define(_CLIENT_VERSION_IS_RELEASE, false) -define(_COPYRIGHT_YEAR, 2021) +define(_CLIENT_VERSION_IS_RELEASE, true) +define(_COPYRIGHT_YEAR, 2022) define(_COPYRIGHT_HOLDERS,[The %s developers]) -define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]]) -AC_INIT([BGL Core],m4_join([.], _CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MINOR, _CLIENT_VERSION_BUILD)m4_if(_CLIENT_VERSION_RC, [0], [], [rc]_CLIENT_VERSION_RC),[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/]) +define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[BGL Core]]) +AC_INIT([BGL Core],m4_join([.], _CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MINOR, _CLIENT_VERSION_BUILD)m4_if(_CLIENT_VERSION_RC, [0], [], [rc]_CLIENT_VERSION_RC),[https://github.com/BitgesellOfficial/bitgesell/issues],[BGL],[https://bitgesell.ca/]) AC_CONFIG_SRCDIR([src/validation.cpp]) AC_CONFIG_HEADERS([src/config/BGL-config.h]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/contrib/devtools/copyright_header.py b/contrib/devtools/copyright_header.py index c8d66849e0..bd3c3df9f9 100755 --- a/contrib/devtools/copyright_header.py +++ b/contrib/devtools/copyright_header.py @@ -319,15 +319,13 @@ def get_most_recent_git_change_year(filename): ################################################################################ def read_file_lines(filename): - f = open(filename, 'r', encoding="utf8") - file_lines = f.readlines() - f.close() + with open(filename, 'r', encoding="utf8") as f: + file_lines = f.readlines() return file_lines def write_file_lines(filename, file_lines): - f = open(filename, 'w', encoding="utf8") - f.write(''.join(file_lines)) - f.close() + with open(filename, 'w', encoding="utf8") as f: + f.write(''.join(file_lines)) ################################################################################ # update header years execution diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py index f70cf12ae0..44eb079851 100755 --- a/contrib/linearize/linearize-data.py +++ b/contrib/linearize/linearize-data.py @@ -11,57 +11,22 @@ import re import os import os.path +import sha3 import sys import hashlib import datetime import time +import glob from collections import namedtuple -settings = {} - -def hex_switchEndian(s): - """ Switches the endianness of a hex string (in pairs of hex chars) """ - pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)] - return b''.join(pairList[::-1]).decode() - -def uint32(x): - return x & 0xffffffff - -def bytereverse(x): - return uint32(( ((x) << 24) | (((x) << 8) & 0x00ff0000) | - (((x) >> 8) & 0x0000ff00) | ((x) >> 24) )) - -def bufreverse(in_buf): - out_words = [] - for i in range(0, len(in_buf), 4): - word = struct.unpack('@I', in_buf[i:i+4])[0] - out_words.append(struct.pack('@I', bytereverse(word))) - return b''.join(out_words) - -def wordreverse(in_buf): - out_words = [] - for i in range(0, len(in_buf), 4): - out_words.append(in_buf[i:i+4]) - out_words.reverse() - return b''.join(out_words) -def calc_hdr_hash(blk_hdr): - hash1 = hashlib.sha256() - hash1.update(blk_hdr) - hash1_o = hash1.digest() - hash2 = hashlib.sha256() - hash2.update(hash1_o) - hash2_o = hash2.digest() - - return hash2_o +settings = {} def calc_hash_str(blk_hdr): - hash = calc_hdr_hash(blk_hdr) - hash = bufreverse(hash) - hash = wordreverse(hash) - hash_str = hash.hex() - return hash_str + blk_hdr_hash = sha3.keccak_256() + blk_hdr_hash.update(blk_hdr) + return blk_hdr_hash.digest()[::-1].hex() def get_blk_dt(blk_hdr): members = struct.unpack(" List[bool]: + """ + Convert an IPv4 or IPv6 network to a prefix represented as a list of bits. + IPv4 ranges are remapped to their IPv4-mapped IPv6 range (::ffff:0:0/96). + """ + num_bits = net.prefixlen + netrange = int.from_bytes(net.network_address.packed, 'big') + + # Map an IPv4 prefix into IPv6 space. + if isinstance(net, ipaddress.IPv4Network): + num_bits += 96 + netrange += 0xffff00000000 + + # Strip unused bottom bits. + assert (netrange & ((1 << (128 - num_bits)) - 1)) == 0 + return [((netrange >> (127 - i)) & 1) != 0 for i in range(num_bits)] + +def prefix_to_net(prefix: List[bool]) -> Union[ipaddress.IPv4Network,ipaddress.IPv6Network]: + """The reverse operation of net_to_prefix.""" + # Convert to number + netrange = sum(b << (127 - i) for i, b in enumerate(prefix)) + num_bits = len(prefix) + assert num_bits <= 128 + + # Return IPv4 range if in ::ffff:0:0/96 + if num_bits >= 96 and (netrange >> 32) == 0xffff: + return ipaddress.IPv4Network((netrange & 0xffffffff, num_bits - 96), True) + + # Return IPv6 range otherwise. + return ipaddress.IPv6Network((netrange, num_bits), True) + +# Shortcut for (prefix, ASN) entries. +ASNEntry = Tuple[List[bool], int] + +# Shortcut for (prefix, old ASN, new ASN) entries. +ASNDiff = Tuple[List[bool], int, int] + +class _VarLenCoder: + """ + A class representing a custom variable-length binary encoder/decoder for + integers. Each object represents a different coder, with different parameters + minval and clsbits. + The encoding is easiest to describe using an example. Let's say minval=100 and + clsbits=[4,2,2,3]. In that case: + - x in [100..115]: encoded as [0] + [4-bit BE encoding of (x-100)]. + - x in [116..119]: encoded as [1,0] + [2-bit BE encoding of (x-116)]. + - x in [120..123]: encoded as [1,1,0] + [2-bit BE encoding of (x-120)]. + - x in [124..131]: encoded as [1,1,1] + [3-bit BE encoding of (x-124)]. + In general, every number is encoded as: + - First, k "1"-bits, where k is the class the number falls in (there is one class + per element of clsbits). + - Then, a "0"-bit, unless k is the highest class, in which case there is nothing. + - Lastly, clsbits[k] bits encoding in big endian the position in its class that + number falls into. + - Every class k consists of 2^clsbits[k] consecutive integers. k=0 starts at minval, + other classes start one past the last element of the class before it. + """ + + def __init__(self, minval: int, clsbits: List[int]): + """Construct a new _VarLenCoder.""" + self._minval = minval + self._clsbits = clsbits + self._maxval = minval + sum(1 << b for b in clsbits) - 1 + + def can_encode(self, val: int) -> bool: + """Check whether value val is in the range this coder supports.""" + return self._minval <= val <= self._maxval + + def encode(self, val: int, ret: List[int]) -> None: + """Append encoding of val onto integer list ret.""" + + assert self._minval <= val <= self._maxval + val -= self._minval + bits = 0 + for k, bits in enumerate(self._clsbits): + if val >> bits: + # If the value will not fit in class k, subtract its range from v, + # emit a "1" bit and continue with the next class. + val -= 1 << bits + ret.append(1) + else: + if k + 1 < len(self._clsbits): + # Unless we're in the last class, emit a "0" bit. + ret.append(0) + break + # And then encode v (now the position within the class) in big endian. + ret.extend((val >> (bits - 1 - b)) & 1 for b in range(bits)) + + def encode_size(self, val: int) -> int: + """Compute how many bits are needed to encode val.""" + assert self._minval <= val <= self._maxval + val -= self._minval + ret = 0 + bits = 0 + for k, bits in enumerate(self._clsbits): + if val >> bits: + val -= 1 << bits + ret += 1 + else: + ret += k + 1 < len(self._clsbits) + break + return ret + bits + + def decode(self, stream, bitpos) -> Tuple[int,int]: + """Decode a number starting at bitpos in stream, returning value and new bitpos.""" + val = self._minval + bits = 0 + for k, bits in enumerate(self._clsbits): + bit = 0 + if k + 1 < len(self._clsbits): + bit = stream[bitpos] + bitpos += 1 + if not bit: + break + val += 1 << bits + for i in range(bits): + bit = stream[bitpos] + bitpos += 1 + val += bit << (bits - 1 - i) + return val, bitpos + +# Variable-length encoders used in the binary asmap format. +_CODER_INS = _VarLenCoder(0, [0, 0, 1]) +_CODER_ASN = _VarLenCoder(1, list(range(15, 25))) +_CODER_MATCH = _VarLenCoder(2, list(range(1, 9))) +_CODER_JUMP = _VarLenCoder(17, list(range(5, 31))) + +class _Instruction(Enum): + """One instruction in the binary asmap format.""" + # A return instruction, encoded as [0], returns a constant ASN. It is followed by + # an integer using the ASN encoding. + RETURN = 0 + # A jump instruction, encoded as [1,0] inspects the next unused bit in the input + # and either continues execution (if 0), or skips a specified number of bits (if 1). + # It is followed by an integer, and then two subprograms. The integer uses jump encoding + # and corresponds to the length of the first subprogram (so it can be skipped). + JUMP = 1 + # A match instruction, encoded as [1,1,0] inspects 1 or more of the next unused bits + # in the input with its argument. If they all match, execution continues. If they do + # not, failure is returned. If a default instruction has been executed before, instead + # of failure the default instruction's argument is returned. It is followed by an + # integer in match encoding, and a subprogram. That value is at least 2 bits and at + # most 9 bits. An n-bit value signifies matching (n-1) bits in the input with the lower + # (n-1) bits in the match value. + MATCH = 2 + # A default instruction, encoded as [1,1,1] sets the default variable to its argument, + # and continues execution. It is followed by an integer in ASN encoding, and a subprogram. + DEFAULT = 3 + # Not an actual instruction, but a way to encode the empty program that fails. In the + # encoder, it is used more generally to represent the failure case inside MATCH instructions, + # which may (if used inside the context of a DEFAULT instruction) actually correspond to + # a successful return. In this usage, they're always converted to an actual MATCH or RETURN + # before the top level is reached (see make_default below). + END = 4 + +class _BinNode: + """A class representing a (node of) the parsed binary asmap format.""" + + @overload + def __init__(self, ins: _Instruction): ... + @overload + def __init__(self, ins: _Instruction, arg1: int): ... + @overload + def __init__(self, ins: _Instruction, arg1: "_BinNode", arg2: "_BinNode"): ... + @overload + def __init__(self, ins: _Instruction, arg1: int, arg2: "_BinNode"): ... + + def __init__(self, ins: _Instruction, arg1=None, arg2=None): + """ + Construct a new asmap node. Possibilities are: + - _BinNode(_Instruction.RETURN, asn) + - _BinNode(_Instruction.JUMP, node_0, node_1) + - _BinNode(_Instruction.MATCH, val, node) + - _BinNode(_Instruction.DEFAULT, asn, node) + - _BinNode(_Instruction.END) + """ + self.ins = ins + self.arg1 = arg1 + self.arg2 = arg2 + if ins == _Instruction.RETURN: + assert isinstance(arg1, int) + assert arg2 is None + self.size = _CODER_INS.encode_size(ins.value) + _CODER_ASN.encode_size(arg1) + elif ins == _Instruction.JUMP: + assert isinstance(arg1, _BinNode) + assert isinstance(arg2, _BinNode) + self.size = (_CODER_INS.encode_size(ins.value) + _CODER_JUMP.encode_size(arg1.size) + + arg1.size + arg2.size) + elif ins == _Instruction.DEFAULT: + assert isinstance(arg1, int) + assert isinstance(arg2, _BinNode) + self.size = _CODER_INS.encode_size(ins.value) + _CODER_ASN.encode_size(arg1) + arg2.size + elif ins == _Instruction.MATCH: + assert isinstance(arg1, int) + assert isinstance(arg2, _BinNode) + self.size = (_CODER_INS.encode_size(ins.value) + _CODER_MATCH.encode_size(arg1) + + arg2.size) + elif ins == _Instruction.END: + assert arg1 is None + assert arg2 is None + self.size = 0 + else: + assert False + + @staticmethod + def make_end() -> "_BinNode": + """Constructor for a _BinNode with just an END instruction.""" + return _BinNode(_Instruction.END) + + @staticmethod + def make_leaf(val: int) -> "_BinNode": + """Constructor for a _BinNode of just a RETURN instruction.""" + assert val is not None and val > 0 + return _BinNode(_Instruction.RETURN, val) + + @staticmethod + def make_branch(node0: "_BinNode", node1: "_BinNode") -> "_BinNode": + """ + Construct a _BinNode corresponding to running either the node0 or node1 subprogram, + based on the next input bit. It exploits shortcuts that are possible in the encoding, + and uses either a JUMP, MATCH, or END instruction. + """ + if node0.ins == _Instruction.END and node1.ins == _Instruction.END: + return node0 + if node0.ins == _Instruction.END: + if node1.ins == _Instruction.MATCH and node1.arg1 <= 0xFF: + return _BinNode(node1.ins, node1.arg1 + (1 << node1.arg1.bit_length()), node1.arg2) + return _BinNode(_Instruction.MATCH, 3, node1) + if node1.ins == _Instruction.END: + if node0.ins == _Instruction.MATCH and node0.arg1 <= 0xFF: + return _BinNode(node0.ins, node0.arg1 + (1 << (node0.arg1.bit_length() - 1)), + node0.arg2) + return _BinNode(_Instruction.MATCH, 2, node0) + return _BinNode(_Instruction.JUMP, node0, node1) + + @staticmethod + def make_default(val: int, sub: "_BinNode") -> "_BinNode": + """ + Construct a _BinNode that corresponds to the specified subprogram, with the specified + default value. It exploits shortcuts that are possible in the encoding, and will use + either a DEFAULT or a RETURN instruction.""" + assert val is not None and val > 0 + if sub.ins == _Instruction.END: + return _BinNode(_Instruction.RETURN, val) + if sub.ins in (_Instruction.RETURN, _Instruction.DEFAULT): + return sub + return _BinNode(_Instruction.DEFAULT, val, sub) + +@total_ordering +class ASMap: + """ + A class whose objects represent a mapping from subnets to ASNs. + Internally the mapping is stored as a binary trie, but can be converted + from/to a list of ASNEntry objects, and from/to the binary asmap file format. + In the trie representation, nodes are represented as bare lists for efficiency + and ease of manipulation: + - [0] means an unassigned subnet (no ASN mapping for it is present) + - [int] means a subnet mapped entirely to the specified ASN. + - [node,node] means a subnet whose lower half and upper half have different + - mappings, represented by new trie nodes. + """ + + def update(self, prefix: List[bool], asn: int) -> None: + """Update this ASMap object to map prefix to the specified asn.""" + assert asn == 0 or _CODER_ASN.can_encode(asn) + + def recurse(node: List, offset: int) -> None: + if offset == len(prefix): + # Reached the end of prefix; overwrite this node. + node.clear() + node.append(asn) + return + if len(node) == 1: + # Need to descend into a leaf node; split it up. + oldasn = node[0] + node.clear() + node.append([oldasn]) + node.append([oldasn]) + # Descend into the node. + recurse(node[prefix[offset]], offset + 1) + # If the result is two identical leaf children, merge them. + if len(node[0]) == 1 and len(node[1]) == 1 and node[0] == node[1]: + oldasn = node[0][0] + node.clear() + node.append(oldasn) + recurse(self._trie, 0) + + def update_multi(self, entries: List[Tuple[List[bool], int]]) -> None: + """Apply multiple update operations, where longer prefixes take precedence.""" + entries.sort(key=lambda entry: len(entry[0])) + for prefix, asn in entries: + self.update(prefix, asn) + + def _set_trie(self, trie) -> None: + """Set trie directly. Internal use only.""" + def recurse(node: List) -> None: + if len(node) < 2: + return + recurse(node[0]) + recurse(node[1]) + if len(node[0]) == 2: + return + if node[0] == node[1]: + if len(node[0]) == 0: + node.clear() + else: + asn = node[0][0] + node.clear() + node.append(asn) + recurse(trie) + self._trie = trie + + def __init__(self, entries: Optional[Iterable[ASNEntry]] = None) -> None: + """Construct an ASMap object from an optional list of entries.""" + self._trie = [0] + if entries is not None: + def entry_key(entry): + """Sort function that places shorter prefixes first.""" + prefix, asn = entry + return len(prefix), prefix, asn + for prefix, asn in sorted(entries, key=entry_key): + self.update(prefix, asn) + + def lookup(self, prefix: List[bool]) -> Optional[int]: + """Look up a prefix. Returns ASN, or 0 if unassigned, or None if indeterminate.""" + node = self._trie + for bit in prefix: + if len(node) == 1: + break + node = node[bit] + if len(node) == 1: + return node[0] + return None + + def _to_entries_flat(self, fill: bool = False) -> List[ASNEntry]: + """Convert an ASMap object to a list of non-overlapping (prefix, asn) objects.""" + prefix : List[bool] = [] + + def recurse(node: List) -> List[ASNEntry]: + ret = [] + if len(node) == 1: + if node[0] > 0: + ret = [(list(prefix), node[0])] + elif len(node) == 2: + prefix.append(False) + ret = recurse(node[0]) + prefix[-1] = True + ret += recurse(node[1]) + prefix.pop() + if fill and len(ret) > 1: + asns = set(x[1] for x in ret) + if len(asns) == 1: + ret = [(list(prefix), list(asns)[0])] + return ret + return recurse(self._trie) + + def _to_entries_minimal(self, fill: bool = False) -> List[ASNEntry]: + """Convert a trie to a minimal list of ASNEntry objects, exploiting overlap.""" + prefix : List[bool] = [] + + def recurse(node: List) -> (Tuple[Dict[Optional[int], List[ASNEntry]], bool]): + if len(node) == 1 and node[0] == 0: + return {None if fill else 0: []}, True + if len(node) == 1: + return {node[0]: [], None: [(list(prefix), node[0])]}, False + ret: Dict[Optional[int], List[ASNEntry]] = {} + prefix.append(False) + left, lhole = recurse(node[0]) + prefix[-1] = True + right, rhole = recurse(node[1]) + prefix.pop() + hole = not fill and (lhole or rhole) + def candidate(ctx: Optional[int], res0: Optional[List[ASNEntry]], + res1: Optional[List[ASNEntry]]): + if res0 is not None and res1 is not None: + if ctx not in ret or len(res0) + len(res1) < len(ret[ctx]): + ret[ctx] = res0 + res1 + for ctx in set(left) | set(right): + candidate(ctx, left.get(ctx), right.get(ctx)) + candidate(ctx, left.get(None), right.get(ctx)) + candidate(ctx, left.get(ctx), right.get(None)) + if not hole: + for ctx in list(ret): + if ctx is not None: + candidate(None, [(list(prefix), ctx)], ret[ctx]) + if None in ret: + ret = {ctx:entries for ctx, entries in ret.items() + if ctx is None or len(entries) < len(ret[None])} + if hole: + ret = {ctx:entries for ctx, entries in ret.items() if ctx is None or ctx == 0} + return ret, hole + res, _ = recurse(self._trie) + return res[0] if 0 in res else res[None] + + def __str__(self) -> str: + """Convert this ASMap object to a string containing Python code constructing it.""" + return f"ASMap({self._trie})" + + def to_entries(self, overlapping: bool = True, fill: bool = False) -> List[ASNEntry]: + """ + Convert the mappings in this ASMap object to a list of ASNEntry objects. + Arguments: + overlapping: Permit the subnets in the resulting ASNEntry to overlap. + Setting this can result in a shorter list. + fill: Permit the resulting ASNEntry objects to cover subnets that + are unassigned in this ASMap object. Setting this can + result in a shorter list. + """ + if overlapping: + return self._to_entries_minimal(fill) + return self._to_entries_flat(fill) + + @staticmethod + def from_random(num_leaves: int = 10, max_asn: int = 6, + unassigned_prob: float = 0.5) -> "ASMap": + """ + Construct a random ASMap object, with specified: + - Number of leaves in its trie (at least 1) + - Maximum ASN value (at least 1) + - Probability for leaf nodes to be unassigned + The number of leaves in the resulting object may be less than what is + requested. This method is mostly intended for testing. + """ + assert num_leaves >= 1 + assert max_asn >= 1 or unassigned_prob == 1 + assert _CODER_ASN.can_encode(max_asn) + assert 0.0 <= unassigned_prob <= 1.0 + trie: List = [] + leaves = [trie] + ret = ASMap() + for i in range(1, num_leaves): + idx = random.randrange(i) + leaf = leaves[idx] + lastleaf = leaves.pop() + if idx + 1 < i: + leaves[idx] = lastleaf + leaf.append([]) + leaf.append([]) + leaves.append(leaf[0]) + leaves.append(leaf[1]) + for leaf in leaves: + if random.random() >= unassigned_prob: + leaf.append(random.randrange(1, max_asn + 1)) + else: + leaf.append(0) + #pylint: disable=protected-access + ret._set_trie(trie) + return ret + + def _to_binnode(self, fill: bool = False) -> _BinNode: + """Convert a trie to a _BinNode object.""" + def recurse(node: List) -> Tuple[Dict[Optional[int], _BinNode], bool]: + if len(node) == 1 and node[0] == 0: + return {(None if fill else 0): _BinNode.make_end()}, True + if len(node) == 1: + return {None: _BinNode.make_leaf(node[0]), node[0]: _BinNode.make_end()}, False + ret: Dict[Optional[int], _BinNode] = {} + left, lhole = recurse(node[0]) + right, rhole = recurse(node[1]) + hole = (lhole or rhole) and not fill + + def candidate(ctx: Optional[int], arg1, arg2, func: Callable): + if arg1 is not None and arg2 is not None: + cand = func(arg1, arg2) + if ctx not in ret or cand.size < ret[ctx].size: + ret[ctx] = cand + + for ctx in set(left) | set(right): + candidate(ctx, left.get(ctx), right.get(ctx), _BinNode.make_branch) + candidate(ctx, left.get(None), right.get(ctx), _BinNode.make_branch) + candidate(ctx, left.get(ctx), right.get(None), _BinNode.make_branch) + if not hole: + for ctx in set(ret) - set([None]): + candidate(None, ctx, ret[ctx], _BinNode.make_default) + if None in ret: + ret = {ctx:enc for ctx, enc in ret.items() + if ctx is None or enc.size < ret[None].size} + if hole: + ret = {ctx:enc for ctx, enc in ret.items() if ctx is None or ctx == 0} + return ret, hole + res, _ = recurse(self._trie) + return res[0] if 0 in res else res[None] + + @staticmethod + def _from_binnode(binnode: _BinNode) -> "ASMap": + """Construct an ASMap object from a _BinNode. Internal use only.""" + def recurse(node: _BinNode, default: int) -> List: + if node.ins == _Instruction.RETURN: + return [node.arg1] + if node.ins == _Instruction.JUMP: + return [recurse(node.arg1, default), recurse(node.arg2, default)] + if node.ins == _Instruction.MATCH: + val = node.arg1 + sub = recurse(node.arg2, default) + while val >= 2: + bit = val & 1 + val >>= 1 + if bit: + sub = [[default], sub] + else: + sub = [sub, [default]] + return sub + assert node.ins == _Instruction.DEFAULT + return recurse(node.arg2, node.arg1) + ret = ASMap() + if binnode.ins != _Instruction.END: + #pylint: disable=protected-access + ret._set_trie(recurse(binnode, 0)) + return ret + + def to_binary(self, fill: bool = False) -> bytes: + """ + Convert this ASMap object to binary. + Argument: + fill: permit the resulting binary encoder to contain mappers for + unassigned subnets in this ASMap object. Doing so may + reduce the size of the encoding. + Returns: + A bytes object with the encoding of this ASMap object. + """ + bits: List[int] = [] + + def recurse(node: _BinNode) -> None: + _CODER_INS.encode(node.ins.value, bits) + if node.ins == _Instruction.RETURN: + _CODER_ASN.encode(node.arg1, bits) + elif node.ins == _Instruction.JUMP: + _CODER_JUMP.encode(node.arg1.size, bits) + recurse(node.arg1) + recurse(node.arg2) + elif node.ins == _Instruction.DEFAULT: + _CODER_ASN.encode(node.arg1, bits) + recurse(node.arg2) + else: + assert node.ins == _Instruction.MATCH + _CODER_MATCH.encode(node.arg1, bits) + recurse(node.arg2) + + binnode = self._to_binnode(fill) + if binnode.ins != _Instruction.END: + recurse(binnode) + + val = 0 + nbits = 0 + ret = [] + for bit in bits: + val += (bit << nbits) + nbits += 1 + if nbits == 8: + ret.append(val) + val = 0 + nbits = 0 + if nbits: + ret.append(val) + return bytes(ret) + + @staticmethod + def from_binary(bindata: bytes) -> Optional["ASMap"]: + """Decode an ASMap object from the provided binary encoding.""" + + bits: List[int] = [] + for byte in bindata: + bits.extend((byte >> i) & 1 for i in range(8)) + + def recurse(bitpos: int) -> Tuple[_BinNode, int]: + insval, bitpos = _CODER_INS.decode(bits, bitpos) + ins = _Instruction(insval) + if ins == _Instruction.RETURN: + asn, bitpos = _CODER_ASN.decode(bits, bitpos) + return _BinNode(ins, asn), bitpos + if ins == _Instruction.JUMP: + jump, bitpos = _CODER_JUMP.decode(bits, bitpos) + left, bitpos1 = recurse(bitpos) + if bitpos1 != bitpos + jump: + raise ValueError("Inconsistent jump") + right, bitpos = recurse(bitpos1) + return _BinNode(ins, left, right), bitpos + if ins == _Instruction.MATCH: + match, bitpos = _CODER_MATCH.decode(bits, bitpos) + sub, bitpos = recurse(bitpos) + return _BinNode(ins, match, sub), bitpos + assert ins == _Instruction.DEFAULT + asn, bitpos = _CODER_ASN.decode(bits, bitpos) + sub, bitpos = recurse(bitpos) + return _BinNode(ins, asn, sub), bitpos + + if len(bits) == 0: + binnode = _BinNode(_Instruction.END) + else: + try: + binnode, bitpos = recurse(0) + except (ValueError, IndexError): + return None + if bitpos < len(bits) - 7: + return None + if not all(bit == 0 for bit in bits[bitpos:]): + return None + + return ASMap._from_binnode(binnode) + + def __lt__(self, other: "ASMap") -> bool: + return self._trie < other._trie + + def __eq__(self, other: object) -> bool: + if isinstance(other, ASMap): + return self._trie == other._trie + return False + + def extends(self, req: "ASMap") -> bool: + """Determine whether this matches req for all subranges where req is assigned.""" + def recurse(actual: List, require: List) -> bool: + if len(require) == 1 and require[0] == 0: + return True + if len(require) == 1: + if len(actual) == 1: + return bool(require[0] == actual[0]) + return recurse(actual[0], require) and recurse(actual[1], require) + if len(actual) == 2: + return recurse(actual[0], require[0]) and recurse(actual[1], require[1]) + return recurse(actual, require[0]) and recurse(actual, require[1]) + assert isinstance(req, ASMap) + #pylint: disable=protected-access + return recurse(self._trie, req._trie) + + def diff(self, other: "ASMap") -> List[ASNDiff]: + """Compute the diff from self to other.""" + prefix: List[bool] = [] + ret: List[ASNDiff] = [] + + def recurse(old_node: List, new_node: List): + if len(old_node) == 1 and len(new_node) == 1: + if old_node[0] != new_node[0]: + ret.append((list(prefix), old_node[0], new_node[0])) + else: + old_left: List = old_node if len(old_node) == 1 else old_node[0] + old_right: List = old_node if len(old_node) == 1 else old_node[1] + new_left: List = new_node if len(new_node) == 1 else new_node[0] + new_right: List = new_node if len(new_node) == 1 else new_node[1] + prefix.append(False) + recurse(old_left, new_left) + prefix[-1] = True + recurse(old_right, new_right) + prefix.pop() + assert isinstance(other, ASMap) + #pylint: disable=protected-access + recurse(self._trie, other._trie) + return ret + + def __copy__(self) -> "ASMap": + """Construct a copy of this ASMap object. Its state will not be shared.""" + ret = ASMap() + #pylint: disable=protected-access + ret._set_trie(copy.deepcopy(self._trie)) + return ret + + def __deepcopy__(self, _) -> "ASMap": + # ASMap objects do not allow sharing of the _trie member, so we don't need the memoization. + return self.__copy__() + + +class TestASMap(unittest.TestCase): + """Unit tests for this module.""" + + def test_ipv6_prefix_roundtrips(self) -> None: + """Test that random IPv6 network ranges roundtrip through prefix encoding.""" + for _ in range(20): + net_bits = random.getrandbits(128) + for prefix_len in range(0, 129): + masked_bits = (net_bits >> (128 - prefix_len)) << (128 - prefix_len) + net = ipaddress.IPv6Network((masked_bits.to_bytes(16, 'big'), prefix_len)) + prefix = net_to_prefix(net) + self.assertTrue(len(prefix) <= 128) + net2 = prefix_to_net(prefix) + self.assertEqual(net, net2) + + def test_ipv4_prefix_roundtrips(self) -> None: + """Test that random IPv4 network ranges roundtrip through prefix encoding.""" + for _ in range(100): + net_bits = random.getrandbits(32) + for prefix_len in range(0, 33): + masked_bits = (net_bits >> (32 - prefix_len)) << (32 - prefix_len) + net = ipaddress.IPv4Network((masked_bits.to_bytes(4, 'big'), prefix_len)) + prefix = net_to_prefix(net) + self.assertTrue(32 <= len(prefix) <= 128) + net2 = prefix_to_net(prefix) + self.assertEqual(net, net2) + + def test_asmap_roundtrips(self) -> None: + """Test case that verifies random ASMap objects roundtrip to/from entries/binary.""" + # Iterate over the number of leaves the random test ASMap objects have. + for leaves in range(1, 20): + # Iterate over the number of bits in the AS numbers used. + for asnbits in range(0, 24): + # Iterate over the probability that leaves are unassigned. + for pct in range(101): + # Construct a random ASMap object according to the above parameters. + asmap = ASMap.from_random(num_leaves=leaves, max_asn=1 + (1 << asnbits), + unassigned_prob=0.01 * pct) + # Run tests for to_entries and construction from those entries, both + # for overlapping and non-overlapping ones. + for overlapping in [False, True]: + entries = asmap.to_entries(overlapping=overlapping, fill=False) + random.shuffle(entries) + asmap2 = ASMap(entries) + assert asmap2 is not None + self.assertEqual(asmap2, asmap) + entries = asmap.to_entries(overlapping=overlapping, fill=True) + random.shuffle(entries) + asmap2 = ASMap(entries) + assert asmap2 is not None + self.assertTrue(asmap2.extends(asmap)) + + # Run tests for to_binary and construction from binary. + enc = asmap.to_binary(fill=False) + asmap3 = ASMap.from_binary(enc) + assert asmap3 is not None + self.assertEqual(asmap3, asmap) + enc = asmap.to_binary(fill=True) + asmap3 = ASMap.from_binary(enc) + assert asmap3 is not None + self.assertTrue(asmap3.extends(asmap)) + + def test_patching(self) -> None: + """Test behavior of update, lookup, extends, and diff.""" + #pylint: disable=too-many-locals,too-many-nested-blocks + # Iterate over the number of leaves the random test ASMap objects have. + for leaves in range(1, 20): + # Iterate over the number of bits in the AS numbers used. + for asnbits in range(0, 10): + # Iterate over the probability that leaves are unassigned. + for pct in range(0, 101): + # Construct a random ASMap object according to the above parameters. + asmap = ASMap.from_random(num_leaves=leaves, max_asn=1 + (1 << asnbits), + unassigned_prob=0.01 * pct) + # Make a copy of that asmap object to which patches will be applied. + # It starts off being equal to asmap. + patched = copy.copy(asmap) + # Keep a list of patches performed. + patches: List[ASNEntry] = [] + # Initially there cannot be any difference. + self.assertEqual(asmap.diff(patched), []) + # Make 5 patches, each building on top of the previous ones. + for _ in range(0, 5): + # Construct a random path and new ASN to assign it to, apply it to patched, + # and remember it in patches. + pathlen = random.randrange(5) + path = [random.getrandbits(1) != 0 for _ in range(pathlen)] + newasn = random.randrange(1 + (1 << asnbits)) + patched.update(path, newasn) + patches = [(path, newasn)] + patches + + # Compute the diff, and whether asmap extends patched, and the other way + # around. + diff = asmap.diff(patched) + self.assertEqual(asmap == patched, len(diff) == 0) + extends = asmap.extends(patched) + back_extends = patched.extends(asmap) + # Determine whether those extends results are consistent with the diff + # result. + self.assertEqual(extends, all(d[2] == 0 for d in diff)) + self.assertEqual(back_extends, all(d[1] == 0 for d in diff)) + # For every diff found: + for path, old_asn, new_asn in diff: + # Verify asmap and patched actually differ there. + self.assertTrue(old_asn != new_asn) + self.assertEqual(asmap.lookup(path), old_asn) + self.assertEqual(patched.lookup(path), new_asn) + for _ in range(2): + # Extend the path far enough that it's smaller than any mapped + # range, and check the lookup holds there too. + spec_path = list(path) + while len(spec_path) < 32: + spec_path.append(random.getrandbits(1) != 0) + self.assertEqual(asmap.lookup(spec_path), old_asn) + self.assertEqual(patched.lookup(spec_path), new_asn) + # Search through the list of performed patches to find the last one + # applying to the extended path (note that patches is in reverse + # order, so the first match should work). + found = False + for patch_path, patch_asn in patches: + if spec_path[:len(patch_path)] == patch_path: + # When found, it must match whatever the result was patched + # to. + self.assertEqual(new_asn, patch_asn) + found = True + break + # And such a patch must exist. + self.assertTrue(found) + +if __name__ == '__main__': + unittest.main() diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py index 151cafb287..e3647e443f 100755 --- a/contrib/seeds/generate-seeds.py +++ b/contrib/seeds/generate-seeds.py @@ -4,29 +4,22 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. ''' Script to generate list of seed nodes for chainparams.cpp. - This script expects two text files in the directory that is passed as an argument: - nodes_main.txt nodes_test.txt - -These files must consist of lines in the format - +These files must consist of lines in the format : []: .onion: .b32.i2p: - The output will be two data structures with the peers in binary format: - static const uint8_t chainparams_seed_{main,test}[]={ ... } - These should be pasted into `src/chainparamsseeds.h`. ''' -from __future__ import print_function, division + from base64 import b32decode from enum import Enum import struct @@ -58,10 +51,10 @@ def name_to_bip155(addr): if len(vchAddr) == 32: return (BIP155Network.I2P, vchAddr) else: - raise ValueError(f'Invalid I2P {vchAddr}') + raise ValueError(f"Invalid I2P {vchAddr}") elif '.' in addr: # IPv4 return (BIP155Network.IPV4, bytes((int(x) for x in addr.split('.')))) - elif ':' in addr: # IPv6 + elif ':' in addr: # IPv6 or CJDNS sub = [[], []] # prefix, suffix x = 0 addr = addr.split(':') @@ -77,7 +70,14 @@ def name_to_bip155(addr): sub[x].append(val & 0xff) nullbytes = 16 - len(sub[0]) - len(sub[1]) assert((x == 0 and nullbytes == 0) or (x == 1 and nullbytes > 0)) - return (BIP155Network.IPV6, bytes(sub[0] + ([0] * nullbytes) + sub[1])) + addr_bytes = bytes(sub[0] + ([0] * nullbytes) + sub[1]) + if addr_bytes[0] == 0xfc: + # Assume that seeds with fc00::/8 addresses belong to CJDNS, + # not to the publicly unroutable "Unique Local Unicast" network, see + # RFC4193: https://datatracker.ietf.org/doc/html/rfc4193#section-8 + return (BIP155Network.CJDNS, addr_bytes) + else: + return (BIP155Network.IPV6, addr_bytes) else: raise ValueError('Could not parse address %s' % addr) @@ -149,13 +149,13 @@ def process_nodes(g, f, structname): def main(): if len(sys.argv)<2: print(('Usage: %s ' % sys.argv[0]), file=sys.stderr) - exit(1) + sys.exit(1) g = sys.stdout indir = sys.argv[1] g.write('#ifndef BGL_CHAINPARAMSSEEDS_H\n') g.write('#define BGL_CHAINPARAMSSEEDS_H\n') g.write('/**\n') - g.write(' * List of fixed seed nodes for the falco network\n') + g.write(' * List of fixed seed nodes for the bitgesell network\n') g.write(' * AUTOGENERATED by contrib/seeds/generate-seeds.py\n') g.write(' *\n') g.write(' * Each line contains a BIP155 serialized (networkID, addr, port) tuple.\n') @@ -169,4 +169,3 @@ def main(): if __name__ == '__main__': main() - diff --git a/contrib/seeds/makeseeds.py b/contrib/seeds/makeseeds.py index d61ace777b..89652948e8 100755 --- a/contrib/seeds/makeseeds.py +++ b/contrib/seeds/makeseeds.py @@ -6,21 +6,27 @@ # Generate seeds.txt from Pieter's DNS seeder # -NSEEDS=512 +import argparse +import ipaddress +import re +import sys +import collections +from typing import List, Dict, Union -MAX_SEEDS_PER_ASN=2 +from asmap import ASMap, net_to_prefix -MIN_BLOCKS = 400000 +NSEEDS=512 -# These are hosts that have been observed to be behaving strangely (e.g. -# aggressively connecting to every node). -with open("suspicious_hosts.txt", mode="r", encoding="utf-8") as f: - SUSPICIOUS_HOSTS = {s.strip() for s in f if s.strip()} +MAX_SEEDS_PER_ASN = { + 'ipv4': 2, + 'ipv6': 10, +} +MIN_BLOCKS = 730000 PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$") PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$") -PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$") +PATTERN_ONION = re.compile(r"^([a-z2-7]{56}\.onion):(\d+)$") PATTERN_AGENT = re.compile( r"^/Satoshi:(" r"0.14.(0|1|2|3|99)|" @@ -32,10 +38,14 @@ r"0.20.99" r")") -def parseline(line): +def parseline(line: str) -> Union[dict, None]: + """ Parses a line from `seeds_main.txt` into a dictionary of details for that line. + or `None`, if the line could not be parsed. + """ sline = line.split() if len(sline) < 11: - return None + # line too short to be valid, skip it. + return None m = PATTERN_IPV4.match(sline[0]) sortkey = None ip = None @@ -99,99 +109,124 @@ def parseline(line): 'sortkey': sortkey, } -def filtermultiport(ips): - '''Filter out hosts with more nodes per IP''' +def dedup(ips: List[Dict]) -> List[Dict]: + """ Remove duplicates from `ips` where multiple ips share address and port. """ + d = {} + for ip in ips: + d[ip['ip'],ip['port']] = ip + return list(d.values()) + +def filtermultiport(ips: List[Dict]) -> List[Dict]: + """ Filter out hosts with more nodes per IP""" hist = collections.defaultdict(list) for ip in ips: hist[ip['sortkey']].append(ip) return [value[0] for (key,value) in list(hist.items()) if len(value)==1] -def lookup_asn(net, ip): - ''' - Look up the asn for an IP (4 or 6) address by querying cymru.com, or None - if it could not be found. - ''' - try: - if net == 'ipv4': - ipaddr = ip - prefix = '.origin' - else: # http://www.team-cymru.com/IP-ASN-mapping.html - res = str() # 2001:4860:b002:23::68 - for nb in ip.split(':')[:4]: # pick the first 4 nibbles - for c in nb.zfill(4): # right padded with '0' - res += c + '.' # 2001 4860 b002 0023 - ipaddr = res.rstrip('.') # 2.0.0.1.4.8.6.0.b.0.0.2.0.0.2.3 - prefix = '.origin6' - - asn = int([x.to_text() for x in dns.resolver.resolve('.'.join( - reversed(ipaddr.split('.'))) + prefix + '.asn.cymru.com', - 'TXT').response.answer][0].split('\"')[1].split(' ')[0]) - return asn - except Exception: - sys.stderr.write('ERR: Could not resolve ASN for "' + ip + '"\n') - return None - # Based on Greg Maxwell's seed_filter.py -def filterbyasn(ips, max_per_asn, max_total): +def filterbyasn(asmap: ASMap, ips: List[Dict], max_per_asn: Dict, max_per_net: int) -> List[Dict]: + """ Prunes `ips` by + (a) trimming ips to have at most `max_per_net` ips from each net (e.g. ipv4, ipv6); and + (b) trimming ips to have at most `max_per_asn` ips from each asn in each net. + """ # Sift out ips by type - ips_ipv4 = [ip for ip in ips if ip['net'] == 'ipv4'] - ips_ipv6 = [ip for ip in ips if ip['net'] == 'ipv6'] + ips_ipv46 = [ip for ip in ips if ip['net'] in ['ipv4', 'ipv6']] ips_onion = [ip for ip in ips if ip['net'] == 'onion'] - # Filter IPv4 by ASN + # Filter IPv46 by ASN, and limit to max_per_net per network result = [] - asn_count = {} - for ip in ips_ipv4: - if len(result) == max_total: - break - try: - asn = int([x.to_text() for x in dns.resolver.query('.'.join(reversed(ip['ip'].split('.'))) + '.origin.asn.cymru.com', 'TXT').response.answer][0].split('\"')[1].split(' ')[0]) - if asn not in asn_count: - asn_count[asn] = 0 - if asn_count[asn] == max_per_asn: - continue - asn_count[asn] += 1 - result.append(ip) - except: - sys.stderr.write('ERR: Could not resolve ASN for "' + ip['ip'] + '"\n') - - # TODO: filter IPv6 by ASN - - # Add back non-IPv4 - result.extend(ips_ipv6) - result.extend(ips_onion) + net_count: Dict[str, int] = collections.defaultdict(int) + asn_count: Dict[int, int] = collections.defaultdict(int) + + for i, ip in enumerate(ips_ipv46): + if net_count[ip['net']] == max_per_net: + # do not add this ip as we already too many + # ips from this network + continue + asn = asmap.lookup(net_to_prefix(ipaddress.ip_network(ip['ip']))) + if not asn or asn_count[ip['net'], asn] == max_per_asn[ip['net']]: + # do not add this ip as we already have too many + # ips from this ASN on this network + continue + asn_count[ip['net'], asn] += 1 + net_count[ip['net']] += 1 + ip['asn'] = asn + result.append(ip) + + # Add back Onions (up to max_per_net) + result.extend(ips_onion[0:max_per_net]) return result +def ip_stats(ips: List[Dict]) -> str: + """ Format and return pretty string from `ips`. """ + hist: Dict[str, int] = collections.defaultdict(int) + for ip in ips: + if ip is not None: + hist[ip['net']] += 1 + + return f"{hist['ipv4']:6d} {hist['ipv6']:6d} {hist['onion']:6d}" + +def parse_args(): + argparser = argparse.ArgumentParser(description='Generate a list of bitcoin node seed ip addresses.') + argparser.add_argument("-a","--asmap", help='the location of the asmap asn database file (required)', required=True) + return argparser.parse_args() + def main(): + args = parse_args() + + print(f'Loading asmap database "{args.asmap}"…', end='', file=sys.stderr, flush=True) + with open(args.asmap, 'rb') as f: + asmap = ASMap.from_binary(f.read()) + print('Done.', file=sys.stderr) + + print('Loading and parsing DNS seeds…', end='', file=sys.stderr, flush=True) lines = sys.stdin.readlines() ips = [parseline(line) for line in lines] + print('Done.', file=sys.stderr) - # Skip entries with valid address. + print('\x1b[7m IPv4 IPv6 Onion Pass \x1b[0m', file=sys.stderr) + print(f'{ip_stats(ips):s} Initial', file=sys.stderr) + # Skip entries with invalid address. ips = [ip for ip in ips if ip is not None] - # Skip entries from suspicious hosts. - ips = [ip for ip in ips if ip['ip'] not in SUSPICIOUS_HOSTS] + print(f'{ip_stats(ips):s} Skip entries with invalid address', file=sys.stderr) + # Skip duplicates (in case multiple seeds files were concatenated) + ips = dedup(ips) + print(f'{ip_stats(ips):s} After removing duplicates', file=sys.stderr) # Enforce minimal number of blocks. ips = [ip for ip in ips if ip['blocks'] >= MIN_BLOCKS] + print(f'{ip_stats(ips):s} Enforce minimal number of blocks', file=sys.stderr) # Require service bit 1. ips = [ip for ip in ips if (ip['service'] & 1) == 1] - # Require at least 50% 30-day uptime. - ips = [ip for ip in ips if ip['uptime'] > 50] + print(f'{ip_stats(ips):s} Require service bit 1', file=sys.stderr) + # Require at least 50% 30-day uptime for clearnet, 10% for onion. + req_uptime = { + 'ipv4': 50, + 'ipv6': 50, + 'onion': 10, + } + ips = [ip for ip in ips if ip['uptime'] > req_uptime[ip['net']]] + print(f'{ip_stats(ips):s} Require minimum uptime', file=sys.stderr) # Require a known and recent user agent. ips = [ip for ip in ips if PATTERN_AGENT.match(ip['agent'])] + print(f'{ip_stats(ips):s} Require a known and recent user agent', file=sys.stderr) # Sort by availability (and use last success as tie breaker) ips.sort(key=lambda x: (x['uptime'], x['lastsuccess'], x['ip']), reverse=True) - # Filter out hosts with multiple ports, these are likely abusive + # Filter out hosts with multiple bitcoin ports, these are likely abusive ips = filtermultiport(ips) + print(f'{ip_stats(ips):s} Filter out hosts with multiple bitcoin ports', file=sys.stderr) # Look up ASNs and limit results, both per ASN and globally. - ips = filterbyasn(ips, MAX_SEEDS_PER_ASN, NSEEDS) + ips = filterbyasn(asmap, ips, MAX_SEEDS_PER_ASN, NSEEDS) + print(f'{ip_stats(ips):s} Look up ASNs and limit results per ASN and per net', file=sys.stderr) # Sort the results by IP address (for deterministic output). ips.sort(key=lambda x: (x['net'], x['sortkey'])) - for ip in ips: if ip['net'] == 'ipv6': - print '[%s]:%i' % (ip['ip'], ip['port']) + print(f"[{ip['ip']}]:{ip['port']}", end="") else: - print '%s:%i' % (ip['ip'], ip['port']) + print(f"{ip['ip']}:{ip['port']}", end="") + if 'asn' in ip: + print(f" # AS{ip['asn']}", end="") + print() if __name__ == '__main__': main() diff --git a/contrib/testgen/base58.py b/contrib/testgen/base58.py index 08203b8e0b..c24721a7f9 100644 --- a/contrib/testgen/base58.py +++ b/contrib/testgen/base58.py @@ -4,7 +4,7 @@ ''' BGL base58 encoding and decoding. -Based on https://BGLtalk.org/index.php?topic=1026.0 (public domain) +Based on https://bitcointalk.org/index.php?topic=1026.0 (public domain) ''' import hashlib @@ -106,8 +106,8 @@ def get_bcaddress_version(strAddress): return ord(version) if __name__ == '__main__': - # Test case (from http://gitorious.org/BGL/python-base58.git) - assert get_bcaddress_version('15VjRaDX9zpbA8LVnbrCAFzrVzN7ixHNsC') is 0 + # Test case (from http://gitorious.org/bitcoin/python-base58.git) + assert get_bcaddress_version('15VjRaDX9zpbA8LVnbrCAFzrVzN7ixHNsC') == 0 _ohai = 'o hai'.encode('ascii') _tmp = b58encode(_ohai) assert _tmp == 'DYB3oMS' diff --git a/contrib/verify-commits/verify-commits.py b/contrib/verify-commits/verify-commits.py index 0cab101495..10e80393a3 100755 --- a/contrib/verify-commits/verify-commits.py +++ b/contrib/verify-commits/verify-commits.py @@ -82,11 +82,16 @@ def main(): # get directory of this program and read data files dirname = os.path.dirname(os.path.abspath(__file__)) print("Using verify-commits data from " + dirname) - verified_root = open(dirname + "/trusted-git-root", "r", encoding="utf8").read().splitlines()[0] - verified_sha512_root = open(dirname + "/trusted-sha512-root-commit", "r", encoding="utf8").read().splitlines()[0] - revsig_allowed = open(dirname + "/allow-revsig-commits", "r", encoding="utf-8").read().splitlines() - unclean_merge_allowed = open(dirname + "/allow-unclean-merge-commits", "r", encoding="utf-8").read().splitlines() - incorrect_sha512_allowed = open(dirname + "/allow-incorrect-sha512-commits", "r", encoding="utf-8").read().splitlines() + with open(dirname + "/trusted-git-root", "r", encoding="utf8") as f: + verified_root = f.read().splitlines()[0] + with open(dirname + "/trusted-sha512-root-commit", "r", encoding="utf8") as f: + verified_sha512_root = f.read().splitlines()[0] + with open(dirname + "/allow-revsig-commits", "r", encoding="utf8") as f: + revsig_allowed = f.read().splitlines() + with open(dirname + "/allow-unclean-merge-commit", "r", encoding="utf8") as f: + unclean_merge_allowed = f.read().splitlines() + with open(dirname + "/allow-incorrect-sha512-commits", "r", encoding="utf8") as f: + incorrect_sha512_allowed = f.read().splitlines() # Set commit and branch and set variables current_commit = args.commit diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py index 92a7c17dc2..9d60c6c794 100755 --- a/contrib/zmq/zmq_sub.py +++ b/contrib/zmq/zmq_sub.py @@ -20,7 +20,7 @@ alternative is to wrap the contents of `handle` inside `while True`. A blocking example using python 2.7 can be obtained from the git history: - https://github.com/BGL/BGL/blob/37a7fe9e440b83e2364d5498931253937abe9294/contrib/zmq/zmq_sub.py + https://github.com/bitcoin/bitcoin/blob/37a7fe9e440b83e2364d5498931253937abe9294/contrib/zmq/zmq_sub.py """ import asyncio diff --git a/debian.minimal/build-in-docker.sh b/debian.minimal/build-in-docker.sh index 598403cfc0..df793a13bf 100755 --- a/debian.minimal/build-in-docker.sh +++ b/debian.minimal/build-in-docker.sh @@ -20,8 +20,8 @@ docker exec $container useradd user docker exec $container mkdir /home/user docker exec $container chown user.user /home/user docker exec $container sudo -u user mkdir /home/user/build -docker cp ../bitgesell_0.1.7.dsc $container:/root/repo/ -docker cp ../bitgesell_0.1.7.tar.xz $container:/root/repo/ +docker cp ../bitgesell_0.1.8.dsc $container:/root/repo/ +docker cp ../bitgesell_0.1.8.tar.xz $container:/root/repo/ # docker exec -w /root/repo $container sh -c "dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz" docker exec -w /root/repo $container sh -c "apt-ftparchive sources . > Sources" docker exec $container sh -c "echo deb-src [trusted=yes] file:/root/repo ./ >> /etc/apt/sources.list" @@ -30,5 +30,5 @@ docker exec $container apt-get -y build-dep bitgesell docker exec $container chmod a+rX /root docker exec $container chmod -R a+rX /root/repo docker exec -w /home/user/build $container sudo -u user apt-get -y source bitgesell -docker exec -w /home/user/build/bitgesell-0.1.7 $container sudo -u user debuild -b -docker cp $container:/home/user/build/bitgesell_0.1.7_amd64.deb bitgesell_0.1.7_amd64.deb +docker exec -w /home/user/build/bitgesell-0.1.8 $container sudo -u user debuild -b +docker cp $container:/home/user/build/bitgesell_0.1.8_amd64.deb bitgesell_0.1.8_amd64.deb diff --git a/debian.minimal/changelog b/debian.minimal/changelog index 0c5ba0da9d..cf9a9ad023 100644 --- a/debian.minimal/changelog +++ b/debian.minimal/changelog @@ -1,3 +1,11 @@ +bitgesell (0.1.8) UNRELEASED; urgency=low + + * Codebase synced to Bitcoin Core up to 31 Oct 2021 + * New logo and logo icons + + -- Mathias van Orton Sun, 31 Mar 2022 10:05:38 +0000 + + bitgesell (0.1.7) UNRELEASED; urgency=low * Taproot activation rescheduled with relaxed conditions diff --git a/debian.minimal/copyright b/debian.minimal/copyright index 81ed2ad05e..7235ef128b 100644 --- a/debian.minimal/copyright +++ b/debian.minimal/copyright @@ -1721,8 +1721,8 @@ Files: doc/man/BGL-cli.1 Copyright: 2009-2019 The Bitcoin Core developers License: __UNKNOWN__ Please contribute if you find BGL Core useful. Visit - for further information about the software. - The source code is available from . + for further information about the software. + The source code is available from . . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING @@ -2630,7 +2630,7 @@ Files: contrib/verifybinaries/verify.sh Copyright: 2016 The Bitcoin Core developers Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. License: __UNKNOWN__ This script attempts to download the signature file SHA256SUMS.asc from - BGLcore.org and BGL.org and compares them. + bitgesell.ca and BGL.org and compares them. It first checks if the signature passes, and then downloads the files specified in the file, and checks if the hashes of these files match those that are specified in the signature file. diff --git a/debian.minimal/files b/debian.minimal/files index c95e82ded9..b14bace826 100644 --- a/debian.minimal/files +++ b/debian.minimal/files @@ -1 +1 @@ -bitgesell_0.1.7_source.buildinfo misc optional +bitgesell_0.1.8_source.buildinfo misc optional diff --git a/debian.qt/build-in-docker.sh b/debian.qt/build-in-docker.sh index e896167896..521c25d100 100755 --- a/debian.qt/build-in-docker.sh +++ b/debian.qt/build-in-docker.sh @@ -21,8 +21,8 @@ docker exec $container useradd user docker exec $container mkdir /home/user docker exec $container chown user.user /home/user docker exec $container sudo -u user mkdir /home/user/build -docker cp ../bitgesell-qt_0.1.7.dsc $container:/root/repo/ -docker cp ../bitgesell-qt_0.1.7.tar.xz $container:/root/repo/ +docker cp ../bitgesell-qt_0.1.8.dsc $container:/root/repo/ +docker cp ../bitgesell-qt_0.1.8.tar.xz $container:/root/repo/ # docker exec -w /root/repo $container sh -c "dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz" docker exec -w /root/repo $container sh -c "apt-ftparchive sources . > Sources" @@ -32,5 +32,5 @@ docker exec $container apt-get -y build-dep bitgesell-qt docker exec $container chmod a+rX /root docker exec $container chmod -R a+rX /root/repo docker exec -w /home/user/build $container sudo -u user apt-get -y source bitgesell-qt -docker exec -w /home/user/build/bitgesell-qt-0.1.7 $container sudo -u user debuild -b -docker cp $container:/home/user/build/bitgesell-qt_0.1.7_amd64.deb bitgesell-qt_0.1.7_amd64.deb +docker exec -w /home/user/build/bitgesell-qt-0.1.8 $container sudo -u user debuild -b +docker cp $container:/home/user/build/bitgesell-qt_0.1.8_amd64.deb bitgesell-qt_0.1.8_amd64.deb diff --git a/debian.qt/changelog b/debian.qt/changelog index 28d90ce5d4..60a8f64246 100644 --- a/debian.qt/changelog +++ b/debian.qt/changelog @@ -1,3 +1,11 @@ +bitgesell-qt (0.1.8) UNRELEASED; urgency=low + + * Codebase synced to Bitcoin Core up to 31 Oct 2021 + * New logo and logo icons + + -- Mathias van Orton Sun, 31 Mar 2022 10:05:38 +0000 + + bitgesell-qt (0.1.7) UNRELEASED; urgency=low * Taproot activation rescheduled with relaxed conditions diff --git a/debian.qt/files b/debian.qt/files index bc4becaf9b..d30c81d6b3 100644 --- a/debian.qt/files +++ b/debian.qt/files @@ -1 +1 @@ -bitgesell-qt_0.1.7_source.buildinfo misc optional +bitgesell-qt_0.1.8_source.buildinfo misc optional diff --git a/depends/Makefile b/depends/Makefile index f1eb2076ec..1822ddaa8e 100755 --- a/depends/Makefile +++ b/depends/Makefile @@ -39,7 +39,7 @@ NO_ZMQ ?= NO_UPNP ?= NO_NATPMP ?= MULTIPROCESS ?= -FALLBACK_DOWNLOAD_PATH ?= https://BGLcore.org/depends-sources +FALLBACK_DOWNLOAD_PATH ?= https://bitgesell.ca/depends-sources BUILD = $(shell ./config.guess) HOST ?= $(BUILD) diff --git a/depends/README.md b/depends/README.md index cdb9af7719..69ce2ca5f2 100755 --- a/depends/README.md +++ b/depends/README.md @@ -75,7 +75,7 @@ For linux RISC-V 64-bit cross compilation (there are no packages for 32-bit): sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu -RISC-V known issue: gcc-7.3.0 and gcc-7.3.1 result in a broken `test_BGL` executable (see https://github.com/BGL/BGL/pull/13543), +RISC-V known issue: gcc-7.3.0 and gcc-7.3.1 result in a broken `test_BGL` executable (see https://github.com/bitcoin/bitcoin/pull/13543), this is apparently fixed in gcc-8.1.0. For linux S390X cross compilation: diff --git a/doc/README.md b/doc/README.md index 8a27bfb526..56770a3748 100644 --- a/doc/README.md +++ b/doc/README.md @@ -5,7 +5,7 @@ Setup --------------------- BGL Core is the original BGL client and it builds the backbone of the network. It downloads and, by default, stores the entire history of BGL transactions, which requires a few hundred gigabytes of disk space. Depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. -To download BGL Core, visit [BGLcore.org](https://BGLcore.org/en/download/). +To download BGL Core, visit [bitgesell.ca](https://bitgesell.ca/en/download/). Running --------------------- @@ -55,7 +55,7 @@ The BGL repo's [root README](/README.md) contains relevant information on the de - [Productivity Notes](productivity.md) - [Release Notes](release-notes.md) - [Release Process](release-process.md) -- [Source Code Documentation (External Link)](https://doxygen.BGLcore.org/) +- [Source Code Documentation (External Link)](https://doxygen.bitgesell.ca/) - [Translation Process](translation_process.md) - [Translation Strings Policy](translation_strings_policy.md) - [JSON-RPC Interface](JSON-RPC-interface.md) diff --git a/doc/README_doxygen.md b/doc/README_doxygen.md index 1d0d9975d6..4329c47a77 100644 --- a/doc/README_doxygen.md +++ b/doc/README_doxygen.md @@ -8,7 +8,7 @@ with no central authority: managing transactions and issuing money are carried o The software is a community-driven open source project, released under the MIT license. -See https://github.com/BGL/BGL and https://BGLcore.org/ for further information about the project. +See https://github.com/BitgesellOfficial/bitgesell and https://bitgesell.ca/ for further information about the project. \section Navigation Use Modules, Namespaces, Classes, or Files at the top of the page to start navigating the code. diff --git a/doc/build-netbsd.md b/doc/build-netbsd.md index 521e531276..7767d43958 100644 --- a/doc/build-netbsd.md +++ b/doc/build-netbsd.md @@ -22,7 +22,7 @@ libtool pkg-config python37 -git clone https://github.com/BGL/BGL.git +git clone https://github.com/BitgesellOfficial/bitgesell.git ``` See [dependencies.md](dependencies.md) for a complete overview. diff --git a/doc/build-openbsd.md b/doc/build-openbsd.md index ded08c635a..67a934883f 100644 --- a/doc/build-openbsd.md +++ b/doc/build-openbsd.md @@ -18,7 +18,7 @@ pkg_add automake # (select highest version, e.g. 1.16) pkg_add python # (select highest version, e.g. 3.8) pkg_add bash -git clone https://github.com/BGL/BGL.git +git clone https://github.com/BitgesellOfficial/bitgesell.git ``` See [dependencies.md](dependencies.md) for a complete overview. @@ -113,7 +113,7 @@ The standard ulimit restrictions in OpenBSD are very strict: data(kbytes) 1572864 This is, unfortunately, in some cases not enough to compile some `.cpp` files in the project, -(see issue [#6658](https://github.com/BGL/BGL/issues/6658)). +(see issue [#6658](https://github.com/bitcoin/bitcoin/issues/6658)). If your user is in the `staff` group the limit can be raised with: ulimit -d 3000000 diff --git a/doc/build-unix.md b/doc/build-unix.md index 70dcbc7ad5..ae76213fc6 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -319,7 +319,7 @@ Setup and Build Example: Arch Linux This example lists the steps necessary to setup and build a command line only, non-wallet distribution of the latest changes on Arch Linux: pacman -S git base-devel boost libevent python - git clone https://github.com/BGL/BGL.git + git clone https://github.com/BitgesellOfficial/bitgesell.git cd BGL/ ./autogen.sh ./configure --disable-wallet --without-gui --without-miniupnpc diff --git a/doc/developer-notes.md b/doc/developer-notes.md index efeb77e1bc..795756b9af 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -347,7 +347,7 @@ other input. Valgrind is a programming tool for memory debugging, memory leak detection, and profiling. The repo contains a Valgrind suppressions file -([`valgrind.supp`](https://github.com/BGL/BGL/blob/master/contrib/valgrind.supp)) +([`valgrind.supp`](https://github.com/BitgesellOfficial/bitgesell/blob/master/contrib/valgrind.supp)) which includes known Valgrind warnings in our dependencies that cannot be fixed in-tree. Example use: @@ -468,7 +468,7 @@ Additional resources: * [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) * [GCC Instrumentation Options](https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html) * [Google Sanitizers Wiki](https://github.com/google/sanitizers/wiki) - * [Issue #12691: Enable -fsanitize flags in Travis](https://github.com/BGL/BGL/issues/12691) + * [Issue #12691: Enable -fsanitize flags in Travis](https://github.com/bitcoin/bitcoin/issues/12691) Locking/mutex usage notes ------------------------- @@ -1118,13 +1118,13 @@ introduce accidental changes. Some good examples of scripted-diff: -- [scripted-diff: Rename InitInterfaces to NodeContext](https://github.com/BGL/BGL/commit/301bd41a2e6765b185bd55f4c541f9e27aeea29d) +- [scripted-diff: Rename InitInterfaces to NodeContext](https://github.com/bitcoin/bitcoin/commit/301bd41a2e6765b185bd55f4c541f9e27aeea29d) uses an elegant script to replace occurrences of multiple terms in all source files. -- [scripted-diff: Remove g_connman, g_banman globals](https://github.com/BGL/BGL/commit/301bd41a2e6765b185bd55f4c541f9e27aeea29d) +- [scripted-diff: Remove g_connman, g_banman globals](https://github.com/bitcoin/bitcoin/commit/301bd41a2e6765b185bd55f4c541f9e27aeea29d) replaces specific terms in a list of specific source files. -- [scripted-diff: Replace fprintf with tfm::format](https://github.com/BGL/BGL/commit/fac03ec43a15ad547161e37e53ea82482cc508f9) +- [scripted-diff: Replace fprintf with tfm::format](https://github.com/bitcoin/bitcoin/commit/fac03ec43a15ad547161e37e53ea82482cc508f9) does a global replacement but excludes certain directories. To find all previous uses of scripted diffs in the repository, do: @@ -1370,4 +1370,4 @@ communication: Note: This last convention isn't generally followed outside of [`src/interfaces/`](../src/interfaces/), though it did come up for discussion - before in [#14635](https://github.com/BGL/BGL/pull/14635). + before in [#14635](https://github.com/bitcoin/bitcoin/pull/14635). diff --git a/doc/release-notes.md b/doc/release-notes.md index f2e2bf3fa4..51c93e2c09 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -17,18 +17,18 @@ for the process.* BGL Core version *version* is now available from: - + This release includes new features, various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== diff --git a/doc/release-notes/release-notes-0.10.0.md b/doc/release-notes/release-notes-0.10.0.md index c131772de0..5cb4c09c8f 100644 --- a/doc/release-notes/release-notes-0.10.0.md +++ b/doc/release-notes/release-notes-0.10.0.md @@ -1,13 +1,13 @@ -BGL Core version 0.10.0 is now available from: +Bitcoin Core version 0.10.0 is now available from: - https://BGL.org/bin/0.10.0/ + https://bitcoin.org/bin/0.10.0/ This is a new major version release, bringing both new features and bug fixes. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrading warning --------------------- Because release 0.10.0 makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with older versions of BGL Core or other software: +backwards-compatible with older versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -50,7 +50,7 @@ Notable changes Faster synchronization ---------------------- -BGL Core now uses 'headers-first synchronization'. This means that we first +Bitcoin Core now uses 'headers-first synchronization'. This means that we first ask peers for block headers (a total of 27 megabytes, as of December 2014) and validate those. In a second stage, when the headers have been discovered, we download the blocks. However, as we already know about the whole chain in @@ -172,7 +172,7 @@ improved by making the signatures constant time and deterministic. This change is a result of switching signing to use libsecp256k1 instead of OpenSSL. Libsecp256k1 is a cryptographic library -optimized for the curve BGL uses which was created by BGL +optimized for the curve Bitcoin uses which was created by Bitcoin Core developer Pieter Wuille. There exist attacks[1] against most ECC implementations where an @@ -187,7 +187,7 @@ long time, but this functionality has still not made its way into a released version of OpenSSL. Libsecp256k1 achieves significantly stronger protection: As far as we're aware this is the only deployed implementation of constant time signing for -the curve BGL uses and we have reason to believe that +the curve Bitcoin uses and we have reason to believe that libsecp256k1 is better tested and more thoroughly reviewed than the implementation in OpenSSL. @@ -222,21 +222,21 @@ addresses need to added to the wallet before the payment, though. Consensus library ----------------- -Starting from 0.10.0, the BGL Core distribution includes a consensus library. +Starting from 0.10.0, the Bitcoin Core distribution includes a consensus library. The purpose of this library is to make the verification functionality that is -critical to BGL's consensus available to other applications, e.g. to language -bindings such as [python-BGLlib](https://pypi.python.org/pypi/python-BGLlib) or +critical to Bitcoin's consensus available to other applications, e.g. to language +bindings such as [python-bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or alternative node implementations. -This library is called `libBGLconsensus.so` (or, `.dll` for Windows). -Its interface is defined in the C header [BGLconsensus.h](https://github.com/BGL/BGL/blob/0.10/src/script/BGLconsensus.h). +This library is called `libbitcoinconsensus.so` (or, `.dll` for Windows). +Its interface is defined in the C header [bitcoinconsensus.h](https://github.com/bitcoin/bitcoin/blob/0.10/src/script/bitcoinconsensus.h). In its initial version the API includes two functions: -- `BGLconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction +- `bitcoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction correctly spends the passed scriptPubKey under additional constraints indicated by flags -- `BGLconsensus_version` returns the API version, currently at an experimental `0` +- `bitcoinconsensus_version` returns the API version, currently at an experimental `0` The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface for existing methods should remain stable. @@ -247,25 +247,25 @@ Standard script rules relaxed for P2SH addresses The IsStandard() rules have been almost completely removed for P2SH redemption scripts, allowing applications to make use of any valid script type, such as "n-of-m OR y", hash-locked oracle addresses, etc. -While the BGL protocol has always supported these types of script, +While the Bitcoin protocol has always supported these types of script, actually using them on mainnet has been previously inconvenient as -standard BGL Core nodes wouldn't relay them to miners, nor would +standard Bitcoin Core nodes wouldn't relay them to miners, nor would most miners include them in blocks they mined. -BGL-tx +bitcoin-tx ---------- -It has been observed that many of the RPC functions offered by BGLd are -"pure functions", and operate independently of the BGLd wallet. This +It has been observed that many of the RPC functions offered by bitcoind are +"pure functions", and operate independently of the bitcoind wallet. This included many of the RPC "raw transaction" API functions, such as createrawtransaction. -BGL-tx is a newly introduced command line utility designed to enable easy -manipulation of BGL transactions. A summary of its operation may be -obtained via "BGL-tx --help" Transactions may be created or signed in a +bitcoin-tx is a newly introduced command line utility designed to enable easy +manipulation of bitcoin transactions. A summary of its operation may be +obtained via "bitcoin-tx --help" Transactions may be created or signed in a manner similar to the RPC raw tx API. Transactions may be updated, deleting inputs or outputs, or appending new inputs and outputs. Custom scripts may be -easily composed using a simple text notation, borrowed from the BGL test +easily composed using a simple text notation, borrowed from the bitcoin test suite. This tool may be used for experimenting with new transaction types, signing @@ -273,16 +273,16 @@ multi-party transactions, and many other uses. Long term, the goal is to deprecate and remove "pure function" RPC API calls, as those do not require a server round-trip to execute. -Other utilities "BGL-key" and "BGL-script" have been proposed, making +Other utilities "bitcoin-key" and "bitcoin-script" have been proposed, making key and script operations easily accessible via command line. Mining and relay policy enhancements ------------------------------------ -BGL Core's block templates are now for version 3 blocks only, and any mining +Bitcoin Core's block templates are now for version 3 blocks only, and any mining software relying on its `getblocktemplate` must be updated in parallel to use libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade BGL +If you are solo mining, this will affect you the moment you upgrade Bitcoin Core, which must be done prior to BIP66 achieving its 951/1001 status. If you are mining with the stratum mining protocol: this does not affect you. If you are mining with the getblocktemplate protocol to a pool: this will affect @@ -292,10 +292,10 @@ achieving its 951/1001 status. The `prioritisetransaction` RPC method has been added to enable miners to manipulate the priority of transactions on an individual basis. -BGL Core now supports BIP 22 long polling, so mining software can be +Bitcoin Core now supports BIP 22 long polling, so mining software can be notified immediately of new templates rather than having to poll periodically. -Support for BIP 23 block proposals is now available in BGL Core's +Support for BIP 23 block proposals is now available in Bitcoin Core's `getblocktemplate` method. This enables miners to check the basic validity of their next block before expending work on it, reducing risks of accidental hardforks or mining invalid blocks. @@ -313,9 +313,9 @@ AllowFreeThreshold(), in which case they are relayed subject to the rate limiter BIP 66: strict DER encoding for signatures ------------------------------------------ -BGL Core 0.10 implements BIP 66, which introduces block version 3, and a new +Bitcoin Core 0.10 implements BIP 66, which introduces block version 3, and a new consensus rule, which prohibits non-DER signatures. Such transactions have been -non-standard since BGL v0.8.0 (released in February 2013), but were +non-standard since Bitcoin v0.8.0 (released in February 2013), but were technically still permitted inside blocks. This change breaks the dependency on OpenSSL's signature parsing, and is @@ -337,10 +337,10 @@ Detailed release notes follow. This overview includes changes that affect extern behavior, not code moves, refactors or string updates. RPC: -- `f923c07` Support IPv6 lookup in BGL-cli even when IPv6 only bound on localhost +- `f923c07` Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost - `b641c9c` Fix addnode "onetry": Connect with OpenNetworkConnection - `171ca77` estimatefee / estimatepriority RPC methods -- `b750cf1` Remove cli functionality from BGLd +- `b750cf1` Remove cli functionality from bitcoind - `f6984e8` Add "chain" to getmininginfo, improve help in getblockchaininfo - `99ddc6c` Add nLocalServices info to RPC getinfo - `cf0c47b` Remove getwork() RPC call @@ -391,7 +391,7 @@ Command-line options: - `4278b1d` Clarify error message when invalid -rpcallowip - `6b407e4` -datadir is now allowed in config files - `bdd5b58` Add option `-sysperms` to disable 077 umask (create new files with system default umask) -- `cbe39a3` Add "BGL-tx" command line utility and supporting modules +- `cbe39a3` Add "bitcoin-tx" command line utility and supporting modules - `dbca89b` Trigger -alertnotify if network is upgrading without you - `ad96e7c` Make -reindex cope with out-of-order blocks - `16d5194` Skip reindexed blocks individually @@ -465,7 +465,7 @@ P2P protocol and network code: - `35e408f` Regard connection failures as attempt for addrman - `a3a7317` Introduce 10 minute block download timeout - `3022e7d` Require sufficent priority for relay of free transactions -- `58fda4d` Update seed IPs, based on BGL.sipa.be crawler data +- `58fda4d` Update seed IPs, based on bitcoin.sipa.be crawler data - `18021d0` Remove bitnodes.io from dnsseeds. Validation: @@ -492,13 +492,13 @@ Build system: - `9ce0774` build: Fix windows configure when using --with-qt-libdir - `ea96475` build: Add mention of --disable-wallet to bdb48 error messages - `1dec09b` depends: add shared dependency builder -- `c101c76` build: Add --with-utils (BGL-cli and BGL-tx, default=yes). Help string consistency tweaks. Target sanity check fix +- `c101c76` build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fix - `e432a5f` build: add option for reducing exports (v2) - `6134b43` Fixing condition 'sabotaging' MSVC build - `af0bd5e` osx: fix signing to make Gatekeeper happy (again) - `a7d1f03` build: fix dynamic boost check when --with-boost= is used - `d5fd094` build: fix qt test build when libprotobuf is in a non-standard path -- `2cf5f16` Add libBGLconsensus library +- `2cf5f16` Add libbitcoinconsensus library - `914868a` build: add a deterministic dmg signer - `2d375fe` depends: bump openssl to 1.0.1k - `b7a4ecc` Build: Only check for boost when building code that requires it @@ -522,7 +522,7 @@ Wallet: GUI: - `c21c74b` osx: Fix missing dock menu with qt5 - `b90711c` Fix Transaction details shows wrong To: -- `516053c` Make links in 'About BGL Core' clickable +- `516053c` Make links in 'About Bitcoin Core' clickable - `bdc83e8` Ensure payment request network matches client network - `65f78a1` Add GUI view of peer information - `06a91d9` VerifyDB progress reporting @@ -539,7 +539,7 @@ GUI: - `7007402` Implement SI-style (thin space) thoudands separator - `91cce17` Use fixed-point arithmetic in amount spinbox - `bdba2dd` Remove an obscure option no-one cares about -- `bd0aa10` Replace the temporary file hack currently used to change BGL-Qt's dock icon (OS X) with a buffer-based solution +- `bd0aa10` Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution - `94e1b9e` Re-work overviewpage UI - `8bfdc9a` Better looking trayicon - `b197bf3` disable tray interactions when client model set to 0 @@ -585,8 +585,8 @@ Tests: - `4cac5db` script tests: value with trailing 0x00 is true - `89101c6` script test: test case for 5-byte bools - `d2d9dc0` script tests: add tests for CHECKMULTISIG limits -- `d789386` Add "it works" test for BGL-tx -- `df4d61e` Add BGL-tx tests +- `d789386` Add "it works" test for bitcoin-tx +- `df4d61e` Add bitcoin-tx tests - `aa41ac2` Test IsPushOnly() with invalid push - `6022b5d` Make `script_{valid,invalid}.json` validation flags configurable - `8138cbe` Add automatic script test generation, and actual checksig tests @@ -598,7 +598,7 @@ Tests: - `2b62e17` Clearly separate PUSHDATA and numeric argument MINIMALDATA tests - `16d78bd` Add valid invert of invalid every numeric opcode tests - `f635269` tests: enable alertnotify test for Windows -- `7a41614` tests: allow rpc-tests to get filenames for BGLd and BGL-cli from the environment +- `7a41614` tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment - `5122ea7` tests: fix forknotify.py on windows - `fa7f8cd` tests: remove old pull-tester scripts - `7667850` tests: replace the old (unused since Travis) tests with new rpc test scripts @@ -624,7 +624,7 @@ Tests: Miscellaneous: - `122549f` Fix incorrect checkpoint data for testnet3 - `5bd02cf` Log used config file to debug.log on startup -- `68ba85f` Updated Debian example BGL.conf with config from wiki + removed some cruft and updated comments +- `68ba85f` Updated Debian example bitcoin.conf with config from wiki + removed some cruft and updated comments - `e5ee8f0` Remove -beta suffix - `38405ac` Add comment regarding experimental-use service bits - `be873f6` Issue warning if collecting RandSeed data failed @@ -635,7 +635,7 @@ Miscellaneous: - `cd01a5e` Enable paranoid corruption checks in LevelDB >= 1.16 - `9365937` Add comment about never updating nTimeOffset past 199 samples - `403c1bf` contrib: remove getwork-based pyminer (as getwork API call has been removed) -- `0c3e101` contrib: Added systemd .service file in order to help distributions integrate BGLd +- `0c3e101` contrib: Added systemd .service file in order to help distributions integrate bitcoind - `0a0878d` doc: Add new DNSseed policy - `2887bff` Update coding style and add .clang-format - `5cbda4f` Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope @@ -758,5 +758,5 @@ Thanks to everyone who contributed to this release: - Yoichi Hirai - Zak Wilcox -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.1.md b/doc/release-notes/release-notes-0.10.1.md index 5961b8d49e..8f59f1f68c 100644 --- a/doc/release-notes/release-notes-0.10.1.md +++ b/doc/release-notes/release-notes-0.10.1.md @@ -1,13 +1,13 @@ -BGL Core version 0.10.1 is now available from: +Bitcoin Core version 0.10.1 is now available from: - + This is a new minor version release, bringing bug fixes and translation updates. It is recommended to upgrade to this version. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -48,7 +48,7 @@ Notable changes This is a minor release and hence there are no notable changes. For the notable changes in 0.10, refer to the release notes for the -0.10.0 release at https://github.com/BGL/BGL/blob/v0.10.0/doc/release-notes.md +0.10.0 release at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md 0.10.1 Change log ================= @@ -140,4 +140,4 @@ And all those who contributed additional code review and/or security research: - Sergio Demian Lerner - Sharon Goldberg -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.2.md b/doc/release-notes/release-notes-0.10.2.md index f29385d92e..192ed69d29 100644 --- a/doc/release-notes/release-notes-0.10.2.md +++ b/doc/release-notes/release-notes-0.10.2.md @@ -1,13 +1,13 @@ -BGL Core version 0.10.2 is now available from: +Bitcoin Core version 0.10.2 is now available from: - + This is a new minor version release, bringing minor bug fixes and translation updates. It is recommended to upgrade to this version. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -47,12 +47,12 @@ Notable changes =============== This fixes a serious problem on Windows with data directories that have non-ASCII -characters (https://github.com/BGL/BGL/issues/6078). +characters (https://github.com/bitcoin/bitcoin/issues/6078). For other platforms there are no notable changes. For the notable changes in 0.10, refer to the release notes -at https://github.com/BGL/BGL/blob/v0.10.0/doc/release-notes.md +at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md 0.10.2 Change log ================= @@ -83,4 +83,4 @@ And all those who contributed additional code review and/or security research: - Pieter Wuille - vayvanne -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.3.md b/doc/release-notes/release-notes-0.10.3.md index 2c54cf418e..8a110e562c 100644 --- a/doc/release-notes/release-notes-0.10.3.md +++ b/doc/release-notes/release-notes-0.10.3.md @@ -1,13 +1,13 @@ -BGL Core version 0.10.3 is now available from: +Bitcoin Core version 0.10.3 is now available from: - + This is a new minor version release, bringing security fixes and translation updates. It is recommended to upgrade to this version as soon as possible. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -60,7 +60,7 @@ using distribution provided packages. Additionally, upnp has been disabled by default. This may result in a lower number of reachable nodes on IPv4, however this prevents future libupnpc vulnerabilities from being a structural risk to the network -(see https://github.com/BGL/BGL/pull/6795). +(see https://github.com/bitcoin/bitcoin/pull/6795). Test for LowS signatures before relaying ----------------------------------------- @@ -75,26 +75,26 @@ for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side it will block most transactions made by sufficiently out of date software. Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed BGL software prior to +one was randomly violated by all deployed bitcoin software prior to its discovery. So, while other malleability vectors where made non-standard as soon as they were discovered, this one has remained permitted. Even BIP62 did not propose applying this rule to old version transactions, but conforming implementations have become much more common since BIP62 was initially written. -BGL Core has produced compatible signatures since a28fb70e in +Bitcoin Core has produced compatible signatures since a28fb70e in September 2013, but this didn't make it into a release until 0.9 -in March 2014; BGLj has done so for a similar span of time. -BGLjs and electrum have been more recently updated. +in March 2014; Bitcoinj has done so for a similar span of time. +Bitcoinjs and electrum have been more recently updated. This does not replace the need for BIP62 or similar, as miners can still cooperate to break transactions. Nor does it replace the need for wallet software to handle malleability sanely[1]. This only eliminates the cheap and irritating DOS attack. -[1] On the Malleability of BGL Transactions +[1] On the Malleability of Bitcoin Transactions Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek -http://fc15.ifca.ai/preproceedings/BGL/paper_9.pdf +http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf Minimum relay fee default increase ----------------------------------- @@ -107,7 +107,7 @@ outrageous memory usage on nodes due to the mempool ballooning. This is a temporary measure, bridging the time until a dynamic method for determining this fee is merged (which will be in 0.12). -(see https://github.com/BGL/BGL/pull/6793, as well as the 0.11.0 +(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11.0 release notes, in which this value was suggested) 0.10.3 Change log @@ -162,4 +162,4 @@ And all those who contributed additional code review and/or security research: - timothy on IRC for reporting the issue - Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.4.md b/doc/release-notes/release-notes-0.10.4.md index 36cdd3d74a..38a2c1347d 100644 --- a/doc/release-notes/release-notes-0.10.4.md +++ b/doc/release-notes/release-notes-0.10.4.md @@ -1,6 +1,6 @@ -BGL Core version 0.10.4 is now available from: +Bitcoin Core version 0.10.4 is now available from: - + This is a new minor version release, bringing bug fixes, the BIP65 (CLTV) consensus change, and relay policy preparation for BIP113. It is @@ -8,7 +8,7 @@ recommended to upgrade to this version as soon as possible. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -18,15 +18,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -68,24 +68,24 @@ specified point in the future. blocks if they comply with the BIP65 rules for CLTV. For more information about the soft-forking change, please see - + Graphs showing the progress towards block version 4 adoption may be found at the URLs below: - Block versions over the last 50,000 blocks as progress towards BIP65 - consensus enforcement: + consensus enforcement: - Block versions over the last 2,000 blocks showing the days to the - earliest possible BIP65 consensus-enforced block: + earliest possible BIP65 consensus-enforced block: -**Notice to miners:** BGL Core’s block templates are now for +**Notice to miners:** Bitcoin Core’s block templates are now for version 4 blocks only, and any mining software relying on its getblocktemplate must be updated in parallel to use libblkmaker either version FIXME or any version from FIXME onward. - If you are solo mining, this will affect you the moment you upgrade - BGL Core, which must be done prior to BIP65 achieving its 951/1001 + Bitcoin Core, which must be done prior to BIP65 achieving its 951/1001 status. - If you are mining with the stratum mining protocol: this does not @@ -95,19 +95,19 @@ version FIXME or any version from FIXME onward. will affect you at the pool operator’s discretion, which must be no later than BIP65 achieving its 951/1001 status. -[BIP65]: https://github.com/BGL/bips/blob/master/bip-0065.mediawiki +[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki Windows bug fix for corrupted UTXO database on unclean shutdowns ---------------------------------------------------------------- Several Windows users reported that they often need to reindex the -entire blockchain after an unclean shutdown of BGL Core on Windows +entire blockchain after an unclean shutdown of Bitcoin Core on Windows (or an unclean shutdown of Windows itself). Although unclean shutdowns remain unsafe, this release no longer relies on memory-mapped files for the UTXO database, which significantly reduced the frequency of unclean shutdowns leading to required reindexes during testing. -For more information, see: +For more information, see: Other fixes for database corruption on Windows are expected in the next major release. @@ -129,8 +129,8 @@ git merge commit are mentioned. - #6953 `a2f2fb6` build: disable -Wself-assign - #6953 `cf67d8b` Bugfix: Allow mining on top of old tip blocks for testnet (fixes testnet-in-a-box use case) - #6953 `b3964e3` Drop "with minimal dependencies" from description -- #6953 `43c2789` Split BGL-tx into its own package -- #6953 `dfe0d4d` Include BGL-tx binary on Debian/Ubuntu +- #6953 `43c2789` Split bitcoin-tx into its own package +- #6953 `dfe0d4d` Include bitcoin-tx binary on Debian/Ubuntu - #6953 `612efe8` [Qt] Raise debug window when requested - #6953 `3ad96bd` Fix locking in GetTransaction - #6953 `9c81005` Fix spelling of Qt @@ -169,4 +169,4 @@ Thanks to everyone who directly contributed to this release: And those who contributed additional code review and/or security research. -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.11.0.md b/doc/release-notes/release-notes-0.11.0.md index 0a6dd955a6..28e49fb7ea 100644 --- a/doc/release-notes/release-notes-0.11.0.md +++ b/doc/release-notes/release-notes-0.11.0.md @@ -1,13 +1,13 @@ -BGL Core version 0.11.0 is now available from: +Bitcoin Core version 0.11.0 is now available from: - + This is a new major version release, bringing both new features and bug fixes. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -67,7 +67,7 @@ free transactions (with enough priority) will be accepted. It defaults to 15. Reducing this number reduces the speed at which the mempool can grow due to free transactions. -For example, add the following to `BGL.conf`: +For example, add the following to `bitcoin.conf`: minrelaytxfee=0.00005 limitfreerelay=5 @@ -82,11 +82,11 @@ Block file pruning This release supports running a fully validating node without maintaining a copy of the raw block and undo data on disk. To recap, there are four types of data -related to the blockchain in the BGL system: the raw blocks as received over +related to the blockchain in the bitcoin system: the raw blocks as received over the network (blk???.dat), the undo data (rev???.dat), the block index and the UTXO set (both LevelDB databases). The databases are built from the raw data. -Block pruning allows BGL Core to delete the raw block and undo data once +Block pruning allows Bitcoin Core to delete the raw block and undo data once it's been validated and used to build the databases. At that point, the raw data is used only to relay blocks to other nodes, to handle reorganizations, to look up old transactions (if -txindex is enabled or via the RPC/REST interfaces), or @@ -95,7 +95,7 @@ all blocks in the blockchain. The user specifies how much space to allot for block & undo files. The minimum allowed is 550MB. Note that this is in addition to whatever is required for the -block index and UTXO databases. The minimum was chosen so that BGL Core will +block index and UTXO databases. The minimum was chosen so that Bitcoin Core will be able to maintain at least 288 blocks on disk (two days worth of blocks at 10 minutes per block). In rare instances it is possible that the amount of space used will exceed the pruning target in order to keep the required last 288 @@ -192,7 +192,7 @@ transaction (re)broadcast: One such application is selective Tor usage, where the node runs on the normal internet but transactions are broadcasted over Tor. -For an example script see [BGL-submittx](https://github.com/laanwj/BGL-submittx). +For an example script see [bitcoin-submittx](https://github.com/laanwj/bitcoin-submittx). Privacy: Stream isolation for Tor ---------------------------------- @@ -297,7 +297,7 @@ git merge commit are mentioned. ### Build system - #5501 `c76c9d2` Add mips, mipsel and aarch64 to depends platforms -- #5334 `cf87536` libBGLconsensus: Add pkg-config support +- #5334 `cf87536` libbitcoinconsensus: Add pkg-config support - #5514 `ed11d53` Fix 'make distcheck' - #5505 `a99ef7d` Build winshutdownmonitor.cpp on Windows only - #5582 `e8a6639` Osx toolchain update @@ -309,7 +309,7 @@ git merge commit are mentioned. - #5149 `c7abfa5` Add script to verify all merge commits are signed - #6082 `7abbb7e` qt: disable qt tests when one of the checks for the gui fails - #6244 `0401aa2` configure: Detect (and reject) LibreSSL -- #6269 `95aca44` gitian: Use the new BGL-detached-sigs git repo for OSX signatures +- #6269 `95aca44` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures - #6285 `ef1d506` Fix scheduler build with some boost versions. - #6280 `25c2216` depends: fix Boost 1.55 build on GCC 5 - #6303 `b711599` gitian: add a gitian-win-signer descriptor @@ -346,8 +346,8 @@ git merge commit are mentioned. - #5626 `ab0d798` Fix icon sizes and column width - #5683 `c7b22aa` add new osx dmg background picture - #5620 `7823598` Payment request expiration bug fix -- #5729 `9c4a5a5` Allow unit changes for read-only BGLAmountField -- #5753 `0f44672` Add BGL logo to about screen +- #5729 `9c4a5a5` Allow unit changes for read-only BitcoinAmountField +- #5753 `0f44672` Add bitcoin logo to about screen - #5629 `a956586` Prevent amount overflow problem with payment requests - #5830 `215475a` Don't save geometry for options and about/help window - #5793 `d26f0b2` Honor current network when creating autostart link @@ -392,11 +392,11 @@ git merge commit are mentioned. - #5366 `47a79bb` No longer check osx compatibility in RenameThread - #5689 `07f4386` openssl: abstract out OPENSSL_cleanse - #5708 `8b298ca` Add list of implemented BIPs -- #5809 `46bfbe7` Add BGL-cli man page +- #5809 `46bfbe7` Add bitcoin-cli man page - #5839 `86eb461` keys: remove libsecp256k1 verification until it's actually supported - #5749 `d734d87` Help messages correctly formatted (79 chars) - #5884 `7077fe6` BUGFIX: Stack around the variable 'rv' was corrupted -- #5849 `41259ca` contrib/init/BGLd.openrc: Compatibility with previous OpenRC init script variables +- #5849 `41259ca` contrib/init/bitcoind.openrc: Compatibility with previous OpenRC init script variables - #5950 `41113e3` Fix locale fallback and guard tests against invalid locale settings - #5965 `7c6bfb1` Add git-subtree-check.sh script - #6033 `1623f6e` FreeBSD, OpenBSD thread renaming @@ -404,9 +404,9 @@ git merge commit are mentioned. - #6104 `3e2559c` Show an init message while activating best chain - #6125 `351f73e` Clean up parsing of bool command line args - #5964 `b4c219b` Lightweight task scheduler -- #6116 `30dc3c1` [OSX] rename BGL-Qt.app to BGL-Core.app +- #6116 `30dc3c1` [OSX] rename Bitcoin-Qt.app to Bitcoin-Core.app - #6168 `b3024f0` contrib/linearize: Support linearization of testnet blocks -- #6098 `7708fcd` Update Windows resource files (and add one for BGL-tx) +- #6098 `7708fcd` Update Windows resource files (and add one for bitcoin-tx) - #6159 `e1412d3` Catch errors on datadir lock and pidfile delete - #6186 `182686c` Fix two problems in CSubnet parsing - #6174 `df992b9` doc: add translation strings policy @@ -427,7 +427,7 @@ Thanks to everyone who directly contributed to this release: - azeteki - Ben Holden-Crowther - bikinibabe -- BGLPRReadingGroup +- BitcoinPRReadingGroup - Blake Jakopovic - BtcDrak - charlescharles @@ -501,5 +501,5 @@ And all those who contributed additional code review and/or security research: - Sergio Demian Lerner -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.11.1.md b/doc/release-notes/release-notes-0.11.1.md index 87d718c1e1..799205691e 100644 --- a/doc/release-notes/release-notes-0.11.1.md +++ b/doc/release-notes/release-notes-0.11.1.md @@ -1,13 +1,13 @@ -BGL Core version 0.11.1 is now available from: +Bitcoin Core version 0.11.1 is now available from: - + This is a new minor version release, bringing security fixes. It is recommended to upgrade to this version as soon as possible. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,15 +17,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -61,7 +61,7 @@ using distribution provided packages. Additionally, upnp has been disabled by default. This may result in a lower number of reachable nodes on IPv4, however this prevents future libupnpc vulnerabilities from being a structural risk to the network -(see https://github.com/BGL/BGL/pull/6795). +(see https://github.com/bitcoin/bitcoin/pull/6795). Test for LowS signatures before relaying ----------------------------------------- @@ -76,26 +76,26 @@ for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side it will block most transactions made by sufficiently out of date software. Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed BGL software prior to +one was randomly violated by all deployed bitcoin software prior to its discovery. So, while other malleability vectors where made non-standard as soon as they were discovered, this one has remained permitted. Even BIP62 did not propose applying this rule to old version transactions, but conforming implementations have become much more common since BIP62 was initially written. -BGL Core has produced compatible signatures since a28fb70e in +Bitcoin Core has produced compatible signatures since a28fb70e in September 2013, but this didn't make it into a release until 0.9 -in March 2014; BGLj has done so for a similar span of time. -BGLjs and electrum have been more recently updated. +in March 2014; Bitcoinj has done so for a similar span of time. +Bitcoinjs and electrum have been more recently updated. This does not replace the need for BIP62 or similar, as miners can still cooperate to break transactions. Nor does it replace the need for wallet software to handle malleability sanely[1]. This only eliminates the cheap and irritating DOS attack. -[1] On the Malleability of BGL Transactions +[1] On the Malleability of Bitcoin Transactions Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek -http://fc15.ifca.ai/preproceedings/BGL/paper_9.pdf +http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf Minimum relay fee default increase ----------------------------------- @@ -108,7 +108,7 @@ outrageous memory usage on nodes due to the mempool ballooning. This is a temporary measure, bridging the time until a dynamic method for determining this fee is merged (which will be in 0.12). -(see https://github.com/BGL/BGL/pull/6793, as well as the 0.11 +(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11 release notes, in which this value was suggested) 0.11.1 Change log @@ -124,7 +124,7 @@ git merge commit are mentioned. - #6384 `8e5a969` qt: Force TLS1.0+ for SSL connections - #6471 `92401c2` Depends: bump to qt 5.5 - #6224 `93b606a` Be even stricter in processing unrequested blocks -- #6571 `100ac4e` libBGLconsensus: avoid a crash in multi-threaded environments +- #6571 `100ac4e` libbitcoinconsensus: avoid a crash in multi-threaded environments - #6545 `649f5d9` Do not store more than 200 timedata samples. - #6694 `834e299` [QT] fix thin space word wrap line break issue - #6703 `1cd7952` Backport bugfixes to 0.11 @@ -168,5 +168,5 @@ And those who contributed additional code review and/or security research: - timothy on IRC for reporting the issue - Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.11.2.md b/doc/release-notes/release-notes-0.11.2.md index a1b2199cbc..2351b80656 100644 --- a/doc/release-notes/release-notes-0.11.2.md +++ b/doc/release-notes/release-notes-0.11.2.md @@ -1,6 +1,6 @@ -BGL Core version 0.11.2 is now available from: +Bitcoin Core version 0.11.2 is now available from: - + This is a new minor version release, bringing bug fixes, the BIP65 (CLTV) consensus change, and relay policy preparation for BIP113. It is @@ -8,7 +8,7 @@ recommended to upgrade to this version as soon as possible. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -18,15 +18,15 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ------------------ Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -68,24 +68,24 @@ specified point in the future. blocks if they comply with the BIP65 rules for CLTV. For more information about the soft-forking change, please see - + Graphs showing the progress towards block version 4 adoption may be found at the URLs below: - Block versions over the last 50,000 blocks as progress towards BIP65 - consensus enforcement: + consensus enforcement: - Block versions over the last 2,000 blocks showing the days to the - earliest possible BIP65 consensus-enforced block: + earliest possible BIP65 consensus-enforced block: -**Notice to miners:** BGL Core’s block templates are now for +**Notice to miners:** Bitcoin Core’s block templates are now for version 4 blocks only, and any mining software relying on its getblocktemplate must be updated in parallel to use libblkmaker either version 0.4.3 or any version from 0.5.2 onward. - If you are solo mining, this will affect you the moment you upgrade - BGL Core, which must be done prior to BIP65 achieving its 951/1001 + Bitcoin Core, which must be done prior to BIP65 achieving its 951/1001 status. - If you are mining with the stratum mining protocol: this does not @@ -95,12 +95,12 @@ version 0.4.3 or any version from 0.5.2 onward. will affect you at the pool operator’s discretion, which must be no later than BIP65 achieving its 951/1001 status. -[BIP65]: https://github.com/BGL/bips/blob/master/bip-0065.mediawiki +[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP113 mempool-only locktime enforcement using GetMedianTimePast() ---------------------------------------------------------------- -BGL transactions currently may specify a locktime indicating when +Bitcoin transactions currently may specify a locktime indicating when they may be added to a valid block. Current consensus rules require that blocks have a block header time greater than the locktime specified in any transaction in that block. @@ -143,19 +143,19 @@ forward. To compensate, subtract one hour (3,600 seconds) from your locktimes to allow those transactions to be included in mempools at approximately the expected time. -[BIP113]: https://github.com/BGL/bips/blob/master/bip-0113.mediawiki +[BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki Windows bug fix for corrupted UTXO database on unclean shutdowns ---------------------------------------------------------------- Several Windows users reported that they often need to reindex the -entire blockchain after an unclean shutdown of BGL Core on Windows +entire blockchain after an unclean shutdown of Bitcoin Core on Windows (or an unclean shutdown of Windows itself). Although unclean shutdowns remain unsafe, this release no longer relies on memory-mapped files for the UTXO database, which significantly reduced the frequency of unclean shutdowns leading to required reindexes during testing. -For more information, see: +For more information, see: Other fixes for database corruption on Windows are expected in the next major release. @@ -176,8 +176,8 @@ git merge commit are mentioned. - #6351 `6af25b0` Add BIP65 to getblockchaininfo softforks list - #6688 `01878c9` Fix locking in GetTransaction - #6653 `b3eaa30` [Qt] Raise debug window when requested -- #6600 `1e672ae` Debian/Ubuntu: Include BGL-tx binary -- #6600 `2394f4d` Debian/Ubuntu: Split BGL-tx into its own package +- #6600 `1e672ae` Debian/Ubuntu: Include bitcoin-tx binary +- #6600 `2394f4d` Debian/Ubuntu: Split bitcoin-tx into its own package - #5987 `33d6825` Bugfix: Allow mining on top of old tip blocks for testnet - #6852 `21e58b8` build: make sure OpenSSL heeds noexecstack - #6846 `af6edac` alias `-h` for `--help` @@ -214,4 +214,4 @@ Thanks to everyone who directly contributed to this release: And those who contributed additional code review and/or security research. -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.12.0.md b/doc/release-notes/release-notes-0.12.0.md index 0822636d83..bc0d5ea3b0 100644 --- a/doc/release-notes/release-notes-0.12.0.md +++ b/doc/release-notes/release-notes-0.12.0.md @@ -1,12 +1,12 @@ -BGL Core version 0.12.0 is now available from: +Bitcoin Core version 0.12.0 is now available from: - + This is a new major version release, bringing new features and other improvements. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -16,8 +16,8 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ----------------- @@ -26,7 +26,7 @@ Downgrade warning Because release 0.10.0 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of BGL Core or other software: +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: * Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or @@ -48,10 +48,10 @@ This does not affect wallet forward or backward compatibility. Because release 0.12.0 and later will obfuscate the chainstate on every fresh sync or reindex, the chainstate is not backwards-compatible with -pre-0.12 versions of BGL Core or other software. +pre-0.12 versions of Bitcoin Core or other software. If you want to downgrade after you have done a reindex with 0.12.0 or later, -you will need to reindex when you first start BGL Core version 0.11 or +you will need to reindex when you first start Bitcoin Core version 0.11 or earlier. Notable changes @@ -60,8 +60,8 @@ Notable changes Signature validation using libsecp256k1 --------------------------------------- -ECDSA signatures inside BGL transactions now use validation using -[libsecp256k1](https://github.com/BGL-core/secp256k1) instead of OpenSSL. +ECDSA signatures inside Bitcoin transactions now use validation using +[libsecp256k1](https://github.com/bitcoin-core/secp256k1) instead of OpenSSL. Depending on the platform, this means a significant speedup for raw signature validation speed. The advantage is largest on x86_64, where validation is over @@ -98,7 +98,7 @@ Direct headers announcement (BIP 130) ------------------------------------- Between compatible peers, [BIP 130] -(https://github.com/BGL/bips/blob/master/bip-0130.mediawiki) +(https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki) direct headers announcement is used. This means that blocks are advertised by announcing their headers directly, instead of just announcing the hash. In a reorganization, all new headers are sent, instead of just the new tip. This @@ -107,15 +107,15 @@ can often prevent an extra roundtrip before the actual block is downloaded. Memory pool limiting -------------------- -Previous versions of BGL Core had their mempool limited by checking +Previous versions of Bitcoin Core had their mempool limited by checking a transaction's fees against the node's minimum relay fee. There was no upper bound on the size of the mempool and attackers could send a large number of transactions paying just slighly more than the default minimum relay fee to crash nodes with relatively low RAM. A temporary workaround -for previous versions of BGL Core was to raise the default minimum +for previous versions of Bitcoin Core was to raise the default minimum relay fee. -BGL Core 0.12 will have a strict maximum size on the mempool. The +Bitcoin Core 0.12 will have a strict maximum size on the mempool. The default value is 300 MB and can be configured with the `-maxmempool` parameter. Whenever a transaction would cause the mempool to exceed its maximum size, the transaction that (along with in-mempool descendants) has @@ -124,7 +124,7 @@ minimum relay feerate will be increased to match this feerate plus the initial minimum relay feerate. The initial minimum relay feerate is set to 1000 satoshis per kB. -BGL Core 0.12 also introduces new default policy limits on the length and +Bitcoin Core 0.12 also introduces new default policy limits on the length and size of unconfirmed transaction chains that are allowed in the mempool (generally limiting the length of unconfirmed chains to 25 transactions, with a total size of 101 KB). These limits can be overridden using command line @@ -134,11 +134,11 @@ Opt-in Replace-by-fee transactions ---------------------------------- It is now possible to replace transactions in the transaction memory pool of -BGL Core 0.12 nodes. BGL Core will only allow replacement of +Bitcoin Core 0.12 nodes. Bitcoin Core will only allow replacement of transactions which have any of their inputs' `nSequence` number set to less than `0xffffffff - 1`. Moreover, a replacement transaction may only be accepted when it pays sufficient fee, as described in [BIP 125] -(https://github.com/BGL/bips/blob/master/bip-0125.mediawiki). +(https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki). Transaction replacement can be disabled with a new command line option, `-mempoolreplacement=0`. Transactions signaling replacement under BIP125 will @@ -156,7 +156,7 @@ updated RPC calls `gettransaction` and `listtransactions`, which now have an additional field in the output indicating if a transaction is replaceable under BIP125 ("bip125-replaceable"). -Note that the wallet in BGL Core 0.12 does not yet have support for +Note that the wallet in Bitcoin Core 0.12 does not yet have support for creating transactions that would be replaceable under BIP 125. @@ -173,7 +173,7 @@ overridden with the option `-rpccookiefile`. This is similar to Tor's CookieAuthentication: see https://www.torproject.org/docs/tor-manual.html.en -This allows running BGLd without having to do any manual configuration. +This allows running bitcoind without having to do any manual configuration. Relay: Any sequence of pushdatas in OP_RETURN outputs now allowed ----------------------------------------------------------------- @@ -196,14 +196,14 @@ returned (previously all relevant hashes were returned). Relay and Mining: Priority transactions --------------------------------------- -BGL Core has a heuristic 'priority' based on coin value and age. This +Bitcoin Core has a heuristic 'priority' based on coin value and age. This calculation is used for relaying of transactions which do not pay the minimum relay fee, and can be used as an alternative way of sorting -transactions for mined blocks. BGL Core will relay transactions with +transactions for mined blocks. Bitcoin Core will relay transactions with insufficient fees depending on the setting of `-limitfreerelay=` (default: `r=15` kB per minute) and `-blockprioritysize=`. -In BGL Core 0.12, when mempool limit has been reached a higher minimum +In Bitcoin Core 0.12, when mempool limit has been reached a higher minimum relay fee takes effect to limit memory usage. Transactions which do not meet this higher effective minimum relay fee will not be relayed or mined even if they rank highly according to the priority heuristic. @@ -224,7 +224,7 @@ Note, however, that if mining priority transactions is left disabled, the priority delta will be ignored and only the fee metric will be effective. This internal automatic prioritization handling is being considered for removal -entirely in BGL Core 0.13, and it is at this time undecided whether the +entirely in Bitcoin Core 0.13, and it is at this time undecided whether the more accurate priority calculation for chained unconfirmed transactions will be restored. Community direction on this topic is particularly requested to help set project priorities. @@ -234,15 +234,15 @@ Automatically use Tor hidden services Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket API, to create and destroy 'ephemeral' hidden services programmatically. -BGL Core has been updated to make use of this. +Bitcoin Core has been updated to make use of this. This means that if Tor is running (and proper authorization is available), -BGL Core automatically creates a hidden service to listen on, without -manual configuration. BGL Core will also use Tor automatically to connect +Bitcoin Core automatically creates a hidden service to listen on, without +manual configuration. Bitcoin Core will also use Tor automatically to connect to other .onion nodes if the control socket can be successfully opened. This will positively affect the number of available .onion nodes and their usage. -This new feature is enabled by default if BGL Core is listening, and +This new feature is enabled by default if Bitcoin Core is listening, and a connection to Tor can be made. It can be configured with the `-listenonion`, `-torcontrol` and `-torpassword` settings. To show verbose debugging information, pass `-debug=tor`. @@ -250,7 +250,7 @@ information, pass `-debug=tor`. Notifications through ZMQ ------------------------- -BGLd can now (optionally) asynchronously notify clients through a +Bitcoind can now (optionally) asynchronously notify clients through a ZMQ-based PUB socket of the arrival of new transactions and blocks. This feature requires installation of the ZMQ C API library 4.x and configuring its use through the command line or configuration file. @@ -263,8 +263,8 @@ Various improvements have been made to how the wallet calculates transaction fees. Users can decide to pay a predefined fee rate by setting `-paytxfee=` -(or `settxfee ` rpc during runtime). A value of `n=0` signals BGL -Core to use floating fees. By default, BGL Core will use floating +(or `settxfee ` rpc during runtime). A value of `n=0` signals Bitcoin +Core to use floating fees. By default, Bitcoin Core will use floating fees. Based on past transaction data, floating fees approximate the fees @@ -275,9 +275,9 @@ Sometimes, it is not possible to give good estimates, or an estimate at all. Therefore, a fallback value can be set with `-fallbackfee=` (default: `0.0002` BTC/kB). -At all times, BGL Core will cap fees at `-maxtxfee=` (default: +At all times, Bitcoin Core will cap fees at `-maxtxfee=` (default: 0.10) BTC. -Furthermore, BGL Core will never create transactions paying less than +Furthermore, Bitcoin Core will never create transactions paying less than the current minimum relay fee. Finally, a user can set the minimum fee rate for all transactions with `-mintxfee=`, which defaults to 1000 satoshis per kB. @@ -320,7 +320,7 @@ However, rescans as well as the RPCs `importwallet`, `importaddress`, `importprivkey` are disabled. To enable block pruning set `prune=` on the command line or in -`BGL.conf`, where `N` is the number of MiB to allot for +`bitcoin.conf`, where `N` is the number of MiB to allot for raw block & undo data. A value of 0 disables pruning. The minimal value above 0 is 550. Your @@ -331,13 +331,13 @@ practice. In future releases, a higher value may also help the network as a whole: stored blocks could be served to other nodes. For further information about pruning, you may also consult the [release -notes of v0.11.0](https://github.com/BGL/BGL/blob/v0.11.0/doc/release-notes.md#block-file-pruning). +notes of v0.11.0](https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning). `NODE_BLOOM` service bit ------------------------ Support for the `NODE_BLOOM` service bit, as described in [BIP -111](https://github.com/BGL/bips/blob/master/bip-0111.mediawiki), has been +111](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki), has been added to the P2P protocol code. BIP 111 defines a service bit to allow peers to advertise that they support @@ -369,7 +369,7 @@ RPC: Low-level API changes * The `asm` property of each scriptSig now contains the decoded signature hash type for each signature that provides a valid defined hash type. -* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/BGL/bips/blob/master/bip-0065.mediawiki) +* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) The following items contain assembly representations of scriptSig signatures and are affected by this change: @@ -379,7 +379,7 @@ and are affected by this change: - RPC `decodescript` - REST `/rest/tx/` (JSON format) - REST `/rest/block/` (JSON format when including extended tx details) -- `BGL-tx -json` +- `bitcoin-tx -json` For example, the `scriptSig.asm` property of a transaction input that previously showed an assembly representation of: @@ -429,16 +429,16 @@ caching. A sample config for apache2 could look like: SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key - + ProxyPass http://127.0.0.1:8332/ ProxyPassReverse http://127.0.0.1:8332/ # optional enable digest auth # AuthType Digest # ... - # optional bypass BGLd rpc basic auth + # optional bypass bitcoind rpc basic auth # RequestHeader set Authorization "Basic " - # get the from the shell with: base64 <<< BGLrpc: + # get the from the shell with: base64 <<< bitcoinrpc: # Or, balance the load: @@ -459,7 +459,7 @@ Other P2P Changes ----------------- The list of banned peers is now stored on disk rather than in memory. -Restarting BGLd will no longer clear out the list of banned peers; instead +Restarting bitcoind will no longer clear out the list of banned peers; instead a new RPC call (`clearbanned`) can be used to manually clear the list. The new `setban` RPC call can also be used to manually ban or unban a peer. @@ -637,14 +637,14 @@ git merge commit are mentioned. ### Build system - #6210 `0e4f2a0` build: disable optional use of gmp in internal secp256k1 build (Wladimir J. van der Laan) -- #6214 `87406aa` [OSX] revert renaming of BGL-Qt.app and use CFBundleDisplayName (partial revert of #6116) (Jonas Schnelli) +- #6214 `87406aa` [OSX] revert renaming of Bitcoin-Qt.app and use CFBundleDisplayName (partial revert of #6116) (Jonas Schnelli) - #6218 `9d67b10` build/gitian misc updates (Cory Fields) -- #6269 `d4565b6` gitian: Use the new BGL-detached-sigs git repo for OSX signatures (Cory Fields) +- #6269 `d4565b6` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures (Cory Fields) - #6418 `d4a910c` Add autogen.sh to source tarball. (randy-waterhouse) - #6373 `1ae3196` depends: non-qt bumps for 0.12 (Cory Fields) - #6434 `059b352` Preserve user-passed CXXFLAGS with --enable-debug (Gavin Andresen) - #6501 `fee6554` Misc build fixes (Cory Fields) -- #6600 `ef4945f` Include BGL-tx binary on Debian/Ubuntu (Zak Wilcox) +- #6600 `ef4945f` Include bitcoin-tx binary on Debian/Ubuntu (Zak Wilcox) - #6619 `4862708` depends: bump miniupnpc and ccache (Michael Ford) - #6801 `ae69a75` [depends] Latest config.guess and config.sub (Michael Ford) - #6938 `193f7b5` build: If both Qt4 and Qt5 are installed, use Qt5 (Wladimir J. van der Laan) @@ -719,7 +719,7 @@ git merge commit are mentioned. - #6337 `0564c5b` Testing infrastructure: mocktime fixes (Gavin Andresen) - #6350 `60abba1` add unit tests for the decodescript rpc (mruddy) - #5881 `3203a08` Fix and improve txn_doublespend.py test (Tom Harding) -- #6390 `6a73d66` tests: Fix BGL-tx signing test case (Wladimir J. van der Laan) +- #6390 `6a73d66` tests: Fix bitcoin-tx signing test case (Wladimir J. van der Laan) - #6368 `7fc25c2` CLTV: Add more tests to improve coverage (Esteban Ordano) - #6414 `5121c68` Fix intermittent test failure, reduce test time (Tom Harding) - #6417 `44fa82d` [QA] fix possible reorg issue in (fund)rawtransaction(s).py RPC test (Jonas Schnelli) @@ -732,7 +732,7 @@ git merge commit are mentioned. - #6509 `bb4faee` Fix race condition on test node shutdown (Casey Rodarmor) - #6523 `561f8af` Add p2p-fullblocktest.py (Casey Rodarmor) - #6590 `981fd92` Fix stale socket rebinding and re-enable python tests for Windows (Cory Fields) -- #6730 `cb4d6d0` build: Remove dependency of BGL-cli on secp256k1 (Wladimir J. van der Laan) +- #6730 `cb4d6d0` build: Remove dependency of bitcoin-cli on secp256k1 (Wladimir J. van der Laan) - #6616 `5ab5dca` Regression Tests: Migrated rpc-tests.sh to all Python rpc-tests.py (Peter Tschipper) - #6720 `d479311` Creates unittests for addrman, makes addrman more testable. (Ethan Heilman) - #6853 `c834f56` Added fPowNoRetargeting field to Consensus::Params (Eric Lombrozo) @@ -750,7 +750,7 @@ git merge commit are mentioned. - #7063 `6abf6eb` [Tests] Add prioritisetransaction RPC test (Suhas Daftuar) - #7137 `16f4a6e` Tests: Explicitly set chain limits in replace-by-fee test (Suhas Daftuar) - #7216 `9572e49` Removed offline testnet DNSSeed 'alexykot.me'. (tnull) -- #7209 `f3ad812` test: don't override BGLD and BGLCLI if they're set (Wladimir J. van der Laan) +- #7209 `f3ad812` test: don't override BITCOIND and BITCOINCLI if they're set (Wladimir J. van der Laan) - #7226 `301f16a` Tests: Add more tests to p2p-fullblocktest (Suhas Daftuar) - #7153 `9ef7c54` [Tests] Add mempool_limit.py test (Jonas Schnelli) - #7170 `453c567` tests: Disable Tor interaction (Wladimir J. van der Laan) @@ -764,9 +764,9 @@ git merge commit are mentioned. - #5975 `1fea667` Consensus: Decouple ContextualCheckBlockHeader from checkpoints (Jorge Timón) - #6061 `eba2f06` Separate Consensus::CheckTxInputs and GetSpendHeight in CheckInputs (Jorge Timón) - #5994 `786ed11` detach wallet from miner (Jonas Schnelli) -- #6387 `11576a5` [BGL-cli] improve error output (Jonas Schnelli) -- #6401 `6db53b4` Add BGLD_SIGTERM_TIMEOUT to OpenRC init scripts (Florian Schmaus) -- #6430 `b01981e` doc: add documentation for shared library libBGLconsensus (Braydon Fuller) +- #6387 `11576a5` [bitcoin-cli] improve error output (Jonas Schnelli) +- #6401 `6db53b4` Add BITCOIND_SIGTERM_TIMEOUT to OpenRC init scripts (Florian Schmaus) +- #6430 `b01981e` doc: add documentation for shared library libbitcoinconsensus (Braydon Fuller) - #6372 `dcc495e` Update Linearize tool to support Windows paths; fix variable scope; update README and example configuration (Paul Georgiou) - #6453 `8fe5cce` Separate core memory usage computation in core_memusage.h (Pieter Wuille) - #6149 `633fe10` Buffer log messages and explicitly open logs (Adam Weiss) @@ -891,4 +891,4 @@ Thanks to everyone who directly contributed to this release: - Zak Wilcox - zathras-crypto -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.12.1.md b/doc/release-notes/release-notes-0.12.1.md index 83d3b08a45..610cd481de 100644 --- a/doc/release-notes/release-notes-0.12.1.md +++ b/doc/release-notes/release-notes-0.12.1.md @@ -1,13 +1,13 @@ -BGL Core version 0.12.1 is now available from: +Bitcoin Core version 0.12.1 is now available from: - + This is a new minor version release, including the BIP9, BIP68 and BIP112 softfork, various bugfixes and updated translations. Please report bugs using the issue tracker at github: - + Upgrading and downgrading ========================= @@ -17,8 +17,8 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Downgrade warning ----------------- @@ -27,10 +27,10 @@ Downgrade warning Because release 0.12.0 and later will obfuscate the chainstate on every fresh sync or reindex, the chainstate is not backwards-compatible with -pre-0.12 versions of BGL Core or other software. +pre-0.12 versions of Bitcoin Core or other software. If you want to downgrade after you have done a reindex with 0.12.0 or later, -you will need to reindex when you first start BGL Core version 0.11 or +you will need to reindex when you first start Bitcoin Core version 0.11 or earlier. Notable changes @@ -49,15 +49,15 @@ bits together with setting bit 0 to indicate support for this combined deployment, shown as "csv" in the `getblockchaininfo` RPC call. For more information about the soft forking change, please see - + This specific backport pull-request can be viewed at - + -[BIP9]: https://github.com/BGL/bips/blob/master/bip-0009.mediawiki -[BIP68]: https://github.com/BGL/bips/blob/master/bip-0068.mediawiki -[BIP112]: https://github.com/BGL/bips/blob/master/bip-0112.mediawiki -[BIP113]: https://github.com/BGL/bips/blob/master/bip-0113.mediawiki +[BIP9]: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki +[BIP68]: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki +[BIP112]: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki +[BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki BIP68 soft fork to enforce sequence locks for relative locktime --------------------------------------------------------------- @@ -68,27 +68,27 @@ invalid for a defined period of time after confirmation of its corresponding outpoint. For more information about the implementation, see - + BIP112 soft fork to enforce OP_CHECKSEQUENCEVERIFY -------------------------------------------------- [BIP112][] redefines the existing OP_NOP3 as OP_CHECKSEQUENCEVERIFY (CSV) -for a new opcode in the BGL scripting system that in combination with +for a new opcode in the Bitcoin scripting system that in combination with [BIP68][] allows execution pathways of a script to be restricted based on the age of the output being spent. For more information about the implementation, see - + BIP113 locktime enforcement soft fork ------------------------------------- -BGL Core 0.11.2 previously introduced mempool-only locktime +Bitcoin Core 0.11.2 previously introduced mempool-only locktime enforcement using GetMedianTimePast(). This release seeks to consensus enforce the rule. -BGL transactions currently may specify a locktime indicating when +Bitcoin transactions currently may specify a locktime indicating when they may be added to a valid block. Current consensus rules require that blocks have a block header time greater than the locktime specified in any transaction in that block. @@ -132,7 +132,7 @@ locktimes to allow those transactions to be included in mempools at approximately the expected time. For more information about the implementation, see - + Miscellaneous ------------- @@ -194,5 +194,5 @@ Thanks to everyone who directly contributed to this release: - Suhas Daftuar - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.13.0.md b/doc/release-notes/release-notes-0.13.0.md index 0bd58b395a..4c3cb97df3 100644 --- a/doc/release-notes/release-notes-0.13.0.md +++ b/doc/release-notes/release-notes-0.13.0.md @@ -1,28 +1,28 @@ -BGL Core version 0.13.0 is now available from: +Bitcoin Core version 0.13.0 is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a BGL +updates will be released anymore. Without security updates, using a bitcoin wallet on a XP machine is irresponsible at least. -In addition to that, with 0.12.x there have been varied reports of BGL Core -randomly crashing on Windows XP. It is [not clear](https://github.com/BGL/BGL/issues/7681#issuecomment-217439891) +In addition to that, with 0.12.x there have been varied reports of Bitcoin Core +randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) what the source of these crashes is, but it is likely that upstream libraries such as Qt are no longer being tested on XP. @@ -48,21 +48,21 @@ For this reason the default was changed to 300 MiB in this release. For nodes on low-memory systems, the database cache can be changed back to 100 MiB (or to another value) by either: -- Adding `dbcache=100` in BGL.conf +- Adding `dbcache=100` in bitcoin.conf - Changing it in the GUI under `Options → Size of database cache` Note that the database cache setting has the most performance impact during initial sync of a node, and when catching up after downtime. -BGL-cli: arguments privacy +bitcoin-cli: arguments privacy ------------------------------ The RPC command line client gained a new argument, `-stdin` to read extra arguments from standard input, one per line until EOF/Ctrl-D. For example: - $ src/BGL-cli -stdin walletpassphrase + $ src/bitcoin-cli -stdin walletpassphrase mysecretcode 120 ..... press Ctrl-D here to end input @@ -76,7 +76,7 @@ table by any user on the system. C++11 and Python 3 ------------------ -Various code modernizations have been done. The BGL Core code base has +Various code modernizations have been done. The Bitcoin Core code base has started using C++11. This means that a C++11-capable compiler is now needed for building. Effectively this means GCC 4.7 or higher, or Clang 3.3 or higher. @@ -95,9 +95,9 @@ executables. The following extra files can be found in the download directory or torrent: -- `BGL-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting +- `bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting the 32-bit ARMv7-A architecture. -- `BGL-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting +- `bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting the 64-bit ARMv8-A architecture. ARM builds are still experimental. If you have problems on a certain device or @@ -122,7 +122,7 @@ in PR 8068. The primary goal is reducing the bandwidth spikes at relay time, though in many cases it also reduces propagation delay. It is automatically enabled between compatible peers. -[BIP 152](https://github.com/BGL/bips/blob/master/bip-0152.mediawiki) +[BIP 152](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki) As a side-effect, ordinary non-mining nodes will download and upload blocks faster if those blocks were produced by miners using similar transaction @@ -156,23 +156,23 @@ You can't disable HD key generation once you have created a HD wallet. There is no distinction between internal (change) and external keys. -HD wallets are incompatible with older versions of BGL Core. +HD wallets are incompatible with older versions of Bitcoin Core. -[Pull request](https://github.com/BGL/BGL/pull/8035/files), [BIP 32](https://github.com/BGL/bips/blob/master/bip-0032.mediawiki) +[Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) Segregated Witness ------------------ The code preparations for Segregated Witness ("segwit"), as described in [BIP -141](https://github.com/BGL/bips/blob/master/bip-0141.mediawiki), [BIP -143](https://github.com/BGL/bips/blob/master/bip-0143.mediawiki), [BIP -144](https://github.com/BGL/bips/blob/master/bip-0144.mediawiki), and [BIP -145](https://github.com/BGL/bips/blob/master/bip-0145.mediawiki) are +141](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki), [BIP +143](https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki), [BIP +144](https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki), and [BIP +145](https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki) are finished and included in this release. However, BIP 141 does not yet specify activation parameters on mainnet, and so this release does not support segwit use on mainnet. Testnet use is supported, and after BIP 141 is updated with -proposed parameters, a future release of BGL Core is expected that +proposed parameters, a future release of Bitcoin Core is expected that implements those parameters for mainnet. Furthermore, because segwit activation is not yet specified for mainnet, @@ -199,7 +199,7 @@ The command line option `-blockmaxsize` remains an option to specify the maximum number of serialized bytes in a generated block. In addition, the new command line option `-blockmaxweight` has been added, which specifies the maximum "block weight" of a generated block, as defined by [BIP 141 (Segregated -Witness)] (https://github.com/BGL/bips/blob/master/bip-0141.mediawiki). +Witness)] (https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki). In preparation for Segregated Witness, the mining algorithm has been modified to optimize transaction selection for a given block weight, rather than a given @@ -216,7 +216,7 @@ support `-blockmaxsize` performs additional computation to ensure that constraint is met. (Note that for mainnet, in this release, the equivalent parameter for `-blockmaxweight` would be four times the desired `-blockmaxsize`. See [BIP 141] -(https://github.com/BGL/bips/blob/master/bip-0141.mediawiki) for additional +(https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki) for additional details.) In the future, the `-blockmaxsize` option may be removed, as block creation is @@ -232,7 +232,7 @@ files on disk. These two have now been split up, so that all blocks are known before validation starts. This was necessary to make certain optimizations that are available during normal synchronizations also available during reindexing. -The two phases are distinct in the BGL-Qt GUI. During the first one, +The two phases are distinct in the Bitcoin-Qt GUI. During the first one, "Reindexing blocks on disk" is shown. During the second (slower) one, "Processing blocks on disk" is shown. @@ -277,7 +277,7 @@ Low-level P2P changes - The optional new p2p message "feefilter" is implemented and the protocol version is bumped to 70013. Upon receiving a feefilter message from a peer, a node will not send invs for any transactions which do not meet the filter - feerate. [BIP 133](https://github.com/BGL/bips/blob/master/bip-0133.mediawiki) + feerate. [BIP 133](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki) - The P2P alert system has been removed in PR #7692 and the `alert` P2P message is no longer supported. @@ -326,10 +326,10 @@ Low-level RPC changes - Asm script outputs replacements for OP_NOP2 and OP_NOP3 - OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP -65](https://github.com/BGL/bips/blob/master/bip-0065.mediawiki) +65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) - OP_NOP3 has been renamed to OP_CHECKSEQUENCEVERIFY by [BIP -112](https://github.com/BGL/bips/blob/master/bip-0112.mediawiki) +112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki) - The following outputs are affected by this change: @@ -338,7 +338,7 @@ Low-level RPC changes - RPC `decodescript` - REST `/rest/tx/` (JSON format) - REST `/rest/block/` (JSON format when including extended tx details) - - `BGL-tx -json` + - `bitcoin-tx -json` - The sorting of the output of the `getrawmempool` output has changed. @@ -358,7 +358,7 @@ Low-level ZMQ changes listeners to detect lost notifications. The sequence number is always the last element in a multi-part ZMQ notification and therefore backward compatible. Each message type has its own counter. - PR [#7762](https://github.com/BGL/BGL/pull/7762). + PR [#7762](https://github.com/bitcoin/bitcoin/pull/7762). 0.13.0 Change log @@ -375,7 +375,7 @@ git merge commit are mentioned. - #7326 `2cd004b` Fix typo, wrong information in gettxout help text (paveljanik) - #7222 `82429d0` Indicate which transactions are signaling opt-in RBF (sdaftuar) - #7480 `b49a623` Changed getnetworkhps value to double to avoid overflow (instagibbs) -- #7550 `8b958ab` Input-from-stdin mode for BGL-cli (laanwj) +- #7550 `8b958ab` Input-from-stdin mode for bitcoin-cli (laanwj) - #7670 `c9a1265` Use cached block hash in blockToJSON() (rat4) - #7726 `9af69fa` Correct importaddress help reference to importpubkey (CypherGrue) - #7766 `16555b6` Register calls where they are defined (laanwj) @@ -540,7 +540,7 @@ git merge commit are mentioned. - #7604 `354b03d` build: Remove spurious dollar sign. Fixes #7189 (dooglus) - #7605 `7f001bd` Remove openssl info from init/log and from Qt debug window (jonasschnelli) - #7628 `87d6562` Add 'copy full transaction details' option (ericshawlinux) -- #7613 `3798e5d` Add autocomplete to BGL-qt's console window (GamerSg) +- #7613 `3798e5d` Add autocomplete to bitcoin-qt's console window (GamerSg) - #7668 `b24266c` Fix history deletion bug after font size change (achow101) - #7680 `41d2dfa` Remove reflection from `about` icon (laanwj) - #7686 `f034bce` Remove 0-fee from send dialog (MarcoFalke) @@ -557,13 +557,13 @@ git merge commit are mentioned. - #8014 `77b49ac` Sort transactions by date (Tyler-Hardin) - #8073 `eb2f6f7` askpassphrasedialog: Clear pass fields on accept (rat4) - #8129 `ee1533e` Fix RPC console auto completer (UdjinM6) -- #7636 `fb0ac48` Add BGL address label to request payment QR code (makevoid) +- #7636 `fb0ac48` Add bitcoin address label to request payment QR code (makevoid) - #8231 `760a6c7` Fix a bug where the SplashScreen will not be hidden during startup (jonasschnelli) -- #8256 `af2421c` BUG: BGL-qt crash (fsb4000) -- #8257 `ff03c50` Do not ask a UI question from BGLd (sipa) +- #8256 `af2421c` BUG: bitcoin-qt crash (fsb4000) +- #8257 `ff03c50` Do not ask a UI question from bitcoind (sipa) - #8288 `91abb77` Network-specific example address (laanwj) - #7707 `a914968` UI support for abandoned transactions (jonasschnelli) -- #8207 `f7a403b` Add a link to the BGL-Core repository and website to the About Dialog (MarcoFalke) +- #8207 `f7a403b` Add a link to the Bitcoin-Core repository and website to the About Dialog (MarcoFalke) - #8281 `6a87eb0` Remove client name from debug window (laanwj) - #8407 `45eba4b` Add dbcache migration path (jonasschnelli) @@ -650,7 +650,7 @@ git merge commit are mentioned. - #8038 `e2bf830` Various minor fixes (MarcoFalke) - #8072 `1b87e5b` Travis: 'make check' in parallel and verbose (theuni) - #8056 `8844ef1` Remove hardcoded "4 nodes" from test_framework (MarcoFalke) -- #8047 `37f9a1f` Test_framework: Set wait-timeout for BGLd procs (MarcoFalke) +- #8047 `37f9a1f` Test_framework: Set wait-timeout for bitcoind procs (MarcoFalke) - #8095 `6700cc9` Test framework: only cleanup on successful test runs (sdaftuar) - #8098 `06bd4f6` Test_framework: Append portseed to tmpdir (MarcoFalke) - #8104 `6ff2c8d` Add timeout to sync_blocks() and sync_mempools() (sdaftuar) @@ -660,7 +660,7 @@ git merge commit are mentioned. - #8090 `a2df115` Adding P2SH(p2pkh) script test case (Christewart) - #7992 `ec45cc5` Extend #7956 with one more test (TheBlueMatt) - #8139 `ae5575b` Fix interrupted HTTP RPC connection workaround for Python 3.5+ (sipa) -- #8164 `0f24eaf` [BGL-Tx] fix missing test fixtures, fix 32bit atoi issue (jonasschnelli) +- #8164 `0f24eaf` [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue (jonasschnelli) - #8166 `0b5279f` Src/test: Do not shadow local variables (paveljanik) - #8141 `44c1b1c` Continuing port of java comparison tool (mrbandrews) - #8201 `36b7400` fundrawtransaction: Fix race, assert amounts (MarcoFalke) @@ -670,7 +670,7 @@ git merge commit are mentioned. - #8216 `0d41d70` Assert 'changePosition out of bounds' (MarcoFalke) - #8222 `961893f` Enable mempool consistency checks in unit tests (sipa) - #7751 `84370d5` test_framework: python3.4 authproxy compat (laanwj) -- #7744 `d8e862a` test_framework: detect failure of BGLd startup (laanwj) +- #7744 `d8e862a` test_framework: detect failure of bitcoind startup (laanwj) - #8280 `115735d` Increase sync_blocks() timeouts in pruning.py (MarcoFalke) - #8340 `af9b7a9` Solve trivial merge conflict in p2p-segwit.py (MarcoFalke) - #8067 `3e4cf8f` Travis: use slim generic image, and some fixups (theuni) @@ -707,7 +707,7 @@ git merge commit are mentioned. - #7791 `e30a5b0` Change Precise to Trusty in gitian-building.md (JeremyRand) - #7838 `8bb5d3d` Update gitian build guide to debian 8.4.0 (fanquake) - #7855 `b778e59` Replace precise with trusty (MarcoFalke) -- #7975 `fc23fee` Update BGL-core GitHub links (MarcoFalke) +- #7975 `fc23fee` Update bitcoin-core GitHub links (MarcoFalke) - #8034 `e3a8207` Add basic git squash workflow (fanquake) - #7813 `214ec0b` Update port in tor.md (MarcoFalke) - #8193 `37c9830` Use Debian 8.5 in the gitian-build guide (fanquake) @@ -865,4 +865,4 @@ Thanks to everyone who directly contributed to this release: - Wladimir J. van der Laan - Yuri Zhykin -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.13.1.md b/doc/release-notes/release-notes-0.13.1.md index 6c300d510d..75c2d61be8 100644 --- a/doc/release-notes/release-notes-0.13.1.md +++ b/doc/release-notes/release-notes-0.13.1.md @@ -1,6 +1,6 @@ -BGL Core version 0.13.1 is now available from: +Bitcoin Core version 0.13.1 is now available from: - + This is a new minor version release, including activation parameters for the segwit softfork, various bugfixes and performance improvements, as well as @@ -8,22 +8,22 @@ updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a BGL +updates will be released anymore. Without security updates, using a bitcoin wallet on a XP machine is irresponsible at least. -In addition to that, with 0.12.x there have been varied reports of BGL Core -randomly crashing on Windows XP. It is [not clear](https://github.com/BGL/BGL/issues/7681#issuecomment-217439891) +In addition to that, with 0.12.x there have been varied reports of Bitcoin Core +randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) what the source of these crashes is, but it is likely that upstream libraries such as Qt are no longer being tested on XP. @@ -56,9 +56,9 @@ covered by the txid. This provides several immediate benefits: identifier (txid) of transactions without referencing the witness, which can sometimes be changed by third-parties (such as miners) or by co-signers in a multisig spend. This solves all known cases of unwanted transaction - malleability, which is a problem that makes programming BGL wallet + malleability, which is a problem that makes programming Bitcoin wallet software more difficult and which seriously complicates the design of smart - contracts for BGL. + contracts for Bitcoin. - **Capacity increase:** Segwit transactions contain new fields that are not part of the data currently used to calculate the size of a block, which @@ -72,7 +72,7 @@ covered by the txid. This provides several immediate benefits: following section for details). - **Weighting data based on how it affects node performance:** Some parts of - each BGL block need to be stored by nodes in order to validate future + each Bitcoin block need to be stored by nodes in order to validate future blocks; other parts of a block can be immediately forgotten (pruned) or used only for helping other nodes sync their copy of the block chain. One large part of the immediately prunable data are transaction signatures (witnesses), @@ -89,8 +89,8 @@ covered by the txid. This provides several immediate benefits: (such as hardware wallets), reduces the amount of data the signature generator needs to download, and allows the signature generator to operate more quickly. This is made possible by having the generator sign the amount - of BGLs they think they are spending, and by having full nodes refuse to - accept those signatures unless the amount of BGLs being spent is exactly + of bitcoins they think they are spending, and by having full nodes refuse to + accept those signatures unless the amount of bitcoins being spent is exactly the same as was signed. For non-segwit transactions, wallets instead had to download the complete previous transactions being spent for every payment they made, which could be a slow operation on hardware wallets and in other @@ -105,7 +105,7 @@ covered by the txid. This provides several immediate benefits: different signature method that doesn't suffer from this problem and doesn't have any unwanted side-effects. -- **Increased security for multisig:** BGL addresses (both P2PKH addresses +- **Increased security for multisig:** Bitcoin addresses (both P2PKH addresses that start with a '1' and P2SH addresses that start with a '3') use a hash function known as RIPEMD-160. For P2PKH addresses, this provides about 160 bits of security---which is beyond what cryptographers believe can be broken @@ -115,15 +115,15 @@ covered by the txid. This provides several immediate benefits: Segwit allows advanced transactions to use the SHA256 hash function instead, which provides about 128 bits of security (that is 281 trillion times as much security as 80 bits and is equivalent to the maximum bits of security - believed to be provided by BGL's choice of parameters for its Elliptic + believed to be provided by Bitcoin's choice of parameters for its Elliptic Curve Digital Security Algorithm [ECDSA].) - **More efficient almost-full-node security** Satoshi Nakamoto's original - BGL paper describes a method for allowing newly-started full nodes to + Bitcoin paper describes a method for allowing newly-started full nodes to skip downloading and validating some data from historic blocks that are protected by large amounts of proof of work. Unfortunately, Nakamoto's method can't guarantee that a newly-started node using this method will - produce an accurate copy of BGL's current ledger (called the UTXO set), + produce an accurate copy of Bitcoin's current ledger (called the UTXO set), making the node vulnerable to falling out of consensus with other nodes. Although the problems with Nakamoto's method can't be fixed in a soft fork, Segwit accomplishes something similar to his original proposal: it makes it @@ -131,18 +131,18 @@ covered by the txid. This provides several immediate benefits: (specifically, the segregated witnesses) while still ensuring that the node can build an accurate copy of the UTXO set for the block chain with the most proof of work. Segwit enables this capability at the consensus layer, but - note that BGL Core does not provide an option to use this capability as + note that Bitcoin Core does not provide an option to use this capability as of this 0.13.1 release. - **Script versioning:** Segwit makes it easy for future soft forks to allow - BGL users to individually opt-in to almost any change in the BGL + Bitcoin users to individually opt-in to almost any change in the Bitcoin Script language when those users receive new transactions. Features - currently being researched by BGL Core contributors that may use this + currently being researched by Bitcoin Core contributors that may use this capability include support for Schnorr signatures, which can improve the privacy and efficiency of multisig transactions (or transactions with multiple inputs), and Merklized Abstract Syntax Trees (MAST), which can improve the privacy and efficiency of scripts with two or more conditions. - Other BGL community members are studying several other improvements + Other Bitcoin community members are studying several other improvements that can be made using script versioning. Activation for the segwit soft fork is being managed using BIP9 @@ -159,13 +159,13 @@ For more information about segwit, please see the [segwit FAQ][], the operator, please see the [versionbits FAQ][] for information about signaling support for a soft fork. -[Segwit FAQ]: https://BGLcore.org/en/2016/01/26/segwit-benefits/ -[segwit wallet developers guide]: https://BGLcore.org/en/segwit_wallet_dev/ -[BIP141]: https://github.com/BGL/bips/blob/master/bip-0141.mediawiki -[BIP143]: https://github.com/BGL/bips/blob/master/bip-0143.mediawiki -[BIP144]: https://github.com/BGL/bips/blob/master/bip-0144.mediawiki -[BIP145]: https://github.com/BGL/bips/blob/master/bip-0145.mediawiki -[versionbits FAQ]: https://BGLcore.org/en/2016/06/08/version-bits-miners-faq/ +[Segwit FAQ]: https://bitcoincore.org/en/2016/01/26/segwit-benefits/ +[segwit wallet developers guide]: https://bitcoincore.org/en/segwit_wallet_dev/ +[BIP141]: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki +[BIP143]: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki +[BIP144]: https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki +[BIP145]: https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki +[versionbits FAQ]: https://bitcoincore.org/en/2016/06/08/version-bits-miners-faq/ Null dummy soft fork @@ -183,7 +183,7 @@ a third-party to insert data into other people's transactions, changing the transaction's txid (called transaction malleability) and possibly causing other problems. -Since BGL Core 0.10.0, nodes have defaulted to only relaying and +Since Bitcoin Core 0.10.0, nodes have defaulted to only relaying and mining transactions whose dummy element was a null value (0x00, also called OP_0). The null dummy soft fork turns this relay rule into a consensus rule both for non-segwit transactions and segwit transactions, @@ -196,7 +196,7 @@ as segwit. For more information, please see [BIP147][]. -[BIP147]: https://github.com/BGL/bips/blob/master/bip-0147.mediawiki +[BIP147]: https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki Low-level RPC changes --------------------- @@ -215,9 +215,9 @@ is provided below. The following extra files can be found in the download directory or torrent: -- `BGL-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting +- `bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting the 32-bit ARMv7-A architecture. -- `BGL-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting +- `bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting the 64-bit ARMv8-A architecture. ARM builds are still experimental. If you have problems on a certain device or @@ -243,7 +243,7 @@ git merge commit are mentioned. ### Consensus - #8636 `9dfa0c8` Implement NULLDUMMY softfork (BIP147) (jl2012) -- #8848 `7a34a46` Add NULLDUMMY verify flag in BGLconsensus.h (jl2012) +- #8848 `7a34a46` Add NULLDUMMY verify flag in bitcoinconsensus.h (jl2012) - #8937 `8b66659` Define start and end time for segwit deployment (sipa) ### RPC and other APIs @@ -275,13 +275,13 @@ git merge commit are mentioned. - #8612 `2215c22` Check for compatibility with download in FindNextBlocksToDownload (sipa) - #8606 `bbf379b` Fix some locks (sipa) - #8594 `ab295bb` Do not add random inbound peers to addrman (gmaxwell) -- #8940 `5b4192b` Add x9 service bit support to dnsseed.bluematt.me, seed.BGLstats.com (TheBlueMatt, cdecker) +- #8940 `5b4192b` Add x9 service bit support to dnsseed.bluematt.me, seed.bitcoinstats.com (TheBlueMatt, cdecker) - #8944 `685e4c7` Remove bogus assert on number of oubound connections. (TheBlueMatt) - #8949 `0dbc48a` Be more agressive in getting connections to peers with relevant services (gmaxwell) ### Build system -- #8293 `fa5b249` Allow building libBGLconsensus without any univalue (luke-jr) -- #8492 `8b0bdd3` Allow building bench_BGL by itself (luke-jr) +- #8293 `fa5b249` Allow building libbitcoinconsensus without any univalue (luke-jr) +- #8492 `8b0bdd3` Allow building bench_bitcoin by itself (luke-jr) - #8563 `147003c` Add configure check for -latomic (ajtowns) - #8626 `ea51b0f` Berkeley DB v6 compatibility fix (netsafe) - #8520 `75f2065` Remove check for `openssl/ec.h` (laanwj) @@ -320,16 +320,16 @@ git merge commit are mentioned. - #8418 `ff893aa` Add tests for compact blocks (sdaftuar) - #8803 `375437c` Ping regularly in p2p-segwit.py to keep connection alive (jl2012) - #8827 `9bbe66e` Split up slow RPC calls to avoid pruning test timeouts (sdaftuar) -- #8829 `2a8bca4` Add BGL-tx JSON tests (jnewbery) +- #8829 `2a8bca4` Add bitcoin-tx JSON tests (jnewbery) - #8834 `1dd1783` blockstore: Switch to dumb dbm (MarcoFalke) - #8835 `d87227d` nulldummy.py: Don't run unused code (MarcoFalke) -- #8836 `eb18cc1` BGL-util-test.py should fail if the output file is empty (jnewbery) +- #8836 `eb18cc1` bitcoin-util-test.py should fail if the output file is empty (jnewbery) - #8839 `31ab2f8` Avoid ConnectionResetErrors during RPC tests (laanwj) - #8840 `cbc3fe5` Explicitly set encoding to utf8 when opening text files (laanwj) - #8841 `3e4abb5` Fix nulldummy test (jl2012) - #8854 `624a007` Fix race condition in p2p-compactblocks test (sdaftuar) - #8857 `1f60d45` mininode: Only allow named args in wait_until (MarcoFalke) -- #8860 `0bee740` util: Move wait_BGLds() into stop_nodes() (MarcoFalke) +- #8860 `0bee740` util: Move wait_bitcoinds() into stop_nodes() (MarcoFalke) - #8882 `b73f065` Fix race conditions in p2p-compactblocks.py and sendheaders.py (sdaftuar) - #8904 `cc6f551` Fix compact block shortids for a test case (dagurval) @@ -337,7 +337,7 @@ git merge commit are mentioned. - #8754 `0e2c6bd` Target protobuf 2.6 in OS X build notes. (fanquake) - #8461 `b17a3f9` Document return value of networkhashps for getmininginfo RPC endpoint (jlopp) - #8512 `156e305` Corrected JSON typo on setban of net.cpp (sevastos) -- #8683 `8a7d7ff` Fix incorrect file name BGL.qrc (BGLsSG) +- #8683 `8a7d7ff` Fix incorrect file name bitcoin.qrc (bitcoinsSG) - #8891 `5e0dd9e` Update bips.md for Segregated Witness (fanquake) - #8545 `863ae74` Update git-subtree-check.sh README (MarcoFalke) - #8607 `486650a` Fix doxygen off-by-one comments, fix typos (MarcoFalke) @@ -352,7 +352,7 @@ git merge commit are mentioned. - #8742 `d31ac72` Specify Protobuf version 2 in paymentrequest.proto (fanquake) - #8414,#8558,#8676,#8700,#8701,#8702 Add missing copyright headers (isle2983, kazcw) - #8899 `4ed2627` Fix wake from sleep issue with Boost 1.59.0 (fanquake) -- #8817 `bcf3806` update BGL-tx to output witness data (jnewbery) +- #8817 `bcf3806` update bitcoin-tx to output witness data (jnewbery) - #8513 `4e5fc31` Fix a type error that would not compile on OSX. (JeremyRubin) - #8392 `30eac2d` Fix several node initialization issues (sipa) - #8548 `305d8ac` Use `__func__` to get function name for output printing (MarcoFalke) @@ -407,4 +407,4 @@ Thanks to everyone who directly contributed to this release: - whythat - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.13.2.md b/doc/release-notes/release-notes-0.13.2.md index f8d9cb0bd1..45fff5c8bb 100644 --- a/doc/release-notes/release-notes-0.13.2.md +++ b/doc/release-notes/release-notes-0.13.2.md @@ -1,28 +1,28 @@ -BGL Core version 0.13.2 is now available from: +Bitcoin Core version 0.13.2 is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a BGL +updates will be released anymore. Without security updates, using a bitcoin wallet on a XP machine is irresponsible at least. -In addition to that, with 0.12.x there have been varied reports of BGL Core -randomly crashing on Windows XP. It is [not clear](https://github.com/BGL/BGL/issues/7681#issuecomment-217439891) +In addition to that, with 0.12.x there have been varied reports of Bitcoin Core +randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) what the source of these crashes is, but it is likely that upstream libraries such as Qt are no longer being tested on XP. @@ -111,7 +111,7 @@ git merge commit are mentioned. - #8972 `6f86b53` Make warnings label selectable (jonasschnelli) (MarcoFalke) - #9185 `6d70a73` Fix coincontrol sort issue (jonasschnelli) - #9094 `5f3a12c` Use correct conversion function for boost::path datadir (laanwj) -- #8908 `4a974b2` Update BGL-qt.desktop (s-matthew-english) +- #8908 `4a974b2` Update bitcoin-qt.desktop (s-matthew-english) - #9190 `dc46b10` Plug many memory leaks (laanwj) ### Wallet @@ -134,7 +134,7 @@ git merge commit are mentioned. - #8838 `094848b` Calculate size and weight of block correctly in CreateNewBlock() (jnewbery) - #8920 `40169dc` Set minimum required Boost to 1.47.0 (fanquake) - #9251 `a710a43` Improvement of documentation of command line parameter 'whitelist' (wodry) -- #8932 `106da69` Allow BGL-tx to create v2 transactions (btcdrak) +- #8932 `106da69` Allow bitcoin-tx to create v2 transactions (btcdrak) - #8929 `12428b4` add software-properties-common (sigwo) - #9120 `08d1c90` bug: Missed one "return false" in recent refactoring in #9067 (UdjinM6) - #9067 `f85ee01` Fix exit codes (UdjinM6) @@ -175,4 +175,4 @@ Thanks to everyone who directly contributed to this release: - Wladimir J. van der Laan - wodry -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.0.md b/doc/release-notes/release-notes-0.14.0.md index 6155cd5be2..c41f22979b 100644 --- a/doc/release-notes/release-notes-0.14.0.md +++ b/doc/release-notes/release-notes-0.14.0.md @@ -1,22 +1,22 @@ -BGL Core version 0.14.0 is now available from: +Bitcoin Core version 0.14.0 is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), @@ -24,7 +24,7 @@ No attempt is made to prevent installing or running the software on Windows XP, can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -55,7 +55,7 @@ improved, leading to much shorter sync and initial block download times. Manual Pruning -------------- -BGL Core has supported automatically pruning the blockchain since 0.11. Pruning +Bitcoin Core has supported automatically pruning the blockchain since 0.11. Pruning the blockchain allows for significant storage space savings as the vast majority of the downloaded data can be discarded after processing so very little of it remains on the disk. @@ -96,7 +96,7 @@ ZMQ On Windows Previously the ZeroMQ notification system was unavailable on Windows due to various issues with ZMQ. These have been fixed upstream and -now ZMQ can be used on Windows. Please see [this document](https://github.com/BGL/BGL/blob/master/doc/zmq.md) for +now ZMQ can be used on Windows. Please see [this document](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md) for help with using ZMQ in general. Nested RPC Commands in Debug Console @@ -129,7 +129,7 @@ the same thing as the GUI icon. The command takes one boolean parameter, Out-of-sync Modal Info Layer ---------------------------- -When BGL Core is out-of-sync on startup, a semi-transparent information +When Bitcoin Core is out-of-sync on startup, a semi-transparent information layer will be shown over top of the normal display. This layer contains details about the current sync progress and estimates the amount of time remaining to finish syncing. This layer can also be hidden and subsequently @@ -138,19 +138,19 @@ unhidden by clicking on the progress bar at the bottom of the window. Support for JSON-RPC Named Arguments ------------------------------------ -Commands sent over the JSON-RPC interface and through the `BGL-cli` binary +Commands sent over the JSON-RPC interface and through the `bitcoin-cli` binary can now use named arguments. This follows the [JSON-RPC specification](http://www.jsonrpc.org/specification) for passing parameters by-name with an object. -`BGL-cli` has been updated to support this by parsing `name=value` arguments +`bitcoin-cli` has been updated to support this by parsing `name=value` arguments when the `-named` option is given. Some examples: - src/BGL-cli -named help command="help" - src/BGL-cli -named getblockhash height=0 - src/BGL-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - src/BGL-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true + src/bitcoin-cli -named help command="help" + src/bitcoin-cli -named getblockhash height=0 + src/bitcoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f + src/bitcoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true The order of arguments doesn't matter in this case. Named arguments are also useful to leave out arguments that should stay at their default value. The @@ -189,7 +189,7 @@ commands such as `prioritisetransaction` so that those changes will not be lost. Final Alert ----------- -The Alert System was [disabled and deprecated](https://BGL.org/en/alert/2016-11-01-alert-retirement) in BGL Core 0.12.1 and removed in 0.13.0. +The Alert System was [disabled and deprecated](https://bitcoin.org/en/alert/2016-11-01-alert-retirement) in Bitcoin Core 0.12.1 and removed in 0.13.0. The Alert System was retired with a maximum sequence final alert which causes any nodes supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also prevents any other alerts from overriding it. This final alert is hard-coded into this release @@ -241,8 +241,8 @@ Low-level RPC changes the mempool or if `txindex` is enabled. - A new RPC command `getmemoryinfo` has been added which will return information - about the memory usage of BGL Core. This was added in conjunction with - optimizations to memory management. See [Pull #8753](https://github.com/BGL/BGL/pull/8753) + about the memory usage of Bitcoin Core. This was added in conjunction with + optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753) for more information. - A new RPC command `bumpfee` has been added which allows replacing an @@ -367,7 +367,7 @@ and git merge commit are mentioned. - #8421 `b77bb95` httpserver: drop boost dependency (theuni) - #8638 `f061415` rest.cpp: change `HTTP_INTERNAL_SERVER_ERROR` to `HTTP_BAD_REQUEST` (djpnewton) - #8272 `91990ee` Make the dummy argument to getaddednodeinfo optional (sipa) -- #8722 `bb843ad` BGL-cli: More detailed error reporting (laanwj) +- #8722 `bb843ad` bitcoin-cli: More detailed error reporting (laanwj) - #6996 `7f71a3c` Add preciousblock RPC (sipa) - #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli) - #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy) @@ -626,14 +626,14 @@ and git merge commit are mentioned. - #8680 `666eaf0` Address Travis spurious failures (theuni) - #8789 `e31a43c` pull-tester: Only print output when failed (MarcoFalke) - #8810 `14e8f99` tests: Add exception error message for JSONRPCException (laanwj) -- #8830 `ef0801b` test: Add option to run BGL-util-test.py manually (jnewbery) -- #8881 `e66cc1d` Add some verbose logging to BGL-util-test.py (jnewbery) +- #8830 `ef0801b` test: Add option to run bitcoin-util-test.py manually (jnewbery) +- #8881 `e66cc1d` Add some verbose logging to bitcoin-util-test.py (jnewbery) - #8922 `0329511` Send segwit-encoded blocktxn messages in p2p-compactblocks (TheBlueMatt) - #8873 `74dc388` Add microbenchmarks to profile more code paths (ryanofsky) - #9032 `6a8be7b` test: Add format-dependent comparison to bctest (laanwj) -- #9023 `774db92` Add logging to BGL-util-test.py (jnewbery) +- #9023 `774db92` Add logging to bitcoin-util-test.py (jnewbery) - #9065 `c9bdf9a` Merge `doc/unit-tests.md` into `src/test/README.md` (laanwj) -- #9069 `ed64bce` Clean up bctest.py and BGL-util-test.py (jnewbery) +- #9069 `ed64bce` Clean up bctest.py and bitcoin-util-test.py (jnewbery) - #9095 `b8f43e3` test: Fix test\_random includes (MarcoFalke) - #8894 `faec09b` Testing: Include fRelay in mininode version messages (jnewbery) - #9097 `e536499` Rework `sync_*` and preciousblock.py (MarcoFalke) @@ -665,7 +665,7 @@ and git merge commit are mentioned. - #9628 `f895023` Increase a sync\_blocks timeout in pruning.py (sdaftuar) - #9638 `a7ea2f8` Actually test assertions in pruning.py (MarcoFalke) - #9647 `e99f0d7` Skip RAII event tests if libevent is built without `event_set_mem_functions` (luke-jr) -- #9691 `fc67cd2` Init ECC context for `test_BGL_fuzzy` (gmaxwell) +- #9691 `fc67cd2` Init ECC context for `test_bitcoin_fuzzy` (gmaxwell) - #9712 `d304fef` bench: Fix initialization order in registration (laanwj) - #9707 `b860915` Fix RPC failure testing (jnewbery) - #9269 `43e8150` Align struct COrphan definition (sipa) @@ -711,25 +711,25 @@ and git merge commit are mentioned. - #8965 `23e03f8` Mention that PPA doesn't support Debian (anduck) - #9115 `bfc7aad` Mention reporting security issues responsibly (paveljanik) - #9840 `08e0690` Update sendfrom RPC help to correct coin selection misconception (ryanofsky) -- #9865 `289204f` Change BGL address in RPC help message (marijnfs) +- #9865 `289204f` Change bitcoin address in RPC help message (marijnfs) ### Miscellaneous - #8274 `7a2d402` util: Update tinyformat (laanwj) - #8291 `5cac8b1` util: CopyrightHolders: Check for untranslated substitution (MarcoFalke) - #8557 `44691f3` contrib: Rework verifybinaries (MarcoFalke) - #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) -- #8813 `fb24d7e` BGLd: Daemonize using daemon(3) (laanwj) +- #8813 `fb24d7e` bitcoind: Daemonize using daemon(3) (laanwj) - #9004 `67728a3` Clarify `listenonion` (unsystemizer) - #8674 `bae81b8` tools for analyzing, updating and adding copyright headers in source files (isle2983) - #8976 `8c6218a` libconsensus: Add input validation of flags (laanwj) - #9112 `46027e8` Avoid ugly exception in log on unknown inv type (laanwj) -- #8837 `2108911` Allow BGL-tx to parse partial transactions (jnewbery) +- #8837 `2108911` Allow bitcoin-tx to parse partial transactions (jnewbery) - #9204 `74ced54` Clarify CreateTransaction error messages (instagibbs) -- #9265 `31bcc66` BGL-cli: Make error message less confusing (laanwj) +- #9265 `31bcc66` bitcoin-cli: Make error message less confusing (laanwj) - #9303 `72bf1b3` Update comments in ctaes (sipa) - #9417 `c4b7d4f` Do not evaluate hidden LogPrint arguments (sipa) - #9506 `593a00c` RFC: Improve style for if indentation (sipa) -- #8883 `d5d4ad8` Add all standard TXO types to BGL-tx (jnewbery) +- #8883 `d5d4ad8` Add all standard TXO types to bitcoin-tx (jnewbery) - #9531 `23281a4` Release notes for estimation changes (morcos) - #9486 `f62bc10` Make peer=%d log prints consistent (TheBlueMatt) - #9552 `41cb05c` Add IPv6 support to qos.sh (jamesmacwhite) @@ -870,4 +870,4 @@ Thanks to everyone who directly contributed to this release: - wodry - Zak Wilcox -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.1.md b/doc/release-notes/release-notes-0.14.1.md index 2b69c32e14..ef072afd4d 100644 --- a/doc/release-notes/release-notes-0.14.1.md +++ b/doc/release-notes/release-notes-0.14.1.md @@ -1,22 +1,22 @@ -BGL Core version 0.14.1 is now available from: +Bitcoin Core version 0.14.1 is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), @@ -24,7 +24,7 @@ No attempt is made to prevent installing or running the software on Windows XP, can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -75,7 +75,7 @@ this parameter. Additional information relating to running on low-memory systems can be found here: -[reducing-BGLd-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). +[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). 0.14.1 Change log ================= @@ -117,7 +117,7 @@ git merge commit are mentioned. ### Miscellaneous - #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) - #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) -- #10130 `ecc5232` BGL-tx input verification (awemany, jnewbery) +- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) Credits ======= @@ -139,5 +139,5 @@ Thanks to everyone who directly contributed to this release: - Suhas Daftuar - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.2.md b/doc/release-notes/release-notes-0.14.2.md index a36318eba2..0ad554b773 100644 --- a/doc/release-notes/release-notes-0.14.2.md +++ b/doc/release-notes/release-notes-0.14.2.md @@ -1,22 +1,22 @@ -BGL Core version 0.14.2 is now available from: +Bitcoin Core version 0.14.2 is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), @@ -24,7 +24,7 @@ No attempt is made to prevent installing or running the software on Windows XP, can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -40,7 +40,7 @@ other impact. This only affects users that have explicitly enabled UPnP through the GUI setting or through the `-upnp` option, as since the last UPnP vulnerability -(in BGL Core 0.10.3) it has been disabled by default. +(in Bitcoin Core 0.10.3) it has been disabled by default. If you use this option, it is recommended to upgrade to this version as soon as possible. @@ -48,7 +48,7 @@ possible. Known Bugs ========== -Since 0.14.0 the approximate transaction fee shown in BGL-Qt when using coin +Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin control and smart fee estimation does not reflect any change in target from the smart fee slider. It will only present an approximate fee calculated using the default target. The fee calculated using the correct target is still applied to @@ -71,7 +71,7 @@ git merge commit are mentioned. ### Build system - #10414 `ffb0c4b` miniupnpc 2.0.20170509 (fanquake) -- #10228 `ae479bc` Regenerate BGL-config.h as necessary (theuni) +- #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni) ### Miscellaneous - #10245 `44a17f2` Minor fix in build documentation for FreeBSD 11 (shigeya) @@ -98,5 +98,5 @@ Thanks to everyone who directly contributed to this release: - Shigeya Suzuki - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.3.md b/doc/release-notes/release-notes-0.14.3.md index 56ed5f6d24..8259152f0b 100644 --- a/doc/release-notes/release-notes-0.14.3.md +++ b/doc/release-notes/release-notes-0.14.3.md @@ -1,22 +1,22 @@ -BGL Core version *0.14.3* is now available from: +Bitcoin Core version *0.14.3* is now available from: - + This is a new minor version release, including various bugfixes and performance improvements. Please report bugs using the issue tracker at github: - + To receive security and update notifications, please subscribe to: - + Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), @@ -24,7 +24,7 @@ No attempt is made to prevent installing or running the software on Windows XP, can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -34,13 +34,13 @@ Denial-of-Service vulnerability CVE-2018-17144 ------------------------------- A denial-of-service vulnerability exploitable by miners has been discovered in -BGL Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of +Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of the vulnerable versions to 0.14.3, 0.15.2 or 0.16.3 as soon as possible. Known Bugs ========== -Since 0.14.0 the approximate transaction fee shown in BGL-Qt when using coin +Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin control and smart fee estimation does not reflect any change in target from the smart fee slider. It will only present an approximate fee calculated using the default target. The fee calculated using the correct target is still applied to @@ -72,7 +72,7 @@ git merge commit are mentioned. ### Miscellaneous -- #10451 `3612219` contrib/init/BGLd.openrcconf: Don't disable wallet by default (Luke Dashjr) +- #10451 `3612219` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (Luke Dashjr) - #10250 `e23cef0` Fix some empty vector references (Pieter Wuille) - #10196 `d28d583` PrioritiseTransaction updates the mempool tx counter (Suhas Daftuar) - #9497 `e207342` Fix CCheckQueue IsIdle (potential) race condition and remove dangerous constructors. (Jeremy Rubin) diff --git a/doc/release-notes/release-notes-0.15.0.1.md b/doc/release-notes/release-notes-0.15.0.1.md index 49bb29c870..53ab02cbb0 100644 --- a/doc/release-notes/release-notes-0.15.0.1.md +++ b/doc/release-notes/release-notes-0.15.0.1.md @@ -1,28 +1,28 @@ -BGL Core version *0.15.0.1* is now available from: +Bitcoin Core version *0.15.0.1* is now available from: - + and - + This is a minor bug fix for 0.15.0. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or higher, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to @@ -51,10 +51,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -84,4 +84,4 @@ Thanks to everyone who directly contributed to this release: - Jonas Schnelli - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.0.md b/doc/release-notes/release-notes-0.15.0.md index f2a00aab3b..3d000e94d5 100644 --- a/doc/release-notes/release-notes-0.15.0.md +++ b/doc/release-notes/release-notes-0.15.0.md @@ -1,25 +1,25 @@ -BGL Core version *0.15.0* is now available from: +Bitcoin Core version *0.15.0* is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, @@ -48,10 +48,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notes for 0.15.0 @@ -85,7 +85,7 @@ Version 0.15 contains a number of significant performance improvements, which ma Initial Block Download, startup, transaction and block validation much faster: - The chainstate database (which is used for tracking UTXOs) has been changed - from a per-transaction model to a per-output model (See [PR 10195](https://github.com/BGL/BGL/pull/10195)). Advantages of this model + from a per-transaction model to a per-output model (See [PR 10195](https://github.com/bitcoin/bitcoin/pull/10195)). Advantages of this model are that it: - avoids the CPU overhead of deserializing and serializing the unused outputs; - has more predictable memory usage; @@ -98,32 +98,32 @@ Initial Block Download, startup, transaction and block validation much faster: a few extra gigabytes may be used. - Earlier versions experienced a spike in memory usage while flushing UTXO updates to disk. As a result, only half of the available memory was actually used as cache, and the other half was - reserved to accommodate flushing. This is no longer the case (See [PR 10148](https://github.com/BGL/BGL/pull/10148)), and the entirety of + reserved to accommodate flushing. This is no longer the case (See [PR 10148](https://github.com/bitcoin/bitcoin/pull/10148)), and the entirety of the available cache (see `-dbcache`) is now actually used as cache. This reduces the flushing frequency by a factor 2 or more. - In previous versions, signature validation for transactions has been cached when the transaction is accepted to the mempool. Version 0.15 extends this to cache the entire script - validity (See [PR 10192](https://github.com/BGL/BGL/pull/10192)). This means that if a transaction in a block has already been accepted to the + validity (See [PR 10192](https://github.com/bitcoin/bitcoin/pull/10192)). This means that if a transaction in a block has already been accepted to the mempool, the scriptSig does not need to be re-evaluated. Empirical tests show that this results in new block validation being 40-50% faster. -- LevelDB has been upgraded to version 1.20 (See [PR 10544](https://github.com/BGL/BGL/pull/10544)). This version contains hardware acceleration for CRC +- LevelDB has been upgraded to version 1.20 (See [PR 10544](https://github.com/bitcoin/bitcoin/pull/10544)). This version contains hardware acceleration for CRC on architectures supporting SSE 4.2. As a result, synchronization and block validation are now faster. -- SHA256 hashing has been optimized for architectures supporting SSE 4 (See [PR 10821](https://github.com/BGL/BGL/pull/10821)). SHA256 is around +- SHA256 hashing has been optimized for architectures supporting SSE 4 (See [PR 10821](https://github.com/bitcoin/bitcoin/pull/10821)). SHA256 is around 50% faster on supported hardware, which results in around 5% faster IBD and block validation. In version 0.15, SHA256 hardware optimization is disabled in release builds by default, but can be enabled by using `--enable-experimental-asm` when building. -- Refill of the keypool no longer flushes the wallet between each key which resulted in a ~20x speedup in creating a new wallet. Part of this speedup was used to increase the default keypool to 1000 keys to make recovery more robust. (See [PR 10831](https://github.com/BGL/BGL/pull/10831)). +- Refill of the keypool no longer flushes the wallet between each key which resulted in a ~20x speedup in creating a new wallet. Part of this speedup was used to increase the default keypool to 1000 keys to make recovery more robust. (See [PR 10831](https://github.com/bitcoin/bitcoin/pull/10831)). Fee Estimation Improvements --------------------------- -Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the `estimatesmartfee` and `estimaterawfee` RPCs (See [PR 10199](https://github.com/BGL/BGL/pull/10199)). +Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the `estimatesmartfee` and `estimaterawfee` RPCs (See [PR 10199](https://github.com/bitcoin/bitcoin/pull/10199)). ### Changes to internal logic and wallet behavior - Internally, estimates are now tracked on 3 different time horizons. This allows for longer targets and means estimates adjust more quickly to changes in conditions. - Estimates can now be *conservative* or *economical*. *Conservative* estimates use longer time horizons to produce an estimate which is less susceptible to rapid changes in fee conditions. *Economical* estimates use shorter time horizons and will be more affected by short-term changes in fee conditions. Economical estimates may be considerably lower during periods of low transaction activity (for example over weekends), but may result in transactions being unconfirmed if prevailing fees increase rapidly. -- By default, the wallet will use conservative fee estimates to increase the reliability of transactions being confirmed within the desired target. For transactions that are marked as replaceable, the wallet will use an economical estimate by default, since the fee can be 'bumped' if the fee conditions change rapidly (See [PR 10589](https://github.com/BGL/BGL/pull/10589)). +- By default, the wallet will use conservative fee estimates to increase the reliability of transactions being confirmed within the desired target. For transactions that are marked as replaceable, the wallet will use an economical estimate by default, since the fee can be 'bumped' if the fee conditions change rapidly (See [PR 10589](https://github.com/bitcoin/bitcoin/pull/10589)). - Estimates can now be made for confirmation targets up to 1008 blocks (one week). - More data on historical fee rates is stored, leading to more precise fee estimates. - Transactions which leave the mempool due to eviction or other non-confirmed reasons are now taken into account by the fee estimation logic, leading to more accurate fee estimates. @@ -132,27 +132,27 @@ Fee estimation has been significantly improved in version 0.15, with more accura ### Changes to fee estimate RPCs - The `estimatefee` RPC is now deprecated in favor of using only `estimatesmartfee` (which is the implementation used by the GUI) -- The `estimatesmartfee` RPC interface has been changed (See [PR 10707](https://github.com/BGL/BGL/pull/10707)): +- The `estimatesmartfee` RPC interface has been changed (See [PR 10707](https://github.com/bitcoin/bitcoin/pull/10707)): - The `nblocks` argument has been renamed to `conf_target` (to be consistent with other RPC methods). - An `estimate_mode` argument has been added. This argument takes one of the following strings: `CONSERVATIVE`, `ECONOMICAL` or `UNSET` (which defaults to `CONSERVATIVE`). - The RPC return object now contains an `errors` member, which returns errors encountered during processing. - - If BGL Core has not been running for long enough and has not seen enough blocks or transactions to produce an accurate fee estimation, an error will be returned (previously a value of -1 was used to indicate an error, which could be confused for a feerate). + - If Bitcoin Core has not been running for long enough and has not seen enough blocks or transactions to produce an accurate fee estimation, an error will be returned (previously a value of -1 was used to indicate an error, which could be confused for a feerate). - A new `estimaterawfee` RPC is added to provide raw fee data. External clients can query and use this data in their own fee estimation logic. Multi-wallet support -------------------- -BGL Core now supports loading multiple, separate wallets (See [PR 8694](https://github.com/BGL/BGL/pull/8694), [PR 10849](https://github.com/BGL/BGL/pull/10849)). The wallets are completely separated, with individual balances, keys and received transactions. +Bitcoin Core now supports loading multiple, separate wallets (See [PR 8694](https://github.com/bitcoin/bitcoin/pull/8694), [PR 10849](https://github.com/bitcoin/bitcoin/pull/10849)). The wallets are completely separated, with individual balances, keys and received transactions. -Multi-wallet is enabled by using more than one `-wallet` argument when starting BGL, either on the command line or in the BGL config file. +Multi-wallet is enabled by using more than one `-wallet` argument when starting Bitcoin, either on the command line or in the Bitcoin config file. -**In BGL-Qt, only the first wallet will be displayed and accessible for creating and signing transactions.** GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node's current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem. +**In Bitcoin-Qt, only the first wallet will be displayed and accessible for creating and signing transactions.** GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node's current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem. -BGL Core 0.15.0 contains the following changes to the RPC interface and `BGL-cli` for multi-wallet: +Bitcoin Core 0.15.0 contains the following changes to the RPC interface and `bitcoin-cli` for multi-wallet: -* When running BGL Core with a single wallet, there are **no** changes to the RPC interface or `BGL-cli`. All RPC calls and `BGL-cli` commands continue to work as before. -* When running BGL Core with multi-wallet, all *node-level* RPC methods continue to work as before. HTTP RPC requests should be send to the normal `:` endpoint, and `BGL-cli` commands should be run as before. A *node-level* RPC method is any method which does not require access to the wallet. -* When running BGL Core with multi-wallet, *wallet-level* RPC methods must specify the wallet for which they're intended in every request. HTTP RPC requests should be send to the `:/wallet/` endpoint, for example `127.0.0.1:8332/wallet/wallet1.dat`. `BGL-cli` commands should be run with a `-rpcwallet` option, for example `BGL-cli -rpcwallet=wallet1.dat getbalance`. +* When running Bitcoin Core with a single wallet, there are **no** changes to the RPC interface or `bitcoin-cli`. All RPC calls and `bitcoin-cli` commands continue to work as before. +* When running Bitcoin Core with multi-wallet, all *node-level* RPC methods continue to work as before. HTTP RPC requests should be send to the normal `:` endpoint, and `bitcoin-cli` commands should be run as before. A *node-level* RPC method is any method which does not require access to the wallet. +* When running Bitcoin Core with multi-wallet, *wallet-level* RPC methods must specify the wallet for which they're intended in every request. HTTP RPC requests should be send to the `:/wallet/` endpoint, for example `127.0.0.1:8332/wallet/wallet1.dat`. `bitcoin-cli` commands should be run with a `-rpcwallet` option, for example `bitcoin-cli -rpcwallet=wallet1.dat getbalance`. * A new *node-level* `listwallets` RPC method is added to display which wallets are currently loaded. The names returned by this method are the same as those used in the HTTP endpoint and for the `rpcwallet` argument. Note that while multi-wallet is now fully supported, the RPC multi-wallet interface should be considered unstable for version 0.15.0, and there may backwards-incompatible changes in future versions. @@ -160,18 +160,18 @@ Note that while multi-wallet is now fully supported, the RPC multi-wallet interf Replace-by-fee control in the GUI --------------------------------- -BGL Core has supported creating opt-in replace-by-fee (RBF) transactions +Bitcoin Core has supported creating opt-in replace-by-fee (RBF) transactions since version 0.12.0, and since version 0.14.0 has included a `bumpfee` RPC method to replace unconfirmed opt-in RBF transactions with a new transaction that pays a higher fee. In version 0.15, creating an opt-in RBF transaction and replacing the unconfirmed -transaction with a higher-fee transaction are both supported in the GUI (See [PR 9592](https://github.com/BGL/BGL/pull/9592)). +transaction with a higher-fee transaction are both supported in the GUI (See [PR 9592](https://github.com/bitcoin/bitcoin/pull/9592)). Removal of Coin Age Priority ---------------------------- -In previous versions of BGL Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. BGL Core 0.15 removes all remaining support for Coin Age Priority (See [PR 9602](https://github.com/BGL/BGL/pull/9602)). This has the following implications: +In previous versions of Bitcoin Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. Bitcoin Core 0.15 removes all remaining support for Coin Age Priority (See [PR 9602](https://github.com/bitcoin/bitcoin/pull/9602)). This has the following implications: - The concept of *free transactions* has been removed. High Coin Age Priority transactions would previously be allowed to be relayed even if they didn't attach a miner fee. This is no longer possible since there is no concept of Coin Age Priority. The `-limitfreerelay` and `-relaypriority` options which controlled relay of free transactions have therefore been removed. - The `-sendfreetransactions` option has been removed, since almost all miners do not include transactions which do not attach a transaction fee. @@ -185,26 +185,26 @@ In previous versions of BGL Core, a portion of each block could be reserved for Mempool Persistence Across Restarts ----------------------------------- -Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a `mempool.dat` file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the `-persistmempool` command-line option (See [PR 9966](https://github.com/BGL/BGL/pull/9966)). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the `mempool.dat` file will not be loaded on startup or saved on shutdown. +Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a `mempool.dat` file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the `-persistmempool` command-line option (See [PR 9966](https://github.com/bitcoin/bitcoin/pull/9966)). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the `mempool.dat` file will not be loaded on startup or saved on shutdown. New RPC methods --------------- Version 0.15 introduces several new RPC methods: -- `abortrescan` stops current wallet rescan, e.g. when triggered by an `importprivkey` call (See [PR 10208](https://github.com/BGL/BGL/pull/10208)). -- `combinerawtransaction` accepts a JSON array of raw transactions and combines them into a single raw transaction (See [PR 10571](https://github.com/BGL/BGL/pull/10571)). +- `abortrescan` stops current wallet rescan, e.g. when triggered by an `importprivkey` call (See [PR 10208](https://github.com/bitcoin/bitcoin/pull/10208)). +- `combinerawtransaction` accepts a JSON array of raw transactions and combines them into a single raw transaction (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)). - `estimaterawfee` returns raw fee data so that customized logic can be implemented to analyze the data and calculate estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface. - `getchaintxstats` returns statistics about the total number and rate of transactions - in the chain (See [PR 9733](https://github.com/BGL/BGL/pull/9733)). + in the chain (See [PR 9733](https://github.com/bitcoin/bitcoin/pull/9733)). - `listwallets` lists wallets which are currently loaded. See the *Multi-wallet* section of these release notes for full details (See [Multi-wallet support](#multi-wallet-support)). -- `uptime` returns the total runtime of the `BGLd` server since its last start (See [PR 10400](https://github.com/BGL/BGL/pull/10400)). +- `uptime` returns the total runtime of the `bitcoind` server since its last start (See [PR 10400](https://github.com/bitcoin/bitcoin/pull/10400)). Low-level RPC changes --------------------- -- When using BGL Core in multi-wallet mode, RPC requests for wallet methods must specify +- When using Bitcoin Core in multi-wallet mode, RPC requests for wallet methods must specify the wallet that they're intended for. See [Multi-wallet support](#multi-wallet-support) for full details. - The new database model no longer stores information about transaction @@ -222,15 +222,15 @@ Low-level RPC changes `bytes_serialized`. The first is a more accurate estimate of actual disk usage, but is not deterministic. The second is unrelated to disk usage, but is a database-independent metric of UTXO set size: it counts every UTXO entry as 50 + the - length of its scriptPubKey (See [PR 10426](https://github.com/BGL/BGL/pull/10426)). + length of its scriptPubKey (See [PR 10426](https://github.com/bitcoin/bitcoin/pull/10426)). -- `signrawtransaction` can no longer be used to combine multiple transactions into a single transaction. Instead, use the new `combinerawtransaction` RPC (See [PR 10571](https://github.com/BGL/BGL/pull/10571)). +- `signrawtransaction` can no longer be used to combine multiple transactions into a single transaction. Instead, use the new `combinerawtransaction` RPC (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)). -- `fundrawtransaction` no longer accepts a `reserveChangeKey` option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a `getnewaddress` call, which could potentially result in confusing or dangerous behaviour (See [PR 10784](https://github.com/BGL/BGL/pull/10784)). +- `fundrawtransaction` no longer accepts a `reserveChangeKey` option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a `getnewaddress` call, which could potentially result in confusing or dangerous behaviour (See [PR 10784](https://github.com/bitcoin/bitcoin/pull/10784)). - `estimatepriority` and `estimatesmartpriority` have been removed. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). -- The `listunspent` RPC now takes a `query_options` argument (see [PR 8952](https://github.com/BGL/BGL/pull/8952)), which is a JSON object +- The `listunspent` RPC now takes a `query_options` argument (see [PR 8952](https://github.com/bitcoin/bitcoin/pull/8952)), which is a JSON object containing one or more of the following members: - `minimumAmount` - a number specifying the minimum value of each UTXO - `maximumAmount` - a number specifying the maximum value of each UTXO @@ -240,22 +240,22 @@ Low-level RPC changes - The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). - The `dumpwallet` RPC now returns the full absolute path to the dumped wallet. It - used to return no value, even if successful (See [PR 9740](https://github.com/BGL/BGL/pull/9740)). + used to return no value, even if successful (See [PR 9740](https://github.com/bitcoin/bitcoin/pull/9740)). -- In the `getpeerinfo` RPC, the return object for each peer now returns an `addrbind` member, which contains the ip address and port of the connection to the peer. This is in addition to the `addrlocal` member which contains the ip address and port of the local node as reported by the peer (See [PR 10478](https://github.com/BGL/BGL/pull/10478)). +- In the `getpeerinfo` RPC, the return object for each peer now returns an `addrbind` member, which contains the ip address and port of the connection to the peer. This is in addition to the `addrlocal` member which contains the ip address and port of the local node as reported by the peer (See [PR 10478](https://github.com/bitcoin/bitcoin/pull/10478)). -- The `disconnectnode` RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new `nodeid` argument (See [PR 10143](https://github.com/BGL/BGL/pull/10143)). +- The `disconnectnode` RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new `nodeid` argument (See [PR 10143](https://github.com/bitcoin/bitcoin/pull/10143)). -- The second argument in `prioritisetransaction` has been renamed from `priority_delta` to `dummy` since BGL Core no longer has a concept of coin age priority. The `dummy` argument has no functional effect, but is retained for positional argument compatibility. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). +- The second argument in `prioritisetransaction` has been renamed from `priority_delta` to `dummy` since Bitcoin Core no longer has a concept of coin age priority. The `dummy` argument has no functional effect, but is retained for positional argument compatibility. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). -- The `resendwallettransactions` RPC throws an error if the `-walletbroadcast` option is set to false (See [PR 10995](https://github.com/BGL/BGL/pull/10995)). +- The `resendwallettransactions` RPC throws an error if the `-walletbroadcast` option is set to false (See [PR 10995](https://github.com/bitcoin/bitcoin/pull/10995)). -- The second argument in the `submitblock` RPC argument has been renamed from `parameters` to `dummy`. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See [PR 10191](https://github.com/BGL/BGL/pull/10191)) +- The second argument in the `submitblock` RPC argument has been renamed from `parameters` to `dummy`. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See [PR 10191](https://github.com/bitcoin/bitcoin/pull/10191)) (Clients should, however, use positional arguments for `submitblock` in order to be compatible with BIP 22.) - The `verbose` argument of `getblock` has been renamed to `verbosity` and now takes an integer from 0 to 2. Verbose level 0 is equivalent to `verbose=false`. Verbose level 1 is equivalent to `verbose=true`. Verbose level 2 will give the full transaction details of each transaction in the output as given by `getrawtransaction`. The old behavior of using the `verbose` named argument and a boolean value is still maintained for compatibility. -- Error codes have been updated to be more accurate for the following error cases (See [PR 9853](https://github.com/BGL/BGL/pull/9853)): +- Error codes have been updated to be more accurate for the following error cases (See [PR 9853](https://github.com/bitcoin/bitcoin/pull/9853)): - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR. - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned @@ -268,13 +268,13 @@ Low-level RPC changes or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED. - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban a node that has not previously been banned. Previously returned RPC_MISC_ERROR. - - `removeprunedfunds` now returns RPC_WALLET_ERROR if `BGLd` is unable to remove + - `removeprunedfunds` now returns RPC_WALLET_ERROR if `bitcoind` is unable to remove the transaction. Previously returned RPC_INTERNAL_ERROR. - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not exist in the wallet. Previously returned RPC_INTERNAL_ERROR. - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change address is provided. Previously returned RPC_INVALID_PARAMETER. - - `fundrawtransaction` now returns RPC_WALLET_ERROR if `BGLd` is unable to create + - `fundrawtransaction` now returns RPC_WALLET_ERROR if `bitcoind` is unable to create the transaction. The error message provides further details. Previously returned RPC_INTERNAL_ERROR. - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has @@ -331,17 +331,17 @@ Low-level RPC changes - #9740 `9fec4da` Add friendly output to dumpwallet (aideca) - #10426 `16f6c98` Replace bytes_serialized with bogosize (sipa) - #10252 `980deaf` RPC/Mining: Restore API compatibility for prioritisetransaction (luke-jr) -- #9672 `46311e7` Opt-into-RBF for RPC & BGL-tx (luke-jr) +- #9672 `46311e7` Opt-into-RBF for RPC & bitcoin-tx (luke-jr) - #10481 `9c248e3` Decodehextx scripts sanity check (achow101) - #10488 `fa1f106` Note that the prioritizetransaction dummy value is deprecated, and has no meaning (TheBlueMatt) - #9738 `c94b89e` gettxoutproof() should return consistent result (jnewbery) - #10191 `00350bd` [trivial] Rename unused RPC arguments 'dummy' (jnewbery) - #10627 `b62b4c8` fixed listunspent rpc convert parameter (tnakagawa) - #10412 `bef02fb` Improve wallet rescan API (ryanofsky) -- #10400 `1680ee0` [RPC] Add an uptime command that displays the amount of time (in seconds) BGLd has been running (rvelhote) +- #10400 `1680ee0` [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running (rvelhote) - #10683 `d81bec7` rpc: Move the `generate` RPC call to rpcwallet (laanwj) - #10710 `30bc0f6` REST/RPC example update (Mirobit) -- #10747 `9edda0c` [rpc] fix verbose argument for getblock in BGL-cli (jnewbery) +- #10747 `9edda0c` [rpc] fix verbose argument for getblock in bitcoin-cli (jnewbery) - #10589 `104f5f2` More economical fee estimates for RBF and RPC options to control (morcos) - #10543 `b27b004` Change API to estimaterawfee (morcos) - #10807 `afd2fca` getbalance example covers at least 6 confirms (instagibbs) @@ -450,7 +450,7 @@ Low-level RPC changes - #10136 `81da4c7` build: Disable Wshadow warning (laanwj) - #10166 `64962ae` Ignore Doxyfile generated from Doxyfile.in template (paveljanik) - #10239 `0416ea9` Make Boost use std::atomic internally (sipa) -- #10228 `27faa6c` build: regenerate BGL-config.h as necessary (theuni) +- #10228 `27faa6c` build: regenerate bitcoin-config.h as necessary (theuni) - #10273 `8979f45` [scripts] Minor improvements to `macdeployqtplus` script (chrisgavin) - #10325 `a26280b` 0.15.0 Depends Updates (fanquake) - #10328 `79aeff6` Update contrib/debian to latest Ubuntu PPA upload (TheBlueMatt) @@ -576,7 +576,7 @@ Low-level RPC changes - #9497 `2c781fb` CCheckQueue Unit Tests (JeremyRubin) - #10024 `9225de2` [trivial] Use log.info() instead of print() in remaining functional test cases (jnewbery) - #9956 `3192e52` Reorganise qa directory (jnewbery) -- #10017 `02d64bd` combine_logs.py - aggregates log files from multiple BGLds during functional tests (jnewbery) +- #10017 `02d64bd` combine_logs.py - aggregates log files from multiple bitcoinds during functional tests (jnewbery) - #10047 `dfef6b6` [tests] Remove unused variables and imports (practicalswift) - #9701 `a230b05` Make bumpfee tests less fragile (ryanofsky) - #10053 `ca20923` [test] Allow functional test cases to be skipped (jnewbery) @@ -596,7 +596,7 @@ Low-level RPC changes - #10152 `080d7c7` [trivial] remove unused line in Travis config (jnewbery) - #10159 `df1ca9e` [tests] color test results and sort alphabetically (jnewbery) - #10124 `88799ea` [test] Suppress test logging spam (jnewbery) -- #10142 `ed09dd3` Run BGL_test-qt under minimal QPA platform (ryanofsky) +- #10142 `ed09dd3` Run bitcoin_test-qt under minimal QPA platform (ryanofsky) - #9949 `a27dbc5` [bench] Avoid function call arguments which are pointers to uninitialized values (practicalswift) - #10187 `b44adf9` tests: Fix test_runner return value in case of skipped test (laanwj) - #10197 `d86bb07` [tests] Functional test warnings (jnewbery) @@ -634,7 +634,7 @@ Low-level RPC changes - #10415 `217b416` [tests] Speed up fuzzing by ~200x when using afl-fuzz (practicalswift) - #10445 `b4b057a` Add test for empty chain and reorg consistency for gettxoutsetinfo (gmaxwell) - #10423 `1aefc94` [tests] skipped tests should clean up after themselves (jnewbery) -- #10359 `329fc1d` [tests] functional tests should call BGLTestFramework start/stop node methods (jnewbery) +- #10359 `329fc1d` [tests] functional tests should call BitcoinTestFramework start/stop node methods (jnewbery) - #10514 `e103b3f` Bugfix: missing == 0 after randrange (sipa) - #10515 `c871f32` [test] Add test for getchaintxstats (jimmysong) - #10509 `bea5b00` Remove xvfb configuration from travis (ryanofsky) @@ -648,12 +648,12 @@ Low-level RPC changes - #10555 `643fa0b` [tests] various improvements to zmq_test.py (jnewbery) - #10533 `d083bd9` [tests] Use cookie auth instead of rpcuser and rpcpassword (achow101) - #10632 `c68a9a6` qa: Add stopatheight test (MarcoFalke) -- #10636 `4bc853b` [qa] util: Check return code after closing BGLd proc (MarcoFalke) +- #10636 `4bc853b` [qa] util: Check return code after closing bitcoind proc (MarcoFalke) - #10662 `e0a7801` Initialize randomness in benchmarks (achow101) - #10612 `7c87a9c` The young person's guide to the test_framework (jnewbery) - #10659 `acb1153` [qa] blockchain: Pass on closed connection during generate call (MarcoFalke) - #10690 `416af3e` [qa] Bugfix: allow overriding extra_args in ComparisonTestFramework (sdaftuar) -- #10556 `65cc7aa` Move stop/start functions from utils.py into BGLTestFramework (jnewbery) +- #10556 `65cc7aa` Move stop/start functions from utils.py into BitcoinTestFramework (jnewbery) - #10704 `dd07f47` [tests] nits in dbcrash.py (jnewbery) - #10743 `be82498` [test] don't run dbcrash.py on Travis (jnewbery) - #10761 `d3b5870` [tests] fix replace_by_fee.py (jnewbery) @@ -694,7 +694,7 @@ Low-level RPC changes - #9734 `0c17afc` Add updating of chainTxData to release process (sipa) - #10063 `530fcbd` add missing spaces so that markdown recognizes headline (flack) - #10085 `db1ae54` Docs: remove 'noconnect' option (jlopp) -- #10090 `8e4f7e7` Update BGL.conf with example for pruning (coinables) +- #10090 `8e4f7e7` Update bitcoin.conf with example for pruning (coinables) - #9424 `1a5aaab` Change LogAcceptCategory to use uint32_t rather than sets of strings (gmaxwell) - #10036 `fbf36ca` Fix init README format to render correctly on github (jlopp) - #10058 `a2cd0b0` No need to use OpenSSL malloc/free (tjps) @@ -718,10 +718,10 @@ Low-level RPC changes - #10372 `15254e9` Add perf counter data to GetStrongRandBytes state in scheduler (TheBlueMatt) - #10461 `55b72f3` Update style guide (sipa) - #10486 `10e8c0a` devtools: Retry after signing fails in github-merge (laanwj) -- #10447 `f259263` Make BGLd invalid argument error message specific (laanwj) +- #10447 `f259263` Make bitcoind invalid argument error message specific (laanwj) - #10495 `6a38b79` contrib: Update location of seeds.txt (laanwj) - #10469 `b6b150b` Fixing typo in rpcdump.cpp help message (keystrike) -- #10451 `27b9931` contrib/init/BGLd.openrcconf: Don't disable wallet by default (luke-jr) +- #10451 `27b9931` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (luke-jr) - #10323 `00d3692` Update to latest libsecp256k1 master (sipa) - #10422 `cec9e1e` Fix timestamp in fee estimate debug message (morcos) - #10566 `5d034ee` [docs] Use the "domain name setup" image (previously unused) in the gitian docs (practicalswift) @@ -740,9 +740,9 @@ Low-level RPC changes - #10728 `7397af9` fix typo in help text for removeprunedfunds (AkioNak) - #10193 `6dbcc74` scripted-diff: Remove #include (jtimon) - #10676 `379aed0` document script-based return fields for validateaddress (instagibbs) -- #10651 `cef4b5c` Verify binaries from BGLcore.org and BGL.org (TheBlueMatt) +- #10651 `cef4b5c` Verify binaries from bitcoincore.org and bitcoin.org (TheBlueMatt) - #10786 `ca4c545` Add PR description to merge commit in github-merge.py (sipa) -- #10812 `c5904e8` [utils] Allow BGL-cli's -rpcconnect option to be used with square brackets (jnewbery) +- #10812 `c5904e8` [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets (jnewbery) - #10842 `3895e25` Fix incorrect Doxygen tag (@ince → @since). Doxygen parameter name matching (practicalswift) - #10681 `df0793f` add gdb attach process to test README (instagibbs) - #10789 `1124328` Punctuation/grammer fixes in rpcwallet.cpp (stevendlander) @@ -759,7 +759,7 @@ Low-level RPC changes - #9792 `342b9bc` FastRandomContext improvements and switch to ChaCha20 (sipa) - #9505 `67ed40e` Prevector Quick Destruct (JeremyRubin) - #10820 `ef37f20` Use cpuid intrinsics instead of asm code (sipa) -- #9999 `a328904` [LevelDB] Plug leveldb logs to BGL logs (NicolasDorier) +- #9999 `a328904` [LevelDB] Plug leveldb logs to bitcoin logs (NicolasDorier) - #9693 `c5e9e42` Prevent integer overflow in ReadVarInt (gmaxwell) - #10129 `351d0ad` scheduler: fix sub-second precision with boost < 1.50 (theuni) - #10153 `fade788` logging: Fix off-by-one for shrinkdebugfile default (MarcoFalke) @@ -771,7 +771,7 @@ Low-level RPC changes - #10837 `8bc6d1f` Fix resource leak on error in GetDevURandom (corebob) - #10832 `89bb036` init: Factor out AppInitLockDataDirectory and fix startup core dump issue (laanwj) - #10914 `b995a37` Add missing lock in CScheduler::AreThreadsServicingQueue() (TheBlueMatt) -- #10958 `659c096` Update to latest BGL patches for LevelDB (sipa) +- #10958 `659c096` Update to latest Bitcoin patches for LevelDB (sipa) - #10919 `c1c671f` Fix more init bugs (TheBlueMatt) Credits @@ -875,4 +875,4 @@ Thanks to everyone who directly contributed to this release: - Warren Togami - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.1.md b/doc/release-notes/release-notes-0.15.1.md index 61a8a5834c..75d2e09714 100644 --- a/doc/release-notes/release-notes-0.15.1.md +++ b/doc/release-notes/release-notes-0.15.1.md @@ -1,29 +1,29 @@ -BGL Core version *0.15.1* is now available from: +Bitcoin Core version *0.15.1* is now available from: - + or - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or higher, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to @@ -52,10 +52,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. @@ -65,7 +65,7 @@ Notable changes Network fork safety enhancements -------------------------------- -A number of changes to the way BGL Core deals with peer connections and invalid blocks +A number of changes to the way Bitcoin Core deals with peer connections and invalid blocks have been made, as a safety precaution against blockchain forks and misbehaving peers. - Unrequested blocks with less work than the minimum-chain-work are now no longer processed even @@ -202,19 +202,19 @@ Low-level RPC changes - #11399 `a825d4a` Fix bip68-sequence rpc test (jl2012) - #11150 `847c75e` Add getmininginfo test (mess110) - #11407 `806c78f` add functional test for mempoolreplacement command line arg (instagibbs) -- #11433 `e169349` Restore BGL-util-test py2 compatibility (MarcoFalke) +- #11433 `e169349` Restore bitcoin-util-test py2 compatibility (MarcoFalke) - #11308 `2e1ac70` zapwallettxes: Wait up to 3s for mempool reload (MarcoFalke) -- #10798 `716066d` test BGL-cli (jnewbery) +- #10798 `716066d` test bitcoin-cli (jnewbery) - #11443 `019c492` Allow "make cov" out-of-tree; Fix rpc mapping check (MarcoFalke) - #11445 `51bad91` 0.15.1 Backports (MarcoFalke) - #11319 `2f0b30a` Fix error introduced into p2p-segwit.py, and prevent future similar errors (sdaftuar) - #10552 `e4605d9` Tests for zmqpubrawtx and zmqpubrawblock (achow101) - #11067 `eeb24a3` TestNode: Add wait_until_stopped helper method (MarcoFalke) - #11068 `5398f20` Move wait_until to util (MarcoFalke) -- #11125 `812c870` Add BGL-cli -stdin and -stdinrpcpass functional tests (promag) +- #11125 `812c870` Add bitcoin-cli -stdin and -stdinrpcpass functional tests (promag) - #11077 `1d80d1e` fix timeout issues from TestNode (jnewbery) - #11078 `f1ced0d` Make p2p-leaktests.py more robust (jnewbery) -- #11210 `f3f7891` Stop test_BGL-qt touching ~/.BGL (MeshCollider) +- #11210 `f3f7891` Stop test_bitcoin-qt touching ~/.bitcoin (MeshCollider) - #11234 `f0b6795` Remove redundant testutil.cpp|h files (MeshCollider) - #11215 `cef0319` fixups from set_test_params() (jnewbery) - #11345 `f9cf7b5` Check connectivity before sending in assumevalid.py (jnewbery) @@ -232,7 +232,7 @@ Low-level RPC changes - #11310 `b6468d3` Test listwallets RPC (mess110) ### Miscellaneous -- #11377 `75997c3` Disallow uncompressed pubkeys in BGL-tx [multisig] output adds (TheBlueMatt) +- #11377 `75997c3` Disallow uncompressed pubkeys in bitcoin-tx [multisig] output adds (TheBlueMatt) - #11437 `dea3b87` [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 (fanquake) - #11318 `8b61aee` Put back inadvertently removed copyright notices (gmaxwell) - #11442 `cf18f42` [Docs] Update OpenBSD Build Instructions for OpenBSD 6.2 (fanquake) @@ -274,4 +274,4 @@ Thanks to everyone who directly contributed to this release: - Tomas van der Wansem - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.2.md b/doc/release-notes/release-notes-0.15.2.md index 8403de41f5..1f58279051 100644 --- a/doc/release-notes/release-notes-0.15.2.md +++ b/doc/release-notes/release-notes-0.15.2.md @@ -1,25 +1,25 @@ -BGL Core version *0.15.2* is now available from: +Bitcoin Core version *0.15.2* is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or higher, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to @@ -48,10 +48,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. @@ -62,7 +62,7 @@ Denial-of-Service vulnerability CVE-2018-17144 ------------------------------- A denial-of-service vulnerability exploitable by miners has been discovered in -BGL Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of +Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of the vulnerable versions to 0.15.2 or 0.16.3 as soon as possible. 0.15.2 Change log @@ -87,9 +87,9 @@ the vulnerable versions to 0.15.2 or 0.16.3 as soon as possible. - #11289 `42ea47d` Add wallet backup text to import*, add* and dumpwallet RPCs (MeshCollider) - #11590 `6372a75` [Wallet] always show help-line of wallet encryption calls (Jonas Schnelli) -### BGL-tx +### bitcoin-tx -- #11554 `a69cc07` Sanity-check script sizes in BGL-tx (TheBlueMatt) +- #11554 `a69cc07` Sanity-check script sizes in bitcoin-tx (TheBlueMatt) ### Tests - #11277 `3a6cdd4` Add test for multiwallet batch RPC calls (Russell Yanofsky) diff --git a/doc/release-notes/release-notes-0.16.0.md b/doc/release-notes/release-notes-0.16.0.md index c3119714c1..8f158b3481 100644 --- a/doc/release-notes/release-notes-0.16.0.md +++ b/doc/release-notes/release-notes-0.16.0.md @@ -1,25 +1,25 @@ -BGL Core version 0.16.0 is now available from: +Bitcoin Core version 0.16.0 is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, @@ -40,10 +40,10 @@ wallets that were created with older versions are not affected by this. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -54,7 +54,7 @@ Wallet changes ### Segwit Wallet -BGL Core 0.16.0 introduces full support for segwit in the wallet and user interfaces. A new `-addresstype` argument has been added, which supports `legacy`, `p2sh-segwit` (default), and `bech32` addresses. It controls what kind of addresses are produced by `getnewaddress`, `getaccountaddress`, and `createmultisigaddress`. A `-changetype` argument has also been added, with the same options, and by default equal to `-addresstype`, to control which kind of change is used. +Bitcoin Core 0.16.0 introduces full support for segwit in the wallet and user interfaces. A new `-addresstype` argument has been added, which supports `legacy`, `p2sh-segwit` (default), and `bech32` addresses. It controls what kind of addresses are produced by `getnewaddress`, `getaccountaddress`, and `createmultisigaddress`. A `-changetype` argument has also been added, with the same options, and by default equal to `-addresstype`, to control which kind of change is used. A new `address_type` parameter has been added to the `getnewaddress` and `addmultisigaddress` RPCs to specify which type of address to generate. A `change_type` argument has been added to the `fundrawtransaction` RPC to override the `-changetype` argument for specific transactions. @@ -92,9 +92,9 @@ use the `replaceable` argument for individual transactions. ### Wallets directory configuration (`-walletdir`) -BGL Core now has more flexibility in where the wallets directory can be +Bitcoin Core now has more flexibility in where the wallets directory can be located. Previously wallet database files were stored at the top level of the -BGL data directory. The behavior is now: +bitcoin data directory. The behavior is now: - For new installations (where the data directory doesn't already exist), wallets will now be stored in a new `wallets/` subdirectory inside the data @@ -112,7 +112,7 @@ becomes unavailable during operation, funds may be lost. Build: Minimum GCC bumped to 4.8.x ------------------------------------ -The minimum version of the GCC compiler required to compile BGL Core is now 4.8. No effort will be +The minimum version of the GCC compiler required to compile Bitcoin Core is now 4.8. No effort will be made to support older versions of GCC. See discussion in issue #11732 for more information. The minimum version for the Clang compiler is still 3.3. Other minimum dependency versions can be found in `doc/dependencies.md` in the repository. @@ -191,14 +191,14 @@ The `validateaddress` RPC output has been extended with a few new fields, and su Other changed command-line options ---------------------------------- - `-debuglogfile=` can be used to specify an alternative debug logging file. -- BGL-cli now has an `-stdinrpcpass` option to allow the RPC password to be read from standard input. +- bitcoin-cli now has an `-stdinrpcpass` option to allow the RPC password to be read from standard input. - The `-usehd` option has been removed. -- BGL-cli now supports a new `-getinfo` flag which returns an output like that of the now-removed `getinfo` RPC. +- bitcoin-cli now supports a new `-getinfo` flag which returns an output like that of the now-removed `getinfo` RPC. Testing changes ---------------- - The default regtest JSON-RPC port has been changed to 18443 to avoid conflict with testnet's default of 18332. -- Segwit is now always active in regtest mode by default. Thus, if you upgrade a regtest node you will need to either -reindex or use the old rules by adding `vbparams=segwit:0:999999999999` to your regtest BGL.conf. Failure to do this will result in a CheckBlockIndex() assertion failure that will look like: Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)' failed. +- Segwit is now always active in regtest mode by default. Thus, if you upgrade a regtest node you will need to either -reindex or use the old rules by adding `vbparams=segwit:0:999999999999` to your regtest bitcoin.conf. Failure to do this will result in a CheckBlockIndex() assertion failure that will look like: Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)' failed. 0.16.0 change log ------------------ @@ -235,7 +235,7 @@ Testing changes - #11740 `59d3dc8` Implement BIP159 NODE_NETWORK_LIMITED (pruned peers) *signaling only* (jonasschnelli) - #11583 `37ffa16` Do not make it trivial for inbound peers to generate log entries (TheBlueMatt) - #11363 `ba2f195` Split socket create/connect (theuni) -- #11917 `bc66765` Add testnet DNS seed: seed.testnet.BGL.sprovoost.nl (Sjors) +- #11917 `bc66765` Add testnet DNS seed: seed.testnet.bitcoin.sprovoost.nl (Sjors) - #11512 `6e89de5` Use GetDesireableServiceFlags in seeds, dnsseeds, fixing static seed adding (TheBlueMatt) - #12262 `16bac24` Hardcoded seed update (laanwj) - #12270 `9cf6393` Update chainTxData for 0.16 (laanwj) @@ -268,7 +268,7 @@ Testing changes - #11923 `81c89e9` Remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx (PierreRochard) - #11726 `604e08c` Cleanups + nit fixes for walletdir PR (MeshCollider) - #11403 `d889c03` Segwit wallet support (sipa) -- #11970 `b7450cd` Add test coverage for BGL-cli multiwallet calls (ryanofsky) +- #11970 `b7450cd` Add test coverage for bitcoin-cli multiwallet calls (ryanofsky) - #11904 `66e3af7` Add a lock to the wallet directory (MeshCollider) - #12101 `c7978be` Clamp walletpassphrase timeout to 2^30 seconds and check its bounds (achow101) - #12210 `17180fa` Deprecate addwitnessaddress (laanwj) @@ -281,7 +281,7 @@ Testing changes ### RPC and other APIs - #11008 `3841aaf` Enable disablesafemode by default (gmaxwell) - #11050 `7ed57d3` Avoid treating null RPC arguments different from missing arguments (ryanofsky) -- #10997 `affe927` Add option -stdinrpcpass to BGL-cli to allow RPC password to be read from standard input (jharvell) +- #10997 `affe927` Add option -stdinrpcpass to bitcoin-cli to allow RPC password to be read from standard input (jharvell) - #11179 `e0e3cbb` Push down safe mode checks (laanwj) - #11203 `d745b4c` add wtxid to mempool entry output (sdaftuar) - #11099 `bc561b4` Add savemempool RPC (greenaddress) @@ -366,7 +366,7 @@ Testing changes - #11541 `bb9ab0f` Build: Fix Automake warnings when running autogen.sh (fanquake) - #11611 `0e70791` [build] Don't fail when passed --disable-lcov and lcov isn't available (fanquake) - #11651 `3c098a8` refactor: Make all #includes relative to project root (laanwj, MeshCollider, ryanofsky) -- #11621 `1f7695b` [build] Add temp_BGL_locale_qrc to CLEAN_QT to fix make distcheck (fanquake) +- #11621 `1f7695b` [build] Add temp_bitcoin_locale_qrc to CLEAN_QT to fix make distcheck (fanquake) - #11755 `84fa645` [Docs] Bump minimum required version of GCC to 4.8 (fanquake) - #9254 `6d3dc52` [depends] ZeroMQ 4.2.2 (fanquake) - #11842 `3c8f0a3` [build] Add missing stuff to clean-local (kallewoof) @@ -376,7 +376,7 @@ Testing changes - #11903 `8f68fd2` [trivial] Add required package dependencies for depends cross compilation (jonasschnelli) - #12168 `45cf8a0` #include sys/fcntl.h to just fcntl.h (without sys/) (jsarenik) - #12095 `3fa1ab4` Use BDB_LIBS/CFLAGS and pass --disable-replication (fanquake) -- #11711 `6378e5c` BGL_qt.m4: Minor fixes and clean-ups (fanquake) +- #11711 `6378e5c` bitcoin_qt.m4: Minor fixes and clean-ups (fanquake) - #11989 `90d4104` .gitignore: add QT Creator artifacts (Sjors) - #11577 `c0ae864` Fix warnings (-Wsign-compare) when building with DEBUG_ADDRMAN (practicalswift) @@ -389,7 +389,7 @@ Testing changes - #11260 `52f8877` travis: Assert default datadir isn't created, Run scripted diff only once (MarcoFalke) - #11271 `638e6c5` travis: filter out pyenv (theuni) - #11285 `3255d63` Add -usehd to excluded args in check-doc.py (MeshCollider) -- #11297 `16e4184` Make sure ~/.BGL doesn't exist before build (MeshCollider) +- #11297 `16e4184` Make sure ~/.bitcoin doesn't exist before build (MeshCollider) - #11311 `cce94c5` travis: Revert default datadir check (MarcoFalke) - #11300 `f4ed44a` Add a lint check for trailing whitespace (MeshCollider) - #11323 `4ce2f3d` mininode: add an optimistic write and disable nagle (theuni) @@ -535,7 +535,7 @@ Testing changes - #10781 `60dd9cc` Python cleanups (practicalswift) - #10701 `50fae68` Remove the virtual specifier for functions with the override specifier (practicalswift) - #11164 `38a54a5` Fix boost headers included as user instead of system headers (danra) -- #11143 `3aa60b7` Fix include path for BGL-config.h (danra) +- #11143 `3aa60b7` Fix include path for bitcoin-config.h (danra) - #8330 `59e1789` Structure Packing Optimizations in C{,Mutable}Transaction (JeremyRubin) - #10845 `39ae413` Remove unreachable code (practicalswift) - #11238 `6acdb1f` Add assertions before potential null deferences (MeshCollider) @@ -578,8 +578,8 @@ Testing changes ### Miscellaneous - #11246 `777519b` github-merge: Coalesce git fetches (laanwj) -- #10871 `c9a4aa8` Handle getinfo in BGL-cli w/ -getinfo (revival of #8843) (achow101) -- #11419 `093074b` Utils: Fix launchctl not being able to stop BGLd (OmeGak) +- #10871 `c9a4aa8` Handle getinfo in bitcoin-cli w/ -getinfo (revival of #8843) (achow101) +- #11419 `093074b` Utils: Fix launchctl not being able to stop bitcoind (OmeGak) - #11394 `6e4e98e` Perform a weaker subtree check in Travis (sipa) - #11702 `4122112` [build] Add a script for installing db4 (jamesob) - #11794 `dd49862` Prefix leveldb debug logging (laanwj) @@ -596,7 +596,7 @@ Testing changes - #11951 `1fb34e0` Remove dead feeest-file read code for old versions (TheBlueMatt) - #11421 `9ccafb1` Merge current secp256k1 subtree (MarcoFalke) - #11573 `2631d55` [Util] Update tinyformat.h (fanquake) -- #10529 `331352f` Improve BGLd systemd service file (Flowdalic) +- #10529 `331352f` Improve bitcoind systemd service file (Flowdalic) - #11620 `70fec9e` [build] .gitignore: add background.tiff (Sjors) - #11558 `68e021e` Minimal code changes to allow msvc compilation (sipsorcery) - #11284 `10bee0d` Fix invalid memory access in CScript::operator+= (guidovranken, ajtowns) @@ -717,4 +717,4 @@ Thanks to everyone who directly contributed to this release: - Willy Ko - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.1.md b/doc/release-notes/release-notes-0.16.1.md index 58a730cca5..d99361ae1d 100644 --- a/doc/release-notes/release-notes-0.16.1.md +++ b/doc/release-notes/release-notes-0.16.1.md @@ -1,25 +1,25 @@ -BGL Core version 0.16.1 is now available from: +Bitcoin Core version 0.16.1 is now available from: - + This is a new minor version release, with various bugfixes as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, @@ -40,10 +40,10 @@ wallets that were created with older versions are not affected by this. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -97,11 +97,11 @@ weights. - #12804 `4bdb0ce` Fix intermittent rpc_net.py failure. (jnewbery) - #12553 `0e98f96` Prefer wait_until over polling with time.sleep (Empact) - #12486 `cfebd40` Round target fee to 8 decimals in assert_fee_amount (kallewoof) -- #12843 `df38b13` Test starting BGLd with -h and -version (jnewbery) +- #12843 `df38b13` Test starting bitcoind with -h and -version (jnewbery) - #12475 `41c29f6` Fix python TypeError in script.py (MarcoFalke) - #12638 `0a76ed2` Cache only chain and wallet for regtest datadir (MarcoFalke) - #12902 `7460945` Handle potential cookie race when starting node (sdaftuar) -- #12904 `6c26df0` Ensure BGLd processes are cleaned up when tests end (sdaftuar) +- #12904 `6c26df0` Ensure bitcoind processes are cleaned up when tests end (sdaftuar) - #13049 `9ea62a3` Backports (MarcoFalke) - #13201 `b8aacd6` Handle disconnect_node race (sdaftuar) @@ -142,4 +142,4 @@ Thanks to everyone who directly contributed to this release: - Tamas Blummer - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.2.md b/doc/release-notes/release-notes-0.16.2.md index c20f8a1ce4..d549748d25 100644 --- a/doc/release-notes/release-notes-0.16.2.md +++ b/doc/release-notes/release-notes-0.16.2.md @@ -1,25 +1,25 @@ -BGL Core version 0.16.2 is now available from: +Bitcoin Core version 0.16.2 is now available from: - + This is a new minor version release, with various bugfixes as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, @@ -40,10 +40,10 @@ wallets that were created with older versions are not affected by this. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. 0.16.2 change log @@ -113,4 +113,4 @@ And to those that reported security issues: - Braydon Fuller - Himanshu Mehta -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.3.md b/doc/release-notes/release-notes-0.16.3.md index 1f8486bab8..2e52d309c2 100644 --- a/doc/release-notes/release-notes-0.16.3.md +++ b/doc/release-notes/release-notes-0.16.3.md @@ -1,24 +1,24 @@ -BGL Core version 0.16.3 is now available from: +Bitcoin Core version 0.16.3 is now available from: - + This is a new minor version release, with various bugfixes. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database will be converted to a new format, which will take anywhere from a few minutes to half an hour, @@ -39,10 +39,10 @@ wallets that were created with older versions are not affected by this. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. Notable changes @@ -52,7 +52,7 @@ Denial-of-Service vulnerability ------------------------------- A denial-of-service vulnerability (CVE-2018-17144) exploitable by miners has -been discovered in BGL Core versions 0.14.0 up to 0.16.2. It is recommended +been discovered in Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of the vulnerable versions to 0.16.3 as soon as possible. 0.16.3 change log @@ -65,7 +65,7 @@ to upgrade any of the vulnerable versions to 0.16.3 as soon as possible. - #13547 `212ef1f` Make `signrawtransaction*` give an error when amount is needed but missing (ajtowns) ### Miscellaneous -- #13655 `1cdbea7` BGLconsensus: invalid flags error should be set to `BGLconsensus_err` (afk11) +- #13655 `1cdbea7` bitcoinconsensus: invalid flags error should be set to `bitcoinconsensus_err` (afk11) ### Documentation - #13844 `11b9dbb` correct the help output for -prune (hebasto) diff --git a/doc/release-notes/release-notes-0.17.0.1.md b/doc/release-notes/release-notes-0.17.0.1.md index 5dcb3dbbc3..92db7dac7d 100644 --- a/doc/release-notes/release-notes-0.17.0.1.md +++ b/doc/release-notes/release-notes-0.17.0.1.md @@ -1,16 +1,16 @@ -BGL Core version 0.17.0.1 is now available from: +Bitcoin Core version 0.17.0.1 is now available from: - + This release provides a minor bug fix for 0.17.0. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + Notable changes =============== diff --git a/doc/release-notes/release-notes-0.17.0.md b/doc/release-notes/release-notes-0.17.0.md index 52ffad45ab..418d7ba5f9 100644 --- a/doc/release-notes/release-notes-0.17.0.md +++ b/doc/release-notes/release-notes-0.17.0.md @@ -1,25 +1,25 @@ -BGL Core version 0.17.0 is now available from: +Bitcoin Core version 0.17.0 is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). If your node has a txindex, the txindex db will be migrated the first time you run 0.17.0 or newer, which may take up to a few hours. Your node will not be functional until this migration completes. @@ -46,10 +46,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported). -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't @@ -69,7 +69,7 @@ Changed configuration options ----------------------------- - `-includeconf=` can be used to include additional configuration files. - Only works inside the `BGL.conf` file, not inside included files or from + Only works inside the `bitcoin.conf` file, not inside included files or from command-line. Multiple files may be included. Can be disabled from command- line via `-noincludeconf`. Note that multi-argument commands like `-includeconf` will override preceding `-noincludeconf`, i.e. @@ -78,7 +78,7 @@ Changed configuration options includeconf=relative.conf ``` - as BGL.conf will still include `relative.conf`. + as bitcoin.conf will still include `relative.conf`. GUI changes ----------- @@ -109,7 +109,7 @@ same as before. Dynamic loading and creation of wallets --------------------------------------- -Previously, wallets could only be loaded or created at startup, by specifying `-wallet` parameters on the command line or in the BGL.conf file. It is now possible to load, create and unload wallets dynamically at runtime: +Previously, wallets could only be loaded or created at startup, by specifying `-wallet` parameters on the command line or in the bitcoin.conf file. It is now possible to load, create and unload wallets dynamically at runtime: - Existing wallets can be loaded by calling the `loadwallet` RPC. The wallet can be specified as file/directory basename (which must be located in the `walletdir` directory), or as an absolute path to a file/directory. - New wallets can be created (and loaded) by calling the `createwallet` RPC. The provided name must not match a wallet file in the `walletdir` directory or the name of a wallet that is currently loaded. @@ -131,8 +131,8 @@ It is now possible for a single configuration file to set different options for different networks. This is done by using sections or by prefixing the option with the network, such as: - main.uacomment=BGL - test.uacomment=BGL-testnet + main.uacomment=bitcoin + test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 @@ -151,7 +151,7 @@ outside of sections. A new 'label' API has been introduced for the wallet. This is intended as a replacement for the deprecated 'account' API. The 'account' can continue to -be used in V0.17 by starting BGLd with the '-deprecatedrpc=accounts' +be used in V0.17 by starting bitcoind with the '-deprecatedrpc=accounts' argument, and will be fully removed in V0.18. The label RPC methods mirror the account functionality, with the following functional differences: @@ -184,18 +184,18 @@ Here are the changes to RPC methods: | `listtransactions` | The `account` named parameter has been renamed to `dummy`. If provided, the `dummy` parameter must be set to the string `*`, unless running with the `-deprecatedrpc=accounts` argument (in which case functionality is unchanged). | | `getbalance` | `account`, `minconf` and `include_watchonly` parameters are deprecated, and can only be used if running with '-deprecatedrpc=accounts' | -BIP 174 Partially Signed BGL Transactions support +BIP 174 Partially Signed Bitcoin Transactions support ----------------------------------------------------- -[BIP 174 PSBT](https://github.com/BGL/bips/blob/master/bip-0174.mediawiki) is an interchange format for BGL transactions that are not fully signed +[BIP 174 PSBT](https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki) is an interchange format for Bitcoin transactions that are not fully signed yet, together with relevant metadata to help entities work towards signing it. It is intended to simplify workflows where multiple parties need to cooperate to produce a transaction. Examples include hardware wallets, multisig setups, and -[CoinJoin](https://BGLtalk.org/?topic=279249) transactions. +[CoinJoin](https://bitcointalk.org/?topic=279249) transactions. ### Overall workflow -Overall, the construction of a fully signed BGL transaction goes through the +Overall, the construction of a fully signed Bitcoin transaction goes through the following steps: - A **Creator** proposes a particular transaction to be created. He constructs @@ -210,7 +210,7 @@ following steps: partial signature for the inputs for which they have relevant key(s). - A **Finalizer** is run for each input to convert the partial signatures and possibly script information into a final `scriptSig` and/or `scriptWitness`. -- An **Extractor** produces a valid BGL transaction (in network format) +- An **Extractor** produces a valid Bitcoin transaction (in network format) from a PSBT for which all inputs are finalized. Generally, each of the above (excluding Creator and Extractor) will simply @@ -256,7 +256,7 @@ hardware implementations will typically implement multiple roles simultaneously. Upgrading non-HD wallets to HD wallets -------------------------------------- -Since BGL Core 0.13.0, creating new BIP 32 Hierarchical Deterministic wallets has been supported by BGL Core but old non-HD wallets could not be upgraded to HD. Now non-HD wallets can be upgraded to HD using the `-upgradewallet` command line option. This upgrade will result in the all keys in the keypool being marked as used and a new keypool generated. **A new backup must be made when this upgrade is performed.** +Since Bitcoin Core 0.13.0, creating new BIP 32 Hierarchical Deterministic wallets has been supported by Bitcoin Core but old non-HD wallets could not be upgraded to HD. Now non-HD wallets can be upgraded to HD using the `-upgradewallet` command line option. This upgrade will result in the all keys in the keypool being marked as used and a new keypool generated. **A new backup must be made when this upgrade is performed.** Additionally, `-upgradewallet` can be used to upgraded from a non-split HD chain (all keys generated with `m/0'/0'/i'`) to a split HD chain (receiving keys generated with `'m/0'/0'/i'` and change keys generated with `m'/0'/1'/i'`). When this upgrade occurs, all keys already in the keypool will remain in the keypool to be used until all keys from before the upgrade are exhausted. This is to avoid issues with backups and downgrades when some keys may come from the change key keypool. Users can begin using the new split HD chain keypools by using the `newkeypool` RPC to mark all keys in the keypool as used and begin using a new keypool generated from the split HD chain. @@ -290,9 +290,9 @@ Low-level RPC changes `fee`, `modifiedfee`, `ancestorfee` and `descendantfee`. - The new RPC `getzmqnotifications` returns information about active ZMQ notifications. -- When BGL is not started with any `-wallet=` options, the name of +- When bitcoin is not started with any `-wallet=` options, the name of the default wallet returned by `getwalletinfo` and `listwallets` RPCs is - now the empty string `""` instead of `"wallet.dat"`. If BGL is started + now the empty string `""` instead of `"wallet.dat"`. If bitcoin is started with any `-wallet=` options, there is no change in behavior, and the name of any wallet is just its `` string. - Passing an empty string (`""`) as the `address_type` parameter to @@ -322,7 +322,7 @@ Low-level RPC changes `pubkeys`, `sigsrequired`, `pubkey`, `addresses`, `embedded`, `iscompressed`, `account`, `timestamp`, `hdkeypath`, `hdmasterkeyid`. - `signrawtransaction` is deprecated and will be fully removed in v0.18. To use - `signrawtransaction` in v0.17, restart BGLd with + `signrawtransaction` in v0.17, restart bitcoind with `-deprecatedrpc=signrawtransaction`. Projects should transition to using `signrawtransactionwithkey` and `signrawtransactionwithwallet` before upgrading to v0.18. @@ -336,7 +336,7 @@ Other API changes - The log timestamp format is now ISO 8601 (e.g. "2018-02-28T12:34:56Z"). -- When running BGLd with `-debug` but without `-daemon`, logging to stdout +- When running bitcoind with `-debug` but without `-daemon`, logging to stdout is now the default behavior. Setting `-printtoconsole=1` no longer implicitly disables logging to debug.log. Instead, logging to file can be explicitly disabled by setting `-debuglogfile=0`. @@ -345,7 +345,7 @@ Transaction index changes ------------------------- The transaction index is now built separately from the main node procedure, -meaning the `-txindex` flag can be toggled without a full reindex. If BGLd +meaning the `-txindex` flag can be toggled without a full reindex. If bitcoind is run with `-txindex` on a node that is already partially or fully synced without one, the transaction index will be built in the background and become available once caught up. When switching from running `-txindex` to running @@ -417,7 +417,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #10387 `5c2aff8` Eventually connect to `NODE_NETWORK_LIMITED` peers (jonasschnelli) - #9037 `a36834f` Add test-before-evict discipline to addrman (EthanHeilman) - #12622 `e1d6e2a` Correct addrman logging (laanwj) -- #11962 `0a01843` add seed.BGL.sprovoost.nl to DNS seeds (Sjors) +- #11962 `0a01843` add seed.bitcoin.sprovoost.nl to DNS seeds (Sjors) - #12569 `23e7fe8` Increase signal-to-noise ratio in debug.log by adjusting log level when logging failed non-manual connect():s (practicalswift) - #12855 `c199869` Minor accumulated cleanups (tjps) - #13153 `ef46c99` Add missing newlines to debug logging (laanwj) @@ -568,7 +568,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #12080 `56cc022` Add support to search the address book (promag) - #12621 `2bac3e4` Avoid querying unnecessary model data when filtering transactions (promag) - #12721 `e476826` remove "new" button during receive-mode in addressbook (jonasschnelli) -- #12723 `310dc61` Qt5: Warning users about invalid-BIP21 URI BGL:// (krab) +- #12723 `310dc61` Qt5: Warning users about invalid-BIP21 URI bitcoin:// (krab) - #12610 `25cf18f` Multiwallet for the GUI (jonasschnelli) - #12779 `f4353da` Remove unused method setupAmountWidget(…) (practicalswift) - #12795 `68484d6` do not truncate .dat extension for wallets in gui (instagibbs) @@ -587,7 +587,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13043 `6e249e4` OptionsDialog: add prune setting (Sjors) - #13506 `6579d80` load wallet in UI after possible init aborts (jonasschnelli) - #13458 `dc53f7f` Drop qt4 support (laanwj) -- #13528 `b877c39` Move BGLGUI initializers to class, fix initializer order warning (laanwj) +- #13528 `b877c39` Move BitcoinGUI initializers to class, fix initializer order warning (laanwj) - #13536 `baf3a3a` coincontrol: Remove unused qt4 workaround (MarcoFalke) - #13537 `10ffca7` Peer table: Visualize inbound/outbound state for every row (wodry) - #13791 `2c14c1f` Reject dialogs if key escape is pressed (promag) @@ -623,7 +623,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13465 `81069a7` Avoid concurrency issue when make multiple target (ken2812221) - #13454 `45c00f8` Make sure `LC_ALL=C` is set in all shell scripts (practicalswift) - #13480 `31145a3` Avoid copies in range-for loops and add a warning to detect them (theuni) -- #13486 `66e1a08` Move rpc/util.cpp from libBGL-util to libBGL-server (ken2812221) +- #13486 `66e1a08` Move rpc/util.cpp from libbitcoin-util to libbitcoin-server (ken2812221) - #13580 `40334c7` Detect if char equals `int8_t` (ken2812221) - #12788 `287e4ed` Tune wildcards for LIBSECP256K1 target (kallewoof) - #13611 `b55f0c3` bugfix: Use `__cpuid_count` for gnu C to avoid gitian build fail (ken2812221) @@ -633,7 +633,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13659 `90b1c7e` add missing leveldb defines (theuni) - #13368 `c0f1569` Update gitian-build.sh for docker (achow101) - #13171 `19d8ca5` Change gitian-descriptors to use bionic instead (ken2812221) -- #13604 `75bea05` Add depends 32-bit arm support for BGL-qt (TheCharlatan) +- #13604 `75bea05` Add depends 32-bit arm support for bitcoin-qt (TheCharlatan) - #13623 `9cdb19f` Migrate gitian-build.sh to python (ken2812221) - #13689 `8c36432` disable Werror when building zmq (greenaddress) - #13617 `cf7f9ae` release: Require macos 10.10+ (fanquake) @@ -641,7 +641,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13095 `415f2bf` update `ax_boost_chrono`/`unit_test_framework` (fanquake) - #13732 `e8ffec6` Fix Qt's rcc determinism (Fuzzbawls) - #13782 `8284f1d` Fix osslsigncode compile issue in gitian-build (ken2812221) -- #13696 `2ab7208` Add aarch64 qt depends support for cross compiling BGL-qt (TheCharlatan) +- #13696 `2ab7208` Add aarch64 qt depends support for cross compiling bitcoin-qt (TheCharlatan) - #13705 `b413ba0` Add format string linter (practicalswift) - #14000 `48c8459` fix qt determinism (theuni) - #14018 `3e4829a` Bugfix: NSIS: Exclude `Makefile*` from docs (luke-jr) @@ -652,12 +652,12 @@ Support for Python 2 has been discontinued for all test files and tools. - #12252 `8d57319` Require all tests to follow naming convention (ajtowns) - #12295 `935eb8d` Enable flake8 warnings for all currently non-violated rules (practicalswift) - #11858 `b4d8549` Prepare tests for Windows (MarcoFalke) -- #11771 `2dbc4a4` Change invalidtxrequest to use BGLTestFramework (jnewbery) +- #11771 `2dbc4a4` Change invalidtxrequest to use BitcoinTestFramework (jnewbery) - #12200 `d09968f` Bind functional test nodes to 127.0.0.1 (Sjors) - #12425 `26dc2da` Add some script tests (richardkiss) - #12455 `23481fa` Fix bip68 sequence test to reflect updated rpc error message (Empact) - #12477 `acd1e61` Plug memory leaks and stack-use-after-scope (MarcoFalke) -- #12443 `07090c5` Move common args to BGL.conf (MarcoFalke) +- #12443 `07090c5` Move common args to bitcoin.conf (MarcoFalke) - #12570 `39dcac2` Add test cases for HexStr (`std::reverse_iterator` and corner cases) (kostaz) - #12582 `6012f1c` Fix ListCoins test failure due to unset `g_wallet_allow_fallback_fee` (ryanofsky) - #12516 `7f99964` Avoid unintentional unsigned integer wraparounds in tests (practicalswift) @@ -665,7 +665,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #12600 `29088b1` Add a test for large tx output scripts with segwit input (richardkiss) - #12627 `791c3ea` Fix some tests to work on native windows (MarcoFalke) - #12405 `0f58d7f` travis: Full clone for git subtree check (MarcoFalke) -- #11772 `0630974` Change invalidblockrequest to use BGLTestFramework (jnewbery) +- #11772 `0630974` Change invalidblockrequest to use BitcoinTestFramework (jnewbery) - #12681 `1846296` Fix ComputeTimeSmart test failure with `-DDEBUG_LOCKORDER` (ryanofsky) - #12682 `9f04c8e` travis: Clone depth 1 unless `$check_doc` (MarcoFalke) - #12710 `00d1680` Append scripts to new `test_list` array to fix bad assignment (jeffrade) @@ -678,9 +678,9 @@ Support for Python 2 has been discontinued for all test files and tools. - #12806 `18606eb` Fix function names in `feature_blocksdir` (MarcoFalke) - #12811 `0d8fc8d` Make summary row bold-red if any test failed and show failed tests at end of table (laanwj) - #12790 `490644d` Use blockmaxweight where tests previously had blockmaxsize (conscott) -- #11773 `f0f9732` Change `feature_block.py` to use BGLTestFramework (jnewbery) +- #11773 `f0f9732` Change `feature_block.py` to use BitcoinTestFramework (jnewbery) - #12839 `40f4baf` Remove travis checkout depth (laanwj) -- #11817 `2a09a78` Change `feature_csv_activation.py` to use BGLTestFramework (jnewbery) +- #11817 `2a09a78` Change `feature_csv_activation.py` to use BitcoinTestFramework (jnewbery) - #12284 `fa5825d` Remove assigned but never used local variables. Enable Travis checking for unused local variables (practicalswift) - #12719 `9beded5` Add note about test suite naming convention in developer-notes.md (practicalswift) - #12861 `c564424` Stop `feature_block.py` from blowing up memory (jnewbery) @@ -690,7 +690,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #12766 `69310a3` Tidy up REST interface functional tests (romanz) - #12849 `83c7533` Add logging in loops in `p2p_sendhears.py` (ccdle12) - #12895 `d6f10b2` Add note about test suite name uniqueness requirement to developer notes (practicalswift) -- #12856 `27278df` Add Metaclass for BGLTestFramework (WillAyd) +- #12856 `27278df` Add Metaclass for BitcoinTestFramework (WillAyd) - #12918 `6fc5a05` Assert on correct variable (kallewoof) - #11878 `a04440f` Add Travis check for duplicate includes (practicalswift) - #12917 `cf8073f` Windows fixups for functional tests (MarcoFalke) @@ -747,7 +747,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13219 `08516e0` bench: Add block assemble benchmark (MarcoFalke) - #13530 `b1dc39d` bench: Add missing pow.h header (laanwj) - #12686 `2643fa5` Add -ftrapv to CFLAGS and CXXFLAGS when --enable-debug is used. Enable -ftrapv in Travis (practicalswift) -- #12882 `d96bdd7` Make `test_BGL` pass under ThreadSanitzer (clang). Fix lock-order-inversion (potential deadlock) (practicalswift) +- #12882 `d96bdd7` Make `test_bitcoin` pass under ThreadSanitzer (clang). Fix lock-order-inversion (potential deadlock) (practicalswift) - #13535 `2328039` `wallet_basic`: Specify minimum required amount for listunspent (MarcoFalke) - #13551 `c93c360` Fix incorrect documentation for test case `cuckoocache_hit_rate_ok` (practicalswift) - #13563 `b330f3f` bench: Simplify coinselection (promag) @@ -763,7 +763,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13663 `cbc9b50` Avoid read/write to default datadir (MarcoFalke) - #13682 `f8a32a3` bench: Remove unused variable (practicalswift) - #13638 `6fcdb5e` Use `MAX_SCRIPT_ELEMENT_SIZE` from script.py (domob1812) -- #13687 `9d26b69` travis: Check that ~/.BGL is never created (MarcoFalke) +- #13687 `9d26b69` travis: Check that ~/.bitcoin is never created (MarcoFalke) - #13715 `e1260a7` fixes mininode's P2PConnection sending messages on closing transport (marcoagner) - #13729 `aa9429a` travis: Avoid unnecessarily setting env variables on the lint build (Empact) - #13747 `ab28b5b` Skip P2PConnection's `is_closing()` check when not available (domob1812) @@ -774,7 +774,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13779 `d25079a` travis: Improve readability of travis.yml and log outputs (scravy) - #13822 `0fb9c87` bench: Make coinselection output groups pass eligibility filter (achow101) - #13247 `e83d82a` Add tests to SingleThreadedSchedulerClient() and document the memory model (skeees) -- #13811 `660abc1` travis: Run `bench_BGL` once (MarcoFalke) +- #13811 `660abc1` travis: Run `bench_bitcoin` once (MarcoFalke) - #13837 `990e182` Extract `rpc_timewait` as test param (MarcoFalke) - #13851 `9c4324d` fix locale for lint-shell (scravy) - #13823 `489b51b` quote path in authproxy for external multiwallets (MarcoFalke) @@ -809,8 +809,8 @@ Support for Python 2 has been discontinued for all test files and tools. - #10694 `ae5bcc7` Remove redundant code in MutateTxSign(CMutableTransaction&, const std::string&) (practicalswift) - #12659 `3d16f58` Improve Fatal LevelDB Log Messages (eklitzke) - #12643 `0f0229d` util: Remove unused `sync_chain` (MarcoFalke) -- #12102 `7fb8fb4` Apply hardening measures in BGLd systemd service file (Flowdalic) -- #12652 `55f490a` BGL-cli: Provide a better error message when BGLd is not running (practicalswift) +- #12102 `7fb8fb4` Apply hardening measures in bitcoind systemd service file (Flowdalic) +- #12652 `55f490a` bitcoin-cli: Provide a better error message when bitcoind is not running (practicalswift) - #12630 `c290508` Provide useful error message if datadir is not writable (murrayn) - #11881 `624bee9` Remove Python2 support (jnewbery) - #12821 `082e26c` contrib: Remove unused import string (MarcoFalke) @@ -831,7 +831,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13031 `826acc9` Fix for utiltime to compile with msvc (sipsorcery) - #13119 `81743b5` Remove script to clean up datadirs (MarcoFalke) - #12954 `5a66642` util: Refactor logging code into a global object (jimpo) -- #12769 `35eb9d6` Add systemd service to BGLd in debian package (ghost) +- #12769 `35eb9d6` Add systemd service to bitcoind in debian package (ghost) - #13146 `0bc980b` rpcauth: Make it possible to provide a custom password (laanwj) - #13148 `b62b437` logging: Fix potential use-after-free in logprintstr(…) (practicalswift) - #13214 `0612d96` Enable Travis checking for two Python linting rules we are currently not violating (practicalswift) @@ -840,7 +840,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13228 `d792e47` Add script to detect circular dependencies between source modules (sipa) - #13320 `e08c130` Ensure gitian-build.sh uses bash (jhfrontz) - #13301 `e4082d5` lint: Add linter to error on `#include <*.cpp>` (Empact) -- #13374 `56f6936` utils and libraries: checking for BGL address in translations (kaplanmaxe) +- #13374 `56f6936` utils and libraries: checking for bitcoin address in translations (kaplanmaxe) - #13230 `7c32b41` Simplify include analysis by enforcing the developer guide's include syntax (practicalswift) - #13450 `32bf4c6` Add linter: Enforce the source code file naming convention described in the developer notes (practicalswift) - #13479 `fa2ea37` contrib: Fix cve-2018-12356 by hardening the regex (loganaden) @@ -848,7 +848,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13494 `d67eff8` Follow-up to #13454: Fix broken build by exporting `LC_ALL=C` (practicalswift) - #13510 `03f3925` Scripts and tools: Obsolete #!/bin/bash shebang (DesWurstes) - #13577 `c9eb8d1` logging: Avoid nstart may be used uninitialized in appinitmain warning (mruddy) -- #13603 `453ae5e` BGL-tx: Stricter check for valid integers (domob1812) +- #13603 `453ae5e` bitcoin-tx: Stricter check for valid integers (domob1812) - #13118 `c05c93c` RPCAuth Detection in Logs (Linrono) - #13647 `4027ec1` Scripts and tools: Fix `BIND_NOW` check in security-check.py (conradoplg) - #13692 `f5d166a` contrib: Clone core repo in gitian-build (MarcoFalke) @@ -872,7 +872,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13441 `4a7e64f` Prevent shared conf files from failing with different available options in different binaries (achow101) - #13471 `5eca4e8` For AVX2 code, also check for AVX, XSAVE, and OS support (sipa) - #13503 `c655b2c` Document FreeBSD quirk. Fix FreeBSD build: Use std::min(…) to allow for compilation under certain FreeBSD versions (practicalswift) -- #13725 `07ce278` Fix BGL-cli --version (Empact) +- #13725 `07ce278` Fix bitcoin-cli --version (Empact) ### Documentation - #12306 `216f9a4` Improvements to UNIX documentation (axvr) @@ -898,7 +898,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #12800 `2d97611` Add note about our preference for scoped enumerations ("enum class") (practicalswift) - #12798 `174d016` Refer to witness reserved value as spec. in the BIP (MarcoFalke) - #12759 `d3908e2` Improve formatting of developer notes (eklitzke) -- #12877 `2b54155` Use BGLd in Tor documentation (knoxcard) +- #12877 `2b54155` Use bitcoind in Tor documentation (knoxcard) - #12896 `b15485e` Fix conflicting statements about initialization in developer notes (practicalswift) - #12850 `319991d` add qrencode to brew install instructions (buddilla) - #12007 `cd8e45b` Clarify the meaning of fee delta not being a fee rate in prioritisetransaction RPC (honzik666) @@ -915,7 +915,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13165 `627c376` Mention good first issue list in CONTRIBUTING.md (fanquake) - #13295 `fb77310` Update OpenBSD build instructions for OpenBSD 6.3 (practicalswift) - #13340 `3a8e3f4` remove leftover check-doc documentation (fanquake) -- #13346 `60f0358` update BGL-dot-org links in release-process.md (fanquake) +- #13346 `60f0358` update bitcoin-dot-org links in release-process.md (fanquake) - #13372 `f014933` split FreeBSD build instructions out of build-unix.md (steverusso) - #13366 `861de3b` Rename “OS X” to the newer “macOS” convention (giulio92) - #13369 `f8bcef3` update transifex doc link (mess110) @@ -935,7 +935,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13625 `7146672` Add release notes for -printtoconsole and -debuglogfile changes (satwo) - #13718 `f7f574d` Specify preferred Python string formatting technique (masonicboom) - #12764 `10b9a81` Remove field in getblocktemplate help that has never been used (conscott) -- #13742 `d2186b3` Adjust BGLcore.org links (MarcoFalke) +- #13742 `d2186b3` Adjust bitcoincore.org links (MarcoFalke) - #13706 `94dd89e` Minor improvements to release-process.md (MitchellCash) - #13775 `ef4fac0` Remove newlines from error message (practicalswift) - #13803 `feb7dd9` add note to contributor docs about warranted PR's (kallewoof) @@ -948,7 +948,7 @@ Support for Python 2 has been discontinued for all test files and tools. - #13895 `1cd5f2c` fix GetWarnings docs to reflect behavior (Empact) - #13911 `3e3a50a` Revert translated string change, clarify wallet log messages (PierreRochard) - #13908 `d6faea4` upgrade rescan time warning from minutes to >1 hour (masonicboom) -- #13905 `73a09b4` fixed BGL-cli -help output for help2man (hebasto) +- #13905 `73a09b4` fixed bitcoin-cli -help output for help2man (hebasto) - #14100 `2936dbc` Change documentation for =0 for non-boolean options (laanwj) - #14096 `465a583` Add reference documentation for descriptors language (sipa) - #12757 `0c5f67b` Clarify include guard naming convention (practicalswift) @@ -1102,4 +1102,4 @@ And to those that reported security issues: - awemany (for CVE-2018-17144, previously credited as "anonymous reporter") -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.17.1.md b/doc/release-notes/release-notes-0.17.1.md index dce454480e..b1e50e0391 100644 --- a/doc/release-notes/release-notes-0.17.1.md +++ b/doc/release-notes/release-notes-0.17.1.md @@ -1,29 +1,29 @@ -BGL Core version 0.17.1 is now available from: +Bitcoin Core version 0.17.1 is now available from: - + or through BitTorrent: - magnet:?xt=urn:btih:c56c87ccfaa8e6fbccc90d549121e61efd97cb6f&dn=BGL-core-0.17.1&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.ch%3A1337&tr=udp%3A%2F%2Fexplodie.org%3A6969 + magnet:?xt=urn:btih:c56c87ccfaa8e6fbccc90d549121e61efd97cb6f&dn=bitcoin-core-0.17.1&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.ch%3A1337&tr=udp%3A%2F%2Fexplodie.org%3A6969 This is a new minor version release, with various bugfixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). If your node has a txindex, the txindex db will be migrated the first time you run 0.17.0 or newer, which may take up to a few hours. Your node will not be functional until this migration completes. @@ -50,10 +50,10 @@ processing the entire blockchain. Compatibility ============== -BGL Core is extensively tested on multiple operating systems using +Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported). -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't @@ -68,7 +68,7 @@ Notable changes The `listtransactions` RPC `account` parameter which was deprecated in 0.17.0 and renamed to `dummy` has been un-deprecated and renamed again to `label`. -When BGL is configured with the `-deprecatedrpc=accounts` setting, specifying +When bitcoin is configured with the `-deprecatedrpc=accounts` setting, specifying a label/account/dummy argument will return both outgoing and incoming transactions. Without the `-deprecatedrpc=accounts` setting, it will only return incoming transactions (because it used to be possible to create transactions @@ -112,7 +112,7 @@ confusion. ### Build system - #14647 `7edebed` Remove illegal spacing in darwin.mk (ch4ot1c) -- #14698 `ec71f06` Add BGL-tx.exe into Windows installer (ken2812221) +- #14698 `ec71f06` Add bitcoin-tx.exe into Windows installer (ken2812221) ### Tests and QA - #13965 `29899ec` Fix extended functional tests fail (ken2812221) @@ -165,4 +165,4 @@ Thanks to everyone who directly contributed to this release: - Walter - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.18.0.md b/doc/release-notes/release-notes-0.18.0.md index 00f3e83ab4..3ca7d52243 100644 --- a/doc/release-notes/release-notes-0.18.0.md +++ b/doc/release-notes/release-notes-0.18.0.md @@ -1,17 +1,17 @@ -BGL Core version 0.18.0 is now available from: +Bitcoin Core version 0.18.0 is now available from: - + This is a new major version release, including new features, various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== @@ -19,7 +19,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -`/Applications/BGL-Qt` (on Mac) or `BGLd`/`BGL-qt` (on +`/Applications/Bitcoin-Qt` (on Mac) or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database @@ -35,16 +35,16 @@ wallet versions are still supported. Compatibility ============== -BGL Core is supported and extensively tested on operating systems +Bitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not -recommended to use BGL Core on unsupported systems. +recommended to use Bitcoin Core on unsupported systems. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not as frequently tested on them. From 0.17.0 onwards, macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't support versions of macOS older than -10.10. Additionally, BGL Core does not yet change appearance when +10.10. Additionally, Bitcoin Core does not yet change appearance when macOS "dark mode" is activated. In addition to previously-supported CPU platforms, this release's @@ -52,11 +52,11 @@ pre-compiled distribution also provides binaries for the RISC-V platform. If you are using the `systemd` unit configuration file located at -`contrib/init/BGLd.service`, it has been changed to use -`/var/lib/BGLd` as the data directory instead of -`~BGL/.BGL`. When switching over to the new configuration file, -please make sure that the filesystem on which `/var/lib/BGLd` will -exist has enough space (check using `df -h /var/lib/BGLd`), and +`contrib/init/bitcoind.service`, it has been changed to use +`/var/lib/bitcoind` as the data directory instead of +`~bitcoin/.bitcoin`. When switching over to the new configuration file, +please make sure that the filesystem on which `/var/lib/bitcoind` will +exist has enough space (check using `df -h /var/lib/bitcoind`), and optionally copy over your existing data directory. See the [systemd init file section](#systemd-init-file) for more details. @@ -95,7 +95,7 @@ Configuration option changes messages that ZMQ will queue in memory (the "high water mark") before dropping additional messages. The default value is 1,000, the same as was used for previous releases. See the [ZMQ - documentation](https://github.com/BGL/BGL/blob/master/doc/zmq.md#usage) + documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md#usage) for details. - The `rpcallowip` option can no longer be used to automatically listen @@ -119,16 +119,16 @@ Configuration option changes disconnect/ban behavior will not cause a node that is whitelisting another to be dropped by peers. Users can still explicitly enable this behavior with the command line option (and may want to consider - [contacting](https://BGLcore.org/en/contact/) the BGL Core + [contacting](https://bitcoincore.org/en/contact/) the Bitcoin Core project to let us know about their use-case, as this feature could be deprecated in the future). systemd init file ----------------- -The systemd init file (`contrib/init/BGLd.service`) has been changed -to use `/var/lib/BGLd` as the data directory instead of -`~BGL/.BGL`. This change makes BGL Core more consistent with +The systemd init file (`contrib/init/bitcoind.service`) has been changed +to use `/var/lib/bitcoind` as the data directory instead of +`~bitcoin/.bitcoin`. This change makes Bitcoin Core more consistent with other services, and makes the systemd init config more consistent with existing Upstart and OpenRC configs. @@ -138,33 +138,33 @@ See [`systemd.exec(5)`](https://www.freedesktop.org/software/systemd/man/systemd for more details. When using the provided init files under `contrib/init`, overriding the -`datadir` option in `/etc/BGL/BGL.conf` will have no effect. +`datadir` option in `/etc/bitcoin/bitcoin.conf` will have no effect. This is because the command line arguments specified in the init files take precedence over the options specified in -`/etc/BGL/BGL.conf`. +`/etc/bitcoin/bitcoin.conf`. Documentation ------------- -- A new short [document](https://github.com/BGL/BGL/blob/master/doc/JSON-RPC-interface.md) +- A new short [document](https://github.com/bitcoin/bitcoin/blob/master/doc/JSON-RPC-interface.md) about the JSON-RPC interface describes cases where the results of an RPC might contain inconsistencies between data sourced from different subsystems, such as wallet state and mempool state. A note is added - to the [REST interface documentation](https://github.com/BGL/BGL/blob/master/doc/REST-interface.md) + to the [REST interface documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/REST-interface.md) indicating that the same rules apply. - Further information is added to the [JSON-RPC - documentation](https://github.com/BGL/BGL/blob/master/doc/JSON-RPC-interface.md) + documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/JSON-RPC-interface.md) about how to secure this interface. -- A new [document](https://github.com/BGL/BGL/blob/master/doc/BGL-conf.md) - about the `BGL.conf` file describes how to use it to configure - BGL Core. +- A new [document](https://github.com/bitcoin/bitcoin/blob/master/doc/bitcoin-conf.md) + about the `bitcoin.conf` file describes how to use it to configure + Bitcoin Core. -- A new document introduces BGL Core's BIP174 [Partially-Signed - BGL Transactions - (PSBT)](https://github.com/BGL/BGL/blob/master/doc/psbt.md) +- A new document introduces Bitcoin Core's BIP174 [Partially-Signed + Bitcoin Transactions + (PSBT)](https://github.com/bitcoin/bitcoin/blob/master/doc/psbt.md) interface, which is used to allow multiple programs to collaboratively work to create, sign, and broadcast new transactions. This is useful for offline (cold storage) wallets, multisig wallets, coinjoin @@ -172,7 +172,7 @@ Documentation to interact to generate a complete transaction. - The [output script - descriptor](https://github.com/BGL/BGL/blob/master/doc/descriptors.md) + descriptor](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md) documentation has been updated with information about new features in this still-developing language for describing the output scripts that a wallet or other program wants to receive notifications for, such as @@ -185,15 +185,15 @@ Build system changes -------------------- - A new `--disable-bip70` option may be passed to `./configure` to - prevent BGL-Qt from being built with support for the BIP70 payment + prevent Bitcoin-Qt from being built with support for the BIP70 payment protocol or from linking libssl. As the payment protocol has exposed - BGL Core to libssl vulnerabilities in the past, builders who don't + Bitcoin Core to libssl vulnerabilities in the past, builders who don't need BIP70 support are encouraged to use this option to reduce their exposure to future vulnerabilities. - The minimum required version of Qt (when building the GUI) has been increased from 5.2 to 5.5.1 (the [depends - system](https://github.com/BGL/BGL/blob/master/depends/README.md) + system](https://github.com/bitcoin/bitcoin/blob/master/depends/README.md) provides 5.9.7) New RPCs @@ -211,7 +211,7 @@ New RPCs they've been running. - `deriveaddresses` returns one or more addresses corresponding to an - [output descriptor](https://github.com/BGL/BGL/blob/master/doc/descriptors.md). + [output descriptor](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md). - `getdescriptorinfo` accepts a descriptor and returns information about it, including its computed checksum. @@ -278,7 +278,7 @@ in the Low-level Changes section below. ignored or are inconsistent, if there are any. - `getaddressinfo` now returns an additional `solvable` boolean field - when BGL Core knows enough about the address's scriptPubKey, + when Bitcoin Core knows enough about the address's scriptPubKey, optional redeemScript, and optional witnessScript in order for the wallet to be able to generate an unsigned input spending funds sent to that address. @@ -292,7 +292,7 @@ in the Low-level Changes section below. - `importprivkey` will preserve previously-set labels for addresses or public keys corresponding to the private key being imported. For example, if you imported a watch-only address with the label "cold - wallet" in earlier releases of BGL Core, subsequently importing + wallet" in earlier releases of Bitcoin Core, subsequently importing the private key would default to resetting the address's label to the default empty-string label (""). In this release, the previous label of "cold wallet" will be retained. If you optionally specify any @@ -320,7 +320,7 @@ in the Low-level Changes section below. origin information imported through `importmulti` will have their key origin information stored in the wallet for use with creating PSBTs. More information about descriptors can be found - [here](https://github.com/BGL/BGL/blob/master/doc/descriptors.md). + [here](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md). - `listunspent` has been modified so that it also returns `witnessScript`, the witness script in the case of a P2WSH or @@ -343,7 +343,7 @@ Deprecated or removed RPCs - The 'account' API is removed after being deprecated in v0.17. The 'label' API was introduced in v0.17 as a replacement for accounts. See the [release notes from - v0.17](https://github.com/BGL/BGL/blob/master/doc/release-notes/release-notes-0.17.0.md#label-and-account-apis-for-wallet) + v0.17](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.17.0.md#label-and-account-apis-for-wallet) for a full description of the changes from the 'account' API to the 'label' API. @@ -359,7 +359,7 @@ Deprecated or removed RPCs require or use the wallet component. Calling `generatetoaddress` with an address returned by the `getnewaddress` RPC gives the same functionality as the old `generate` RPC. To continue using `generate` - in this version, restart BGLd with the `-deprecatedrpc=generate` + in this version, restart bitcoind with the `-deprecatedrpc=generate` configuration option. - Be reminded that parts of the `validateaddress` command have been @@ -406,7 +406,7 @@ Graphical User Interface (GUI) Tools ----- -- A new `BGL-wallet` tool is now distributed alongside BGL +- A new `bitcoin-wallet` tool is now distributed alongside Bitcoin Core's other executables. Without needing to use any RPCs, this tool can currently create a new wallet file or display some basic information about an existing wallet, such as whether the wallet is @@ -416,24 +416,24 @@ Tools Planned changes =============== -This section describes planned changes to BGL Core that may affect -other BGL software and services. +This section describes planned changes to Bitcoin Core that may affect +other Bitcoin software and services. -- Since version 0.16.0, BGL Core’s built-in wallet has defaulted to +- Since version 0.16.0, Bitcoin Core’s built-in wallet has defaulted to generating P2SH-wrapped segwit addresses when users want to receive payments. These addresses are backwards compatible with all - widely-used software. Starting with BGL Core 0.20 (expected about - a year after 0.18), BGL Core will default to native segwit + widely-used software. Starting with Bitcoin Core 0.20 (expected about + a year after 0.18), Bitcoin Core will default to native segwit addresses (bech32) that provide additional fee savings and other benefits. Currently, many wallets and services already support sending - to bech32 addresses, and if the BGL Core project sees enough + to bech32 addresses, and if the Bitcoin Core project sees enough additional adoption, it will instead default to bech32 receiving - addresses in BGL Core 0.19 (approximately November 2019). + addresses in Bitcoin Core 0.19 (approximately November 2019). P2SH-wrapped segwit addresses will continue to be provided if the user requests them in the GUI or by RPC, and anyone who doesn’t want the update will be able to configure their default address type. (Similarly, pioneering users who want to change their default now may - set the `addresstype=bech32` configuration option in any BGL Core + set the `addresstype=bech32` configuration option in any Bitcoin Core release from 0.16.0 up.) Deprecated P2P messages @@ -495,7 +495,7 @@ Network a misbehaving node will be disconnected to make room for nodes without a history of problems (unless the misbehaving node helps your node in some other way, such as by connecting to a part of the Internet from - which you don't have many other peers). Previously, BGL Core + which you don't have many other peers). Previously, Bitcoin Core banned the IP addresses of misbehaving peers for a period of time (default of 1 day); this was easily circumvented by attackers with multiple IP addresses. If you manually ban a peer, such as by using @@ -514,18 +514,18 @@ Wallet software. Instead such wallets will be completely unloaded and reloaded to achieve the same effect. -- A sub-project of BGL Core now provides Hardware Wallet Interaction +- A sub-project of Bitcoin Core now provides Hardware Wallet Interaction (HWI) scripts that allow command-line users to use several popular - hardware key management devices with BGL Core. See their [project - page](https://github.com/BGL-core/HWI#readme) for details. + hardware key management devices with Bitcoin Core. See their [project + page](https://github.com/bitcoin-core/HWI#readme) for details. Security -------- - This release changes the Random Number Generator (RNG) used from - OpenSSL to BGL Core's own implementation, although entropy - gathered by BGL Core is fed out to OpenSSL and then read back in - when the program needs strong randomness. This moves BGL Core a + OpenSSL to Bitcoin Core's own implementation, although entropy + gathered by Bitcoin Core is fed out to OpenSSL and then read back in + when the program needs strong randomness. This moves Bitcoin Core a little closer to no longer needing to depend on OpenSSL, a dependency that has caused security issues in the past. The new implementation gathers entropy from multiple sources, including from hardware @@ -534,7 +534,7 @@ Security Changes for particular platforms -------------------------------- -- On macOS, BGL Core now opts out of application CPU throttling +- On macOS, Bitcoin Core now opts out of application CPU throttling ("app nap") during initial blockchain download, when catching up from over 100 blocks behind the current chain tip, or when reindexing chain data. This helps prevent these operations from taking an excessively @@ -589,9 +589,9 @@ Changes for particular platforms - #14023 Remove accounts RPCs (jnewbery) - #13825 Kill accounts (jnewbery) - #10605 Add AssertLockHeld assertions in CWallet::ListCoins (ryanofsky) -- #12490 Remove deprecated wallet rpc features from `BGL_server` (jnewbery) +- #12490 Remove deprecated wallet rpc features from `bitcoin_server` (jnewbery) - #14138 Set `encrypted_batch` to nullptr after delete. Avoid double free in the case of NDEBUG (practicalswift) -- #14168 Remove `ENABLE_WALLET` from `libBGL_server.a` (jnewbery) +- #14168 Remove `ENABLE_WALLET` from `libbitcoin_server.a` (jnewbery) - #12493 Reopen CDBEnv after encryption instead of shutting down (achow101) - #14282 Remove `-usehd` option (jnewbery) - #14146 Remove trailing separators from `-walletdir` arg (PierreRochard) @@ -623,7 +623,7 @@ Changes for particular platforms - #14711 Remove uses of chainActive and mapBlockIndex in wallet code (ryanofsky) - #15279 Clarify rescanblockchain doc (MarcoFalke) - #15292 Remove `boost::optional`-related false positive -Wmaybe-uninitialized warnings on GCC compiler (hebasto) -- #13926 [Tools] BGL-wallet - a tool for creating and managing wallets offline (jnewbery) +- #13926 [Tools] bitcoin-wallet - a tool for creating and managing wallets offline (jnewbery) - #11911 Free BerkeleyEnvironment instances when not in use (ryanofsky) - #15235 Do not import private keys to wallets with private keys disabled (achow101) - #15263 Descriptor expansions only need pubkey entries for PKH/WPKH (sipa) @@ -709,7 +709,7 @@ Changes for particular platforms - #13248 Make proxy icon from statusbar clickable (mess110) - #12818 TransactionView: highlight replacement tx after fee bump (Sjors) - #13529 Use new Qt5 connect syntax (promag) -- #14162 Also log and print messages or questions like BGLd (MarcoFalke) +- #14162 Also log and print messages or questions like bitcoind (MarcoFalke) - #14385 Avoid system harfbuzz and bz2 (theuni) - #14450 Fix QCompleter popup regression (hebasto) - #14177 Set C locale for amountWidget (hebasto) @@ -717,7 +717,7 @@ Changes for particular platforms - #14554 Remove unused `adjustedTime` parameter (hebasto) - #14228 Enable system tray icon by default if available (hebasto) - #14608 Remove the "Pay only required fee…" checkbox (hebasto) -- #14521 qt, docs: Fix `BGL-qt -version` output formatting (hebasto) +- #14521 qt, docs: Fix `bitcoin-qt -version` output formatting (hebasto) - #13966 When private key is disabled, only show watch-only balance (ken2812221) - #14828 Remove hidden columns in coin control dialog (promag) - #14783 Fix `boost::signals2::no_slots_error` in early calls to InitWarning (promag) @@ -730,7 +730,7 @@ Changes for particular platforms - #14375 Correct misleading "overridden options" label (hebasto) - #15007 Notificator class refactoring (hebasto) - #14784 Use `WalletModel*` instead of the wallet name as map key (promag) -- #11625 Add BGLApplication & RPCConsole tests (ryanofsky) +- #11625 Add BitcoinApplication & RPCConsole tests (ryanofsky) - #14517 Fix start with the `-min` option (hebasto) - #13216 implements concept for different disk sizes on intro (marcoagner) - #15114 Replace remaining 0 with nullptr (Empact) @@ -766,7 +766,7 @@ Changes for particular platforms - #14183 Remove unused Qt 4 dependencies (ken2812221) - #14127 Avoid getifaddrs when unavailable (greenaddress) - #14184 Scripts and tools: increased timeout downloading (cisba) -- #14204 Move `interfaces/*` to `libBGL_server` (laanwj) +- #14204 Move `interfaces/*` to `libbitcoin_server` (laanwj) - #14208 Actually remove `ENABLE_WALLET` (jnewbery) - #14212 Remove libssl from LDADD unless GUI (MarcoFalke) - #13578 Upgrade zeromq to 4.2.5 and avoid deprecated zeromq API functions (mruddy) @@ -786,19 +786,19 @@ Changes for particular platforms - #14849 Qt 5.9.7 (fanquake) - #15020 Add names to Travis jobs (gkrizek) - #15047 Allow to configure --with-sanitizers=fuzzer (MarcoFalke) -- #15154 Configure: BGL-tx doesn't need libevent, so don't pull it in (luke-jr) +- #15154 Configure: bitcoin-tx doesn't need libevent, so don't pull it in (luke-jr) - #15175 Drop macports support (Empact) - #15308 Restore compatibility with older boost (Empact) - #15407 msvc: Fix silent merge conflict between #13926 and #14372 part II (ken2812221) -- #15388 Makefile.am: add rule for src/BGL-wallet (Sjors) +- #15388 Makefile.am: add rule for src/bitcoin-wallet (Sjors) - #15393 Bump minimum Qt version to 5.5.1 (Sjors) - #15285 Prefer Python 3.4 even if newer versions are present on the system (Sjors) - #15398 msvc: Add rapidcheck property tests (ken2812221) - #15431 msvc: scripted-diff: Remove NDEBUG pre-define in project file (ken2812221) - #15549 gitian: Improve error handling (laanwj) - #15548 use full version string in setup.exe (MarcoFalke) -- #11526 Visual Studio build configuration for BGL Core (sipsorcery) -- #15110 build\_msvc: Fix the build problem in `libBGL_server` (Mr-Leshiy) +- #11526 Visual Studio build configuration for Bitcoin Core (sipsorcery) +- #15110 build\_msvc: Fix the build problem in `libbitcoin_server` (Mr-Leshiy) - #14372 msvc: build secp256k1 and leveldb locally (ken2812221) - #15325 msvc: Fix silent merge conflict between #13926 and #14372 (ken2812221) - #15391 Add compile time verification of assumptions we're currently making implicitly/tacitly (practicalswift) @@ -808,7 +808,7 @@ Changes for particular platforms ### Tests and QA - #15405 appveyor: Clean cache when build configuration changes (Sjors) -- #13953 Fix deprecation in BGL-util-test.py (isghe) +- #13953 Fix deprecation in bitcoin-util-test.py (isghe) - #13963 Replace usage of tostring() with tobytes() (dongcarl) - #13964 ci: Add appveyor ci (ken2812221) - #13997 appveyor: fetch the latest port data (ken2812221) @@ -824,7 +824,7 @@ Changes for particular platforms - #14088 Don't assert(…) with side effects (practicalswift) - #14086 appveyor: Use clcache to speed up build (ken2812221) - #13954 Warn (don't fail!) on spelling errors. Fix typos reported by codespell (practicalswift) -- #12775 Integration of property based testing into BGL Core (Christewart) +- #12775 Integration of property based testing into Bitcoin Core (Christewart) - #14119 Read reject reasons from debug log, not P2P messages (MarcoFalke) - #14189 Fix silent merge conflict in `wallet_importmulti` (MarcoFalke) - #13419 Speed up `knapsack_solver_test` by not recreating wallet 100 times (lucash-dev) @@ -837,7 +837,7 @@ Changes for particular platforms - #14275 Write the notification message to different files to avoid race condition in `feature_notifications.py` (ken2812221) - #14306 appveyor: Move AppVeyor YAML to dot-file-style YAML (MitchellCash) - #14305 Enforce critical class instance attributes in functional tests, fix segwit test specificity (JustinTArthur) -- #12246 Bugfix: Only run BGL-tx tests when BGL-tx is enabled (luke-jr) +- #12246 Bugfix: Only run bitcoin-tx tests when bitcoin-tx is enabled (luke-jr) - #14316 Exclude all tests with difference parameters in `--exclude` list (ken2812221) - #14381 Add missing call to `skip_if_no_cli()` (practicalswift) - #14389 travis: Set codespell version to avoid breakage (MarcoFalke) @@ -859,7 +859,7 @@ Changes for particular platforms - #14631 Move deterministic address import to `setup_nodes` (jnewbery) - #14630 test: Remove travis specific code (MarcoFalke) - #14528 travis: Compile once on xenial (MarcoFalke) -- #14092 Dry run `bench_BGL` as part `make check` to allow for quick identification of assertion/sanitizer failures in benchmarking code (practicalswift) +- #14092 Dry run `bench_bitcoin` as part `make check` to allow for quick identification of assertion/sanitizer failures in benchmarking code (practicalswift) - #14664 `example_test.py`: fixup coinbase height argument, derive number clearly (instagibbs) - #14522 Add invalid P2P message tests (jamesob) - #14619 Fix value display name in `test_runner` help text (merland) @@ -903,7 +903,7 @@ Changes for particular platforms - #14969 Fix `cuckoocache_tests` TSAN failure introduced in 14935 (practicalswift) - #14964 Fix race in `mempool_accept` (MarcoFalke) - #14829 travis: Enable functional tests in the threadsanitizer (tsan) build job (practicalswift) -- #14985 Remove `thread_local` from `test_BGL` (MarcoFalke) +- #14985 Remove `thread_local` from `test_bitcoin` (MarcoFalke) - #15005 Bump timeout to run tests in travis thread sanitizer (MarcoFalke) - #15013 Avoid race in `p2p_timeouts` (MarcoFalke) - #14960 lint/format-strings: Correctly exclude escaped percent symbols (luke-jr) @@ -980,8 +980,8 @@ Changes for particular platforms - #14097 validation: Log FormatStateMessage on ConnectBlock error in ConnectTip (MarcoFalke) - #13724 contrib: Support ARM and RISC-V symbol check (ken2812221) - #13159 Don't close old debug log file handle prematurely when trying to re-open (on SIGHUP) (practicalswift) -- #14186 BGL-cli: don't translate command line options (HashUnlimited) -- #14057 logging: Only log `using config file path_to_BGL.conf` message on startup if conf file exists (leishman) +- #14186 bitcoin-cli: don't translate command line options (HashUnlimited) +- #14057 logging: Only log `using config file path_to_bitcoin.conf` message on startup if conf file exists (leishman) - #14164 Update univalue subtree (MarcoFalke) - #14272 init: Remove deprecated args from hidden args (MarcoFalke) - #14494 Error if # is used in rpcpassword in conf (MeshCollider) @@ -1001,7 +1001,7 @@ Changes for particular platforms - #14839 threads: Fix unitialized members in `sched_param` (fanquake) - #14955 Switch all RNG code to the built-in PRNG (sipa) - #15258 Scripts and tools: Fix `devtools/copyright_header.py` to always honor exclusions (Empact) -- #12255 Update BGL.service to conform to init.md (dongcarl) +- #12255 Update bitcoin.service to conform to init.md (dongcarl) - #15266 memory: Construct globals on first use (MarcoFalke) - #15347 Fix build after pr 15266 merged (hebasto) - #15351 Update linearize-hashes.py (OverlordQ) @@ -1037,7 +1037,7 @@ Changes for particular platforms - #14428 Fix macOS files description in qt/README.md (hebasto) - #14390 release process: RPC documentation (karel-3d) - #14472 getblocktemplate: use SegWit in example (Sjors) -- #14497 Add doc/BGL-conf.md (hebasto) +- #14497 Add doc/bitcoin-conf.md (hebasto) - #14526 Document lint tests (fanquake) - #14511 Remove explicit storage requirement from README.md (merland) - #14600 Clarify commit message guidelines (merland) @@ -1073,7 +1073,7 @@ Changes for particular platforms - #15272 Correct logging return type and RPC example (fanquake) - #15244 Gdb attaching to process during tests has non-sudo solution (instagibbs) - #15332 Small updates to `getrawtransaction` description (amitiuttarwar) -- #15354 Add missing `BGL-wallet` tool manpages (MarcoFalke) +- #15354 Add missing `bitcoin-wallet` tool manpages (MarcoFalke) - #15343 netaddress: Make IPv4 loopback comment more descriptive (dongcarl) - #15353 Minor textual improvements in `translation_strings_policy.md` (merland) - #15426 importmulti: add missing description of keypool option (harding) @@ -1091,9 +1091,9 @@ Changes for particular platforms - #15754 getrpcinfo docs (benthecarman) - #15763 Update bips.md for 0.18.0 (sipa) - #15757 List new RPCs in psbt.md and descriptors.md (sipa) -- #15765 correct BGLconsensus_version in shared-libraries.md (fanquake) +- #15765 correct bitcoinconsensus_version in shared-libraries.md (fanquake) - #15792 describe onlynet option in doc/tor.md (jonatack) -- #15802 mention creating application support BGL folder on OSX (JimmyMow) +- #15802 mention creating application support bitcoin folder on OSX (JimmyMow) - #15799 Clarify RPC versioning (MarcoFalke) Credits @@ -1122,7 +1122,7 @@ Thanks to everyone who directly contributed to this release: - Ben Carman - Ben Woosley - benthecarman -- BGLhodler +- bitcoinhodler - Carl Dong - Chakib Benziane - Chris Moore @@ -1221,4 +1221,4 @@ Thanks to everyone who directly contributed to this release: - Wladimir J. van der Laan - Zain Iqbal Allarakhia -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.18.1.md b/doc/release-notes/release-notes-0.18.1.md index bd8b0fadfc..483cc5075e 100644 --- a/doc/release-notes/release-notes-0.18.1.md +++ b/doc/release-notes/release-notes-0.18.1.md @@ -1,17 +1,17 @@ -BGL Core version 0.18.1 is now available from: +Bitcoin Core version 0.18.1 is now available from: - + This is a new minor version release, including new features, various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== @@ -19,7 +19,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -`/Applications/BGL-Qt` (on Mac) or `BGLd`/`BGL-qt` (on +`/Applications/Bitcoin-Qt` (on Mac) or `bitcoind`/`bitcoin-qt` (on Linux). The first time you run version 0.15.0 or newer, your chainstate database @@ -35,16 +35,16 @@ wallet versions are still supported. Compatibility ============== -BGL Core is supported and extensively tested on operating systems +Bitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not -recommended to use BGL Core on unsupported systems. +recommended to use Bitcoin Core on unsupported systems. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not as frequently tested on them. From 0.17.0 onwards, macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't support versions of macOS older than -10.10. Additionally, BGL Core does not yet change appearance when +10.10. Additionally, Bitcoin Core does not yet change appearance when macOS "dark mode" is activated. Known issues @@ -91,7 +91,7 @@ not to use coin control features with multiple wallets loaded. ### Build system - #15985 Add test for GCC bug 90348 (sipa) -- #15947 Install BGL-wallet manpage (domob1812) +- #15947 Install bitcoin-wallet manpage (domob1812) - #15983 build with -fstack-reuse=none (MarcoFalke) ### Tests and QA @@ -133,4 +133,4 @@ Thanks to everyone who directly contributed to this release: - tecnovert - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.19.0.1.md b/doc/release-notes/release-notes-0.19.0.1.md index cc88a3657f..70b8ec589f 100644 --- a/doc/release-notes/release-notes-0.19.0.1.md +++ b/doc/release-notes/release-notes-0.19.0.1.md @@ -1,48 +1,48 @@ -BGL Core version 0.19.0.1 is now available from: +Bitcoin Core version 0.19.0.1 is now available from: - + This release includes new features, various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: - + To receive security and update notifications, please subscribe to: - + How to Upgrade ============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/BGL-Qt` (on Mac) -or `BGLd`/`BGL-qt` (on Linux). +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) +or `bitcoind`/`bitcoin-qt` (on Linux). -Upgrading directly from a version of BGL Core that has reached its EOL is +Upgrading directly from a version of Bitcoin Core that has reached its EOL is possible, but might take some time if the datadir needs to be migrated. Old -wallet versions of BGL Core are generally supported. +wallet versions of Bitcoin Core are generally supported. Compatibility ============== -BGL Core is supported and extensively tested on operating systems using +Bitcoin Core is supported and extensively tested on operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not recommended -to use BGL Core on unsupported systems. +to use Bitcoin Core on unsupported systems. -BGL Core should also work on most other Unix-like systems but is not +Bitcoin Core should also work on most other Unix-like systems but is not as frequently tested on them. From 0.17.0 onwards, macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't support versions of macOS older than -10.10. Additionally, BGL Core does not yet change appearance when +10.10. Additionally, Bitcoin Core does not yet change appearance when macOS "dark mode" is activated. Users running macOS Catalina may need to "right-click" and then choose "Open" -to open the BGL Core .dmg. This is due to new signing requirements -imposed by Apple, which the BGL Core project does not yet adhere too. +to open the Bitcoin Core .dmg. This is due to new signing requirements +imposed by Apple, which the Bitcoin Core project does not yet adhere too. Notable changes =============== @@ -50,8 +50,8 @@ Notable changes New user documentation ---------------------- -- [Reduce memory](https://github.com/BGL/BGL/blob/master/doc/reduce-memory.md) - suggests configuration tweaks for running BGL Core on systems with +- [Reduce memory](https://github.com/bitcoin/bitcoin/blob/master/doc/reduce-memory.md) + suggests configuration tweaks for running Bitcoin Core on systems with limited memory. (#16339) New RPCs @@ -78,7 +78,7 @@ New settings - `-blockfilterindex` enables the creation of BIP158 block filters for the entire blockchain. Filters will be created in the background and - currently use about 4 GiB of space. Note: this version of BGL + currently use about 4 GiB of space. Note: this version of Bitcoin Core does not serve block filters over the P2P network, although the local user may obtain block filters using the `getblockfilter` RPC. (#14121) @@ -90,7 +90,7 @@ Updated settings provide peers connecting using the indicated interfaces or IP addresses. If no permissions are specified with an address or CIDR network, the implicit default permissions are the same as previous - releases. See the `BGLd -help` output for these two options for + releases. See the `bitcoind -help` output for these two options for details about the available permissions. (#16248) - Users setting custom `dbcache` values can increase their setting slightly @@ -197,7 +197,7 @@ GUI changes type may be changed with the `-addresstype` configuration option. (#15711, #16497) -- In 0.18.0, a `./configure` flag was introduced to allow disabling BIP70 support in the GUI (support was enabled by default). In 0.19.0, this flag is now __disabled__ by default. If you want to compile BGL Core with BIP70 support in the GUI, you can pass `--enable-bip70` to `./configure`. (#15584) +- In 0.18.0, a `./configure` flag was introduced to allow disabling BIP70 support in the GUI (support was enabled by default). In 0.19.0, this flag is now __disabled__ by default. If you want to compile Bitcoin Core with BIP70 support in the GUI, you can pass `--enable-bip70` to `./configure`. (#15584) Deprecated or removed configuration options ------------------------------------------- @@ -217,7 +217,7 @@ Deprecated or removed RPCs - `bumpfee` has a new `fee_rate` option as a replacement for the deprecated `totalFee`. (#16727) -- `generate` is now removed after being deprecated in BGL Core 0.18. +- `generate` is now removed after being deprecated in Bitcoin Core 0.18. Use the `generatetoaddress` RPC instead. (#15492) P2P changes @@ -226,12 +226,12 @@ P2P changes - BIP 61 reject messages were deprecated in v0.18. They are now disabled by default, but can be enabled by setting the `-enablebip61` command line option. BIP 61 reject messages will be removed entirely in a - future version of BGL Core. (#14054) + future version of Bitcoin Core. (#14054) -- To eliminate well-known denial-of-service vectors in BGL Core, +- To eliminate well-known denial-of-service vectors in Bitcoin Core, especially for nodes with spinning disks, the default value for the `-peerbloomfilters` configuration option has been changed to false. - This prevents BGL Core from sending the BIP111 NODE_BLOOM service + This prevents Bitcoin Core from sending the BIP111 NODE_BLOOM service flag, accepting BIP37 bloom filters, or serving merkle blocks or transactions matching a bloom filter. Users who still want to provide bloom filter support may either set the configuration option to true @@ -240,17 +240,17 @@ P2P changes `-whitebind` configuration options described elsewhere in these release notes. For the near future, lightweight clients using public BIP111/BIP37 nodes should still be able to connect to older versions - of BGL Core and nodes that have manually enabled BIP37 support, + of Bitcoin Core and nodes that have manually enabled BIP37 support, but developers of such software should consider migrating to either using specific BIP37 nodes or an alternative transaction filtering system. (#16152) -- By default, BGL Core will now make two additional outbound connections that are exclusively used for block-relay. No transactions or addr messages will be processed on these connections. These connections are designed to add little additional memory or bandwidth resource requirements but should make some partitioning attacks more difficult to carry out. (#15759) +- By default, Bitcoin Core will now make two additional outbound connections that are exclusively used for block-relay. No transactions or addr messages will be processed on these connections. These connections are designed to add little additional memory or bandwidth resource requirements but should make some partitioning attacks more difficult to carry out. (#15759) Miscellaneous CLI Changes ------------------------- -- The `testnet` field in `BGL-cli -getinfo` has been renamed to +- The `testnet` field in `bitcoin-cli -getinfo` has been renamed to `chain` and now returns the current network name as defined in BIP70 (main, test, regtest). (#15566) @@ -262,7 +262,7 @@ RPC - `getblockchaininfo` no longer returns a `bip9_softforks` object. Instead, information has been moved into the `softforks` object and - an additional `type` field describes how BGL Core determines + an additional `type` field describes how Bitcoin Core determines whether that soft fork is active (e.g. BIP9 or BIP90). See the RPC help for details. (#16060) @@ -301,7 +301,7 @@ Network ------- - When fetching a transaction announced by multiple peers, previous versions of - BGL Core would sequentially attempt to download the transaction from each + Bitcoin Core would sequentially attempt to download the transaction from each announcing peer until the transaction is received, in the order that those peers' announcements were received. In this release, the download logic has changed to randomize the fetch order across peers and to prefer sending @@ -309,7 +309,7 @@ Network where inbound peers could prevent a node from getting a transaction. (#14897, #15834) -- If a Tor hidden service is being used, BGL Core will be bound to +- If a Tor hidden service is being used, Bitcoin Core will be bound to the standard port 8333 even if a different port is configured for clearnet connections. This prevents leaking node identity through use of identical non-default port numbers. (#15651) @@ -333,7 +333,7 @@ Mempool and transaction relay segwit versions) are now accepted into the mempool, relayed, and mined. Attempting to spend those outputs remains forbidden by policy ("non-standard"). When this change has been widely deployed, wallets - and services can accept any valid bech32 BGL address without + and services can accept any valid bech32 Bitcoin address without concern that transactions paying future segwit versions will become stuck in an unconfirmed state. (#15846) @@ -362,7 +362,7 @@ Wallet and default to not use the former in coin selection. When setting this flag on an existing wallet, rescanning the blockchain is required to correctly mark previously used destinations. Together with "avoid - partial spends" (added in BGL Core v0.17.0), this can eliminate a + partial spends" (added in Bitcoin Core v0.17.0), this can eliminate a serious privacy issue where a malicious user can track spends by sending small payments to a previously-paid address that would then be included with unrelated inputs in future payments. (#13756) @@ -424,7 +424,7 @@ Build system changes - #15834 Fix transaction relay bugs introduced in #14897 and expire transactions from peer in-flight map (sdaftuar) - #15651 torcontrol: Use the default/standard network port for Tor hidden services, even if the internal port is set differently (luke-jr) - #16188 Document what happens to getdata of unknown type (MarcoFalke) -- #15649 Add ChaCha20Poly1305@BGL AEAD (jonasschnelli) +- #15649 Add ChaCha20Poly1305@Bitcoin AEAD (jonasschnelli) - #16152 Disable bloom filtering by default (TheBlueMatt) - #15993 Drop support of the insecure miniUPnPc versions (hebasto) - #16197 Use mockable time for tx download (MarcoFalke) @@ -443,7 +443,7 @@ Build system changes - #15508 Refactor analyzepsbt for use outside RPC code (gwillen) - #15747 Remove plethora of Get*Balance (MarcoFalke) - #15728 Refactor relay transactions (jnewbery) -- #15639 BGL-wallet tool: Drop libBGL_server.a dependency (ryanofsky) +- #15639 bitcoin-wallet tool: Drop libbitcoin_server.a dependency (ryanofsky) - #15853 Remove unused import checkpoints.h (MarcoFalke) - #15780 add cachable amounts for caching credit/debit values (kallewoof) - #15778 Move maxtxfee from node to wallet (jnewbery) @@ -569,7 +569,7 @@ Build system changes - #16291 Stop translating PACKAGE_NAME (MarcoFalke) - #16380 Remove unused bits from the service flags enum (MarcoFalke) - #16379 Fix autostart filenames on Linux for testnet/regtest (hebasto) -- #16366 init: Use InitError for all errors in BGLd/qt (MarcoFalke) +- #16366 init: Use InitError for all errors in bitcoind/qt (MarcoFalke) - #16436 Do not create payment server if -disablewallet option provided (hebasto) - #16514 Remove unused RPCConsole::tabFocus (promag) - #16497 Generate bech32 addresses by default (take 2, fixup) (MarcoFalke) @@ -618,7 +618,7 @@ Build system changes - #15919 Remove unused OpenSSL includes to make it more clear where OpenSSL is used (practicalswift) - #15978 .gitignore: Don't ignore depends patches (dongcarl) - #15939 gitian: Remove windows 32 bit build (MarcoFalke) -- #15239 scripts and tools: Move non-linux build source tarballs to "BGL-binaries/version" directory (hebasto) +- #15239 scripts and tools: Move non-linux build source tarballs to "bitcoin-binaries/version" directory (hebasto) - #14047 Add HKDF_HMAC256_L32 and method to negate a private key (jonasschnelli) - #16051 add patch to common dependencies (fanquake) - #16049 switch to secure download of all dependencies (Kemu) @@ -630,7 +630,7 @@ Build system changes - #16235 Cleaned up and consolidated msbuild files (no code changes) (sipsorcery) - #16246 MSVC: Fix error in debug mode (Fix #16245) (NicolasDorier) - #16183 xtrans: Configure flags cleanup (dongcarl) -- #16258 [MSVC]: Create the config.ini as part of BGLd build (NicolasDorier) +- #16258 [MSVC]: Create the config.ini as part of bitcoind build (NicolasDorier) - #16271 remove -Wall from rapidcheck build flags (fanquake) - #16309 [MSVC] allow user level project customization (NicolasDorier) - #16308 [MSVC] Copy build output to src/ automatically after build (NicolasDorier) @@ -641,7 +641,7 @@ Build system changes - #16408 Prune X packages (dongcarl) - #16386 disable unused Qt features (fanquake) - #16424 Treat -Wswitch as error when --enable-werror (MarcoFalke) -- #16441 remove qt libjpeg check from BGL_qt.m4 (fanquake) +- #16441 remove qt libjpeg check from bitcoin_qt.m4 (fanquake) - #16434 Specify AM_CPPFLAGS for ZMQ (domob1812) - #16534 add Qt Creator Makefile.am.user to .gitignore (Bushstar) - #16573 disable building libsecp256k1 benchmarks (fanquake) @@ -654,7 +654,7 @@ Build system changes - #16654 build: update RapidCheck Makefile (jonatack) - #16370 cleanup package configure flags (fanquake) - #16746 msbuild: Ignore linker warning (sipsorcery) -- #16750 msbuild: adds bench_BGL to auto generated project files (sipsorcery) +- #16750 msbuild: adds bench_bitcoin to auto generated project files (sipsorcery) - #16810 guix: Remove ssp spec file hack (dongcarl) - #16477 skip deploying plugins we dont use in macdeployqtplus (fanquake) - #16413 Bump QT to LTS release 5.9.8 (THETCR) @@ -688,16 +688,16 @@ Build system changes - #15771 Prevent concurrency issues reading .cookie file (promag) - #15693 travis: Switch to ubuntu keyserver to avoid timeouts (MarcoFalke) - #15629 init: Throw error when network specific config is ignored (MarcoFalke) -- #15773 Add BGLTestFramework::sync_* methods (MarcoFalke) +- #15773 Add BitcoinTestFramework::sync_* methods (MarcoFalke) - #15797 travis: Bump second timeout to 33 minutes, add rationale (MarcoFalke) - #15788 Unify testing setups for fuzz, bench, and unit tests (MarcoFalke) -- #15352 Reduce noise level in test_BGL output (practicalswift) +- #15352 Reduce noise level in test_bitcoin output (practicalswift) - #15779 Add wallet_balance benchmark (MarcoFalke) - #15843 fix outdated include in blockfilter_index_tests (jamesob) - #15866 Add missing syncwithvalidationinterfacequeue to wallet_import_rescan (MarcoFalke) - #15697 Make swap_magic_bytes in p2p_invalid_messages atomic (MarcoFalke) - #15895 Avoid re-reading config.ini unnecessarily (luke-jr) -- #15896 feature_filelock, interface_BGL_cli: Use PACKAGE_NAME in messages rather than hardcoding BGL Core (luke-jr) +- #15896 feature_filelock, interface_bitcoin_cli: Use PACKAGE_NAME in messages rather than hardcoding Bitcoin Core (luke-jr) - #15897 QA/mininode: Send all headers upfront in send_blocks_and_test to avoid sending an unconnected one (luke-jr) - #15696 test_runner: Move feature_pruning to base tests (MarcoFalke) - #15869 Add settings merge test to prevent regresssions (ryanofsky) @@ -751,7 +751,7 @@ Build system changes - #16505 Changes verbosity of msbuild from quiet to normal in the appveyor script (sipsorcery) - #16293 Make test cases separate functions (MarcoFalke) - #16470 Fail early on disconnect in mininode.wait_for_* (MarcoFalke) -- #16277 Suppress output in test_BGL for expected errors (gertjaap) +- #16277 Suppress output in test_bitcoin for expected errors (gertjaap) - #16493 Fix test failures (MarcoFalke) - #16538 Add missing sync_blocks to feature_pruning (MarcoFalke) - #16509 Adapt test framework for chains other than "regtest" (MarcoFalke) @@ -851,7 +851,7 @@ Build system changes - #16556 Fix systemd service file configuration directory setup (setpill) - #15615 Add log output during initial header sync (jonasschnelli) - #16774 Avoid unnecessary "Synchronizing blockheaders" log messages (jonasschnelli) -- #16489 log: harmonize BGLd logging (jonatack) +- #16489 log: harmonize bitcoind logging (jonatack) - #16577 util: Cbufferedfile fixes and unit test (LarryRuane) - #16984 util: Make thread names shorter (hebasto) - #17038 Don't rename main thread at process level (laanwj) @@ -859,11 +859,11 @@ Build system changes - #17095 util: Filter control characters out of log messages (laanwj) - #17085 init: Change fallback locale to C.UTF-8 (laanwj) - #16957 9% less memory: make SaltedOutpointHasher noexcept (martinus) -- #17449 fix uninitialized variable nMinerConfirmationWindow (BGLVBR) +- #17449 fix uninitialized variable nMinerConfirmationWindow (bitcoinVBR) ### Documentation - #15514 Update Transifex links (fanquake) -- #15513 add "sections" info to example BGL.conf (fanquake) +- #15513 add "sections" info to example bitcoin.conf (fanquake) - #15530 Move wallet lock annotations to header (MarcoFalke) - #15562 remove duplicate clone step in build-windows.md (fanquake) - #15565 remove release note fragments (fanquake) @@ -873,7 +873,7 @@ Build system changes - #15611 Add Gitian key for droark (droark) - #15626 Update ACK description in CONTRIBUTING.md (jonatack) - #15603 Add more tips to productivity.md (gwillen) -- #15683 Comment for seemingly duplicate LIBBGL_SERVER (Bushstar) +- #15683 Comment for seemingly duplicate LIBBITCOIN_SERVER (Bushstar) - #15685 rpc-mining: Clarify error messages (MarcoFalke) - #15760 Clarify sendrawtransaction::maxfeerate==0 help (MarcoFalke) - #15659 fix findFork comment (r8921039) @@ -891,7 +891,7 @@ Build system changes - #15777 Add doxygen comments for keypool classes (jnewbery) - #15820 Add productivity notes for dummy rebases (dongcarl) - #15922 Explain how to pass in non-fundamental types into functions (MarcoFalke) -- #16080 build/doc: update BGL_config.h packages, release process (jonatack) +- #16080 build/doc: update bitcoin_config.h packages, release process (jonatack) - #16047 analyzepsbt description in doc/psbt.md (jonatack) - #16039 add release note for 14954 (fanquake) - #16139 Add riscv64 to outputs list in release-process.md (JeremyRand) @@ -915,7 +915,7 @@ Build system changes - #16484 update labels in CONTRIBUTING.md (MarcoFalke) - #16483 update Python command in msvc readme (sipsorcery) - #16504 Add release note for the deprecated totalFee option of bumpfee (promag) -- #16448 add note on precedence of options in BGL.conf (fanquake) +- #16448 add note on precedence of options in bitcoin.conf (fanquake) - #16536 Update and extend benchmarking.md (ariard) - #16530 Fix grammar and punctuation in developer notes (Tech1k) - #16574 Add historical release notes for 0.18.1 (laanwj) @@ -933,19 +933,19 @@ Build system changes - #16629 Add documentation for the new whitelist permissions (NicolasDorier) - #16723 Update labels in CONTRIBUTING.md (hebasto) - #16461 Tidy up shadowing section (promag) -- #16621 add default BGL.conf locations (GChuf) +- #16621 add default bitcoin.conf locations (GChuf) - #16752 Delete stale URL in test README (michaelfolkson) - #14862 Declare BLOCK_VALID_HEADER reserved (MarcoFalke) - #16806 Add issue templates for bug and feature request (MarcoFalke) - #16857 Elaborate need to re-login on Debian-based after usermod for Tor group (clashicly) -- #16863 Add a missing closing parenthesis in the BGL-wallet's help (darosior) +- #16863 Add a missing closing parenthesis in the bitcoin-wallet's help (darosior) - #16757 CChainState return values (MarcoFalke) - #16847 add comments clarifying how local services are advertised (jamesob) -- #16812 Fix whitespace errs in .md files, BGL.conf, and Info.plist.in (ch4ot1c) +- #16812 Fix whitespace errs in .md files, bitcoin.conf, and Info.plist.in (ch4ot1c) - #16885 Update tx-size-small comment with relevant CVE disclosure (instagibbs) - #16900 Fix doxygen comment for SignTransaction in rpc/rawtransaction_util (MarcoFalke) - #16914 Update homebrew instruction for doxygen (Sjors) -- #16912 Remove Doxygen intro from src/BGLd.cpp (ch4ot1c) +- #16912 Remove Doxygen intro from src/bitcoind.cpp (ch4ot1c) - #16960 replace outdated OpenSSL comment in test README (fanquake) - #16968 Remove MSVC update step from translation process (laanwj) - #16953 Improve test READMEs (fjahr) @@ -1086,4 +1086,4 @@ Thanks to everyone who directly contributed to this release: - Wladimir J. van der Laan - zenosage -As well as everyone that helped translating on [Transifex](https://www.transifex.com/BGL/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/bitcoin/bitcoin/). diff --git a/doc/release-notes/release-notes-0.20.0.md b/doc/release-notes/release-notes-0.20.0.md index 8415651d98..6fc1606b37 100644 --- a/doc/release-notes/release-notes-0.20.0.md +++ b/doc/release-notes/release-notes-0.20.0.md @@ -53,7 +53,7 @@ this release: `./configure`. This is the same as when checking out from git. - Instead of running `make` simply, you should instead run - `BGL_GENBUILD_NO_GIT=1 make`. + `BITCOIN_GENBUILD_NO_GIT=1 make`. Notable changes =============== @@ -528,7 +528,7 @@ Build system - #17756 Remove `WINDOWS_BITS` from build system (fanquake) - #17769 Set `AC_PREREQ` to 2.69 (fanquake) - #17880 Add -Wdate-time to Werror flags (fanquake) -- #17910 Remove double `LIBBGL_SERVER` linking (fanquake) +- #17910 Remove double `LIBBITCOIN_SERVER` linking (fanquake) - #17928 Consistent use of package variable (Bushstar) - #17933 guix: Pin Guix using `guix time-machine` (dongcarl) - #17948 pass -fno-ident in Windows gitian descriptor (fanquake) @@ -546,7 +546,7 @@ Build system - #18331 Use git archive as source tarball (hebasto) - #18397 Fix libevent linking for `bench_bitcoin` binary (hebasto) - #18426 scripts: `Previous_release`: improve behaviour on failed download (theStack) -- #18429 Remove double `LIBBGL_SERVER` from bench-Makefile (brakmic) +- #18429 Remove double `LIBBITCOIN_SERVER` from bench-Makefile (brakmic) - #18528 Create `test_fuzz` library from src/test/fuzz/fuzz.cpp (brakmic) - #18558 Fix boost detection for arch armv7l (hebasto) - #18598 gitian: Add missing automake package to gitian-win-signer.yml (achow101) diff --git a/doc/release-notes/release-notes-0.20.1.md b/doc/release-notes/release-notes-0.20.1.md index d07eade53d..9fbb29cb82 100644 --- a/doc/release-notes/release-notes-0.20.1.md +++ b/doc/release-notes/release-notes-0.20.1.md @@ -53,7 +53,7 @@ this release: `./configure`. This is the same as when checking out from git. - Instead of running `make` simply, you should instead run - `BGL_GENBUILD_NO_GIT=1 make`. + `BITCOIN_GENBUILD_NO_GIT=1 make`. Notable changes =============== diff --git a/doc/release-notes/release-notes-0.21.0.md b/doc/release-notes/release-notes-0.21.0.md index a3bf4a2a42..3baba3d49b 100644 --- a/doc/release-notes/release-notes-0.21.0.md +++ b/doc/release-notes/release-notes-0.21.0.md @@ -843,7 +843,7 @@ Tests - #19094 Only allow ASCII identifiers (laanwj) - #18820 Propagate well-known vars into depends (dongcarl) - #19173 turn on --enable-c++17 by --enable-fuzz (vasild) -- #18297 Use pkg-config in BGL_QT_CONFIGURE for all hosts including Windows (hebasto) +- #18297 Use pkg-config in BITCOIN_QT_CONFIGURE for all hosts including Windows (hebasto) - #19301 don't warn when doxygen isn't found (fanquake) - #19240 macOS toolchain simplification and bump (dongcarl) - #19356 Fix search for brew-installed BDB 4 on OS X (gwillen) diff --git a/doc/release-notes/release-notes-0.3.12.md b/doc/release-notes/release-notes-0.3.12.md index 9fa18a6c4e..38715bc75f 100644 --- a/doc/release-notes/release-notes-0.3.12.md +++ b/doc/release-notes/release-notes-0.3.12.md @@ -7,7 +7,7 @@ Features: * Recovers and continues if an exception is caused by a message you received. Other nodes shouldn't be able to cause an exception, and it hasn't happened before, but if a way is found to cause an exception, this would keep it from being used to stop network nodes. If you have json-rpc code that checks the contents of the error string, you need to change it to expect error objects of the form {"code":,"message":}, which is the standard. See this thread: -http://www.BGL.org/smf/index.php?topic=969.0 +http://www.bitcoin.org/smf/index.php?topic=969.0 Download: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.12/ +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/ diff --git a/doc/release-notes/release-notes-0.3.13.md b/doc/release-notes/release-notes-0.3.13.md index 3e135b6e82..2b95ff233d 100644 --- a/doc/release-notes/release-notes-0.3.13.md +++ b/doc/release-notes/release-notes-0.3.13.md @@ -12,15 +12,15 @@ Gavin Andresen: * Clean shutdown on SIGTERM on Linux. Download: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.13/ +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.13/ (Thanks Laszlo for the Mac OSX build!) Note: The SSE2 auto-detect in the Linux 64-bit version doesn't work with AMD in 64-bit mode. Please try this instead and let me know if it gets it right: -http://www.BGL.org/download/BGL-0.3.13.1-specialbuild-linux64.tar.gz +http://www.bitcoin.org/download/bitcoin-0.3.13.1-specialbuild-linux64.tar.gz You can still control the SSE2 use manually with -4way and -4way=0. Version 0.3.13.2 (SVN rev 161) has improvements for the case where you already had 0/unconfirmed transactions that you might have already spent. Here's a Windows build of it: -http://www.BGL.org/download/BGL-0.3.13.2-win32-setup.exe +http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe diff --git a/doc/release-notes/release-notes-0.3.14.md b/doc/release-notes/release-notes-0.3.14.md index 66c4bf1282..e73052ed9b 100644 --- a/doc/release-notes/release-notes-0.3.14.md +++ b/doc/release-notes/release-notes-0.3.14.md @@ -1,5 +1,5 @@ Version 0.3.14 is now available -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.14/ +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.14/ Changes: * Key pool feature for safer wallet backup diff --git a/doc/release-notes/release-notes-0.3.15.md b/doc/release-notes/release-notes-0.3.15.md index 52c16a3e4d..b98052ef59 100644 --- a/doc/release-notes/release-notes-0.3.15.md +++ b/doc/release-notes/release-notes-0.3.15.md @@ -1,6 +1,6 @@ * paytxfee switch is now per KB, so it adds the correct fee for large transactions * sending avoids using coins with less than 6 confirmations if it can -* BGLMiner processes transactions in priority order based on age of dependencies +* BitcoinMiner processes transactions in priority order based on age of dependencies * make sure generation doesn't start before block 74000 downloaded * bugfixes by Dean Gores * testnet, keypoololdest and paytxfee added to getinfo diff --git a/doc/release-notes/release-notes-0.3.18.md b/doc/release-notes/release-notes-0.3.18.md index 91feaa8af0..ab1c2e0692 100644 --- a/doc/release-notes/release-notes-0.3.18.md +++ b/doc/release-notes/release-notes-0.3.18.md @@ -3,7 +3,7 @@ Changes: * IsStandard() check to only include known transaction types in blocks * Jgarzik's optimisation to speed up the initial block download a little -The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://www.BGL.org/smf/index.php?topic=1886.0). +The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://www.bitcoin.org/smf/index.php?topic=1886.0). * getaccountaddress * sendfrom * move diff --git a/doc/release-notes/release-notes-0.3.20.2.md b/doc/release-notes/release-notes-0.3.20.2.md index 9aa6049c15..09ecb736bd 100644 --- a/doc/release-notes/release-notes-0.3.20.2.md +++ b/doc/release-notes/release-notes-0.3.20.2.md @@ -3,13 +3,13 @@ worse as people upgraded, so I cherry-picked the bug fix and created a minor rel The Amazon Machine Images I used to do the builds are available: - ami-38a05251 BGL-v0.3.20.2 Mingw (Windows; Administrator password 'BGL development') - ami-30a05259 BGL_0.3.20.2 Linux32 - ami-8abc4ee3 BGL_0.3.20.2 Linux64 + ami-38a05251 Bitcoin-v0.3.20.2 Mingw (Windows; Administrator password 'bitcoin development') + ami-30a05259 Bitcoin_0.3.20.2 Linux32 + ami-8abc4ee3 Bitcoin_0.3.20.2 Linux64 (mac build will be done soon) -If you have already downloaded version 0.3.20.1, please either add this to your BGL.conf file: +If you have already downloaded version 0.3.20.1, please either add this to your bitcoin.conf file: maxsendbuffer=10000 maxreceivebuffer=10000 diff --git a/doc/release-notes/release-notes-0.3.20.md b/doc/release-notes/release-notes-0.3.20.md index 12855a5aec..651d2c8f58 100644 --- a/doc/release-notes/release-notes-0.3.20.md +++ b/doc/release-notes/release-notes-0.3.20.md @@ -1,22 +1,22 @@ Please checkout the git integration branch from: -https://github.com/BGL/BGL +https://github.com/bitcoin/bitcoin ... and help test. The new features that need testing are: -* -nolisten : https://github.com/BGL/BGL/pull/11 +* -nolisten : https://github.com/bitcoin/bitcoin/pull/11 * -rescan : scan block chain for missing wallet transactions -* -printtoconsole : https://github.com/BGL/BGL/pull/37 -* RPC gettransaction details : https://github.com/BGL/BGL/pull/24 -* listtransactions new features : https://github.com/BGL/BGL/pull/10 +* -printtoconsole : https://github.com/bitcoin/bitcoin/pull/37 +* RPC gettransaction details : https://github.com/bitcoin/bitcoin/pull/24 +* listtransactions new features : https://github.com/bitcoin/bitcoin/pull/10 Bug fixes that also need testing: -* -maxconnections= : https://github.com/BGL/BGL/pull/42 -* RPC listaccounts minconf : https://github.com/BGL/BGL/pull/27 -* RPC move, add time to output : https://github.com/BGL/BGL/pull/21 +* -maxconnections= : https://github.com/bitcoin/bitcoin/pull/42 +* RPC listaccounts minconf : https://github.com/bitcoin/bitcoin/pull/27 +* RPC move, add time to output : https://github.com/bitcoin/bitcoin/pull/21 * ...and several improvements to --help output. This needs more testing on Windows! Please drop me a quick private message, email, or IRC message if you are able to do some testing. If you find bugs, please open an issue at: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues diff --git a/doc/release-notes/release-notes-0.3.21.md b/doc/release-notes/release-notes-0.3.21.md index acc187c699..f3b6bc4264 100644 --- a/doc/release-notes/release-notes-0.3.21.md +++ b/doc/release-notes/release-notes-0.3.21.md @@ -1,19 +1,19 @@ -Binaries for BGL version 0.3.21 are available at: - https://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.21/ +Binaries for Bitcoin version 0.3.21 are available at: + https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/ Changes and new features from the 0.3.20 release include: -* Universal Plug and Play support. Enable automatic opening of a port for incoming connections by running BGL or BGLd with the - -upnp=1 command line switch or using the Options dialog box. +* Universal Plug and Play support. Enable automatic opening of a port for incoming connections by running bitcoin or bitcoind with the - -upnp=1 command line switch or using the Options dialog box. -* Support for full-precision BGL amounts. You can now send, and BGL will display, BGL amounts smaller than 0.01. However, sending fewer than 0.01 BGLs still requires a 0.01 BGL fee (so you can send 1.0001 BGLs without a fee, but you will be asked to pay a fee if you try to send 0.0001). +* Support for full-precision bitcoin amounts. You can now send, and bitcoin will display, bitcoin amounts smaller than 0.01. However, sending fewer than 0.01 bitcoins still requires a 0.01 bitcoin fee (so you can send 1.0001 bitcoins without a fee, but you will be asked to pay a fee if you try to send 0.0001). -* A new method of finding BGL nodes to connect with, via DNS A records. Use the -dnsseed option to enable. +* A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable. -For developers, changes to BGL's remote-procedure-call API: +For developers, changes to bitcoin's remote-procedure-call API: -* New rpc command "sendmany" to send BGLs to more than one address in a single transaction. +* New rpc command "sendmany" to send bitcoins to more than one address in a single transaction. -* Several bug fixes, including a serious intermittent bug that would sometimes cause BGLd to stop accepting rpc requests. +* Several bug fixes, including a serious intermittent bug that would sometimes cause bitcoind to stop accepting rpc requests. * -logtimestamps option, to add a timestamp to each line in debug.log. diff --git a/doc/release-notes/release-notes-0.3.22.md b/doc/release-notes/release-notes-0.3.22.md index 03c6d5d65b..4c05e3e5e7 100644 --- a/doc/release-notes/release-notes-0.3.22.md +++ b/doc/release-notes/release-notes-0.3.22.md @@ -1,4 +1,4 @@ -Download URL: https://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.22/ +Download URL: https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.22/ This is largely a bugfix and TX fee schedule release. We also hope to make 0.3.23 a quick release, to fix problems that the network has seen due to explosive growth in the past week. @@ -7,7 +7,7 @@ Notable changes: * Non-standard transactions accepted on testnet * Source code tree reorganized (prep for autotools build) * Remove "Generate Coins" option from GUI, and remove 4way SSE miner. Internal reference CPU miner remains available, but users are directed to external miners for best hash production. -* IRC is overflowing. Client now bootstraps to channels #BGL00 - #BGL99 +* IRC is overflowing. Client now bootstraps to channels #bitcoin00 - #bitcoin99 * DNS names now may be used with -addnode, -connect (requires -dns to enable) RPC changes: diff --git a/doc/release-notes/release-notes-0.3.23.md b/doc/release-notes/release-notes-0.3.23.md index 2c6e2dc298..c1d520e492 100644 --- a/doc/release-notes/release-notes-0.3.23.md +++ b/doc/release-notes/release-notes-0.3.23.md @@ -1,7 +1,7 @@ -Win32, Linux, MacOSX and source releases for BGL v0.3.23 have been uploaded to -https://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.23/ +Win32, Linux, MacOSX and source releases for bitcoin v0.3.23 have been uploaded to +https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/ -This is another quick bugfix release, trying to deal with the influx of new BGL users. +This is another quick bugfix release, trying to deal with the influx of new bitcoin users. Main items of note: diff --git a/doc/release-notes/release-notes-0.3.24.md b/doc/release-notes/release-notes-0.3.24.md index 9e780b4323..d35ac66f2c 100644 --- a/doc/release-notes/release-notes-0.3.24.md +++ b/doc/release-notes/release-notes-0.3.24.md @@ -1,7 +1,7 @@ -BGL v0.3.24 is now available for download at -https://sourceforge.net/projects/BGL/files/BGL/BGL-0.3.24/ +Bitcoin v0.3.24 is now available for download at +https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.24/ -This is another bug fix release. We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe. Wallet encryption is ready for testing at https://github.com/BGL/BGL/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4. +This is another bug fix release. We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe. Wallet encryption is ready for testing at https://github.com/bitcoin/bitcoin/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4. Notable fixes in v0.3.24, and the main reasons for this release: @@ -13,8 +13,8 @@ Notable changes in v0.3.24: C1) DNS seeding enabled by default. -C2) UPNP enabled by default in the GUI client. The percentage of BGL clients that accept incoming connections is quite small, and that is a problem. This should help. BGLd, and unofficial builds, are unchanged (though we encourage use of "-upnp" to help the network!) +C2) UPNP enabled by default in the GUI client. The percentage of bitcoin clients that accept incoming connections is quite small, and that is a problem. This should help. bitcoind, and unofficial builds, are unchanged (though we encourage use of "-upnp" to help the network!) -C3) Initial unit testing framework. BGL sorely needs automated tests, and this is a beginning. Contributions welcome. +C3) Initial unit testing framework. Bitcoin sorely needs automated tests, and this is a beginning. Contributions welcome. C4) Internal wallet code cleanup. While invisible to an end user, this change provides the basis for v0.4's wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.0.md b/doc/release-notes/release-notes-0.4.0.md index 11306acc56..145072a369 100644 --- a/doc/release-notes/release-notes-0.4.0.md +++ b/doc/release-notes/release-notes-0.4.0.md @@ -1,24 +1,24 @@ -BGL version 0.4.0 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.4.0/ +Bitcoin version 0.4.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.0/ The main feature in this release is wallet private key encryption; you can set a passphrase that must be entered before sending coins. See below for more information; if you decide to encrypt your wallet, WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you -forget or lose your wallet passphrase, you lose your BGLs. -Previous versions of BGL are unable to read encrypted wallets, +forget or lose your wallet passphrase, you lose your bitcoins. +Previous versions of bitcoin are unable to read encrypted wallets, and will crash on startup if the wallet is encrypted. -Also note: BGL version 0.4 uses a newer version of Berkeley DB +Also note: bitcoin version 0.4 uses a newer version of Berkeley DB (bdb version 4.8) than previous versions (bdb 4.7). If you upgrade -to version 0.4 and then revert back to an earlier version of BGL +to version 0.4 and then revert back to an earlier version of bitcoin the it may be unable to start because bdb 4.7 cannot read bdb 4.8 "log" files. Notable bug fixes from version 0.3.24: -Fix several BGL-becomes-unresponsive bugs due to multithreading +Fix several bitcoin-becomes-unresponsive bugs due to multithreading deadlocks. Optimize database writes for large (lots of inputs) transactions @@ -27,44 +27,44 @@ Optimize database writes for large (lots of inputs) transactions Wallet Encryption -BGL supports native wallet encryption so that people who steal your -wallet file don't automatically get access to all of your BGLs. +Bitcoin supports native wallet encryption so that people who steal your +wallet file don't automatically get access to all of your Bitcoins. In order to enable this feature, choose "Encrypt Wallet" from the Options menu. You will be prompted to enter a passphrase, which will be used as the key to encrypt your wallet and will be needed -every time you wish to send BGLs. If you lose this passphrase, -you will lose access to spend all of the BGLs in your wallet, -no one, not even the BGL developers can recover your BGLs. +every time you wish to send Bitcoins. If you lose this passphrase, +you will lose access to spend all of the bitcoins in your wallet, +no one, not even the Bitcoin developers can recover your Bitcoins. This means you are responsible for your own security, store your passphrase in a secure location and do not forget it. -Remember that the encryption built into BGL only encrypts the -actual keys which are required to send your BGLs, not the full +Remember that the encryption built into bitcoin only encrypts the +actual keys which are required to send your bitcoins, not the full wallet. This means that someone who steals your wallet file will be able to see all the addresses which belong to you, as well as the relevant transactions, you are only protected from someone spending your coins. It is recommended that you backup your wallet file before you -encrypt your wallet. To do this, close the BGL client and -copy the wallet.dat file from ~/.BGL/ on Linux, /Users/(user -name)/Application Support/BGL/ on Mac OSX, and %APPDATA%/BGL/ -on Windows (that is /Users/(user name)/AppData/Roaming/BGL on +encrypt your wallet. To do this, close the Bitcoin client and +copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user +name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/ +on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on Windows Vista and 7 and /Documents and Settings/(user name)/Application -Data/BGL on Windows XP). Once you have copied that file to a -safe location, reopen the BGL client and Encrypt your wallet. +Data/Bitcoin on Windows XP). Once you have copied that file to a +safe location, reopen the Bitcoin client and Encrypt your wallet. If everything goes fine, delete the backup and enjoy your encrypted wallet. Note that once you encrypt your wallet, you will never be -able to go back to a version of the BGL client older than 0.4. +able to go back to a version of the Bitcoin client older than 0.4. Keep in mind that you are always responsible for your own security. All it takes is a slightly more advanced wallet-stealing trojan which installs a keylogger to steal your wallet passphrase as you enter it -in addition to your wallet file and you have lost all your BGLs. +in addition to your wallet file and you have lost all your Bitcoins. Wallet encryption cannot keep you safe if you do not practice good security, such as running up-to-date antivirus software, only -entering your wallet passphrase in the BGL client and using the +entering your wallet passphrase in the Bitcoin client and using the same passphrase only as your wallet passphrase. -See the doc/README file in the BGL source for technical details +See the doc/README file in the bitcoin source for technical details of wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.1.md b/doc/release-notes/release-notes-0.4.1.md index 3b8d7aac57..ac471a8d7f 100644 --- a/doc/release-notes/release-notes-0.4.1.md +++ b/doc/release-notes/release-notes-0.4.1.md @@ -1,5 +1,5 @@ -BGL version 0.4.1 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.4.1/ +Bitcoin version 0.4.1 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.1/ This is a bugfix only release based on 0.4.0. @@ -7,32 +7,32 @@ Please report bugs by replying to this forum thread. MAJOR BUG FIX (CVE-2011-4447) -The wallet encryption feature introduced in BGL version 0.4.0 did not sufficiently secure the private keys. An attacker who +The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the associated coins. -If you have a previously encrypted wallet.dat, the first time you run wxBGL or BGLd the wallet will be rewritten, BGL will +If you have a previously encrypted wallet.dat, the first time you run wxbitcoin or bitcoind the wallet will be rewritten, Bitcoin will shut down, and you will be prompted to restart it to run with the new, properly encrypted file. If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your BGLs to yourself using a new BGL address and stop using any previously generated addresses. +location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. -Wallets encrypted with this version of BGL are written properly. +Wallets encrypted with this version of Bitcoin are written properly. -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new BGL address; to be certain that the +Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the new private keys are properly backed up you should: -1. Run BGL and let it rewrite the wallet.dat file +1. Run Bitcoin and let it rewrite the wallet.dat file -2. Run it again, then ask it for a new BGL address. -wxBGL: new address visible on main window -BGLd: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. +2. Run it again, then ask it for a new bitcoin address. +wxBitcoin: new address visible on main window +bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. -3. If your encrypted wallet.dat may have been copied or stolen, send all of your BGLs to the new BGL address. +3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. -4. Shut down BGL, then backup the wallet.dat file. -IMPORTANT: be sure to request a new BGL address before backing up, so that the 'keypool' is regenerated and backed up. +4. Shut down Bitcoin, then backup the wallet.dat file. +IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your BGLs. +"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. diff --git a/doc/release-notes/release-notes-0.4.3.md b/doc/release-notes/release-notes-0.4.3.md index b3fb4eca5d..79b74404de 100644 --- a/doc/release-notes/release-notes-0.4.3.md +++ b/doc/release-notes/release-notes-0.4.3.md @@ -1,21 +1,21 @@ -BGLd version 0.4.3 is now available for download at: -http://luke.dashjr.org/programs/BGL/files/BGLd-0.4.3/ (until Gavin uploads to SourceForge) +bitcoind version 0.4.3 is now available for download at: +http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.3/ (until Gavin uploads to SourceForge) This is a bugfix-only release based on 0.4.0. -Please note that the wxBGL GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. +Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. Please report bugs for the daemon only using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Stable source code is hosted at Gitorious: -http://gitorious.org/BGL/BGLd-stable/archive-tarball/v0.4.3#.tar.gz +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.3#.tar.gz BUG FIXES Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download). Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when BGL is being used with Tor (identity leak). +No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). diff --git a/doc/release-notes/release-notes-0.4.4.md b/doc/release-notes/release-notes-0.4.4.md index 3203de8cec..a0c839cbd8 100644 --- a/doc/release-notes/release-notes-0.4.4.md +++ b/doc/release-notes/release-notes-0.4.4.md @@ -1,15 +1,15 @@ -BGL version 0.4.4 is now available for download at: -http://luke.dashjr.org/programs/BGL/files/BGLd-0.4.4/ +Bitcoin version 0.4.4 is now available for download at: +http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.4/ This is a bugfix-only release based on 0.4.0. -Please note that the wxBGL GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. +Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. Please report bugs for the daemon only using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Stable source code is hosted at Gitorious: -http://gitorious.org/BGL/BGLd-stable/archive-tarball/v0.4.4#.tar.gz +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.4#.tar.gz BUG FIXES @@ -24,7 +24,7 @@ Several shutdown issues have been fixed. Check that keys stored in the wallet are valid at startup, and if not, report corruption. Various build fixes. -If no password is specified to BGLd, recommend a secure password. +If no password is specified to bitcoind, recommend a secure password. Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. Add checkpoint at block 168,000. diff --git a/doc/release-notes/release-notes-0.4.6.md b/doc/release-notes/release-notes-0.4.6.md index 18e89b88ae..07c5e4b694 100644 --- a/doc/release-notes/release-notes-0.4.6.md +++ b/doc/release-notes/release-notes-0.4.6.md @@ -1,11 +1,11 @@ -BGLd version 0.4.6 is now available for download at: +bitcoind version 0.4.6 is now available for download at: Windows: installer | zip (sig) Source: tar.gz -BGLd and BGL-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. +bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. These are bugfix-only releases. -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBGL GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. +Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. BUG FIXES @@ -13,25 +13,25 @@ Version 0.6.0 allowed importing invalid "private keys", which would be unspendab Verify status of encrypt/decrypt calls to detect failed padding Check blocks for duplicate transactions earlier. Fixes #1167 Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (BGL-Qt) +Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) JSON-RPC listtransactions's from/count handling is now fixed Optimize and fix multithreaded access, when checking whether we already know about transactions Fix potential networking deadlock Proper support for Growl 1.3 notifications Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (BGL-Qt) +Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (BGL-Qt) +Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (BGL-Qt) +Show a message box when runaway exception happens (Bitcoin-Qt) Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (BGL-Qt) -Correct sign message BGL address tooltip. Fixes #1050 (BGL-Qt) +Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) +Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (BGL-Qt) +Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) Work around issue in boost::program_options that prevents from compiling in clang Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (BGL-Qt) +Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.5.0.md b/doc/release-notes/release-notes-0.5.0.md index 8cdf33f2a8..8cba35bb7c 100644 --- a/doc/release-notes/release-notes-0.5.0.md +++ b/doc/release-notes/release-notes-0.5.0.md @@ -1,45 +1,45 @@ -BGL version 0.5.0 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.5.0/ +Bitcoin version 0.5.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.0/ The major change for this release is a completely new graphical interface that uses the Qt user interface toolkit. This release include German, Spanish, Spanish-Castilian, Norwegian and Dutch translations. More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/BGL/ +https://www.transifex.net/projects/p/bitcoin/ Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues -For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep BGL up-to-date. Just type "sudo apt-add-repository ppa:BGL/BGL" in your terminal, then install the BGL-qt package. +For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep bitcoin up-to-date. Just type "sudo apt-add-repository ppa:bitcoin/bitcoin" in your terminal, then install the bitcoin-qt package. MAJOR BUG FIX (CVE-2011-4447) -The wallet encryption feature introduced in BGL version 0.4.0 did not sufficiently secure the private keys. An attacker who +The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the associated coins. -If you have a previously encrypted wallet.dat, the first time you run BGL-qt or BGLd the wallet will be rewritten, BGL will +If you have a previously encrypted wallet.dat, the first time you run bitcoin-qt or bitcoind the wallet will be rewritten, Bitcoin will shut down, and you will be prompted to restart it to run with the new, properly encrypted file. If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your BGLs to yourself using a new BGL address and stop using any previously generated addresses. +location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. -Wallets encrypted with this version of BGL are written properly. +Wallets encrypted with this version of Bitcoin are written properly. -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new BGL address; to be certain that the +Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the new private keys are properly backed up you should: -1. Run BGL and let it rewrite the wallet.dat file +1. Run Bitcoin and let it rewrite the wallet.dat file -2. Run it again, then ask it for a new BGL address. -BGL-Qt: Address Book, then New Address... -BGLd: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. +2. Run it again, then ask it for a new bitcoin address. +Bitcoin-Qt: Address Book, then New Address... +bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. -3. If your encrypted wallet.dat may have been copied or stolen, send all of your BGLs to the new BGL address. +3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. -4. Shut down BGL, then backup the wallet.dat file. -IMPORTANT: be sure to request a new BGL address before backing up, so that the 'keypool' is regenerated and backed up. +4. Shut down Bitcoin, then backup the wallet.dat file. +IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your BGLs. +"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. @@ -51,7 +51,7 @@ MAJOR GUI CHANGES Icons at the bottom of the window that show how well connected you are to the network, with tooltips to display details. -Drag and drop support for BGL: URIs on web pages. +Drag and drop support for bitcoin: URIs on web pages. Export transactions as a .csv file. @@ -63,7 +63,7 @@ getmemorypool : new RPC command, provides everything needed to construct a block listsinceblock : new RPC command, list transactions since given block -signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a BGL address. +signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a bitcoin address. GENERAL CHANGES diff --git a/doc/release-notes/release-notes-0.5.1.md b/doc/release-notes/release-notes-0.5.1.md index 061c135877..e8914becfb 100644 --- a/doc/release-notes/release-notes-0.5.1.md +++ b/doc/release-notes/release-notes-0.5.1.md @@ -1,27 +1,27 @@ -BGL version 0.5.1 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.5.1/ +Bitcoin version 0.5.1 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.1/ This is a bugfix-only release. This release includes 13 translations, including 5 new translations: Italian, Hungarian, Ukranian, Portuguese (Brazilian) and Simplified Chinese. More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/BGL/ +https://www.transifex.net/projects/p/bitcoin/ Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Project source code is hosted at github; we are no longer distributing .tar.gz files here, you can get them directly from github: -https://github.com/BGL/BGL/tarball/v0.5.1 # .tar.gz -https://github.com/BGL/BGL/zipball/v0.5.1 # .zip +https://github.com/bitcoin/bitcoin/tarball/v0.5.1 # .tar.gz +https://github.com/bitcoin/bitcoin/zipball/v0.5.1 # .zip For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep -BGL up-to-date. Just type -sudo apt-add-repository ppa:BGL/BGL -in your terminal, then install the BGL-qt package. +bitcoin up-to-date. Just type +sudo apt-add-repository ppa:bitcoin/bitcoin +in your terminal, then install the bitcoin-qt package. BUG FIXES @@ -29,15 +29,15 @@ BUG FIXES Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 release binaries). -The code that finds peers via "dns seeds" no longer stops BGL startup +The code that finds peers via "dns seeds" no longer stops bitcoin startup if one of the dns seed machines is down. Tooltips on the transaction list view were rendering incorrectly (as black boxes or with a transparent background). -Prevent a denial-of-service attack involving flooding a BGL node with +Prevent a denial-of-service attack involving flooding a bitcoin node with orphan blocks. The wallet passphrase dialog now warns you if the caps lock key was pressed. -Improved searching in addresses and labels in BGL-qt. +Improved searching in addresses and labels in bitcoin-qt. diff --git a/doc/release-notes/release-notes-0.5.2.md b/doc/release-notes/release-notes-0.5.2.md index 83bc73da6a..1c2e0f58b5 100644 --- a/doc/release-notes/release-notes-0.5.2.md +++ b/doc/release-notes/release-notes-0.5.2.md @@ -1,13 +1,13 @@ -BGL version 0.5.2 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.5.2/ +Bitcoin version 0.5.2 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.2/ This is a bugfix-only release based on 0.5.1. Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Stable source code is hosted at Gitorious: -http://gitorious.org/BGL/BGLd-stable/archive-tarball/v0.5.2#.tar.gz +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.2#.tar.gz BUG FIXES @@ -15,7 +15,7 @@ Check all transactions in blocks after the last checkpoint (0.5.0 and 0.5.1 skip Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download; this was not a security vulnerability). Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when BGL is being used with Tor (identity leak). +No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 and 0.5.1 release Linux binaries). Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). Don't show "IP" for transactions which are not necessarily IP transactions. diff --git a/doc/release-notes/release-notes-0.5.3.md b/doc/release-notes/release-notes-0.5.3.md index c5b647fbd1..38b0b051d0 100644 --- a/doc/release-notes/release-notes-0.5.3.md +++ b/doc/release-notes/release-notes-0.5.3.md @@ -1,19 +1,19 @@ -BGL version 0.5.3 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.5.3/ +Bitcoin version 0.5.3 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.3/ This is a bugfix-only release based on 0.5.1. It also includes a few protocol updates. Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Stable source code is hosted at Gitorious: -http://gitorious.org/BGL/BGLd-stable/archive-tarball/v0.5.3#.tar.gz +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.3#.tar.gz PROTOCOL UPDATES BIP 30: Introduce a new network rule: "a block is not valid if it contains a transaction whose hash already exists in the block chain, unless all that transaction's outputs were already spent before said block" beginning on March 15, 2012, 00:00 UTC. -On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing BGL easier, and will not affect normal mode. +On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing Bitcoin easier, and will not affect normal mode. BUG FIXES @@ -24,19 +24,19 @@ Resolved multiple bugs preventing long-term unlocking of encrypted wallets Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. Skip splash screen when -min is used, and fix Minimize to Tray function. -Do not blank "label" in BGL-Qt "Send" tab, if the user has already entered something. +Do not blank "label" in Bitcoin-Qt "Send" tab, if the user has already entered something. Correct various labels and messages. Various memory leaks and potential null pointer deferences have been fixed. -Handle invalid BGL URIs using "BGL://" instead of "BGL:". +Handle invalid Bitcoin URIs using "bitcoin://" instead of "bitcoin:". Several shutdown issues have been fixed. Revert to "global progress indication", as starting from zero every time was considered too confusing for many users. Check that keys stored in the wallet are valid at startup, and if not, report corruption. Enable accessible widgets on Windows, so that people with screen readers such as NVDA can make sense of it. Various build fixes. -If no password is specified to BGLd, recommend a secure password. -Automatically focus and scroll to new "Send coins" entries in BGL-Qt. -Show a message box for --help on Windows, for BGL-Qt. +If no password is specified to bitcoind, recommend a secure password. +Automatically focus and scroll to new "Send coins" entries in Bitcoin-Qt. +Show a message box for --help on Windows, for Bitcoin-Qt. Add missing "About Qt" menu option to show built-in Qt About dialog. -Don't show "-daemon" as an option for BGL-Qt, since it isn't available. +Don't show "-daemon" as an option for Bitcoin-Qt, since it isn't available. Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. Add checkpoint at block 168,000. diff --git a/doc/release-notes/release-notes-0.5.4.md b/doc/release-notes/release-notes-0.5.4.md index 7c60ce7366..ce2160fbb9 100644 --- a/doc/release-notes/release-notes-0.5.4.md +++ b/doc/release-notes/release-notes-0.5.4.md @@ -1,14 +1,14 @@ -BGL version 0.5.4 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.5.4/ +Bitcoin version 0.5.4 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.4/ NOTE: 0.5.4rc3 is being renamed to 0.5.4 final with no changes. This is a bugfix-only release in the 0.5.x series, plus a few protocol updates. Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Stable source code is hosted at Gitorious: -http://gitorious.org/BGL/BGLd-stable/archive-tarball/v0.5.4#.tar.gz +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.4#.tar.gz PROTOCOL UPDATES @@ -22,8 +22,8 @@ Fix broken testnet mining. Stop excess inventory relay during initial block download. When disconnecting a node, clear the received buffer so that we do not process any already received messages. Yet another attempt at implementing "minimize to tray" that works on all operating systems. -Fix BGL-Qt notifications under Growl 1.3. -Increase required age of BGL-Qt's "not up to date" status from 30 to 90 minutes. +Fix Bitcoin-Qt notifications under Growl 1.3. +Increase required age of Bitcoin-Qt's "not up to date" status from 30 to 90 minutes. Implemented missing verifications that led to crash on entering some wrong passphrases for encrypted wallets. Fix default filename suffixes in GNOME save dialog. Make the "Send coins" tab use the configured unit type, even on the first attempt. @@ -31,7 +31,7 @@ Print detailed wallet loading errors to debug.log when it is corrupt. Allocate exactly the amount of space needed for signing transactions, instead of a fixed 10k buffer. Workaround for improbable memory access violation. Check wallet's minimum version before trying to load it. -Remove wxBGL properly when installing BGL-Qt over it. (Windows) +Remove wxBitcoin properly when installing Bitcoin-Qt over it. (Windows) Detail reorganization information better in debug log. Use a messagebox to display the error when -server is provided without configuring a RPC password. Testing suite build now honours provided CXXFLAGS. diff --git a/doc/release-notes/release-notes-0.5.5.md b/doc/release-notes/release-notes-0.5.5.md index 2c12ac11ce..75ebc3e6b6 100644 --- a/doc/release-notes/release-notes-0.5.5.md +++ b/doc/release-notes/release-notes-0.5.5.md @@ -1,11 +1,11 @@ -BGLd and BGL-Qt version 0.5.5 are now available for download at: +bitcoind and Bitcoin-Qt version 0.5.5 are now available for download at: Windows: installer | zip (sig) Source: tar.gz -BGLd and BGL-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. +bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. These are bugfix-only releases. -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBGL GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. +Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. BUG FIXES @@ -13,25 +13,25 @@ Version 0.6.0 allowed importing invalid "private keys", which would be unspendab Verify status of encrypt/decrypt calls to detect failed padding Check blocks for duplicate transactions earlier. Fixes #1167 Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (BGL-Qt) +Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) JSON-RPC listtransactions's from/count handling is now fixed Optimize and fix multithreaded access, when checking whether we already know about transactions Fix potential networking deadlock Proper support for Growl 1.3 notifications Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (BGL-Qt) +Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (BGL-Qt) +Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (BGL-Qt) +Show a message box when runaway exception happens (Bitcoin-Qt) Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (BGL-Qt) -Correct sign message BGL address tooltip. Fixes #1050 (BGL-Qt) +Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) +Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (BGL-Qt) +Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) Work around issue in boost::program_options that prevents from compiling in clang Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (BGL-Qt) +Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.6.0.md b/doc/release-notes/release-notes-0.6.0.md index 96795f6751..549404325e 100644 --- a/doc/release-notes/release-notes-0.6.0.md +++ b/doc/release-notes/release-notes-0.6.0.md @@ -1,25 +1,25 @@ -BGL version 0.6.0 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.6.0/test/ +Bitcoin version 0.6.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.0/test/ This release includes more than 20 language localizations. More translations are welcome; join the project at Transifex to help: -https://www.transifex.net/projects/p/BGL/ +https://www.transifex.net/projects/p/bitcoin/ Please report bugs using the issue tracker at github: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues Project source code is hosted at github; we are no longer distributing .tar.gz files here, you can get them directly from github: -https://github.com/BGL/BGL/tarball/v0.6.0 # .tar.gz -https://github.com/BGL/BGL/zipball/v0.6.0 # .zip +https://github.com/bitcoin/bitcoin/tarball/v0.6.0 # .tar.gz +https://github.com/bitcoin/bitcoin/zipball/v0.6.0 # .zip For Ubuntu users, there is a ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep -BGL up-to-date. Just type -sudo apt-add-repository ppa:BGL/BGL -in your terminal, then install the BGL-qt package. +bitcoin up-to-date. Just type +sudo apt-add-repository ppa:bitcoin/bitcoin +in your terminal, then install the bitcoin-qt package. KNOWN ISSUES @@ -30,7 +30,7 @@ because database writes are queued to speed up download time. -NEW FEATURES SINCE BGL VERSION 0.5 +NEW FEATURES SINCE BITCOIN VERSION 0.5 Initial network synchronization should be much faster (one or two hours on a typical machine instead of ten or more @@ -38,30 +38,30 @@ hours). Backup Wallet menu option. -BGL-Qt can display and save QR codes for sending +Bitcoin-Qt can display and save QR codes for sending and receiving addresses. New context menu on addresses to copy/edit/delete them. New Sign Message dialog that allows you to prove that you -own a BGL address by creating a digital +own a bitcoin address by creating a digital signature. New wallets created with this version will use 33-byte 'compressed' public keys instead of 65-byte public keys, resulting in smaller -transactions and less traffic on the BGL +transactions and less traffic on the bitcoin network. The shorter keys are already supported by the network but wallet.dat files containing short keys are not compatible with earlier -versions of BGL-Qt/BGLd. +versions of Bitcoin-Qt/bitcoind. New command-line argument -blocknotify= that will spawn a shell process to run when a new block is accepted. New command-line argument -splash=0 to disable -BGL-Qt's initial splash screen +Bitcoin-Qt's initial splash screen validateaddress JSON-RPC api command output includes two new fields for addresses in the wallet: @@ -104,11 +104,11 @@ attacks were fixed. NOT YET IMPLEMENTED FEATURES -Support for clicking on BGL: URIs and -opening/launching BGL-Qt is available only on Linux, +Support for clicking on bitcoin: URIs and +opening/launching Bitcoin-Qt is available only on Linux, and only if you configure your desktop to launch -BGL-Qt. All platforms support dragging and dropping -BGL: URIs onto the BGL-Qt window to start +Bitcoin-Qt. All platforms support dragging and dropping +bitcoin: URIs onto the Bitcoin-Qt window to start payment. @@ -117,7 +117,7 @@ PRELIMINARY SUPPORT FOR MULTISIGNATURE TRANSACTIONS This release has preliminary support for multisignature transactions-- transactions that require authorization from more than one person or device before they -will be accepted by the BGL network. +will be accepted by the bitcoin network. Prior to this release, multisignature transactions were considered 'non-standard' and were ignored; @@ -125,13 +125,13 @@ with this release multisignature transactions are considered standard and will start to be relayed and accepted into blocks. -It is expected that future releases of BGL-Qt +It is expected that future releases of Bitcoin-Qt will support the creation of multisignature transactions, once enough of the network has upgraded so relaying and validating them is robust. For this release, creation and testing of multisignature -transactions is limited to the BGL test network using +transactions is limited to the bitcoin test network using the "addmultisigaddress" JSON-RPC api call. Short multisignature address support is included in this diff --git a/doc/release-notes/release-notes-0.6.2.md b/doc/release-notes/release-notes-0.6.2.md index 16165ec699..442be3add3 100644 --- a/doc/release-notes/release-notes-0.6.2.md +++ b/doc/release-notes/release-notes-0.6.2.md @@ -1,10 +1,10 @@ -BGL version 0.6.2 is now available for download at: -http://sourceforge.net/projects/BGL/files/BGL/BGL-0.6.2/ +Bitcoin version 0.6.2 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.2/ This is a bug-fix and code-cleanup release, with no major new features. Please report bugs using the github issue tracker at: -https://github.com/BGL/BGL/issues +https://github.com/BitgesellOfficial/bitgesell/issues NOTABLE CHANGES @@ -14,7 +14,7 @@ portable to different data directories by default. If you need a portable blkindex.dat file then run with the new -detachdb=1 option or the "Detach databases at shutdown" GUI preference. -Fixed https://github.com/BGL/BGL/issues/1065, a bug that +Fixed https://github.com/bitcoin/bitcoin/issues/1065, a bug that could cause long-running nodes to crash. Mac and Windows binaries are compiled against OpenSSL 1.0.1b (Linux diff --git a/doc/release-notes/release-notes-0.6.3.md b/doc/release-notes/release-notes-0.6.3.md index 2ba112e04d..2e33acd107 100644 --- a/doc/release-notes/release-notes-0.6.3.md +++ b/doc/release-notes/release-notes-0.6.3.md @@ -1,29 +1,29 @@ -BGL version 0.6.3 is now available for download at: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.6.3/ +Bitcoin version 0.6.3 is now available for download at: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.3/ This is a bug-fix release, with no new features. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues CHANGE SUMMARY Fixed a serious denial-of-service attack that could cause the -BGL process to become unresponsive. Thanks to Sergio Lerner +bitcoin process to become unresponsive. Thanks to Sergio Lerner for finding and responsibly reporting the problem. (CVE-2012-3789) Optimized the process of checking transaction signatures, to speed up processing of new block messages and make propagating blocks across the network faster. -Fixed an obscure bug that could cause the BGL process to get +Fixed an obscure bug that could cause the bitcoin process to get stuck on an invalid block-chain, if the invalid chain was hundreds of blocks long. -BGL-Qt no longer automatically selects the first address +Bitcoin-Qt no longer automatically selects the first address in the address book (Issue #1384). -Fixed minimize-to-dock behavior of BGL-Qt on the Mac. +Fixed minimize-to-dock behavior of Bitcoin-Qt on the Mac. Added a block checkpoint at block 185,333 to speed up initial blockchain download. diff --git a/doc/release-notes/release-notes-0.7.0.md b/doc/release-notes/release-notes-0.7.0.md index e3a76ead9d..81d0597833 100644 --- a/doc/release-notes/release-notes-0.7.0.md +++ b/doc/release-notes/release-notes-0.7.0.md @@ -1,24 +1,24 @@ -BGL version 0.7.0 is now available for download at: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.7.0/ +Bitcoin version 0.7.0 is now available for download at: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.0/ -We recommend that everybody running prior versions of BGLd/BGL-Qt +We recommend that everybody running prior versions of bitcoind/Bitcoin-Qt upgrade to this release, except for users running Mac OSX 10.5. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues Project source code is hosted at github; you can get source-only tarballs/zipballs directly from there: - https://github.com/BGL/BGL/tarball/v0.7.0 # .tar.gz - https://github.com/BGL/BGL/zipball/v0.7.0 # .zip + https://github.com/bitcoin/bitcoin/tarball/v0.7.0 # .tar.gz + https://github.com/bitcoin/bitcoin/zipball/v0.7.0 # .zip Ubuntu Linux users can use the "Personal Package Archive" (PPA) maintained by Matt Corallo to automatically keep -BGL up-to-date. Just type - sudo apt-add-repository ppa:BGL/BGL +bitcoin up-to-date. Just type + sudo apt-add-repository ppa:bitcoin/bitcoin sudo apt-get update -in your terminal, then install the BGL-qt package: - sudo apt-get install BGL-qt +in your terminal, then install the bitcoin-qt package: + sudo apt-get install bitcoin-qt How to Upgrade @@ -27,10 +27,10 @@ If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over Code: -/Applications/BGL-Qt +/Applications/Bitcoin-Qt (on Mac) or Code: -BGLd/BGL-qt +bitcoind/bitcoin-qt (on Linux). If you were running on Linux with a version that might have been compiled @@ -45,14 +45,14 @@ Incompatible Changes and 'getrawmempool' commands. * Remove deprecated RPC 'getblocknumber' -BGL Improvement Proposals implemented +Bitcoin Improvement Proposals implemented BIP 22 - 'getblocktemplate', 'submitblock' RPCs BIP 34 - block version 2, height in coinbase BIP 35 - 'mempool' message, extended 'getdata' message behavior -Core BGL handling and blockchain database +Core bitcoin handling and blockchain database * Reduced CPU usage, by eliminating some redundant hash calculations * Cache signature verifications, to eliminate redundant signature checks @@ -109,7 +109,7 @@ Qt GUI * Add 2 labels to the overviewpage that display Wallet and Transaction status (obsolete or current) * Extend the optionsdialog (e.g. language selection) and re-work it to a tabbed UI * Merge sign/verify message into a single window with tabbed UI -* Ensure a changed BGL unit immediately updates all GUI elements that use units +* Ensure a changed bitcoin unit immediately updates all GUI elements that use units * Update QR Code dialog * Improve error reporting at startup * Fine-grained UI updates for a much smoother UI during block downloads @@ -119,8 +119,8 @@ Qt GUI * Much better translations * Override progress bar design on platforms with segmented progress bars to assist with readability * Added 'immature balance' display on the overview page -* (Windows only): enable ASLR and DEP for BGL-qt.exe -* (Windows only): add meta-data to BGL-qt.exe (e.g. description) +* (Windows only): enable ASLR and DEP for bitcoin-qt.exe +* (Windows only): add meta-data to bitcoin-qt.exe (e.g. description) Internal codebase @@ -131,7 +131,7 @@ Internal codebase Miscellaneous * Reopen debug.log upon SIGHUP -* Bash programmable completion for BGLd(1) +* Bash programmable completion for bitcoind(1) * On supported OS's, each thread is given a useful name diff --git a/doc/release-notes/release-notes-0.7.1.md b/doc/release-notes/release-notes-0.7.1.md index e482b90cf5..98ec79637b 100644 --- a/doc/release-notes/release-notes-0.7.1.md +++ b/doc/release-notes/release-notes-0.7.1.md @@ -1,23 +1,23 @@ -BGL version 0.7.1 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.7.1/ +Bitcoin version 0.7.1 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.1/ This is a bug-fix minor release. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues Project source code is hosted at github; you can get source-only tarballs/zipballs directly from there: - https://github.com/BGL/BGL/tarball/v0.7.1 # .tar.gz - https://github.com/BGL/BGL/zipball/v0.7.1 # .zip + https://github.com/bitcoin/bitcoin/tarball/v0.7.1 # .tar.gz + https://github.com/bitcoin/bitcoin/zipball/v0.7.1 # .zip Ubuntu Linux users can use the "Personal Package Archive" (PPA) maintained by Matt Corallo to automatically keep up-to-date. Just type: - sudo apt-add-repository ppa:BGL/BGL + sudo apt-add-repository ppa:bitcoin/bitcoin sudo apt-get update -in your terminal, then install the BGL-qt package: - sudo apt-get install BGL-qt +in your terminal, then install the bitcoin-qt package: + sudo apt-get install bitcoin-qt KNOWN ISSUES ------------ @@ -30,7 +30,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you were running on Linux with a version that might have been compiled with a different version of Berkeley DB (for example, if you were using an @@ -75,7 +75,7 @@ Dependency changes Bug fixes --------- -* Clicking on a BGL: URI on Windows should now launch BGL-Qt properly. +* Clicking on a bitcoin: URI on Windows should now launch Bitcoin-Qt properly. * When running -testnet, use RPC port 18332 by default. diff --git a/doc/release-notes/release-notes-0.7.2.md b/doc/release-notes/release-notes-0.7.2.md index 7b029a08d5..fd0bbfe65e 100644 --- a/doc/release-notes/release-notes-0.7.2.md +++ b/doc/release-notes/release-notes-0.7.2.md @@ -1,10 +1,10 @@ -BGL version 0.7.2 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.7.2 +Bitcoin version 0.7.2 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.2 This is a bug-fix minor release. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- @@ -12,7 +12,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you were running on Linux with a version that might have been compiled with a different version of Berkeley DB (for example, if you were using an @@ -40,7 +40,7 @@ Bug fixes database twice. * Fix use-after-free problems in initialization and shutdown, the latter of - which caused BGL-Qt to crash on Windows when exiting. + which caused Bitcoin-Qt to crash on Windows when exiting. * Correct library linking so building on Windows natively works. diff --git a/doc/release-notes/release-notes-0.8.0.md b/doc/release-notes/release-notes-0.8.0.md index 548a1905fb..6406dabea3 100644 --- a/doc/release-notes/release-notes-0.8.0.md +++ b/doc/release-notes/release-notes-0.8.0.md @@ -1,11 +1,11 @@ -BGL-Qt version 0.8.0 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.0/ +Bitcoin-Qt version 0.8.0 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.0/ This is a major release designed to improve performance and handle the increasing volume of transactions on the network. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- @@ -13,7 +13,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). The first time you run after the upgrade a re-indexing process will be started that will take anywhere from 30 minutes to several hours, @@ -31,7 +31,7 @@ details). Improvements ------------ -Mac and Windows binaries are signed with certificates owned by the BGL +Mac and Windows binaries are signed with certificates owned by the Bitcoin Foundation, to be compatible with the new security features in OSX 10.8 and Windows 8. @@ -61,7 +61,7 @@ contrib/spendfrom is a python-language command-line utility that demonstrates how to use the "raw transactions" JSON-RPC api to send coins received from particular addresses (also known as "coin control"). -New/changed settings (command-line or BGL.conf file) +New/changed settings (command-line or bitcoin.conf file) -------------------------------------------------------- dbcache : controls LevelDB memory usage. diff --git a/doc/release-notes/release-notes-0.8.1.md b/doc/release-notes/release-notes-0.8.1.md index e24ac5721a..85c4867cd7 100644 --- a/doc/release-notes/release-notes-0.8.1.md +++ b/doc/release-notes/release-notes-0.8.1.md @@ -1,11 +1,11 @@ -BGL-Qt/BGLd version 0.8.1 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.1/ +Bitcoin-Qt/bitcoind version 0.8.1 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/ This is a maintenance release that adds a new network rule to avoid a chain-forking incompatibility with versions 0.7.2 and earlier. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade @@ -14,7 +14,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.8.1 your blockchain files will be re-indexed, which will take diff --git a/doc/release-notes/release-notes-0.8.2.md b/doc/release-notes/release-notes-0.8.2.md index 4e483d40be..013fffe982 100644 --- a/doc/release-notes/release-notes-0.8.2.md +++ b/doc/release-notes/release-notes-0.8.2.md @@ -1,11 +1,11 @@ -BGL-Qt version 0.8.2 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.2/ +Bitcoin-Qt version 0.8.2 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.2/ This is a maintenance release that fixes many bugs and includes a few small new features. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade @@ -13,7 +13,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.8.2 your blockchain files will be re-indexed, which will take @@ -43,7 +43,7 @@ with code that automatically calculates and suggests appropriate fees in the 0.9 release and note that if you set a fee policy significantly different from the rest of the network your transactions may never confirm. -BGL-Qt changes +Bitcoin-Qt changes * New icon and splash screen * Improve reporting of synchronization process @@ -58,7 +58,7 @@ BGL-Qt changes to current translations MacOSX: -* OSX support for click-to-pay (BGL:) links +* OSX support for click-to-pay (bitcoin:) links * Fix GUI disappearing problem on MacOSX (issue #1522) Linux/Unix: @@ -97,8 +97,8 @@ Wallet compatibility/rescuing Known Bugs -* Entering the 'getblocktemplate' or 'getwork' RPC commands into the BGL-Qt debug -console will cause BGL-Qt to crash. Run BGL-Qt with the -server command-line +* Entering the 'getblocktemplate' or 'getwork' RPC commands into the Bitcoin-Qt debug +console will cause Bitcoin-Qt to crash. Run Bitcoin-Qt with the -server command-line option to workaround. Thanks to everybody who contributed to the 0.8.2 release! diff --git a/doc/release-notes/release-notes-0.8.3.md b/doc/release-notes/release-notes-0.8.3.md index deed4cc27e..92f2fb813f 100644 --- a/doc/release-notes/release-notes-0.8.3.md +++ b/doc/release-notes/release-notes-0.8.3.md @@ -1,11 +1,11 @@ -BGL-Qt version 0.8.3 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.3/ +Bitcoin-Qt version 0.8.3 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.3/ This is a maintenance release to fix a denial-of-service attack that can cause nodes to crash. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues 0.8.3 Release notes diff --git a/doc/release-notes/release-notes-0.8.4.md b/doc/release-notes/release-notes-0.8.4.md index 0bc6fae23a..41c40b930d 100644 --- a/doc/release-notes/release-notes-0.8.4.md +++ b/doc/release-notes/release-notes-0.8.4.md @@ -1,11 +1,11 @@ -BGL-Qt version 0.8.4 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.4/ +Bitcoin-Qt version 0.8.4 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.4/ This is a maintenance release to fix a critical bug and three security issues; we urge all users to upgrade. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade @@ -14,7 +14,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.8.4 your blockchain files will be re-indexed, which will take @@ -29,12 +29,12 @@ Security issues An attacker could send a series of messages that resulted in an integer division-by-zero error in the Bloom Filter handling -code, causing the BGL-Qt or BGLd process to crash. +code, causing the Bitcoin-Qt or bitcoind process to crash. Bloom filters were introduced with version 0.8, so versions 0.8.0 through 0.8.3 are vulnerable to this critical denial-of-service attack. A constant-time algorithm is now used to check RPC password -guess attempts; fixes https://github.com/BGL/BGL/issues/2838 +guess attempts; fixes https://github.com/bitcoin/bitcoin/issues/2838 (CVE-2013-4165) Implement a better fix for the fill-memory-with-orphan-transactions @@ -55,11 +55,11 @@ OSX: use 'FD_FULLSYNC' with LevelDB, which will (hopefully!) prevent the database corruption issues many people have experienced on OSX. -Linux: clicking on BGL: links was broken if you were using +Linux: clicking on bitcoin: links was broken if you were using a Gnome-based desktop. Fix a hang-at-shutdown bug that only affects users that compile -their own version of BGL against Boost versions 1.50-1.52. +their own version of Bitcoin against Boost versions 1.50-1.52. Other changes ------------- diff --git a/doc/release-notes/release-notes-0.8.5.md b/doc/release-notes/release-notes-0.8.5.md index a9b4026507..5e42b5bee6 100644 --- a/doc/release-notes/release-notes-0.8.5.md +++ b/doc/release-notes/release-notes-0.8.5.md @@ -1,11 +1,11 @@ -BGL-Qt version 0.8.5 is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.5/ +Bitcoin-Qt version 0.8.5 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.5/ This is a maintenance release to fix a critical bug; we urge all users to upgrade. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade @@ -14,7 +14,7 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.8.5 your blockchain files will be re-indexed, which will take diff --git a/doc/release-notes/release-notes-0.8.6.md b/doc/release-notes/release-notes-0.8.6.md index 33fcf0ecd2..019a9373ec 100644 --- a/doc/release-notes/release-notes-0.8.6.md +++ b/doc/release-notes/release-notes-0.8.6.md @@ -1,12 +1,12 @@ -BGL-Qt version 0.8.6 final is now available from: +Bitcoin-Qt version 0.8.6 final is now available from: - http://sourceforge.net/projects/BGL/files/BGL/BGL-0.8.6/ + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.6/ This is a maintenance release to fix a critical bug; we urge all users to upgrade. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- @@ -16,7 +16,7 @@ If you already downloaded 0.8.6rc1 you do not need to re-download. This release If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over -/Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.8.6 your blockchain files will be re-indexed, which will take @@ -47,7 +47,7 @@ your machine. - Additional debug.log logging for diagnosis of network problems, log timestamps by default -- Fix BGL-Qt startup crash when clicking dock icon on OSX +- Fix Bitcoin-Qt startup crash when clicking dock icon on OSX - Fix memory leaks in CKey::SetCompactSignature() and Key::SignCompact() @@ -63,4 +63,4 @@ Warning Hence it is recommended to use a 64-bit executable if possible. A 64-bit executable for Windows is planned for 0.9. -Note: Gavin Andresen's GPG signing key for SHA256SUMS.asc has been changed from key id 1FC730C1 to sub key 7BF6E212 (see https://github.com/BGL/BGL.org/pull/279). +Note: Gavin Andresen's GPG signing key for SHA256SUMS.asc has been changed from key id 1FC730C1 to sub key 7BF6E212 (see https://github.com/bitcoin/bitcoin.org/pull/279). diff --git a/doc/release-notes/release-notes-0.9.0.md b/doc/release-notes/release-notes-0.9.0.md index a30af2958d..1c4f7293d7 100644 --- a/doc/release-notes/release-notes-0.9.0.md +++ b/doc/release-notes/release-notes-0.9.0.md @@ -1,27 +1,27 @@ -BGL Core version 0.9.0 is now available from: +Bitcoin Core version 0.9.0 is now available from: - https://BGL.org/bin/0.9.0/ + https://bitcoin.org/bin/0.9.0/ This is a new major version release, bringing both new features and bug fixes. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), uninstall all -earlier versions of BGL, then run the installer (on Windows) or just copy -over /Applications/BGL-Qt (on Mac) or BGLd/BGL-qt (on Linux). +earlier versions of Bitcoin, then run the installer (on Windows) or just copy +over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.0 your blockchain files will be re-indexed, which will take anywhere from 30 minutes to several hours, depending on the speed of your machine. -On Windows, do not forget to uninstall all earlier versions of the BGL +On Windows, do not forget to uninstall all earlier versions of the Bitcoin client first, especially if you are switching to the 64-bit version. Windows 64-bit installer @@ -59,11 +59,11 @@ Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan the blockchain for missing spent coins, which will take a long time (tens of minutes on a typical machine). -Rebranding to BGL Core +Rebranding to Bitcoin Core --------------------------- -To reduce confusion between BGL-the-network and BGL-the-software we -have renamed the reference client to BGL Core. +To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we +have renamed the reference client to Bitcoin Core. OP_RETURN and data in the block chain @@ -74,7 +74,7 @@ blockchain. This change is not an endorsement of storing data in the blockchain. The OP_RETURN change creates a provably-prunable output, to avoid data storage schemes -- some of which were already deployed -- that were storing arbitrary data such as images as forever-unspendable -TX outputs, bloating BGL's UTXO database. +TX outputs, bloating bitcoin's UTXO database. Storing arbitrary data in the blockchain is still a bad idea; it is less costly and far more efficient to store non-currency data elsewhere. @@ -85,20 +85,20 @@ Autotools build system For 0.9.0 we switched to an autotools-based build system instead of individual (q)makefiles. -Using the standard "./autogen.sh; ./configure; make" to build BGL-Qt and -BGLd makes it easier for experienced open source developers to contribute +Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and +bitcoind makes it easier for experienced open source developers to contribute to the project. Be sure to check doc/build-*.md for your platform before building from source. -BGL-cli +Bitcoin-cli ------------- -Another change in the 0.9 release is moving away from the BGLd executable +Another change in the 0.9 release is moving away from the bitcoind executable functioning both as a server and as a RPC client. The RPC client functionality -("tell the running BGL daemon to do THIS") was split into a separate -executable, 'BGL-cli'. The RPC client code will eventually be removed from -BGLd, but will be kept for backwards compatibility for a release or two. +("tell the running bitcoin daemon to do THIS") was split into a separate +executable, 'bitcoin-cli'. The RPC client code will eventually be removed from +bitcoind, but will be kept for backwards compatibility for a release or two. `walletpassphrase` RPC ----------------------- @@ -197,13 +197,13 @@ Command-line options: - New option: -nospendzeroconfchange to never spend unconfirmed change outputs - New option: -zapwallettxes to rebuild the wallet's transaction information - Rename option '-tor' to '-onion' to better reflect what it does -- Add '-disablewallet' mode to let BGLd run entirely without wallet (when +- Add '-disablewallet' mode to let bitcoind run entirely without wallet (when built with wallet) - Update default '-rpcsslciphers' to include TLSv1.2 - make '-logtimestamps' default on and rework help-message - RPC client option: '-rpcwait', to wait for server start - Remove '-logtodebugger' -- Allow `-noserver` with BGLd +- Allow `-noserver` with bitcoind Block-chain handling and storage: @@ -254,7 +254,7 @@ Protocol and network: - Improve logging of failed connections - Bump protocol version to 70002 - Add some additional logging to give extra network insight -- Added new DNS seed from BGLstats.com +- Added new DNS seed from bitcoinstats.com Validation: @@ -295,18 +295,18 @@ GUI: - Add Coin Control Features - Improve receive coins workflow: make the 'Receive' tab into a form to request payments, and move historical address list functionality to File menu. -- Rebrand to `BGL Core` +- Rebrand to `Bitcoin Core` - Move initialization/shutdown to a thread. This prevents "Not responding" messages during startup. Also show a window during shutdown. - Don't regenerate autostart link on every client startup -- Show and store message of normal BGL:URI +- Show and store message of normal bitcoin:URI - Fix richtext detection hang issue on very old Qt versions - OS X: Make use of the 10.8+ user notification center to display Growl-like notifications - OS X: Added NSHighResolutionCapable flag to Info.plist for better font rendering on Retina displays. -- OS X: Fix BGL-qt startup crash when clicking dock icon -- Linux: Fix Gnome BGL: URI handler +- OS X: Fix bitcoin-qt startup crash when clicking dock icon +- Linux: Fix Gnome bitcoin: URI handler Miscellaneous: @@ -314,7 +314,7 @@ Miscellaneous: - Add '-regtest' mode, similar to testnet but private with instant block generation with 'setgenerate' RPC. - Add 'linearize.py' script to contrib, for creating bootstrap.dat -- Add separate BGL-cli client +- Add separate bitcoin-cli client Credits -------- diff --git a/doc/release-notes/release-notes-0.9.1.md b/doc/release-notes/release-notes-0.9.1.md index c78c15416f..eb6ea8ae62 100644 --- a/doc/release-notes/release-notes-0.9.1.md +++ b/doc/release-notes/release-notes-0.9.1.md @@ -1,27 +1,27 @@ -BGL Core version 0.9.1 is now available from: +Bitcoin Core version 0.9.1 is now available from: - https://BGL.org/bin/0.9.1/ + https://bitcoin.org/bin/0.9.1/ This is a security update. It is recommended to upgrade to this release as soon as possible. It is especially important to upgrade if you currently have version 0.9.0 installed and are using the graphical interface OR you are using -BGLd from any pre-0.9.1 version, and have enabled SSL for RPC and +bitcoind from any pre-0.9.1 version, and have enabled SSL for RPC and have configured allowip to allow rpc connections from potentially hostile hosts. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.1 your blockchain files will be re-indexed, which will take anywhere from @@ -33,7 +33,7 @@ If you are upgrading from version 0.7.2 or earlier, the first time you run No code changes were made between 0.9.0 and 0.9.1. Only the dependencies were changed. - Upgrade OpenSSL to 1.0.1g. This release fixes the following vulnerabilities which can - affect the BGL Core software: + affect the Bitcoin Core software: - CVE-2014-0160 ("heartbleed") A missing bounds check in the handling of the TLS heartbeat extension can diff --git a/doc/release-notes/release-notes-0.9.2.1.md b/doc/release-notes/release-notes-0.9.2.1.md index bf35e87442..2089147493 100644 --- a/doc/release-notes/release-notes-0.9.2.1.md +++ b/doc/release-notes/release-notes-0.9.2.1.md @@ -1,6 +1,6 @@ -BGL Core version 0.9.2.1 is now available from: +Bitcoin Core version 0.9.2.1 is now available from: - https://BGL.org/bin/0.9.2.1/ + https://bitcoin.org/bin/0.9.2.1/ This is a new minor version release, bringing mostly bug fixes and some minor improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). @@ -8,15 +8,15 @@ Upgrading to this release is recommended. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.2.1 your blockchain files will be re-indexed, which will take anywhere from @@ -130,7 +130,7 @@ GUI: - Catch Windows shutdown events while client is running - Optionally add third party links to transaction context menu - Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start BGL on system login" +- Fix "Start bitcoin on system login" Miscellaneous: diff --git a/doc/release-notes/release-notes-0.9.2.md b/doc/release-notes/release-notes-0.9.2.md index 83e66166be..7a89e85a66 100644 --- a/doc/release-notes/release-notes-0.9.2.md +++ b/doc/release-notes/release-notes-0.9.2.md @@ -1,6 +1,6 @@ -BGL Core version 0.9.2 is now available from: +Bitcoin Core version 0.9.2 is now available from: - https://BGL.org/bin/0.9.2/ + https://bitcoin.org/bin/0.9.2/ This is a new minor version release, bringing mostly bug fixes and some minor improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). @@ -8,15 +8,15 @@ Upgrading to this release is recommended. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade -------------- If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.2 your blockchain files will be re-indexed, which will take anywhere from @@ -130,7 +130,7 @@ GUI: - Catch Windows shutdown events while client is running - Optionally add third party links to transaction context menu - Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start BGL on system login" +- Fix "Start bitcoin on system login" Miscellaneous: diff --git a/doc/release-notes/release-notes-0.9.3.md b/doc/release-notes/release-notes-0.9.3.md index ac6b333013..bb03fb8084 100644 --- a/doc/release-notes/release-notes-0.9.3.md +++ b/doc/release-notes/release-notes-0.9.3.md @@ -1,13 +1,13 @@ -BGL Core version 0.9.3 is now available from: +Bitcoin Core version 0.9.3 is now available from: - https://BGL.org/bin/0.9.3/ + https://bitcoin.org/bin/0.9.3/ This is a new minor version release, bringing only bug fixes and updated translations. Upgrading to this release is recommended. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues Upgrading and downgrading ========================== @@ -17,8 +17,8 @@ How to Upgrade If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.3 your blockchain files will be re-indexed, which will take anywhere from @@ -70,7 +70,7 @@ GUI: Miscellaneous: - key.cpp: fail with a friendlier message on missing ssl EC support - Remove bignum dependency for scripts -- Upgrade OpenSSL to 1.0.1i (see https://www.openssl.org/news/secadv_20140806.txt - just to be sure, no critical issues for BGL Core) +- Upgrade OpenSSL to 1.0.1i (see https://www.openssl.org/news/secadv_20140806.txt - just to be sure, no critical issues for Bitcoin Core) - Upgrade miniupnpc to 1.9.20140701 - Fix boost detection in build system on some platforms @@ -98,4 +98,4 @@ Thanks to everyone who contributed to this release: - Wladimir J. van der Laan - Zak Wilcox -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.4.md b/doc/release-notes/release-notes-0.9.4.md index 3450fe0db1..fd16b6b7a1 100644 --- a/doc/release-notes/release-notes-0.9.4.md +++ b/doc/release-notes/release-notes-0.9.4.md @@ -1,39 +1,39 @@ -BGL Core version 0.9.4 is now available from: +Bitcoin Core version 0.9.4 is now available from: - https://BGL.org/bin/0.9.4/ + https://bitcoin.org/bin/0.9.4/ This is a new minor version release, bringing only bug fixes and updated translations. Upgrading to this release is recommended. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade =============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). OpenSSL Warning ================ OpenSSL 1.0.0p / 1.0.1k was recently released and is being pushed out by various operating system maintainers. Review by Gregory Maxwell determined that -this update is incompatible with the BGL system and could lead to consensus +this update is incompatible with the Bitcoin system and could lead to consensus forks. -BGL Core released binaries from https://BGL.org are unaffected, +Bitcoin Core released binaries from https://bitcoin.org are unaffected, as are any built with the gitian deterministic build system. However, if you are running either -- The Ubuntu PPA from https://launchpad.net/~BGL/+archive/ubuntu/BGL -- A third-party or self-compiled BGL Core +- The Ubuntu PPA from https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin +- A third-party or self-compiled Bitcoin Core -upgrade to BGL Core 0.9.4, which includes a workaround, **before** updating +upgrade to Bitcoin Core 0.9.4, which includes a workaround, **before** updating OpenSSL. The incompatibility is due to the OpenSSL update changing the @@ -92,4 +92,4 @@ Thanks to who contributed to this release, at least: - Sergio Demian Lerner - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.5.md b/doc/release-notes/release-notes-0.9.5.md index 8584ef4276..ad8ac11c7d 100644 --- a/doc/release-notes/release-notes-0.9.5.md +++ b/doc/release-notes/release-notes-0.9.5.md @@ -1,6 +1,6 @@ -BGL Core version 0.9.5 is now available from: +Bitcoin Core version 0.9.5 is now available from: - https://BGL.org/bin/0.9.5/ + https://bitcoin.org/bin/0.9.5/ This is a new minor version release, with the goal of backporting BIP66. There are also a few bug fixes and updated translations. Upgrading to this release is @@ -8,15 +8,15 @@ recommended. Please report bugs using the issue tracker at github: - https://github.com/BGL/BGL/issues + https://github.com/BitgesellOfficial/bitgesell/issues How to Upgrade =============== If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/BGL-Qt (on Mac) or -BGLd/BGL-qt (on Linux). +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). Notable changes ================ @@ -24,10 +24,10 @@ Notable changes Mining and relay policy enhancements ------------------------------------ -BGL Core's block templates are now for version 3 blocks only, and any mining +Bitcoin Core's block templates are now for version 3 blocks only, and any mining software relying on its `getblocktemplate` must be updated in parallel to use libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade BGL +If you are solo mining, this will affect you the moment you upgrade Bitcoin Core, which must be done prior to BIP66 achieving its 951/1001 status. If you are mining with the stratum mining protocol: this does not affect you. If you are mining with the getblocktemplate protocol to a pool: this will affect @@ -57,4 +57,4 @@ Thanks to who contributed to this release, at least: - Pieter Wuille - Wladimir J. van der Laan -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/BGL/). +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-process.md b/doc/release-process.md index 5b7b64fea0..4726f6d78e 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -251,10 +251,10 @@ cat "$VERSION"/*/all.SHA256SUMS.asc > SHA256SUMS.asc - Update other repositories and websites for new version - - BGLcore.org blog post + - bitgesell.ca blog post - - BGLcore.org maintained versions update: - [table](https://github.com/BGL-core/BGLcore.org/commits/master/_includes/posts/maintenance-table.md) + - bitgesell.ca maintained versions update: + [table](https://github.com/BGL-core/bitgesell.ca/commits/master/_includes/posts/maintenance-table.md) - Delete post-EOL [release branches](https://github.com/bitcoin/bitcoin/branches/all) and create a tag `v${branch_name}-final`. @@ -284,13 +284,13 @@ cat "$VERSION"/*/all.SHA256SUMS.asc > SHA256SUMS.asc - Archive the release notes for the new version to `doc/release-notes/` (branch `master` and branch of the release) - - Create a [new GitHub release](https://github.com/BGL/BGL/releases/new) with a link to the archived release notes + - Create a [new GitHub release](https://github.com/BitgesellOfficial/bitgesell/releases/new) with a link to the archived release notes - Announce the release: - BGL-dev and BGL-core-dev mailing list - - BGL Core announcements list https://BGLcore.org/en/list/announcements/join/ + - BGL Core announcements list https://bitgesell.ca/en/list/announcements/join/ - BGL Core Twitter https://twitter.com/BGLcoreorg diff --git a/share/pixmaps/BGL.ico b/share/pixmaps/BGL.ico index a3a9321cba..9ac4542b7c 100644 Binary files a/share/pixmaps/BGL.ico and b/share/pixmaps/BGL.ico differ diff --git a/share/pixmaps/BGL128.png b/share/pixmaps/BGL128.png index 6bac483b42..253c7d1b05 100644 Binary files a/share/pixmaps/BGL128.png and b/share/pixmaps/BGL128.png differ diff --git a/share/pixmaps/BGL128.xpm b/share/pixmaps/BGL128.xpm index 7292020e79..45ad0a9f3e 100644 --- a/share/pixmaps/BGL128.xpm +++ b/share/pixmaps/BGL128.xpm @@ -1,238 +1,235 @@ /* XPM */ static char *result[] = { /* columns rows colors chars-per-pixel */ -"128 128 104 2 ", -" c #008F8F", -". c #009393", -"X c #049D9D", -"o c #0A9E9E", -"O c #139F9F", -"+ c #07A0A0", -"@ c #0CA2A2", -"# c #12A5A5", -"$ c #1BA5A5", -"% c #15A9A9", -"& c #1BABAB", -"* c #22A7A7", -"= c #23ABAB", -"- c #2CABAB", -"; c #32ADAD", -": c #24B2B2", -"> c #2BB4B4", -", c #2EB9B9", -"< c #33B3B3", -"1 c #3BB2B2", -"2 c #34BBBB", -"3 c #3BBDBD", -"4 c #43B5B5", -"5 c #4AB7B7", -"6 c #43BEBE", -"7 c #4DB9B9", -"8 c #55BCBC", -"9 c #5ABEBE", -"0 c #37C0C0", -"q c #3CC2C2", -"w c #43C4C4", -"e c #4BC5C5", -"r c #46C9C9", -"t c #4CCBCB", -"y c #50C7C7", -"u c #5EC0C0", -"i c #53CDCD", -"p c #5BCDCD", -"a c #54D2D2", -"s c #5BD4D4", -"d c #5DD8D8", -"f c #64C2C2", -"g c #6CC5C5", -"h c #62CECE", -"j c #71C7C7", -"k c #74C8C8", -"l c #7DCCCC", -"z c #63D5D5", -"x c #6BD6D6", -"c c #66DEDE", -"v c #69DFDF", -"b c #72D6D6", -"n c #73DCDC", -"m c #7BDDDD", -"M c #67E0E0", -"N c #6CE1E1", -"B c #73E3E3", -"V c #7BE6E6", -"C c #76E9E9", -"Z c #7DE9E9", -"A c #84CECE", -"S c #88CFCF", -"D c #8CD2D2", -"F c #82DEDE", -"G c #93D4D4", -"H c #9AD7D7", -"J c #9DD8D8", -"K c #A3DADA", -"L c #ABDEDE", -"P c #B1DFDF", -"I c #81E6E6", -"U c #8CE6E6", -"Y c #84E9E9", -"T c #8BEBEB", -"R c #90E7E7", -"E c #93EEEE", -"W c #99EDED", -"Q c #93F1F1", -"! c #9DF1F1", -"~ c #A3EFEF", -"^ c #B4E1E1", -"/ c #BDE5E5", -"( c #A3F3F3", -") c #ABF5F5", -"_ c #A7F8F8", -"` c #ABF9F9", -"' c #B2F7F7", -"] c #B5F9F9", -"[ c #BBFBFB", -"{ c #C2E6E6", -"} c #C6E9E9", -"| c #CBEAEA", -" . c #D4EEEE", -".. c #D9EFEF", -"X. c #C3FEFE", -"o. c #C9FFFF", -"O. c #DCF1F1", -"+. c #D1FFFF", -"@. c #E3F4F4", -"#. c #EAF6F6", -"$. c #EEF8F8", -"%. c #F3FAFA", -"&. c #FDFDFD", -"*. c None", +"128 128 101 2 ", +" c #5F24E2", +". c #6329E3", +"X c #632AE3", +"o c #642BE3", +"O c #652BE3", +"+ c #652CE3", +"@ c #652DE3", +"# c #672DE3", +"$ c #672EE3", +"% c #662DE4", +"& c #672DE4", +"* c #672EE4", +"= c #672FE4", +"- c #682FE4", +"; c #6830E4", +": c #6930E4", +"> c #6931E4", +", c #6A32E4", +"< c #6A33E4", +"1 c #6B34E4", +"2 c #6C34E4", +"3 c #6C35E4", +"4 c #6C35E5", +"5 c #6D36E5", +"6 c #6D37E5", +"7 c #6E37E5", +"8 c #6E38E5", +"9 c #6F39E5", +"0 c #6F3AE5", +"q c #703AE5", +"w c #703BE5", +"e c #713BE5", +"r c #713CE5", +"t c #723EE5", +"y c #7541E6", +"u c #7542E6", +"i c #7642E6", +"p c #7744E6", +"a c #7947E7", +"s c #7A49E7", +"d c #7B4AE7", +"f c #8151E8", +"g c #8253E8", +"h c #8456E9", +"j c #8557E9", +"k c #8558E9", +"l c #8659E9", +"z c #8759E9", +"x c #875AE9", +"c c #8C61EA", +"v c #8D63EB", +"b c #8E63EB", +"n c #8E64EB", +"m c #8F65EB", +"M c #9066EB", +"N c #9168EB", +"B c #946CEC", +"V c #946DEC", +"C c #956DEC", +"Z c #956EEC", +"A c #966FEC", +"S c #9770EC", +"D c #9771EC", +"F c #9872EC", +"G c #9973ED", +"H c #9A73ED", +"J c #9A74ED", +"K c #AD8FF0", +"L c #B69BF2", +"P c #B79CF2", +"I c #B89EF2", +"U c #B99FF2", +"Y c #BDA5F3", +"T c #C2ABF4", +"R c #C2ACF4", +"E c #C3ACF4", +"W c #C3ADF4", +"Q c #C4ADF4", +"! c #C4AEF4", +"~ c #D8CAF8", +"^ c #D9CAF8", +"/ c #DACCF8", +"( c #DBCDF9", +") c #DCCEF9", +"_ c #DCCFF9", +"` c #DFD3F9", +"' c #E1D6F9", +"] c #F6F2FD", +"[ c #FBF9FF", +"{ c #FBFAFF", +"} c #FBFBFF", +"| c #FCFAFF", +" . c #FCFBFF", +".. c #FDFBFF", +"X. c #FDFCFF", +"o. c #FDFDFF", +"O. c #FEFDFF", +"+. c #FDFEFF", +"@. c #FEFEFF", +"#. c #FFFEFF", +"$. c white", /* pixels */ -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X X X X X X X X + X X + X X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X X X + X X + + X X X X X X X + X X + + X X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X + X X X + + + X + + @ @ @ @ # @ + + X + + X + + + X X X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X + X + X X + % : 2 w d c M M N C C C N N N N c c t q : % @ + X X + X X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X + + X @ & q d N N C N N N C C B v a a M N N N N M N N B N B N N t , % + X + X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + X + X % q d B C N N N N N B B v s w > # X X t B N N N N N N N N M N N N N N N t & @ X + X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X + X + # q c N C N N M N N N N d r > % X . . . X . : C N N N N N N N N N v N M N N N N C N a & @ X X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X + X + > d N C N N M N N N N B r # X X . X = u K l . # N N N N N N N N N N N N N N N N M N M N B N 0 @ + X + X + X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X + @ 0 N C C C N c N B N N N N N # . X * 8 G | %.&.&.O.X X d B N B B B v N N N N B N N N N N N v N v v B C t % + X X + X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + X X @ 0 C Z N d t 2 = @ # s B N N B B & . f %.&.&.&.&.&.&.%.- . w Z B B v B B N B N B N B N N N N N N v N N v M M C t % X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X + + 0 B c t , % + X . . X . 2 C N B B C 2 . 7 &.&.&.&.&.&.&.&.9 > V B B B B B B B B N B v B B n N B v N N v N M N M N B t @ + X + + X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + X : B t # X . . . . # 1 l 8 . = B B B B C a . # $.&.&.&.&.&.&.&.G . % B B B B B B B B B B B B B N B v B B B N N N v N N N N N B 0 + X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X + X @ s C c X X X $ 7 A / #.&.&./ . @ v B B B V c X . { &.&.&.&.&.&.&.| X X c V B V B B B B B B B B B B B B B v B v B N N N N N v N v N N & X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + X 2 C N N c + . A $.&.&.&.&.&.&.O.@ X a Z B B V V & . S &.&.&.&.&.&.&.%.* . t Z B B B V V B V B B B B B B B B B B B N B N N N N N v N v M B t X X + X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + + @ a B M M N B : . l &.&.&.&.&.&.&.&.; . w Y B V B Z 2 . 7 &.&.&.&.&.&.&.&.8 . 2 Y B V V B V n V B B B V B B B B B B n B v N B B v N N v N N c N c % + + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X X & N N c N N N C 2 . 1 &.&.&.&.&.&.&.&.u . > Z B B V Y t . & %.&.&.&.&.&.&.&.S . % V V V V V V V B V V V B V B V B B B B B B B N B B N B N N N M N M C : X X X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X + 2 B N M N M N N B a . # #.&.&.&.&.&.&.&.H . # V V V V I c X X { &.&.&.&.&.&.&./ . + v Y B C Z V V V V V B V B B V B V B B B B B B B B N B N N N N N c M N t X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X r C v M N N N N N B c + X ^ &.&.&.&.&.&.&.| X X x V V V Z V # . G &.&.&.&.&.&.&.$.$ . a T V V Z V V V V V V V V B V n V B V V B B B B B B v B N N N N N N N N d @ + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + d N M N M N N N N B B V & l &.&.&.&.&.&.&.$.$ . i Y V V Z Y 2 9 &.&.&.&.&.&.&.&.5 . 3 T I I Z Z Z Z Z V V Z V V V V B V B B V B B B B B B B B N N N N N N v N N @ X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + c N N N N N N N N B N B Z 2 . 5 &.&.&.&.&.&.&.&.5 . 0 T Z V Z T y . = &.&.&.&.&.&.%.&.l . = T I I I I T Y Y Y Y Y I Z V V V V V V B V B B V B B n N B B N N N N N v N N % X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X @ c N N N v N N B v B B B B Z y . # %.&.&.&.&.&.&.&.k . : Y Z Z Z Y c X X | &.&.&.&.&.&.&.P . o V Q Y V n c z z z z x B V Z Y T Z Z V B V B B B B B B B B B B v v N v N N N N @ + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + c N v M v N N N N B B B B B V c X X { &.&.&.&.&.&.&.L . @ V Y I Y Y I # H &.&.&.&.&.&.&.@.# X : > & @ X X . X X X X @ # : 2 e z Z Y I V B V B V B V B B v B B B v B v N M N N # + X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X @ c N M N N N N N B N n B B B B V V % . S &.&.&.&.&.&.&...X X z T Y Y Y E 2 . f &.&.&.&.&.&.&.&.; . . . . . X X O * $ o X . . . . X # w v T V V B B B B B B B B v N B N N N M N M N @ + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + c N M N N v N B N B B B B B V B B Y 2 . 8 &.&.&.&.&.&.&.&.- . t Q T Q T Y 3 . - &.&.&.&.&.&.&.&.^ 4 9 A J ^ | ..@.%.$.@...{ K A 8 - X . . o 0 V Y V V V B V B B B B B N B N N N N N N N + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.+ + X + t N v N v N N N B N B B B B B B V V Y t . * %.&.&.&.&.&.&.&.9 2 T x y > # X . O $.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.| l * . . # z T C B V B V B n B B B N N B v v v N N d + + X X *.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.X X + 0 B N N v v B v N B B B B B B V B V V Z c X X } &.&.&.&.&.&.&.D . @ # X . . . X ; H &.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.$.A o . X i T C B V B V V B B B B B v B B v N v N t X X X *.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.X + X & C M N v N N N B B n B B B B B V V B V I V # . H &.&.&.&.&.&.&.| . . . X - f J O.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.} - . . e T Z B V V B B B B B N B v N N v N c N , X X + *.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.X X X @ C M N N v v B B v B B B B B V B V V Z Z Y E 2 . 9 &.&.&.&.&.&.&.&.J f G ..%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.7 . . t T V V B B V B B B B B N B N N N N c B % X X X *.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.+ X X + d N c N v N N B B B B B B B V V V Y Y T C v s : . = &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.8 . X s T V B V B V B B B B N B N N N N M N c + + X + *.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.X X X 0 B c N N N N v B N B B B Z Z Y Z B z e 2 % X . . . - %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.1 . o n Y V V V B V V B B n N B N N N N M N t X X X *.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.X X X % C v v v N N N N B V Z I Z v s w : @ X . X * 5 l .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.# . : Y Z V B V B B n B B B B N N N N N M N & X X X *.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.X X X c M v N N B B C V B c t 3 & @ . . . . X - 9 G { $.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.K . X a T V V V V V B B B B N B B N N N N M N + X + *.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.+ X + , N M N N N N d w 2 % X . . . # ; g K ..%.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.4 . = Y Z V V V B V B B B B n B N N v v N N 0 + X X *.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.X X X @ C M M N N B 2 X . . X $ 4 A P @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.{ X X c Y V V V V B V B B B N B B N B v N v C @ + X X *.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.X X X r N v c N N B : . # 9 G { %.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%...{ ^ K H H K { @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.; w T V V V V B V B V B B B N v N N v N N a + X X *.*.*.*.*.*.*.", -"*.*.*.*.*.*.X X + # B M N N N N V q . 4 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.| H f 1 $ o X . . . . . X # ; A O.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.k . = T Z Z Z Z V V B B B B B B B N N v N N N % + + X *.*.*.*.*.*.", -"*.*.*.*.*.*.X + X t N v M N N N C i X # #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.%.&.&.&.&.&.&. .K 9 = X . . X o # % & & % @ X . O k %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.L . @ V Y V V Z V V V B B B B B n B N v N v N a + X X *.*.*.*.*.*.", -"*.*.*.*.*.+ X X @ B v N N N N N B v o . / &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.G - o . X $ 2 i x m T ! ! ( ! ! E n e # . . ; | &.&.&.&.&.&.%.&.&.&.%.&.&.&.&.&.&.&...X X n Y I V V V V B B V B B B B B N B v v v N % X + X *.*.*.*.*.", -"*.*.*.*.*.X X X t N v N N v N B B B & . l &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&...X . X % 2 p I W _ ` ` _ ( ! ( ! ( ( ( _ ` W e X O | &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.#.# . z T I I V V V V V B B B B B B N B N N N v a X + X *.*.*.*.*.", -"*.*.*.*.*.X + @ N M v N v B v B B Z 2 . 5 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.#.= . e ! ) ` _ ( ~ ( ! ! ( ! ( ! ! ! ! ! ! ( ] m # . - %.&.%.&.&.&.%.&.&.&.&.&.&.&.&.&.&.%.$ X z T I Z I I V V V B V B B B v B v N N v c B @ X X *.*.*.*.*.", -"*.*.*.*.+ X X 0 C M v N N N B B B Z i . $ %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.u 6 ` ( ! ! ( ! ! ! ( ( ( ! ( ! ( ( ! ( ! ! ` I o D &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.- . z T Y Z I Z V V V V B V B B B B v B N N N N w + X X *.*.*.*.", -"*.*.*.*.X X + C M M N v N N N B B Z c X . { &.&.&.&.&.#.| { | #.&.&.&.&.&.&.&.&.%.&.&.%.&.&.&.&.&.&.&.H . % ! ( ( ! ( ~ ( ( ( ~ ( ( ( ( ( W ( ! ( ! ( ` w - &.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.%.* . z T Y I I Z V V V V V B B B B B B v N N v v B + + X *.*.*.*.", -"*.*.*.X X X & C M N N N v B B B B B V % . G &.$./ l 4 # X X X # 8 { &.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.{ X X U ) ( ( ( ( ( ~ ( ( ( ( ( ~ ( ~ ( ( ( ! ! ) I X X | &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.#.# . c T Y I I Z V V V V V B B B B v N B N v v N N : + X X *.*.*.", -"*.*.*.X + X t N c N N N B v B B B B Y 2 . - 9 $ . . . . X X X . . k &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.$ . x ` ~ ( ( ( ( ( ( ( _ ( ( ( ( ( ( ( ( ( ( ) ~ # K &.&.&.&.&.&.&.&.&.&.&.&.%.&.&.} X X V T Y Y I I V V V V V B V n B B B N B N N v N s + X X *.*.*.", -"*.*.*.X + @ N M N v N N v B B B V B I t . X . . + & w s n Z m s = . . G &.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.5 e ] ( ( ( ) ( ) ~ ( ( ( ~ ) ( ( ( ( ( ( ( ~ ) 2 k &.&.&.&.%.&.&.&.&.&.&.&.&.&.&.G % T T Y Y Y I I I V V V V B V B B B B N N v N M C @ X + *.*.*.", -"*.*.+ X X : N N N v N N B B B B B B Z n & # 2 i B Y T E T T T ! Q 2 . # #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.A > ) ( ) ( ( ) ( ) ) ) ) ) ( ) ( ) ) ( ~ ( ( ' 3 g &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.7 3 Q Y Y Y Y I I Z V V V V V B B B B n B N v N M N : X X X *.*.", -"*.*.X X X t N v v N v B B B B B B V V Z I Z T T T Y Y Y Y T U T W I @ . K &.&.&.&.&.&.&.&.&.%.&.&.&.&.&.^ . @ W ) ~ ) ) ) ) ) ) ) ) ) ) ) ) ( ~ ) ( ( ( ) = S &.&.%.&.&.&.&.%.&.&.&.&.&.&.@.o . z E T Y Y I I I Z Z V V V B B B B B N B N N N N M a + + X *.*.", -"*.*.X X @ N c N N v B N N n B B B V B V Z I Z Z Y I Y T Y T T T T W 2 g &.%.&.&.&.%.&.&.&.&.&.&.&.&.&.@.@ . I ] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ( ) ] V . . } &.&.&.&.&.&.&.&.&.&.&.&.&.&.A . @ T T Y T Y Y Y I I V I V V V B B B B B N N N N N M B + X X *.*.", -"*.*.+ X % N N N N N N B N B B V B V B V V I Z I Y Y Y Y U T T T T ! t . ; &.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.; h [ ) ) ) ) ) ) ' ) ' ) ) ) ) ) ) ) ) ) ' > . 1 &.&.&.&.&.&.&.&.&.&.&.&.%.&.#.# . w Q T Y Y Y Y Y I I I V V V V V V V B B B N N N N v C % + X *.*.", -"*.+ X X 2 N M M N N N B B B B B B V V V V I I I Y Y Y U Y T T E T ! n . X ..&.&.&.&.&.&.&.&.&.&.%.&.&.%.&.f 1 [ ) ) ) ) ' ' ) ' ) ' ) ' ) ) ) ) ) X.h . . / &.&.&.&.&.%.&.&.%.&.&.&.&.%.4 . o I E T T T U Y Y I I I V V V V B B B B B B N N N v N N 2 X X X *.", -"*.X X X a N N M N N B v B B B V B V V V Z Z I I Y Y Y T T T T T T Q T # . K &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.J . $ ) ' ' ) ' ' ' ' ' ' ' ' ' ) ) ' ) X.m X . f &.&.&.%.&.&.&.&.&.&.&.&.&.&.8 . . z ! T T T T Y Y Y Y I I I V V V B V B B B n N B N N N v s X X + *.", -"*.X X + N c M N N n N B B B B B V V V V V I I Y Y Y Y Y T T T T E E ! 2 . f &.&.&.&.&.%.&.&.&.%.&.&.&.&.&.| X X E [ ' ' ' ' ' ' ' ' ' ' ' ' ' ] [ b X . - $.&.&.&.&.&.&.&.&.&.&.&.&.&.g . X p ` ! W E T T Y T Y Y Y I V V V V V B B B B B B N v N v v N + X X *.", -"*.X + % N M M N N B B B B B B V V V V V I I I Y Y U Y T T T T T T E ( y . ; &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.= . b X.' ' ' ' ' ' ' ' ' ' ' [ o.W 3 . . - @.&.&.&.&.&.&.&.&.&.&.&.&.&.G . X @ e i s b Y Q W T Y Y I Y I I V V V V V B B B n B v B N N M N # X X *.", -"*.X + & C M M N N N v B B B V B V V V V Z I I Y Y Y T T T T E E E Q ! m X X ..&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.8 e [ ' ' ] ] ] ' ] ] [ o.X.W e o . . 7 #.&.&.&.&.&.&.&.%.&.&.&.&.&.&.8 . . . . . X @ 3 c T Q Y Y I I Z I V V V V B B B B B B v N M N C : X + *.", -"X X X , N v N v N N B B B B B V V V V V I I I Y T Y T T T T E T E E Q T # . L &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.A - [ ] ' ] ] ] X.o.o.) b < X . . * J &.&.&.&.&.&.&.&.&.&.%.&.&.%.&.&.O.G j u 9 4 - X . . . = c T T Y Y I I V V V V B V B B B N B N N M N 2 X X X ", -"X + X t N c N N N B N n B B B V B V Z Z I I I Y Y Y Y U T T T E T E W ( > . g &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.^ . o ~ X.X.o.o.X.) F 6 # . . . - S %.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%...H 4 X . . 3 Y T I Z V V V V V B B B B N B v N N M N t X + X ", -"X X X s N c N v N N B B B B V B V V V V Z I I Y Y T T T T E T T E E E _ t . ; &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.# . U o.~ F p < @ . . @ 8 P %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&./ 1 . . = Z T I Z Z V V V B V B B n B v N v N M s X X X ", -"X + + M M N N N N B N B n B B V V V V Z Z Y Y Y U Y Y T U T E E E W Q ! n . O @.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.; . > - X . . # 5 H @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.S X . # V Y I V V V V V B B B B B B N N v N N + X + ", -"+ + X N M M N N N B B B B V B V V V V I I Y Y Y T Y T T T E E T E E E ! T @ . P &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.g . . X # 4 k L @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.^ o . % Y Y V Z V V B V B B N B v N v N v N + X X ", -"X + # N M M N N N v B B B B V B V V V I I I Y Y Y T Y T T T T E E E W Q ! - . l &.&.&.&.&.&.&.&.&.&.&.&.&.&.&...7 7 S / #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.P X . > T Z V V V B B B B B B v N N N c N @ + X ", -"X X # N M M N N N B B B B B B V V V V I I I I Y Y T T T T T E E E E W Q _ w 4 &.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.G X . y T V V V V B B B B N B N v N v C # + + ", -"X + # N M M N N v B B B B B V B V V V Z I Y Y U U Y Y T E T T E Q W W Q ( x . $ %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.8 . @ V I V V B V B B B B N N N N v N # + + ", -"X + @ C N M N N N B B B B B V V V V V I I I Y Y Y T T T T E E E E E Q W ! Y X X { &.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.# . w Y V V B B B B n B v N N N M N % X X ", -"X X % N M N N N B N v B B V B V V V V I I I Y Y T Y U T T T T E E E W Q ! ! % . G &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.%.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.l . @ V V V V V B B B B B N N M M C @ X + ", -"X + # C c v v N N B B B B V V B V V V Z I I Y Y T Y T T U E E E E Q W Q W _ 3 . 9 &.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.} { K K H K / ..%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.%.&.&.&.&.&.&.&.@.o . i Y V B B B B B N B v v N v N @ + + ", -"X + # N v N N N N N B B B B B V V V V I I Y Y Y Y T Y T T T T T E E W W W _ p . - &.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&...L S f 4 - @ X . . . . . X - u { &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.7 . 2 Y V V B V B B B N B v N v B % X X ", -"+ X @ C N N N N N B N B B B B V V V V I I I Y Y Y T U T T E E E E E W Q W ( V . o ..&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.} G 8 - X . . . . X # & & = $ # X . . X 5 | &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.G . # V Z B B V B n B v N B v v N % X + ", -"X X % N c c N N N N n B B V B V V V Z Z I I Y Y Y Y T T T T T E E E W Q Q ! W @ . K &.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&. .H u - X . X # < 5 h n R W ) ' ) ) ) ( R h = . . X D &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.| X X c Z V B B B B B B N v v v C @ X X ", -"X X @ N v N N N N B B B B V B V V V V V I I Y Y U Y T T T T E E E E W W Q ! ( > . k &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.f X . . & 6 l R ' X.o.o.o.X.[ ' ' ' ' ) ) ' ] ) n & . . j &.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.%.& . i I V V B B B B v N N N N N # + + ", -"+ X + N v v c N B N B N B B B V V V V I Z Z Y Y Y T T T T E T E E E E Q W W _ e 4 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.$ . # 6 x W [ o.+.o.[ [ ' [ ' ' ' ' ' ) ) ) ) ) ( ) ] ! 6 . . D &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.4 . q Y B B V B B N B N N c c N + + X ", -"X + + M N c N N N N B n B B B V V V V I I Y Y Y Y Y Y T T T E T E E W Q Q ! _ x . # %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.9 . 6 +.o.o.X.[ ] ] ] ] ] ' ' ' ' ) ) ) ) ) ) ( ( ( ( ) ] 3 . o O.&.&.&.&.&.%.&.&.%.&.&.&.&.&.&.&.&.&.k . > Y B B B B B N N N N N M M X X X ", -"X X + d N v v N N N B N B n V B V V V V I I I Y Y U Y T T T T E E E E E W Q ( U X X } &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.H . = ' [ ' ] ] ] ] ] ] ' ' ' ' ' ' ) ) ) ) ) ( ( ( ( ! _ ! # . l &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.G . % V V B B B N B N N v M M d + X X ", -"X X X r N M N N N B B B B B B V V V V Z V I I Y Y Y T Y T T E T T E W Q W W ! ! & . G &.&.&.&.&.&.%.&.&.%.&.&.&.&.&.| X X W [ [ ] ] ] ' ' ' ' ' ' ) ' ) ) ) ) ) ( ) ~ ( ( ! ! ` e - &.&.&.&.&.&.&.&.%.&.%.&.&.&.&.%.&.&.^ . % V B B B B v N B N N M N t + X + ", -"X + + , N M N N N v v B B B B V B V V Z Z I I Y Y Y T T T T T T E E E E Q Q W _ 3 9 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.$ . b o.] ] ] ' ' ' ' ' ' ' ' ) ) ) ) ) ( ) ( ( ~ ! ( W _ m X X ..&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.{ X @ v V V B B B B v v N N N , + X X ", -"*.X X : B c M N N B B v B B B B V V V V Z I I Y Y U Y T T T T E T T W E E W Q _ p . - &.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.7 y X.' ' ' ' ' ' ' ' ' ) ' ) ) ) ) ) ( ( ( ! ( ( ( ! ( W @ . P &.&.&.&.%.&.&.&.&.&.%.&.&.%.&.&.&.{ X @ n V B B B n v B N N c B : X X *.", -"*.X + @ N M c v v B v B B B B V n V V V Z I I I Y Y Y T U T T T E E E E W Q W ( m X o ..&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.A > ' ' ' ' ' ' ' ' ' ) ) ) ) ) ) ( ) ( ( ( ( ( ! W ! ! ! : . H &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&./ . @ B B B B B N B N v N v N @ + X *.", -"*.X X + N M M N v B N B n B B V n V V V V Z I I Y Y Y Y T T T T E T E E Q W Q ! W @ . L &.&.%.&.&.&.&.&.&.&.&.&.&.&.&.^ . @ ~ ' ' ' ' ) ' ) ' ) ) ) ) ( ( ( ( ~ ( ( ! ( ! ! ! ! _ > . H &.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.H . $ V B B B B B v N N N M N + + X *.", -"*.X X X a N M M N N B N B B B B B B V V V I I I Y Y Y U Y U T T T E T E E E Q W W > . k &.&.&.&.&.&.&.%.&.%.&.&.&.&.&.@.O . I [ ' ' ' ) ) ) ) ) ) ) ) ) ( ) ( ( ( ( ( W ! ! Q ! W # . K &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.A . = V B B B N B N N N M M a X X X *.", -"*.+ X X 2 N M N N N N N N B B V V B V V V V I I I Y Y Y T T T T T E E E E E W Q _ e 4 &.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.; . h [ ) ) ) ) ) ) ~ ) ) ( ) ~ ( ( ( ~ ( ! ! ! ! ! ! _ x . X .&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.u 2 Z B B B B N N N M M N 0 X + X *.", -"*.*.+ + % N M M v N N B N B B B B V V V Z Z Z I I Y Y Y T Y T T T T T E E E E W ( x . $ #.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.f 3 ] ) ' ~ ) ) ) ) ) ) ( ) ( ( ( ( ( ! ( ! ! ! W ! ( & 5 &.&.&.&.&.&.&.&.&.&.&.%.&.&.%.&.&.&.; . w Y B B B N N N N N M B % X X *.*.", -"*.*.X X + N M M N N N B N N B B B B V B V V I Z I Y Y Y Y T T T E T E T E E E E ! Y X X / &.&.&.&.&.&.&.&.&.&.%.&.&.&.&.J . & ) ' ~ ) ) ( ) ( ) ( ( ( ( ( ( ! ( ! ! ! W ! ! ` w . . | &.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.@.# . s Z B B N N N N v N v N + + + *.*.", -"*.*.X X + t N M M N N N B B B B V B V V V V V I I I Y Y U Y Y T T T T E E E E W W W & D &.&.&.&.&.%.&.&.&.&.&.&.&.&.&.| X X U ' ) ) ( ) ~ ( ~ ( ( ( ~ ~ ( ( ( ( W ! ! ! _ p X j &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.L . @ v V B B B B N v N v N a X X X *.*.", -"*.*.+ X + & C M M N v N v B B B V B V B V V V I I I I Y Y T T T T T T E U E E E W ( q 8 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.$ . x ] ( ( ( ( ) ( ( ~ ( ( ( ( ! ! ! ! ! Q ( ) p X 4 %.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.u . : V B B N B N N c N c N : + X X *.*.", -"*.*.*.X + + N M N M N N B v B B B B B V V V V V I I I Y Y Y Y Y T T T T E T E E E ! s . = &.&.&.&.%.&.&.&.%.&.&.&.&.&.&.&.5 . e ] ( ( ) ( ( ~ ( ( ( ! ( ! ! ( W W ( ` T 2 . . ; #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.#.# . t Z B B B N N N N N v B @ + X *.*.*.", -"*.*.*.X + X t N c N v N v B B B B B B B B V V V Z I I I Y Y Y U T T T T T T E E E ! V X X | &.&.&.%.&.&.&.%.&.&.&.&.&.&.&.A - ) ( ( ( ( ( ( ( ( ! ( ! ! ! W ( ` W i o . . 9 $.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.A . @ v V B v B v N v v v M s X X + *.*.*.", -"*.*.*.X X X % C c v N N B v N n B B B V V V V V V Z I I Y Y Y T Y T T T T E T E T W W % D &.&.&.&.&.&.&.&.&.&.&.&.&.%.&.P X @ W ( ( ( ~ ! ! ! ! ! ! ! ( ` ) I e # . . $ H &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&...@ . q Y B B B B v N N N v N : X X X *.*.*.", -"*.*.*.*.+ X + N N c N v N N N B B B V B B V V V V I V I I Y Y Y U T T T T T E E E E ( 3 . 7 &.&.&.&.%.&.&.&.&.&.&.&.&.&.&.O.o . n ) ! ! ! ! ! ~ ! ( ) _ E z 2 X . . # j @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.1 . @ B V B B B v B N v v N N + X + *.*.*.*.", -"*.*.*.*.X X X 2 N c v N N N N B B B n B V B V V V I I I Y I Y Y Y Y T T T T T T T E ! z . $ %.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.; p ` ( ! ! ( _ ` _ E x 3 @ . . . * l O.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.7 . X i Z B N B v B v v N v N q + X X *.*.*.*.", -"*.*.*.*.*.X X @ C M c N N N N B B N B B V B B V V V V I I I I Y Y Y T T U T T T T E Q I X . { &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.f 3 ` ` ` _ W m p > @ . . . O 8 L %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.9 . . w Y B B B B N N N N N M C @ + X *.*.*.*.*.", -"*.*.*.*.*.X + X w N M M N v N N B N B B V B V B V Z V I Z I Y Y Y Y Y Y T T T T T T E E % . G &.&.&.&.&.%.&.&.&.&.&.&.&.&.&.H # U n y > # X . O 5 H @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.5 . . 3 Z B B B B N N N N M M M t + + X *.*.*.*.*.", -"*.*.*.*.*.*.X X # C M M N N N N B B N B B V B V V V V V Z I I I Y Y Y U Y T Y T T E T ! 2 . j &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.} . X X . . . @ - f L @.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.{ * X w Y V B B B B B v N c M M N % X X X *.*.*.*.*.", -"*.*.*.*.*.*.+ X + r M M v v N N N N B B B B B V B V V V Z Z I I Y Y Y Y Y T T T T T T ! w . 7 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.* . # 4 k L ..&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.A o . X t Z V B B B N N N N N N N M a X X + *.*.*.*.*.*.", -"*.*.*.*.*.*.+ X + @ N M v N v N N B N n B B V B V V V V V V I I I I Y Y Y T Y T T T T ! e . 1 &.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.| D / #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.{ < . . % c Y B B B B B N B N v N v M N % X X + *.*.*.*.*.*.", -"*.*.*.*.*.*.*.X X + t N v v N N N N B B B B B B n V V B V V V I I I I Y Y Y T Y Y Y Q ( 3 7 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&...u X . . 3 V Z B B B B B N B N N N N v M a + + X *.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.X + X @ N c N v N v B N B n B B V B V V B V V V I Z I I Y Y Y T T Q Q T i @ . D &.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.| f O . . & z Y V B B B B B v B N N N M v c C @ X X X *.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.X X + , N c v v N N N N N B B B B B B V V V V Z Z Z Y T Q T Y n d 3 % . . - %.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.@.H 4 X . # t C Y B V B B B B B B v N v N N v N q X X + *.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.X X X c M M v N N N N B B B B B B B V V V V V Z I V p 3 : # X . . . X 9 @.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.L 9 # . . . # e B T B B B B V B B N B N N v N N v c N + + X *.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.X X + @ B M M M N v N v N B n B B B V B V B V Z Y > . . . . X # 5 A .&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.#.K 8 $ . . . o 2 z I T Z V V B V B B B n B N N N N N v c N & X X X *.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.X X + 0 N M v v N N N B B N B B B B B B V V V Z % . < k K | #.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.l # X . X : t B Y Y Z B V B B V B B B N B N B N v N v M M t + X X *.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.+ X + X d N c v N v N N N B B N B B V V B B V I : . H &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.@.X . @ > i n T T I Z V V V B V B B B B B B B N N N N v v M c + + + X *.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.X X + @ C N M N M N N N B N B B B B B V B C Z : . l &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.#. .%.&.&.&.&.&.&.&.%.= . e Q T Y Z Z V V V B V B B B B B B B B N N N c N M M N & X X X *.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.X X X & B c M N N N N N n B v B B B B V B Y > . k &.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.%...K k 1 $ . 8 &.&.&.&.&.&.&.&.u 2 T Z Z V V V V B V B V B B B B B N N N N v N N M N , + + X *.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.X X X 0 N M M M N v N N N N B B B B B B Y 2 . g &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.H 8 - X . . . . X X O.&.&.&.&.&.&.&.G . % Y Z V V V V B V B B V B B B B N v N N N N c N M t X X X *.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X X t N M c N N v N N B N B n B B B Y 3 . 7 &.&.&.&.&.&.&.&.&.&.&.%.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.^ . . . X # > w s @ . L &.&.&.&.&.&.&.} X X x I V V B B V B B B n B B N B v B v N v v M c d + X + X *.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X d N c c M N N N N N B B B B B Z q . 4 &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.%.../ &.&.&.&.&.&.&.&.^ X X w v I T Q Q : j &.&.&.&.&.&.&.%.$ . i Y V B V B B B B B B v B N N N N v v v v M N + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + + + d N M M M N N N N N B B v B Z w . 1 &.&.&.&.&.&.&.&.&.&.&.&.&.$.| G u - X . l &.&.&.&.&.&.&.O.@ . x Q Y Y Y T q . 1 &.&.&.&.&.&.&.&.7 . 3 Y B V B V B B B B B B N N N N N N v N v N # X + + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + + c N M M N v N N N N B N B V a . - &.&.&.&.&.&.&.&.&.#./ A 8 * X . . X X ; &.&.&.&.&.&.&.&.1 . w T I Y Z T s X # #.&.&.&.&.&.&.&.S . & Z V B B B B B B B B v B N N N N M M c N % X X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + @ d N M v N v N N N N n N V a . $ %.&.&.&.&.@.^ l 4 $ . . . . . % 2 y t X @ @.&.&.&.&.&.&.&.g . > Y I Z Z Y n + . ^ &.&.&.&.&.&.&.^ . + v Z B B B n B B B v B v N v N v c M N # X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X + d N c N c N N N N N N B s X O @.O.K g 1 # . . . . o % 3 t v Z Y T V X . ^ &.&.&.&.&.&.&.K . @ V Y V Z Z Y = . A &.&.&.&.&.&.&.#.# . a Z B B B B N B v N N v N M c M c N % X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X @ s N c v M N N N N N B d X X - @ . . . . @ & 3 i v V Y Y Y Z V V Z = l &.&.&.&.&.&.&...o X z Y V V Z Y 2 . 5 &.&.&.&.&.&.&.&.1 . 0 Z B B v B N N B v N N N c M c M % X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X X t C M M v N v N N B c X . . X @ : q s v Z Z Z V B B V V V V B Y 0 . 4 &.&.&.&.&.&.&.&.; . r Y V V B Y y . $ #.&.&.&.&.&.&.&.k . = V B N B v N N v N v v c M M d + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + X , B N c v v v v N N w : w s N V C V V B B B B B V B B B V V Y a . $ $.&.&.&.&.&.&.&.u . , Y B V B Z c X X { &.&.&.&.&.&.&.L . @ v B B v B N v v N v v c N t @ X X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + X & N N c M c M N N N B C B B N B N B B B B B B B B B B B B Z v + . { &.&.&.&.&.&.&.J . @ B V B B V B & . D &.&.&.&.&.&.&.O.o X a B B N N N N M M c M N 2 + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X @ a C M M M N N N N N N N N B N B B N B B B B B B V V B B B % . D &.&.&.&.&.&.&.| X X z Z B V B Z 2 . 8 &.&.&.&.&.&.&.&.; . q B v N M M v c M M c & X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X + , N N M N M N N N N N N N N B B B B N B n B B n B B B Y , . 8 &.&.&.&.&.&.&.&.- . t Z B B B Z t . = %.&.&.&.&.&.&.&.g . > B N M N N M c N t + + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + @ s N M M M M N c N N v N N N N N B N B B B N B B B C e . = &.&.&.&.&.&.&.&.8 > Z B B B V d . X .&.&.&.&.$.} D < X @ c N M M M M N & + X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X : N N M c M M N v N v N N N N N B N B N B N B B V d X X .&.&.&.&.&.&.&.G . % N B B B B N % . H #./ A 5 $ X . . . % N M M M B q @ X X X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X + X + 0 N N M c M v v N M N v N N N N N N N B v B B N @ . J &.&.&.&.&.&.&.| X X d B B v B V : X # $ . . . . X % , q c M M N a @ X + + X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X @ q N N N v M M N N N N v v N v B N N N B N B : . f &.&.&.&.&.&.&.&.- . r B N N N C w . . X X % 2 r d M C B N N a % X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + + + @ 0 N B N c M c v c N N N v v v N N N N V q . ; &.&.&.&.&.&.@.^ - . > B N N N N v 2 2 t c N B N N M N N a % + + + + X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X X X + @ : c N N M N M M v v N M N M N v N C t X + #.&.@.L j 1 # . X X : B N N M v N N B N N M c M N N q % X X + X + X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ + X X X + + % w M N N M v c M M c N c N N N M + X 5 1 o . . . X @ & 2 d N N c M c N M M c M N C a : + X X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + X + X + % w M N N N M M M c N M M C & . X . X @ & 0 t c N N M M M M M M M N N N s : @ + X X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X X + X X # : t M N N N N N M N t # & 0 t c N N N N c M M M N N C N s 0 % + + + X + X X + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X + X X + X X X X @ % : q t M M N N C C C B N C N N N M d t , : # + X X X X X X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X X + X X + + + + X X X + # # @ @ @ % # @ @ X + + + X + X + + X + X + + *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.X X + X X + X + X X + + + X X X X + + X X X X X X + X X X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.", -"*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+ X X X X X X + + X X + X + + X X + X X *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*." +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 q e e e e e e e e e e e e e e e e e e e e e e e e e e q 9 9 9 9 9 9 9 9 9 9 9 9 e e e e e e e e e e e e e e e e e e e e e e e e e e e 9 9 9 9 9 9 9 9 9 9 9 9 e e e e e e e e e e e e e e e e e e e e e e e e e e q 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 0 5 * * * * * * * * * * * * * * * * * * * * * * * * * & > 9 9 9 9 9 9 9 9 9 9 9 6 * * * * * * * * * * * * * * * * * * * * * * * * * * * 7 9 9 9 9 9 9 9 9 9 9 7 * * * * * * * * * * * * * * * * * * * * * * * * * & 5 0 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 0 5 a S Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z C D c 7 9 9 9 9 9 9 9 9 0 6 p A Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z y 7 9 9 9 9 9 9 9 9 7 u Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z C D s 5 0 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , q 9 9 9 9 9 9 9 w ; n $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.j , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e = B $...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. .$.( , q 9 9 9 9 9 9 9 w ; v $.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.@.X.h , w 9 9 9 9 9 9 w , z @.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. .$.H $ r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , z +.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.} $.G $ r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 w , x $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.J # r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 q 1 f / / / / / / / / / / / / / / / / / / / / / / / / ^ ` m : w 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 8 > > > > > > > > > > > > > > > > > > > > > > > > > > 6 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 w w w w w w w w w w w w w w w w w w w w w w w w w w 0 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.h , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.l 3 t r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r w 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.d @ o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o X > q 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.R L U I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I P Y J , w 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.! O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.[ $.T + r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; v $.o.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@. .$.R O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 w ; b $.@.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.W O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 7 i M m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m n N g 5 0 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 7 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; - 1 0 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$.) , w 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$._ 1 r w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w q 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.o.$./ . < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > : 2 0 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.$.] ^ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ~ ' K - e 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.Q O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.@.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.{ $.T O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.E O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e = B $...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.| $.T O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 e * B $.O.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.X.$.W O r 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 0 5 a S Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z V F k 4 q 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 0 5 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * % < q 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 q e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ", +"9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 " }; diff --git a/share/pixmaps/BGL16.png b/share/pixmaps/BGL16.png index a2929a5280..29bf698623 100644 Binary files a/share/pixmaps/BGL16.png and b/share/pixmaps/BGL16.png differ diff --git a/share/pixmaps/BGL16.xpm b/share/pixmaps/BGL16.xpm index 21cf4a574e..26b8303a46 100644 --- a/share/pixmaps/BGL16.xpm +++ b/share/pixmaps/BGL16.xpm @@ -1,190 +1,53 @@ /* XPM */ static char *result[] = { /* columns rows colors chars-per-pixel */ -"16 16 168 2 ", -" c #059C9C", -". c #059D9D", -"X c #059E9E", -"o c #069E9E", -"O c #0BA1A1", -"+ c #0AA3A3", -"@ c #0CA1A1", -"# c #0DA1A1", -"$ c #0EA3A3", -"% c #0CA4A4", -"& c #0EA5A5", -"* c #13A6A6", -"= c #14A7A7", -"- c #15A7A7", -"; c #18A7A7", -": c #14A8A8", -"> c #1EAEAE", -", c #20AEAE", -"< c #21AFAF", -"1 c #20B0B0", -"2 c #40C4C4", -"3 c #42C6C6", -"4 c #42C7C7", -"5 c #44C7C7", -"6 c #45C7C7", -"7 c #49C2C2", -"8 c #4FC3C3", -"9 c #45C8C8", -"0 c #4ACBCB", -"q c #57CFCF", -"w c #50D0D0", -"e c #51D0D0", -"r c #57D3D3", -"t c #53D4D4", -"y c #58D0D0", -"u c #5AD4D4", -"i c #59D6D6", -"p c #5AD6D6", -"a c #5CD5D5", -"s c #58D8D8", -"d c #5FDDDD", -"f c #7ECECE", -"g c #66D1D1", -"h c #62D4D4", -"j c #66D5D5", -"k c #64D7D7", -"l c #6BD3D3", -"z c #6CD0D0", -"x c #68D5D5", -"c c #64D9D9", -"v c #66D9D9", -"b c #61DDDD", -"n c #62DFDF", -"m c #64DCDC", -"M c #67DEDE", -"N c #68DBDB", -"B c #6CD8D8", -"V c #68DEDE", -"C c #69DEDE", -"Z c #68DFDF", -"A c #6EDCDC", -"S c #6FDFDF", -"D c #71D2D2", -"F c #70D6D6", -"G c #74D6D6", -"H c #78D5D5", -"J c #7CD4D4", -"K c #7DD7D7", -"L c #72D8D8", -"P c #7EDADA", -"I c #7BDFDF", -"U c #7DDEDE", -"Y c #69E2E2", -"T c #68E3E3", -"R c #6EE1E1", -"E c #6CE3E3", -"W c #6FE2E2", -"Q c #6FE3E3", -"! c #72E0E0", -"~ c #76E2E2", -"^ c #72E4E4", -"/ c #74E6E6", -"( c #76E6E6", -") c #7AE5E5", -"_ c #79E6E6", -"` c #7AE6E6", -"' c #7CE6E6", -"] c #7FE6E6", -"[ c #74E8E8", -"{ c #76E9E9", -"} c #7AEAEA", -"| c #7BEAEA", -" . c #7DE8E8", -".. c #7EE9E9", -"X. c #80D6D6", -"o. c #85D6D6", -"O. c #88D2D2", -"+. c #8CD6D6", -"@. c #8DD7D7", -"#. c #88D8D8", -"$. c #88DBDB", -"%. c #8DDADA", -"&. c #97DBDB", -"*. c #99DADA", -"=. c #9BDCDC", -"-. c #9ADDDD", -";. c #9EDCDC", -":. c #A2DEDE", -">. c #A5DFDF", -",. c #A7DFDF", -"<. c #A8DBDB", -"1. c #AADDDD", -"2. c #ABDEDE", -"3. c #B0DFDF", -"4. c #85E3E3", -"5. c #81E6E6", -"6. c #8DE1E1", -"7. c #86E8E8", -"8. c #89EBEB", -"9. c #8CEBEB", -"0. c #8FEEEE", -"q. c #8FEFEF", -"w. c #92E7E7", -"e. c #98E0E0", -"r. c #9AF4F4", -"t. c #AFE0E0", -"y. c #AEE2E2", -"u. c #B0E0E0", -"i. c #B1E2E2", -"p. c #B4E0E0", -"a. c #B4E2E2", -"s. c #BEE3E3", -"d. c #BAE4E4", -"f. c #BAE6E6", -"g. c #BFE5E5", -"h. c #BDE6E6", -"j. c #AAF7F7", -"k. c #B8FFFF", -"l. c #C2E3E3", -"z. c #C4E6E6", -"x. c #C4E8E8", -"c. c #C8E9E9", -"v. c #CCECEC", -"b. c #D4EBEB", -"n. c #D5ECEC", -"m. c #D4EDED", -"M. c #D6EDED", -"N. c #D9EEEE", -"B. c #DCEFEF", -"V. c #E3EFEF", -"C. c #E4ECEC", -"Z. c #E6F2F2", -"A. c #E4F4F4", -"S. c #E5F4F4", -"D. c #E8F3F3", -"F. c #EBF3F3", -"G. c #EAF5F5", -"H. c #EBF6F6", -"J. c #F3F9F9", -"K. c #F4F9F9", -"L. c #F4FAFA", -"P. c #F6FBFB", -"I. c #FCFBFB", -"U. c #FBFEFE", -"Y. c #FDFCFC", -"T. c #FFFDFD", -"R. c white", -"E. c None", +"16 16 31 1 ", +" c #6E38E5", +". c #BBA1F3", +"X c #F7F4FE", +"o c #7440E6", +"O c #C0A9F4", +"+ c #EBE4FB", +"@ c #8558E9", +"# c #7C4CE8", +"$ c #CBB7F6", +"% c #966FEC", +"& c white", +"* c #703AE5", +"= c #8253E9", +"- c #FBFAFE", +"; c #7B4AE7", +": c #F1ECFD", +"> c #8152E8", +", c #CEBCF6", +"< c #885BEA", +"1 c #7947E7", +"2 c #6E3AE5", +"3 c #8254E9", +"4 c #BCA4F3", +"5 c #713DE6", +"6 c #C3ACF4", +"7 c #CDBAF6", +"8 c #865AE9", +"9 c #BDA5F3", +"0 c #723DE6", +"q c #FDFBFF", +"w c #C1ABF5", /* pixels */ -"E.E.E.E.E.X @ + * @ . E.E.E.E.E.", -"E.E.E.. ; 7 y O.c W a , . E.E.E.", -"E.E.. 4 L s.0 b.l m Z / 6 o E.E.", -"E.. 3 T q n.@.A.Z.m.1.j } 5 . E.", -"E.1 h <.N.U.G.y.:.S.R.2.V ( < E.", -". p B +.f.R.;.5.r.H T.x.S .u . ", -"O V ` | F I.c.4.w.>.R.f N ..C @ ", -"- R ' 0.I M.L.t.l.F.Y.P.p.v ^ : ", -"= R ' 9.5.i.R.d.e.6.#.H.R.X.Y - ", -"@ M ) 7.8.-.R.=.j.k.! g.R.%.d @ ", -". r _ ] q.P Y.h.A U *.R.V.x i . ", -"E.> Q ` ~ D I.L.z.D.J.u.g E < E.", -"E.. 2 [ z C.B.K.,.v.&.s { 6 . E.", -"E.E.. 3 k G w a.$.K 3.b 9 o E.E.", -"E.E.E.. > t n J o.e 8 > . E.E.E.", -"E.E.E.E.E. # % & $ X E.E.E.E.E." +" ", +" 5===*1==; >>>55", +" 3&&&*4&&, X&&3 ", +" 3&&&*.&&7 X&&3 ", +" =&&&*.&&7 :--3 ", +" =&&&*.&&$ ", +" =&&&*.&&+6OOO# ", +" =&&&*.&&&&&&&< ", +" =&&& O&&&&&&&< ", +" =&&&0%.......; ", +" =&&&@o ", +" =&&&---------@ ", +" 3&&&&&&&&&&&&8 ", +" 3&&&&&&&&&&&&8 ", +" 5============00", +" " }; diff --git a/share/pixmaps/BGL256.png b/share/pixmaps/BGL256.png index 35b48ac8bf..ce80ac5313 100644 Binary files a/share/pixmaps/BGL256.png and b/share/pixmaps/BGL256.png differ diff --git a/share/pixmaps/BGL256.xpm b/share/pixmaps/BGL256.xpm index 2d14aa7a29..ad88b551c6 100644 --- a/share/pixmaps/BGL256.xpm +++ b/share/pixmaps/BGL256.xpm @@ -1,361 +1,359 @@ /* XPM */ static char *result[] = { /* columns rows colors chars-per-pixel */ -"256 256 99 2 ", -" c #009797", -". c #049D9D", -"X c #0A9F9F", -"o c #07A0A0", -"O c #0CA2A2", -"+ c #13A5A5", -"@ c #1BA6A6", -"# c #15A9A9", -"$ c #1BACAC", -"% c #1FB0B0", -"& c #21A7A7", -"* c #23ABAB", -"= c #2BADAD", -"- c #31AFAF", -"; c #24B2B2", -": c #2BB5B5", -"> c #2DB9B9", -", c #34B2B2", -"< c #3BB3B3", -"1 c #34BCBC", -"2 c #3BBDBD", -"3 c #44B6B6", -"4 c #49B7B7", -"5 c #43BCBC", -"6 c #4BB9B9", -"7 c #53BCBC", -"8 c #5ABEBE", -"9 c #3BC1C1", -"0 c #43C5C5", -"q c #4BC6C6", -"w c #46C9C9", -"e c #4CCCCC", -"r c #51C7C7", -"t c #5EC0C0", -"y c #53CCCC", -"u c #5BCDCD", -"i c #54D2D2", -"p c #5BD4D4", -"a c #5ED9D9", -"s c #63C2C2", -"d c #6CC5C5", -"f c #61CECE", -"g c #71C7C7", -"h c #75C9C9", -"j c #7CCBCB", -"k c #63D4D4", -"l c #6BD5D5", -"z c #66DEDE", -"x c #69DFDF", -"c c #70D4D4", -"v c #73DCDC", -"b c #7BDDDD", -"n c #67E0E0", -"m c #6CE1E1", -"M c #74E3E3", -"N c #7BE6E6", -"B c #7EE8E8", -"V c #83CECE", -"C c #87D0D0", -"Z c #8CD2D2", -"A c #83DFDF", -"S c #94D5D5", -"D c #99D7D7", -"F c #9DD8D8", -"G c #A3DBDB", -"H c #ABDEDE", -"J c #B0DFDF", -"K c #81E7E7", -"L c #8BE5E5", -"P c #84E9E9", -"I c #8BEBEB", -"U c #93E7E7", -"Y c #93EEEE", -"T c #98EFEF", -"R c #95F0F0", -"E c #9DF1F1", -"W c #A0EEEE", -"Q c #B4E1E1", -"! c #BBE4E4", -"~ c #A3F3F3", -"^ c #ABF5F5", -"/ c #ADF8F8", -"( c #B2F7F7", -") c #B5F8F8", -"_ c #BAFAFA", -"` c #C2E7E7", -"' c #C6E8E8", -"] c #CCEAEA", -"[ c #D3EDED", -"{ c #D9EFEF", -"} c #C3FEFE", -"| c #CBFFFF", -" . c #DCF1F1", -".. c #E4F4F4", -"X. c #EBF6F6", -"o. c #EEF8F8", -"O. c #F4FAFA", -"+. c #FDFDFD", -"@. c None", +"256 256 97 2 ", +" c #591BE1", +". c #6329E3", +"X c #642AE3", +"o c #642BE3", +"O c #652BE3", +"+ c #652CE3", +"@ c #662CE3", +"# c #672DE3", +"$ c #672EE3", +"% c #672EE4", +"& c #682FE4", +"* c #6930E4", +"= c #6931E4", +"- c #6A32E4", +"; c #6A33E4", +": c #6B33E4", +"> c #6B34E4", +", c #6C35E4", +"< c #6C36E4", +"1 c #6C36E5", +"2 c #6D36E5", +"3 c #6E37E4", +"4 c #6E38E5", +"5 c #6F38E5", +"6 c #6F39E5", +"7 c #6F3AE5", +"8 c #703AE5", +"9 c #703BE5", +"0 c #713BE5", +"q c #713CE5", +"w c #723CE5", +"e c #733FE5", +"r c #733FE6", +"t c #7A48E7", +"y c #7B49E7", +"u c #7C4AE7", +"i c #7D4CE8", +"p c #7D4DE8", +"a c #8152E8", +"s c #8355E9", +"d c #8456E9", +"f c #875AE9", +"g c #895DEA", +"h c #8A5FEA", +"j c #8B5FEA", +"k c #8C61EA", +"l c #8F66EB", +"z c #9168EB", +"x c #9269EB", +"c c #946CEB", +"v c #946BEC", +"b c #966FEC", +"n c #9770EC", +"m c #9871EC", +"M c #9872EC", +"N c #9973EC", +"B c #9A74ED", +"V c #A786EF", +"C c #A887EF", +"Z c #A989F0", +"A c #AA8BF0", +"S c #AB8CF0", +"D c #AC8DF0", +"F c #AF91F1", +"G c #B295F1", +"H c #B69AF2", +"J c #B69BF2", +"K c #B79CF2", +"L c #B89DF2", +"P c #B89EF2", +"I c #B99FF2", +"U c #BAA0F2", +"Y c #BAA0F3", +"T c #BAA1F3", +"R c #BBA1F3", +"E c #BBA2F3", +"W c #BCA3F2", +"Q c #BCA3F3", +"! c #BDA4F3", +"~ c #BEA5F3", +"^ c #BEA6F3", +"/ c #BFA7F3", +"( c #C1AAF4", +") c #C3ACF4", +"_ c #C4ADF4", +"` c #DDD0F9", +"' c #F7F3FE", +"] c #F7F4FE", +"[ c #F8F6FE", +"{ c #F9F7FE", +"} c #FBF9FF", +"| c #FCFAFF", +" . c #FCFBFF", +".. c #FDFCFF", +"X. c #FEFDFF", +"o. c #FEFEFF", +"O. c white", /* pixels */ -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . . o o . . o . X o . . . o . . X . . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o . . . . . . o o . . . . o . o . . . o . o . o . o . o . o . . . o . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o o . o . . . o o . . . o . o . . o . . o . . X . . . . . o . . . . o . . . . o o . . o . o o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . . X . . . . . . o o . . . o . . o . o . . o . . . o . o . o o . . o . o o . o o . . . o . . o . . . . . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o . o . o . o o . . o o . o . o . . o o . . o . o o . o . . . o . . . . . . o o . o . . . . . o . o . o . o . o . . o . . . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . o o . . . o . . o . . o . . . X o . o o o O O # ; > : 9 0 w w e e i e e i e e w 9 > > > # # + o . . o . o o o . . o . . o . . o o . . o o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . o . . o . . . o . . . . o o o O % : 9 e n m m M M M m m M m m n n m n n m m m m m m m M m m m M M M i w 1 ; # o . . o . o X . . o . . . . o . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . o o . . o . . X o . . X o # ; 9 a m M m M n m n m n n n n n n n n n m m m m m n n n m n n m n n m n n n x n m m m M m z e 1 $ O . o . . . o o . . . o . X . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . o . . . . o . . o . . o . O $ 9 p m M M m m m n n x n n m n n n m n m n n m m n z z n m x m x m m x x m x n m m x x x x x x x x x n m M m z w > # . o o o . . . o . o . o . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . . . o . o o . . X o . o $ 9 z m M m m n x n n n n n m n m n n m m n m m m M z a 9 : $ # > z n m n n x m n n m x m m x x m m x m n n x x x n n x m m M n e ; O . o o . . . . . X . . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . X o . o . . . o . o + > i n M m n n x n n x n m m n n m n m x m m m M M x i 0 : # o . . . 1 M m m m m m n m m m m m m x m m x m n m m x m m m n n x x n x n M x 9 % . o . o . o . o . . o o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . . . o . . . o . O > z m M m n x n n m n m n m n m n m n m m M M M n a 9 : $ o . . . . o . . . O p M m m m m m x x m x x m m x m m x m m x m m m n m n n x x n x x x x m n w ; o . . . o . . o . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . o o o . o o o o > a M M m x x x x x n n m n m m n m m n m M M n a w > $ o . . . . o . o . . . . o . w M m m m m m M m m m m m m m x x m x x m x x m m m x m x m n n x x x x n x m x 9 # . o . . . . o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . o o . . . o . o % e m M n n n n n x n m m m m m m n m m m M m z w > $ o . . . . o . . . . . @ o . . > M m m M M m m m x M m m m m m M m m m x m m x x m m n m x m x m m m n x x x x x m a 1 o o . . . o . . X o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . . o . o o o O 9 m m m n n m n n m m m n x x m m x m m m m m a ; o . . . . o o . . . . $ 7 V ! ..3 o . # n m m m m m m m M x M x M x m m m m m M m m m m x m x m m m x x m x m m x n x x n n n M w $ o . . . . o . . . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . o o . . o o # e M m m n m n n n n n n m m m m m x x m m m m m M > . . . X . . . . + 6 j Q ..+.+.+.+.h . . O z M M m M m M m x M m M x M M m m M m x M m m M m m M m m x M x n m m x m m m n n x x x n m a > . o o . . o . o o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . . . o . o X % a M n n n n n m m m m M M M n m m m m M m M x m m M x # . . . o . + 3 j Q .+.+.+.+.+.+.+.+.H o . . w N m M M m m M M M M m M m m m m M M m m m m M x m m m m m m m x x m m m m x x m m x x x x x x z 1 O . X . . . . o . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . o . . o o . . o ; x M m n n m m m m M m n i w 9 w z M m m m m m x M M m M x $ . o . o < d H .+.+.+.+.+.+.+.+.+.+.+.+.[ + . . . 1 M M m M M M m M x m M m m M M M m m m M m M m M m M m M m m m M m m x x m m m m x m m n m x x x x n 9 o . o o . . . . o o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . . . . . o : n m n m n m M M n a i w > # O o # a M m m m m M x M m M M ; . o * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.3 . . $ M M M M m M x M M M M m M M m m M m M M m m m M m M x m m m m m m M m m m x m m x m x n m n x x x n x x 9 O . o . o . . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . . o o o o ; n M n n M m m a e 9 ; # o . . . o o . . ; M m M M m x M m M m M 9 . . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . . o z M M M v M M M x M M M M M M m M M M m M M m m M M M x M m M m m m m m m M x m m m x m x x m n n x x x x x 9 o . o . o . . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o . o o o o $ n M m m m a e 9 % O . . . . . o . o . . o . # n M m m M m M M m M M i . o . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . e N M M M M M M M M M M M M x M M M M M m m M M M m x M M M m m M m m m M m m m m m m m m m m x m x n x x x x x > . o . . . . o . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o o . . o o o + i M m a e 9 % O . . . . . o . . o . . . . . o i M M M m M m m M M M x # . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] O . . 9 B M M M M M M M M M M M M M M M M v M m M M m m M M M m m M M m M m M m M m x M M m m x m x x m m m m n n x x x a * . o o o . . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o . . . X . O 9 M M a ; O . . . . o . . . . . $ 3 C C . . . 9 N M M m M M M M M M M ; . . . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< . . ; M N M M M M M M M M M M M M M M M M M M M M M M m v M m M m M m m M m m m m M x x m M m m x m m m x m x m n x x x n e + . . . o . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . o o . : n m n a # . . . o o o . . . o * 7 Z ! ..+.+.X.* . . . > M M M M m M M M M M B 9 o o [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . . O x K M M M M M M M M M N M M M M M M M M M M M M M M M M M m M M M m M m M m x M M x m m m M m x m x m m n n n x x n n x 9 o . o . . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . . . o . . O i M m n M e . . . . . . + = t D ` O.+.+.+.+.+.+.+.6 o . # m M M m M M M M M M B y . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . . o i B M M M N M M M N M M M M M M N M M M M M M M M M M M v M M M M m m M m M M m M m m m M m x m m m m m x m m m x x x x n p $ . . . . . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o o . o o o > m m n n n m w . o o + , s F ] O.+.+.+.+.+.+.+.+.+.+.+.h o . O a N M M M M M M M M N z + . o g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . . 9 B M M M N M N M M M N N M N M M M M M M M M M M M M M M M M M M M M M M M m m m M m M m m M x m m m x m m x m m n x x x x n 9 o . X . . . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o o . . . O a M n n m n n m e o . . j O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . o o e B M M M M M N M M B M ; o - O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= . . : N B M M M M M N M M M M M M N M N N M M M M M M M M M M M M M M M v m M m M M M m M m M m m M m m M m m x m x m x m x x x n n z $ . . o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . . o o > M m n n n n m m m z # . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ O . o 9 M M M M M M M N M M B 1 . . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . . + x B N N M N N M N N M M N M N M M M M M N M N N M M M N M M M M M M M M M m M M M m M m M M x m M m m m M x m x m n m m n x x n n 9 . . . o . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . o . . o e M x x n m n m n m m m ; o = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< o ; M N N M N M M M N M B y . . . . G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.S . . . p B N M N M M M N N N N M N M M N M N N M M M M M N M M M N M M M M M M M M M M M m m m M M m M x M x x m m m m x m m n m n x x x x i + o o . . o . X . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . o . . o $ n m x x x n n n m m m m M 9 . . . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . + m N M M N M N M N M B x O . o h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` . . . w B N N N N N N N M M M N N N N M N M M M N N N M N M M N M M N M M M M M M M M M M M M m M M m M m M M m M x M m m n x m x m m x x x x ; . . . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o . . X . 1 M m n n x m m x m m m m m M e . . . G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.S . . o p B N M M N M N M N B M $ . < +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+...* . . : B N M N N N N N M N N N N M M N N M N N M M N M M M M M M B M N M M M M M M M M M m M M x M m M M m x M m x m m M m m x m m m n x x x n 0 . o o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . . o i m n n n n n x m m m x m m m m a O . o h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . . . 0 B M N M M N M N M B B 1 . . . + .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 o . + M B N N N N M N N N N M N N N M N N N M N N M N M N N M M M M M M M M M M M M M M M M v M M M M m M M m M M m m m m m m m x x m m x x x n i O . . o . o o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . . . O n m n x x m n x m m x x m m M m m m * . . . < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...$ . 1 K M M N N N N M N M K r . . . o H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C o . o z K B B N N N N B N N N N M N N M N N M N M M N N M N M N M M N M M M N M N M M M M M M M M M m m M m m m M m M m m m m x m x m m m n x x x z $ . . . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . X . . o ; M n x x x n m m m m x M m M m m m M M 1 o + .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 X . % M K N M M M N N N B P z o . . V +.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.! . . . . q P N N N B N N N N N N N N N N N N N N N N N M M B M N B M M N M N M M M M M M N M M M M M M M M M M M m M m M m m m m M x m m x x m n x x x x 1 . o o . . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . o . o 1 M n n x x n m x x m x m m m m m M m M N w . . . . Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g . . O x K N N N N N N N B B M $ . . 3 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .@ . 1 P B B B K K N N N N N N N N N N N N N N N N N N M N N M N M M M M N M M N M N M M M N M M M M M m M m M m M m m m M m m m m m x m m x n x x x x 9 . . . o . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . o . . 0 m n n n x x m x m m m m m m M m m m M m M a o . . j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . . u P N N N N N N N N B K > . o @ ..+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.6 . o $ M K B B M N N K N K N N B N N K N N N N N N N N N N M N N N N N N M N N M M M M N M M N M M M M M M M M M m M M M M m M m x M m x x m n n x x x x w o . o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o o . o p m n n x n m x m m m m m m m m M x M m M M M n $ . o 3 +.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.[ o . . . 9 K N N N N N N N B B K q . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o x K N B B K N K B B N N N N B N B N N N N N N N N N M N N M N M N N M N M N M M N M M N M M M M M M M M M x M m m m M x M x m m m m m x m n m x x n p o o . . o o o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . X . . . o a n x n n m n n m x x m m m M M m M M m M m M M N > . . . $ ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o., . : B B B N N K N N N B P z o . . V +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . o y I K B B K B B K K B K K B B B B N K B N N N N N N K N N N N N N N B M N M N N M N M M M N M M M M M M M M M M v M m M x M m M m m m x m x m n x n x p O o . . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . o X O a n x x m n m x x x x m m m x m m M m M m M M M M N w . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t . . + v K B N K N B B B B K N # . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . . 9 I K K K K K K N B B K K B N B B K N B N K N N N N N N N N N N M M N N M N N M N N M M N M M N M M M M M M M x M M m M m M x M m m m m m x m m n x x n i + . o . . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . o O n n n x x n m m m m M m M m M M x M m m M M M m M M N p . . o Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . . o z K B N B K B B B K K P > . * X.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.< . . ; B P K K K K K K K K K K K K P K K B K K K B N K N B N N N N N N N N N N M M N M M N M M M N M M M M M M M M M M M M M m m M m m m m M x m m x x m x n n x $ . . o o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . . o + n n x x x n x m m m x M M x m M m M M M m M M M M M M N x $ . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . . . q P K B K B B B B K K I w . . . o ` +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g o . O x I P P P I P I P I P K K P P K K K B K P P P K P K K B B B B B N N N N N M N M N M M M M N N M M M M M M M M M M m m M M m x M x M x m x M m m n m x x x x $ . . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . X . o + n n n x x n m m m x m m m x M m m m M m M M M M M M M M M N : o $ X.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+. .+ . . . 2 P K K B K K K K K K P z o . . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . o p Y P K N x l a y w 1 1 : : ; ; ; : ; > 1 9 e p z k M N B P K K K N N N N N N N N M N N N M M M N M N M N M M M M M M M m M m M M m M x m x x m m n n x x x z $ o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o . . + m n m n x x m x m x m m m M M x M M m m M x M M M M M M M M B w . . . o ' +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.4 . ; B K B K K K B K P K I N # . o t +.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+. .O o . $ 1 : ; # o . . . . . . . . o # ; > 0 p l M K K K N N N N N N N N M M M N M M N M M M M M M M M m M x M m M m x M m m m m x x x x x x x a # . . o o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. X . o . . O m n x x x m m x m x M m m m m x M m M M M M M M M M M M M N M B p o . . S +.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.g o . O x I K P K K P P K P K P : . . = X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O., . . . . . . . . . o o o . . . o . . o . . . . . . . . . o * 2 p m K K N N N M N M N N N M M N M M N M M M M M M M M M M M x M M m M m m m M x m m x x x x z # . . . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . o . o a n x x x n m m x x m m M m m M M m M M M M M M M M M M N N M M N n # . o t +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . o p I K P P K B K P K K I 0 . . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . o o . . o . o o . . . . . . . o . . . . . . + 1 p B K B N N N M N M N N N M M N M M M M M M M M M M x M x M m x M m m M x x m n n x x x i o o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . . o o a n x x x x m m x M x m m m m m m m M M v M M M M M M M N M M N M N B ; . . = o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . w I P K P P P P P P K I k o . o D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D . . . . + * * = < 7 s g d s 6 < = & $ + . . . o . . . . o ; i B K N N N N N M N M M N M M N M M M M M M M M M M M M m M x M x m m m m m x m x x x p O o o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o o . . a m n x n m x x m m x m m m M m m M M m M m M M M M M M M M N M M N M P 9 . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= o > P P P K P P P P P I R K + . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.8 O X + = 6 g C S F ! { X.O.O.O.+.+.+.+.+.+.O.o.X...` H D V 6 * + . . . o . . . ; p K B N N N N N N N M M N M M M M M M M M M M M x M M M x m M m m m x m x n m x x n p . . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . X . . . w n n x x m n m m x m M m M M x M M m M M M M M M M M M M N M M M N M B B p o . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 . . $ N I P P P I I Y K v i 1 o . . , O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.[ ` .O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.{ H j < o . . . . . . o 1 M K N M N N M N N N M N M M N M M M M M M M M m m M M m M x M m m m m m x n x x n w o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . o 9 m x x x m m x x m m m m M x M m M M m M M M M M M M M N M M N M M B M N K v O . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C o . . x I I I K M u 2 % o . . . . = ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.O.] C - . . . . . # p P B N N M N M N M M N M M N M b M M M M M M M m m M x x M x M n x x m x m x x x 9 . . . . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . X . o o ; m x x x x n x x M m m m m x M m x M M M M M M M M M N M N M M N N N N N M K B ; . . - O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . . r B p 0 ; O . . . . . o X . 6 +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.H 4 . o . o o w K K N N N N N B B M N M N M N M M M M M M M M M m M M x m m m M x M m x n x x x > . o o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . . o + m x x x n x m m m m m m M x M m M M M M M M M M M M M N M M N N M M N M N N N P 2 o . o [ +.+.O.+.+.+.+.+.+.+.+.+.+.+.+...+ . . . + O o . . . . o . . . . < [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H - . . . . . 1 M K B M N M N M M N M M M M M N M M M M M x M M M m M M x m m m x m x m n x x x $ . . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o o m n x x n m m m m x m m m m M m M M x M M M M M M M M N M N M M M N N M N N N N P i . . . . G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.3 . o . . . . . . . . . + 4 h J o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.g o o . o : M K B N N N N N M N M N N M M M M M M M M M M m M M x M m m m m m m x m x x x x O o . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . o o i n n n n x m m x m m m M x M m M M m M M M M M M M M M N M M N N M N N N N N N N K m O . . g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.h . o o . . . . + < g H .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q = . . . ; M B B N N M N N N M N M M N M M N M M M M M M x M m x M m m m x m m x n x x x i o . o . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o . 9 n n n m n m m x m m m m m M m M m M M M M M M M M N N M M N M M N N N N N N N B B B B % . . < O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` o . + < s H [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...6 . o o ; M K N N N N B M N M M N M M M M M M M M M M M M M M x m M m m m m x x m x x x 9 . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . X o . ; m x x x n m m x m m m x M x m M m M v m M M M M M M M M N M M N N N M N N B N N B B B P 9 o . + { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H < = < s G [ O.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.d . . . ; M K B N N N M N N N M N M N M M M M M M m x M m M M m M x m m x m m n m x x z : . . o . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . . + n n n x x m x m x m m m M m M M m M m M M M M M M M N M N M M N N M N N N N M B B B K K I p . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . . . . ; N B N N N N N M M N M N M M M M M M M M M M M M m M m m m M m m m x n x x x z # . o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o . . . i x x x x n m m x m m m m M m M m M M M M M M M M N M M N M M N M N N M B B N B K P P P N x w o . . h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.S . . o . 9 K B N N N N M N N N M N M N M M N M M M M M M m M x M M m M x m x x m x x x i . . . X o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . o 9 n n x x n m x m M x m M m M M m m M M M M M M M M M N N M N N N N N B B K K K K M z e > $ O . . o . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o . q P B N N N N M M N N M N M M M M M M M M M m M m M m x m m m m m m m n x x x 9 . . . . X o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . o + m n x x x m m x m m x m m m m m M M M m M M M M N M N M M N N M B K K K B m p 0 ; + . . . o . . 8 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . . o k P N N N N N N N M N M M N N M M M M M M M M M m M M m M x m x m x n n x x n $ o . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . o x x n x x x x m m x m M x M M m M m M M M M M M M N M M N B B B K M x y 1 * O . . . . . o X . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.3 . . . $ M K K N N N N N M M N N M M M N M M M M M M m M m m M m m M m m x n n x x n a O . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . . 9 n n x x m m m m m m m m M x M m M M M M M M M M M B B B N x p w > $ o . . . . . o o . o . @ , t J +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .@ o . . 9 P B B N B M N N N M M N M N M M M M M M M M M m M x M x m M x m x m x x x x 9 . o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o # m n n x n m x x m m m M m m M m M M M M M N M B B M l i 9 : # . . . . . . . . o . o * 6 V H { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.H . . o . O l K B B N N N N N N N M N M N M M N M M M v M M m M x M m x m x m m n m x n x $ . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o X . . . a x n n x m m x m m m m m m M m m M M M N M m z y 1 ; + . . . . . . o . . . + - t Z ! X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . : K B N N N N N N M M N N M M M M M M M M m M m m M M m m M m m x m m n n x x i . o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o o 1 n x x x n x m m m m m m M M M N N N n p w 1 $ o . . . . . o . o . . @ < d D ] O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.* . . . p P N K N N N N N N N M N M N M N M M M M M M M m M M m M m M x m x m m x n n 9 . o o . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o O n n n x n m x m m m M m M M m z i 9 : # . . . . . . . . . X & 4 j H ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . o : P K N B N N N N N M N N M N N M M M M M M M v M M M M m m m m m x m m m x x z O o o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . . o e n n n x x n m M x m m M i 9 ; O . . . o . o o . . + = t V ! X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O., . . . x P N N N N N N N N N M N M M M N M M M M M M M M m m M m m M m m x x n x x n e . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o . $ m x x x m m x M x m m M w o . . . o . . . . + , d F ] o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . o 0 P K B N N N N N N N N M N N M N M N M M M M x M m m m M m m m m m x m n x x x % . . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . a n x x x n m x x m m m n $ o o o . . . . $ 6 j H .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.= . $ B K K N B K N N M N N N M M N M M M M M M M M M M M M m m m m m m m n m x n n p . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . X . . : m x x x n m x m x m M M m % . . . . . o = t C ! ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.X...X...X.X.o.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.h o . . k P K B B N N N N M N M N N M N N N M M M M M M M v m M m m m m m m m x m x x x > . o o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o n n x x x x m m x M m m m m ; . . . O Z ] X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O...` F Z j d 4 - * * @ $ $ @ * - 6 d Z ' o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! X . . w I B K B K K N N B N N N M N M M M M N M M M M M M M m m M m M m x m m x m x x z O . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o o . 9 n n x x m m x m m m m M m N 9 . o . O { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.[ G h 6 = @ o . . . . . O * 6 D ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.* . . : P B B B B N N N N N N M N M M N M N M M M M M M m m M M x M M x M x m x n x x x 9 . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . o m n n n n m x m m m x M x m N i . . . D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.' S 8 = + . . . . . . o o . . . o . o . . o o o . @ d [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 o . $ B K K B N K K N N N N N N M N M N M N M M M M M M M M m M x m m m m n m n n x x x O o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o 2 n x x x x n m x m M m M m m M x + . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] F s = O . . o . . . o . . . . . . . o o . . + d { +.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.S . . o x P K B K K N K N N N N M N N N M M N M M M M M M M M x M m m m m m m x n x x x x 9 . . . . . o @.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.. o . o . o n x x x n m m x m m m m x M M M M ; o . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.{ H g < + . . o . . . . . . . o $ : 1 2 9 w q q q 0 9 9 > $ O . . . . . * G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . o . i I K K K B K N N N N N N N N M M N M M M M M M M M M M m M x M m m m m m m n x n a o o o o . . @.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.. . . o . o 9 n x x x x m x x M m M x M m m M M 9 . . . O ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...j 3 @ . . . o . o . . . . + ; 9 r l M N I E ~ ~ ~ / ~ ~ ~ ~ / E E Y K k 1 + . . o o s ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ + . . q I P B K N K N K N B N M N N N N M N N M M M M M M M M m M M x m m m m m m m x x x 9 o . . . o . @.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.o o . . . o x n x x n m x m m m m x M m M M m N y . . . G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.O.7 . . . . . o . # , r x P R ~ / ~ / ~ ~ ~ E E E E E ~ E E E E E ~ ~ ~ ~ K r $ . . . . = ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.: . . 9 I K P K B K B K N N N N N N M M N M M N M M M M M M M M m M M M m m m x x m n x x z o . o . o . @.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.o . . o . o > n x x x n m m m m x M M m M M m M N z o . o g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . o . . . . + > q M I ~ ~ ~ ~ E E ~ E E E E E E E E E E E E E E E E E E E E ~ ~ I q O . . . o $ [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.< . : I K K K K K N B N N N N N M N M B N M M M M M M M M M M M m M m m m m m m m n x x x 1 . . o . . o @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.. o . . o . z x x x x m x m m m m x x M M m M M M M ; . . < O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.H . . . . o O ; w l P ~ ~ ~ ~ ~ E E E E E E E E E E E ~ E E E E ~ E E ~ E E E E E E E E ~ / K : . . . - ..+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.3 . . ; K P K K K K K N K N K N B N N N M N M M N N M M M M v M x M m M m m m M x x m x x x a o . o . . o @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.. . o o . : n x x x x n m m x M x M x M M m m M M N 1 . . . O { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...$ . . * K E ~ / ~ E ~ E E E E E E ~ ~ E E ~ E E ~ E E E ~ ~ E ~ E E E ~ E E E E E E E ~ ~ E q . . . o 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 . o ; K P P K K K B K B K N N N N N N N B M M M M N M M M M M M m M m m m m x x m m n x x x > . . o . . @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.. o . . . . a x n x x m m x x m m M m M x M M M M M N e . . . . Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 . . $ E ~ E E E E E E E E ~ E ~ E E E ~ E ~ ~ E ~ ~ E ~ E E ~ E ~ E E E E ~ E ~ E E E E ~ ~ k o . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . . * P P K P K K K B K K N K N N N N M M N N N M M N M M M M v M m M m M m m m m x m x x x a . X . o . . @.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.o o . o . $ n n x x n x m m n m M x M M M m M M M M N z o . . j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.S . . . M ~ E ~ E E E E E E E ~ E ~ E E E ~ E ~ ~ E E E ~ ~ E ~ ~ E ~ E E ~ E E ~ E E E E E ~ / u . . . , O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . $ K P P P P B K K B B B B B N N N N N M M M N N M M M M M M m M m M M x m x m x m n x x x % . . . X . @.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.. . . . . o w n x x x n m x x M m m M m m M v M M M M N M $ . o 4 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . . . f ^ E E E ~ E ~ ~ ~ ~ E W ~ ~ ~ ~ ~ ~ E ~ ~ ~ E ~ ~ T ~ E ~ E ~ E E ~ ~ E E ~ ~ E ~ R ~ E : . o H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.j . . . $ P P P K P K K K B K B N B K N N M N N N M M M N M M M M M M M M M x M m M m m x m x x x w o . o . . o @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.. o . o o o n n x x x n m m x M m M x m M m M m M M M N B 1 . + .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...* . . 5 ~ ~ E E ~ E ~ E ~ E ~ ~ E ~ ~ ~ ~ E W ~ E ~ ~ ~ ~ ~ ~ W ~ ~ ~ ~ ~ E E ~ E E ~ E E E E ~ v o . o 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . . ; P I P K P P K K K B B N B N N N N M N M N M N M M M M M M v m m M M x M m m m m m n x n n o o . o . o @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.o . . o . 1 n x x x n n x m m m M x M M M M M M M M M M B w o . . ! +.+.+.+.+.+.+.+.+.+.o. .! Z h g g j F ] X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 . . * R ~ ~ ~ E ~ E ~ ~ ~ ~ ~ ~ ~ ~ W ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E ~ ~ ~ E ~ ~ E E ~ E ~ ~ ~ : . $ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 . . * P P P P P K P K K K B K N N N N N N N B M N M M N M M M M M M M m x M m m m x m x m x n n 1 . . o . . @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.. . . . o o a n x x m m x m m m m m M m m m M M M M N M M B k o . o C +.+.+.+.+.+.O.[ S t : + . . . o * s Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.j o . O K ^ ~ E ~ ~ E ~ ~ ~ W ~ ~ ~ ~ ~ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ ^ ~ ~ ~ ~ ~ ~ E ~ ~ ~ E ~ ~ E ~ E ~ / p . . . H +.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< . o ; I P P P P P P K B K K N B K N N B M N N M N M M M M M M M M m x M M x m M m x x x m n m x p . . o o . . @.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.. . o . . # m n n x n n x m m x M m m M M M M M M M M M N M M $ . o 6 +.+.+. .H g < O . . o o . . . . 6 ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . x / ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ~ ~ ~ W W ~ ~ ~ ~ ^ ~ ~ W ~ ~ ~ W ~ ~ ~ ~ ~ ~ ~ ~ E ~ E ~ ~ ~ L o . o g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O., . . 1 I I P P P P K K P K K K K N N N N N N N M M N N N M N M M M M M M m M M x m m x M m x x x n # . . . . . @.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.. . o o . 9 n n x x m m m x m m m M m m M M M m M M M M M M B 1 . . @ F V 4 + . . . o o o . . . . . . . . . . o C +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ + . . r ^ ~ W ~ W ~ ~ ~ ~ ~ ~ W ~ ~ ~ ^ ~ ~ ~ ~ ~ ^ ~ ^ ~ ^ ~ ~ ~ W ~ ~ ~ ~ W W ~ E ~ E ~ ~ T ~ R ; o 3 +.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.{ + o w I P P P P P P P P K K K B K N N N N N N N N M M N M M M M M M M m M m M m m m m x n m x x x 9 o o . X o @.@.@.@.@.@.@.", -"@.@.@.@.@.@.o . o . . X a x x x m n x m M x M m m M M m M M M M M M N N M K w o . . . . . o . . . . . o O # # + o . . . . h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< . . : ~ ^ ~ ~ ~ ~ ~ W ^ ~ ~ ^ ~ ^ ~ ~ ~ ^ ^ ^ ~ ~ ~ ~ ~ ~ ~ ~ ^ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ / q o = ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . o . p R I P P P K K P K K K B K K N K N N N N M N B M M M N M M M M M M m M m m m M m x m x n x x z . . o . . . @.@.@.@.@.@.", -"@.@.@.@.@.@.o . . o . ; n n x x n x x m m m x M m M m M M M M M N M M M N K k . . o . . o . . . . . o O : 0 p v M M M N l w $ . . o . . . D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o + T ^ ~ ~ ~ ~ ~ ~ ~ ^ ~ ~ ^ ~ ~ ^ W ^ W ^ ^ ~ ^ ^ W ~ ~ ^ W ~ ^ ~ ^ ~ W ~ W ^ W ~ ~ ~ ~ ~ / k . . O ] +.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.V . . o x Y I K P P P P P K K K K K K B N N N B N N N M N M M M M M M M M M M m M m m m m m m m n x x x ; X . . o . @.@.@.@.@.@.", -"@.@.@.@.@.@.o . . o . e x x x x m m m m m m M x M m M M M M M M M M N M M B M @ . . . . . . . o $ 9 p N P I I I I Y I I Y Y I p # X . + .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . o b / ~ ~ ~ ^ ~ ^ ~ W ^ ^ W ^ ~ ^ ^ ~ ^ ~ W ^ ~ ~ ^ ^ ^ ~ ^ ^ ~ ~ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ W ~ / l . . . . ! +.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< o ; P I P I I K P K P K P K K N K B K N N N N M N N M N N M M M M M M M M M M x m m M x x m n x n x e . o o o . @.@.@.@.@.@.", -"@.@.@.@.@.o . . . . . n x x x n x m m x m M x M m m M M M M M M N M M N M B K 0 . o $ 1 i x K I I I P P P K I P I I I I I R K * . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` o . o k ( ~ ^ ~ ~ ^ ~ ^ ^ ^ ^ ^ ~ ^ ^ ^ ~ ~ ^ ~ ~ ^ ^ ^ ^ ~ ^ ^ ~ W ~ ^ ~ ^ ~ ~ W ^ ~ ~ ~ ~ ~ / x . . Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.[ + . . 2 I I I P I P I P P P P K K K N K B N N N N N M N M M N M N M M M M M m M m M x M m m x m m n x x x . . . . . o @.@.@.@.@.", -"@.@.@.@.@.. . o o . ; n n x x n x m m m m x M m M M M m M M M M M M N M B M B M 0 ; : q z N P I I P K P P P P I I P I P I I I I I R N + . . . @ .+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...= o 2 ^ ^ ~ ^ ^ W ^ ~ ^ ~ ~ ^ ^ ~ ~ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ W ^ ~ ^ ^ ^ ~ ^ ~ ^ ~ ^ ~ ^ W ~ ~ ~ / l . . . ! +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D . . . . p Y I P I P P P P P P K K K K B K K N K N N N N N N N M M M M M M M M M m M m M x m m m x m n x n n ; o . o . . @.@.@.@.@.", -"@.@.@.@.@.. . o o . 0 n x x x x m m m m M x M M m M M M M M M M M N M M M N M K P B K P P P K K P K K P P P P I P I I I I I I I I Y E q o o G +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 o $ ~ ^ ~ ^ ^ ~ ^ ~ ^ ^ ^ ~ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ~ ^ ^ ^ ^ W ^ ~ ~ ^ W ~ ^ ~ ~ ^ ~ ^ ~ ~ ^ r . . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.4 . . + M Y I I P I K I K P K P P K K K B B B N N N M N N M N N M M N M M M M m M M m m M m m m x x x x x x 9 . . . . . @.@.@.@.@.", -"@.@.@.@.. o . . . . a n x x x m m x m m m m x M m M M M M M M M M N N N N N N B B B B B B K K K K P P P P P P P P I P I L I I I I I R M O . o s +.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.C . . X L ^ ^ ~ ^ ^ ~ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ~ ~ ~ ~ ^ ~ ; . o - O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . 1 Y I I I P P I P P P P K P K K K K K B K N N K N N N M M N M M M M M M M M M m M x m M x m m m x x x z . o o o . o @.@.@.@.", -"@.@.@.@.o . o . o + n x x n x m m m x M m m M m M M v M M N M N M M N M N N M N B N B B K B K K P K K P P P P I I P P I I I Y I I Y R I : . - O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . . . c ) ^ ~ ^ ~ ~ ^ ~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ^ ^ ~ ^ ~ ^ ~ ~ ~ ( b . . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g . . p R I P I I I K I P I P K P K K K K B B B N N B M M N N M M N M M M M M x M M m M x M m m m x m n x x n + . . o . . @.@.@.@.", -"@.@.@.@.. . o . . : n x x x n m x x m m M m m M m M M M M M M M M N M N M N N N N B B B B K K K P P P P P P I P P I I I I I I I I I I R q o . X ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . . r ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ( ^ ^ ^ ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ~ ^ ^ ~ ^ ~ ^ 1 . . J +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...@ . . . # K Y I I I P I P K I P P P K K K K K K B B N N N K N N M N M N M M M M M M M M m M M m m m m m m n x n n > o . . o . @.@.@.@.", -"@.@.@.@.. o . . o e x x x x n n m x M m m M M M m v M M M M N M M N M N N N N N N K B N K K K K K I P P P I I P I I I I I I I I Y I Y R l . . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.< . . : ~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ~ ( N . . . < O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.g . o q Y I I I I P I P I P P P P P P K K K N K B K B N N N N N N M M M M M M M M M x M M M x m M x m x m x x x e . o . . . @.@.@.@.", -"@.@.@.. . o o . o n x x n x n m m m m m m m m M M M M M M M M N N M M N N M N N K N B K K K K K P K P P I K P P I P L I I I Y I I Y Y R K + o t +.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d X + T ( ^ ^ ^ ^ ^ ( ^ ^ ( ^ ( ( ^ ( ^ ^ ( ^ ^ ( ^ ^ ( ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ~ : o o F +.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . o . O N R I I I I I I I P P P I P K P K K K K B K N N N N N N N M N M N N M N M M v M M M x x M m m x m n x x x n . o . o . o @.@.@.", -"@.@.@.o . . o . $ n n x x n m x m m m M M M m m m M M M M N N M M M N N N N N N N K B K K K P K P P K I K P I I I I I I I I I I I Y I Y Y : . . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . . b _ ^ ^ ^ ^ ( ^ ^ ( ^ ( ^ ^ ( ( ^ ( ^ ( ( ^ ( ( ^ ( ^ ^ ^ ( ^ ^ ^ ^ ^ ^ ~ ^ ^ ) u . . , O.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .* . o q Y I I I I I I I K I P I K P P K P K K K K K N N N N N M N N M M M M M M M M M M m M m M x M m m x m x n x n $ . . o . . @.@.@.", -"@.@.@.. o . . . 1 n n x x x m m x m m m x M M M M M M M M M M M N N M N N N N B N K N K K K K P K P P P I P P I P I P I I I Y I I I Y Y E w . . . o ' +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.' X . . f _ ^ ^ ^ / ^ ^ ( ^ ^ ( ( ( ^ ( ( ^ ( ( ^ ( ^ ( ( ^ ^ ( ( ^ ^ ( ^ ^ ^ ^ ^ ^ ) N O . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+..., o o $ P Y I I I I I I I I I K I P P P P K K K K K K N N K N N N N M B B M N M M M M M M M m M x M x m m m m n m n n 1 o . . X . @.@.@.", -"@.@.@.o . . . o e x x x x n m x m m m m m M m M M M M M M N M N M N N N N N B N B B B K K K K P P P I P P I P I I I I I I I I Y Y Y Y Y R l . . o D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.X.= o 2 ( ( ^ ( ( ^ ^ ( ( ^ ( ( ( ( ( ^ ^ ( ( ( ( ^ ( ^ ^ ( ( ^ ( ^ ( ^ ^ ^ ^ ^ _ Y $ . . s +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.6 . . . X l R I I Y I I I I P L P I I K P P P K K K K K B B K N N N N N M M M N M M N M M M M M x m x M M m x m m x x x x e o . . . o @.@.@.", -"@.@.. . . o . o n x x x x m m m m m M m M m M M M M M M M M M N M N M N N N M B B B K K K K K P K K P P P P I I I I I I I I I Y Y I I Y R K # . . t +.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.7 o . $ W ( ( ^ ^ ( ( ( ( ( ^ ( ^ ( ( ( ( ( ( ( ( ( ( ( ( ( ^ ( ^ ( ^ ^ ( ^ ^ _ Y $ . o * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.7 o . . . r R Y Y I I I I I I I I I P K I I K P P P K K K B B N N K N N M N N M M N N M M M M M M M M M m m m x m x m x x x x . . o o . o @.@.", -"@.@.o o . . o + n n x x x m x m m m m m m M m M m M M M N N M M M M N N N N N B B B B K K P P K P I P P I P I P P I I I I I Y I I I Y Y T T : . . . = X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.C . . o U ) ^ ( ( ( ^ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ^ ( ( ( ( ( ^ ( ^ ( _ L $ . . o Q +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . . . . 0 R Y Y I Y I I I I I I P P I P P P P P P P K K K B B K N N N N N N M N M M M M M M M M x M m m M M x M m x x x x n m + o . . o . @.@.", -"@.@.. . o . . ; n n x x x m x m m m M m M m v M M M M M M M M N N N N N N N N B K N B B P P K P P K I P P I I P I I I I Y I I Y Y Y Y Y Y E r . . O ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . . . l _ ( ( ^ ( ( ( ( ( ( ) ) ( ) ( ) ( ) ( ( ( ( ( ( ( ( ( ^ ( ( ^ _ ) l + . o . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.V . . . . 2 Y R Y Y Y Y I I I I I I I I P I P I P P K P P K K K K K N K N N N N N B M N M N M M M M M M M M x m x m x M x n x x n ; . o . . . @.@.", -"@.@.. . . . . 9 x x x x n m m m m M m x M M M M M M M M M N N M M N N N N N N K B K K K K P P K P P P I P I I I I I I I I I I Y Y I Y Y Y E x . . . . F +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .@ . o r _ ( ( ( ( ( ) ( ) ( ( ( ( ) ) ( ( ( ( ) ( ( ( ( ( ( ( ( ( _ _ Y 2 . o o . C +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.D . . . o . # k N L I I I Y R R Y I I I I I I P P P P P P P K K K K K B N N N N N M N M M N M N M M M M M M x x M x M M x x n n x n x 9 . . . o o @.@.", -"@.@.o o o o . i x x x x n n m x m x m M m M x M M M M M M M M N N N M N N N N N N B K K K K P P P P I K P I P L I I I L Y Y I Y Y Y Y Y Y T L + . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< o : ^ ) ( ( ( ( ( ( ( ) ( ( ) ) ) ) ) ) ) ) ( ) ( ) ( ) ( _ _ ~ u + . . . . Z +.+.+.+.+.+.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+...@ . . . . o o o O + $ : 0 e l P R R I I I P I I I P P P P K P K K B K N N K K M N N B M N M M M M M M M M M M M M x m m m m n x x x i o o . . . @.@.", -"@.@.. . . . o n n z x x m x x m m M M x M M m M M M M N N M N M M N N N B N N K K K K K P K P P P I K I I P I I I I I Y I I Y I I Y Y Y Y T T : . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . + T _ ( ( ( ( ( ) ) ( ) ) ) ) ) ) ( ) ) ) ) ) ) ) ) _ _ ~ u $ . o . + H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.' . . . . . . . . . . . . o $ 1 k K Y I I P P P P P P P K P P K B N K N K N N N N B M M M N b M M M M M x M m x M m x m x n m x x n . o . . o @.@.", -"@.. o . . o O m x x x n n m m m m m m M m M M M M M M M N M M M M N N N N N N B K B K K K K P P K I P P P I I I I I I I I Y I Y Y Y Y Y Y Y ~ q . . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . N _ ( ( ) ) ) ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) _ } _ U r # . . . o . 6 [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...* . . . . . . . o . . . o . . $ q M R I I I P P P P P K K K K K B K N N N N M M N M B M M N M M M M M x M M x m M m x m n x x n O . o X . . @.", -"@.. . o . . $ n x x x m m x m m M x M m m M M M M M M M N M N N N N M K N K N K K K K K P P P P P I P I P I L I I I I Y I Y I I I Y Y Y Y T E x . . . . F +.+.+.O.+.+.+.+.+.+.O.O.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.] X . . u } ( ) ) ) _ ) ) ) ) ) ) ) ) ) _ ) ) _ | } ~ c 2 o . . . . . @ Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` 7 3 = + . . . . . . o o o . . O 9 M R I P P P P K P B K K K N N N K N N M N N M M N M M M M M M M m M x M m m m m m x x x n $ X . . . o @.", -"@.o . . o . 1 n x x x n x m x M m x m M M m M M M M M N M M M N N N N N N N N K K K K K K P P P P P I P I I P I I I I I Y I Y Y Y Y Y Y Y Y R L O . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.: . 5 _ ) ) ) ) ! ) ) ) ) ) ) ) _ _ _ } } ^ A q $ . . o . . O d .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...[ ] ` ! Q F h t 4 * . . . o . . + q K I I P P P P B K K B K K N N N N N N M N M N M N M M M M x M m M m m m m x m x x x n 1 . o o . . @.", -"@.. o . o . 9 n x x x n x m x M m M M m m M M M M M M N M N N M N N M K B N B B B K K P K P P P P I I P P I I I I I I Y I Y I Y Y Y Y Y Y T R T : . , O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 o $ ~ _ ) ) ( ( ) ( ) } ) _ } _ } ( L u * . o . . . + d ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...! C < o o o . . % z Y P P P K B K K K B K N N N N N N M N M M M M M M M M M m m x M m x m x n m x n n 9 . . o . . @.", -"@.. o . . o e x x x x x m m x m x M x M m M M M M M M M M N M N M M N B N B B B B K K K P P P P P P P I P I I I Y I I I I Y Y Y Y Y Y Y Y T Y E w . . . O { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . . X U _ ) ) } ) ) ) } } | _ ~ L t : X . o . . . . * j [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` d @ . . . . . O e I P P P P P K K N B K N N N M M B M N M N M M M M m M M M M x M M m m m m x n n i o . . . o @.", -"@.o . . o o a x x x n m m x m m M x M M m v M M M N b N M N N M N N N N N N K K K K P P P K P I P P P I I I I I I Y L Y I Y Y I Y Y Y Y T Y T ~ l . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . . l } ) _ } } } _ W L f < # . . . . . . . + 4 G ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .h + . . o . . 9 K I K K K K K B B B N B N N N N N N N M M M M M M m m M m M x m x x x m x x x p . . o o . @.", -"@.. o . . . n x x x x n n m m m x M x M M M m M M M M M M M N M N N N K N K B B B K B K P P P P P I I P P I P I I I I I I Y Y I I Y Y Y Y T R R K O . . g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...@ . o q | _ ( T b r 1 $ . . . . . . . . . , j ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .s . . . . > B I K K K K B B B N N N N M N M M M N M M M M M M M M m m M m m m m m x x n m o . . . . @.", -". o . . o . n n x x x m m x M m M x M m m M M M M M N M N N N N M N N N K N N K K B P P K P P P P I P I I I I I I I I Y Y I Y Y Y Y Y Y Y Y T R Y ; . 3 O.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.3 . ; l 5 ; X . . o . . o . . * g ! O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.G * . o . . ; B I B K K K N N K N N N N N B M M M M M M M M M M m M m m m m m m x n x n m o o o . o . ", -"o . . o . $ m n x x n m x m m m m M m M M M M M M M M M M M N M N N N N N N B K K K K K P P P P I P I P P I I I I Y I I I Y Y Y Y Y Y Y T T Y E ~ 2 . o . + .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d o o . . . o . . o . . X : d Q X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .4 . . . ; B P K K B K K N K N M M N M N M N B M M M M M m M M m m M m x x m n x n m $ . . . o . ", -". o o . . $ n n x x n x m m m m m m m M M M M M M M N N N M M B M N N N N N K K K K K K P P P P P P I P I P I I I I Y I I Y Y Y Y Y Y Y Y T R T ~ k . . . Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . . o . o . X & 7 S ' O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.s o . . : K P K B B N K N N N N M N M M N M M M M M M M m M m M m m m m x m x n n $ . . o . . ", -". . . o o ; n n x x m n x m m m m M m m m M M M M M M M M M N M N N N N K K K N K K K P K P P P I I P I I I I I I I I Y Y I Y I Y R Y T Y R Y T E K o . o j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.{ X . . . . . . + , d D ' X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . o . . 9 P K N K N N N N N N N M N N M M M M M M M M m m M m m m m m m n x n n ; . o . . o ", -"o . . . . 9 n x x x n m m m m m M m m M M m M M M N M N N M N N N N N K N B B K K K P K P K P P K I P I I I I I I Y I I I Y Y Y Y Y Y Y Y T R T E Y $ . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j X $ 6 j Q .O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . . . . e I B K B K N N N N N N M N M M M M M M m M m M m m m m x x x n x m n 9 . . . . o ", -"o . o . . 1 x x x x m x m x m M m M M m M M M M M M M M M N M N N N N N N K N B K K P P K I P I P P I P I I I I I I Y Y I Y Y Y Y Y Y T Y T T R R ~ 1 . . * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H j Z ! ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.7 . o . O l P B B N N N N M B M N M M N M M M M M M m M m M x M x m m m x x n 9 . o o . . ", -". . . o o 9 z n z x n n x m M m m m M m m M M M M M M N M N N N M N N K N K K B K K K K P P P P I P I I P I I I I I I Y I Y Y I Y Y Y Y Y R T T R ~ y . . . . ` +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X., o o * B K K K N N N N N N M N N M M M M M M M x m v M m M m m m m x x x 9 o . . o . ", -". o X . o e z z x n m n x M x m m M M M M M M M M M M M M N M N N N N N N K B K K K K P P P I P P I I P I I I I I Y Y I Y Y Y Y Y Y Y T Y T T T T ~ b . . o . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] + . o . w I K N N N N N N M N M M N M M M M M M M M M m m x x x x m x x x e . o . . o ", -". . . o . i z n x x n m m x m m x M m M m M M M M M N M M N N M N N N N N K N B K K P P P P P P K I P I P I I I I I I Y L Y Y Y Y Y Y T Y R T R R E I # . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.G . . . . O x K N N N N N N M N N M M M M M M M M M M x m M M x m n n x n x i o . . . o ", -"o o . . . i z z x x m x x m m m m m M m M m M M M M N M M B M N N N N N N B K K K K P K P P P P I P P I I I I I I Y I I Y I Y Y Y Y T Y R Y T T R E E , o , O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 . o 2 K K N N B M N N M M M N M M M M M x M x M M x m m m x m x x x i . o o . . ", -". . . o . i x x x x m n x m m M M x M m M M M M M M M N M B N N N N N N N K K B K K P K P P P I I K I I L I I I I Y I Y Y Y Y I Y Y T Y R T T T R E ~ q o . O [ +.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+. .@ . o . . z P B B M N N N M N M M M M M M M M m M x x M x m x m m x n n i o . . . o ", -". o . o . i x x x x x m x m x M x M m M M v M M M M M M M M M N N N K N B K K K K K P K P P P P P I P I I P I I I I I Y Y I Y Y Y Y Y R R Y R T E R ~ l o . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . o , K K N B N M N N M N N M M M M M m M M M M x M x m m x x x n i . . o o . ", -". X . . o i n x x x n m M m M x M x M M m M M M M M N B N N M N M N K N N B K N K K P P P P P P I I P P I I I I Y Y I I I Y I Y R Y Y Y Y T R T R E ~ I O . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.= . . O x K K N N M N M M N M M M M M v M M M x M x m x m x n x x x i o . . . . ", -"o . o . . i n x x x m n x x x M m M M m M M M M M M M M M N B M N N N N N K B K K P K P P P P I K I I I I I I I I I I Y Y Y Y Y Y Y T Y R T T T R E E Y ; . 4 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . o . . 0 P N N N N N M N M M N M M M M M m M m m M m m m m n x x x i . o X . o ", -"o . . . . i z x x x m x x m m M m M m M M M M M M M M M N M M N N N B N N N B K K K K P P P P P I P P I I I I I I Y Y I Y I Y Y Y Y Y Y R Y T T R E E ~ 9 . . @ ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+...& o $ B B N N N N M M M N M M M M M M M M x M x m x x m n x x x i o . . o . ", -". . o o . i z z x x n m m x m m m m M m m m M M M M N N M N N M N N N N K B K K K K K P P K I P P P I I L I I I I I I Y I Y Y I Y Y T T T T R T T R E ~ u . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...] Q H G C d 7 6 4 4 4 6 t g S Q ] X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . o o z K N N M N M N M N M M M M v m M M x x M x M m x m x x x i . o . o . ", -"o . . . o i z z x x x m m x m m m M M M M M M M M M M M N M N N N N N N N K N K K K K P P P P I I P I P I P I I I Y I I Y Y Y Y Y R Y Y Y R R T T R T ~ K o . . V +.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...` Q S s 6 < = O . . . . O = 6 Z ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.Q o . o . 9 K N N M N N N M M M M M M M M M m M x M m m m m m x x x i o . o . . ", -"o . o . . i z x x x m m x m M m m m m M m v M M M N N M M N M N M N N N N B B B K P K P P P P P P I P I I I I I L I Y I Y I Y Y Y Y T Y Y T T T T E T E Y $ . o 8 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.] H V 7 < $ . . . . . o o o . . o . . o o . . o . + 7 Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= . ; B B N N N M M M N M M M M M M m M m m m M x x m n x x x i . . . . o ", -". . . o o i x n x x m n x m M m M M m M M M M M M M N M M N N N N N N N K B N K K B K P P P P P P P I I I I I I I I Y I Y Y Y Y Y Y Y Y T Y R T T E R ~ E 1 . - o.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.! S t < + . . o . o o o o . . . . o . o . . 3 Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.t . O M B N M N M N N M M M M M M M M M x M x m m x m m x n n i . o o . o ", -". o . . . i z z x x n m x M x m m m M m m M M M M M N M M N M N N N N N N N K K K P K P P P P I P I P I P I I I Y I I Y I Y I Y Y Y Y T Y T T R T R T T ^ q . O [ +.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.' S t = o . o . . . o . . . o + $ ; : : : : : : ; * $ o . X . . . t [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . o . o i K N N N M M M N M M M M M m m M M M m x M x m x x x n i o . . . . ", -". o o . . e x x x x m x n x m m x M m M M M M M M M M M N M N M N M N K B B B K K K P K P P P P P P I P I I I I I I I Y Y I I Y Y Y Y Y Y R T R T T E R ~ x o . . . G +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.] F s : o . . . . o . . . o + * : 5 u l v L T ^ ^ ( ^ ^ ( ^ ^ ^ ~ T A k 2 $ . . . . . $ F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] O . o 9 K N N M N N M M M M M M x M m M x m m m x m m n x n x e . . X o . ", -". . o . . 9 x x x x n m m m m m m m m M M M M M M M M N M M N N N N N N B B B B B B P P P P P P I I P I I I I I I I Y I Y I Y Y Y Y Y T Y T T T T R E T ~ I O . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.] F s , o . . . . . . . . + * 2 u c N T ( ) _ } _ } _ _ ) ( ) ( ( ( ( ^ ^ ( ^ ) ) ( Y f : . . . o . d X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o., . . : B B M N N M M N M M M M M M M m M m m m m m x m x x x 9 o . . o . ", -"o . . o . 9 x z x x n m x m m m M m M m M x M M M M M M N M M N N N N N K N K K B K P P K P P I K I P I I I I I I I Y I Y I Y Y Y Y Y T Y R T T T R R T E T * o < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .7 X . . o . o . . . @ < u b T ) _ | | } _ _ ) ) ) ) ( ( ( ( ( ( ( ( ^ ^ ^ ^ ^ ~ ^ ^ ~ ^ ( W c ; . o . . 3 X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t o # M B M B M N M M M M M M M M m M m M m m m m x m x x n 1 . o . . o ", -"o . . o o 2 x x x x n m x m m m x M m M M M M M b N M N N M N N M N N N N K B K K K K P K P P P I K I I P I I I I I I Y I Y I Y Y Y Y Y T Y Y R T T E E E ~ w . . $ ..+.+.+.+.O.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 . . . o o . . # 2 k L ^ } | | } _ _ ) ! ( _ ) ) ) ) ) ( ( ( ( ( ^ ^ ( ^ ^ ^ ^ ^ ^ ~ ^ ~ ^ ~ ^ ( E u O . . . 3 o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . . O x B M B M M M N M M M M M m M m M m m m m m m n n x n 9 . . o . . ", -". . . . . ; z n x x n n m m m M m M x m m M M M M M M N M M N M N M K N N N N K K K K P P P P P P I P K P I I I I Y I Y Y U I Y Y Y Y Y Y Y R T T T R T E / p . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= . . o + 1 f L ^ _ | | } _ _ _ _ ) ) ) ) } ( ) ) ) ( ( ( ( ( ( ( ( ( ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ~ ^ ~ ^ / L : . . . 7 O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.! . . . . y K M M N M N M M M M M M M m M x m m m m x m n x x n ; o o . o . ", -". o o . . $ n x x x x m m x m m M x M M M M M M M M M M M N N N N N N N N N B K K K K K K P P P I K I I I L I I I I I I I Y Y Y Y Y Y Y T Y T T T T E E R ~ b O . . C +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< o . . , u K ~ _ | | } _ _ _ _ _ ) _ _ _ ) _ ) ) ) ) ( ) ) ( ( ( ( ( ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ W ^ ~ ~ ~ ~ ~ / T q . . . . S +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ O . . 9 P N N M M N M N M M m M M m M M M m x m x m x x x n $ . . . o . ", -". o o . o $ n n x x n n x m x M m m m M M M v M M N M M N M M N M N N N K K B N B K K P K P P P P I P I I I P I I Y I I I Y I Y Y Y Y Y Y Y R R R T R T R ~ Y $ . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z o . o L | } } } _ _ _ _ _ _ ) _ ! _ ) _ ) ) ) ) ) ) ) ( ) ( ( ( ( ^ ( ^ ( ^ ^ ^ ^ ^ ^ ~ ~ ~ ^ ~ ^ W ~ ~ E ~ ~ / y . . . . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.O.= . . > K N N M M N M M M M M m M m m m m m m x m x x x n m $ o . o . . ", -". . . . . . n n x x x n m m x m M m M m m M M M M M M N M M B M N N N N N N K K B K K K P P K P P P P I P I I I I I I Y Y I Y Y Y Y Y Y Y T Y T T T R E E R ~ 1 o = O.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` o . . l | ) ) _ _ ) _ ) ) _ ) ) } ) ) ) ) ) ) ) ) ) ( ( ( ( ( ( ^ ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ~ ~ ~ ~ ~ ~ ~ E ~ ~ ~ 1 . o g +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t o . % M N M N M M M M M M M M M M M x m m m m n x x x n m . . o . . o ", -"@.o . o o . m n x x x x n m m m m m m M M m m M M M M M M N M B N N M B N N N B K K K P P K K I P I I P I I I I I I I I I Y I Y Y Y Y Y T Y T R R T T E R E ~ y o . o [ +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.$ . . 3 } ) ) ) _ ) _ _ ) _ } ) ) ) _ ) ) ) ) ) ( ( ( ( ( ( ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ~ ^ ~ ~ ~ ~ ~ ~ E ~ ~ E E ^ K # . . $ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g o . + M B M N N B M M M M M m m M x M m x x M m m n x n m . X o . . @.", -"@.. . o . . a n x x x m m x m m m m m M m M M M M M M N M M N M N M N N K N N K K K K K P P P P P K K I P P I I I I I Y I I Y I Y Y Y Y Y Y T Y T Y T T E T ~ l . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 . = ^ } ) ) ) _ ) ) _ ) ) ) ) ) ) ) ) ) ) ) ) ( ( ( ( ( ( ^ ( ( ^ ( ^ ^ ^ ~ ^ ^ ^ ^ ~ ~ ^ ~ ~ ~ ~ ~ ~ E ~ E ~ ^ q . . . D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . . o l B M M M M M M M M M M M m M x M M x x n n x n n a o . . . o @.", -"@.o . o o . i x x x x n n m x m m M m m M M M M M M M M M M N N N N N N B N K B K K K K K P P P P I K I P I I I I I I I I Y Y Y I Y Y Y Y T Y Y T R T E R E ~ L # . . . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.V o . o Y } ) ) ) ) ) _ ! ) ) ) ) ) ) ) ) ) ) ( ( ( ( ( ( ^ ( ( ^ ( ^ ^ ^ ^ ^ ^ ~ ^ W ^ ~ ~ ~ ~ W ~ ~ ~ ~ T ~ E E ~ I O . o 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . o z B N M N M M M M M M m m M m m m m m x n m x x x i o . o o . @.", -"@.. . . . . 9 x n x x n n m m m m m m M M m M M M M M M M N N M M N N N N N N K K N K K P K P P P P I P P I P I I I I I I Y I Y Y Y Y Y Y Y Y T Y T R T T E E Y ; . < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.H . . . . v } ) ) ) ) ) ) _ ) ) ) ) ) ) ) ( ( ( ( ( ( ( ( ( ( ^ ( ^ ^ ^ ^ ^ ^ ~ ^ ~ ^ ^ ~ ^ ~ ^ W ~ ~ ~ ~ ~ ~ E E E E ~ 1 . . @ .+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . o p B M M M N M M M M M M M m M M m m x m m n x x x 9 . . . . . @.", -"@.. o . . o 1 n z z x x m x m m M m m M m M M m M M M M M M N M M N N N N K N K B K K K K P K P P I K I I P I L I I I Y Y I Y I I Y Y Y Y T T Y R R R T E R E ~ q o $ .+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ o r _ ) ) ) ) ) ) ) ) ) ( ) ) ( ( ( ) ( ( ( ( ( ( ^ ( ( ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ~ ^ ^ ~ ~ ~ ~ ~ ~ E E E ~ E E E ~ k . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.[ X . . . r B M N M M M M M M m M m M m m M m m n n n x x n 1 . o . o o @.", -"@.. o . . o $ n z n x x n m m x m m m m M m M M M M M M N M M N N N M N N N N N N K K K K K P P P K I P P I I I I I I I I I I Y Y Y I Y Y Y Y Y T Y T T R E R ~ p . . . ` +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.- o , ) ) ( ) ) ) ) ) ( ( ) ( ) ( ) ( ( ( ( ( ( ( ^ ( ^ ^ ^ ( ^ ( ^ ^ ^ ^ ^ ^ ~ ^ ~ ~ ~ ~ W ~ ~ ~ ~ E ~ E E E E ~ K O . o V +.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.[ + . . w B N M M N M M M x M M M x m M x m x m n x x x n $ . . . . . @.", -"@.o . . o . o m x x x x m x m m m m M m M m v M M M M M M M N M M N N N N N N K B B B K K P P P P P P I P I I I I I I I I I I Y Y Y Y Y Y Y Y T Y T T T R E T ~ b X o S +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.d . $ T _ ) ( ) ( ( ) ( ) ( ( ( ( ( ( ( ( ( ^ ^ ( ^ ( ^ ^ ( ^ ^ ^ ^ ^ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E E E E E E ~ Y * . 8 +.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.O.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ o . . . w B M M N M M M M M M m m M m m m m m x n x x n m O . . o o . @.", -"@.@.o . . o . n z x x x x m m x m m m M m m M M M M M M M B M M M N M N N K N N B K B K P K K K P P I K P I K P I I I I I I I Y Y I Y Y Y Y Y Y Y R Y R E R R ~ Y $ . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.F . o . A _ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ^ ( ( ( ( ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ^ ~ ~ ^ ^ ~ ^ W ~ E ~ ~ ~ E ~ E E E E E E E , . . . : O.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . o . 0 B M M M M M M M M m M M m m m M x m x m x x x n . o o . . @.@.", -"@.@.. . . X . i n x x x x m m x m m m M M m x M M M M M M M M N N M N N N B N K B K K K P K P P P I P K I P I I I I I I Y I Y I I I Y I Y Y Y Y Y T T T T T R E E 1 o . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . . k _ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ^ ( ( ( ^ ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ E E E ~ E ~ E E T R E w . & X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.[ X . . q K B M M N M M M v M M M m m m m x m m x x x x i . . . . o @.@.", -"@.@.. o o . . 9 z z x x x x m m m m m m m M M M M M M M M N N M M N N N M K N N B B B K K K K P K K I I K I P I I I I I I I I Y Y Y Y Y Y Y Y Y Y Y R Y T T R E ~ y . . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.* o 2 _ ) ( ( ( ( ( ( ^ ( ( ( ^ ^ ( ( ( ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ~ ^ ~ ^ ~ ~ W ~ ~ ~ ~ W E ~ ~ E E E E R E E E ~ k . . @ ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] o . . o p K M M M M M M m M M m m M m m x m m x x x x x 9 o X . o . @.@.", -"@.@.o . o . . ; n x z n x n n m x M m M x M m M b M M M N M M M N M N N M N N N B B K K K K K K K P P P P I P I I P I I I Y I Y I Y Y I Y Y Y Y T Y R T T T T R ~ x . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 . ; ^ ) ^ ( ( ^ ^ ( ( ( ^ ( ( ^ ( ( ( ^ ^ ( ^ ^ ^ ^ ^ ^ ~ ^ ^ ~ ^ ~ ~ W ~ ^ ~ W ~ ~ ~ ~ E ~ ~ E E E E E T E R ~ x . . @ X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . o k B M N M M M M M v m M m m M m m x x m x n n n ; . o . . o @.@.", -"@.@.. . . . o + n z z x x n x m m m m m x M M m M M M M M M N N M N M N N B N N N N B K B K P K P P I P I P I P I I I I I I I I I I Y Y Y Y Y Y Y T Y T Y R T E E L + o d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C o . O L _ ( ( ^ ( ( ( ^ ( ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ W ^ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ E ~ E E E E E E T E E E ~ k . . @ ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.V o . o x B M N M M M M M M M m M m m m m m m n x n n n + . . . o . @.@.", -"@.@.. o . o o . n n x x x m m m m m m m M m M M M M M M M M M M N M N M N N N K K N K B K K K P P P K I K P I I P I I I I I Y I Y I Y Y Y Y Y Y Y Y Y R T R T T E T ; . < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.Q . . o c _ ( ^ ( ^ ( ^ ( ^ ( ^ ( ^ ( ^ ^ ( ^ ^ ^ ^ ^ ~ ~ ^ ^ ~ ^ ^ W ~ ~ ^ ~ ~ ~ E ~ E ~ ~ E ~ ~ T E E E E R T E E w . o * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.O.+.+.+.+.g o . + x N M M M M M M M x M M m m m m x m n m x x n n . . o o . . @.@.", -"@.@.@.o . . . o e n x n x x n x m m m m m M m M m M M M M M N M N M M N N N N N N N K K K K K K K P P P P I K I P I I I I I I I I Y I Y I Y I Y Y R T Y T Y T R R E q . . $ ..+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . . . q _ ( ^ ^ ( ^ ( ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ^ ~ ~ ^ ~ ~ ~ W ~ ~ ~ ~ T ~ E E E E E E E T E T E E : . - O.+.+.+.+.+.+.+.+.+.+.O.+.O.+.+.+.+.+.+.O.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o $ M N M M M M M M M M m x m M m m x m m x x x n e o . . . o @.@.@.", -"@.@.@.. o . . . > n n z x x n m x M x M M m m M M m M M M N M M M M N N N N N N N N B K K K K K K P P P P P P I I I I P I I I I I I Y Y Y Y Y Y Y Y Y Y Y T T R T ~ k . . . Q +.+.+.+.+.+.+.+.+.+.O.+.O.+.+.+.+.+.+.O.O.+.+.+.+.+.+.+.+.+.+.+.< o , ^ ^ ^ ( ^ ^ ^ ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ~ ^ ~ ^ W ^ ~ ^ ~ ^ ~ W ~ ~ E ~ E ~ ~ E E E ~ E E T T E T E ~ N o . . s +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< o > B N M M M M M M M M m M M m m x m m x x x x x 1 o . . o . @.@.@.", -"@.@.@.o . . o . $ n z x x x x m m m m m m m M m M v M M M M M N M N N M N N M B N B B B B K K K K P P P P I P P P I I I I I I I Y I Y I I Y Y Y Y Y T T Y R Y T R ~ M O . . Z +.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . $ T ) ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ^ ^ ^ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E E ~ E E E R E E E R E R E 2 . o . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+...+ . . 2 K M M M M M M M m M M x m x M M m x m x x x n $ . o . . . @.@.@.", -"@.@.@.. . o . o o n x x x x n m m x m m m M m M m M M M M M M N N M M B M N M N N N B B K B K K K P K I P P P I P I I L I I I I I Y I Y I Y Y Y Y Y Y Y Y Y R T T E I $ o 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . . b _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ^ ^ ^ ~ ^ ^ ~ ~ ^ ^ W ~ ~ ~ W ~ ~ E ~ E ~ E ~ ~ E E E T E E T R ~ b o . . * X.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] . . . . w B M M M M M x M M m M m m m m x m n n x x n n . . o o . o @.@.@.", -"@.@.@.@.. o . . . e x x x x x n n m m m m m M m M M m M M M M M M M N M N N N N N K B B B K K K P K P K P P P P I P I P L I I I I I I I Y I Y Y Y Y Y Y T Y R T T R E 1 o = o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.' o . . p _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ W ^ ^ ^ ~ ^ ~ ~ ^ ~ W ^ ~ ~ ~ ~ W ~ ~ ^ W W ~ E ~ E E E E E E T E T E R E R 1 . o C +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D . . . a B M M M M M M M M M x M m m m m x m x x n n e o . . . . @.@.@.@.", -"@.@.@.@.. . o . . > x x x n x n n n m m x M m m M M M M M M M M N M N N N N N N N N N K K N K K K K P P P P P I K I I I I I I I I Y I I Y Y I Y Y Y Y Y Y Y T Y T T ~ u o . O ' +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.o.= o 2 ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ^ ~ ^ ~ ^ ~ ~ ^ ~ ^ W ~ ^ ~ ~ ~ ~ ~ ~ E ~ E ~ ~ E E E E E E T E R E T E ~ u o . . * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . . + x N M M M M M M M m M m x m m m x m m x x x x > o . o o . @.@.@.@.", -"@.@.@.@.o . o . . + n n x x x n m m m m M x m M M m m M M M M M M M M M N M M N N K N N B B K K K K K P K P P P I P P I I K I I I I I Y I Y I Y Y Y Y Y Y Y Y Y Y R ~ x . . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.6 o ; ~ / ^ ^ ^ ~ ~ ^ ~ ^ ~ ^ ^ ^ ~ ^ W ^ ^ ~ ~ ~ ^ ~ W ~ ~ W ~ ~ ~ ~ E ~ E E E E E E E T T R E R R ~ v O . X . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< . ; M N M M M M M M M M M m M m m m x m x x x n n O . . . . . @.@.@.@.", -"@.@.@.@.. . . o o . a x x n x x x m m x m M M m m M M M M M M M M N M M M B N N N N B N N K K K K K P P K P P I K I I P I I I I I I I I Y I Y Y I Y U Y Y Y Y T Y T E L + o s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . . O I ( ^ ^ ~ ^ ^ ^ ^ ^ ^ ^ ~ W ^ ~ ^ ~ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E E ~ E E E E T E E E T E ~ K $ . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ O . o 9 B M M M M M M v M M x x M m m m m n x x x n a o . o o . o @.@.@.@.", -"@.@.@.@.@.o . . . o 9 n z z x x m m x m m m x M M m m M M M M M M M N N N M M N M N K N N B K K K K K P P P P P I P P I P I I I I I I Y I I Y I Y Y I Y Y Y T Y T R R Y ; . . , +.+.+.+.+.+.+.O.+.+.+.+.+.+.O.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . o l ( ~ W ^ ~ ~ ^ W ~ W ^ ~ ^ ~ ~ ^ ~ ~ ~ ~ ~ W ~ ~ ~ E ~ ~ T E ~ E ~ E E E E ~ T E E E T R ~ K $ . o . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D o . . y B M M M M m M M m M x M m m m x m n x x x n 0 . . . . . @.@.@.@.@.", -"@.@.@.@.@.. . o . . ; n z n x x n m m x M m M x M m M m M M M M M N M M N M N N N N N N N K B N K K K K P P P P K I P P I P I I I I I L I I Y Y Y I Y Y Y Y Y Y Y Y T E q o . + { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+. .@ . o r ( ^ ~ ^ ~ ^ W ~ ^ ^ ~ ^ ~ ~ ~ ~ ^ ~ ~ ~ W ~ E ~ E ~ ~ E ~ E E E E E E E E E R R T R E ~ K $ o o X H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 . . O m B M M M m M M M m m x M m m x x m n x n x n ; . o o . . @.@.@.@.@.", -"@.@.@.@.@.o . . o . . n z z x x m x n m x m m m m M m M v M M M M N M N M N M M N N N K K N B K P K K P K P P P I K P I P I P I I I I Y Y I I I Y I Y Y Y Y Y Y Y T R E z . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< . : ^ ^ ~ ~ ^ ~ ^ ~ ^ ~ ~ ~ ^ W ^ ~ W ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E ~ E E E E E E T T E E R ~ ~ v # . . . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+. .+ . . : N M M M M M M m m M M m m m m m m m m x x x z . . o . . o @.@.@.@.@.", -"@.@.@.@.@.@.o . o . . w z z n x x m x x m x m m m M m M M M M M M M N M N M B N N N N N N K N K B K K K P K P P P I P I I P I I I I I I I I Y I I Y I Y Y Y Y Y Y T Y ~ N O . j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . $ Y ^ ^ ~ ~ ~ ^ ~ ~ ~ W ~ W ~ ~ ~ ~ ~ ~ ~ ~ ~ E E ~ E E E ~ E E E ~ E E T E E R E ~ R u o . . . . g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . . w B M M M M M M m M m x M m M m x m x x x x x w . . . o . @.@.@.@.@.@.", -"@.@.@.@.@.@.o . . o . % n z z x x n m m x M m M m m M M m M M M M M M M M N M M M N N N N N N K K B K K K P K P P P P P P I P I I I I I I I Y I Y I Y Y Y Y Y Y Y Y Y R Y * o . 3 +.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . . v ^ ~ ~ ~ ~ ~ W ~ ~ ~ ~ ~ ~ W ~ ~ ~ ~ E E ~ ~ ~ ~ ~ E ~ T E E E E E E E T T ~ ~ N : . . o . h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O., . . + x N M M M M M M M M m M m m x m m n m x x x n ; o o . o . @.@.@.@.@.@.", -"@.@.@.@.@.@.o o . . . o z x x z x x n m m x m m m M M m M M M M M M M M M B N N N N N N N K N K B K K K K P K K P P P I P I I P I I I I I I I Y I I Y Y Y Y Y Y Y Y Y T R 2 . $ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` . o u ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ T ~ ~ ~ ~ E ~ E E E E ~ E E ~ E E E R E R R ~ ~ I q o o . o o Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . o . > B N M M M M M M m M M x M m x m n m x n n n a o . . o . . @.@.@.@.@.@.", -"@.@.@.@.@.@.@.. . o . . 9 n z n x x x x m m m m m m m m M m M M M M M N M M M N M M N N N N N N B B B K K K P P P P P P P I P I P I I I I I I I I Y Y I I Y Y I Y Y Y Y ~ k . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= o 9 ^ ~ ~ W ~ E ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E E ~ ~ E E E E E E E E E E ~ ~ I r $ . o . . * H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< . . o i B M N M M M M m M m m m m M x x m x x x n n 9 . o . . o @.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.. . X o . # n x x x x x m x m x M m m M M M m M m M M M N M M M M N N N N N N B B B B B K K K P K P P P P P P P I I K K I I I I I I I I I Y Y Y Y Y Y Y Y E B o . o g +.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.6 o . * E ~ ~ ~ ~ ~ ~ ~ ~ ~ E ~ E ~ E E ~ E E ~ E ~ E E E E E R E R ~ ~ ~ P q $ . . . . 7 .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.S . . ; M M M M M M M M m M x M M m x m m n n x x x n $ . o o . . @.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.. o . o . o i x n n x x m m x m m m M x M m v M M M M M M M B M N N M M N N N M B N B B K K K K P P P P P P I P P I I I I I I I I I Y I Y I I Y I Y Y Y Y Y Y ; . < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.O.+.+.+.+.+.+.V . . O K ^ ~ ~ ~ T E ~ W ~ ~ E ~ ~ E ~ E ~ E E E E E E E E E ~ ~ ~ R v 2 + . . o . . * F +.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ + o . . y B M M M M M M x M m M x m m m x m n x x x x p . X . . . . @.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.. . . o . 1 n n x x x n m m x m m M m M M M m M M M M M N M M M M N N M N N N N B K N K K K K K K P P P P P P I P I I I I I I I I I Y I I Y Y Y Y Y Y Y Y E 0 . . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.Q o . . l / E E ~ E ~ ~ E ~ E ~ E ~ E E E ~ E E E E E E E ~ ~ E I y ; o o o . . O h ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.3 o . > N M M M M M M M M m x m M m m x m m x x x x n 1 . . . o o @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.. o . o . o m n x x x x x m m m m m m m m M m M v M M M M M N N M N N N N M N B N N B K B K K K P K K P P P I P I P P I P I I I Y I I Y I Y I Y Y I Y Y Y E l . . . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ + . . q ^ E ~ E ~ E E E E ~ E E E ~ E E E E E E E ~ ~ ~ I k 1 O . o o . . O s [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . o . O z B M M M M m M m M M M m m M x m m n x x x x n o o o . . . @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.. . . . . . w n x x x x m n m m m m M m m M M M M M M M M M M M N M M B N N N N N K N K K K K K K K P P P P P P K I I P I I I I L I I I I I Y Y I Y I Y Y R K # . . s +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< o : ~ ~ E ~ E E E E ~ ~ E E E E E E E ~ ~ ~ ~ I l 2 + . . . . . . + g [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.V . o . . w B N M M M M M M M M x M x M n m x x m x x x x w o . . o . o @.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.o o . o . $ m x x x n x n x x m m m m m m M m M M M M M M N M M N M M N M N N N N K N B N K K P P P K P P I P I K P I P I I I I I I I I Y I I Y I Y Y Y Y Y ; o = +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t o . # I ~ ~ T ~ E E E E E E E E E E ~ ~ ~ Y x 9 $ . . . . . . . , Z .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.S . . . o > M N M M M M v M x M x M x m m m x m m x x x x n % o . . o . @.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.o . o o . . a z z x x x n m x m m m m m M M m M M M M M M M B M N M B M N N N N N K N N B N K B K P K P P P P I P P P P I L I I I I I I Y I Y I Y I Y I Y R q . . O ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D . . o v ~ E E E E E E E E E ~ / ~ E K u 2 $ . . . . . o . + t Q o.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D o o o % M B M M M M M M M M M x M m M x M x m n x x n x i . . o . . o @.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.. . . . . : n x z n x m x m m x m M M x m M m M m M M M M M M M N M N N N N N N N K K B K K K B P P P P P P K P I I I I P I I I I I I I I I I Y Y I Y Y E l . . o F +.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.` . . . y ^ E E E ~ ~ ~ ~ ~ E K z w * O . . . . . O 4 D .+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . . . o + z B M M M M M m M m m M M m m m m x m n n x x x n > o o . o . @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.o . o . . o a z x z x x n m m m m m x M M m M M M M M M M M M N M M N M M N N N N N N K B K K K K P K P P P P P I P P I I P I P I I I I I I Y I I Y I Y Y K O . . h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.* . . 2 ~ ~ ~ ~ E R b u 9 * O . . . . . o o . X 3 V [ O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.V . o o . O p B N M M M M M M m M m M m m m m m x m n x x x n a . o . . o . @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.. . o . . o > z z n x x n n x m m m m x M m m M m M M M M M M M M N M N N N N N N N N N B K B K K K P K K P P P P P P P I P I I I I I I I I I I Y I Y Y Y I ; . . 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 . . $ Y I x r 1 # o . . . . . . . . . o < j ' O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.X.t . o . O p B N M M M M M M M M m M x M m m x m m x n x n z n 1 . . . o . . @.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.. o . . . o n z z z x x n x m x M M M x M M m M M m M M M N M M M N M M N M N N N N N K N B B K K K K P P K P P I I K I I P I I I I I I I I I Y I Y I Y Y 1 . . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o $ + . . . . . o . . $ 6 C ] O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] < . o + k K M N M M M M M M M m M x M x m m m m n m x x x z a o o . o . . @.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.. . X o . . 9 x z n x n n n m x x x m M x m M M m M M M M M M N M N M N N N N N N N B N K B K B K K K P K I K P P P K I P I P I K I I I I I I I I I Y Y T r . . @ .+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.J . . o o . . . . . . . . + < d H .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H @ . o o $ x K M N M M M M M m M M m x M x M x M m x m x x x z x 9 . o . . . o @.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.o . . . . o n x z z x x m m m m x M m m M m m M M M M M M N M N M M N N M N M K N N N N B B K B K K K K K P K P P I P I P I I I P I I I I I I Y I Y I Y z . . . o ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ X . . o o . . . * 6 h Q { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.X.g . . . . . ; m B M N M M M M M M M M m M M m M x m x m n n x x x n z O o . . . o @.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.. . o o o . 9 n z n x x x x x m x m m m m m M m M m M M M M b M N M M M N N M N N N N N B B B K K K K K P P K P P P P K I P I K I I P I I I I I I I Y Y x . . . . F +.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.O.3 . O , t D ` ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! : . . . . . 1 M B N M M N M M M M M M m M m x M m m m x m n x x x x n 9 . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.. . . o . o n z z z x x n m x m M x m M x M M m M v M M M M M M N N M M B N N N N N N N N K K B K K K K P K P P P P I P I P I P I I I I I I I I Y I R v X . . Z +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.[ 3 + + < d H [ O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.d . . . o . o w B M M M M M M M M M M M m M m M m M M x x x m x n x x n a O o . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o 1 n n z x x x n m m x n M m m m M m M M M M M M N M M M N M M M N N N N N N K N K B K K K K K P P P P P P P I I P I P P I I P I I I I I R v X . . Z +.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.O.[ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G * . . . $ z K B M M B N M M M M v M m M m M x M x m m m m n x x x z z 9 o . . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o . o n z z n x x n m m x x M m M M m M M m M M M M M M N M M N M N N N N N N B N N K N K K K K K K K K P P P P P P P P I P I I P I I I I I R c . . . D +.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] 6 . o o . . . 2 M B M M N M N M M M M M m M M m M m M m m x x m m m x x z x z o . o o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o o ; n z x x x x n m m x x m m x M m M M m v M M M M M N M M N N M N M N N N N N N N K K B K K K P P P K P K I P I I P I P P I I I I I I R i . . . o ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .d O . o . . # p K B N M M N M M M M M M M M m M M x m M m m m m x n x x x z z > o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o o . o o a z n x n x x x x m m m m M m m M m M M M M M M M M M N M N M M N N N N N N N K N N K B K B P K P P K P P P P P I I P I P I I I I R K $ . . . $ X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+. .h @ . o . . o 9 M P N M N M N M M M M M M M M m M m x M x m m m m n n x x x z z i . . o o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . X . o # n z x x x x m m m x x M m m M m M m M M M M M M M N M M M N N M M N N N N K N K N B K B K K K K P P P P P P P P P P P I I I R P p $ . . 8 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.` s + . . . o . . ; k B B M M N N M M N M M M M m M m M m M M m M x m x m m m x x x x z % . . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . e z z x x x x m n m m x m m m m m M M M M M M M M N M N N M M N N N N N N N N N N K B B B K K K K P P P K P P I I I I R P c w * . . o o . . ' +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .D 3 o . . o o . # q N B B M N M B M M M M M M M M m M m M m M m m m x x m n n x x x x z e o . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o . O n z z x x x x m x n m m m M m M m m m M v M M M M M M M M N M N M M N N N N N B B B B K B K B K P P P I I I I B v p 9 ; O . . . o Z +.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.J t & . . o . . O 9 M P B N M N N M M M N M M M M M M M M M M m m M m m M x m n n x x x x z # . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o o 1 n x x x x x n n n m v m m m m M M m M M M M M M M M M M M N M N N N N N N N B N N N K K K P I P K M x y 0 1 # o . o . . . . X Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.` j = . . . . . . . + 9 x K K N M N N N M N N M M M M M M M M m M m x M m m m x x m m n x x n x x 9 . o o . X o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . a x z x x x x n n m m x m M m m m M M m m M M M M M B M M M N M N M N N M K N N N B N K P v e 9 ; O o . . . o . o . . . 3 ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] Z < . . . . . . . $ 0 x P K K N N N N M M M M M M M M M M M M m M M m M M m M x m m m x x x x x n i . o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . o # m z z n x x x m n m m m m m m M m M m M M M M M M M M M B M M M N M N M N N N N B K P z + . . . . o . . o . . $ t Q O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.' Z < o o . . . . . O > u N P K B M N M B M M M N N M B M M M M M M M M M M M x x m m m m x n x x x x z x # . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . X o . . 1 n z z x x x x m x m m m m M x M m M M x M M M M M M M M N M N M B M N N N N N B K K * o . . . . . . . O , d Q ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.Q h = X . . . o . . o * w x K P K B N N B N N M N M N M M M M M M M M M x x M m x x M x M m x m m m x x x z x 9 . o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . o o a n n n n x x m x m n m m m m M m M m M M m M M M M M M M B M N M N M N M N N N B M $ . o . + , t j H .O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] d = . . . . . . . . $ 9 z N K K K B N N N N M N M N M M M M N M M M M M M x M M M x M M x m x m m m n x n x x n a o . o . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . . . # m z z z x x x n x m m m m x M M x M m M M M M M M M M M M M M N M N N N N N M B M $ . . . = d F ' .O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q + . o o . . . . + 1 i M P P K B N K M B B M N N N N M N N N M M M M M M M M M M m m M m m m m m m x x x x x x n z # . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o o o . 1 n z n n x x m m m m m m m m x M m M m M M M M M M M M B M N M N M N N M N N B N ; o h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+., o . . . . $ 1 i v P I K B N B N N N N N M N N M M M N M M M M M M M M M M x M m m M m m m m m x m n m x x x n n 9 . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . o i x z z x x x n x x m m m m M m m m M M v M M M M M M M M M M N M N M N N M N N ; . o t +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...$ o . . o $ 0 k M I P K B B N N B N B N N N N B M M N M N M M N M M M M M M M M M m M M x M m m m m m x m x x z x n e . o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o o . o n x x x x x n m x m m m m m M M x M m M m m M M M M M N M M N M M N M B M N B ; o < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< . . . # p B P P P K B N K N N N N N N N N N M N M N M N M M M M M M M M M M M m M m m m M x m m x m m n n x x n z a + . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o % m x x x x x x n m x x m m m m m m M m M M M M M M M M M M N M N M N M N N B ; . o , +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g o . O M I K K B K K K N K N N N N N N M B M M N M N M M N N M M M M M M m M M M m M m x M m m m n n x z x n z z ; o . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . . . 9 n z z x x x m n n x m x M M m x M M m m M m M M M M M N M M M M N M N B B > o . = O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.X.` F d 3 = * 7 .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . . p I K B B B N N B N N K N N B N N M N N M M M M M M M M M M M M M M m M x m m m M x x x m n x x x x z n 9 o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . . o . i x z n z x x x n m m x x m x M x m M M M m M M M M M b M M N M M N M M B 2 . . = o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ Q C 7 = X 6 +.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.{ + . . 9 P K B B B B N K M B M N N M M N N M N M N M M N M M M M M v m M m M m m M m m m x m x m n x x x n x e . . o o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . o n z n n n x x n n m m m m M m M m x M M m M M M M M M M N M N M M M N B 0 . . . & o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.O.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...' F s < + . . . o . o o . O .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+., . ; K K N K N N N N N N N N N N B M N M M M N M M M M M M M M m M m M m M x m M m m m m m n x x x z n a O o . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . X . . o + m n n x x x x m x x m x x x M m M M m M M m M M M M M M M M M N M M K e . & ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.J 7 = X . . . o o o . . . . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . # M K K N N N N N N N M N M N M N M N N M M M M M M M m v M M m M M m m m m m x m x n n x x x x z z # o o . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . o o % m n z n z x x n m n m m x m m m x M M m m M M M M M M M M M N M M B i . . + ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q o . o . o . . . . o + $ o o . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.S . o . k K N N N N N N M N N N N M M M M M N M M M M M M M M M m M M x x M m m M x m m n m x x x x n z > . . . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . o > m z z z n x x x m x m M x M x M x m m M v M M M M M M M M M M M B i . . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s . . . . . . o $ 1 q p B B $ o 3 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.' O . . . q K N N N N N N N M M N M N M N N M M M M M M M m M M m M m M M m x M x x m m x n x x x x x x 9 . o . o o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . . o . w n z z z x x x n x m m x x M m m M x M m M M M M m M M M M M M B i . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t o . . o O ; 0 i x K I Y I P I 9 . . . + ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.= . : B N N N N N N N M M N M M M M M M M M M M m M M m m M m M x M m m x M m x m m x x x z x z 9 o . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . . . . i n z x x x x x n m x m m x m m m m m M M m M m M M M M M M M B p o . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O. .] .+.+.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.j . . o q B P I I I P P K P P Y q . . . . ! +.+.+.+.+.+.+.+.+.+.+.+.O.+.+.+.8 . . $ M N N N M N M N M N M M N M M N M M M M v M M M m M M M x m x M x x x n m x x x x x x z i . o o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o o . o . o p n x n x x x x m n m m m m m M m M m m m M M v M M M M M M N p o o S +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.[ F d < + O + Z +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.Q . . . . p R K P P P P K K P K I x o . o j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.V o . o k B N M N M M N N M N M M M M M M M M M M M m M m M x m M m m m m x x m n n x x x n x i O o o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o o a n z x x x x x n n x x m m m m x m m M m M m M M x M M M N z + . . D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.' Z s - O . . . . ` +.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . . . 2 I K P K K K P K K K P M $ . 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.J X . . . w B N N N N M M M M M M N M M M M M M M M M M M m x M m m M n x m M x x x x x x x n i O o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . o n x z n z x x x n m m m x M x m M m m m M M m M M M M M M m $ . . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...! V 8 = X . . . o . . . o C +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< . ; K P K K K K P K K K K P 1 . . * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.* o > B N M M M N N M N M M M M M M M M M m M m m M m m m m m m x x m n n x x x z x n z O . . . o o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . o O n n z x z x n x m x x m x m m m M M m m m M m M m M M M M % o h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .H j 3 $ o . . . o . . . . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.g . . O m P K K K K K K K K K I w . . . . ' +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.3 o . % M M M N M M M M M M M M M M M M M m M M m M M m M m m m m m m m n x x x x x n a $ . o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o . O n n z z n x x x n m n m m x x m m M m m M m M M M M M M ; . . . t +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.[ G g < + . . . . . o . . . . O ; # . o , O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . . . p P K K K B K K B B B P z o . . Z +.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.j . . o z N M M N M M M M M M M M M M m m M M m m M m m m m x m x m n n x x x x n n a # . o o . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . o o O n z z n z x x x x m m x m M m m m m m m M m m M m M M ; o < +.+.+.+.+.+.+.+.+.+.+.o.] F s , + . . . X . . . . . o # : 2 p M P 9 . . O [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ + . . 9 I B B B B B B B B B K v # . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.G . . . . y B N N M M M M M M M M M M m M M m m M m m m m m m m m x m n x x n x n n a # o . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o o . + n n n x x x x x n n x m m m x m m m m m M m M m M M ; . . , O.+.+.+.+.+.+.X.! D 7 * O . . . . . o . . . . . $ : w k M B K K K I p o . . . G +.+.+.+.+.+.+.O.+.+.+.+.+.+.+.O., . . ; K K B B B B B B N N K B : o = o.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .+ . . . 1 B M N M M M M M M m M m M M M m M x M m m m m m m x m n n x x x x z z a $ . . . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . . o p n x n x x x n x m n n m m x M m M m m M m M M M > . . = +.+.+. .Q C 4 * . . . o . o . . . . o $ > w l M B P P B B B N N P m O o . d +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.s o . + m P B B N B B N N N B P w . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< o ; M M M M M M M x M M M M m M x m m M x M m m x x m m x x n x x x x z i # . . o o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o . o o p n n x x x x x x n n x m x x m m m m m M M m N 9 . o $ G j < @ . . . o . o . . . . O $ 1 y z M K K K K B M N N N B N B B B ; . o 3 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.D o . . p K K N N N N N N N B P p . . . . F +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d . . O n M M M M M M M M M m m M x M m m x m m m x m m m n x x x z z n n i o . o . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o . . . o i m z z x x x x x n m n m m x x M m m m m M M 9 . . . . . . . o . . . . . . . O ; 9 y x M B B B B N N M B M N N N N M N N N K 1 . . + ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.] O . . . 0 K N N B N N N N N M K x + . o s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.F . . . i B M M M M m m M M m M m M m m M m m x m m x x n x x x z n z x i O . . o . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . o o o . o 9 m n n n z n x x m n x m m m m m m m M m N 9 . . . o . . . . o . . o # ; 0 p x N B B N N M N M M B M N N N N N M N N N N N B e . . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.= . . : B N B N N N M N N N N N ; . . , O.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.' O . o . 9 N M M M M M M x M m M x M m m m m m x m m m n x x z n x n z 9 o . . o . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . . o . . > m z n z x x x x x m n m x x m m m m m M w . X . . . . . o # > w p x M B N N M M M M N M M N M M M M M M N M N N M N M N B l o . . h +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.t . # M K M N N N N N N N N B 9 o . + [ +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.= . ; M M m M x M m M x M m m m m m m x m x m n x x x x x n z z 9 . o o . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o . . % m n x z x x x x x m n m m x m m m m m a # . . O % > w a m N M B M M M M M N M M M M M N M M M N N M M N N M N N M N N B M # . o 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z o . o p K M M N N N N N M N B y . . . . H +.+.O.+.+.+.+.+.+.+.+.+.+.+.+.+.t . . # x M M m M x x M M x m m m m x x m m m n x x x x x z z z > . . o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . . o o O n n z z x x x x x x x m m n m m m m M p : ; 1 e p m M N M M M M M M M M M M M M M N M M M M N N M M N N M M N M N N M M B B 1 o . * X.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! o . . q P N N M M N M M N M B x o . . g +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z . . X p M M m M x M x M m m M x m m m m x x x x x x x x x a # . . o . . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o o . o e m n n n n z n x x n n m m x x m m M M m M M M M M m m M M m M M M M M M M M M M M M M M N M N M M M M N M M M N M M N B 0 . . . . ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.= . . > B M N M N N M N B M B v $ . . 3 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! . . o . w M m m m M x m m m x m m x n n n x x n x x x x n e O . . o . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . . X . o 1 m n n n x x x x x n n m m m m m m m m m m M x M m M M m M M M m v M m M M M M M M M M M M M M M B M M M N N M N M M B p o . . . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.7 . . # m B M M M M M M M M M B 1 o $ .+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...* o > M M m m m M m m m x m m n m n x x x z x n x n 9 o . o . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o . . . . $ n n n n x x x x x x n n n x m m m m m m m M m m M x M M m M M m M v M M M M M M M M M M M N M M M M N N M M N N M N x # . . 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.C . . o p B N N M N N M M N M B e . . . . Q +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.4 . . . # n M m m m x m m x m m m x x x x x z x n n a ; o . o . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . . . o o . . o e m x x x n x x x x x n m x x m m m m m m m m m M x x M m m m M M M m M M M M M M M M M M M M M M M M M M M M N N M ; . o , o.+.+.+.+.+.+.+.O.+.+.+.+.+.+.+.Q . . o . w B M M M M N M M M M B z X . . V +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o p M m m m M x m n m x x x x x z n z z n e # . . . o . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . . o o . o > m n z n x x n x x x n m m n m m m m m m m m m m m m m m M M m M M M m M M M v M M M M M M M M M M M M M M M M B 9 . . o ] +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.X.* o > B M M M M M M M M M M m # . . 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . w M m n m m m x m n x x x x n x z n x 1 . . . o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . X . . . . o O p n x z n z z x x x x n n m n x m x m m M m m M M M m m m M M m m M M x M M M M M M M M M M M M M M M M M M B i . . . . H +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.6 o . # m N M M M M M M M M M M > . . * ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .@ . o 1 m m m m n n n x x x n z x x z z p $ o . o . o . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o . o o o > m n z z n x x x x x x n n m n m m m x m m m m m m m M M x M M m M m M M M M x x M x M m M M M M M M M M M z O . . s +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o a N M M M M M M M M M B w o . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.O.< o . $ n n n m n x x x x x x x n n z 1 o o o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o o . . . . o o O i n z z x x x x x x n m x m m x x m x m m m m m m m x M x x M x m M m m M M M M M M M M M M M m M M M M M * . . . < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Q . . . w N M M M M M M M M M M p o . o Z +.+.+.+.+.+.+.+.+.+.+.O.[ G g < o . . . O p M n x n x x z n z n n n i # . o . . . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . o o . ; n m n n n n n x x x x n n m n n m m m x x M m M x M m m m M x M m M M m M m M M M M M m M M M M M M N 1 . . # { +.+.+.+.+.+.+.+.+.+.+.+.+.+.+...* . . > M M M M M M M M M M M n # . o 7 +.+.+.+.+.+.+.O.] D d , + . . o . . o i m n x x x x x x z z a 9 . . . o . . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o o . . . o o o 0 m m x n n n x x x x x n m n m x m m m m x m m m m m m M M x M m M x m M M m m M m M m M m M m M B w . . . . ! +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.3 . . $ M M M m M m m M m m M M ; . . = O.+.+.O.` Z s = O . o . . . . . # x n x n x x n z z z w + . . o . . o . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o . . . . + i m n n n n x x x x x x x m m x m m x m m x m m m m m m m x M x M M m x M M m m M M M M M M M M a o . . j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j o . o a M m M m M M m m M M N 9 . . . o Z S 7 * o . . o o . . . . . . o % i n n z x z z z z i ; . . o o . . . o o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o o . . o % a m n z z x x x x x n x x n x n m x n M x m m m m m M m m M x x m M x m m M m m m m m m M M n # . o 6 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H . . . . e N M m M m M m M m m M i o . . . . . o . . . . . . . o % 1 w i n n x z n z z z a > X . o o . . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . o . o . . . . o ; z n z z z n n x z x x x x x n n n x x m x m x m x x m m M m m m m M m m M M m M m M m m m > . o $ ..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+. .$ o 1 M m M m m m m m M m M z # . o . . o . o . . . . . O % 1 e p n m m m n x x z x z a 9 o o . . . . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . o . o . . o > x n z n n x x x x x x x x x x x m n m m m m x M m x x x M m m m m m m m m m M m M m N 0 . o o ` +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.< o . $ m M x M m M m m m m m n % o o . . . . . # ; 9 e p m m m n n n n n n n z z a 9 o . o . . o o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . . . o . o > z m n x x x z x n x x x n x n n m x m x m x x m m x m m x m m m m m m m m m m m N i o . . Z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.j . . o a M m x m m m m m m m M e o . . o # > 9 e a m M m m m n n x n z n n z n a 9 o o . o . . . . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . . . o . o . . o . ; a m n z x z z n x z x x x x x x m m n x m x m m x x M m m m m m m m m m m m m x O . o 7 +.+.+.+.+.+.+.+.+.+.+.+.+.+. .! 7 . . o . w M m m m m m m m m m n m i > > 9 i n m M m m m n n n n n z x z x x x i 1 o o . . o . . o o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . . . o . . o $ i m n n n z x n n z x x x x x x x m n m x n n m m m x x m m m x m x m m x M ; o = o.+.+.+.+.+.+.+.+.+.{ Q j 3 $ . . . o . 1 M m m m x m m m x m x m m M m M n n n m x x x z z n z x n x z z i > o . . . . o o . . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o . o . . o o . # 9 n m x z x n n z n x n x x x x x x x n n m x n m m m x m x m m x x M M 9 . . . o ] +.+.+.+.+. .Q g < # . . . o . . . 9 M n m n m m x m m n m n n m n n x x n n x x z z z z z z x n w $ o . . . o o . . . . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o X . . o . . o . o . o % i m m n z z z z x x n n n x x x z n x x x n m x x m m x m m n n M e . . . G +.{ Q d < + . . . . . o . . . . $ a m m m n n n n n x x x x x x n n n x n z x x z z n n z i 1 O . o . o . o . . o . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o . . . o . . o o O > a m n z z x x n n x x x x x x x x x x x x x x m n n n m n n z O . o . = < O . . . . . . . . . . o # > w x M n n m x x x x x x x x x x x x n z x z n x x z z a 9 # . . o . . . . o . . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . o . . . o . o . . # 9 z m n n n n x z n n n n x n x n x x x x x x x x x x m n % . . . . . o . . . . . . o # > w a z n m m n x x z x x n z n n z x x x x z z x z z z z z w ; o . . o . o o . o . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . o o . . o . o o . o # 1 a m m n z n n z n x n z z z n x x x n n x x x n m > . . o . . . . . . . o # 1 w i n m m m n x x n n x x x x x z z n z x z n x n z z z n a 9 ; o o . o . . o . . . . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . . . . o . . o . . . . o ; 0 n m m n z z n z n z z z x x x x z x n n M e o . . . . . . O # 1 w i x m m n n x x n n n x x x x x x x z z z z z z n n z n a e > + o . . . o . . . . . o o . o o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o o . . o . . . o o . . o . . O ; w a n m n z z z z z z x x x n n n n n 9 o . o % 1 w a z m m m n x n n x x x n x z x x n x n x z z z z z z n a e > # o o o . . . o . . . . o o . . . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . . . o o . . . . . o o . . o o $ > e a m m m m n x x z n n z n n i e a n m m n n n n n z z z z n x z z x z z n x z z x n n a i 9 ; O o . . . o . . . o o . . . o . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o o . . . . o o . X . . o . . o o o o o o # ; > w i m m m m n m n m n n m n x n n n n z z z z z z n n z n n n n i e 9 > % O . . . o o . . o . . o o . . . . o o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o . X . o . . . . . o . . . . . . . . o o o . o . # # $ > > 9 w e e i i i i i i i i i e w 9 9 1 ; $ $ o . . . o X . . o . o . . o o . . . o o . . o . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o o . . X o . . o o . o . o o . o . . o o o . o o o . . . . . . . o . o o . . . o o . . . . o . . . o . . . o o . . . o o . . . o . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o . . o . . o . . . o o . . o . o . . o o . . o . . X . o o . o . . o . o . . o . . . o o . . o . . . o . . . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . . o . . o . . . . o . . . o o . . . o . . o . . . . o . o . . . o . o . . o o . . . o . . o . . . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. o . o . . o o . o . . . o . o . . o o . o . . . o . o . . . o . . o . . o . o . o @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.", -"@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.. . o . o . . . o . o . . . o . o . . . o . o . . o . . @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@." +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 - . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . = 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 : . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X < 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 , . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . * 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 = c / L I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I L ^ b - 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 - k ~ P I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I P W a > 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 : d ! P I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I L ^ B - 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.E O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q + Z O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.X.O.v % 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % M O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O._ @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X H O.} ..................................................................................................} O.Y O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ V O.} .................................................................................................... .O.z & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % n O.| ................................................................................................} O.( @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % m O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.) @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % n O.| ................................................................................................} O.( @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 % M O.X.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O._ @ q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 : s T J K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K H Q N ; 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 , . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . * 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x & 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.x * w 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.l O 3 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.O.B r u t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t q 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.{ ' ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] [ g = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ C O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q @ V O.} ................................................................................................................................................................................................................................................................o.h = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q + Z O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.k * 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 > f F A S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S D y 1 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 > o + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.R O q 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O...O.Q $ e q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. .O.H # X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 2 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.X.O.` G P K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K L i , 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.k * 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.o.....................................................................................................................................................................................................................................................................................................................o.h = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.j = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X H O.} ............................................................................................................................................................................................................................................................................................................................................................................................................................o.h = 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 q X K O...O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.k * 9 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 = c / L I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I U p , 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 - . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 2 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", +"6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 " }; diff --git a/share/pixmaps/BGL32.png b/share/pixmaps/BGL32.png index 95b7e5ec8f..9c85950fdc 100644 Binary files a/share/pixmaps/BGL32.png and b/share/pixmaps/BGL32.png differ diff --git a/share/pixmaps/BGL32.xpm b/share/pixmaps/BGL32.xpm index 9c4394feb0..a361c02b54 100644 --- a/share/pixmaps/BGL32.xpm +++ b/share/pixmaps/BGL32.xpm @@ -1,125 +1,133 @@ /* XPM */ static char *result[] = { /* columns rows colors chars-per-pixel */ -"32 32 87 1 ", -" c #059D9D", -". c #089F9F", -"X c #08A0A0", -"o c #17A9A9", -"O c #1BADAD", -"+ c #2AB5B5", -"@ c #2EB9B9", -"# c #34B6B6", -"$ c #3DB7B7", -"% c #34BCBC", -"& c #3DBDBD", -"* c #41B7B7", -"= c #43BCBC", -"- c #4BBBBB", -"; c #53BCBC", -": c #63BEBE", -"> c #36C1C1", -", c #3DC3C3", -"< c #44C3C3", -"1 c #4BC3C3", -"2 c #46CACA", -"3 c #4DCCCC", -"4 c #54C2C2", -"5 c #5CC3C3", -"6 c #55C9C9", -"7 c #5ACCCC", -"8 c #4ED0D0", -"9 c #53D1D1", -"0 c #5BD6D6", -"q c #5DD9D9", -"w c #63C3C3", -"e c #6BC5C5", -"r c #74C5C5", -"t c #7BC7C7", -"y c #73C9C9", -"u c #7CCACA", -"i c #61D1D1", -"p c #62DBDB", -"a c #69DCDC", -"s c #74D6D6", -"d c #73DFDF", -"f c #7ADBDB", -"g c #65E1E1", -"h c #6EE2E2", -"j c #73E4E4", -"k c #7AE6E6", -"l c #76E8E8", -"z c #7BE9E9", -"x c #85CDCD", -"c c #8ACFCF", -"v c #8CD1D1", -"b c #84DEDE", -"n c #95D2D2", -"m c #99D4D4", -"M c #A1D5D5", -"N c #A8D7D7", -"B c #A4D9D9", -"V c #ACDBDB", -"C c #B3DEDE", -"Z c #81E7E7", -"A c #84EAEA", -"S c #8BECEC", -"D c #95E5E5", -"F c #92EDED", -"G c #8EF0F0", -"H c #94F0F0", -"J c #9CF2F2", -"K c #B7E0E0", -"L c #BAE1E1", -"P c #A4F3F3", -"I c #AAF4F4", -"U c #ACF9F9", -"Y c #B6F7F7", -"T c #B3FAFA", -"R c #BDFDFD", -"E c #C4E4E4", -"W c #C9E6E6", -"Q c #CFE8E8", -"! c #D3EBEB", -"~ c #DBEEEE", -"^ c #CAFFFF", -"/ c #E3F2F2", -"( c #ECF5F5", -") c #F1F7F7", -"_ c #F5F9F9", -"` c #FEFEFE", -"' c None", +"32 32 95 2 ", +" c #5A1DE1", +". c #5F22E3", +"X c #662DE3", +"o c #672EE3", +"O c #672FE3", +"+ c #662DE4", +"@ c #672EE4", +"# c #682FE4", +"$ c #6830E4", +"% c #6930E4", +"& c #6931E4", +"* c #6A31E4", +"= c #6A32E4", +"- c #6B34E4", +"; c #6C35E5", +": c #6C36E4", +"> c #6D36E4", +", c #6D36E5", +"< c #6D37E5", +"1 c #6E37E5", +"2 c #6E38E5", +"3 c #6F38E5", +"4 c #6F39E5", +"5 c #6F3AE5", +"6 c #703AE5", +"7 c #703BE5", +"8 c #713BE5", +"9 c #713CE5", +"0 c #733EE5", +"q c #723DE6", +"w c #7440E6", +"e c #7743E6", +"r c #7745E7", +"t c #7845E7", +"y c #7846E7", +"u c #7A48E7", +"i c #7B49E7", +"p c #7C4CE7", +"a c #7E4EE8", +"s c #7F4EE8", +"d c #7F4FE8", +"f c #8050E8", +"g c #8051E8", +"h c #875AE9", +"j c #875BE9", +"k c #885BE9", +"l c #9973ED", +"z c #9A75ED", +"x c #9B75ED", +"c c #9B76ED", +"v c #9D79ED", +"b c #9E7BEE", +"n c #A481EF", +"m c #A584EF", +"M c #A686EF", +"N c #B69CF2", +"B c #B99FF2", +"V c #B9A0F2", +"C c #BBA1F3", +"Z c #BBA2F3", +"A c #BCA2F3", +"S c #BCA3F3", +"D c #CFBDF6", +"F c #CFBCF7", +"G c #CFBEF7", +"H c #D0BDF7", +"J c #D0BEF7", +"K c #D2C0F7", +"L c #D2C1F7", +"P c #D3C1F7", +"I c #D3C2F7", +"U c #D5C5F7", +"Y c #D9CAF8", +"T c #F1EBFD", +"R c #F5F3FD", +"E c #F6F4FD", +"W c #F8F6FE", +"Q c #F8F7FE", +"! c #F9F7FE", +"~ c #FAF8FE", +"^ c #FAF9FE", +"/ c #FBF9FE", +"( c #FBF9FF", +") c #FBFAFE", +"_ c #FBFBFE", +"` c #FBFBFF", +"' c #FDFBFF", +"] c #FCFCFF", +"[ c #FDFCFF", +"{ c #FDFDFF", +"} c #FEFDFF", +"| c #FFFDFF", +" . c #FEFEFF", +".. c #FFFEFF", +"X. c white", /* pixels */ -"''''''''''' XX '''''''''''", -"''''''''' Xo%2>@003%o '''''''''", -"''''''' O%9l*mx3zjlhq@ '''''''", -"'''''' O,wV-g1`(,kjjjjlpO ''''''", -"''''' %l8n`vq1Q`;zAzAzjjl% '''''", -"'''' %ljgw`V90v`u%1129klhz, ''''", -"''' @ljkA<(/#=V`(Q~~Wt&zlal% '''", -"'' Olhq31*/`/_````````V=AjjlO ''", -"'' p9-ym!_````(WCE`````rqzjdp ''", -"' @z '''", -"'''' %lj8xEcw#x`uq3C`5gjhl< ''''", -"'''''X@ja%29gj4`L3qv`v3lj%X'''''", -"'''''' o0zlljl<_`1g;E:9gO ''''''", -"''''''' +9hjz89>O. '''''''''", -"''''''''''' XXXX '''''''''''" +"4 4 4 6 6 6 6 6 6 6 4 4 4 6 6 6 6 6 6 6 4 4 6 6 6 6 6 6 6 4 4 4 ", +"4 4 3 - - - - - - : 4 4 1 - - - - - - > 4 4 > - - - - - - 3 4 4 ", +"4 3 8 a d d d d f u 2 2 w f d d d d g r 2 2 t g d d d d s 9 3 4 ", +"6 - a R _ ~ ^ W X.D & $ l X.Q ^ ^ W X.B @ @ V X.W ^ ~ _ E d - 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.Z @ @ S X.[ X...X.) f - 6 ", +"6 - d ~ X.| ..' X.K & $ x X.[ ....' X.C @ @ A X.' ..| X./ f - 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.Z @ @ S X.[ X...X.) f - 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.Z @ @ C X.( [ ' .! f - 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.Z @ @ S X.[ X...X.) f - 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.Z X = n Y J K K P F i ; 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.[ X.S o w > $ & & & & & 2 4 4 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.] X.N O + @ @ @ @ @ @ 1 4 4 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.} X.U b M m m m m m m m y , 6 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.X.X.X.X.X.X.X.X.X.X.X.X.k * 7 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.X.X. .[ [ [ [ [ [ [ [ } h = 7 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.X.X.X.X.X.X.X.X.X.X.X.X.k = 7 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.X.X.X.X.X.X.X.X.X.X.X.X.k = 7 ", +"6 - d ^ X...X.[ X.L & $ z X.` { { { { { { { { { { { { { .j = 7 ", +"6 - d ^ X...X.[ X.L & $ x X.{ X.X.X.X.X.X.X.X.X.X.X.X.X.X.k * 7 ", +"6 - d ^ X...X.[ X.L # 2 p v z c c c c c c c c c c c c c c e < 5 ", +"6 - d ^ X...X.[ X.I % 0 2 # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 4 4 ", +"6 - d ^ X...X.[ X.G . % # & & & & & & & & & & & & & & & & 2 4 4 ", +"6 - d ^ X...X. .X.T H P K K K K K K K K K K K K K K K K P f - 6 ", +"6 - d ^ X...X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.k * 7 ", +"6 - d ^ X...X.X.X. .[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } h = 7 ", +"6 - d ^ X...X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.k = 7 ", +"6 - d ~ X.| ............................................X.k = 7 ", +"6 - d ^ X...X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.k = 7 ", +"6 - a R _ ~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ) h = 7 ", +"4 3 8 a d d d d d d d d d d d d d d d d d d d d d d d d d q 2 4 ", +"4 4 3 - - - - - - - - - - - - - - - - - - - - - - - - - - 2 4 4 ", +"4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 " }; diff --git a/share/pixmaps/BGL64.png b/share/pixmaps/BGL64.png index b7615cbfe0..7288fbdf00 100644 Binary files a/share/pixmaps/BGL64.png and b/share/pixmaps/BGL64.png differ diff --git a/share/pixmaps/BGL64.xpm b/share/pixmaps/BGL64.xpm index 287b02f8e0..030781be1e 100644 --- a/share/pixmaps/BGL64.xpm +++ b/share/pixmaps/BGL64.xpm @@ -1,179 +1,150 @@ /* XPM */ static char *result[] = { /* columns rows colors chars-per-pixel */ -"64 64 109 2 ", -" c #019595", -". c #0C9696", -"X c #059E9E", -"o c #0B9D9D", -"O c #139E9E", -"+ c #1A9E9E", -"@ c #07A0A0", -"# c #0CA2A2", -"$ c #12A4A4", -"% c #1BA3A3", -"& c #16A9A9", -"* c #1BACAC", -"= c #1DB2B2", -"- c #24A4A4", -"; c #2BA6A6", -": c #21AEAE", -"> c #2CA9A9", -", c #33AAAA", -"< c #3CAEAE", -"1 c #24B3B3", -"2 c #2AB5B5", -"3 c #2EBABA", -"4 c #33B6B6", -"5 c #3CB3B3", -"6 c #33BCBC", -"7 c #3BBEBE", -"8 c #42AEAE", -"9 c #45B2B2", -"0 c #4CB3B3", -"q c #44BEBE", -"w c #52B6B6", -"e c #56B9B9", -"r c #5CBABA", -"t c #63BEBE", -"y c #69BFBF", -"u c #36C0C0", -"i c #3CC2C2", -"p c #42C4C4", -"a c #48C5C5", -"s c #47C9C9", -"d c #4BCBCB", -"f c #51C6C6", -"g c #54CCCC", -"h c #5BCECE", -"j c #55D2D2", -"k c #5AD4D4", -"l c #5ED9D9", -"z c #67C0C0", -"x c #6BC1C1", -"c c #63CFCF", -"v c #73C5C5", -"b c #7AC7C7", -"n c #7CC9C9", -"m c #67D2D2", -"M c #6DD2D2", -"N c #64DCDC", -"B c #6ADEDE", -"V c #70D6D6", -"C c #72DBDB", -"Z c #7BDEDE", -"A c #67E0E0", -"S c #6DE1E1", -"D c #73E4E4", -"F c #7BE6E6", -"G c #75E8E8", -"H c #7CE9E9", -"J c #84CBCB", -"K c #8DCECE", -"L c #8DD0D0", -"P c #94D2D2", -"I c #9CD5D5", -"U c #A1D7D7", -"Y c #A3D8D8", -"T c #ADDDDD", -"R c #B3DEDE", -"E c #81E6E6", -"W c #8EE2E2", -"Q c #84E9E9", -"! c #8BEBEB", -"~ c #92EDED", -"^ c #9AEDED", -"/ c #8FF1F1", -"( c #94F1F1", -") c #9BF2F2", -"_ c #9EF8F8", -"` c #B7E0E0", -"' c #BAE2E2", -"] c #A4F3F3", -"[ c #ABF4F4", -"{ c #A7F9F9", -"} c #ACFAFA", -"| c #B2F6F6", -" . c #B4FAFA", -".. c #BAFCFC", -"X. c #C3E6E6", -"o. c #C6E8E8", -"O. c #CDEAEA", -"+. c #D4EDED", -"@. c #D9EFEF", -"#. c #C3FEFE", -"$. c #C8FFFF", -"%. c #DCF0F0", -"&. c #D9FFFF", -"*. c #E4F4F4", -"=. c #EAF6F6", -"-. c #EEF8F8", -";. c #F4FBFB", -":. c #FEFEFE", -">. c None", +"64 64 80 1 ", +" c #5B1EE1", +". c #642BE3", +"X c #652BE3", +"o c #652CE3", +"O c #672DE3", +"+ c #672EE3", +"@ c #672FE3", +"# c #6930E4", +"$ c #6931E4", +"% c #6A31E4", +"& c #6A32E4", +"* c #6B34E4", +"= c #6C35E4", +"- c #6C36E4", +"; c #6D36E5", +": c #6D37E5", +"> c #6E37E5", +", c #6E38E5", +"< c #6F39E5", +"1 c #6F3AE5", +"2 c #703AE5", +"3 c #703BE5", +"4 c #713CE5", +"5 c #723DE5", +"6 c #733FE5", +"7 c #733EE6", +"8 c #7541E6", +"9 c #7642E6", +"0 c #7845E7", +"q c #7846E7", +"w c #7947E7", +"e c #7D4CE7", +"r c #7E4EE8", +"t c #7F4FE8", +"y c #7F50E8", +"u c #8557E9", +"i c #8558E9", +"p c #8658E9", +"a c #875AE9", +"s c #885AE9", +"d c #885BE9", +"f c #885BEA", +"g c #895DEA", +"h c #8F65EB", +"j c #9973ED", +"k c #9A74ED", +"l c #9F7BEE", +"z c #A07DEE", +"x c #A381EF", +"c c #A482EF", +"v c #A583EF", +"b c #A584EF", +"n c #A685EF", +"m c #A787EF", +"M c #A887F0", +"N c #C4ADF5", +"B c #C5AFF5", +"V c #C5B0F5", +"C c #C6B1F5", +"Z c #C7B2F5", +"A c #CAB7F6", +"S c #CCB9F6", +"D c #D9CBF8", +"F c #D9CCF8", +"G c #DACDF8", +"H c #DED2F9", +"J c #E0D5F9", +"K c #F9F6FE", +"L c #FAF8FE", +"P c #FBF9FE", +"I c #FBF9FF", +"U c #FBFAFF", +"Y c #FBFBFF", +"T c #FDFBFF", +"R c #FDFCFF", +"E c #FDFDFF", +"W c #FEFDFF", +"Q c #FEFEFF", +"! c #FFFEFF", +"~ c white", /* pixels */ -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X X X @ @ @ @ X X @ @ X X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X @ X X X @ # $ & * * $ & $ @ X X X @ @ >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.@ X X X # = i l D G D k d G D S S S N s 1 # @ X X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X @ @ # 2 l S G G N i * o % X s G S S S S S D S N 6 # X X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X @ X # s D l j S S S # > b ` -.x * H D B S S S S S D D D j $ X @ X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.X X @ i s 1 # % d F G $ I :.:.:.Y # G D D D D D S B B S B S D j # X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.X X X 3 D * - v T *.t 1 H Q 3 w :.:.:.%.o B F D F D D D D D S S S S D D i @ X X >.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.X X o j G D # U :.:.:.Y # H H j % :.:.:.:.; d E F D D G D D D G D S S S B D N $ @ X >.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.X X & S G A G 2 e :.:.:.+.# B Q D # O.:.:.:.t 2 ! F G G F G G D F D C D D S S S D 1 X X >.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.X X 1 D S S S F d ; :.:.:.;.- j Q Q $ P :.:.:.I $ ! ! ! ! ! Q E H F D D D D S S S S G 6 X X >.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.X X 1 G S B S S G B o @.:.:.:.0 7 ! ! 3 r :.:.:.+.X j j p 7 7 p g B H Q F D D D S S S S D 6 X X >.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.X X 1 G S S B D G G H $ I :.:.:.J = ( ( k % :.:.:.:.< % > 5 e 0 < > O # 7 F Q G D D D S S S G 6 X X >.>.>.>.>.>.>.", -">.>.>.>.>.>.@ X * G S S D B D D G Q 2 r :.:.:.` X d 2 o - ;.:.:.:.;.-.:.:.:.:.:.:.%.I > o m ! D G D D B S S G 1 X @ >.>.>.>.>.>.", -">.>.>.>.>.>.X # S S S B D D D F Q ! j ; :.:.:.-., > x R -.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.n k Q D F D D S S B G # X >.>.>.>.>.>.", -">.>.>.>.>.X @ k D S D D H H Q F B d : X *.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.I B E F F C D S S S N # X >.>.>.>.>.", -">.>.>.>.X X 6 D B G G S k i * # O , t T :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.;.:.:.:.:.:.:.:.:.:.:.x # E H D G D S S S G i X X >.>.>.>.", -">.>.>.>.X # D S B i * o % < b R *.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.;.:.:.:.:.:.;.% d ! G D D C D B B G # X >.>.>.>.", -">.>.>.X X d S D k b X.-.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.O.U n x t x I *.:.:.:.:.:.:.:.:.:.:.b : ! F F D D D D S S j X X >.>.>.", -">.>.>.X # G S S S # +.:.:.:.:.:.:.:.:.:.:.:.:.:.:.=.I w % O % 1 6 7 4 $ . J :.:.:.:.:.:.:.:.:.` # E H F F D D D S B G & X >.>.>.", -">.>.X X d D S S F * J :.:.:.:.:.:.:.:.:.;.:.;.:.:.J q B ~ { [ } } } { C o t :.:.;.:.:.:.:.:.@.o F E H F F D D D S S j X X >.>.", -">.>.@ # G S S S H 6 0 :.:.:.*.=.:.:.:.:.:.:.:.:.:.R $ } | ] ] ] ] ] ] ^ .! ` :.:.:.:.:.:.:.%.% D Q E H F D C S S S G # X >.>.", -">.>.@ 3 S S S S H j + Y x > $ $ 0 @.:.:.:.:.:.:.:.=.% E [ ] ] ] ] ] ] ] ] .6 t :.:.:.:.:.:.:.O.o E Q H H F F D D S S D i X >.>.", -">.@ @ l S S D D D F $ # 1 g C C > % -.:.:.:.:.:.:.:.< c .] ] ] ] ] ] ] ] .f 8 :.:.:.;.:.:.:.P & ! Q E F F F D D D S S A X X >.", -">.X $ D S S S D G F F Q ! / ! ^ ) o U :.:.:.:.;.:.:.t 4 ..] [ [ [ [ [ [ ] .q w :.:.:.:.:.:.:.< p ^ Q Q E F F D D S S S D $ X >.", -">.X 2 D B D D D D F F E ! E ! ! ) 4 r :.:.:.:.:.;.:.U % .| [ [ | [ [ ] ..~ ` :.:.:.:.:.:.T H ! Q Q E F F F D D B S D 2 @ >.", -"X X d S S B D D F F E E E E ! ! ) k > :.:.:.:.:.:.:.+.o ^ | | | | | | $.] % r :.:.:.;.:.:.X.o m { ^ ! Q E H F D F D D S D d X X ", -"X @ A S S D C F F F H E ! ! ! ~ ) E o %.:.:.:.:.:.:.:.- Z #.| .#.$.| c X w :.:.:.:.:.:.:.- > 3 g ! ( E E H F D G D B S N X X ", -"X @ S A S D D D F H E E E Q ! ! ~ ) $ Y :.:.:.:.:.:.:.0 f &.$.| P p O - U :.:.:.:.:.:.:.:.X.U K y - o g ( E H F F C B D S S # X ", -"X $ S S S D F D F F E E ! ! ! ~ ~ { 4 t :.:.:.:.:.:.:.J $ c 4 % % w T :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.P . 7 ! E F D D D D S D $ @ ", -"@ * S S S S D D F F E Q E ! ! ~ ~ ] g , :.:.:.:.:.:.:.O.> 8 n R -.:.:.:.:.:.:.:.:.:.:.;.:.:.:.:.:.:.:.+.. i ! F F D D S S S * @ ", -"X * G A S S G F F F E E Q ! ! ~ ~ ) F O =.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.X. N E D D D S S S * @ ", -"X * G A D D D D F F E E ! ! W ~ ~ ) ^ $ R :.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.;.:.:.:.:.:.:.:.:.:.y * Q F F S S S G * @ ", -"X = S S B D C D H H E E Q ! ! ! ~ ( { : n :.:.:.:.:.:.:.:.:.:.:.:.*.` P b e 0 0 r P -.:.:.:.:.:.:.:.:.:.:.%.o B H D D S B D = X ", -"X * G S S D F F F E E Q Q ! ! ~ ~ ^ [ a 9 :.:.:.:.:.:.:.:.-.T x , % % > 6 a f f q % + I :.:.:.:.:.:.;.:.:.:.> s Q D D C S D * X ", -"X * S S S D D D F F E Q ! ! ! ~ ~ ~ ] C - ;.:.:.:.:.:.:.:.> O 5 M ^ | $.$.#.#... . .m L :.:.:.;.:.:.:.:.:.t 3 Q D D D S G * X ", -"@ # D B B D D F F F E E E W ! ~ ! ^ ) ~ # O.:.:.:.:.:.:.:., c &.$.#. .| | | | ] ] { ..C X @.:.:.:.:.:.:.:.:.K * H D D B A S $ X ", -"X @ S S S D D D F F E E E ! ! ! ~ ^ ( ] * P :.:.:.:.;.:.:.v 4 $.| | | | [ [ [ [ ] ] ] } % K :.:.:.:.;.:.:.:.T # F G D S S S @ X ", -"X X N S B S D D D F E E W ! ! ! ! ( ~ { 6 z :.:.:.:.:.:.:.T $ .| | | [ [ [ [ ] ] ] ^ [ 7 t :.:.:.:.:.:.:.:.T # F D S S S A X X ", -"@ @ s S B D D D D F F E E Q Q ! ! ~ ^ ] j > :.:.:.:.;.:.:.*.o ^ ..| [ | [ ] ] ] ] ) ) } 7 e :.:.:.:.:.:.:.:.K * H D D S S d X X ", -">.@ 1 G B S S C F F H E E Q ! ! ~ ! ( ) L O *.:.:.:.:.:.:.:.> M .[ [ [ [ ] ] ] ] ) ] ) X I :.;.:.:.;.:.:.:.y > H D S S S 3 X >.", -">.X # D S S S D F F F F E E Q ~ ! ! ~ ^ ~ $ R :.:.:.:.:.:.:.r q ..[ ] ] ] ] ^ ) ) ] } 2 , :.:.:.:.:.:.:.:.:.< i H S S S D # @ >.", -">.X X N S S S S D D F F E E Q Q ! ! ~ ~ ] 1 b :.;.:.;.:.:.:.K : | ] ] ] ] ] ] ] } ^ : + %.:.:.:.:.:.:.:.:.@.X N D D S S A @ X >.", -">.>.X 3 S S S D D G D F E E E ! ! ! ! ! ] d < :.:.:.:.:.:.:.X.o ^ ] ] ] ] } [ Q q X 8 *.:.:.:.:.:.:.:.:.:.e * H D B S S 7 X >.>.", -">.>.X # S S S S C D F F H E E E Q ! ! ~ ( C % *.:.:.:.:.:.:.;.+ F . .] ~ h : o 8 R :.:.:.:.:.:.:.:.:.:.P B F B D B D # X >.>.", -">.>.X X d S S S D D D F F F E E E ! Q ! ~ ! $ ` :.:.:.:.:.:.:.< q C 7 % O ; b O.:.:.:.:.:.:.:.;.:.:.:.K g H S S A S j @ X >.>.", -">.>.>.X $ G A S S D D D F F H E Q E ! ! ! ) : K :.:.:.:.:.:.:.J . > r P O.:.:.:.:.:.:.:.:.:.:.:.:.-.e k H D D S A G & X >.>.>.", -">.>.>.X @ s S S S S D D F F F F H E ! ! ( _ & J :.:.:.:.:.:.:.;.@.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.I + % S H D D S S S j X X >.>.>.", -">.>.>.>.@ # G A S C D D D C F H H ! Q B g * O +.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.@.J ; o s Q H D D S S N G $ X >.>.>.>.", -">.>.>.>.X X 6 G A S S D D D F F Q p O % ; y @.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.*.K < O % s F Q D D D S S B S i X X >.>.>.>.", -">.>.>.>.>.X X j S B S S S D D D H $ b *.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.*.O $ 7 B Q Q F D D D S S S S N @ X >.>.>.>.>.", -">.>.>.>.>.>.X # S A A S S D D F H * I :.:.:.:.:.:.:.:.:.:.:.:.:.:.;.O.P e v :.:.:.-.% N ( Q F D D D C D S A N G $ @ >.>.>.>.>.>.", -">.>.>.>.>.>.X X * G S S S S C D H : J :.:.:.:.:.:.:.:.:.:.:.:.:.@.> # % 2 X %.:.:.:.9 7 Q G F D D D D S S S G 2 @ @ >.>.>.>.>.>.", -">.>.>.>.>.>.>.X X = D A S S S D H 1 b :.:.:.:.:.-.X.K 9 x :.:.:.+.X N ~ / $ U :.:.:.J * Q D D D D B S S A D 6 X X >.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.X X 1 D S B S S G 2 x :.=.' b 9 % o * 3 X *.:.:.:., d ! ! 1 z :.:.:.` # D G D D D S S A G u X X >.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.X @ = S S B S F 6 % 9 % o * i k D Q Q # R :.:.:.z 2 ! Q s , :.:.:.=.% l F S S B S S G 3 X X >.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.X @ * S S B D j 2 u k D G Q H F F Q * n :.:.:.I $ G H N $ *.:.:.:., i G S S B B S 2 @ X >.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.X X # j D A S G G D D S D C D G Q 7 9 :.:.:.@.o N G G $ R :.:.:.J * G A A S N $ X X >.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.X X X 3 S S A S S S S S S D D G j % ;.:.:.:.> s H H & b :.%.` 0 # S S G s @ @ X >.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.X X @ s S D A A S S S S S S S X X.:.:.:.z 2 F F i O 5 O @ = d G j $ @ X >.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X @ @ # p S G S A S S S S G $ L :.-.O.w # D D N 3 u l D H k & @ @ X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X @ X @ 2 l S S S S S G 3 - e % # * s S A S G G S i # X X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X X X X # 1 p l A S N 2 u j S G G S A d 3 $ X @ X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X X X X @ @ # * * = = * & $ @ X @ @ X X >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.", -">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.X X X X X X X X X X X X X @ >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>." +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<<<<33333333333331<<<<<23333333333333<<<<<<3333333333333<<<<<<", +"<<<<<,&&&&&&&&&&&&&;<<<<<=&&&&&&&&&&&&&,<<<<,&&&&&&&&&&&&&,<<<<<", +"<<<<,7pppppppppppps0:<<<:espppppppppppu4,<<,5upppppppppppp7,<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~d$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*tKQTRRRRRRRRRWa%3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*22*yP~!~~~~~~~~~~f$3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*2<>8xbvvvvvvvvvvvq;1<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*2<<,ooooooooooooo:<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*2<<<44444444444441<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lr*2<<<<<<<<<<<<<<<<<<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Ly-433333333333333331<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~!~Lwo&$$$$$$$$$$$$$$$$:<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~WHFGGGGGGGGGGGGGGGDJh#3<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~EEEEEEEEEEEEEEEEEY~j+4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4XB~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4oN~IRRRRRRRRRRRRRRRRRRRRRRRRRRRRU~j+4<<<", +"<<<3&i~~~~~~~~~~~R~no4<4oV~R~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~R~no4<3$xSBCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAg&3<<<", +"<<<3&i~~~~~~~~~~~R~no4<<2$.oooooooooooooooooooooooooooooo.=2<<<<", +"<<<3&i~~~~~~~~~~~R~no4<<<3444444444444444444444444444444442<<<<<", +"<<<3&i~~~~~~~~~~~R~no4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<3&i~~~~~~~~~~~R~m@64444444444444444444444444444444444442<<<<<", +"<<<3&i~~~~~~~~~~~R~z @ooooooooooooooooooooooooooooooooooo.=2<<<<", +"<<<3&i~~~~~~~~~~~W~ZlnvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvcMt=2<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~WRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRU~j+4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<3&i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E~kO4<<<", +"<<<<,7pppppppppppppppppppppppppppppppppppppppppppppppppppa9><<<<", +"<<<<<,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&><<<<<", +"<<<<<<33333333333333333333333333333333333333333333333333331<<<<<", +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", +"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" }; diff --git a/share/pixmaps/nsis-header.bmp b/share/pixmaps/nsis-header.bmp index 73feb940d4..c3a866025a 100644 Binary files a/share/pixmaps/nsis-header.bmp and b/share/pixmaps/nsis-header.bmp differ diff --git a/share/pixmaps/nsis-wizard.bmp b/share/pixmaps/nsis-wizard.bmp index c7f43b97c9..643c90188c 100644 Binary files a/share/pixmaps/nsis-wizard.bmp and b/share/pixmaps/nsis-wizard.bmp differ diff --git a/share/setup-BGL-win.nsi b/share/setup-BGL-win.nsi index 9c1ec89b0c..30b4ef81f5 100644 --- a/share/setup-BGL-win.nsi +++ b/share/setup-BGL-win.nsi @@ -6,7 +6,7 @@ SetCompressor /SOLID lzma # General Symbol Definitions !define REGKEY "SOFTWARE\$(^Name)" !define COMPANY "BGL Core project" -!define URL https://BGLcore.org/ +!define URL https://bitgesell.ca/ # MUI Symbol Definitions !define MUI_ICON "..\share\pixmaps\BGL.ico" @@ -46,18 +46,18 @@ Var StartMenuGroup !insertmacro MUI_LANGUAGE English # Installer attributes -OutFile ..\BGL-0.1.7.0-win64-setup.exe +OutFile ..\BGL-0.1.8.0-win64-setup.exe InstallDir $PROGRAMFILES64\BGL CRCCheck on XPStyle on BrandingText " " ShowInstDetails show -VIProductVersion 0.1.7.0 +VIProductVersion 0.1.8.0 VIAddVersionKey ProductName "BGL Core" -VIAddVersionKey ProductVersion "0.1.7" +VIAddVersionKey ProductVersion "0.1.8" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" -VIAddVersionKey FileVersion "0.1.7" +VIAddVersionKey FileVersion "0.1.8" VIAddVersionKey FileDescription "" VIAddVersionKey LegalCopyright "" InstallDirRegKey HKCU "${REGKEY}" Path @@ -92,7 +92,7 @@ Section -post SEC0001 CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "0.1.7" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "0.1.8" WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\BGL-qt.exe diff --git a/src/Makefile.am b/src/Makefile.am index e7bd95a466..d6605dc61e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -203,12 +203,12 @@ BGL_CORE_H = \ rpc/blockchain.h \ rpc/client.h \ rpc/mining.h \ - rpc/net.h \ rpc/protocol.h \ rpc/rawtransaction_util.h \ rpc/register.h \ rpc/request.h \ rpc/server.h \ + rpc/server_util.h \ rpc/util.h \ scheduler.h \ script/descriptor.h \ @@ -361,6 +361,7 @@ libBGL_server_a_SOURCES = \ rpc/net.cpp \ rpc/rawtransaction.cpp \ rpc/server.cpp \ + rpc/server_util.cpp \ script/sigcache.cpp \ shutdown.cpp \ signet.cpp \ diff --git a/src/addrdb.cpp b/src/addrdb.cpp index 3547e47cbc..9505d8ebe2 100644 --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -48,7 +48,7 @@ bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data { // Generate random temporary filename uint16_t randv = 0; - GetRandBytes((unsigned char*)&randv, sizeof(randv)); + GetRandBytes({(unsigned char*)&randv, sizeof(randv)}); std::string tmpfn = strprintf("%s.%04x", prefix, randv); // open temp output file, and associate with CAutoFile diff --git a/src/base58.cpp b/src/base58.cpp index fb04673c5c..b122e0055e 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -149,7 +149,7 @@ std::string EncodeBase58Check(Span input) return false; } // re-calculate the checksum, ensure it matches the included 4-byte checksum - uint256 hash = Hash(MakeSpan(vchRet).first(vchRet.size() - 4)); + uint256 hash = Hash(Span{vchRet}.first(vchRet.size() - 4)); if (memcmp(&hash, &vchRet[vchRet.size() - 4], 4) != 0) { vchRet.clear(); return false; diff --git a/src/bench/ccoins_caching.cpp b/src/bench/ccoins_caching.cpp index 849e3dfa12..577b36c3e5 100644 --- a/src/bench/ccoins_caching.cpp +++ b/src/bench/ccoins_caching.cpp @@ -15,7 +15,7 @@ // many times micro-benchmarks of the database showed completely different // characteristics than e.g. reindex timings. But that's not a requirement of // every benchmark." -// (https://github.com/BGL/BGL/issues/7883#issuecomment-224807484) +// (https://github.com/bitcoin/bitcoin/issues/7883#issuecomment-224807484) static void CCoinsCaching(benchmark::Bench& bench) { const ECCVerifyHandle verify_handle; diff --git a/src/bench/peer_eviction.cpp b/src/bench/peer_eviction.cpp index 8429f18613..f05f5e8f64 100644 --- a/src/bench/peer_eviction.cpp +++ b/src/bench/peer_eviction.cpp @@ -42,7 +42,7 @@ static void EvictionProtection0Networks250Candidates(benchmark::Bench& bench) bench, 250 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_network = NET_IPV4; }); } @@ -53,7 +53,7 @@ static void EvictionProtection1Networks250Candidates(benchmark::Bench& bench) bench, 250 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_is_local = false; if (c.id >= 130 && c.id < 240) { // 110 Tor c.m_network = NET_ONION; @@ -69,7 +69,7 @@ static void EvictionProtection2Networks250Candidates(benchmark::Bench& bench) bench, 250 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_is_local = false; if (c.id >= 90 && c.id < 160) { // 70 Tor c.m_network = NET_ONION; @@ -87,7 +87,7 @@ static void EvictionProtection3Networks050Candidates(benchmark::Bench& bench) bench, 50 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_is_local = (c.id == 28 || c.id == 47); // 2 localhost if (c.id >= 30 && c.id < 47) { // 17 I2P c.m_network = NET_I2P; @@ -105,7 +105,7 @@ static void EvictionProtection3Networks100Candidates(benchmark::Bench& bench) bench, 100 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_is_local = (c.id >= 55 && c.id < 60); // 5 localhost if (c.id >= 70 && c.id < 80) { // 10 I2P c.m_network = NET_I2P; @@ -123,7 +123,7 @@ static void EvictionProtection3Networks250Candidates(benchmark::Bench& bench) bench, 250 /* num_candidates */, [](NodeEvictionCandidate& c) { - c.nTimeConnected = c.id; + c.m_connected = std::chrono::seconds{c.id}; c.m_is_local = (c.id >= 140 && c.id < 160); // 20 localhost if (c.id >= 170 && c.id < 180) { // 10 I2P c.m_network = NET_I2P; diff --git a/src/bench/rpc_mempool.cpp b/src/bench/rpc_mempool.cpp index f1eeef8885..67c827d0d3 100644 --- a/src/bench/rpc_mempool.cpp +++ b/src/bench/rpc_mempool.cpp @@ -12,7 +12,7 @@ static void AddTx(const CTransactionRef& tx, const CAmount& fee, CTxMemPool& pool) EXCLUSIVE_LOCKS_REQUIRED(cs_main, pool.cs) { LockPoints lp; - pool.addUnchecked(CTxMemPoolEntry(tx, fee, /* time */ 0, /* height */ 1, /* spendsCoinbase */ false, /* sigOpCost */ 4, lp)); + pool.addUnchecked(CTxMemPoolEntry(tx, fee, /*time=*/0, /*entry_height=*/1, /*spends_coinbase=*/false, /*sigops_cost=*/4, lp)); } static void RpcMempool(benchmark::Bench& bench) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 7c0da0f4be..974ae1b91c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -94,12 +94,21 @@ class CMainParams : public CChainParams // By default assume that the signatures in ancestors of this block are valid. consensus.defaultAssumeValid = uint256S("0x000000000000055e5a25481d6b90bc943f36d5f2b3ca0ecf4f4b4ea3241a3168"); + // Deployment of Taproot (BIPs 340-342) that did not pass + // we would be keeping this information here for now, because blocks contain this version bit + // and on relaxed conditions for window/treshold (that are set for now) + // the blocks would signal that bit=2 unknown rule was activated + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT_DISCARDED].bit = 2; + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT_DISCARDED].nStartTime = 1621589357; // May 21th, 2021 + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT_DISCARDED].nTimeout = 1623715200; // June 15th, 2021 + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT_DISCARDED].min_activation_height = 66000; // Approximately July 1st, 2021 + // Deployment of Taproot (BIPs 340-342) consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1626307200; // July 15th, 2021 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1629936000; // End of day Aug 25th, 2021 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 74574; // Approximately Sep 1st, 2021 - + /** * The message start string is designed to be unlikely to occur in normal data. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce @@ -212,7 +221,7 @@ class CTestNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1230767999; // December 31, 2008 - consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000005180c3bd8290da33a1a"); + consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000005ede0aa26f0"); // block 103846 consensus.defaultAssumeValid = uint256S("0x0000000000004ae2f3896ca8ecd41c460a35bf6184e145d91558cece1c688a76"); // 2010000 pchMessageStart[0] = 0x0b; @@ -234,6 +243,7 @@ class CTestNetParams : public CChainParams { vFixedSeeds.clear(); vSeeds.clear(); + vSeeds.emplace_back("seedtest.satoshithefirst.com"); // BGL primary seed node // nodes with support for servicebits filtering should be at the top // -- no seeds defined for now -- @@ -253,7 +263,10 @@ class CTestNetParams : public CChainParams { m_is_mockable_chain = false; checkpointData = { - {}}; + { + {546, uint256S("000000033f0ecd6bc1c46eb98a2856cf2fe48bc3e90ef11ac24ea5272c1adbf8")}, + } + }; chainTxData = ChainTxData{ // Data from RPC: getchaintxstats 4096 0000000000004ae2f3896ca8ecd41c460a35bf6184e145d91558cece1c688a76 @@ -351,7 +364,7 @@ class SigNetParams : public CChainParams { nDefaultPort = 38333; nPruneAfterHeight = 1000; - genesis = CreateGenesisBlock(1598918400, 52613770, 0x1e0377ae, 1, 50 * COIN); + genesis = CreateGenesisBlock(1585958400, 0x0278eefd, 0x1d22ffff, 1, 200 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); // assert(consensus.hashGenesisBlock == uint256S("0x00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6")); // assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index 6fc5dccec8..f5e9315d95 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -21,17 +21,16 @@ static const uint8_t chainparams_seed_main[] = { }; static const uint8_t chainparams_seed_test[] = { - 0x04,0x20,0xdf,0x55,0xaa,0x83,0xd5,0xc5,0xb8,0xe7,0x75,0x78,0xd4,0x29,0x51,0x4b,0x26,0x1c,0x23,0xdf,0x28,0x4d,0x29,0x85,0x07,0xb5,0xe2,0x29,0x69,0x3e,0x25,0xbb,0x61,0xcf,0x47,0x9d, - 0x04,0x20,0x0a,0xdd,0xa2,0x48,0xb5,0x56,0xa3,0x1f,0xca,0x3c,0x4c,0x9e,0xca,0x6e,0xb3,0xd5,0x5e,0x68,0xf6,0x28,0x31,0x57,0x24,0xfb,0x9d,0x2b,0x55,0x4f,0xd7,0x90,0x62,0xd3,0x47,0x9d, - 0x04,0x20,0x2d,0x04,0xa1,0x4a,0xd4,0x7c,0x7b,0x16,0x2e,0xb7,0xd2,0xa1,0x08,0xc5,0xd2,0xbd,0x53,0x87,0x34,0xdc,0x38,0x26,0xca,0x56,0xf2,0xac,0xc5,0x62,0x70,0x72,0x3f,0x63,0x47,0x9d, - 0x04,0x20,0x30,0x57,0x85,0xe0,0x02,0x4a,0xd1,0x31,0xeb,0x16,0x1b,0x1d,0xa8,0x43,0x0b,0xb4,0xc6,0xac,0x7d,0x46,0x24,0x0b,0x55,0x9d,0x16,0xe6,0x46,0x03,0x72,0xfe,0xd4,0xef,0x47,0x9d, - 0x04,0x20,0x36,0x6c,0xf1,0xd2,0xbb,0xda,0xff,0x8c,0x93,0x61,0x10,0xf2,0x9d,0xa1,0xa4,0x0a,0x30,0x9b,0x0c,0x69,0x6d,0xaa,0xd4,0x9c,0xfd,0xb5,0x5b,0x5e,0x30,0x9f,0xf3,0x13,0x47,0x9d, - 0x04,0x20,0x3e,0xe2,0xf3,0xe5,0xc5,0xbe,0x61,0xdd,0x4c,0x3e,0xdb,0x0d,0xd2,0xf9,0x42,0xe3,0x31,0xb2,0xa8,0x51,0x31,0xf6,0xce,0xc2,0x38,0x20,0x27,0x39,0x73,0x68,0x5a,0x42,0x47,0x9d, - 0x04,0x20,0x51,0x79,0x05,0x9c,0x8a,0xdf,0x03,0xb5,0x1b,0x17,0xc3,0x86,0xb6,0x54,0xcc,0xe0,0x6e,0x58,0xa6,0x41,0x4c,0xcc,0x0c,0x60,0x08,0xa6,0x0f,0x1d,0x11,0xd8,0x29,0xa6,0x47,0x9d, - 0x04,0x20,0x60,0xbe,0xae,0x7d,0xa3,0x4d,0x6a,0x71,0x1a,0x5d,0xe5,0x98,0x9c,0xde,0xa0,0x99,0x39,0x19,0xd3,0x01,0x0a,0x5d,0x1c,0x21,0x43,0x94,0x92,0x71,0x5d,0x77,0xd7,0xdf,0x47,0x9d, - 0x04,0x20,0x64,0x4e,0x86,0xa1,0x02,0xa1,0x8a,0xef,0xb0,0xd1,0xb5,0x77,0x69,0xb9,0x6a,0xdc,0xdf,0x35,0x8a,0xda,0xa4,0x3e,0x83,0xfa,0x50,0xe6,0xca,0x0e,0x2b,0x99,0x0a,0x17,0x47,0x9d, - 0x04,0x20,0xa2,0x28,0x3c,0x5a,0x5b,0x82,0x32,0x66,0x11,0xe5,0x71,0xff,0x6b,0x25,0x92,0x75,0xdd,0x7a,0x4f,0x90,0x8b,0x1d,0x34,0xa4,0xf1,0x6e,0xb9,0xfb,0xb5,0x2e,0x7c,0x7f,0x47,0x9d, - 0x04,0x20,0xc8,0xb5,0x6a,0xba,0x02,0x26,0x45,0x12,0xfb,0x93,0x8a,0x51,0xe4,0xb0,0xf3,0x94,0xb7,0xc0,0x74,0x72,0xeb,0x67,0x91,0x9e,0x04,0x36,0x6a,0x4b,0xef,0x0d,0x88,0xfe,0x47,0x9d, - 0x04,0x20,0xc8,0xfa,0xcd,0x8c,0xc3,0x6f,0x3c,0xd0,0x27,0x7e,0x7d,0xeb,0x51,0x01,0x65,0xb6,0x9e,0x02,0x09,0x64,0xf4,0x87,0x78,0x7b,0x8f,0x9d,0xaf,0x3b,0xa5,0xcc,0x56,0x2c,0x47,0x9d, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4d,0xda,0x24, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0xec,0x5b,0x80, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x9a,0xe7,0xcd, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x72,0x4f,0x37,0x68, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x75,0x59,0x1f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4e,0x8d,0xe3,0xee, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x0e,0x29,0xd1, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x26,0x63,0x7f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x7a,0x96,0x9b, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0xf7,0xd0,0x7f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x84,0x84,0xa6 }; #endif // FCO_CHAINPARAMSSEEDS_H diff --git a/src/compat.h b/src/compat.h index 748f3766e1..4de9512b8a 100644 --- a/src/compat.h +++ b/src/compat.h @@ -96,7 +96,7 @@ typedef char* sockopt_arg_type; // Note these both should work with the current usage of poll, but best to be safe // WIN32 poll is broken https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/ -// __APPLE__ poll is broke https://github.com/BGL/BGL/pull/14336#issuecomment-437384408 +// __APPLE__ poll is broke https://github.com/bitcoin/bitcoin/pull/14336#issuecomment-437384408 #if defined(__linux__) #define USE_POLL #endif diff --git a/src/compressor.h b/src/compressor.h index c267face0c..3711a55271 100644 --- a/src/compressor.h +++ b/src/compressor.h @@ -53,12 +53,12 @@ struct ScriptCompression void Ser(Stream &s, const CScript& script) { std::vector compr; if (CompressScript(script, compr)) { - s << MakeSpan(compr); + s << Span{compr}; return; } unsigned int nSize = script.size() + nSpecialScripts; s << VARINT(nSize); - s << MakeSpan(script); + s << Span{script}; } template @@ -67,7 +67,7 @@ struct ScriptCompression s >> VARINT(nSize); if (nSize < nSpecialScripts) { std::vector vch(GetSpecialScriptSize(nSize), 0x00); - s >> MakeSpan(vch); + s >> Span{vch}; DecompressScript(script, nSize, vch); return; } @@ -78,7 +78,7 @@ struct ScriptCompression s.ignore(nSize); } else { script.resize(nSize); - s >> MakeSpan(script); + s >> Span{script}; } } }; diff --git a/src/consensus/params.h b/src/consensus/params.h index 6a72df845a..0d079819b2 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -27,6 +27,7 @@ constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_ enum DeploymentPos : uint16_t { DEPLOYMENT_TESTDUMMY, + DEPLOYMENT_TAPROOT_DISCARDED, DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342) // NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp MAX_VERSION_BITS_DEPLOYMENTS diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index b411317ecf..4a6d4bd392 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -223,7 +223,7 @@ const unsigned int CDBWrapper::OBFUSCATE_KEY_NUM_BYTES = 8; std::vector CDBWrapper::CreateObfuscateKey() const { std::vector ret(OBFUSCATE_KEY_NUM_BYTES); - GetRandBytes(ret.data(), OBFUSCATE_KEY_NUM_BYTES); + GetRandBytes(ret); return ret; } diff --git a/src/deploymentinfo.cpp b/src/deploymentinfo.cpp index 030a7806de..02265dd06a 100644 --- a/src/deploymentinfo.cpp +++ b/src/deploymentinfo.cpp @@ -11,6 +11,10 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B /*.name =*/ "testdummy", /*.gbt_force =*/ true, }, + { + /*.name =*/ "taproot_discarded", + /*.gbt_force =*/ true, + }, { /*.name =*/ "taproot", /*.gbt_force =*/ true, diff --git a/src/httprpc.cpp b/src/httprpc.cpp index 1efcb26efc..9ae592be79 100644 --- a/src/httprpc.cpp +++ b/src/httprpc.cpp @@ -254,11 +254,14 @@ static bool InitRPCAuthentication() if (gArgs.GetArg("-rpcauth","") != "") { LogPrintf("Using rpcauth authentication.\n"); - for (std::string rpcauth : gArgs.GetArgs("-rpcauth")) { + for (const std::string& rpcauth : gArgs.GetArgs("-rpcauth")) { std::vector fields; boost::split(fields, rpcauth, boost::is_any_of(":$")); if (fields.size() == 3) { g_rpcauth.push_back(fields); + } else { + LogPrintf("Invalid -rpcauth argument.\n"); + return false; } } } diff --git a/src/index/base.cpp b/src/index/base.cpp index fc6dd77a72..a6ebd53596 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -65,7 +65,7 @@ bool BaseIndex::Init() if (locator.IsNull()) { m_best_block_index = nullptr; } else { - m_best_block_index = m_chainstate->m_blockman.FindForkInGlobalIndex(active_chain, locator); + m_best_block_index = m_chainstate->FindForkInGlobalIndex(locator); } m_synced = m_best_block_index.load() == active_chain.Tip(); if (!m_synced) { diff --git a/src/init.cpp b/src/init.cpp index de4886a172..b0ac63540f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -573,7 +573,7 @@ void SetupServerArgs(ArgsManager& argsman) std::string LicenseInfo() { - const std::string URL_SOURCE_CODE = ""; + const std::string URL_SOURCE_CODE = ""; return CopyrightHolders(strprintf(_("Copyright (C) %i-%i").translated, 2009, COPYRIGHT_YEAR) + " ") + "\n" + "\n" + diff --git a/src/interfaces/README.md b/src/interfaces/README.md index e450816d33..deb590fc85 100644 --- a/src/interfaces/README.md +++ b/src/interfaces/README.md @@ -2,13 +2,13 @@ The following interfaces are defined here: -* [`Chain`](chain.h) — used by wallet to access blockchain and mempool state. Added in [#14437](https://github.com/BGL/BGL/pull/14437), [#14711](https://github.com/BGL/BGL/pull/14711), [#15288](https://github.com/BGL/BGL/pull/15288), and [#10973](https://github.com/BGL/BGL/pull/10973). +* [`Chain`](chain.h) — used by wallet to access blockchain and mempool state. Added in [#14437](https://github.com/bitcoin/bitcoin/pull/14437), [#14711](https://github.com/bitcoin/bitcoin/pull/14711), [#15288](https://github.com/bitcoin/bitcoin/pull/15288), and [#10973](https://github.com/bitcoin/bitcoin/pull/10973). -* [`ChainClient`](chain.h) — used by node to start & stop `Chain` clients. Added in [#14437](https://github.com/BGL/BGL/pull/14437). +* [`ChainClient`](chain.h) — used by node to start & stop `Chain` clients. Added in [#14437](https://github.com/bitcoin/bitcoin/pull/14437). -* [`Node`](node.h) — used by GUI to start & stop BGL node. Added in [#10244](https://github.com/BGL/BGL/pull/10244). +* [`Node`](node.h) — used by GUI to start & stop BGL node. Added in [#10244](https://github.com/bitcoin/bitcoin/pull/10244). -* [`Wallet`](wallet.h) — used by GUI to access wallets. Added in [#10244](https://github.com/BGL/BGL/pull/10244). +* [`Wallet`](wallet.h) — used by GUI to access wallets. Added in [#10244](https://github.com/bitcoin/bitcoin/pull/10244). * [`Handler`](handler.h) — returned by `handleEvent` methods on interfaces above and used to manage lifetimes of event handlers. diff --git a/src/key.cpp b/src/key.cpp index 8730cb93cb..30b0743956 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -159,7 +159,7 @@ bool CKey::Check(const unsigned char *vch) { void CKey::MakeNewKey(bool fCompressedIn) { do { - GetStrongRandBytes(keydata.data(), keydata.size()); + GetStrongRandBytes(keydata); } while (!Check(keydata.data())); fValid = true; fCompressed = fCompressedIn; @@ -238,7 +238,7 @@ bool CKey::VerifyPubKey(const CPubKey& pubkey) const { } unsigned char rnd[8]; std::string str = "Bitgesell key verification\n"; - GetRandBytes(rnd, sizeof(rnd)); + GetRandBytes(rnd); uint256 hash; CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash); std::vector vchSig; @@ -375,7 +375,7 @@ void ECC_Start() { { // Pass in a random blinding seed to the secp256k1 context. std::vector> vseed(32); - GetRandBytes(vseed.data(), 32); + GetRandBytes(vseed); bool ret = secp256k1_context_randomize(ctx, vseed.data()); assert(ret); } diff --git a/src/mapport.cpp b/src/mapport.cpp index 3b3074d43d..0885d4371a 100644 --- a/src/mapport.cpp +++ b/src/mapport.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #ifdef USE_NATPMP #include diff --git a/src/net.cpp b/src/net.cpp index 7dc4da590e..60e61985b4 100755 --- a/src/net.cpp +++ b/src/net.cpp @@ -566,16 +566,16 @@ void CNode::CopyStats(CNodeStats& stats) } else { stats.fRelayTxes = false; } - X(nLastSend); - X(nLastRecv); - X(nLastTXTime); - X(nLastBlockTime); - X(nTimeConnected); + X(m_last_send); + X(m_last_recv); + X(m_last_tx_time); + X(m_last_block_time); + X(m_connected); X(nTimeOffset); X(m_addr_name); X(nVersion); { - LOCK(cs_SubVer); + LOCK(m_subver_mutex); X(cleanSubVer); } stats.fInbound = IsInboundConn(); @@ -614,7 +614,7 @@ bool CNode::ReceiveMsgBytes(Span msg_bytes, bool& complete) complete = false; const auto time = GetTime(); LOCK(cs_vRecv); - nLastRecv = std::chrono::duration_cast(time).count(); + m_last_recv = std::chrono::duration_cast(time); nRecvBytes += msg_bytes.size(); while (msg_bytes.size() > 0) { // absorb network data @@ -784,7 +784,7 @@ size_t CConnman::SocketSendData(CNode& node) const nBytes = send(node.hSocket, reinterpret_cast(data.data()) + node.nSendOffset, data.size() - node.nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); } if (nBytes > 0) { - node.nLastSend = GetTimeSeconds(); + node.m_last_send = GetTime(); node.nSendBytes += nBytes; node.nSendOffset += nBytes; nSentSize += nBytes; @@ -826,7 +826,7 @@ static bool ReverseCompareNodeMinPingTime(const NodeEvictionCandidate &a, const static bool ReverseCompareNodeTimeConnected(const NodeEvictionCandidate &a, const NodeEvictionCandidate &b) { - return a.nTimeConnected > b.nTimeConnected; + return a.m_connected > b.m_connected; } static bool CompareNetGroupKeyed(const NodeEvictionCandidate &a, const NodeEvictionCandidate &b) { @@ -836,27 +836,27 @@ static bool CompareNetGroupKeyed(const NodeEvictionCandidate &a, const NodeEvict static bool CompareNodeBlockTime(const NodeEvictionCandidate &a, const NodeEvictionCandidate &b) { // There is a fall-through here because it is common for a node to have many peers which have not yet relayed a block. - if (a.nLastBlockTime != b.nLastBlockTime) return a.nLastBlockTime < b.nLastBlockTime; + if (a.m_last_block_time != b.m_last_block_time) return a.m_last_block_time < b.m_last_block_time; if (a.fRelevantServices != b.fRelevantServices) return b.fRelevantServices; - return a.nTimeConnected > b.nTimeConnected; + return a.m_connected > b.m_connected; } static bool CompareNodeTXTime(const NodeEvictionCandidate &a, const NodeEvictionCandidate &b) { // There is a fall-through here because it is common for a node to have more than a few peers that have not yet relayed txn. - if (a.nLastTXTime != b.nLastTXTime) return a.nLastTXTime < b.nLastTXTime; + if (a.m_last_tx_time != b.m_last_tx_time) return a.m_last_tx_time < b.m_last_tx_time; if (a.fRelayTxes != b.fRelayTxes) return b.fRelayTxes; if (a.fBloomFilter != b.fBloomFilter) return a.fBloomFilter; - return a.nTimeConnected > b.nTimeConnected; + return a.m_connected > b.m_connected; } // Pick out the potential block-relay only peers, and sort them by last block time. static bool CompareNodeBlockRelayOnlyTime(const NodeEvictionCandidate &a, const NodeEvictionCandidate &b) { if (a.fRelayTxes != b.fRelayTxes) return a.fRelayTxes; - if (a.nLastBlockTime != b.nLastBlockTime) return a.nLastBlockTime < b.nLastBlockTime; + if (a.m_last_block_time != b.m_last_block_time) return a.m_last_block_time < b.m_last_block_time; if (a.fRelevantServices != b.fRelevantServices) return b.fRelevantServices; - return a.nTimeConnected > b.nTimeConnected; + return a.m_connected > b.m_connected; } /** @@ -875,7 +875,7 @@ struct CompareNodeNetworkTime { { if (m_is_local && a.m_is_local != b.m_is_local) return b.m_is_local; if ((a.m_network == m_network) != (b.m_network == m_network)) return b.m_network == m_network; - return a.nTimeConnected > b.nTimeConnected; + return a.m_connected > b.m_connected; }; }; @@ -1002,12 +1002,12 @@ void ProtectEvictionCandidatesByRatio(std::vector& evicti // (vEvictionCandidates is already sorted by reverse connect time) uint64_t naMostConnections; unsigned int nMostConnections = 0; - int64_t nMostConnectionsTime = 0; + std::chrono::seconds nMostConnectionsTime{0}; std::map > mapNetGroupNodes; for (const NodeEvictionCandidate &node : vEvictionCandidates) { std::vector &group = mapNetGroupNodes[node.nKeyedNetGroup]; group.push_back(node); - const int64_t grouptime = group[0].nTimeConnected; + const auto grouptime{group[0].m_connected}; if (group.size() > nMostConnections || (group.size() == nMostConnections && grouptime > nMostConnectionsTime)) { nMostConnections = group.size(); @@ -1044,18 +1044,11 @@ bool CConnman::AttemptToEvictConnection() continue; if (node->fDisconnect) continue; - bool peer_relay_txes = false; - bool peer_filter_not_null = false; - if (node->m_tx_relay != nullptr) { - LOCK(node->m_tx_relay->cs_filter); - peer_relay_txes = node->m_tx_relay->fRelayTxes; - peer_filter_not_null = node->m_tx_relay->pfilter != nullptr; - } - NodeEvictionCandidate candidate = {node->GetId(), node->nTimeConnected, node->m_min_ping_time, - node->nLastBlockTime, node->nLastTXTime, + NodeEvictionCandidate candidate = {node->GetId(), node->m_connected, node->m_min_ping_time, + node->m_last_block_time, node->m_last_tx_time, HasAllDesirableServiceFlags(node->nServices), - peer_relay_txes, peer_filter_not_null, node->nKeyedNetGroup, - node->m_prefer_evict, node->addr.IsLocal(), + node->m_relays_txs.load(), node->m_bloom_filter_loaded.load(), + node->nKeyedNetGroup, node->m_prefer_evict, node->addr.IsLocal(), node->ConnectedThroughNetwork()}; vEvictionCandidates.push_back(candidate); } @@ -1202,7 +1195,6 @@ bool CConnman::AddConnection(const std::string& address, ConnectionType conn_typ switch (conn_type) { case ConnectionType::INBOUND: case ConnectionType::MANUAL: - case ConnectionType::FEELER: return false; case ConnectionType::OUTBOUND_FULL_RELAY: max_connections = m_max_outbound_full_relay; @@ -1213,6 +1205,9 @@ bool CConnman::AddConnection(const std::string& address, ConnectionType conn_typ // no limit for ADDR_FETCH because -seednode has no limit either case ConnectionType::ADDR_FETCH: break; + // no limit for FEELER connections since they're short-lived + case ConnectionType::FEELER: + break; } // no default case, so the compiler can warn about missing cases // Count existing connections @@ -1295,31 +1290,33 @@ void CConnman::NotifyNumConnectionsChanged() } } -bool CConnman::ShouldRunInactivityChecks(const CNode& node, int64_t now) const +bool CConnman::ShouldRunInactivityChecks(const CNode& node, std::chrono::seconds now) const { - return node.nTimeConnected + m_peer_connect_timeout < now; + return node.m_connected + m_peer_connect_timeout < now; } bool CConnman::InactivityCheck(const CNode& node) const { - // Use non-mockable system time (otherwise these timers will pop when we - // use setmocktime in the tests). - int64_t now = GetTimeSeconds(); + // Tests that see disconnects after using mocktime can start nodes with a + // large timeout. For example, -peertimeout=999999999. + const auto now{GetTime()}; + const auto last_send{node.m_last_send.load()}; + const auto last_recv{node.m_last_recv.load()}; if (!ShouldRunInactivityChecks(node, now)) return false; - if (node.nLastRecv == 0 || node.nLastSend == 0) { - LogPrint(BCLog::NET, "socket no message in first %i seconds, %d %d peer=%d\n", m_peer_connect_timeout, node.nLastRecv != 0, node.nLastSend != 0, node.GetId()); + if (last_recv.count() == 0 || last_send.count() == 0) { + LogPrint(BCLog::NET, "socket no message in first %i seconds, %d %d peer=%d\n", count_seconds(m_peer_connect_timeout), last_recv.count() != 0, last_send.count() != 0, node.GetId()); return true; } - if (now > node.nLastSend + TIMEOUT_INTERVAL) { - LogPrint(BCLog::NET, "socket sending timeout: %is peer=%d\n", now - node.nLastSend, node.GetId()); + if (now > last_send + TIMEOUT_INTERVAL) { + LogPrint(BCLog::NET, "socket sending timeout: %is peer=%d\n", count_seconds(now - last_send), node.GetId()); return true; } - if (now > node.nLastRecv + TIMEOUT_INTERVAL) { - LogPrint(BCLog::NET, "socket receive timeout: %is peer=%d\n", now - node.nLastRecv, node.GetId()); + if (now > last_recv + TIMEOUT_INTERVAL) { + LogPrint(BCLog::NET, "socket receive timeout: %is peer=%d\n", count_seconds(now - last_recv), node.GetId()); return true; } @@ -1844,8 +1841,8 @@ void CConnman::ThreadOpenConnections(const std::vector connect) auto start = GetTime(); // Minimum time before next feeler connection (in microseconds). - auto next_feeler = PoissonNextSend(start, FEELER_INTERVAL); - auto next_extra_block_relay = PoissonNextSend(start, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL); + auto next_feeler = GetExponentialRand(start, FEELER_INTERVAL); + auto next_extra_block_relay = GetExponentialRand(start, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL); const bool dnsseed = gArgs.GetBoolArg("-dnsseed", DEFAULT_DNSSEED); bool add_fixed_seeds = gArgs.GetBoolArg("-fixedseeds", DEFAULT_FIXEDSEEDS); @@ -1965,7 +1962,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect) // // This is similar to the logic for trying extra outbound (full-relay) // peers, except: - // - we do this all the time on a poisson timer, rather than just when + // - we do this all the time on an exponential timer, rather than just when // our tip is stale // - we potentially disconnect our next-youngest block-relay-only peer, if our // newest block-relay-only peer delivers a block more recently. @@ -1974,10 +1971,10 @@ void CConnman::ThreadOpenConnections(const std::vector connect) // Because we can promote these connections to block-relay-only // connections, they do not get their own ConnectionType enum // (similar to how we deal with extra outbound peers). - next_extra_block_relay = PoissonNextSend(now, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL); + next_extra_block_relay = GetExponentialRand(now, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL); conn_type = ConnectionType::BLOCK_RELAY; } else if (now > next_feeler) { - next_feeler = PoissonNextSend(now, FEELER_INTERVAL); + next_feeler = GetExponentialRand(now, FEELER_INTERVAL); conn_type = ConnectionType::FEELER; fFeeler = true; } else { @@ -2952,7 +2949,7 @@ ServiceFlags CConnman::GetLocalServices() const unsigned int CConnman::GetReceiveFloodSize() const { return nReceiveFloodSize; } CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, SOCKET hSocketIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const CAddress& addrBindIn, const std::string& addrNameIn, ConnectionType conn_type_in, bool inbound_onion) - : nTimeConnected(GetTimeSeconds()), + : m_connected{GetTime()}, addr(addrIn), addrBind(addrBindIn), m_addr_name{addrNameIn.empty() ? addr.ToStringIPPort() : addrNameIn}, @@ -2998,7 +2995,7 @@ void CConnman::PushMessage(CNode* pnode, CSerializedNetMsg&& msg) size_t nMessageSize = msg.data.size(); LogPrint(BCLog::NET, "sending %s (%d bytes) peer=%d\n", msg.m_type, nMessageSize, pnode->GetId()); if (gArgs.GetBoolArg("-capturemessages", false)) { - CaptureMessage(pnode->addr, msg.m_type, msg.data, /* incoming */ false); + CaptureMessage(pnode->addr, msg.m_type, msg.data, /*is_incoming=*/false); } TRACE6(net, outbound_message, @@ -3047,23 +3044,6 @@ bool CConnman::ForNode(NodeId id, std::function func) return found != nullptr && NodeFullyConnected(found) && func(found); } -std::chrono::microseconds CConnman::PoissonNextSendInbound(std::chrono::microseconds now, std::chrono::seconds average_interval) -{ - if (m_next_send_inv_to_incoming.load() < now) { - // If this function were called from multiple threads simultaneously - // it would possible that both update the next send variable, and return a different result to their caller. - // This is not possible in practice as only the net processing thread invokes this function. - m_next_send_inv_to_incoming = PoissonNextSend(now, average_interval); - } - return m_next_send_inv_to_incoming; -} - -std::chrono::microseconds PoissonNextSend(std::chrono::microseconds now, std::chrono::seconds average_interval) -{ - double unscaled = -log1p(GetRand(1ULL << 48) * -0.0000000000000035527136788 /* -1/2^48 */); - return now + std::chrono::duration_cast(unscaled * average_interval + 0.5us); -} - CSipHasher CConnman::GetDeterministicRandomizer(uint64_t id) const { return CSipHasher(nSeed0, nSeed1).Write(id); diff --git a/src/net.h b/src/net.h index a138594174..7c46661a3a 100644 --- a/src/net.h +++ b/src/net.h @@ -48,7 +48,7 @@ static const bool DEFAULT_WHITELISTRELAY = true; static const bool DEFAULT_WHITELISTFORCERELAY = false; /** Time after which to disconnect, after waiting for a ping response (or inactivity). */ -static const int TIMEOUT_INTERVAL = 20 * 60; +static constexpr std::chrono::minutes TIMEOUT_INTERVAL{20}; /** Run the feeler connection loop once every 2 minutes. **/ static constexpr auto FEELER_INTERVAL = 2min; /** Run the extra block-relay-only connection loop once every 5 minutes. **/ @@ -97,15 +97,22 @@ struct AddedNodeInfo class CNodeStats; class CClientUIInterface; -struct CSerializedNetMsg -{ +struct CSerializedNetMsg { CSerializedNetMsg() = default; CSerializedNetMsg(CSerializedNetMsg&&) = default; CSerializedNetMsg& operator=(CSerializedNetMsg&&) = default; - // No copying, only moves. + // No implicit copying, only moves. CSerializedNetMsg(const CSerializedNetMsg& msg) = delete; CSerializedNetMsg& operator=(const CSerializedNetMsg&) = delete; + CSerializedNetMsg Copy() const + { + CSerializedNetMsg copy; + copy.data = data; + copy.m_type = m_type; + return copy; + } + std::vector data; std::string m_type; }; @@ -241,11 +248,11 @@ class CNodeStats NodeId nodeid; ServiceFlags nServices; bool fRelayTxes; - int64_t nLastSend; - int64_t nLastRecv; - int64_t nLastTXTime; - int64_t nLastBlockTime; - int64_t nTimeConnected; + std::chrono::seconds m_last_send; + std::chrono::seconds m_last_recv; + std::chrono::seconds m_last_tx_time; + std::chrono::seconds m_last_block_time; + std::chrono::seconds m_connected; int64_t nTimeOffset; std::string m_addr_name; int nVersion; @@ -420,10 +427,10 @@ class CNode uint64_t nRecvBytes GUARDED_BY(cs_vRecv){0}; - std::atomic nLastSend{0}; - std::atomic nLastRecv{0}; - //! Unix epoch time at peer connection, in seconds. - const int64_t nTimeConnected; + std::atomic m_last_send{0s}; + std::atomic m_last_recv{0s}; + //! Unix epoch time at peer connection + const std::chrono::seconds m_connected; std::atomic nTimeOffset{0}; // Address of this peer const CAddress addr; @@ -433,12 +440,12 @@ class CNode //! Whether this peer is an inbound onion, i.e. connected via our Tor onion service. const bool m_inbound_onion; std::atomic nVersion{0}; - RecursiveMutex cs_SubVer; + RecursiveMutex m_subver_mutex; /** * cleanSubVer is a sanitized string of the user agent byte array we read * from the wire. This cleaned string can safely be logged or displayed. */ - std::string cleanSubVer GUARDED_BY(cs_SubVer){}; + std::string cleanSubVer GUARDED_BY(m_subver_mutex){}; bool m_prefer_evict{false}; // This peer is preferred for eviction. bool HasPermission(NetPermissionFlags permission) const { return NetPermissions::HasFlag(m_permissionFlags, permission); @@ -557,18 +564,28 @@ class CNode // m_tx_relay == nullptr if we're not relaying transactions with this peer std::unique_ptr m_tx_relay; + /** Whether we should relay transactions to this peer (their version + * message did not include fRelay=false and this is not a block-relay-only + * connection). This only changes from false to true. It will never change + * back to false. Used only in inbound eviction logic. */ + std::atomic_bool m_relays_txs{false}; + + /** Whether this peer has loaded a bloom filter. Used only in inbound + * eviction logic. */ + std::atomic_bool m_bloom_filter_loaded{false}; + /** UNIX epoch time of the last block received from this peer that we had * not yet seen (e.g. not already received from another peer), that passed * preliminary validity checks and was saved to disk, even if we don't * connect the block or it eventually fails connection. Used as an inbound * peer eviction criterium in CConnman::AttemptToEvictConnection. */ - std::atomic nLastBlockTime{0}; + std::atomic m_last_block_time{0s}; /** UNIX epoch time of the last transaction received from this peer that we * had not yet seen (e.g. not already received from another peer) and that * was accepted into our mempool. Used as an inbound peer eviction criterium * in CConnman::AttemptToEvictConnection. */ - std::atomic nLastTXTime{0}; + std::atomic m_last_tx_time{0s}; /** Last measured round-trip time. Used only for RPC/GUI stats/debugging.*/ std::atomic m_last_ping_time{0us}; @@ -784,7 +801,7 @@ class CConnman m_msgproc = connOptions.m_msgproc; nSendBufferMaxSize = connOptions.nSendBufferMaxSize; nReceiveFloodSize = connOptions.nReceiveFloodSize; - m_peer_connect_timeout = connOptions.m_peer_connect_timeout; + m_peer_connect_timeout = std::chrono::seconds{connOptions.m_peer_connect_timeout}; { LOCK(cs_totalBytesSent); nMaxOutboundLimit = connOptions.nMaxOutboundLimit; @@ -884,8 +901,8 @@ class CConnman * Attempts to open a connection. Currently only used from tests. * * @param[in] address Address of node to try connecting to - * @param[in] conn_type ConnectionType::OUTBOUND or ConnectionType::BLOCK_RELAY - * or ConnectionType::ADDR_FETCH + * @param[in] conn_type ConnectionType::OUTBOUND, ConnectionType::BLOCK_RELAY, + * ConnectionType::ADDR_FETCH or ConnectionType::FEELER * @return bool Returns false if there are no available * slots for this connection: * - conn_type not a supported ConnectionType @@ -935,14 +952,8 @@ class CConnman void WakeMessageHandler(); - /** Attempts to obfuscate tx time through exponentially distributed emitting. - Works assuming that a single interval is used. - Variable intervals will result in privacy decrease. - */ - std::chrono::microseconds PoissonNextSendInbound(std::chrono::microseconds now, std::chrono::seconds average_interval); - /** Return true if we should disconnect the peer for failing an inactivity check. */ - bool ShouldRunInactivityChecks(const CNode& node, int64_t secs_now) const; + bool ShouldRunInactivityChecks(const CNode& node, std::chrono::seconds now) const; private: struct ListenSocket { @@ -1037,7 +1048,7 @@ class CConnman uint64_t nMaxOutboundLimit GUARDED_BY(cs_totalBytesSent); // P2P timeout in seconds - int64_t m_peer_connect_timeout; + std::chrono::seconds m_peer_connect_timeout; // Whitelisted ranges. Any node connecting from these is automatically // whitelisted (as well as those connecting to whitelisted binds). @@ -1169,8 +1180,6 @@ class CConnman */ std::atomic_bool m_start_extra_block_relay_peers{false}; - std::atomic m_next_send_inv_to_incoming{0us}; - /** * A vector of -bind=
:=onion arguments each of which is * an address and port that are designated for incoming Tor connections. @@ -1181,19 +1190,16 @@ class CConnman friend struct ConnmanTestMsg; }; -/** Return a timestamp in the future (in microseconds) for exponentially distributed events. */ -std::chrono::microseconds PoissonNextSend(std::chrono::microseconds now, std::chrono::seconds average_interval); - /** Dump binary message to file, with timestamp */ void CaptureMessage(const CAddress& addr, const std::string& msg_type, const Span& data, bool is_incoming); struct NodeEvictionCandidate { NodeId id; - int64_t nTimeConnected; + std::chrono::seconds m_connected; std::chrono::microseconds m_min_ping_time; - int64_t nLastBlockTime; - int64_t nLastTXTime; + std::chrono::seconds m_last_block_time; + std::chrono::seconds m_last_tx_time; bool fRelevantServices; bool fRelayTxes; bool fBloomFilter; diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 2185ccc700..ec330928d3 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -39,6 +39,9 @@ #include #include +#include +#include +#include #include #include #include @@ -55,14 +58,14 @@ static constexpr auto HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1ms; * behind headers chain. */ static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4; -/** Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds */ -static constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60; // 20 minutes -/** How frequently to check for stale tips, in seconds */ -static constexpr int64_t STALE_CHECK_INTERVAL = 10 * 60; // 10 minutes -/** How frequently to check for extra outbound peers and disconnect, in seconds */ -static constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45; -/** Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict, in seconds */ -static constexpr int64_t MINIMUM_CONNECT_TIME = 30; +/** Timeout for (unprotected) outbound peers to sync to our chainwork */ +static constexpr auto CHAIN_SYNC_TIMEOUT{20min}; +/** How frequently to check for stale tips */ +static constexpr auto STALE_CHECK_INTERVAL{10min}; +/** How frequently to check for extra outbound peers and disconnect */ +static constexpr auto EXTRA_PEER_CHECK_INTERVAL{45s}; +/** Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict */ +static constexpr auto MINIMUM_CONNECT_TIME{30s}; /** SHA256("main address relay")[0:8] */ static constexpr uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL; /// Age after which a stale block will no longer be served if requested as @@ -72,7 +75,7 @@ static constexpr int STALE_RELAY_AGE_LIMIT = 30 * 24 * 60 * 60; /// limiting block relay. Set to one week, denominated in seconds. static constexpr int HISTORICAL_BLOCK_AGE = 7 * 24 * 60 * 60; /** Time between pings automatically sent out for latency probing and keepalive */ -static constexpr std::chrono::minutes PING_INTERVAL{2}; +static constexpr auto PING_INTERVAL{2min}; /** The maximum number of entries in a locator */ static const unsigned int MAX_LOCATOR_SZ = 101; /** The maximum number of entries in an 'inv' protocol message */ @@ -86,19 +89,19 @@ static constexpr int32_t MAX_PEER_TX_REQUEST_IN_FLIGHT = 100; * the actual transaction (from any peer) in response to requests for them. */ static constexpr int32_t MAX_PEER_TX_ANNOUNCEMENTS = 5000; /** How long to delay requesting transactions via txids, if we have wtxid-relaying peers */ -static constexpr auto TXID_RELAY_DELAY = std::chrono::seconds{2}; +static constexpr auto TXID_RELAY_DELAY{2s}; /** How long to delay requesting transactions from non-preferred peers */ -static constexpr auto NONPREF_PEER_TX_DELAY = std::chrono::seconds{2}; +static constexpr auto NONPREF_PEER_TX_DELAY{2s}; /** How long to delay requesting transactions from overloaded peers (see MAX_PEER_TX_REQUEST_IN_FLIGHT). */ -static constexpr auto OVERLOADED_PEER_TX_DELAY = std::chrono::seconds{2}; -/** How long to wait (in microseconds) before downloading a transaction from an additional peer */ -static constexpr std::chrono::microseconds GETDATA_TX_INTERVAL{std::chrono::seconds{60}}; +static constexpr auto OVERLOADED_PEER_TX_DELAY{2s}; +/** How long to wait before downloading a transaction from an additional peer */ +static constexpr auto GETDATA_TX_INTERVAL{60s}; /** Limit to avoid sending big packets. Not used in processing incoming GETDATA for compatibility */ static const unsigned int MAX_GETDATA_SZ = 1000; /** Number of blocks that can be requested at any given time from a single peer. */ static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 16; /** Time during which a peer must stall block download progress before being disconnected. */ -static constexpr auto BLOCK_STALLING_TIMEOUT = 2s; +static constexpr auto BLOCK_STALLING_TIMEOUT{2s}; /** Number of headers sent in one getheaders result. We rely on the assumption that if a peer sends * less than this number, we reached its tip. Changing this value is a protocol upgrade. */ static const unsigned int MAX_HEADERS_RESULTS = 2000; @@ -123,16 +126,16 @@ static const int MAX_UNCONNECTING_HEADERS = 10; /** Minimum blocks required to signal NODE_NETWORK_LIMITED */ static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288; /** Average delay between local address broadcasts */ -static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL = 24h; +static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL{24h}; /** Average delay between peer address broadcasts */ -static constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL = 30s; +static constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL{30s}; /** Average delay between trickled inventory transmissions for inbound peers. * Blocks and peers with NetPermissionFlags::NoBan permission bypass this. */ -static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL = 5s; +static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL{5s}; /** Average delay between trickled inventory transmissions for outbound peers. * Use a smaller delay as there is less privacy concern for them. * Blocks and peers with NetPermissionFlags::NoBan permission bypass this. */ -static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL = 2s; +static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL{2s}; /** Maximum rate of inventory items to send per second. * Limits the impact of low-fee transaction floods. */ static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7; @@ -146,9 +149,9 @@ static constexpr unsigned int INVENTORY_MAX_RECENT_RELAY = 3500; * peers, and random variations in the broadcast mechanism. */ static_assert(INVENTORY_MAX_RECENT_RELAY >= INVENTORY_BROADCAST_PER_SECOND * UNCONDITIONAL_RELAY_DELAY / std::chrono::seconds{1}, "INVENTORY_RELAY_MAX too low"); /** Average delay between feefilter broadcasts in seconds. */ -static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL = 10min; +static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL{10min}; /** Maximum feefilter broadcast delay after significant change. */ -static constexpr auto MAX_FEEFILTER_CHANGE_DELAY = 5min; +static constexpr auto MAX_FEEFILTER_CHANGE_DELAY{5min}; /** Maximum number of compact filters that may be requested with one getcfilters. See BIP 157. */ static constexpr uint32_t MAX_GETCFILTERS_SIZE = 1000; /** Maximum number of cf hashes that may be requested with one getcfheaders. See BIP 157. */ @@ -224,6 +227,9 @@ struct Peer { /** Whether a ping has been requested by the user */ std::atomic m_ping_queued{false}; + /** Whether this peer relays txs via wtxid */ + std::atomic m_wtxid_relay{false}; + /** A vector of addresses to send to the peer, limited to MAX_ADDR_TO_SEND. */ std::vector m_addrs_to_send; /** Probabilistic filter to track recent addr messages relayed with this @@ -312,6 +318,7 @@ class PeerManagerImpl final : public PeerManager /** Implement PeerManager */ void StartScheduledTasks(CScheduler& scheduler) override; void CheckForStaleTipAndEvictPeers() override; + std::optional FetchBlock(NodeId peer_id, const CBlockIndex& block_index) override; bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const override; bool IgnoresIncomingTxs() override { return m_ignore_incoming_txs; } void SendPings() override; @@ -322,14 +329,11 @@ class PeerManagerImpl final : public PeerManager const std::chrono::microseconds time_received, const std::atomic& interruptMsgProc) override; private: - void _RelayTransaction(const uint256& txid, const uint256& wtxid) - EXCLUSIVE_LOCKS_REQUIRED(cs_main); - /** Consider evicting an outbound peer based on the amount of time they've been behind our tip */ - void ConsiderEviction(CNode& pto, int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + void ConsiderEviction(CNode& pto, std::chrono::seconds time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main); /** If we have extra outbound peers, try to disconnect the one with the oldest block announcement */ - void EvictExtraOutboundPeers(int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + void EvictExtraOutboundPeers(std::chrono::seconds now) EXCLUSIVE_LOCKS_REQUIRED(cs_main); /** Retrieve unbroadcast transactions from the mempool and reattempt sending to peers */ void ReattemptInitialBroadcast(CScheduler& scheduler); @@ -385,7 +389,7 @@ class PeerManagerImpl final : public PeerManager EXCLUSIVE_LOCKS_REQUIRED(::cs_main); /** Send a version message to a peer */ - void PushNodeVersion(CNode& pnode, int64_t nTime); + void PushNodeVersion(CNode& pnode); /** Send a ping message every PING_INTERVAL or if requested via RPC. May * mark the peer to be disconnected if a ping has timed out. @@ -406,7 +410,7 @@ class PeerManagerImpl final : public PeerManager void RelayAddress(NodeId originator, const CAddress& addr, bool fReachable); /** Send `feefilter` message. */ - void MaybeSendFeefilter(CNode& node, std::chrono::microseconds current_time) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + void MaybeSendFeefilter(CNode& node, std::chrono::microseconds current_time); const CChainParams& m_chainparams; CConnman& m_connman; @@ -421,7 +425,7 @@ class PeerManagerImpl final : public PeerManager std::atomic m_best_height{-1}; /** Next time to check for stale tip */ - int64_t m_stale_tip_check_time{0}; + std::chrono::seconds m_stale_tip_check_time{0s}; /** Whether this node is running in blocks only mode */ const bool m_ignore_incoming_txs; @@ -441,6 +445,8 @@ class PeerManagerImpl final : public PeerManager */ std::map m_peer_map GUARDED_BY(m_peer_mutex); + std::atomic m_next_inv_to_inbounds{0us}; + /** Number of nodes with fSyncStarted. */ int nSyncStarted GUARDED_BY(cs_main) = 0; @@ -453,7 +459,7 @@ class PeerManagerImpl final : public PeerManager std::map> mapBlockSource GUARDED_BY(cs_main); /** Number of peers with wtxid relay. */ - int m_wtxid_relay_peers GUARDED_BY(cs_main) = 0; + std::atomic m_wtxid_relay_peers{0}; /** Number of outbound peers with m_chain_sync.m_protect. */ int m_outbound_peers_with_protect_from_disconnect GUARDED_BY(cs_main) = 0; @@ -515,6 +521,15 @@ class PeerManagerImpl final : public PeerManager Mutex m_recent_confirmed_transactions_mutex; CRollingBloomFilter m_recent_confirmed_transactions GUARDED_BY(m_recent_confirmed_transactions_mutex){48'000, 0.000'001}; + /** + * For sending `inv`s to inbound peers, we use a single (exponentially + * distributed) timer for all peers. If we used a separate timer for each + * peer, a spy node could make multiple inbound connections to us to + * accurately determine when we received the transaction (and potentially + * determine the transaction's origin). */ + std::chrono::microseconds NextInvToInbounds(std::chrono::microseconds now, + std::chrono::seconds average_interval); + /** Have we requested this block from a peer */ bool IsBlockRequested(const uint256& hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main); @@ -540,7 +555,7 @@ class PeerManagerImpl final : public PeerManager std::map::iterator> > mapBlocksInFlight GUARDED_BY(cs_main); /** When our tip was last updated. */ - std::atomic m_last_tip_update{0}; + std::atomic m_last_tip_update{0s}; /** Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed). */ CTransactionRef FindTxForGetData(const CNode& peer, const GenTxid& gtxid, const std::chrono::seconds mempool_req, const std::chrono::seconds now) LOCKS_EXCLUDED(cs_main); @@ -724,7 +739,7 @@ struct CNodeState { * - its chain tip has at least as much work as ours * * CHAIN_SYNC_TIMEOUT: if a peer's best known block has less work than our tip, - * set a timeout CHAIN_SYNC_TIMEOUT seconds in the future: + * set a timeout CHAIN_SYNC_TIMEOUT in the future: * - If at timeout their best known block now has more work than our tip * when the timeout was set, then either reset the timeout or clear it * (after comparing against our current tip's work) @@ -739,7 +754,7 @@ struct CNodeState { */ struct ChainSyncTimeoutState { //! A timeout used for checking whether our peer has sufficiently synced - int64_t m_timeout{0}; + std::chrono::seconds m_timeout{0s}; //! A header with the work we require on our peer's chain const CBlockIndex* m_work_header{nullptr}; //! After timeout is reached, set to true after sending getheaders @@ -759,9 +774,6 @@ struct CNodeState { //! A rolling bloom filter of all announced tx CInvs to this peer. CRollingBloomFilter m_recently_announced_invs = CRollingBloomFilter{INVENTORY_MAX_RECENT_RELAY, 0.000001}; - //! Whether this peer relays txs via wtxid - bool m_wtxid_relay{false}; - CNodeState(bool is_inbound) : m_is_inbound(is_inbound) {} }; @@ -816,6 +828,18 @@ static void UpdatePreferredDownload(const CNode& node, CNodeState* state) EXCLUS nPreferredDownload += state->fPreferredDownload; } +std::chrono::microseconds PeerManagerImpl::NextInvToInbounds(std::chrono::microseconds now, + std::chrono::seconds average_interval) +{ + if (m_next_inv_to_inbounds.load() < now) { + // If this function were called from multiple threads simultaneously + // it would possible that both update the next send variable, and return a different result to their caller. + // This is not possible in practice as only the net processing thread invokes this function. + m_next_inv_to_inbounds = GetExponentialRand(now, average_interval); + } + return m_next_inv_to_inbounds; +} + bool PeerManagerImpl::IsBlockRequested(const uint256& hash) { return mapBlocksInFlight.find(hash) != mapBlocksInFlight.end(); @@ -946,10 +970,10 @@ bool PeerManagerImpl::TipMayBeStale() { AssertLockHeld(cs_main); const Consensus::Params& consensusParams = m_chainparams.GetConsensus(); - if (m_last_tip_update == 0) { - m_last_tip_update = GetTime(); + if (m_last_tip_update.load() == 0s) { + m_last_tip_update = GetTime(); } - return m_last_tip_update < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty(); + return m_last_tip_update.load() < GetTime() - std::chrono::seconds{consensusParams.nPowTargetSpacing * 3} && mapBlocksInFlight.empty(); } bool PeerManagerImpl::CanDirectFetch() @@ -1089,12 +1113,13 @@ void PeerManagerImpl::FindNextBlocksToDownload(NodeId nodeid, unsigned int count } // namespace -void PeerManagerImpl::PushNodeVersion(CNode& pnode, int64_t nTime) +void PeerManagerImpl::PushNodeVersion(CNode& pnode) { // Note that pnode->GetLocalServices() is a reflection of the local // services we were offering when the CNode object was created for this // peer. uint64_t my_services{pnode.GetLocalServices()}; + const int64_t nTime{count_seconds(GetTime())}; uint64_t nonce = pnode.GetLocalNonce(); const int nNodeStartingHeight{m_best_height}; NodeId nodeid = pnode.GetId(); @@ -1103,7 +1128,7 @@ void PeerManagerImpl::PushNodeVersion(CNode& pnode, int64_t nTime) CService addr_you = addr.IsRoutable() && !IsProxy(addr) && addr.IsAddrV1Compatible() ? addr : CService(); uint64_t your_services{addr.nServices}; - const bool tx_relay = !m_ignore_incoming_txs && pnode.m_tx_relay != nullptr; + const bool tx_relay = !m_ignore_incoming_txs && pnode.m_tx_relay != nullptr && !pnode.IsFeelerConn(); m_connman.PushMessage(&pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, my_services, nTime, your_services, addr_you, // Together the pre-version-31402 serialization of CAddress "addrYou" (without nTime) my_services, CService(), // Together the pre-version-31402 serialization of CAddress "addrMe" (without nTime) @@ -1133,7 +1158,7 @@ void PeerManagerImpl::AddTxAnnouncement(const CNode& node, const GenTxid& gtxid, // - TXID_RELAY_DELAY for txid announcements while wtxid peers are available // - OVERLOADED_PEER_TX_DELAY for announcements from peers which have at least // MAX_PEER_TX_REQUEST_IN_FLIGHT requests in flight (and don't have NetPermissionFlags::Relay). - auto delay = std::chrono::microseconds{0}; + auto delay{0us}; const bool preferred = state->fPreferredDownload; if (!preferred) delay += NONPREF_PEER_TX_DELAY; if (!gtxid.IsWtxid() && m_wtxid_relay_peers > 0) delay += TXID_RELAY_DELAY; @@ -1166,7 +1191,7 @@ void PeerManagerImpl::InitializeNode(CNode *pnode) m_peer_map.emplace_hint(m_peer_map.end(), nodeid, std::move(peer)); } if (!pnode->IsInboundConn()) { - PushNodeVersion(*pnode, GetTime()); + PushNodeVersion(*pnode); } } @@ -1178,8 +1203,7 @@ void PeerManagerImpl::ReattemptInitialBroadcast(CScheduler& scheduler) CTransactionRef tx = m_mempool.get(txid); if (tx != nullptr) { - LOCK(cs_main); - _RelayTransaction(txid, tx->GetWitnessHash()); + RelayTransaction(txid, tx->GetWitnessHash()); } else { m_mempool.RemoveUnbroadcastTx(txid, true); } @@ -1187,7 +1211,7 @@ void PeerManagerImpl::ReattemptInitialBroadcast(CScheduler& scheduler) // Schedule next run for 10-15 minutes in the future. // We add randomness on every cycle to avoid the possibility of P2P fingerprinting. - const std::chrono::milliseconds delta = std::chrono::minutes{10} + GetRandMillis(std::chrono::minutes{5}); + const std::chrono::milliseconds delta = 10min + GetRandMillis(5min); scheduler.scheduleFromNow([&] { ReattemptInitialBroadcast(scheduler); }, delta); } @@ -1206,6 +1230,8 @@ void PeerManagerImpl::FinalizeNode(const CNode& node) PeerRef peer = RemovePeer(nodeid); assert(peer != nullptr); misbehavior = WITH_LOCK(peer->m_misbehavior_mutex, return peer->m_misbehavior_score); + m_wtxid_relay_peers -= peer->m_wtxid_relay; + assert(m_wtxid_relay_peers >= 0); } CNodeState *state = State(nodeid); assert(state != nullptr); @@ -1223,8 +1249,6 @@ void PeerManagerImpl::FinalizeNode(const CNode& node) assert(m_peers_downloading_from >= 0); m_outbound_peers_with_protect_from_disconnect -= state->m_chain_sync.m_protect; assert(m_outbound_peers_with_protect_from_disconnect >= 0); - m_wtxid_relay_peers -= state->m_wtxid_relay; - assert(m_wtxid_relay_peers >= 0); mapNodeState.erase(nodeid); @@ -1292,7 +1316,7 @@ bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) c // since pingtime does not update until the ping is complete, which might take a while. // So, if a ping is taking an unusually long time in flight, // the caller can immediately detect that this is happening. - std::chrono::microseconds ping_wait{0}; + auto ping_wait{0us}; if ((0 != peer->m_ping_nonce_sent) && (0 != peer->m_ping_start.load().count())) { ping_wait = GetTime() - peer->m_ping_start.load(); } @@ -1427,6 +1451,41 @@ bool PeerManagerImpl::BlockRequestAllowed(const CBlockIndex* pindex) (GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, m_chainparams.GetConsensus()) < STALE_RELAY_AGE_LIMIT); } +std::optional PeerManagerImpl::FetchBlock(NodeId peer_id, const CBlockIndex& block_index) +{ + if (fImporting) return "Importing..."; + if (fReindex) return "Reindexing..."; + + LOCK(cs_main); + // Ensure this peer exists and hasn't been disconnected + CNodeState* state = State(peer_id); + if (state == nullptr) return "Peer does not exist"; + // Ignore pre-segwit peers + if (!state->fHaveWitness) return "Pre-SegWit peer"; + + // Mark block as in-flight unless it already is (for this peer). + // If a block was already in-flight for a different peer, its BLOCKTXN + // response will be dropped. + if (!BlockRequested(peer_id, block_index)) return "Already requested from this peer"; + + // Construct message to request the block + const uint256& hash{block_index.GetBlockHash()}; + std::vector invs{CInv(MSG_BLOCK | MSG_WITNESS_FLAG, hash)}; + + // Send block request message to the peer + bool success = m_connman.ForNode(peer_id, [this, &invs](CNode* node) { + const CNetMsgMaker msgMaker(node->GetCommonVersion()); + this->m_connman.PushMessage(node, msgMaker.Make(NetMsgType::GETDATA, invs)); + return true; + }); + + if (!success) return "Peer not fully connected"; + + LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n", + hash.ToString(), peer_id); + return std::nullopt; +} + std::unique_ptr PeerManager::make(const CChainParams& chainparams, CConnman& connman, AddrMan& addrman, BanMan* banman, ChainstateManager& chainman, CTxMemPool& pool, bool ignore_incoming_txs) @@ -1457,7 +1516,7 @@ void PeerManagerImpl::StartScheduledTasks(CScheduler& scheduler) scheduler.scheduleEvery([this] { this->CheckForStaleTipAndEvictPeers(); }, std::chrono::seconds{EXTRA_PEER_CHECK_INTERVAL}); // schedule next run for 10-15 minutes in the future - const std::chrono::milliseconds delta = std::chrono::minutes{10} + GetRandMillis(std::chrono::minutes{5}); + const std::chrono::milliseconds delta = 10min + GetRandMillis(5min); scheduler.scheduleFromNow([&] { ReattemptInitialBroadcast(scheduler); }, delta); } @@ -1469,7 +1528,7 @@ void PeerManagerImpl::StartScheduledTasks(CScheduler& scheduler) void PeerManagerImpl::BlockConnected(const std::shared_ptr& pblock, const CBlockIndex* pindex) { m_orphanage.EraseForBlock(*pblock); - m_last_tip_update = GetTime(); + m_last_tip_update = GetTime(); { LOCK(m_recent_confirmed_transactions_mutex); @@ -1528,6 +1587,8 @@ void PeerManagerImpl::NewPoWValidBlock(const CBlockIndex *pindex, const std::sha bool fWitnessEnabled = DeploymentActiveAt(*pindex, m_chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT); uint256 hashBlock(pblock->GetHash()); + const std::shared_future lazy_ser{ + std::async(std::launch::deferred, [&] { return msgMaker.Make(NetMsgType::CMPCTBLOCK, *pcmpctblock); })}; { LOCK(cs_most_recent_block); @@ -1537,10 +1598,9 @@ void PeerManagerImpl::NewPoWValidBlock(const CBlockIndex *pindex, const std::sha fWitnessesPresentInMostRecentCompactBlock = fWitnessEnabled; } - m_connman.ForEachNode([this, &pcmpctblock, pindex, &msgMaker, fWitnessEnabled, &hashBlock](CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { + m_connman.ForEachNode([this, pindex, fWitnessEnabled, &lazy_ser, &hashBlock](CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { AssertLockHeld(::cs_main); - // TODO: Avoid the repeated-serialization here if (pnode->GetCommonVersion() < INVALID_CB_NO_BAN_VERSION || pnode->fDisconnect) return; ProcessBlockAvailability(pnode->GetId()); @@ -1552,7 +1612,9 @@ void PeerManagerImpl::NewPoWValidBlock(const CBlockIndex *pindex, const std::sha LogPrint(BCLog::NET, "%s sending header-and-ids %s to peer=%d\n", "PeerManager::NewPoWValidBlock", hashBlock.ToString(), pnode->GetId()); - m_connman.PushMessage(pnode, msgMaker.Make(NetMsgType::CMPCTBLOCK, *pcmpctblock)); + + const CSerializedNetMsg& ser_cmpctblock{lazy_ser.get()}; + m_connman.PushMessage(pnode, ser_cmpctblock.Copy()); state.pindexBestHeaderSent = pindex; } }); @@ -1674,21 +1736,22 @@ void PeerManagerImpl::SendPings() void PeerManagerImpl::RelayTransaction(const uint256& txid, const uint256& wtxid) { - WITH_LOCK(cs_main, _RelayTransaction(txid, wtxid);); -} + std::map relay_peers; + { + // Don't hold m_peer_mutex while calling ForEachNode() to avoid an + // m_peer_mutex/cs_vNodes lock inversion. During shutdown, FinalizeNode() + // is called while holding cs_vNodes. + LOCK(m_peer_mutex); + for (auto& it : m_peer_map) { + relay_peers.emplace(it.first, it.second->m_wtxid_relay ? wtxid : txid); + } + } -void PeerManagerImpl::_RelayTransaction(const uint256& txid, const uint256& wtxid) -{ - m_connman.ForEachNode([&txid, &wtxid](CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { - AssertLockHeld(::cs_main); + m_connman.ForEachNode([&relay_peers](CNode* node) { + auto it = relay_peers.find(node->GetId()); + if (it == relay_peers.end()) return; // Should never happen - CNodeState* state = State(pnode->GetId()); - if (state == nullptr) return; - if (state->m_wtxid_relay) { - pnode->PushTxInventory(wtxid); - } else { - pnode->PushTxInventory(txid); - } + node->PushTxInventory(it->second); }); } @@ -1707,8 +1770,8 @@ void PeerManagerImpl::RelayAddress(NodeId originator, // Relay to a limited number of other nodes // Use deterministic randomness to send to the same nodes for 24 hours // at a time so the m_addr_knowns of the chosen nodes prevent repeats - uint64_t hashAddr = addr.GetHash(); - const CSipHasher hasher = m_connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24 * 60 * 60)); + const uint64_t hashAddr{addr.GetHash()}; + const CSipHasher hasher{m_connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr).Write((GetTime() + hashAddr) / (24 * 60 * 60))}; FastRandomContext insecure_rand; // Relay reachable addresses to 2 peers. Unreachable addresses are relayed randomly to 1 or 2 peers. @@ -1812,10 +1875,10 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& // Fast-path: in this case it is possible to serve the block directly from disk, // as the network format matches the format on disk std::vector block_data; - if (!ReadRawBlockFromDisk(block_data, pindex, m_chainparams.MessageStart())) { + if (!ReadRawBlockFromDisk(block_data, pindex->GetBlockPos(), m_chainparams.MessageStart())) { assert(!"cannot load block from disk"); } - m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, MakeSpan(block_data))); + m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, Span{block_data})); // Don't set pblock as we've sent the block } else { // Send block from disk @@ -1924,10 +1987,9 @@ void PeerManagerImpl::ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic std::vector vNotFound; const CNetMsgMaker msgMaker(pfrom.GetCommonVersion()); - const std::chrono::seconds now = GetTime(); + const auto now{GetTime()}; // Get last mempool request time - const std::chrono::seconds mempool_req = pfrom.m_tx_relay != nullptr ? pfrom.m_tx_relay->m_last_mempool_req.load() - : std::chrono::seconds::min(); + const auto mempool_req = pfrom.m_tx_relay != nullptr ? pfrom.m_tx_relay->m_last_mempool_req.load() : std::chrono::seconds::min(); // Process as many TX items from the front of the getdata queue as // possible, since they're common and it's efficient to batch process @@ -2248,7 +2310,7 @@ void PeerManagerImpl::ProcessOrphanTx(std::set& orphan_work_set) if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) { LogPrint(BCLog::MEMPOOL, " accepted orphan tx %s\n", orphanHash.ToString()); - _RelayTransaction(orphanHash, porphanTx->GetWitnessHash()); + RelayTransaction(orphanHash, porphanTx->GetWitnessHash()); m_orphanage.AddChildrenToWorkSet(*porphanTx, orphan_work_set); m_orphanage.EraseTx(orphanHash); for (const CTransactionRef& removedTx : result.m_replaced_transactions.value()) { @@ -2475,7 +2537,7 @@ void PeerManagerImpl::ProcessBlock(CNode& node, const std::shared_ptr(); } else { LOCK(cs_main); mapBlockSource.erase(block->GetHash()); @@ -2563,7 +2625,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // Inbound peers send us their version message when they connect. // We send our version message in response. - if (pfrom.IsInboundConn()) PushNodeVersion(pfrom, GetAdjustedTime()); + if (pfrom.IsInboundConn()) { + PushNodeVersion(pfrom); + } // Change version const int greatest_common_version = std::min(nVersion, PROTOCOL_VERSION); @@ -2590,7 +2654,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, pfrom.nServices = nServices; pfrom.SetAddrLocal(addrMe); { - LOCK(pfrom.cs_SubVer); + LOCK(pfrom.m_subver_mutex); pfrom.cleanSubVer = cleanSubVer; } peer->m_starting_height = starting_height; @@ -2604,6 +2668,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, if (pfrom.m_tx_relay != nullptr) { LOCK(pfrom.m_tx_relay->cs_filter); pfrom.m_tx_relay->fRelayTxes = fRelay; // set to true after we get the first filter* message + if (fRelay) pfrom.m_relays_txs = true; } if((nServices & NODE_WITNESS)) @@ -2683,7 +2748,11 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, int64_t nTimeOffset = nTime - GetTime(); pfrom.nTimeOffset = nTimeOffset; - AddTimeData(pfrom.addr, nTimeOffset); + if (!pfrom.IsInboundConn()) { + // Don't use timedata samples from inbound peers to make it + // harder for others to tamper with our adjusted time. + AddTimeData(pfrom.addr, nTimeOffset); + } // If the peer is old enough to have the old alert system, send it the final alert. if (greatest_common_version <= 70012) { @@ -2784,9 +2853,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, return; } if (pfrom.GetCommonVersion() >= WTXID_RELAY_VERSION) { - LOCK(cs_main); - if (!State(pfrom.GetId())->m_wtxid_relay) { - State(pfrom.GetId())->m_wtxid_relay = true; + if (!peer->m_wtxid_relay) { + peer->m_wtxid_relay = true; m_wtxid_relay_peers++; } else { LogPrint(BCLog::NET, "ignoring duplicate wtxidrelay from peer=%d\n", pfrom.GetId()); @@ -2845,7 +2913,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, int64_t nSince = nNow - 10 * 60; // Update/increment addr rate limiting bucket. - const auto current_time = GetTime(); + const auto current_time{GetTime()}; if (peer->m_addr_token_bucket < MAX_ADDR_PROCESSING_TOKEN_BUCKET) { // Don't increment bucket if it's already full const auto time_diff = std::max(current_time - peer->m_addr_token_timestamp, 0us); @@ -2931,7 +2999,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, LOCK(cs_main); - const auto current_time = GetTime(); + const auto current_time{GetTime()}; uint256* best_block{nullptr}; for (CInv& inv : vInv) { @@ -2940,7 +3008,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // Ignore INVs that don't match wtxidrelay setting. // Note that orphan parent fetching always uses MSG_TX GETDATAs regardless of the wtxidrelay setting. // This is fine as no INV messages are involved in that process. - if (State(pfrom.GetId())->m_wtxid_relay) { + if (peer->m_wtxid_relay) { if (inv.IsMsgTx()) continue; } else { if (inv.IsMsgWtx()) continue; @@ -3043,7 +3111,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, LOCK(cs_main); // Find the last block the caller has in the main chain - const CBlockIndex* pindex = m_chainman.m_blockman.FindForkInGlobalIndex(m_chainman.ActiveChain(), locator); + const CBlockIndex* pindex = m_chainman.ActiveChainstate().FindForkInGlobalIndex(locator); // Send the rest of the chain if (pindex) @@ -3139,9 +3207,23 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, return; } + if (fImporting || fReindex) { + LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d while importing/reindexing\n", pfrom.GetId()); + return; + } + LOCK(cs_main); - if (m_chainman.ActiveChainstate().IsInitialBlockDownload() && !pfrom.HasPermission(NetPermissionFlags::Download)) { - LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because node is in initial block download\n", pfrom.GetId()); + + // Note that if we were to be on a chain that forks from the checkpointed + // chain, then serving those headers to a peer that has seen the + // checkpointed chain would cause that peer to disconnect us. Requiring + // that our chainwork exceed nMinimumChainWork is a protection against + // being fed a bogus chain when we started up for the first time and + // getting partitioned off the honest network for serving that chain to + // others. + if (m_chainman.ActiveTip() == nullptr || + (m_chainman.ActiveTip()->nChainWork < nMinimumChainWork && !pfrom.HasPermission(NetPermissionFlags::Download))) { + LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because active chain has too little work\n", pfrom.GetId()); return; } @@ -3163,7 +3245,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, else { // Find the last block the caller has in the main chain - pindex = m_chainman.m_blockman.FindForkInGlobalIndex(m_chainman.ActiveChain(), locator); + pindex = m_chainman.ActiveChainstate().FindForkInGlobalIndex(locator); if (pindex) pindex = m_chainman.ActiveChain().Next(pindex); } @@ -3206,6 +3288,11 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, return; } + // Stop processing the transaction early if we are still in IBD since we don't + // have enough information to validate it yet. Sending unsolicited transactions + // is not considered a protocol violation, so don't punish the peer. + if (m_chainman.ActiveChainstate().IsInitialBlockDownload()) return; + CTransactionRef ptx; vRecv >> ptx; const CTransaction& tx = *ptx; @@ -3213,13 +3300,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, const uint256& txid = ptx->GetHash(); const uint256& wtxid = ptx->GetWitnessHash(); - LOCK2(cs_main, g_cs_orphans); - - CNodeState* nodestate = State(pfrom.GetId()); - - const uint256& hash = nodestate->m_wtxid_relay ? wtxid : txid; + const uint256& hash = peer->m_wtxid_relay ? wtxid : txid; pfrom.AddKnownTx(hash); - if (nodestate->m_wtxid_relay && txid != wtxid) { + if (peer->m_wtxid_relay && txid != wtxid) { // Insert txid into filterInventoryKnown, even for // wtxidrelay peers. This prevents re-adding of // unconfirmed parents to the recently_announced @@ -3228,6 +3311,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, pfrom.AddKnownTx(txid); } + LOCK2(cs_main, g_cs_orphans); + m_txrequest.ReceivedResponse(pfrom.GetId(), txid); if (tx.HasWitness()) m_txrequest.ReceivedResponse(pfrom.GetId(), wtxid); @@ -3252,7 +3337,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, LogPrintf("Not relaying non-mempool transaction %s from forcerelay peer=%d\n", tx.GetHash().ToString(), pfrom.GetId()); } else { LogPrintf("Force relaying tx %s from peer=%d\n", tx.GetHash().ToString(), pfrom.GetId()); - _RelayTransaction(tx.GetHash(), tx.GetWitnessHash()); + RelayTransaction(tx.GetHash(), tx.GetWitnessHash()); } } return; @@ -3266,10 +3351,10 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // requests for it. m_txrequest.ForgetTxHash(tx.GetHash()); m_txrequest.ForgetTxHash(tx.GetWitnessHash()); - _RelayTransaction(tx.GetHash(), tx.GetWitnessHash()); + RelayTransaction(tx.GetHash(), tx.GetWitnessHash()); m_orphanage.AddChildrenToWorkSet(tx, peer->m_orphan_work_set); - pfrom.nLastTXTime = GetTime(); + pfrom.m_last_tx_time = GetTime(); LogPrint(BCLog::MEMPOOL, "AcceptToMemoryPool: peer=%d: accepted %s (poolsz %u txn, %u kB)\n", pfrom.GetId(), @@ -3304,7 +3389,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, } } if (!fRejectedParents) { - const auto current_time = GetTime(); + const auto current_time{GetTime()}; for (const uint256& parent_txid : unique_parents) { // Here, we only have the txid (and not wtxid) of the @@ -3909,7 +3994,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, { LOCK(pfrom.m_tx_relay->cs_filter); pfrom.m_tx_relay->pfilter.reset(new CBloomFilter(filter)); + pfrom.m_bloom_filter_loaded = true; pfrom.m_tx_relay->fRelayTxes = true; + pfrom.m_relays_txs = true; } return; } @@ -3953,7 +4040,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, } LOCK(pfrom.m_tx_relay->cs_filter); pfrom.m_tx_relay->pfilter = nullptr; + pfrom.m_bloom_filter_loaded = false; pfrom.m_tx_relay->fRelayTxes = true; + pfrom.m_relays_txs = true; return; } @@ -4105,7 +4194,7 @@ bool PeerManagerImpl::ProcessMessages(CNode* pfrom, std::atomic& interrupt ); if (gArgs.GetBoolArg("-capturemessages", false)) { - CaptureMessage(pfrom->addr, msg.m_command, MakeUCharSpan(msg.m_recv), /* incoming */ true); + CaptureMessage(pfrom->addr, msg.m_command, MakeUCharSpan(msg.m_recv), /*is_incoming=*/true); } msg.SetVersion(pfrom->GetCommonVersion()); @@ -4130,7 +4219,7 @@ bool PeerManagerImpl::ProcessMessages(CNode* pfrom, std::atomic& interrupt return fMoreWork; } -void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds) +void PeerManagerImpl::ConsiderEviction(CNode& pto, std::chrono::seconds time_in_seconds) { AssertLockHeld(cs_main); @@ -4145,12 +4234,12 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds) // unless it's invalid, in which case we should find that out and // disconnect from them elsewhere). if (state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= m_chainman.ActiveChain().Tip()->nChainWork) { - if (state.m_chain_sync.m_timeout != 0) { - state.m_chain_sync.m_timeout = 0; + if (state.m_chain_sync.m_timeout != 0s) { + state.m_chain_sync.m_timeout = 0s; state.m_chain_sync.m_work_header = nullptr; state.m_chain_sync.m_sent_getheaders = false; } - } else if (state.m_chain_sync.m_timeout == 0 || (state.m_chain_sync.m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= state.m_chain_sync.m_work_header->nChainWork)) { + } else if (state.m_chain_sync.m_timeout == 0s || (state.m_chain_sync.m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= state.m_chain_sync.m_work_header->nChainWork)) { // Our best block known by this peer is behind our tip, and we're either noticing // that for the first time, OR this peer was able to catch up to some earlier point // where we checked against our tip. @@ -4158,7 +4247,7 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds) state.m_chain_sync.m_timeout = time_in_seconds + CHAIN_SYNC_TIMEOUT; state.m_chain_sync.m_work_header = m_chainman.ActiveChain().Tip(); state.m_chain_sync.m_sent_getheaders = false; - } else if (state.m_chain_sync.m_timeout > 0 && time_in_seconds > state.m_chain_sync.m_timeout) { + } else if (state.m_chain_sync.m_timeout > 0s && time_in_seconds > state.m_chain_sync.m_timeout) { // No evidence yet that our peer has synced to a chain with work equal to that // of our tip, when we first detected it was behind. Send a single getheaders // message to give the peer a chance to update us. @@ -4171,7 +4260,7 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds) LogPrint(BCLog::NET, "sending getheaders to outbound peer=%d to verify chain work (current best known block:%s, benchmark blockhash: %s)\n", pto.GetId(), state.pindexBestKnownBlock != nullptr ? state.pindexBestKnownBlock->GetBlockHash().ToString() : "", state.m_chain_sync.m_work_header->GetBlockHash().ToString()); m_connman.PushMessage(&pto, msgMaker.Make(NetMsgType::GETHEADERS, m_chainman.ActiveChain().GetLocator(state.m_chain_sync.m_work_header->pprev), uint256())); state.m_chain_sync.m_sent_getheaders = true; - constexpr int64_t HEADERS_RESPONSE_TIME = 120; // 2 minutes + constexpr auto HEADERS_RESPONSE_TIME{2min}; // Bump the timeout to allow a response, which could clear the timeout // (if the response shows the peer has synced), reset the timeout (if // the peer syncs to the required work but not to our tip), or result @@ -4183,7 +4272,7 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, int64_t time_in_seconds) } } -void PeerManagerImpl::EvictExtraOutboundPeers(int64_t time_in_seconds) +void PeerManagerImpl::EvictExtraOutboundPeers(std::chrono::seconds now) { // If we have any extra block-relay-only peers, disconnect the youngest unless // it's given us a block -- in which case, compare with the second-youngest, and @@ -4192,14 +4281,14 @@ void PeerManagerImpl::EvictExtraOutboundPeers(int64_t time_in_seconds) // to temporarily in order to sync our tip; see net.cpp. // Note that we use higher nodeid as a measure for most recent connection. if (m_connman.GetExtraBlockRelayCount() > 0) { - std::pair youngest_peer{-1, 0}, next_youngest_peer{-1, 0}; + std::pair youngest_peer{-1, 0}, next_youngest_peer{-1, 0}; m_connman.ForEachNode([&](CNode* pnode) { if (!pnode->IsBlockOnlyConn() || pnode->fDisconnect) return; if (pnode->GetId() > youngest_peer.first) { next_youngest_peer = youngest_peer; youngest_peer.first = pnode->GetId(); - youngest_peer.second = pnode->nLastBlockTime; + youngest_peer.second = pnode->m_last_block_time; } }); NodeId to_disconnect = youngest_peer.first; @@ -4217,13 +4306,14 @@ void PeerManagerImpl::EvictExtraOutboundPeers(int64_t time_in_seconds) // valid headers chain with at least as much work as our tip. CNodeState *node_state = State(pnode->GetId()); if (node_state == nullptr || - (time_in_seconds - pnode->nTimeConnected >= MINIMUM_CONNECT_TIME && node_state->nBlocksInFlight == 0)) { + (now - pnode->m_connected >= MINIMUM_CONNECT_TIME && node_state->nBlocksInFlight == 0)) { pnode->fDisconnect = true; - LogPrint(BCLog::NET, "disconnecting extra block-relay-only peer=%d (last block received at time %d)\n", pnode->GetId(), pnode->nLastBlockTime); + LogPrint(BCLog::NET, "disconnecting extra block-relay-only peer=%d (last block received at time %d)\n", + pnode->GetId(), count_seconds(pnode->m_last_block_time)); return true; } else { LogPrint(BCLog::NET, "keeping block-relay-only peer=%d chosen for eviction (connect time: %d, blocks_in_flight: %d)\n", - pnode->GetId(), pnode->nTimeConnected, node_state->nBlocksInFlight); + pnode->GetId(), count_seconds(pnode->m_connected), node_state->nBlocksInFlight); } return false; }); @@ -4263,12 +4353,13 @@ void PeerManagerImpl::EvictExtraOutboundPeers(int64_t time_in_seconds) // Also don't disconnect any peer we're trying to download a // block from. CNodeState &state = *State(pnode->GetId()); - if (time_in_seconds - pnode->nTimeConnected > MINIMUM_CONNECT_TIME && state.nBlocksInFlight == 0) { + if (now - pnode->m_connected > MINIMUM_CONNECT_TIME && state.nBlocksInFlight == 0) { LogPrint(BCLog::NET, "disconnecting extra outbound peer=%d (last block announcement received at time %d)\n", pnode->GetId(), oldest_block_announcement); pnode->fDisconnect = true; return true; } else { - LogPrint(BCLog::NET, "keeping outbound peer=%d chosen for eviction (connect time: %d, blocks_in_flight: %d)\n", pnode->GetId(), pnode->nTimeConnected, state.nBlocksInFlight); + LogPrint(BCLog::NET, "keeping outbound peer=%d chosen for eviction (connect time: %d, blocks_in_flight: %d)\n", + pnode->GetId(), count_seconds(pnode->m_connected), state.nBlocksInFlight); return false; } }); @@ -4288,20 +4379,21 @@ void PeerManagerImpl::CheckForStaleTipAndEvictPeers() { LOCK(cs_main); - int64_t time_in_seconds = GetTime(); + auto now{GetTime()}; - EvictExtraOutboundPeers(time_in_seconds); + EvictExtraOutboundPeers(now); - if (time_in_seconds > m_stale_tip_check_time) { + if (now > m_stale_tip_check_time) { // Check whether our tip is stale, and if so, allow using an extra // outbound peer if (!fImporting && !fReindex && m_connman.GetNetworkActive() && m_connman.GetUseAddrmanOutgoing() && TipMayBeStale()) { - LogPrintf("Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n", time_in_seconds - m_last_tip_update); + LogPrintf("Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n", + count_seconds(now - m_last_tip_update.load())); m_connman.SetTryNewOutboundPeer(true); } else if (m_connman.GetTryNewOutboundPeer()) { m_connman.SetTryNewOutboundPeer(false); } - m_stale_tip_check_time = time_in_seconds + STALE_CHECK_INTERVAL; + m_stale_tip_check_time = now + STALE_CHECK_INTERVAL; } if (!m_initial_sync_finished && CanDirectFetch()) { @@ -4312,9 +4404,10 @@ void PeerManagerImpl::CheckForStaleTipAndEvictPeers() void PeerManagerImpl::MaybeSendPing(CNode& node_to, Peer& peer, std::chrono::microseconds now) { - if (m_connman.ShouldRunInactivityChecks(node_to, std::chrono::duration_cast(now).count()) && + if (m_connman.ShouldRunInactivityChecks(node_to, std::chrono::duration_cast(now)) && peer.m_ping_nonce_sent && - now > peer.m_ping_start.load() + std::chrono::seconds{TIMEOUT_INTERVAL}) { + now > peer.m_ping_start.load() + TIMEOUT_INTERVAL) + { // The ping timeout is using mocktime. To disable the check during // testing, increase -peertimeout. LogPrint(BCLog::NET, "ping timeout: %fs peer=%d\n", 0.000001 * count_microseconds(now - peer.m_ping_start.load()), peer.m_id); @@ -4338,7 +4431,7 @@ void PeerManagerImpl::MaybeSendPing(CNode& node_to, Peer& peer, std::chrono::mic if (pingSend) { uint64_t nonce = 0; while (nonce == 0) { - GetRandBytes((unsigned char*)&nonce, sizeof(nonce)); + GetRandBytes({(unsigned char*)&nonce, sizeof(nonce)}); } peer.m_ping_queued = false; peer.m_ping_start = now; @@ -4375,13 +4468,13 @@ void PeerManagerImpl::MaybeSendAddr(CNode& node, Peer& peer, std::chrono::micros FastRandomContext insecure_rand; PushAddress(peer, *local_addr, insecure_rand); } - peer.m_next_local_addr_send = PoissonNextSend(current_time, AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL); + peer.m_next_local_addr_send = GetExponentialRand(current_time, AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL); } // We sent an `addr` message to this peer recently. Nothing more to do. if (current_time <= peer.m_next_addr_send) return; - peer.m_next_addr_send = PoissonNextSend(current_time, AVG_ADDRESS_BROADCAST_INTERVAL); + peer.m_next_addr_send = GetExponentialRand(current_time, AVG_ADDRESS_BROADCAST_INTERVAL); if (!Assume(peer.m_addrs_to_send.size() <= MAX_ADDR_TO_SEND)) { // Should be impossible since we always check size before adding to @@ -4422,8 +4515,6 @@ void PeerManagerImpl::MaybeSendAddr(CNode& node, Peer& peer, std::chrono::micros void PeerManagerImpl::MaybeSendFeefilter(CNode& pto, std::chrono::microseconds current_time) { - AssertLockHeld(cs_main); - if (m_ignore_incoming_txs) return; if (!pto.m_tx_relay) return; if (pto.GetCommonVersion() < FEEFILTER_VERSION) return; @@ -4453,7 +4544,7 @@ void PeerManagerImpl::MaybeSendFeefilter(CNode& pto, std::chrono::microseconds c m_connman.PushMessage(&pto, CNetMsgMaker(pto.GetCommonVersion()).Make(NetMsgType::FEEFILTER, filterToSend)); pto.m_tx_relay->lastSentFeeFilter = filterToSend; } - pto.m_tx_relay->m_next_send_feefilter = PoissonNextSend(current_time, AVG_FEEFILTER_BROADCAST_INTERVAL); + pto.m_tx_relay->m_next_send_feefilter = GetExponentialRand(current_time, AVG_FEEFILTER_BROADCAST_INTERVAL); } // If the fee filter has changed substantially and it's still more than MAX_FEEFILTER_CHANGE_DELAY // until scheduled broadcast, then move the broadcast to within MAX_FEEFILTER_CHANGE_DELAY. @@ -4517,9 +4608,9 @@ bool PeerManagerImpl::SendMessages(CNode* pto) // If we get here, the outgoing message serialization version is set and can't change. const CNetMsgMaker msgMaker(pto->GetCommonVersion()); - const auto current_time = GetTime(); + const auto current_time{GetTime()}; - if (pto->IsAddrFetchConn() && current_time - std::chrono::seconds(pto->nTimeConnected) > 10 * AVG_ADDRESS_BROADCAST_INTERVAL) { + if (pto->IsAddrFetchConn() && current_time - pto->m_connected > 10 * AVG_ADDRESS_BROADCAST_INTERVAL) { LogPrint(BCLog::NET, "addrfetch connection timeout; disconnecting peer=%d\n", pto->GetId()); pto->fDisconnect = true; return true; @@ -4733,9 +4824,9 @@ bool PeerManagerImpl::SendMessages(CNode* pto) if (pto->m_tx_relay->nNextInvSend < current_time) { fSendTrickle = true; if (pto->IsInboundConn()) { - pto->m_tx_relay->nNextInvSend = m_connman.PoissonNextSendInbound(current_time, INBOUND_INVENTORY_BROADCAST_INTERVAL); + pto->m_tx_relay->nNextInvSend = NextInvToInbounds(current_time, INBOUND_INVENTORY_BROADCAST_INTERVAL); } else { - pto->m_tx_relay->nNextInvSend = PoissonNextSend(current_time, OUTBOUND_INVENTORY_BROADCAST_INTERVAL); + pto->m_tx_relay->nNextInvSend = GetExponentialRand(current_time, OUTBOUND_INVENTORY_BROADCAST_INTERVAL); } } @@ -4754,8 +4845,8 @@ bool PeerManagerImpl::SendMessages(CNode* pto) LOCK(pto->m_tx_relay->cs_filter); for (const auto& txinfo : vtxinfo) { - const uint256& hash = state.m_wtxid_relay ? txinfo.tx->GetWitnessHash() : txinfo.tx->GetHash(); - CInv inv(state.m_wtxid_relay ? MSG_WTX : MSG_TX, hash); + const uint256& hash = peer->m_wtxid_relay ? txinfo.tx->GetWitnessHash() : txinfo.tx->GetHash(); + CInv inv(peer->m_wtxid_relay ? MSG_WTX : MSG_TX, hash); pto->m_tx_relay->setInventoryTxToSend.erase(hash); // Don't send transactions that peers will not put into their mempool if (txinfo.fee < filterrate.GetFee(txinfo.vsize)) { @@ -4786,7 +4877,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) const CFeeRate filterrate{pto->m_tx_relay->minFeeFilter.load()}; // Topologically and fee-rate sort the inventory we send for privacy and priority reasons. // A heap is used so that not all items need sorting if only a few are being sent. - CompareInvMempoolOrder compareInvMempoolOrder(&m_mempool, state.m_wtxid_relay); + CompareInvMempoolOrder compareInvMempoolOrder(&m_mempool, peer->m_wtxid_relay); std::make_heap(vInvTx.begin(), vInvTx.end(), compareInvMempoolOrder); // No reason to drain out at many times the network's capacity, // especially since we have many peers and some will draw much shorter delays. @@ -4798,7 +4889,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) std::set::iterator it = vInvTx.back(); vInvTx.pop_back(); uint256 hash = *it; - CInv inv(state.m_wtxid_relay ? MSG_WTX : MSG_TX, hash); + CInv inv(peer->m_wtxid_relay ? MSG_WTX : MSG_TX, hash); // Remove it from the to-be-sent set pto->m_tx_relay->setInventoryTxToSend.erase(it); // Check if not in the filter already @@ -4916,7 +5007,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) // Check that outbound peers have reasonable chains // GetTime() is used by this anti-DoS logic so we can test this using mocktime - ConsiderEviction(*pto, GetTime()); + ConsiderEviction(*pto, GetTime()); // // Message: getdata (blocks) @@ -4970,8 +5061,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) if (!vGetData.empty()) m_connman.PushMessage(pto, msgMaker.Make(NetMsgType::GETDATA, vGetData)); - - MaybeSendFeefilter(*pto, current_time); } // release cs_main + MaybeSendFeefilter(*pto, current_time); return true; } diff --git a/src/net_processing.h b/src/net_processing.h index d2b73dc158..fcc47688e4 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -42,6 +42,15 @@ class PeerManager : public CValidationInterface, public NetEventsInterface CTxMemPool& pool, bool ignore_incoming_txs); virtual ~PeerManager() { } + /** + * Attempt to manually fetch block from a given peer. We must already have the header. + * + * @param[in] peer_id The peer id + * @param[in] block_index The blockindex + * @returns std::nullopt if a request was successfully made, otherwise an error message + */ + virtual std::optional FetchBlock(NodeId peer_id, const CBlockIndex& block_index) = 0; + /** Begin running background tasks, should only be called once */ virtual void StartScheduledTasks(CScheduler& scheduler) = 0; diff --git a/src/netaddress.cpp b/src/netaddress.cpp index f9fff5a6d5..a787e5672d 100644 --- a/src/netaddress.cpp +++ b/src/netaddress.cpp @@ -196,7 +196,7 @@ static void Checksum(Span addr_pubkey, uint8_t (&checksum)[CHECKS SHA3_256 hasher; - hasher.Write(MakeSpan(prefix).first(prefix_len)); + hasher.Write(Span{prefix}.first(prefix_len)); hasher.Write(addr_pubkey); hasher.Write(VERSION); @@ -693,13 +693,13 @@ uint32_t CNetAddr::GetLinkedIPv4() const return ReadBE32(m_addr.data()); } else if (IsRFC6052() || IsRFC6145()) { // mapped IPv4, SIIT translated IPv4: the IPv4 address is the last 4 bytes of the address - return ReadBE32(MakeSpan(m_addr).last(ADDR_IPV4_SIZE).data()); + return ReadBE32(Span{m_addr}.last(ADDR_IPV4_SIZE).data()); } else if (IsRFC3964()) { // 6to4 tunneled IPv4: the IPv4 address is in bytes 2-6 - return ReadBE32(MakeSpan(m_addr).subspan(2, ADDR_IPV4_SIZE).data()); + return ReadBE32(Span{m_addr}.subspan(2, ADDR_IPV4_SIZE).data()); } else if (IsRFC4380()) { // Teredo tunneled IPv4: the IPv4 address is in the last 4 bytes of the address, but bitflipped - return ~ReadBE32(MakeSpan(m_addr).last(ADDR_IPV4_SIZE).data()); + return ~ReadBE32(Span{m_addr}.last(ADDR_IPV4_SIZE).data()); } assert(false); } diff --git a/src/netaddress.h b/src/netaddress.h index 80d341cd65..75ae4157fb 100644 --- a/src/netaddress.h +++ b/src/netaddress.h @@ -427,7 +427,7 @@ class CNetAddr if (SetNetFromBIP155Network(bip155_net, address_size)) { m_addr.resize(address_size); - s >> MakeSpan(m_addr); + s >> Span{m_addr}; if (m_net != NET_IPV6) { return; diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index 05ed3eda8f..3aa251662e 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -443,17 +443,6 @@ bool ReadRawBlockFromDisk(std::vector& block, const FlatFilePos& pos, c return true; } -bool ReadRawBlockFromDisk(std::vector& block, const CBlockIndex* pindex, const CMessageHeader::MessageStartChars& message_start) -{ - FlatFilePos block_pos; - { - LOCK(cs_main); - block_pos = pindex->GetBlockPos(); - } - - return ReadRawBlockFromDisk(block, block_pos, message_start); -} - /** Store block on disk. If dbp is non-nullptr, the file is known to already reside on disk */ FlatFilePos SaveBlockToDisk(const CBlock& block, int nHeight, CChain& active_chain, const CChainParams& chainparams, const FlatFilePos* dbp) { diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h index d651d89bf5..2d312958fd 100644 --- a/src/node/blockstorage.h +++ b/src/node/blockstorage.h @@ -70,7 +70,6 @@ void UnlinkPrunedFiles(const std::set& setFilesToPrune); bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::Params& consensusParams); bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams); bool ReadRawBlockFromDisk(std::vector& block, const FlatFilePos& pos, const CMessageHeader::MessageStartChars& message_start); -bool ReadRawBlockFromDisk(std::vector& block, const CBlockIndex* pindex, const CMessageHeader::MessageStartChars& message_start); bool UndoReadFromDisk(CBlockUndo& blockundo, const CBlockIndex* pindex); bool WriteUndoDataForBlock(const CBlockUndo& blockundo, BlockValidationState& state, CBlockIndex* pindex, const CChainParams& chainparams); diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp index 9f879b977b..fa7014d6a7 100644 --- a/src/node/interfaces.cpp +++ b/src/node/interfaces.cpp @@ -471,8 +471,8 @@ class ChainImpl : public Chain std::optional findLocatorFork(const CBlockLocator& locator) override { LOCK(cs_main); - const CChain& active = Assert(m_node.chainman)->ActiveChain(); - if (CBlockIndex* fork = m_node.chainman->m_blockman.FindForkInGlobalIndex(active, locator)) { + const CChainState& active = Assert(m_node.chainman)->ActiveChainstate(); + if (CBlockIndex* fork = active.FindForkInGlobalIndex(locator)) { return fork->nHeight; } return std::nullopt; diff --git a/src/policy/policy.cpp b/src/policy/policy.cpp index fced397e51..78f6892e24 100644 --- a/src/policy/policy.cpp +++ b/src/policy/policy.cpp @@ -254,7 +254,7 @@ bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs) // - No annexes if (witnessversion == 1 && witnessprogram.size() == WITNESS_V1_TAPROOT_SIZE && !p2sh) { // Taproot spend (non-P2SH-wrapped, version 1, witness program size 32; see BIP 341) - auto stack = MakeSpan(tx.vin[i].scriptWitness.stack); + Span stack{tx.vin[i].scriptWitness.stack}; if (stack.size() >= 2 && !stack.back().empty() && stack.back()[0] == ANNEX_TAG) { // Annexes are nonstandard as long as no semantics are defined for them. return false; diff --git a/src/psbt.h b/src/psbt.h index 0a42fe7626..53f2aa2686 100644 --- a/src/psbt.h +++ b/src/psbt.h @@ -81,7 +81,7 @@ struct PSBTInput if (final_script_sig.empty() && final_script_witness.IsNull()) { // Write any partial signatures for (auto sig_pair : partial_sigs) { - SerializeToVector(s, PSBT_IN_PARTIAL_SIG, MakeSpan(sig_pair.second.first)); + SerializeToVector(s, PSBT_IN_PARTIAL_SIG, Span{sig_pair.second.first}); s << sig_pair.second.second; } diff --git a/src/pubkey.h b/src/pubkey.h index 4995732def..ba8b6f2221 100644 --- a/src/pubkey.h +++ b/src/pubkey.h @@ -159,13 +159,13 @@ class CPubKey //! Get the KeyID of this public key (hash of its serialization) CKeyID GetID() const { - return CKeyID(Hash160(MakeSpan(vch).first(size()))); + return CKeyID(Hash160(Span{vch}.first(size()))); } //! Get the 256-bit hash of this public key. uint256 GetHash() const { - return Hash(MakeSpan(vch).first(size())); + return Hash(Span{vch}.first(size())); } /* diff --git a/src/qt/BGLamountfield.h b/src/qt/BGLamountfield.h index e916e024d8..0b78e578e2 100644 --- a/src/qt/BGLamountfield.h +++ b/src/qt/BGLamountfield.h @@ -22,7 +22,7 @@ class BGLAmountField: public QWidget Q_OBJECT // ugly hack: for some unknown reason CAmount (instead of qint64) does not work here as expected - // discussion: https://github.com/BGL/BGL/pull/5117 + // discussion: https://github.com/bitcoin/bitcoin/pull/5117 Q_PROPERTY(qint64 value READ value WRITE setValue NOTIFY valueChanged USER true) public: diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 87f6608c9d..006b6da53b 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -19,6 +19,7 @@ #include